Linux 강좌 / 파일 종류와 정보 확인하기 - ls, file, stat, readlink

파일 이름이나 확장자만으로 리눅스 파일의 종류를 확정할 수는 없습니다. ls -l은 디렉터리·일반 파일·링크 같은 파일 시스템의 종류와 기본 속성을 보여 주고, file은 파일 내용을 검사해 형식을 추정하며, stat은 크기·권한·시각·inode 같은 메타데이터를 확인합니다. 이 강좌에서는 세 결과가 서로 무엇을 말하는지 구분하는 방법을 익힙니다.

리눅스에서 말하는 파일 종류

리눅스에서는 일반 문서뿐 아니라 디렉터리, 심볼릭 링크, 장치 등도 파일 시스템의 항목으로 표현합니다. ls -l 출력의 맨 첫 글자는 그 항목의 종류를 알려 줍니다. 확장자 .txt나 .jpg는 이름의 일부일 뿐, 이 첫 글자와 같은 정보가 아닙니다.

첫 글자 종류 예
- 일반 파일 문서, 실행 파일 등
d 디렉터리 파일을 담는 경로
l 심볼릭 링크 다른 경로를 가리키는 항목
c, b 문자 장치, 블록 장치 /dev 아래의 장치 항목
p, s FIFO(이름 있는 파이프), 소켓 프로세스 간 통신에 쓰이는 항목

실제 항목의 종류를 보려면 ls -ld로 대상을 지정하세요. 디렉터리에 ls -l만 적용하면 디렉터리 자체가 아니라 그 안의 항목이 나열될 수 있습니다.

ls -ld /etc /etc/passwd

출력에서 /etc 행은 보통 d, /etc/passwd 행은 -로 시작합니다. 뒤에는 권한, 링크 수, 소유자, 그룹, 크기, 수정 시각과 이름 등이 이어집니다. 정확한 값과 표시 방식은 시스템에 따라 달라집니다.

file로 내용에 따른 형식 추정하기

file은 파일 시스템의 종류와 파일 내용의 특징을 조사해 사람이 읽기 쉬운 설명을 출력합니다. 예를 들어 확장자가 없는 /etc/passwd도 텍스트 파일로 분류될 수 있습니다.

file /etc/passwd

출력은 다음과 비슷할 수 있습니다. 실제 인코딩과 구현에 따라 문구가 달라집니다.

/etc/passwd: ASCII text

file의 설명은 파일의 내용을 검사한 판별 결과이지 무조건 정확한 인증 정보가 아닙니다. 텍스트 인코딩이나 파일 형식의 세부 판정은 검사 규칙에 따라 달라질 수 있습니다. 심볼릭 링크 자체를 볼지 대상 파일을 따라갈지도 옵션과 환경에 따라 달라지므로, 링크를 조사할 때는 file -h 링크와 file -L 링크의 차이를 확인하세요.

stat으로 메타데이터 확인하기

stat은 파일 내용이 아니라 파일 시스템이 관리하는 정보를 보여 줍니다. 파일 크기, 권한, 소유자, inode 번호, 링크 수와 여러 시각을 확인할 수 있습니다. inode는 파일 시스템이 항목의 메타데이터를 관리할 때 사용하는 식별 단위로, 이름 자체와는 구별됩니다.

stat /etc/passwd

출력이 길다면 GNU stat의 -c 옵션으로 필요한 값만 볼 수 있습니다. 아래 예제의 %F는 파일 종류, %s는 바이트 단위 크기, %n은 이름입니다.

stat -c '%F | %s bytes | %n' /etc/passwd

출력은 아래와 같은 한 줄입니다. 1234는 형식을 설명하기 위한 가상 크기이며, 실제 크기와 표시 언어는 시스템마다 다릅니다.

regular file | 1234 bytes | /etc/passwd

첫 부분은 파일 종류가 일반 파일임을, 가운데는 파일 크기가 바이트 단위로 표시됨을, 마지막은 조사한 경로가 /etc/passwd임을 뜻합니다. 기본 stat 출력에 있는 Access(접근), Modify(내용 수정), Change(메타데이터 변경), Birth(생성) 시각은 서로 다른 의미입니다. 특히 Change를 ‘생성 시각’으로 읽지 마세요. Birth는 파일 시스템이나 도구가 제공하지 않을 수도 있습니다.

심볼릭 링크를 만났을 때

심볼릭 링크는 다른 경로를 가리키는 별도 항목입니다. ls -l은 보통 링크명 -> 대상 형태로 보여 줍니다. readlink 링크명은 링크 안에 저장된 대상 경로 문자열을 출력하며, 그 문자열이 상대 경로라면 링크가 있는 디렉터리를 기준으로 해석해야 합니다.

링크 자체의 메타데이터와 링크가 가리키는 파일의 메타데이터는 다릅니다. GNU stat에서 링크 자체를 보려면 기본 동작을, 링크 대상을 따라가려면 -L을 사용합니다. 링크가 끊어져 있다면 대상을 따라가는 검사는 실패할 수 있습니다. 실습용 링크를 만드는 과정은 링크 강좌에서 다룹니다.

어떤 명령을 선택할까요?

  • 목록에서 종류와 기본 속성 확인: ls -l 또는 대상 자체를 보는 ls -ld
  • 내용을 바탕으로 파일 형식 추정: file
  • 크기·시각·inode 등 자세한 속성 확인: stat
  • 심볼릭 링크에 기록된 대상 경로 확인: readlink

명령별 예제는 file로 형식 확인하기, stat으로 메타데이터 확인하기, readlink로 링크 대상 확인하기에서 더 자세히 볼 수 있습니다.

공식 문서

file(1) 매뉴얼, GNU stat 문서, GNU readlink 문서에서 명령의 옵션과 예외를 확인할 수 있습니다.

같은 카테고리의 다른 글
Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

Linux / 리눅스 디렉토리 구조와 주요 디렉토리별 용도

리눅스의 /etc, /var, /usr, /home, /proc, /dev 등 주요 디렉토리별 용도와 이름의 의미를 정리합니다. 리눅스 파일시스템 구조를 처음 배우거나 서버 관리에 필요한 디렉토리를 확인할 때 참고할 수 있습니다.

Linux / 명령어 / command - 명령어 검색과 별칭 우회 실행

Linux / 명령어 / command - 명령어 검색과 별칭 우회 실행

셸 command 명령어로 함수 검색을 건너뛰어 원래 명령을 실행하고, command -v로 명령 존재 여부를 확인하는 방법을 설명합니다. -p·-V 옵션과 builtin·exec·env의 차이도 정리합니다.

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Linux 강좌 / APT와 DNF로 패키지 설치·업데이트하기

Debian·Ubuntu의 APT와 Rocky Linux의 DNF로 패키지를 검색·설치·업데이트·제거하는 방법을 비교합니다. 저장소와 의존성, 업데이트 전 확인할 항목을 다룹니다.

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

Linux / 명령어 / dmesg - 커널 메시지와 부팅 로그 확인

Linux dmesg 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux tail 명령어로 파일의 마지막 행과 바이트를 확인하고 새로 추가되는 로그를 추적하는 방법을 설명합니다. -n, -f, -F 차이와 로그 로테이션, 필터링 및 여러 파일 모니터링 예제를 정리합니다.

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux / 명령어 / tracepath - 네트워크 경로와 경로 MTU 확인

Linux tracepath 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / pkill - 이름으로 프로세스에 시그널 보내기

Linux / 명령어 / pkill - 이름으로 프로세스에 시그널 보내기

Linux pkill 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / renice - 실행 중인 프로세스 nice 값 변경

Linux / 명령어 / renice - 실행 중인 프로세스 nice 값 변경

Linux renice 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ss - 열린 포트와 소켓 연결 상태 확인

Linux / 명령어 / ss - 열린 포트와 소켓 연결 상태 확인

Linux ss 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

apropos 명령어로 이름을 모르는 리눅스 명령과 매뉴얼을 기능 키워드로 찾는 방법을 설명합니다. 정규 표현식, 모든 키워드 일치, 섹션 제한과 검색 결과가 없을 때의 해결 방법을 다룹니다.