리눅스 명령어 stat 사용법 및 4가지 옵션

리눅스 명령어 stat는 파일이나 디렉터리의 상세 정보를 확인할 때 매우 유용합니다. 이 글에서는 stat 명령어의 사용법과 주요 옵션, 그리고 실생활에서의 활용 방법을 설명하겠습니다.

리눅스 명령어 stat란?

stat 명령어는 파일 또는 파일 시스템의 상태를 보여주는 리눅스 명령어입니다. 파일의 크기, 권한, 마지막 접근 시간, 수정 시간, 생성 시간 등의 다양한 정보를 제공합니다.

기본 사용법

기본적으로 stat 명령어를 사용하려면 터미널에서 다음과 같이 입력합니다:

stat [filename or directory]
ShellScript

예를 들어, 현재 디렉터리에 있는 example.txt 파일의 상태를 확인하려면 다음과 같이 입력합니다:

stat example.txt
ShellScript

이 명령을 실행하면 다음과 같은 결과가 출력됩니다.

그림 1. 리눅스 명령어 stat: 실행 결과

주요 옵션

stat 명령어는 다양한 옵션을 제공하여 필요한 정보만 선택적으로 볼 수 있게 합니다. 몇 가지 주요 옵션을 살펴보겠습니다.

-L 옵션 (링크의 원본)

-L 옵션을 이용하면 심볼릭 링크인 경우 링크 자체가 아닌 원본 파일의 정보를 열람할 수 있습니다. 링크의 내용을 확인해서 원본을 찾아낸 다음 stat 명령어로 확인하지 않고, -L 옵션을 사용하면 바로 원본 파일의 정보를 열람할 수 있습니다.

stat -L filename
ShellScript

아래 그림을 보면 -L 옵션 없이 stat 명령어만 사용했을 때에는 심볼릭 링크가 어떻게 연결되어있는지 보여주며, 해당 파일이 심볼릭 링크인 것을 알려줍니다. 한편 -L 옵션을 사용한 경우에는 원본 파일인 original_file의 내용을 보여줍니다.

그림 2. 리눅스 명령어 stat: -L 옵션으로 원본 파일의 속성 열람

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

그림 3. 리눅스 명령어 stat: 원본 파일 열람

-c, –format 옵션 (형식 지정)

-c 옵션과 –format 옵션은 출력 형식을 지정할 수 있게 합니다. 하지만, 출력 포맷 문자열에 백 슬래시와 함께 사용하는 특수문자들을 해석해 주지 않습니다. 출력 마지막에 new line 문자(\n)가 추가되어 줄바꿈이 되면서 출력이 끝납니다.

다음은 파일의 이름, 크기, 권한을 차례대로 보여주는 예시입니다.

stat -c "Name: %n   Size(bytes): %s   Permissions: %A" example.txt
ShellScript

여기서 %n은 파일 이름, %s는 파일 크기를 나타냅니다. 결과는 다음과 같이 파일 이름과 파일 크기가 출력되는 것을 확인할 수 있습니다.

그림 4. 리눅스 명령어 stat: 출력 형식 지정(-c, –format 옵션)

–printf 옵션

--printf 옵션은 -c나 –format 옵션과 동일하게 포맷 유형을 사용할 수 있습니다. 단, -c 옵션이나 –format 옵션과 다른 점은 문자열 포맷을 모두 출력한 뒤에 줄바꿈을 해 주지 않습니다. 따라서 줄바꿈을 원한다면 줄바꿈 문자를 추가해 줘야 합니다. 그리고 –printf 옵션을 이용하면 \n, \t 등의 백슬래시와 함께 사용하는 특수문자 사용이 가능합니다.

stat --printf="Name: %n\nSize: %s\nPermissions: %A" example.txt
ShellScript

아래의 예시에서는 줄바꿈 문자를 추가하지 않았기 때문에 다음에 나오는 명령 프롬프트가 그대로 출력 문자열 뒤에 이어서 나오는 것을 확인할 수 있습니다.

그림 5. 리눅스 명령어 stat: 출력 형식 지정(–printf 옵션)

-t 옵션 (요약 형식)

-t 옵션은 출력 결과를 한 줄로 요약하여 보여줍니다. 여러 파일을 간단히 비교할 때 유용합니다.

stat -t example.txt
ShellScript

결과는 다음과 같이 나옵니다.

그림 6. 리눅스 명령어 stat: -t 옵션으로 한 줄 요약

위의 출력 결과는 아래의 -c 옵션을 사용한 것과 같은 결과입니다.

stat -c "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" original_file
ShellScript

출력 포맷 유형

아래는 출력에 사용할 수 있는 포맷입니다.

The valid format sequences for files (without --file-system):

%a permission bits in octal (note '#' and '0' printf flags)
%A permission bits and file type in human readable form
%b number of blocks allocated (see %B)
%B the size in bytes of each block reported by %b
%C SELinux security context string
%d device number in decimal (st_dev)
%D device number in hex (st_dev)
%Hd major device number in decimal
%Ld minor device number in decimal
%f raw mode in hex
%F file type
%g group ID of owner
%G group name of owner
%h number of hard links
%i inode number
%m mount point
%n file name
%N quoted file name with dereference if symbolic link
%o optimal I/O transfer size hint
%s total size, in bytes
%r device type in decimal (st_rdev)
%R device type in hex (st_rdev)
%Hr major device type in decimal, for character/block device special files
%Lr minor device type in decimal, for character/block device special files
%t major device type in hex, for character/block device special files
%T minor device type in hex, for character/block device special files
%u user ID of owner
%U user name of owner
%w time of file birth, human-readable; - if unknown
%W time of file birth, seconds since Epoch; 0 if unknown
%x time of last access, human-readable
%X time of last access, seconds since Epoch
%y time of last data modification, human-readable
%Y time of last data modification, seconds since Epoch
%z time of last status change, human-readable
%Z time of last status change, seconds since Epoch

Valid format sequences for file systems:

%a free blocks available to non-superuser
%b total data blocks in file system
%c total file nodes in file system
%d free file nodes in file system
%f free blocks in file system
%i file system ID in hex
%l maximum length of filenames
%n file name
%s block size (for faster transfers)
%S fundamental block size (for block counts)
%t file system type in hex
%T file system type in human readable form

실생활에서의 활용 방법

파일 관리 및 백업

파일의 마지막 접근 시간과 수정 시간을 확인하여 파일이 얼마나 자주 사용되는지 파악할 수 있습니다. 이를 통해 오래된 파일을 정리하거나 백업 전략을 세울 때 유용합니다.

스크립트 작성

stat 명령어를 활용하여 다양한 스크립트를 작성할 수 있습니다. 예를 들어, 특정 크기 이상의 파일을 찾아서 목록을 출력하는 스크립트를 작성할 수 있습니다.

#!/bin/bash
for file in *
do
  if [ $(stat -c %s "$file") -gt 50 ]
  then
    echo "$file"
  fi
done
ShellScript

위 스크립트는 현재 디렉터리의 파일들 중에서 크기가 50바이트 이상인 파일을 출력합니다. 아래 파일들 중에 크기가 50 바이트 이상인 check.sh와 example.txt만 출력되는 것을 확인할 수 있습니다.

그림 7. 리눅스 명령어 stat: shell script를 이용하여 응용

정리

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

참고자료

관련 포스트

Leave a Comment