리눅스 파일 유형 7가지: - d l c b p s

ls -l 첫 글자로 구분하는 7가지 파일 유형(일반·디렉터리·심볼릭링크·문자장치·블록장치·FIFO·소켓)의 특징과 확인 방법을 익힌다.

· 5 min read · PALDYN Team

지난 글에서 하드 링크와 심볼릭 링크의 차이를 살펴봤다. 이번에는 리눅스 파일 시스템이 다루는 파일 유형 7가지를 정리한다. 리눅스는 “모든 것은 파일이다”라는 철학 아래 하드웨어 장치, 프로세스 간 통신 채널, 소켓까지 파일로 표현한다. ls -l 출력의 첫 번째 문자를 읽을 줄 알면 시스템 전체가 더 명확하게 보인다.

ls -l 로 유형 확인

ls -l /dev/sda /dev/tty /run/docker.sock /tmp
# brw-rw----  /dev/sda          → b: 블록 장치
# crw-rw-rw-  /dev/tty          → c: 문자 장치
# srw-rw----  /run/docker.sock  → s: 소켓
# drwxrwxrwt  /tmp              → d: 디렉터리

권한 문자열 10자리 중 첫 번째 문자가 파일 유형을 나타낸다.

7가지 파일 유형

리눅스 파일 유형 7가지

- — 일반 파일

텍스트, 바이너리, 실행 파일, 이미지 등 가장 흔한 파일. touch, 편집기, cp 등으로 생성한다.

d — 디렉터리

파일명 → inode 번호 매핑 테이블을 담는 특수 파일이다. ls -la로 보면 모든 디렉터리에 .(자신)과 ..(부모)가 있다.

l — 심볼릭 링크

대상 경로 문자열을 저장하는 파일. ln -s target link로 생성하며 ls -l에서 → target으로 표시된다.

c — 문자 장치 (Character Device)

문자 스트림 단위로 I/O하는 장치. /dev/tty(터미널), /dev/null, /dev/random, /dev/urandom 등이 대표적이다.

# /dev/null: 블랙홀 — 모든 입력을 버린다
command > /dev/null 2>&1

# /dev/random: 암호학적으로 안전한 난수
head -c 16 /dev/urandom | xxd

b — 블록 장치 (Block Device)

블록 단위로 I/O하는 저장 장치. /dev/sda, /dev/nvme0n1, /dev/loop0 등이다. lsblk로 블록 장치 목록을 확인할 수 있다.

p — 명명된 파이프 (Named Pipe / FIFO)

FIFO(First In, First Out) 방식의 단방향 IPC 채널이다. 익명 파이프(|)와 달리 파일시스템에 이름을 가진다.

mkfifo mypipe          # FIFO 생성
cat mypipe &           # 한 터미널에서 읽기 대기
echo "hello" > mypipe  # 다른 터미널에서 쓰기

s — 소켓 (Socket)

양방향 IPC를 위한 Unix 도메인 소켓이다. 네트워크 소켓과 달리 파일 경로로 접근한다.

ls -la /run/*.sock /tmp/.mysql.sock
# s 로 시작하는 항목들

파일 유형 확인 명령어

파일 유형 확인 명령어

file 명령 — 내용 기반 판별

ls는 inode의 유형 플래그를 보지만, file은 파일 내용의 매직 바이트를 분석해 실제 포맷을 판단한다.

file /bin/ls          # ELF 64-bit LSB executable
file /etc/hostname    # ASCII text
file image.png        # PNG image data
file archive.tar.gz   # gzip compressed data
file unknown          # 확장자 없어도 내용으로 판별

확장자를 신뢰할 수 없는 파일이나 미지의 바이너리를 검사할 때 유용하다.

find -type — 유형별 검색

find /dev -type c        # 문자 장치
find /dev -type b        # 블록 장치
find /run -type s        # 소켓
find . -type l           # 심볼릭 링크
find /tmp -type p        # FIFO

스크립트에서 유형 확인

if [ -f "$path" ]; then
    echo "일반 파일"
elif [ -d "$path" ]; then
    echo "디렉터리"
elif [ -L "$path" ]; then
    echo "심볼릭 링크"
elif [ -S "$path" ]; then
    echo "소켓"
elif [ -p "$path" ]; then
    echo "FIFO"
elif [ -b "$path" ]; then
    echo "블록 장치"
elif [ -c "$path" ]; then
    echo "문자 장치"
fi

-L 체크는 -f보다 먼저 수행해야 한다. -f는 링크가 가리키는 파일을 따라가기 때문에 심볼릭 링크도 일반 파일로 판정될 수 있다.

/dev 주요 특수 파일 정리

경로유형용도
/dev/nullc출력 버리기
/dev/zeroc0x00 스트림
/dev/randomc블로킹 난수
/dev/urandomc논블로킹 난수
/dev/sdab첫 번째 SATA 디스크
/dev/ttyc제어 터미널
/dev/pts/0c첫 번째 가상 터미널

지난 글: 하드 링크 vs 심볼릭 링크: 연결의 두 가지 방식


읽어주셔서 감사합니다. 😊