유닉스 파일시스템

수많은 유닉스 및 유닉스 계열 운영 체제에 사용되는 파일 시스템의 하나에 대해서는 유닉스 파일 시스템 문서를 참고하십시오.
버전 7 유닉스 파일시스템 레이아웃: "/"와 "/usr"의 하위 디렉터리들
유닉스 파일시스템 레이아웃의 개요

유닉스 및 유닉스에 영향을 받은 운영 체제에서 파일 시스템은 운영 체제의 핵심적인 부분으로 간주된다. 1969년으로 거슬러 올라가 켄 톰프슨이 최초 실험 버전의 유닉스에 설계하고 구현한 시스템의 최초 부분 가운데 하나이기도 했다.

다른 운영 체제들과 비슷하게 파일 시스템은 정보 스토리지와 검색을 제공하며 그리고 여러 형태의 프로세스 간 통신 가운데 하나로서 전통적으로 유닉스 시스템을 형성하는 수많은 작은 크기의 프로그램들이 파일에 정보를 저장시킬 수 있어서 다른 프로그램들이 이것들을 읽을 수 있다. 파이프가 제3판을 기점으로 이 역할을 보충해준다. 또, 파일시스템은 터미널, 프린터, 마우스로의 진입점인 이른바 장치 파일을 통해 다른 리소스로의 접근을 제공한다.

이 문서의 나머지 부분은 보통명칭으로서 오리지널 유닉스 운영 체제와 그에 속하는 수많은 계열을 모두 의미하는 "유닉스"를 사용한다.

원리

파일시스템은 여러 디렉터리가 있는 하나의 루트 트리로 등장한다. 디스크 파티션, 이동식 미디어, 네트우크 자원 등 별도의 볼륨을 별도의 트리로 주소화(마치 도스와 윈도우에서 하는 것처럼, 각 "드라이브"가 드라이브 문자를 가짐으로써 파일 시스템 트리의 루트를 나타내는 것)하는 대신 이러한 볼륨들은 디렉터리를 마운트시킴으로써 볼륨의 파일 시스템 트리가 더 큰 트리의 디렉터리로 보이게 만든다. 전체 트리의 루트가 /로 표시된다.

오리지널 벨 연구소 유닉스에서는 2 디스크 셋업이 관례적이었으며 첫 번째 디스크는 시작 프로그램을 담고 있었으며 두 번째 디스크는 사용자의 파일과 프로그램들을 담았다. 이 두 번째 디스크는 첫 번째 디스크에서 usr이라는 이름의 빈 디렉터리에서 마운트되었으므로 두 번째 디스크가 하나의 파일 시스템으로 보이게 되며 두 번째 디스크의 내용은 /usr에서 볼 수 있다.

유닉스 디렉터리는 파일을 담고있지 않다. 그 대신 이른바 아이노드의 참조와 쌍을 이루는 파일들의 이름을 담는다. 그리고 이 아이노드는 파일과 파일 메타데이터(소유자, 권한, 마지막 접근 시간 등, 그러나 이름은 미포함)를 담는다. 파일 시스템의 여러 개의 이름은 동일한 파일을 가리킬 수 있으며 이 기능의 이름은 하드 링크라고 부른다. 하드 링크의 수학적 특성으로 말미암아 파일 시스템을 유한한 유형의 유향 비순환 그래프로 만들어주지만 디렉터리는 일반적으로 하드 링크될 수 없기 때문에 여전히 트리를 구성한다. 1969년 원래 예상한 바 그대로 유닉스 파일 시스템은 유닉스 파일 시스템은 사실상 경로 이름 대신 내비게이션을 제공하는 디렉터리에 대한 하드 링크가 있는 일반 그래프로 사용된다.)

파일 유형

오리지널 유닉스 파일 시스템은 3가지 파일 유형을 지원하였다: 일반 파일, 디렉터리, "특수 파일"(또는 장치 파일). BSD와 시스템 V는 각각 프로세스 간 통신을 위해 사용할 파일 유형을 추가하였다: BSD는 소켓을, 시스템 V는 FIFO 파일을 추가하였다.

또, BSD는 일련의 파일 유형에 대한 심볼릭 링크(이른바 symlink)를 추가하였다. 이것들은 다른 파일을 가리키는 파일들이며 보완 방식의 하드 링크들이다. 심볼릭 링크는 멀틱스에 비슷한 기능 이후 모델링된 것으로, 파일시스템을 아우르는 하드 링크와는 구별하며 이들의 존재하는 대상 오브젝트와는 독립적이다. 다른 유닉스 시스템들은 추가 유형의 파일을 지원할 수 있다.

전통적인 디렉터리 레이아웃

프로그램, 시스템 구성 파일, 사용자의 홈 디렉터리 등 일부 유형의 파일을 위치시키기 위한 특정한 전통이 존재한다. 이것들은 버전 7 유닉스 이후로 hier(7) Man page에 처음 문서화되었다. 이후 버전과 파생판, 클론들은 일반적으로 비슷한 매뉴얼 문서를 제공한다.

디레터리 레이아웃의 세세한 부분은 시간이 지남에 따라 다양해지고 있다. 파일 시스템 레이아웃이 단일 유닉스 규격의 일부가 아니지만 시스템 V 응용 프로그램 이진 인터페이스, 인텔 이진 호환 표준, 공통 운영 체제 환경, 리눅스 재단의 파일시스템 계층구조 표준(FHS) 등 표준화를 위한 여러 시도가 존재한다.

다음은 유닉스 운영 체제의 파일의 일반적 위치를 나타낸 개요이다:

디렉터리 또는 파일 설명
/ 단독 슬래시 / 문자는 파일시스템 트리의 루트를 나타낸다.
/bin
이진 파일을 대표한다. 시스템 V.4에서 이것은 /usr/bin의 심볼릭 링크이다. 그 밖의 경우 루트 파일시스템 그 자체여야 한다.
/boot
성공적인 부팅 프로세스에 필요한 모든 파일을 포함한다. 리서치 유닉스에서 이것은 디렉터리가 아닌 하나의 파일이었다.
/dev
장치를 대표한다. 주변 장치와 의사 장치들의 대표 파일들을 포함한다.
/etc
시스템 전체의 구성 파일과 시스템 데이터베이스 파일을 포함한다.
/home
리눅스와 기타 일부 시스템의 사용자 홈 디렉터리를 포함한다. 오리지널 버전의 유닉스에서 홈 디렉터리는 /usr를 대신 사용하였다. 일부 시스템들은 여전히 다른 위치를 사용한다: 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에 나타나게 된다. 현재는 X 윈도 시스템, KDE, 펄 등 시스템에 중요하지 않은 실행 파일, 라이브러리, 공유 리소스를 보관한다.

구 유닉스 시스템에서 사용자 홈 디렉터리는 프로그램을 포함하는 디렉터리들과 함께 /usr에 등장하였으며 1984년까지 로컬 시스템에 의존하였다.

/include
시스템 전반의 개발 헤더를 저장한다.
/lib
/usr 또는 다른 곳에 저장된 프로그램을 위한 필요 라이브러리, 데이터 파일을 저장한다.
/libexec
사용자가 직접 실행하는 것이 아닌, 다른 프로그램들이 실행하는 프로그램을 보관한다. 이를테면 Sendmail 실행 파일은 이 디렉터리에서 볼 수 있다. 2011년 FHS에서 등장하였다. 리눅스 배포판은 전통적으로 이 디렉터리의 내용을 /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 디렉터리는 시스템 재부팅 간 보존되어야 하는 임시 파일을 위한 장소이다.

같이 보기

각주

  1. 1 2 3 4 5 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.
  2. 1 2 Ritchie, Dennis M. (1979). 《The Evolution of the Unix Time-sharing System》. Language Design and Programming Methodology Conf. 2015년 4월 8일에 원본 문서에서 보존된 문서. 2020년 5월 8일에 확인함.
  3. 1 2 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.
  4. ↑ McKusick, Marshall Kirk 외. “A Fast Filesystem for Unix” (PDF). 《Freebsd.org》. CSRG, UC Berkeley. 2016년 11월 16일에 확인함.
  5. ↑ stat(2) – 리눅스 프로그래머의 매뉴얼 – System Calls
  6. ↑ hier(7) – 버전 7 유닉스 프로그래머의 매뉴얼
  7. ↑ hier(7) – FreeBSD Miscellaneous Information 매뉴얼 페이지
  8. ↑ hier(7) – OpenBSD Miscellaneous Information 매뉴얼 페이지
  9. ↑ “hier(7) man page for 2.9.1 BSD”.
  10. ↑ “hier(7) man page for ULTRIX 4.2”.
  11. ↑ “hier(7) man page for SunOS 4.1.3”.
  12. ↑ hier(7) – 리눅스 프로그래머의 매뉴얼 – Overview, Conventions and Miscellanea
  13. ↑ George Kraft IV (2000년 11월 1일). “Where to Install My Products on Linux?”. 《리눅스 저널》. 2014년 11월 13일에 확인함.
  14. 1 2 3 4 Kernighan, Brian W.; Pike, Rob (1984). 《The UNIX Programming Environment》. Prentice-Hall. 63–65쪽. Bibcode:1984upe..book.....K.
  15. 1 2 Ritchie, Dennis. “Unix Notes from 1972”. 2024년 11월 23일에 원본 문서에서 보존된 문서. 2018년 1월 14일에 확인함.
  16. ↑ M. D. McIlroy (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. CSTR 139, Bell Labs.
  17. ↑ “Chapter 7. sendmail”. 《UNICOS/mp Networking Facilities Administration》. 크레이 (기업). 2017년 11월 9일에 원본 문서에서 보존된 문서. 2013년 9월 14일에 확인함.
  18. ↑ “fhs-spec revision 44”. 2017년 3월 5일에 원본 문서에서 보존된 문서. 2020년 5월 8일에 확인함.