우분투 실전 명령어 | stat으로 파일 메타데이터 정확히 확인하기

언제 쓰는가

파일이 왜 실행되지 않는지, 소유자가 누구인지, 수정 시각이 맞는지 확인해야 할 때 stat이 가장 빠릅니다.
배포 스크립트가 참조하는 파일 권한이나 타임스탬프가 예상과 다를 때도 먼저 stat으로 현재 상태를 고정해서 봅니다.

바로 쓰는 명령어

# 파일 기본 메타데이터 확인
stat /etc/nginx/nginx.conf

# 심볼릭 링크 자체 정보를 보고 싶을 때
stat -L /var/www/current
# 스크립트에서 쓰기 좋은 포맷 출력
stat -c '%n|%F|%a|%U:%G|%s|%y' /var/log/syslog

# 디렉터리 안 파일들의 권한/소유자 일괄 점검
find /opt/app -maxdepth 1 -type f -print0 | xargs -0 stat -c '%n %a %U:%G'

핵심 옵션/패턴

  • -c: 필요한 필드만 골라 출력 형식을 고정합니다. 자동화에서는 기본 출력보다 이 방식이 안전합니다.
  • %a, %U, %G, %s, %y: 권한, 사용자, 그룹, 크기, 수정 시각을 자주 확인합니다.
  • find + xargs 조합: 여러 파일을 같은 포맷으로 빠르게 비교할 때 유용합니다.
  • stat -L: 링크 대상 기준으로 확인해야 할 때 사용합니다. 링크 파일 자체를 봐야 하면 -L을 빼야 합니다.

명령 출력 예시

$ stat -c '%n %a %U:%G %s %y' /etc/ssh/sshd_config
/etc/ssh/sshd_config 644 root:root 3317 2026-02-18 23:41:02.000000000 +0900
$ stat /var/www/current
  File: /var/www/current -> /var/www/releases/20260218
  Size: 27        	Blocks: 0          IO Block: 4096   symbolic link
Device: 259,1	Inode: 118224      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/ deploy)   Gid: ( 1000/ deploy)
Access: 2026-02-18 23:58:10.000000000 +0900
Modify: 2026-02-18 23:58:10.000000000 +0900
Change: 2026-02-18 23:58:10.000000000 +0900
 Birth: 2026-02-18 23:58:10.000000000 +0900

자주 하는 실수

  • 링크 경로를 확인하면서 -L을 무조건 붙여 링크 대상 정보만 보고, 정작 링크 파일 권한/소유자를 놓치는 경우가 많습니다.
  • stat 기본 출력을 파싱해서 자동화에 넣으면 로케일이나 포맷 차이로 깨질 수 있습니다. 자동화는 -c 포맷 고정이 기본입니다.
  • 시간 비교 시 서버 타임존 차이를 무시하면 오판합니다. 운영 서버와 배포 서버의 timezone 설정을 같이 확인해야 합니다.

검증 방법

# 권한/소유자 검증
stat -c '%a %U:%G' /opt/app/config.yml

# 최근 수정 여부 검증
stat -c '%y' /opt/app/config.yml

# 기대 값과 비교
test "$(stat -c '%a' /opt/app/config.yml)" = "640" && echo OK || echo FAIL

운영 팁

장애 대응 때는 변경 의심 파일 3~5개를 먼저 정하고 stat -c 포맷을 통일해 한 번에 찍어두면 복구 판단이 빨라집니다.
배포 파이프라인에는 권한 검증 한 줄을 넣어 두면 권한 누락으로 인한 재배포를 크게 줄일 수 있습니다.

출처

  • Ubuntu Manpages
  • GNU Coreutils Documentation
  • The Linux man-pages project