리눅스 명령어 stat는 파일이나 디렉터리의 상세 정보를 확인할 때 매우 유용합니다. 이 글에서는 stat 명령어의 사용법과 주요 옵션, 그리고 실생활에서의 활용 방법을 설명하겠습니다.
목차
리눅스 명령어 stat란?
stat 명령어는 파일 또는 파일 시스템의 상태를 보여주는 리눅스 명령어입니다. 파일의 크기, 권한, 마지막 접근 시간, 수정 시간, 생성 시간 등의 다양한 정보를 제공합니다.
기본 사용법
기본적으로 stat 명령어를 사용하려면 터미널에서 다음과 같이 입력합니다:
stat [filename or directory]ShellScript예를 들어, 현재 디렉터리에 있는 example.txt 파일의 상태를 확인하려면 다음과 같이 입력합니다:
stat example.txtShellScript이 명령을 실행하면 다음과 같은 결과가 출력됩니다.

주요 옵션
stat 명령어는 다양한 옵션을 제공하여 필요한 정보만 선택적으로 볼 수 있게 합니다. 몇 가지 주요 옵션을 살펴보겠습니다.
-L 옵션 (링크의 원본)
-L 옵션을 이용하면 심볼릭 링크인 경우 링크 자체가 아닌 원본 파일의 정보를 열람할 수 있습니다. 링크의 내용을 확인해서 원본을 찾아낸 다음 stat 명령어로 확인하지 않고, -L 옵션을 사용하면 바로 원본 파일의 정보를 열람할 수 있습니다.
stat -L filenameShellScript아래 그림을 보면 -L 옵션 없이 stat 명령어만 사용했을 때에는 심볼릭 링크가 어떻게 연결되어있는지 보여주며, 해당 파일이 심볼릭 링크인 것을 알려줍니다. 한편 -L 옵션을 사용한 경우에는 원본 파일인 original_file의 내용을 보여줍니다.

아래는 original_file의 정보입니다. 위 그림에서 stat -L 옵션을 이용한 경우와 같은 결과임을 확인할 수 있습니다.

-c, –format 옵션 (형식 지정)
-c 옵션과 –format 옵션은 출력 형식을 지정할 수 있게 합니다. 하지만, 출력 포맷 문자열에 백 슬래시와 함께 사용하는 특수문자들을 해석해 주지 않습니다. 출력 마지막에 new line 문자(\n)가 추가되어 줄바꿈이 되면서 출력이 끝납니다.
다음은 파일의 이름, 크기, 권한을 차례대로 보여주는 예시입니다.
stat -c "Name: %n Size(bytes): %s Permissions: %A" example.txtShellScript여기서 %n은 파일 이름, %s는 파일 크기를 나타냅니다. 결과는 다음과 같이 파일 이름과 파일 크기가 출력되는 것을 확인할 수 있습니다.

–printf 옵션
--printf 옵션은 -c나 –format 옵션과 동일하게 포맷 유형을 사용할 수 있습니다. 단, -c 옵션이나 –format 옵션과 다른 점은 문자열 포맷을 모두 출력한 뒤에 줄바꿈을 해 주지 않습니다. 따라서 줄바꿈을 원한다면 줄바꿈 문자를 추가해 줘야 합니다. 그리고 –printf 옵션을 이용하면 \n, \t 등의 백슬래시와 함께 사용하는 특수문자 사용이 가능합니다.
stat --printf="Name: %n\nSize: %s\nPermissions: %A" example.txtShellScript아래의 예시에서는 줄바꿈 문자를 추가하지 않았기 때문에 다음에 나오는 명령 프롬프트가 그대로 출력 문자열 뒤에 이어서 나오는 것을 확인할 수 있습니다.

-t 옵션 (요약 형식)
-t 옵션은 출력 결과를 한 줄로 요약하여 보여줍니다. 여러 파일을 간단히 비교할 때 유용합니다.
stat -t example.txtShellScript결과는 다음과 같이 나옵니다.

위의 출력 결과는 아래의 -c 옵션을 사용한 것과 같은 결과입니다.
stat -c "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" original_fileShellScript출력 포맷 유형
아래는 출력에 사용할 수 있는 포맷입니다.
The valid format sequences for files (without --file-system):
%apermission bits in octal (note '#' and '0' printf flags)
%Apermission bits and file type in human readable form
%bnumber of blocks allocated (see %B)
%Bthe size in bytes of each block reported by %b
%CSELinux security context string
%ddevice number in decimal (st_dev)
%Ddevice number in hex (st_dev)
%Hdmajor device number in decimal
%Ldminor device number in decimal
%fraw mode in hex
%Ffile type
%ggroup ID of owner
%Ggroup name of owner
%hnumber of hard links
%iinode number
%mmount point
%nfile name
%Nquoted file name with dereference if symbolic link
%ooptimal I/O transfer size hint
%stotal size, in bytes
%rdevice type in decimal (st_rdev)
%Rdevice type in hex (st_rdev)
%Hrmajor device type in decimal, for character/block device special files
%Lrminor device type in decimal, for character/block device special files
%tmajor device type in hex, for character/block device special files
%Tminor device type in hex, for character/block device special files
%uuser ID of owner
%Uuser name of owner
%wtime of file birth, human-readable; - if unknown
%Wtime of file birth, seconds since Epoch; 0 if unknown
%xtime of last access, human-readable
%Xtime of last access, seconds since Epoch
%ytime of last data modification, human-readable
%Ytime of last data modification, seconds since Epoch
%ztime of last status change, human-readable
%Ztime of last status change, seconds since Epoch
Valid format sequences for file systems:
%afree blocks available to non-superuser
%btotal data blocks in file system
%ctotal file nodes in file system
%dfree file nodes in file system
%ffree blocks in file system
%ifile system ID in hex
%lmaximum length of filenames
%nfile name
%sblock size (for faster transfers)
%Sfundamental block size (for block counts)
%tfile system type in hex
%Tfile system type in human readable form
실생활에서의 활용 방법
파일 관리 및 백업
파일의 마지막 접근 시간과 수정 시간을 확인하여 파일이 얼마나 자주 사용되는지 파악할 수 있습니다. 이를 통해 오래된 파일을 정리하거나 백업 전략을 세울 때 유용합니다.
스크립트 작성
stat 명령어를 활용하여 다양한 스크립트를 작성할 수 있습니다. 예를 들어, 특정 크기 이상의 파일을 찾아서 목록을 출력하는 스크립트를 작성할 수 있습니다.
#!/bin/bash
for file in *
do
if [ $(stat -c %s "$file") -gt 50 ]
then
echo "$file"
fi
doneShellScript위 스크립트는 현재 디렉터리의 파일들 중에서 크기가 50바이트 이상인 파일을 출력합니다. 아래 파일들 중에 크기가 50 바이트 이상인 check.sh와 example.txt만 출력되는 것을 확인할 수 있습니다.

정리
stat 명령어는 리눅스 시스템에서 파일이나 디렉터리의 상세 정보를 확인할 때 매우 유용한 도구입니다. 다양한 옵션을 활용하면 필요한 정보를 효율적으로 얻을 수 있으며, 이를 통해 파일 관리, 스크립트 작성, 시스템 모니터링 등 다양한 작업을 수행할 수 있습니다. stat 명령어를 잘 활용하면 리눅스 시스템을 더욱 효과적으로 관리할 수 있을 것입니다.