유닉스 파일시스템

유닉스 및 유닉스에 영향을 받은 운영 체제에서 파일 시스템은 운영 체제의 핵심적인 부분으로 간주된다. 1969년으로 거슬러 올라가 켄 톰프슨이 최초 실험 버전의 유닉스에 설계하고 구현한 시스템의 최초 부분 가운데 하나이기도 했다. 다른 운영 체제들과 비슷하게 파일 시스템은 정보 스토리지와 검색을 제공하며 그리고 여러 형태의 프로세스 간 통신 가운데 하나로서 전통적으로 유닉스 시스템을 형성하는 수많은 작은 크기의 프로그램들이 파일에 정보를 저장시킬 수 있어서 다른 프로그램들이 이것들을 읽을 수 있다. 파이프가 제3판을 기점으로 이 역할을 보충해준다. 또, 파일시스템은 터미널, 프린터, 마우스로의 진입점인 이른바 장치 파일을 통해 다른 리소스로의 접근을 제공한다. 이 문서의 나머지 부분은 보통명칭으로서 오리지널 유닉스 운영 체제와 그에 속하는 수많은 계열을 모두 의미하는 "유닉스"를 사용한다. 파일시스템은 여러 디렉터리가 있는 하나의 루트 트리로 등장한다. 디스크 파티션, 이동식 미디어, 네트우크 자원 등 별도의 볼륨을 별도의 트리로 주소화(마치 도스와 윈도우에서 하는 것처럼, 각 "드라이브"가 드라이브 문자를 가짐으로써 파일 시스템 트리의 루트를 나타내는 것)하는 대신 이러한 볼륨들은 디렉터리를 마운트시킴으로써 볼륨의 파일 시스템 트리가 더 큰 트리의 디렉터리로 보이게 만든다. 전체 트리의 루트가 /로 표시된다. 오리지널 벨 연구소 유닉스에서는 2 디스크 셋업이 관례적이었으며 첫 번째 디스크는 시작 프로그램을 담고 있었으며 두 번째 디스크는 사용자의 파일과 프로그램들을 담았다. 이 두 번째 디스크는 첫 번째 디스크에서 usr이라는 이름의 빈 디렉터리에서 마운트되었으므로 두 번째 디스크가 하나의 파일 시스템으로 보이게 되며 두 번째 디스크의 내용은 /usr에서 볼 수 있다. 유닉스 디렉터리는 파일을 담고있지 않다. 그 대신 이른바 아이노드의 참조와 쌍을 이루는 파일들의 이름을 담는다. 그리고 이 아이노드는 파일과 파일 메타데이터(소유자, 권한, 마지막 접근 시간 등, 그러나 이름은 미포함)를 담는다. 파일 시스템의 여러 개의 이름은 동일한 파일을 가리킬 수 있으며 이 기능의 이름은 하드 링크라고 부른다. 하드 링크의 수학적 특성으로 말미암아 파일 시스템을 유한한 유형의 유향 비순환 그래프로 만들어주지만 디렉터리는 일반적으로 하드 링크될 수 없기 때문에 여전히 트리를 구성한다. 1969년 원래 예상한 바 그대로 유닉스 파일 시스템은 유닉스 파일 시스템은 사실상 경로 이름 대신 내비게이션을 제공하는 디렉터리에 대한 하드 링크가 있는 일반 그래프로 사용된다.) 오리지널 유닉스 파일 시스템은 3가지 파일 유형을 지원하였다: 일반 파일, 디렉터리, "특수 파일"(또는 장치 파일). BSD와 시스템 V는 각각 프로세스 간 통신을 위해 사용할 파일 유형을 추가하였다: BSD는 소켓을, 시스템 V는 FIFO 파일을 추가하였다. 또, BSD는 일련의 파일 유형에 대한 심볼릭 링크(이른바 symlink)를 추가하였다. 이것들은 다른 파일을 가리키는 파일들이며 보완 방식의 하드 링크들이다. 심볼릭 링크는 멀틱스에 비슷한 기능 이후 모델링된 것으로, 파일시스템을 아우르는 하드 링크와는 구별하며 이들의 존재하는 대상 오브젝트와는 독립적이다. 다른 유닉스 시스템들은 추가 유형의 파일을 지원할 수 있다. 프로그램, 시스템 구성 파일, 사용자의 홈 디렉터리 등 일부 유형의 파일을 위치시키기 위한 특정한 전통이 존재한다. 이것들은 버전 7 유닉스 이후로 hier(7) Man page에 처음 문서화되었다. 이후 버전과 파생판, 클론들은 일반적으로 비슷한 매뉴얼 문서를 제공한다. 디레터리 레이아웃의 세세한 부분은 시간이 지남에 따라 다양해지고 있다. 파일 시스템 레이아웃이 단일 유닉스 규격의 일부가 아니지만 시스템 V 응용 프로그램 이진 인터페이스, 인텔 이진 호환 표준, 공통 운영 체제 환경, 리눅스 재단의 파일시스템 계층구조 표준(FHS) 등 표준화를 위한 여러 시도가 존재한다. 다음은 유닉스 운영 체제의 파일의 일반적 위치를 나타낸 개요이다: Btrfs Ext2 Ext3 Ext4 파일시스템 계층구조 표준 유닉스 파일 시스템 ZFS Ritchie, D.M.; Thompson, K. (July 1978). “The UNIX Time-Sharing System”. 《Bell System Tech. J.》 57 (6): 1905–1929. CiteSeerX 10.1.1.112.595. doi:10.1002/j.1538-7305.1978.tb02136.x.  Ritchie, Dennis M. (1979). 《The Evolution of the Unix Time-sharing System》. Language Design and Programming Methodology Conf. 2015년 4월 8일에 원본 문서에서 보존된 문서. 2020년 5월 8일에 확인함.  Leffler, Samuel J.; McKusick, Marshall Kirk; Karels, Michael J.; Quarterman, John S. (October 1989). 《The Design and Implementation of the 4.3BSD UNIX Operating System》. en:Addison-Wesley. ISBN 978-0-201-06196-3.  McKusick, Marshall Kirk; 외. “A Fast Filesystem for Unix” (PDF). 《Freebsd.org》. CSRG, UC Berkeley. 2016년 11월 16일에 확인함.  stat(2) – 리눅스 프로그래머의 매뉴얼 – System Calls hier(7) – 버전 7 유닉스 프로그래머의 매뉴얼 hier(7) – FreeBSD Miscellaneous Information 매뉴얼 페이지 hier(7) – OpenBSD Miscellaneous Information 매뉴얼 페이지 “hier(7) man page for 2.9.1 BSD”.  “hier(7) man page for ULTRIX 4.2”.  “hier(7) man page for SunOS 4.1.3”.  hier(7) – 리눅스 프로그래머의 매뉴얼 – Overview, Conventions and Miscellanea George Kraft IV (2000년 11월 1일). “Where to Install My Products on Linux?”. 《리눅스 저널》. 2014년 11월 13일에 확인함.  Kernighan, Brian W.; Pike, Rob (1984). 《The UNIX Programming Environment》. Prentice-Hall. 63–65쪽. Bibcode:1984upe..book.....K.  Ritchie, Dennis. “Unix Notes from 1972”. 2018년 1월 14일에 확인함.  M. D. McIlroy (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. CSTR 139, Bell Labs. “Chapter 7. sendmail”. 《UNICOS/mp Networking Facilities Administration》. 크레이 (기업). 2017년 11월 9일에 원본 문서에서 보존된 문서. 2013년 9월 14일에 확인함.  “fhs-spec revision 44”. 2017년 3월 5일에 원본 문서에서 보존된 문서. 2020년 5월 8일에 확인함.