포스트

[Linux] Filesystem Hierarchy Standard (FHS)

파일시스템 계층 표준(FHS)은 디렉토리 이름, 위치, 권한을 정의해놓은 파일시스템 구조입니다. 표준을 기준으로 배포판 리눅스에서는 각 리눅스의 용도에 맞게 디렉토리를 추가/확장하여 사용합니다. 각 디렉토리 별 용도에 대해 작성합니다.

/boot

Linux 커널 부팅에 필요한 정적 파일이 있는 디렉토리입니다. 시스템 부팅을 위해 필수적인 디렉토리입니다.

/dev

시스템에 연결된 하드웨어 장치를 파일시스템으로 보기 위해선 /dev 디렉토리를 참고합니다. 해당 디렉토리 또한 시스템 작동에 필수적인 디렉토리입니다.

/etc

/etc 디렉토리는 config 파일을 보관하기위해 필요한 디렉토리이며, 해당 디렉토리에 바이너리 파일을 배치하는 것은 권장되지 않습니다. 바이너리 파일은 /sbin이나 /bin 디렉토리에 배치하는 것이 좋습니다.

X11/ skel/ 디렉토리는 /etc의 하위 디렉토리이며, X11/ 디렉토리의 경우 X Window System을 위해 사용됩니다. skel/ 디렉토리는 스켈레톤 사용자 파일을 위해 사용되며, 사용자를 생성했을 때 홈 디렉토리에 사용자 파일을 추가하기위해 사용됩니다.

/lib

/sbin, /bin 디렉토리에 있는 바이너리를 실행하기위한 라이브러리는 /lib 디렉토리에 저장됩니다. 특히 공유라이브러리의 이미지의 경우 시스템을 부팅하고 루트 파일 시스템 내에서 명령을 실행할 때 중요한 역할을 수행합니다.

/media

/media 디렉토리에는 일반적으로 CD-ROM이나 Zip 디스크 등 이동식 미디어의 마운트 지점으로 사용됩니다. 따라서 ISO 파일과 같은 미디어 파일을 마운트할 때는 마운트 지점을 /media로 지정하는 것이 좋습니다.

/mnt

/mnt 디렉토리는 NFS 파일 시스템 마운트와 같은 일시적인 마운트 파일 시스템을 위해 예약되어있습니다. USB와 같은 이동식 디스크의 경우 /mnt에 마운트합니다.

/opt

/opt 디렉토리는 대규모의 정적 애플리케이션 소프트웨어 패키지를 저장하는데 사용됩니다. 예를 들면 오픈시프트 프로그램을 설치할 때, 필요한 패키지 파일들은 아래와 같이 /opt 디렉토리의 하위 디렉토리를 생성하여 저장합니다.

/opt/openshift/ /opt/openshift/bin /opt/openshift/man

대형 프로그램을 설치하기위한 필요한 하위 프로그램도 같이 저장하며, 유사한 디렉토리 구조를 가지도록 할 수 있습니다.

/opt/openshift/mirror-registry /opt/openshift/mirror-image

/proc

/proc 디렉토리에는 커널에서 정보를 추출하거나 커널로 정보를 보내는 특수 파일이 있습니다. 리눅스 서버를 점검하거나, 트러블 슈팅, 성능 확인 등 커널에서 제공하는 정보를 가공할 수 있으며, 응용할 수 있는 방법이 다양하고 많습니다. 예를 들어 커널이 가지고 있는 메모리 정보를 출력하려면 아래의 명령어를 입력합니다.

cat /proc/meminfo

/sbin

/sbin 디렉토리는 루트 사용자가 사용하는 실행 파일을 저장해놓은 디렉토리입니다. 해당 디렉토리의 실행 파일은 부팅 시에만 사용되며, 시스템 복구 작업을 수행합니다. /bin에 있는 바이너리 파일 외에도 시스템을 부팅, 복원, 복구하는데 필요한 필수 바이너리가 포함되어있습니다.

참고로 마운트 된 후 실행되는 프로그램은 /usr/sbin에 배치되며, 로컬에 설치된 시스템 관리 프로그램은 /usr/local/sbin에 배치됩니다.

/sys

USB와 같이 전원이 켜져있는 상태에서도 장치를 연결하거나 제거할 수 있는 핫플러그 장치가 등장하면서 이를 지원하는 용도로 사용하는 디렉토리입니다. /sys 디렉토리는 /proc 디렉토리와 유사한 정보를 제공하지만 핫플러그 장치와 관련된 특정 디바이스 정보의 계층과 관련되 정보를 볼 수 있습니다.

/usr

/usr 디렉토리는 여러 머신에서 공유할 수 있느 파일을 저장한 디렉토리입니다. 자체 파티션에 위치해있으며 읽기 전용으로 마운트됩니다. /usr 디렉토리는 최소한 아래의 하위 디렉토리를 가지고 있어야합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/usr 
  |- bin/                   # 실행가능한 파일 저장
  |- etc/                   # 시스템 전체 구성 파일 저장
  |- games/                 # 게임용 파일 저장
  |- include/               # C 헤더 파일 저장
  |- kerberos/              # 켈베로스 관련 파일 & 바이너리 저장
  |- lib/                   # 오브젝트, 라이브러리 파일 저장(사용자 직접 사용 불가)
  |- libexec/	              # 다른 프로그램에서 호출하는 헬퍼 프로그램 저장
  |- local/
  |- sbin/                  # /sbin 디렉토리에 속하지 않는 시스템 관리 바이너리 
  |- share/                 # 아키텍처에 특화되지 않은 파일 저장
  |- src/                   # 소스코드용
  |- tmp -> ../var/tmp/ 
  |- X11R6/                 # X Window System 용 파일 저장

/usr/local

/usr/local 디렉토리는 시스템 관리자가 로컬에 소프트웨어를 설치할 때 사용하는데, 소프트웨어가 업데이트될 때 덮어쓰기로부터 안전해야하는 디렉토리입니다.

구조는 /usr/과 비슷하며, 하위 디렉토리 구조는 아래와 같이 되어있습니다.

1
2
3
4
5
6
7
8
9
10
/usr/local 
       |- bin/ 
       |- etc/ 
       |- games/ 
       |- include/ 
       |- lib/ 
       |- libexec/ 
       |- sbin/ 
       |- share/ 
       |- src/

/usr/local 디렉토리의 경우 배포판 리눅스에 따라 용도가 달라질 수 있는데, RHEL(RedHat Enterprise Linux)의 경우 서버에 로컬 소프트웨어를 설치할 때 사용되는 디렉토리로만 정의하고 있으며, 소프트웨어 업그레이드로부터 안전하게 유지되어야 하는 역할의 경우 yum과 같은 RPM 패키지 관리자로 안전하게 수행할 수 있어 /usr/local 디렉토리의 역할이 FHS에서 정의한 만큼 중요성을 가지진 않습니다.

/var

FHS에서는 /usr/디렉토리가 RO(Read-Only)로 마운트 되는 것을 요구하므로, 로그파일을 작성하거나 spool/ lock/ 디렉토리에 작성이 필요한 프로그램은 /var 디렉토리를 사용하여 파일을 작성해야합니다.

/var 파일은 다양한 데이터파일을 가지고있으며, spool 디렉토리와 파일, 관리파일 및 로깅 데이터, 임시 파일이 저장됩니다.

일반적으로 시스템 로그 파일을 확인할 때(messages lastlog), RPM 시스템 데이터베이스를 확인해야할 때, 잠금 파일 확인이나 /var/spool 디렉토리를 통해 특정 작업을 예약하거나 관리하기위해 디렉토리에 접근합니다.

References

이 포스트는 저작권자의 CC BY 4.0 라이센스를 따릅니다.