0 views
1. 개요
- 리눅스와 유닉스 계열의 운영체제의 핵심 철학은 “Everything is a file(모든 것은 파일이다)” 이다.
- 운영체제는 하드웨어 장치, 프로세스 간 통신 채널, 디렉터리 등을 모두 파일과 동일한 인터페이스로 다룬다.
- 리눅스 커널은 이것을 총 7가지 유형으로 구분하여 관리한다.
2. 동작 원리
- 사용자가 보는 파일 이름이나 확장자는 껍데기에 불과하다
- 리눅스 커널이 파일 종류를 식별하는 진짜 정보는 Inode 내부에 있다.
2.1 Inode 와 st_mode
- 리눅스 파일 시스템의 메타데이터 저장소인 Inode에는 st_mode 라는 필드가 존재한다.
- 이 필드의 비트 정보를 통해 커널은 해당 파일이 진짜 파일인지, 디렉터리인지 혹은 장치 파일인지 판단한다.
st_mode는 각 비트 영역마다 특정 정보를 의미하도록 설계되어 있다.
[Inode 구조]
- 여기서 st_mode 는 File Mode에 속한다.
| 항목 | 설명 |
|---|---|
| File Mode | 파일의 종류(일반, 디렉터리, 소켓 등) 및 접근 권한(rwx) |
| Owner Info | 파일 소유자의 ID(UID) 및 그룹 ID(GID) |
| File Size | 파일의 전체 크기 (바이트 단위) |
| Timestamps | 접근(atime), 수정(mtime), 변경(ctime) 시간 |
| Link Count | 해당 inode를 가리키는 하드 링크의 개수 |
| Block Pointers | 실제 데이터가 저장된 디스크 블록의 주소 목록 (포인터) |
[st_mode 비트 구조]
| 비트 범위 | 설명 | 주요 내용 |
|---|---|---|
| 12 ~ 15 | 파일 종류 (File Type) | 일반 파일, 디렉토리, 심볼릭 링크, 장치 파일 등 구분 |
| 9 ~ 11 | 특수 권한 (Special Bits) | Set-UID, Set-GID, Sticky Bit 설정 여부 |
| 0 ~ 8 | 접근 권한 (Permissions) | 소유자/그룹/기타 사용자의 읽기(r), 쓰기(w), 실행(x) 권한 |
2.2 식별자
- ls -l 명령어를 입력했을 때 출력되는 권한 문자열 ( ex → drwxr-xr-x) 의 가장 첫 번째 글자가 바로 파일의 종류를
나타낸다.
- 예:
drwxr-xr-x → d (Directory) - 예:
-rw-r--r-- → (Regular File)
- 예:
3. 리눅스 파일 7가지 유형
- 리눅스에서 정의하는 7가지 파일 종류는 다음과 같다.
| 기호 | 파일 종류 (Type) | 설명 및 특징 | 예시 경로 |
|---|---|---|---|
| - | Regular File | ||
| (일반 파일) | 텍스트, 이미지, 실행 파일, 라이브러리 등 가장 흔한 데이터 저장 파일. | /etc/passwd, /bin/ls | |
| d | Directory | ||
| (디렉토리) | 다른 파일들의 목록(이름과 Inode 번호)을 담고 있는 논리적 컨테이너. | /home, /usr | |
| l | Symbolic Link | ||
| (심볼릭 링크) | 윈도우의 '바로 가기'와 유사. 원본 파일을 가리키는 포인터 역할을 한다. | /usr/bin/python | |
| c | Character Device | ||
| (문자 장치) | 데이터를 바이트 단위(Stream)로 순차 처리하는 장치. | ||
| 버퍼를 사용하지 않는다. | /dev/console | ||
| (키보드, 마우스) | |||
| b | Block Device | ||
| (블록 장치) | 데이터를 블록 단위로 처리하며, 랜덤 액세스(Random Access)가 | ||
| 가능하다. 버퍼를 사용한다. | /dev/sda | ||
| (HDD, SSD, USB) | |||
| s | Socket | ||
| (소켓) | 네트워크 통신이나 로컬 프로세스 간 통신(IPC)을 위한 접점 파일. | /var/run/docker.sock | |
| p | Named Pipe / FIFO | 프로세스 간 통신(IPC)을 위해 생성된 파이프. | |
| 선입선출(First In First Out) 방식으로 데이터를 주고받는다. | 데이터베이스 파이프 등 |
4. 확인 방법 및 구문
4.1 ls -l 명령어로 확인하기
-
출력 결과의 첫 글자를 확인한다.
$ ls -ld /dev/sda /bin/bash /dev/tty b crw-rw---- 1 root disk 8, 0 Jan 1 12:00 /dev/sda <-- 'b' (Block Device) - rwxr-xr-x 1 root root 1.2M Jan 1 12:00 /bin/bash <-- '-' (Regular File) c rw-rw-rw- 1 root tty 5, 0 Jan 1 12:00 /dev/tty <-- 'c' (Character Device)
4.2 file 명령어로 확인하기
-
파일 내부의 헤더를 분석해서 더 구체적인 정보를 알려준다.
$ file /dev/sda /dev/sda: block special (8/0)
4.3 stat 명령어로 상세 정보 확인하기
-
Inode 정보와 파일 종류를 명확한 텍스트로 보여준다.
$ stat /home File: /home Size: 4096 Blocks: 8 IO Block: 4096 directory <-- 종류 명시 Device: 801h/2049d Inode: 2 Links: 3
Loading comments...