파일시스템 계층구조 표준

Official website (Historical) 섬네일 **파일 시스템 계층구조 표준**(Filesystem Hierachy Standard, **FHS**)는 리눅스 운영 체제의 주 디렉토리를 정의한다. 대부분의 경우, 이는 전통적인 BSD 파일 시스템 계층구조 표준이다. FHS는 휴렛 팩커드, 레드햇, IBM, 델과 같은 주요 소프트웨어와 하드웨어 공급 업체로 이루어진 비영리 조직인 리눅스 재단에 의해 유지되고 있다. 현재 최신 버전은 2015년 6월 3일에 발표된 3.0이다."FHS 3.0 Released" url=https://web.archive.org/web/20160531064927/https://www.linuxfoundation.org/collaborate/workgroups/lsb/fhs-30. 2015년 6월 3일
# 개요
대부분의 리눅스 배포판은 FHS를 따르며 그들의 정책에 FHS를 준수할 것을 명시한다.Red Hat reference guide on file system structureSuSE Linux Enterprise Server Administration, Novell authorized courseware, by Jason W. Eckert, Novell; Course Technology, 2006; , 9781418837310Debian policy on FHS compliance url=https://web.archive.org/web/20160310144541/http://www.debian.org/doc/debian-policy/ch-opersys.htmlUbuntu Linux File system Tree Overview - Community Ubuntu Documentation 그러나, 현재 대부분의 배포판은, 자유 표준 그룹의 회원에 의해 개발된 것까지 포함하여, 제안한 표준을 완전히 따르지는 않는다.날짜=2009년 11월 FHS가 생성되었을 때, 다른 유닉스 (혹은 유닉스 계열) 운영 체제는 이미 그들만의 고유한 표준이 있었으며, 특히 파일 시스템 레이아웃에 대한 `하이어(7)` 설명FreeBSD이 유닉스 버전 7(1979년) 혹은 `썬 OS 파일시스템(7)`SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library) `최근 솔라리스 파일 시스템(5)`.Solaris부터 존재하였다. 예를 들어, 맥 OS X는 기존 유닉스 디렉토리 구조에 `/Library`, `/Applications`, 그리고 `/Users`와 같이 더 길고 직관적인 이름을 사용한다. 최근의 리눅스 배포판은 기존의 유닉스 및 유닉스 계열 운영 체제의 커널 소스 트리 상에서 심볼릭 링크로 `/sys`를 사용하는 것처럼날짜=2011년 8월 시스템에 연결된 장치의 수정을 저장하고 허용하는 가상 파일 시스템(proc의 procfs와 같은 sysfs)처럼 `/sys`와 같은 구조를 쓴다. GoboLinux나 Syllable Server과 같은 일부 리눅스 시스템은 FHS와 완전히 다르게 접근했다.날짜=2011년 8월
# 역사
계층 구조 파일 시스템 표준의 개발 과정은 1993년 8월에 리눅스 파일과 디렉토리 구조를 재구조화하려는 노력에서 시작되었다. FSSTND(*FileSystem STaNDard*), 즉 리눅스 운영 체제의 파일 시스템 계층구조 표준은, 1994년 2월 14일에 발표되었다. 그 이후 버전은 1994년 10월 9일과 1995년 3월 28일에 나왔다.The Linux Filesystem Standard url=https://web.archive.org/web/20120929001325/http://garrett.damore.org/fsstnd/fsstnd.html, by Garrett D'Amore, Page 45-47 in Linux Journal, July 1995, Issue 15 1996년 초에, Linux뿐만 아니라, 다른 유닉스 계열 운영 체제도 다루고 있는 FSSTND의 포괄적인 버전을 개발하는 것의 목적은 BSD 개발 커뮤니티의 구성원의 도움으로 채택되었다. 결과적으로, 유닉스 계열 시스템을 일반화하는 문제에 초점을 맞추어 함께 노력하게 되었다. 이 범위의 확대를 인정하여, FSSTND이라는 이름은 FHS로 바뀌었다.
## 릴리즈 역사
{| class="wikitable" |- ! 버전 ! 배포일 ! 비고 |- ! | v1.0 | 1994-02-14 | FSSTNDhttp://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.0/ |- ! | v1.1 | 1994-10-09 | FSSTNDhttp://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.1/ |- ! | v1.2 | 1995-03-28 | FSSTNDhttp://www.ibiblio.org/pub/Linux/docs/fsstnd/old/ |- ! | v2.0 | 1997-10-26 | FHS 2.0은 FSSTND 1.2를 직접 후계했다. FSSTND라는 이름이 FHS로 변경되었다.http://www.pathname.com/fhs/announce-2.0.htmlhttp://www.skytel.co.cr/linux/research/1997/1116/index.htmurl=http://www.skytel.co.cr/linux/research/1997/1116/index.htmhttp://www.ibiblio.org/pub/Linux/docs/fsstnd/ |- ! | v2.1 | 2000-04-12 | FHShttp://www.pathname.com/fhs/announce-2.1.htmlhttp://lists.debian.org/lsb-spec/2000/04/msg00005.htmlhttp://cs.acadiau.ca/~jdiamond/Acadia-Linux-template-tutorial/resources/fhs-2.1.pdf |- ! | v2.2 | 2001-05-23 | FHShttp://www.pathname.com/fhs/pub/fhs-2.2.pdf |- ! | v2.3 | 2004-01-29 | FHShttp://www.pathname.com/fhs/pub/fhs-2.3.pdf |- ! | v3.0 | 2015-05-18 | FHShttps://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf |- |} {| class="wikitable" !colspan="5"|지원 상황: |- ||더 이상 지원 안함 ||지원 중 ||현재 버전 ||계획 중 |}
# 디렉토리 구조
FHS에서는 비록 그것이 다른 물리적 장치에 저장되어 있다 하더라도 모든 디렉토리가 루트 디렉토리 "/"의 하위 디렉토리다. 이들 중 일부 디렉토리가 설치된 X 윈도 시스템과 같은 특정 서브시스템에 의존하든 아니든 유닉스 시스템상에 존재할 수도 있고 그렇지 않을 수도 있음에 주목하라. 모든 유닉스 종류의 운영 체제에 이 디렉토리들 중 대부분이 존재하며, 일반적으로 같은 용도로 사용되지만, 여기에 있는 설명은 FHS에 사용되는 것이며, 리눅스 이외의 플랫폼에서는 꼭 지켜야 하는 것은 아니다. {| class="wikitable" |- !Directory !Description |- |`/` |*기본 계층* 모든 파일 시스템 계층의 기본인 루트 디렉토리 |- |`/bin/` |모든 사용자를 위해 단일 사용자 모드에서 사용 가능해야 하는 명령어 바이너리, *e.g.*, cat, ls, cp. |- |`/boot/` |부트 로더 파일, *e.g.*, kernels, initrd. 흔히 별개의 파티션에 놓는다.분리된 파티션은 일반적으로 오직 부트로더가 메인 파일 시스템을 읽을 능력이 없거나(예를 들어, SILO는 XFS를 인식하지 못한다.) 기타 사용자가 쉽게 풀 수 없는 다른 문제가 발생할 때 사용된다. |- |`/dev/` |필요한 장치, *e.g.* `/dev/null`. |- |`/etc/` |특정 호스트 시스템의 전반적인 설정 파일.
이름 자체의 의미에 대한 논쟁이 있었다. 벨 연구소에서 나온 유닉스 구현에 대한 초기 버전 문서에서는, /etc는 *et cetera*를 의미한다고 하였는데http://www.bitsavers.org/pdf/bellLabs/unix/PreliminaryUnixImplementationDocument_Jun72.pdf url=https://web.archive.org/web/20110719051205/http://www.bitsavers.org/pdf/bellLabs/unix/PreliminaryUnixImplementationDocument_Jun72.pdf, Preliminary Release of UNIX Implementation Document, by J. DeFelicc, 1972-03-17, id=IMO.1-1, section=E.0, page=8, issue=D, 역사적으로 이 디렉토리는 다른 어디에도 속하지 않는 모든 것들을 모아놓는 곳이었다.(그러나, FHS는 /etc를 정해진 설정 파일을 저장하는 곳으로 한정하였고 바이너리는 들어갈 수 없도록 했다).http://www.pathname.com/fhs/pub/fhs-2.3.html#ETCHOSTSPECIFICSYSTEMCONFIGURATION 초기 문서의 출판 이후, 디렉토리 이름은 다양한 방법으로 재 해석되어 왔다. 최근에는 "Editable Text Configuration"이나 "Extended Tool Chest"와 같은 말의 약어로 풀이되었다.Define - /etc?, Posted by Cliff, March 03 2007 - Slashdot |- | :`/etc/opt/` |`/opt/`에 대한 설정 파일. |- | :`/etc/X11/` |X 윈도 시스템의 설정 파일, 버전 11. |- | :`/etc/sgml/` |SGML 설정 파일. |- | :`/etc/xml/` |XML 설정 파일. |- |`/home/` |저장된 파일, 개인 설정, 기타 등을 포함한 사용자의 홈 디렉토리. 흔히 별도의 파티션에 있다. |- |`/lib/` |`/bin/`과 `/sbin/`에 있는 바이너리에 필요한 라이브러리. |- |`/media/` |CD-ROM과 같은 이동식 미디어의 마운트 지점(FHS-2.3에서 나타났다). |- |`/mnt/` |임시로 마운트된 파일 시스템. |- |`/opt/` |선택 가능한 응용 소프트웨어 패키지.http://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES |- |`/proc/` |커널과 프로세스 상태를 문서화한 가상 파일 시스템 리눅스에서는, procfs 마운트에 해당한다. |- |`/root/` |루트 사용자의 홈 디렉토리. |- |`/sbin/` |필수 시스템 바이너리, *e.g.*, init, ip, mount. |- |`/srv/` |시스템에서 제공되는 사이트 특정 데이터. |- |`/tmp/` |임시 파일 (`/var/tmp` 참고). 시스템이 리붓되면 보존되지 않는 경우가 흔하다. |- |`/usr/` |읽기 전용 사용자 데이터가 있는 *보조 계층 구조*. 주요 (다중) 사용자의 유틸리티와 애플리케이션을 포함하고 있다.Should be shareable and read-only, cf. http://www.pathname.com/fhs/pub/fhs-2.3.html. |- | :`/usr/bin/` |모든 사용자의(단일 사용자 모드에서 필요하지 않은) 비 필수 명령어 바이너리 . |- | :`/usr/include/` |표준 include 파일. |- | :`/usr/lib/` |`/usr/bin/`과 `/usr/sbin/`에 있는 바이너리를 위한 라이브러리. |- | :`/usr/sbin/` |비 필수 시스템 바이너리, *e.g.*, 다양한 네트워크 서비스 데몬. |- | :`/usr/share/` |아키텍처에 독립적인(공유) 데이터. |- | :`/usr/src/` |소스 코드, *e.g.* 커널 소스 코드와 그 헤더 파일. |- | :`/usr/X11R6/` |X 윈도 시스템, 버전 11, 릴리즈 6. |- | :`/usr/local/` |로컬 데이터의 *3차 계층*, 이 호스트에만 적용된다. 일반적으로 `bin/`, `lib/`, `share/`와 같은 서브 디렉토리를 가지고 있다.역사적으로 그리고 엄격히 표준에 따라 말하자면, `/usr/local/`은 (네트워크를 통해 마운트할 수 있는 `/usr/`와 달리) 로컬 호스트에 저장되어야 하는 데이터다. 대부분의 경우 `/usr/local/`은 그것들은 표준 운영 체제 배포판의 일부가 *아닌* 소프트웨어/데이터 설치에 쓰인다. (이 경우, `/usr/`는 소프트웨어/데이터의 *표준 운영 체제 배포판 부분*만 포함한다.) |- |`/var/` |변하기 쉬운 파일—일반적인 시스템의 운영 체제에서 내용이 자주 바뀔 듯한 파일— 로그, 스풀 파일, 임시 전자 우편 파일. 분리된 파티션일 때도 있다. |- | :`/var/cache/` |애플리케이션 캐시 데이터. 이런 데이터는 시간이 걸리는 입출력이나 계산의 결과로 로컬에서 발생한다. 애플리케이션은 데이터를 재생성하거나 복원할 수 있어야 한다. 이 캐시된 파일을 지워도 데이터 손실은 없다. |- | :`/var/lib/` |상태 정보. 프로그램의 실행 중에 수정되는 영구적인 데이터. *e.g.*, 데이터베이스, 패키징 시스템 메타데이터 등. |- | :`/var/lock/` |잠금 파일. 현재 사용중인 자원을 추적하는 파일. |- | :`/var/log/` |로그 파일. 다양한 로그가 있다. |- | :`/var/mail/` |사용자의 사서함. |- | :`/var/run/` |마지막 부트 때부터 작동하는 시스템에 대한 정보. *e.g.*, 현재 로그인 정보와 작동하고 있는 데몬. |- | :`/var/spool/` |처리를 기다리는 작업 스풀. *e.g.* 큐 출력과 읽지 않은 메일. |- | :`/var/spool/mail/` |예전에 사용했으나 현재에는 사용되지 않는 사용자 사서함 위치. |- | :`/var/tmp/` |재부팅 해도 보존되는 임시 파일. |- |}