유닉스 파일시스템

수많은 유닉스 및 유닉스 계열 운영 체제에 사용되는 파일 시스템의 하나 버전 7 유닉스 파일시스템 레이아웃: "/"와 "/usr"의 하위 디렉터리들 유닉스 파일시스템 레이아웃의 개요 유닉스 및 유닉스에 영향을 받은 운영 체제에서 파일 시스템은 운영 체제의 핵심적인 부분으로 간주된다.citeseerx= 10.1.1.112.595 1969년으로 거슬러 올라가 켄 톰프슨이 최초 실험 버전의 유닉스에 설계하고 구현한 시스템의 최초 부분 가운데 하나이기도 했다. 다른 운영 체제들과 비슷하게 파일 시스템은 정보 스토리지와 검색을 제공하며 그리고 여러 형태의 프로세스 간 통신 가운데 하나로서 전통적으로 유닉스 시스템을 형성하는 수많은 작은 크기의 프로그램들이 파일에 정보를 저장시킬 수 있어서 다른 프로그램들이 이것들을 읽을 수 있다. 파이프가 제3판을 기점으로 이 역할을 보충해준다. 또, 파일시스템은 터미널, 프린터, 마우스로의 진입점인 이른바 장치 파일을 통해 다른 리소스로의 접근을 제공한다. 이 문서의 나머지 부분은 보통명칭으로서 오리지널 유닉스 운영 체제와 그에 속하는 수많은 계열을 모두 의미하는 "유닉스"를 사용한다.
# 원리
파일시스템은 여러 디렉터리가 있는 하나의 루트 트리로 등장한다. 디스크 파티션, 이동식 미디어, 네트우크 자원 등 별도의 볼륨을 별도의 트리로 주소화(마치 도스와 윈도우에서 하는 것처럼, 각 "드라이브"가 드라이브 문자를 가짐으로써 파일 시스템 트리의 루트를 나타내는 것)하는 대신 이러한 볼륨들은 디렉터리를 마운트시킴으로써 볼륨의 파일 시스템 트리가 더 큰 트리의 디렉터리로 보이게 만든다. 전체 트리의 루트가 `/`로 표시된다. 오리지널 벨 연구소 유닉스에서는 2 디스크 셋업이 관례적이었으며 첫 번째 디스크는 시작 프로그램을 담고 있었으며 두 번째 디스크는 사용자의 파일과 프로그램들을 담았다. 이 두 번째 디스크는 첫 번째 디스크에서 `usr`이라는 이름의 빈 디렉터리에서 마운트되었으므로 두 번째 디스크가 하나의 파일 시스템으로 보이게 되며 두 번째 디스크의 내용은 `/usr`에서 볼 수 있다. 유닉스 디렉터리는 파일을 담고있지 않다. 그 대신 이른바 아이노드의 참조와 쌍을 이루는 파일들의 이름을 담는다. 그리고 이 아이노드는 파일과 파일 메타데이터(소유자, 권한, 마지막 접근 시간 등, 그러나 이름은 미포함)를 담는다. 파일 시스템의 여러 개의 이름은 동일한 파일을 가리킬 수 있으며 이 기능의 이름은 하드 링크라고 부른다. 하드 링크의 수학적 특성으로 말미암아 파일 시스템을 유한한 유형의 유향 비순환 그래프로 만들어주지만 디렉터리는 일반적으로 하드 링크될 수 없기 때문에 여전히 트리를 구성한다. 1969년 원래 예상한 바 그대로 유닉스 파일 시스템은 유닉스 파일 시스템은 사실상 경로 이름 대신 내비게이션을 제공하는 디렉터리에 대한 하드 링크가 있는 일반 그래프로 사용된다.url-status=dead)
## 파일 유형
유닉스 파일 유형 오리지널 유닉스 파일 시스템은 3가지 파일 유형을 지원하였다: 일반 파일, 디렉터리, "특수 파일"(또는 장치 파일). BSD와 시스템 V는 각각 프로세스 간 통신을 위해 사용할 파일 유형을 추가하였다: BSD는 소켓을,url= https://archive.org/details/designimplementa0000unse 시스템 V는 FIFO 파일을 추가하였다. 또, BSD는 일련의 파일 유형에 대한 심볼릭 링크(이른바 symlink)를 추가하였다. 이것들은 다른 파일을 가리키는 파일들이며 보완 방식의 하드 링크들이다. 심볼릭 링크는 멀틱스에 비슷한 기능 이후 모델링된 것으로,accessdate=16 November 2016 파일시스템을 아우르는 하드 링크와는 구별하며 이들의 존재하는 대상 오브젝트와는 독립적이다. 다른 유닉스 시스템들은 추가 유형의 파일을 지원할 수 있다.Linux
# 전통적인 디렉터리 레이아웃
프로그램, 시스템 구성 파일, 사용자의 홈 디렉터리 등 일부 유형의 파일을 위치시키기 위한 특정한 전통이 존재한다. 이것들은 버전 7 유닉스 이후로 `hier(7)` Man page에 처음 문서화되었다.v7 이후 버전과 파생판, 클론들은 일반적으로 비슷한 매뉴얼 문서를 제공한다.FreeBSDOpenBSDurl=http://www.freebsd.org/cgi/man.cgi?query=hier&manpath;=2.9.1+BSDurl=http://www.freebsd.org/cgi/man.cgi?query=hier&manpath;=ULTRIX+4.2url=http://www.freebsd.org/cgi/man.cgi?query=hier&manpath;=SunOS+4.1.3Linux 디레터리 레이아웃의 세세한 부분은 시간이 지남에 따라 다양해지고 있다. 파일 시스템 레이아웃이 단일 유닉스 규격의 일부가 아니지만 시스템 V 응용 프로그램 이진 인터페이스, 인텔 이진 호환 표준, 공통 운영 체제 환경, 리눅스 재단의 파일시스템 계층구조 표준(FHS) 등 표준화를 위한 여러 시도가 존재한다.accessdate=13 November 2014 다음은 유닉스 운영 체제의 파일의 일반적 위치를 나타낸 개요이다: {| class="wikitable" !디렉터리 또는 파일 !설명 |- |`/` |단독 슬래시 `/` 문자는 파일시스템 트리의 루트를 나타낸다. |- | :`/bin` |이진 파일을 대표한다. 시스템 V.4에서 이것은 `/usr/bin`의 심볼릭 링크이다. 그 밖의 경우 루트 파일시스템 그 자체여야 한다. |- | :`/boot` |성공적인 부팅 프로세스에 필요한 모든 파일을 포함한다. 리서치 유닉스에서 이것은 디렉터리가 아닌 하나의 파일이었다.bibcode=1984upe..book.....K |- | :`/dev` |장치를 대표한다. 주변 장치와 의사 장치들의 대표 파일들을 포함한다. |- | :`/etc` |시스템 전체의 구성 파일과 시스템 데이터베이스 파일을 포함한다. |- | :`/home` |리눅스와 기타 일부 시스템의 사용자 홈 디렉터리를 포함한다. 오리지널 버전의 유닉스에서 홈 디렉터리는 `/usr`를 대신 사용하였다.accessdate=14 January 2018 일부 시스템들은 여전히 다른 위치를 사용한다: macOS는 `/Users`에 홈 디렉터리를 보관하며 구형 버전의 BSD는 `/u`에, FreeBSD는 `/usr/home`에 위치한다. |- | :`/lib` |근본적으로 필수적인 라이브러리들: C 라이브러리, 그러나 포트란 라이브러리는 아님. |- | :`/media` |USB 스틱, 미디어 플레이어 등 이동식 장치의 기본 마운트 지점이다. |- | :`/mnt` |마운트를 대표한다. |- | :`/opt` |로컬에 설치된 소프트웨어를 포함한다. |- | :`/proc` |프로세스에 관한 정보를 파일로 표시하는 Procfs 가상 파일 시스템이다. |- | :`/root` |슈퍼유저 루트(시스템 관리자)를 위한 홈 디렉터리이다. |- | :`/sbin` |시스템(또는 슈퍼유저) 바이너리를 대표하며 시스템의 기동, 관리, 복구에 필수적인 `init` 등 중요 유틸리티를 포함한다. |- | :`/srv` |서버 데이터(시스템이 제공하는 서비스 데이터)이다. |- | :`/sys` |일부 리눅스 배포판에서 하드웨어와 운영 체제와 관련한 정보를 담고있는 Sysfs 가상 파일 시스템을 포함한다. |- | :`/tmp` |재부팅 시에도 생존할 것으로 예측되지 않는 임시 파일을 위한 장소이다. |- | :`/unix` |리서치 유닉스와 시스템 V의 유닉스 커널이다. |- | :`/usr` |사용자 파일 시스템이다. 원래는 사용자 홈 디렉터리들을 보관하는 디렉터리이지만, 제3판 리서치 유닉스(1973년 경)에 의해 이미 운영 체제의 프로그램들을 두 개의 디스크(이 중 하나느 256K 고정 헤드 드라이브)에 분리시키기 위해 재사용되었으며 기본적인 명령어들이 `/bin` 또는 `/usr/bin`에 나타나게 된다.M. D. McIlroy (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. CSTR 139, Bell Labs. 현재는 X 윈도 시스템, KDE, 펄 등 시스템에 중요하지 않은 실행 파일, 라이브러리, 공유 리소스를 보관한다. 구 유닉스 시스템에서 사용자 홈 디렉터리는 프로그램을 포함하는 디렉터리들과 함께 `/usr`에 등장하였으며 1984년까지 로컬 시스템에 의존하였다. |- | ::`/include` |시스템 전반의 개발 헤더를 저장한다. |- | ::`/lib` |`/usr` 또는 다른 곳에 저장된 프로그램을 위한 필요 라이브러리, 데이터 파일을 저장한다. |- | ::`/libexec` |사용자가 직접 실행하는 것이 아닌, 다른 프로그램들이 실행하는 프로그램을 보관한다. 이를테면 Sendmail 실행 파일은 이 디렉터리에서 볼 수 있다.url-status=dead 2011년 FHS에서 등장하였다.url-status=dead 리눅스 배포판은 전통적으로 이 디렉터리의 내용을 `/usr/lib`로 이동시켰다. |- | ::`/local` |구조적으로 `/usr`와 유사하지만 하위 디렉터리는 운영 체제 배포판의 일부가 아닌 추가물에 사용된다. (예: BSD 포츠 컬렉션의 사용자 지정 프로그램인 파일) 일반적으로 `/usr/local/lib` 또는 `/usr/local/bin` 등의 하위 디렉터리를 포함한다. |- | ::`/share` |아키텍처에 독립적인 프로그램 데이터이다. |- | :`/var` |변수를 대표한다. 특히 프로세스 ID 잠금 파일, 시스템 사용자에게 보내는 이메일 등 크기 면에서 변동이 있는 파일들을 위한 장소이다. |- | ::`/log` |시스템 로그 파일을 포함한다. |- | ::`/mail` |들어오는 메일이 저장되는 장소이다. root가 아닌 사용자들은 자신만의 메일에만 접근이 가능하다. 이 디렉터리는 `/var/spool/mail`의 심볼릭 링크인 경우가 있다. |- | ::`/spool` |스풀 디렉터리이다. 인쇄 잡, 메일 스풀, 기타 큐의 작업을 포함한다. |- | ::`/src` |컴파일되지 않은 일부 프로그램의 소스 코드가 위치하는 장소이다. |- | ::`/tmp` |`/var/tmp` 디렉터리는 시스템 재부팅 간 보존되어야 하는 임시 파일을 위한 장소이다. |}