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 문서에서 명령의 옵션과 예외를 확인할 수 있습니다.









