Jump to content

Unix filesystem

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning
Version 7 Unix filesystem layout: subdirectories of "/" and "/usr"
File:Standard-unix-filesystem-hierarchy.svg
An overview of a Unix filesystem layout

유닉스와 그것에 영감을 받은 운영 시스템에서, 파일 시스템은 운영 시스템의 핵심 구성 요소로 여겨집니다.[1] 그것은 역시 1969년에 기원된 유닉스의 첫 번째 실험 버전에서 켄 탐슨에 의해 설계되고 구현된 시스템의 첫 번째 부분 중 하나였습니다.[2]

다른 운영 시스템에서와 마찬가지로, 파일시스템은 정보 저장 및 검색, 및 여러 형태의 프로세스 사이의 통신 중 하나를 제공하며, 그것에서 전통적으로 유닉스 시스템을 구성하는 많은 작은 프로그램이 다른 프로그램이 읽을 수 있도록 파일에 정보를 저장할 수 있지만, 파이프세 번째 판부터 이 역할을 그것을 보완했습니다. 역시, 파일시스템은 터미널, 프린터, 및 마우스에 대한 진입점인 소위 장치 파일을 통해 다른 자원에 대한 접근을 제공합니다.

이 기사의 나머지 부분은 유닉스를 원래 유닉스 운영 시스템과 많은 유사한 운영 시스템을 모두 참조하기 위해 일반 이름으로 사용합니다.

Principles

파일시스템은 디렉토리의 하나의 루트화된 트리(rooted tree)로 나타납니다.[1] 디스크 파티션, 이동식 미디어, 및 네트워크 공유와 같은 분리된 볼륨을 분리된 트리로 지정하는 대신 (도스윈도우에서 수행: 각 드라이브는 파일 시스템 트리의 루트를 나타내는 드라이브 문자가 있음), 그러한 볼륨은 디렉토리에 마운트될 수 있으며, 볼륨의 파일 시스템 트리를 더 큰 트리에서 해당 디렉토리로 나타나도록 합니다.[1] 전체 트리의 루트는 /로 표시됩니다.

원래 벨 연구소 리눅스에서, 둘의-디스크 설정이 관례젹이었으며, 여기서 첫 번째 디스크는 시작 프로그램을 포함했지만, 두 번째 디스크는 사용자 파일과 프로그램을 포함했습니다. 이 두 번째 디스크는 첫 번째 디스크에 usr이라는 빈 디렉토리에 마운트되어, 두 개의 디스크를 하나의 파일 시스템으로 나타나고 두 번째 디스크의 내용은 /usr에서 볼 수 있습니다.

유닉스 디렉토리는 파일을 포함하지 않습니다. 대신, 그것들은 파일과 그것의 메타데이터 (소유자, 허가권, 마지막 접근 시간 등이지만, 이름은 아님)를 모두 차례로 포함하는 소위 inode에 대한 참조와 쌍을 이루는 파일의 이름을 포함합니다. 파일 시스템에서 여러 이름은 같은 파일을 참조할 수 있으며, 이것을 하드 링크라는 용어로 말합니다.[1] 하드 링크의 수학적 특성으로 인해 디렉토리는 전형적으로 하드-링크되지 않을 수 있으므로 디렉토리는 여전히 트리를 형성할지라도, 파일 시스템을 제한된 유형의 방향화된 비순환 그래프로 만듭니다. (1969년에 원래 구상된 대로, 유닉스 파일 시스템은 경로 이름 대신 탐색을 제공하는 디렉토리에 대한 하드 링크를 갖는 일반 그래프로 실제로 사용됩니다.[2])

File types

원래 유닉스 파일 시스템은 세 가지 유형의 파일: 일반 파일, 디렉토리, 및 장치 파일이라고도 하는 "특수 파일"을 지원했습니다.[1] 버클리 소프트웨어 배포(Berkeley Software Distribution, 줄여서 BSD)시스템 V는 각각 프로세스-사이 통신에 사용할 파일 유형을 추가했는데, BSD는 소켓[3] 추가한 반면에 시스템 V는 FIFO 파일을 추가했습니다.

BSD는 역시 파일 형식 범위에 심볼릭 링크 (종종 "심링크"라고도 함)를 추가했으며, 이것은 다른 파일을 참조하고 하드 링크를 보완하는 파일입니다.[3] 심링크는 멀틱스에서 유사한 기능을 따라 모델링되었고,[4] 그것들은 파일시스템에 걸쳐 있을 수 있고 대상 개체와 독립적이라는 점에서 하드 링크와 다릅니다. 다른 유닉스 시스템은 추가 유형의 파일을 지원할 수 있습니다.[5]

Conventional directory layout

프로그램, 시스템 구성 파일, 및 사용자의 홈 디렉토리와 같은 일부 유형의 파일을 찾기 위한 특정 관례가 존재합니다. 이것들은 버전 7 유닉스 이후 hier(7) 매뉴얼 페이지에 처음 문서화되었습니다;[6] 후속 버전, 변종들 및 클론에는 전형적으로 유사한 매뉴얼 페이지를 가집니다.[7][8][9][10][11][12]

디렉토리 레이아웃의 세부 사항은 시간이 지남에 따라 달라졌습니다. 비록 파일 시스템 레이아웃이 단일 유닉스 사양의 일부가 아닐지라도, 시스템 V 응용 프로그램 바이너리 인터페이스, 인텔 바이너리 호환성 표준, 공통 운영 시스템 환경, 및 리눅스 재단파일시스템 계층 표준 (FHS)과 같은 그것(의 일부)을 표준화하려는 여러 시도가 있습니다. [13]

다음은 유닉스 운영 시스템에서 파일의 공통적인 위치에 대한 일반화된 개요입니다:

디렉토리 또는 파일 설명
/ 슬래시 / 문자는 단독으로 파일시스템 트리의 루트를 나타냅니다.
/bin
바이너리를 나타내고 ls 또는 cp와 같은 특정 기본 유틸리티를 포함하며, 그것이 별도의 파일 시스템일 때 /usr을 마운트하거나, /usr을 마운트할 수 없을 때 단일-사용자 (관리자) 모드로 실행하는 데 필요합니다. 시스템 V.4에서, 이것은 /usr/bin에 대한 심볼릭 링크입니다. 그렇지 않으면, 그것은 루트파일 시스템 자체에 있어야 합니다.
/boot
성공적인 부팅 프로세스에 필요한 모든 파일이 포함되어 있습니다. 리서치 유닉스에서, 이것은 디렉토리가 아닌 하나의 파일이었습니다.[14] 요즘은 시스템, 부트로더 등이 달리 요구하지 않은 한 보통 루트 파일시스템 자체에 있습니다.
/dev
장치를 나타냅니다. 주변 장치와 유사-장치파일 표현을 포함합니다. 역시 참조하십시오: Linux Assigned Names and Numbers Authority. 루트 파일시스템 자체에 있어야 합니다.
/etc
시스템-전체 구성 파일과 시스템 데이터베이스를 포함합니다; 이름은 et cetera[14]를 나타내지만 이제 더 나은 확장은 editable-text-configurations입니다. 원래는 init와 같은 "위험한 유지-관리 유틸리티"도 포함하고 있었지만,[6] 이것들은 전형적으로 /sbin 또는 다른 곳으로 이동되었습니다. 루트 파일시스템 자체에 있어야 합니다.
/home
리눅스와 일부 다른 시스템의 사용자 홈 디렉토리를 포함합니다. 유닉스의 원래 버전에서, 홈 디렉토리는 대신 /usr에 있었습니다.[15] 일부 시스템은 여전히 다른 위치를 사용하거나 사용해 오고 있습니다: macOS/Users에 홈 디렉토리를 가지고, 이전 버전의 BSD는 /u에 그것을 넣고, FreeBSD/usr/home을 가집니다.
/lib
원래 필수 라이브러리: C 라이브러리이지만, 포트란 라이브러리는 아닙니다.[14] 최신 시스템에서, 그것은 /bin에 있는 프로그램에 필요한 공유 라이브러리와 로드 가능한 커널 모듈 또는 장치 드라이버를 포함하고 있습니다. 리눅스 배포판은 다중 아키텍처 지원을 위해 /lib32/lib64 변형을 가질 수 있습니다.
/media
USB 스틱, 미디어 플레이어 등과 같은 이동식 장치의 기본 마운트 지점. 상식적으로, 하위 디렉터리가 마운트 지점인 디렉터리 자체는 루트 파티션 자체에 있습니다.
/mnt
마운트를 의미합니다. 시스템 관리자가 임시 마운트 지점으로 공통적으로 사용하는 빈 디렉토리입니다. 상식적으로, 하위 디렉터리가 마운트 지점인 디렉터리 자체는 루트 파티션 자체에 있습니다.
/opt
로컬에 설치된 소프트웨어를 포함하고 있습니다. 이 디렉토리 (패키지당 하나의 하위 디렉토리)에 소프트웨어를 설치하는 패키지 관리자가 있는 시스템 V에서 시작되었습니다.[16]
/proc
프로세스에 대한 정보를 파일로 보여주는 procfs 가상 파일시스템.
/root
수퍼유저 루트 - 즉, 시스템 관리자의 홈 디렉토리입니다. 이 계정의 홈 디렉토리는 보통 초기 파일시스템에 있고, 따라서 다른 파일시스템을 사용할 수 없는 특정 유지 관리를 수행해야 하는 경우 /home (또 다른 파일 시스템의 마운트 지점일 수 있음)에 없습니다. 그러한 경우는 예를 들어 하드 디스크 드라이브에 물리적 오류가 발생하여 제대로 장착할 수 없는 경우에 발생할 수 있습니다. 관례에 따라, 이 디렉토리는 루트 파티션 자체에 있습니다; 어떤 경우에도, /home/root 또는 이와 유사한 것에 대한 링크가 아닙니다.
/sbin
"시스템 (또는 수퍼유저) 바이너리"를 의미하고 보통 시스템을 시작, 유지 관리 및 복구하는 데 필요한 init와 같은 기본 유틸리티를 포함합니다. 루트 파티션 자체에 있어야 합니다.
/srv
서버 데이터 (시스템에서 제공하는 서비스에 대한 데이터).
/sys
일부 리눅스 배포판에서, 하드웨어 및 운영 시스템과 관련된 정보가 포함된 sysfs 가상 파일시스템을 포함하고 있습니다. BSD 시스템에서, 공통적으로 /usr/src/sys에 있는 커널 소스에 대한 심볼릭 링크입니다.
/tmp
재부팅 후에도 유지되지 않을 것으로 예상되는 임시 파일을 위한 장소입니다. 많은 시스템은 시작시 이 디렉토리를 지우거나 tmpfs를 사용하여 구현합니다.
/unix
리서치 리눅스 및 시스템 V의 유닉스 커널.[14] 3BSD가상 메모리 지원이 추가되면서, 이름이 /vmunix로 변경되었습니다.
/usr
"사용자 파일 시스템": 원래 사용자 홈 디렉토리를 보유하고 있는 디렉토리이지만,[15] 이미 리서치 리눅스의 제 3판, 1973년경, 기본 명령이 /bin 또는 /usr/bin에 나타나도록 운영 시스템의 프로그램을 두 개의 디스크 (그 중 하나는 256K 고정-헤드 드라이브)로 분할하는 데 재사용되었습니다.[17] 그것은 이제 X 윈도우 시스템, KDE, Perl, 등과 같이 시스템에 중요하지 않은 실행 파일, 라이브러리 및 공유 자원을 보유합니다. 더 이전 유닉스 시스템에서, 사용자 홈 디렉토리는, 비록 1984년까지 이것은 지역 관례에 달려 있을지라도, 프로그램을 포함하는 디렉토리와 함께 여전히 /usr에 나타날 수 있습니다.[14]
/include
시스템 전체에서 사용되는 개발 헤더를 저장합니다. 헤더 파일은 역사적으로 이 디렉토리의 이름이 선택된 방식인 C 언어에서 #include 지시문에 의해 주로 사용됩니다.
/lib
/usr 또는 다른 곳에 저장된 프로그램에 필요한 라이브러리와 데이터 파일을 저장합니다.
/libexec
사용자에 의해 직접 실행되지 않고 다른 프로그램에 의해 실행되도록 의도된 프로그램을 보유합니다. 예를 들어, Sendmail 실행 파일은 이 디렉토리에서 찾을 수 있습니다.[18] 2011년까지는 FHS에 존재하지 않습니다;[19] 리눅스 배포판은 전통적으로 이 디렉토리의 내용을 /usr/lib로 이동했으며, 여기에서 그것들은 4.3BSD에도 있습니다.
/local
/usr 구조와 비슷하지만, 그 하위 디렉토리는 BSD 포트 모음에서 사용자 정의 프로그램 또는 파일과 같이 운영 시스템 배포의 일부가 아닌 추가에 사용됩니다. 보통 /usr/local/lib 또는 /usr/local/bin과 같은 하위 디렉토리를 가집니다.
/share
아키텍처 독립적인 프로그램 데이터. 리눅스와 최신 BSD 변종에서, 이 디렉토리는 맨페이지에 대한 man과 같은 하위 디렉토리를 가지며, 이전 버전에서 /usr 바로 아래에 나타나도록 사용되었습니다.
/var
변할수 있는 것을 의미합니다. 특히 크기가 자주 변경될 수 있는 파일의 위치 – 예를 들어, 시스템의 사용자에게 보낸 전자-우편 또는 프로세스-ID 잠금 파일.
/log
시스템 로그 파일을 포함합니다.
/mail
모든 수신 우편을 저장되는 위치입니다. 사용자 (root 제외)는 자신의 메일에만 접근할 수 있습니다. 종종, 이 디렉토리는 /var/spool/mail에 대한 심볼릭 링크입니다.
/spool
스풀 디렉토리. 인쇄 작업, 메일 스풀 및 기타 대기 작업을 포함합니다.
/src
일부 프로그램의 컴파일되지 않은 소스 코드가 있는 곳입니다.
/tmp
/var/tmp 디렉토리는 시스템 재부팅 사이에 보존되어야 하는 임시 파일을 위한 장소입니다.

See also

References

  1. ^ a b c d e 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. ^ a b Ritchie, Dennis M. (1979). The Evolution of the Unix Time-sharing System. Language Design and Programming Methodology Conf.
  3. ^ a b 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. Addison-Wesley. ISBN 978-0-201-06196-3.
  4. ^ McKusick, Marshall Kirk; et al. "A Fast Filesystem for Unix" (PDF). Freebsd.org. CSRG, UC Berkeley. Retrieved 16 November 2016.
  5. ^ stat(2) – Linux Programmer's Manual – System Calls
  6. ^ a b hier(7) – Version 7 Unix Programmer's Manual
  7. ^ hier(7) – FreeBSD Miscellaneous Information Manual
  8. ^ hier(7) – OpenBSD Miscellaneous Information Manual
  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) – Linux Programmer's Manual – Overview, Conventions and Miscellanea
  13. ^ George Kraft IV (1 November 2000). "Where to Install My Products on Linux?". Linux Journal. Retrieved 13 November 2014.
  14. ^ a b c d e Kernighan, Brian W.; Pike, Rob (1984). The UNIX Programming Environment. Prentice-Hall. pp. 63–65. Bibcode:1984upe..book.....K.
  15. ^ a b Ritchie, Dennis. "Unix Notes from 1972". Retrieved 14 January 2018.
  16. ^ System V Application Binary Interface Edition 4.1 (1997-03-18)
  17. ^ M. D. McIlroy (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986. CSTR 139, Bell Labs.
  18. ^ "Chapter 7. sendmail". UNICOS/mp Networking Facilities Administration. Cray. Retrieved 14 September 2013.
  19. ^ "fhs-spec revision 44".