리눅스 디렉터리 구조

sesame·2021년 12월 24일
0

교육

목록 보기
6/46

모든 디렉토리는 루트(Root, /)디렉토리를 기반으로 bin, boot, dev 등의 디렉토리를 생성한다.

/루트 디렉토리
/bin (binary)기본적인 실행명령
/bootLILO 등 부팅에 관련된 파일
/dev (device)장치 파일 모음
/etc시스템 설정파일
/home사용자 홈 디렉토리
/lib (library)c 라이브러리
/mnt (MouNT)임시 마운트용 디렉토리
/proc (process)시스템 정보를 가진 가상 디렉토리
/root루트 사용자의 홈 디렉토리
/sbin (system b..)시스템 관리용 실행파일
/tmp (Temporary)임시파일 디렉토리
/usr (user)애플리케이션이 설치되어 있는 디렉토리
/var (variable)시스템에서 운영되는 임시파일, 로그파일을 가지고 있음

/usr

한대의 강력한 시스템을 준비해서 /usr에 필요한 소프트웨어나 파일을 놓고, 복수의 시스템이 원격 /usr을 마운트해서 사용

  • 복수의 컴퓨터에서 동일한 프로그램이나 라이브러리를 사용할 수 있음
  • /usr에 넣는 데이터는 공유할 수 있는 것만으로 해야함
  • usr은 User Service and Routines

/usr/src

  • 시스템에서 사용되는 명령어의 소스코드나 리눅스 커널의 소스코드 보관
  • 직접 작성한 프로그램 소스는 여기에 보관하면 안된다.

/usr/include

  • 시스템의 헤더파일
  • 커널의 헤더파일이 /usr/include/linux에 보관됨
  • 전통적 유닉스 계열의 운영체제에서는 /usr/include/sys 밑에 커널의 헤더파일이 보관되지만, 리눅스는 커널과 libc의 관리자가 다르기 때문에 약간 다른 구조를 띤다.

/usr/share

  • /usr/share에는 아키텍처(CPU 종류)에 의존하지 않아서 서로 다른 아키텍처에서도 공유할 수 있는 파일들이 있다.
  • ex) 도큐먼트(man, info)
  • /usr/share/man 디렉터리에 man1, man2, ... 파일 이름은 '도큐먼트 이름.섹션'형식(flock.2.gz)
  • man page는 roff라는 텍스트 형식으로 작성되어있다.

/usr/local

/usr을 거울로 비춘 것처럼 bin, sbin, lib, share 등의 디렉터리가 줄지어 있다.

  • /usr과 다른 점으나 파일의 관리 주체
  • /usr은 배포판이 관리
  • /usr/local은 각 시스템의 관리자에게 관리 책임
  • 즉 각 시스템 관리자는 /usr 바로 밑에 있는 파일을 배치하거나 삭제하지 말아야하며, 배포판은 /usr/local 밑에 파일을 배치해서는 안된다.

어느 한가지 스타일로 통일되지 않은 이유는 각각의 장단점이 있기 때문
1. 리눅스에서는 일반적으로 /usr/local 밑에 bin이나 lib 디렉터리가 하나 있어 모든 패키지가 그곳에 배치 => PATH 설정이 편리, but 다른 패키지의 파일을 실수로 지워버릴 가능성이 있어 삭제가 번거로워짐
2. 운영체제에 따라 /usr/local/패키지명 밑에 패키지별로 bin이나 lib 디렉터리를 배치하는 경우
3. 최근에는 /opt/패키지명으로 같은 목적으로 사용하는 경우
=> 2,3은 설치하면 패키지 관리는 편해지지만 개별 디렉터리에 PATH를 걸지 않으면 안된다.

/var

자주 바뀌는 파일을 저장하기 위해 사용

  • 여러 컴퓨터에서 공유하는 파일을 저장하기에는 적합하지 않음

/var/log

주로 서버의 프로세스가 쓰는 로그파일이 저장됨

로그파일
프로그램에서 발생하는 이벤트가 기록되는 파일
ex) 메일 서버의 경우 메일을 수신하거나 송신할 때 로그를 남김

/var/spool

사용자 메일(/var/spool/mail)이나 프린트 입력(/var/spool/cups)이 일시적으로 저장

/var/run

실행중인 서버 프로세스 ID가 저장된 PID 파일이 저장됨
서버를 만들 때는 기동시에 이 디렉터리에다 프로세스 ID 기록
종료할 때는 제거해주는 것이 매너

inetd라는 서버의 경우, 기동 시 /var/run/inetd.pid에 프로세스 ID 기록

  • 내용은 프로세스 ID가 텍스트로 적혀 있을 뿐이어서 셸에서도 쉽게 활용 가능
# cat /var/run/inetd.pid
76

이를 응용해 inetd에 HUP 시그널을 보내 설정 파일을 다시 읽도록 할 수 있음

# kill -HUP `cat /var/run/inetd.pid`
  • 역따옴표 사용 시 해당 부분을 먼저 실행한 출력값이 그 자리에 들어감

  • 즉, 이 경우는 'kill -HUP 76'을 실행한 것

  • 최근에는 /var/run이 /run으로 이동하고, /var/run은 /run에 대한 심볼릭 링크가 됨

  • /run이 새롭게 추가된 이유: 운영체제 재부팅 시 사라져도 좋은 디렉터리를 /var에서부터 분리하기 위함

/etc

• 각 시스템의 설정 파일이 보관됨

  • /etc/fstab, /etc/hosts

• 옛날에는 이름 그대로 etc(기타 등등)의 의미로 사용됨

  • cron, init 등이 보관됨
  • 지금도 일부 유닉스는 /etc/cron 이라는 심볼릭 링크 존재

dev(장치 파일 시스템)

• 디바이스 파일이 보관됨

  • 유닉스의 전통적인 방식으로는 세상에 존재하는 모든 종류의 디바이스 파일을 보관
  • 리눅스는 2.4 버전 이후, 시스템에 존재하는 디바이스 파일만을 그때마다 작성하는 devfs(Device File System) 도입
  • devfs가 동적 디바이스(USB 등) 대응이 잘 이뤄지지 않아 2.6 버전부터는 udev 구조 도입

• devfs, udev가 등장한 이유

  • 예전에 비해 커널이 지원하는 하드웨어가 너무 많아짐
  • 사전에 모든 하드웨어에 대응하는 디바이스 파일을 만드는 것이 부담이 됨
  • c.f. devfs는 커널의 일부로, udev는 커널 밖에 구현되어 있음
/디렉토리
/dev/fd폴로피 디스크
/dev/had마스터 IDE 하드 디스크
/dev/sdaSCSI 및 SATA 하드 디스크
/dev/cdromCD ROM 드라이버
/dev/mouse마우스
/dev/hdb슬레이브 IDE 하드 디스크

proc

실행중인 리눅스 정보를 가지는 디렉토리로, CPU 및 메모리 사용량, 파티션 정보, 입출력 DMA등과 같은 정보와 현재 리눅스 운영체제의 정보도 가지고 있다.

• 일반적으로 프로세스 파일 시스템(Process File System, procfs)이 탑재됨
• 프로세스 파일 시스템은 말 그대로 프로세스를 파일 시스템에 표현한 것

  • process id가 1인 프로세스의 정보를 얻고 싶으면 디렉터리 proc/1을 보면 됨
  • cat 명령어 등을 사용해 추력하면 프로세스들의 다양한 정보를 실시간으로 얻을 수 있음

• 프로세스 파일 시스템은 원래는 디버깅을 위해 만들어짐

  • 현재는 ps와 같은 프로세스 관련 명령어들이 활용
  • 또한 프로세스 정보 이외에도 커널의 정보를 실시간으로 출략하는 용도로도 사용

• 디렉터리 내에 이름이 숫자만으로 된 디렉터리 외의 다른 파일들 존재

  • 다른 파일들은 프로세스와 관계 없는 정보

• 프로세스 파일 시스템을 통해 커널에 뭔가 지정할 수도 있음

  • /proc/sys/kernal/hostname 파일을 읽으면 현재 호스트 이름을 얻을 수 있음
  • 반대로 호스트 이름을 쓰면 그대로 반영됨
/디렉토리
/proc/buddyinfo버디 할당자 정보
/proc/cmdline시스템 부팅 중 커널에 제출된 명령 내용
/proc/cpuinfo시스템 CPU 정보
/proc/devices디바이스들의 목록
/proc/diskstats디스크의 상태 및 파티션 정보
/proc/dmaDMA 채널
/proc/filesystems파일시스템 목록
/proc/interrupts인더럽트에 대한 통계
/proc/iomem할당된 메모리 영역
/proc/ioport입출력 포트 정보
/proc/kallsyms심볼들의 목록
/proc/loadavgCPU부하와 관련된 정보
/proc/locks잠금 파일
/proc/mdstatRAID 시스템의 정보를 제공
/proc/meminfo시스템 메모리 정보
/proc/modules사용중인 모듈들
/proc/partitions파티션 정보
/proc/slabinfo슬랩 할당기 통계정보
/proc/swaps스왑 파티션에 대한 정보
/proc/uptime시스템이 부팅된 이후의 시간

/sys

• procfs에 프로세스와 관계 없는 정보들이 탑재되기 시작하며, 시스템 관련 정보를 별도로 제공하기 위해 sysfs라는 파일 시스템 추가됨(버전 2.6-)
• sysfs를 탑재하는 디렉터리가 /sys
• 시스템에 존재하는 디바이스, 디바이스 드라이버 정보를 얻을 수 있음

/boot

• 유닉스의 전통적인 방식으로는, 커널 프로그램을 루트 디렉터리에 보관
• 최근에 리눅스는 커널 프로그램을 /boot에 보관
• 리눅스 커널은 vmlinuz라는 파일에 담겨 있음

6. /root

• 슈퍼 사용자의 홈 디렉터리

/tmp, /var/tmp

• 임시로 파일을 만들고 싶을 때 사용하는 디렉터리
• /tmp는 리부팅하면 삭제될 수 있으나, /var/tmp는 리부팅해도 삭제되지 않음

• 일반 사용자의 홈 디렉터리는 셸에서 환경변수 #HOME으로 접근 가능

• 위치는 보통 '/home/사용자명'이지만, 꼭 그런 것만은 아님

  • 큰 조직에서는 /home1, /home2처럼 뒤에 숫자를 붙이기도

• 따라서 프로그램에서 홈 디렉터리 엑세스 하는 경우는 /home이라고 가정하여 하드코딩하는 것이 아니라, 전용 API 사용해야

0개의 댓글