[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
디렉토리를 통해 특정 작업을 예약하거나 관리하기위해 디렉토리에 접근합니다.