Linux Filesystem Overview¶
1. 리눅스 파일시스템의 핵심 철학 (Philosophy)¶
리눅스는 "모든 것이 파일이다(Everything is a file)"**라는 강력한 철학을 기반으로 설계되었습니다. 이는 시스템의 복잡성을 낮추고 일관된 인터페이스를 제공하기 위함입니다.
- **범위: 텍스트/이미지 등 일반 데이터뿐만 아니라 디렉터리, 하드웨어 장치(HDD, 키보드), 프로세스 정보, 네트워크 소켓까지 파일로 취급합니다.
- 장점: read, write, open, close와 같은 표준 시스템 콜을 사용하여 거의 모든 자원을 제어할 수 있습니다.
2. 파일시스템 계층 구조 표준 (FHS: Filesystem Hierarchy Standard)¶
리눅스는 배포판 간의 호환성을 위해 **FHS**를 따릅니다. 모든 파일은 최상위 루트(/)에서 시작하는 트리 구조를 가집니다.
주요 디렉터리 역할¶
| 디렉터리 | 설명 | 비고 |
|---|---|---|
/ (Root) |
최상위 시작점 | Root 사용자만 쓰기 가능 |
/bin |
기본 사용자 명령어 | ls, cp, cat 등 (필수 바이너리) |
/sbin |
시스템 관리자 명령어 | fsck, init, reboot 등 (시스템 관리용) |
/boot |
부팅 관련 파일 | 커널(vmlinuz), 부트로더(GRUB), initrd |
/dev |
디바이스 파일 | /dev/sda (디스크), /dev/tty (터미널) 등 |
/etc |
시스템 설정 파일 | 텍스트 기반 설정 파일 위주 (/etc/fstab, /etc/passwd) |
/home |
사용자 홈 디렉터리 | 일반 사용자의 개인 공간 (/home/user1) |
/lib |
공유 라이브러리 | /bin, /sbin 바이너리 실행에 필요한 라이브러리 |
/opt |
추가 패키지 | 서드파티 애플리케이션 설치 공간 |
/proc |
프로세스 정보 가상 FS | 메모리에 존재, 커널/프로세스 정보 노출 |
/sys |
시스템 하드웨어 가상 FS | 장치 드라이버 및 하드웨어 정보 |
/tmp |
임시 저장소 | 재부팅 시 삭제될 수 있음 |
/usr |
사용자/시스템 리소스 | /usr/bin, /usr/lib 등 읽기 전용 데이터 위주 |
/var |
가변 데이터 | 로그(/var/log), 스풀, DB 파일 등 수시로 변경되는 데이터 |
3. 파일시스템 내부 구조 (Internal Structure)¶
파일시스템은 단순히 데이터를 저장하는 공간을 넘어, 효율적인 관리를 위한 정교한 구조를 가집니다.
- 슈퍼 블록 (Superblock): 파일시스템의 전체 메타데이터를 저장합니다.
- 총 블록 수, 빈 블록 수, 블록 크기 등.
- 슈퍼 블록이 손상되면 파일시스템 전체에 접근할 수 없습니다.
- 아이노드 (Inode): **파일의 신분증**과 같습니다. 파일 내용은 포함하지 않지만, 파일에 대한 모든 정보를 담고 있습니다.
- 포함 정보: 소유자, 그룹, 권한, 파일 크기, 생성/수정 시간, 데이터 블록의 위치 주소.
- 주의: 파일 이름은 아이노드가 아닌 '디렉터리' 데이터에 저장되어 아이노드 번호와 매핑됩니다.
- 데이터 블록 (Data Block): 실제 파일의 내용(Contents)이 저장되는 공간입니다.
4. 파일 유형 및 링크¶
ls -l 명령어로 확인 가능한 파일 유형입니다.
- 일반 파일 (
-): 텍스트, 바이너리 데이터. - 디렉터리 (
d): 파일들의 목록을 담고 있는 파일. - 블록 장치 (
b): 버퍼링을 사용하는 저장 장치 (HDD, SSD). - 문자 장치 (
c): 버퍼링 없이 스트림 처리하는 장치 (키보드, 마우스). - 링크 파일 (
l):- Hard Link: 원본과 동일한 Inode를 가리킴. 원본 삭제 후에도 데이터 접근 가능. (동일 파일시스템 내에서만 가능)
- Symbolic Link (Soft Link): 원본 파일의 경로(Path)를 가리킴. 원본 삭제 시 링크 깨짐(Dangling link).
5. 권한 (Permissions) 및 소유권¶
다중 사용자 환경인 리눅스에서 보안의 핵심입니다.
- 권한 구조: Read(4), Write(2), Execute(1)
- 대상: User(소유자), Group(소유 그룹), Others(그 외)
- 예:
drwxr-xr-x(755) -> 소유자는 모든 권한, 나머지는 읽기/실행만 가능.
- 예:
- 관리 명령어:
chmod: 권한 변경 (예:chmod 755 file)chown: 소유자/그룹 변경 (예:chown user:group file)