stat — stat() 결과 해석하기
stat — stat() 결과 해석하기
stat 모듈은 os.stat(), os.fstat(), os.lstat()의 결과(존재한다면)를 해석하기 위한 상수와 함수를 정의해요. stat(), fstat(), lstat() 호출에 대한 완전한 세부사항은 시스템 문서를 참고하세요.
버전 3.4에서 변경: stat 모듈이 C 구현으로 지원됨.
출처: Python 표준 라이브러리
본문
stat 모듈은 특정 파일 타입을 검사하는 다음 함수들을 정의해요.
stat.S_ISDIR(mode)—mode가 디렉터리에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISCHR(mode)—mode가 문자 특수 장치 파일에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISBLK(mode)—mode가 블록 특수 장치 파일에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISREG(mode)—mode가 일반 파일에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISFIFO(mode)—mode가 FIFO(명명된 파이프)에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISLNK(mode)—mode가 심볼릭 링크에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISSOCK(mode)—mode가 소켓에서 온 것이면 0이 아닌 값을 반환해요.stat.S_ISDOOR(mode)—mode가 door에서 온 것이면 0이 아닌 값을 반환해요. (버전 3.4에 추가됨.)stat.S_ISPORT(mode)—mode가 이벤트 포트에서 온 것이면 0이 아닌 값을 반환해요. (버전 3.4에 추가됨.)stat.S_ISWHT(mode)—mode가 whiteout에서 온 것이면 0이 아닌 값을 반환해요. (버전 3.4에 추가됨.)
파일의 모드를 더 일반적으로 조작하기 위한 두 함수가 추가로 정의돼요.
stat.S_IMODE(mode)— 파일의 모드 중os.chmod()로 설정할 수 있는 부분을 반환해요. 즉 파일 권한 비트에 sticky 비트, set-group-id, set-user-id 비트를 더한 것이에요(지원하는 시스템에서).stat.S_IFMT(mode)— 파일의 모드 중 파일 타입을 설명하는 부분을 반환해요(위의S_IS*()함수들이 사용).
보통 파일 타입을 검사할 때는 os.path.is*() 함수를 써요. 여기 함수들은 같은 파일을 여러 번 검사하고 매 검사마다 stat() 시스템 호출의 오버헤드를 피하고 싶을 때 유용해요. 또 os.path가 다루지 않는 파일 정보를 검사할 때도 유용해요 — 블록·문자 장치 검사처럼요.
예제:
import os, sys
from stat import *
def walktree(top, callback):
'''recursively descend the directory tree rooted at top,
calling the callback function for each regular file'''
for f in os.listdir(top):
pathname = os.path.join(top, f)
mode = os.lstat(pathname).st_mode
if S_ISDIR(mode):
# It's a directory, recurse into it
walktree(pathname, callback)
elif S_ISREG(mode):
# It's a file, call the callback function
callback(pathname)
else:
# Unknown file type, print a message
print('Skipping %s' % pathname)
def visitfile(file):
print('visiting', file)
if __name__ == '__main__':
walktree(sys.argv[1], visitfile)
파일의 모드를 사람이 읽기 쉬운 문자열로 변환하는 추가 유틸리티 함수가 제공돼요.
stat.filemode(mode) — 파일의 모드를 -rwxrwxrwx 형태의 문자열로 변환해요. (버전 3.3에 추가됨. 버전 3.4에서 변경: S_IFDOOR, S_IFPORT, S_IFWHT를 지원함.)
아래의 모든 변수는 os.stat(), os.fstat(), os.lstat()이 반환하는 10-튜플에 대한 심볼릭 인덱스예요.
stat.ST_MODE— inode 보호 모드(protection mode).stat.ST_INO— inode 번호.stat.ST_DEV— inode가 위치한 장치.stat.ST_NLINK— inode에 대한 링크 수.stat.ST_UID— 소유자의 사용자 id.stat.ST_GID— 소유자의 그룹 id.stat.ST_SIZE— 일반 파일의 바이트 단위 크기; 일부 특수 파일에서는 대기 중인 데이터의 양.stat.ST_ATIME— 마지막 접근 시각.stat.ST_MTIME— 마지막 수정 시각.stat.ST_CTIME— 운영체제가 보고하는 "ctime". 일부 시스템(Unix 같은)에서는 마지막 메타데이터 변경 시각이고, 다른 시스템(Windows 같은)에서는 생성 시각이에요(자세한 내용은 플랫폼 문서 참고).
"파일 크기"의 해석은 파일 타입에 따라 달라져요. 일반 파일에서는 바이트 단위 파일 크기예요. 대부분의 Unix(Linux 포함)에서 FIFO와 소켓의 "크기"는 os.stat(), os.fstat(), os.lstat()을 호출한 시점에 읽힐 준비가 된 바이트 수예요. 이는 특히 비차단 열기 후 이런 특수 파일을 폴링할 때 유용할 수 있어요. 다른 문자·블록 장치에서 size 필드의 의미는 밑에 깔린 시스템 호출의 구현에 따라 더 다양해요.
아래 변수들은 ST_MODE 필드에 쓰이는 플래그를 정의해요. 위의 함수들을 쓰는 것이 첫 번째 플래그 집합을 쓰는 것보다 더 이식성이 좋아요.
stat.S_IFSOCK— 소켓.stat.S_IFLNK— 심볼릭 링크.stat.S_IFREG— 일반 파일.stat.S_IFBLK— 블록 장치.stat.S_IFDIR— 디렉터리.stat.S_IFCHR— 문자 장치.stat.S_IFIFO— FIFO.stat.S_IFDOOR— door. (버전 3.4에 추가됨.)stat.S_IFPORT— 이벤트 포트. (버전 3.4에 추가됨.)stat.S_IFWHT— whiteout. (버전 3.4에 추가됨.)
참고 —
S_IFDOOR,S_IFPORT,S_IFWHT는 플랫폼이 해당 파일 타입을 지원하지 않으면 0으로 정의돼요.
다음 플래그들은 os.chmod()의 mode 인자에도 쓸 수 있어요.
stat.S_ISUID— Set UID 비트.stat.S_ISGID— set-group-ID 비트. 이 비트는 몇 가지 특별한 용도가 있어요. 디렉터리에 대해선 BSD 의미론이 그 디렉터리에 쓰임을 나타내요: 그곳에서 만들어진 파일은 생성 프로세스의 유효 그룹 ID가 아니라 디렉터리에서 그룹 ID를 상속하고, 그곳에서 만들어진 디렉터리도S_ISGID비트가 설정돼요. 그룹 실행 비트(S_IXGRP)가 설정되지 않은 파일에 대해선 set-group-ID 비트가 강제 파일/레코드 잠금을 나타내요(S_ENFMT도 참고).stat.S_ISVTX— sticky 비트. 디렉터리에 설정되면 그 디렉터리의 파일은 파일 소유자, 디렉터리 소유자, 또는 권한 있는 프로세스만 이름을 바꾸거나 삭제할 수 있어요.stat.S_IRWXU— 파일 소유자 권한 마스크.stat.S_IRUSR— 소유자가 읽기 권한.stat.S_IWUSR— 소유자가 쓰기 권한.stat.S_IXUSR— 소유자가 실행 권한.stat.S_IRWXG— 그룹 권한 마스크.stat.S_IRGRP— 그룹이 읽기 권한.stat.S_IWGRP— 그룹이 쓰기 권한.stat.S_IXGRP— 그룹이 실행 권한.stat.S_IRWXO— 기타(그룹에 없음) 권한 마스크.stat.S_IROTH— 기타가 읽기 권한.stat.S_IWOTH— 기타가 쓰기 권한.stat.S_IXOTH— 기타가 실행 권한.stat.S_ENFMT— System V 파일 잠금 강제. 이 플래그는S_ISGID와 공유돼요: 그룹 실행 비트(S_IXGRP)가 설정되지 않은 파일에서 파일/레코드 잠금이 강제돼요.stat.S_IREAD—S_IRUSR의 Unix V7 동의어.stat.S_IWRITE—S_IWUSR의 Unix V7 동의어.stat.S_IEXEC—S_IXUSR의 Unix V7 동의어.
다음 플래그들은 os.chflags()의 flags 인자에 쓸 수 있어요.
stat.UF_SETTABLE— 모든 사용자 설정 가능 플래그. (버전 3.13에 추가됨.)stat.UF_NODUMP— 파일을 덤프하지 않음.stat.UF_IMMUTABLE— 파일을 변경할 수 없음.stat.UF_APPEND— 파일에 추가만 가능.stat.UF_OPAQUE— 유니온 스택을 통해 볼 때 디렉터리가 불투명.stat.UF_NOUNLINK— 파일의 이름을 바꾸거나 삭제할 수 없음.stat.UF_COMPRESSED— 파일이 압축 저장됨(macOS 10.6+).stat.UF_TRACKED— 문서 ID 처리에 사용(macOS). (버전 3.13에 추가됨.)stat.UF_DATAVAULT— 읽기·쓰기에 자격(entitlement)이 필요(macOS 10.13+). (버전 3.13에 추가됨.)stat.UF_HIDDEN— GUI에 표시되지 않아야 함(macOS 10.5+).stat.SF_SETTABLE— 모든 슈퍼유저 변경 가능 플래그. (버전 3.13에 추가됨.)stat.SF_SUPPORTED— 모든 슈퍼유저 지원 플래그. 가용성: macOS. (버전 3.13에 추가됨.)stat.SF_SYNTHETIC— 모든 슈퍼유저 읽기 전용 합성 플래그. 가용성: macOS. (버전 3.13에 추가됨.)stat.SF_ARCHIVED— 파일을 아카이브할 수 있음.stat.SF_IMMUTABLE— 파일을 변경할 수 없음.stat.SF_APPEND— 파일에 추가만 가능.stat.SF_RESTRICTED— 쓰기에 자격이 필요(macOS 10.13+). (버전 3.13에 추가됨.)stat.SF_NOUNLINK— 파일의 이름을 바꾸거나 삭제할 수 없음.stat.SF_SNAPSHOT— 파일이 스냅샷 파일.stat.SF_FIRMLINK— 파일이 firmlink(macOS 10.15+). (버전 3.13에 추가됨.)stat.SF_DATALESS— 파일이 dataless 객체(macOS 10.15+). (버전 3.13에 추가됨.)
BSD 또는 macOS 시스템의 chflags(2) 매뉴얼 페이지를 참고하세요.
Windows에서는 os.stat()이 반환하는 st_file_attributes 멤버의 비트를 검사할 때 쓸 수 있는 다음 파일 속성 상수들이 있어요. 이 상수들의 의미에 대한 상세는 Windows API 문서를 참고하세요.
stat.FILE_ATTRIBUTE_ARCHIVE,stat.FILE_ATTRIBUTE_COMPRESSED,stat.FILE_ATTRIBUTE_DEVICE,stat.FILE_ATTRIBUTE_DIRECTORY,stat.FILE_ATTRIBUTE_ENCRYPTED,stat.FILE_ATTRIBUTE_HIDDEN,stat.FILE_ATTRIBUTE_INTEGRITY_STREAM,stat.FILE_ATTRIBUTE_NORMAL,stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED,stat.FILE_ATTRIBUTE_NO_SCRUB_DATA,stat.FILE_ATTRIBUTE_OFFLINE,stat.FILE_ATTRIBUTE_READONLY,stat.FILE_ATTRIBUTE_REPARSE_POINT,stat.FILE_ATTRIBUTE_SPARSE_FILE,stat.FILE_ATTRIBUTE_SYSTEM,stat.FILE_ATTRIBUTE_TEMPORARY,stat.FILE_ATTRIBUTE_VIRTUAL(버전 3.5에 추가됨.)
Windows에서는 os.lstat()이 반환하는 st_reparse_tag 멤버와 비교할 때 쓸 수 있는 다음 상수들이 있어요. 잘 알려진 상수들이지만 완전한 목록은 아니에요.
stat.IO_REPARSE_TAG_SYMLINK,stat.IO_REPARSE_TAG_MOUNT_POINT,stat.IO_REPARSE_TAG_APPEXECLINK(버전 3.8에 추가됨.)