파일 시스템 구조
파일 시스템
사용자가 볼 수 있는 자료는 모두 하드디스크에 존재한다. 하드디스크 자료의 논리적 구조가 파일 시스템이다.
UNIX/Linux의 파일 시스템
UNIX와 Linux의 파일 시스템은 트리 구조이다. (/는 root)
트리 구조
파일(File): 보조 저장 매체에 존재하는 정보의 논리적 저장 단위
디렉터리(Directory): 많은 파일의 논리적 집합=파일의 목록이며, UNIX에서는 디렉터리도 하나의 파일로 취급한다.
경로(Path)
- 절대경로: /(root)로부터의 경로로, 시스템 전체에서 유일무이한 이름의 역할이다.
- 상대경로: 현재 위치로부터의 경로를 나타낸다.
/ |
루트 |
. |
현재 디렉터리 |
.. |
부모 디렉터리 |
- |
홈 디렉터리(로그인 시 위치) |
UNIX/Linux 파일 시스템 구조의 관습적 표준을 몇 가지 나열해보자.
/boot |
부팅에 필요한 모든 파일 |
/bin |
핵심적은 사용자 명령(binary) 프로그램 파일 |
/dev |
장치 파일, 하드 디스크, 터미널, 주변 장치 등과의 연결 역할 |
/etc |
텍스트로 된 설정 파일 (실행 파일은 올 수 없다) |
/home |
각 사용자별 저장 공간 (로그인 시 시작 위치) |
/lib |
핵심적인 공유 라이브러리와 커널 모듈 |
/root |
시스템 관리자(root)의 홈 디렉터리 |
/usr/bin |
거의 모든 사용자 명령 프로그램 |
/sys |
하드웨어 및 장치 드라이버, 커널 하위 시스템 등에 대한 정보를 제공하는 가상 파일 시스템 (시스템 운영 중에만 존재) |
/tmp |
임시 파일용 디렉터리, 시스템과 사용자 관계 없이 임시 파일들을 저장할 수 있는 공간, 예고 없이 삭제 가능 |
파일의 속성
파일을 관리할 땐 파일의 메타 정보(이름, 소유자, 생성일자, 크기, 접근권한 등)도 관리해야 한다.
파일의 형식
권한 속성
파일의 권한은 소유자, 그룹, 전체 사용자로 구분하며 권한에는 읽기/쓰기/실행, 만들기/삭제/접근이 있다.
일반 파일
텍스트 파일을 비롯하여 응용 프로그램에 따라 다양한 형식의 파일이 존재한다. 일반 파일들은 이름이나 확장자로 구분하지 않는다.
특수 파일
시스템의 다른 자원을 파일로 취급한다. 예시는 아래와 같다.
directory |
여러 파일의 논리적 집합 단위로 계층 구조를 형성한다. |
symbolic link |
다른 파일에 대한 참조를 표시한다. (파일을 찾아갈 수 있는 경로 정보 저장) |
named pipe |
실행 중인 프로세스 간에 정보를 전달하는 통로이다. 단방향이며 표준입출력을 연결한다. |
socket |
프로세스 간 정보 교환을 위한 통로이며 양방향 정보 전달을 수행한다. |
device |
하드웨어 장치이며 character형과 block형으로 구분한다. |
디렉터리
파일의 고유 번호와 이름을 기록한다. 이때 자신(.)과 부모(..)는 반드시 포함하며, 디렉터리의 내용은 시스템이 수정/관리한다. 사용자는 디렉터리를 생성/삭제/접근하는 것이 가능하다.
링크
하나의 파일 실체에 대해 여러 개의 접근 경로가 가능하다.
- hard link: 새로운 이름(절대경로)과 파일 실체를 연결한다.
- soft(symbolic) link: 새로운 파일을 만들어 경로 정보를 저장한다.
장치
주변 장치를 사용하기 위한 인터페이스 역할을 한다. 내용이 없기 때문에 크기는 0이다. 주로 /dev에 있으며 장치 탈부착 시 자동으로 생성/삭제된다. 장치의 종류는 아래와 같다.
- character: 스트리밍 방식 입출력 (프린터, 터미널 등)
- block: 임의 접근 가능 (하드 디스크, CD-ROM 등)
파티션
물리적 장치의 논리적 분할이며, m:n의 대응 관계가 가능하다. (즉 하나의 장치에 여러 개 파티션, 여러 개 장치를 묶어 하나의 파티션에 대응하는 것이 가능하다.)
한 파티션마다 하나의 논리적 파일 시스템으로 관리하며, 가상 파일 시스템에 대한 마운트 단위가 된다.
디스크 도구
하드 디스크 정보와 파티션을 관리한다.