본문 바로가기
리눅스

Filesystem Hierarchy Standard

by 다움위키 2023. 12. 8.

파일시스템 계층 표준(Filesystem Hierarchy Standard, 줄여서 FHS)은 리눅스 배포판의 디렉터리 구조와 디렉터리 컨텐츠를 정의합니다. 그것은 리눅스 재단에서 관리됩니다. 최신 버전은 2015년 6월 3일에 출시된 3.0입니다.

리눅스 배포판 (및 다른 운영 시스템)은 자발적으로 FHS를 준수할 수 있습니다. Freedesktop.org 프로젝트는 다양한 환경 변수와 일부 사용자-특정 응용 프로그램 파일이 저장되어야 하는 경로로 FHS를 확장하기 위해 의도된 XDG 기본 디렉토리 사양이라고 불리는 사양을 제공합니다.

Directory structure

FHS에서, 모든 파일과 디렉터리는 심지어 다른 물리적 장치나 가상 장치에 저장되어 있더라도 루트 디렉터리 / 아래에 나타납니다. 이들 디렉토리 중 일부는 X 윈도우 시스템과 같은 특정 하위시스템이 설치된 경우에만 특정 시스템에 존재합니다.

이들 디렉토리의 대부분은 모든 유닉스-계열 운영 시스템에 존재하고 일반적으로 거의 같은 방식으로 사용됩니다; 어쨌든, 여기에 있는 설명은 FHS를 위해 특별히 사용된 것이고 리눅스 이외의 플랫폼에 대해서는 신뢰할 수 있는 것으로 고려되지 않습니다.

디렉토리 설명
/ 전체 파일 시스템 계층의 주요 계층 루트 및 루트 디렉터리.
/bin 모든 사용자에 대해 시스템 시작 또는 복구를 포함하여, 단일-사용자 모드에서 사용할 수 있어야 하는 필수 명령 실행-파일 (예를 들어, cat, ls, cp).
/boot 부트 로더 파일 (예를 들어, 커널, initrd).
/dev 디바이스 파일 (예를 들어, /dev/null, /dev/disk0, /dev/sda1, /dev/tty, /dev/random).
/etc 호스트-특정 시스템-전체 구성 파일.
이름 자체의 의미에 대해 논란이 있어왔습니다. 벨 연구소에서 유닉스 구현 문서의 초기 버전에서, /etc는 etcetera 디렉토리로 언급되었는데, 왜냐하면 이 디렉토리는 역사적으로 다른 곳에 속하지 않은 모든 것을 보관하고 있었기 때문입니다 (어쨌든, FHS는 /etc를 정적 구성 파일로 제한하고 실행-파일을 포함할 수 없습니다). 초기 문서 발행 이후, 디렉토리 이름은 다양한 방식으로 다시 설명되어져 왔습니다. 최근 해석에는 "Editable Text Configuration" 또는 "Extended Tool Chest"와 같은 반의어를 포함합니다.

/etc/opt /opt에 저장된 추가 기능 패키지의 구성 파일.
/etc/sgml SGML을 처리하는 소프트웨어, 예를 들어 카탈로그에 대한, 구성 파일.
/etc/X11 X 윈도우 시스템, 버전 11에 대한 구성 파일.
/etc/xml XML을 처리하는 소프트웨어, 예를 들어 카탈로그에 대한 구성 파일.
/home 저장된 파일, 개인 설정 등을 포함하는 사용자의 홈 디렉토리.
/lib /bin 및 /sbin의 바이너리에 필수적인 라이브러리.
/lib<qual> 대체 형식 필수 라이브러리. 이것들은 전형적으로 명령어 집합32비트64비트 버전을 지원하는 시스템과 같은 둘 이상의 실행 코드 형식을 지원하는 시스템에서 사용됩니다. 그러한 디렉토리는 선택 사항이지만, 만약 그것이 존재하면, 몇 가지 요구 사항을 가집니다.
/media CD-ROM과 같은 이동식 미디어의 마운트 지점 (2004년 FHS-2.3에 나타남).
/mnt 임시로 마운트된 파일시스템.
/opt 애드-온 응용프로그램 소프트웨어 패키지.
/proc 프로세스 및 커널 정보를 파일로 제공하는 가상 파일시스템. 리눅스에서, procfs 마운트에 해당합니다. 일반적으로, 시스템에 의해, 즉시 자동으로 생성되고 채워집니다.
/root 루트 사용자에 대한 홈 디렉토리.
/run 런-타임 변수 데이터: 마지막 부팅 이후 실행 중인 시스템에 대한 정보, 예를 들어, 현재 로그인한 사용자 및 실행 중인 데몬. 이 디렉토리 아래에 있는 파일은 부트 프로세스 시작 시 제거되거나 잘려야 하지만, 이것은 이 디렉토리를 임시 파일시스템 (tmpfs)으로 제공하는 시스템에서는 필요하지 않습니다.
/sbin 필수 시스테 바이너리 (예를 들어, fsck, init, route).
/srv 웹 서버에 대한 데이터와 스크립트, FTP 서버에 의해 제공된 데이터, 및 버전 제어 시스템에 대한 저장소와 같이 이 시스템에 의해 제공된 사이트-지정 데이터 (2004년 FHS-2.3에 나타남).
/sys 장치, 드라이버 및 일부 커널 기능에 대한 정보를 포함합니다.
/tmp 임시 파일에 대한 디렉토리 (역시 /var/tmp 참조). 종종 시스템 재부팅 사이에 보존되지 않고 크기가 심하게 제한될 수 있습니다.
/usr 읽기-전용 사용자 데이터에 대한 보조 계층; (다중-)사용자 유틸리티 및 응용 프로그램의 대부분을 포함합니다. 공유 가능하고 읽기 전용이어야 합니다.
/usr/bin 비-필수 명령 바이너리 (단일-사용자 모드에서는 필요하지 않음); 모든 사용자를 위함.
/usr/include 표준 include 파일.
/usr/lib /usr/bin와 /usr/sbin에 있는 바이너리에 대한 라이브러리.
/usr/lib<qual> 대체-형식 라이브러리 (예를 들어, 64-비트 기계 위에 32-비트 라이브러리에 대한 /usr/lib32 (선택적)).
/usr/local 이 호스트에 지정된 로컬 데이터의 삼차 계층. 전형적으로 추가 하위디렉토리를 가집니다 (예를 들어, bin, lib, share).
/usr/sbin 비-필수 시스템 바이너리 (예를 들어, 다양한 네트워크 서비스에 대한 데몬).
/usr/share 아키텍처-독립적 (공유) 데이터.
/usr/src 소스 코드 (예를 들어, 헤더 파일을 갖는 커널 소스 코드).
/usr/X11R6 X 윈도우 시스템, 버전 11, 릴리즈 6 (FHS-2.3까지, 선택적).
/var 변하는 파일: 로그, 스풀 파일, 및 임시 전자-우편 파일과 같이 시스템의 정상적인 작동 중에 내용이 계속 변경될 것으로 예상되는 파일.
/var/cache 응용 프로그램 캐시 데이터. 그러한 데이터는 시간이 많이 걸리는 I/O 또는 계산의 결과로 지역적으로 생성됩니다. 응용 프로그램은 데이터를 재생성하거나 복원할 수 있어야 합니다. 캐시된 파일은 데이터 손실없이 삭제될 수 있습니다.
/var/lib 상태 정보. 프로그램이 실행될 때 수정되는 영구 데이터 (예를 들어, 데이터베이스, 패키징 시스템 메타데이터 등).
/var/lock 잠금 파일. 현재 사용 중인 자원을 추적하는 파일.
/var/log 로그 파일. 다양한 로그.
/var/mail 우편함 파일. 일부 배포판에서, 이들 파일이 더 이상 사용되지 않는 /var/spool/mail에 위치될 수 있습니다.
/var/opt /opt에 저장된 애드-온 패키지로부터 변하는 데이터.
/var/run 실행-시간 변하는 데이터. 이 디렉토리는 부팅 이후 시스템을 설명하는 시스템 정보 데이터를 포함합니다.
FHS 3.0에서, /var/run는 /run에 의해 대체됩니다; 시스템은 계속해서 /var/run 디렉토리를 제공하거나 역호환성을 위해 /var/run에서 /run으로의 심볼릭 링크를 제공해야 합니다.
/var/spool 처리 대기 중인 임무에 대한 스풀 (예를 들어, 인쇄 대기열 및 발신 우편 대기열).
/var/spool/mail 사용자의 사서함에 대해 더 이상 사용되지 않는 위치.
/var/tmp 재부팅 사이에 보존되어야 할 임시 파일.

FHS compliance

대부분의 리눅스 배포판은 파일시스템 계층 표준을 따르고 FHS 준수를 유지하기 위해 자체 정책을 선언합니다. GoboLinuxNixOS는 의도적으로 호환되지 않는 파일 시스템 구현의 예제를 제공합니다.

일부 배포판은 일반적으로 표준을 따르지만 일부 영역에서는 표준에서 벗어납니다. FHS는 "후행 표준"이고, 따라서 특정 시점의 일반적인 관행을 문서화합니다. 물론, 시대가 변하고, 배포판 목표와 요구 사항에 따라 실험이 필요합니다. 몇 가지 공통적인 편차는 다음을 포함합니다:

  • 최신 리눅스 배포판은 시스템에 연결된 장치를 저장하고 수정할 수 있는 가상 파일시스템 (sysfs, procfs인 /proc에 비교됨)으로 /sys 디렉토리를 포함하고 있지만, 많은 전통적인 유닉스-계열 운영 시스템은 /sys를 커널 소스 트리에 대한 심볼릭 링크로 사용합니다.
  • 많은 최신의 유닉스-계열 시스템 (예를 들어, 포트 시스템을 통한 FreeBSD)은 타사 패키지를 /usr/local에 설치하지만, /usr에서 운영 시스템의 일부로 고려된 코드를 유지합니다.
  • 일부 리눅스 배포판은 더 이상 /lib과 /usr/lib를 구분하지 않고 /usr/lib에 심볼릭 링크된 /lib를 가집니다.
  • 일부 리눅스 배포판은 더 이상 /bin과 /usr/bin 및 /sbin과 /usr/sbin을 구분하지 않습니다. 그것들은 /bin을 /usr/bin으로, /sbin을 /usr/sbin으로 심볼릭 링크할 수 있습니다. 다른 배포판은 4개를 모두 통합하여, 그것들을 /usr/bin에 심볼릭 링크합니다.

최신 리눅스 배포판은 FHS 버전 3.0에 따라 휘발성 런타임 데이터를 저장하는 임시 파일시스템 (tmpfs)으로 /run 디렉토리를 포함합니다. FHS 버전 2.3에 따르면, 그러한 데이터는 /var/run에 저장되지만, 이것은 초기 부팅 시 이 디렉터리를 항상 사용할 수 있는 것은 아니기 때문에 경우에 따라 문제였습니다. 결과적으로, 이들 프로그램은 장치 디렉토리가 그러한 데이터에 의도한 것이 아님에도 불구하고 /dev/.udev, /dev/.mdadm, /dev/.systemd 또는 /dev/.mount 디렉토리를 사용하는 것과 같은 속임수에 의존해야 했습니다. 다른 장점들 중에서, 이것은 루트 파일 시스템을 읽기 전용으로 마운트된 상태에서 시스템을 정상적으로 사용하기 쉽게 만듭니다. 예를 들어, 다음은 데비안이 2013 Wheezy 릴리스에서 변경한 사항입니다:

  • /dev/.* → /run/*
  • /dev/shm → /run/shm
  • /dev/shm/* → /run/*
  • /etc/* (writeable files) → /run/*
  • /lib/init/rw → /run
  • /var/lock → /run/lock
  • /var/run → /run
  • /tmp → /run/tmp

History

FHS는 FSSTND ("Filesystem Standard"의 줄임말)로 만들어졌으며, 주로 다른 유닉스-계열 운영 시스템에 대한 유사한 표준을 기반으로 합니다. 주목할만한 예는 다음과 같습니다: 1979년 버전 7 유닉스 릴리스 이후 존재한 파일 시스템 레이아웃에 대한 hier(7) 설명; SunOS filesystem(7) 및 그 후속 버전, 솔라리스 filesystem(5)을 포함합니다.

Release history

Version Release date Notes
1.0 1994-02-14 FSSTND
1.1 1994-10-09 FSSTND
1.2 1995-03-28 FSSTND
2.0 1997-10-26 FHS 2.0은 FSSTND 1.2의 직접적인 계승입니다. 표준의 이름이 파일시스템 계층 표준으로 변경되었습니다.
2.1 2000-04-12 FHS
2.2 2001-05-23 FHS
2.3 2004-01-29 FHS
3.0 2015-05-18 FHS

External links