콘텐츠로 이동

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 명령어로 확인 가능한 파일 유형입니다.

  1. 일반 파일 (-): 텍스트, 바이너리 데이터.
  2. 디렉터리 (d): 파일들의 목록을 담고 있는 파일.
  3. 블록 장치 (b): 버퍼링을 사용하는 저장 장치 (HDD, SSD).
  4. 문자 장치 (c): 버퍼링 없이 스트림 처리하는 장치 (키보드, 마우스).
  5. 링크 파일 (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)