우분투 실전 명령어 | 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