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 / 명령어 / kill - PID에 시그널 보내기

Linux / 명령어 / kill - PID에 시그널 보내기

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

Linux / 명령어 / sync - 버퍼에 남은 쓰기 데이터 저장 요청

Linux / 명령어 / sync - 버퍼에 남은 쓰기 데이터 저장 요청

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

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

Linux / 명령어 / mount - 파일 시스템 연결 상태 확인과 마운트

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

Linux / 명령어 / head - 파일 앞부분의 줄과 바이트 출력

Linux / 명령어 / head - 파일 앞부분의 줄과 바이트 출력

Linux head 명령어로 파일의 처음 몇 줄이나 바이트를 출력하는 방법을 설명합니다. 여러 파일, 음수 개수, 파이프 활용과 바이너리 데이터 주의점도 정리합니다.

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux / 명령어 / last - 로그인 기록과 시스템 부팅 이력 확인

Linux last 명령어로 사용자 로그인·로그아웃, 재부팅과 실패한 로그인 이력을 확인하는 방법을 설명합니다. wtmp·btmp, 기간 필터, 상태 해석과 보안 조사 시 한계를 함께 정리합니다.

Linux / 명령어 / time - 명령 실행 시간 측정

Linux / 명령어 / time - 명령 실행 시간 측정

Linux time 명령어로 명령과 파이프라인의 실행 시간 및 자원 사용량을 측정하는 방법을 설명합니다. Bash 예약어와 GNU /usr/bin/time의 차이, 출력 저장과 정확한 비교 방법을 정리합니다.

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

Linux / 명령어 / fg - 셸 작업을 포그라운드로 가져오기

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

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

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

Linux / 명령어 / ping - 호스트 응답과 왕복 시간 확인

Linux / 명령어 / ping - 호스트 응답과 왕복 시간 확인

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

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

Linux tree 명령어로 디렉터리와 파일 구조를 계층적으로 확인하는 방법을 설명합니다. 설치, 깊이 제한, 숨김 파일, 제외 패턴, 크기·권한 표시와 JSON 저장 방법까지 정리합니다.