Linux에서 stat 명령을 사용하는 방법
게시 됨: 2022-01-29 Linux stat
명령은 ls
보다 훨씬 더 자세한 정보를 보여줍니다. 이 유익하고 구성 가능한 유틸리티를 사용하여 커튼 뒤를 살짝 들여다보십시오. 사용법을 알려드리겠습니다.
stat는 당신을 무대 뒤에서 데려갑니다
ls
명령은 그 기능이 훌륭하고 많은 작업을 수행하지만 Linux를 사용하면 항상 더 깊이 들어가 표면 아래에 무엇이 있는지 볼 수 있는 방법이 있는 것 같습니다. 그리고 종종, 그것은 단지 카펫의 가장자리를 들어 올리는 경우가 아닙니다. 마루판을 찢은 다음 구멍을 파십시오. Linux를 양파처럼 껍질을 벗길 수 있습니다.
ls
는 파일에 대해 설정된 권한, 파일 크기, 파일인지 기호 링크인지와 같은 파일에 대한 많은 정보를 보여줍니다. 이 정보를 표시하기 위해 ls
는 inode라고 하는 파일 시스템 구조에서 정보를 읽습니다.
모든 파일과 디렉토리에는 inode가 있습니다. inode는 파일이 차지하는 블록과 파일과 관련된 날짜 스탬프와 같은 파일에 대한 메타데이터를 보유합니다. inode는 파일의 라이브러리 카드와 같습니다. 그러나 ls
는 일부 정보만 보여줍니다. 모든 것을 보려면 stat
명령을 사용해야 합니다.
ls
와 마찬가지로 stat
명령에는 많은 옵션이 있습니다. 이것은 별칭을 사용하기에 좋은 후보입니다. stat
이 원하는 출력을 제공하도록 하는 특정 옵션 세트를 발견했다면 이를 별칭 또는 쉘 함수로 래핑하십시오. 이렇게 하면 훨씬 더 편리하게 사용할 수 있으며 복잡한 명령줄 옵션 집합을 기억할 필요가 없습니다.
관련: ls 명령을 사용하여 Linux에서 파일 및 디렉토리를 나열하는 방법
빠른 비교
ls
를 사용하여 사람이 읽을 수 있는 파일 크기( -h
옵션)로 긴 목록( -l
옵션)을 제공합니다.
ls -lh 아나.h
왼쪽에서 오른쪽으로 ls가 제공하는 정보는 다음과 같습니다.
- 맨 처음 문자는 하이픈 "-"이며 이는 파일이 소켓, 심볼릭 링크 또는 다른 유형의 객체가 아닌 일반 파일임을 알려줍니다.
- 소유자, 그룹 및 기타 권한은 8진수 형식으로 나열됩니다.
- 이 파일을 가리키는 하드 링크의 수입니다. 이 경우 대부분의 경우 하나입니다.
- 파일 소유자는 dave입니다.
- 그룹 소유자는 dave입니다.
- 파일 크기는 802바이트입니다.
- 파일은 2015년 12월 13일 금요일에 마지막으로 수정되었습니다.
- 파일 이름은
ana.c
입니다.
stat
를 살펴보겠습니다.
통계 아나.h
stat
에서 얻은 정보는 다음과 같습니다.
- 파일 : 파일의 이름입니다. 일반적으로 명령줄에서
stat
에 전달한 이름과 동일하지만 심볼릭 링크를 보면 다를 수 있습니다. - Size : 파일의 크기(바이트)입니다.
- 블록 : 파일을 하드 드라이브에 저장하기 위해 필요한 파일 시스템 블록 수입니다.
- IO 블록 : 파일 시스템 블록의 크기입니다.
- 파일 형식 : 메타데이터가 설명하는 개체의 형식입니다. 가장 일반적인 유형은 파일 및 디렉토리이지만 링크, 소켓 또는 명명된 파이프일 수도 있습니다.
- 디바이스 : 16진수 및 10진수로 된 디바이스 번호입니다. 이것은 파일이 저장된 하드 드라이브의 ID입니다.
- 아이 노드 : 아이노드 번호. 즉, 이 inode의 ID 번호입니다. inode 번호와 장치 번호는 함께 파일을 고유하게 식별합니다.
- 링크 : 이 숫자는 이 파일을 가리키는 하드 링크 수를 나타냅니다. 각 하드 링크에는 고유한 inode가 있습니다. 따라서 이 그림에 대해 생각하는 또 다른 방법은 이 하나의 파일을 가리키는 inode의 수입니다. 하드 링크가 생성되거나 삭제될 때마다 이 숫자가 위 또는 아래로 조정됩니다. 0에 도달하면 파일 자체가 삭제되고 inode가 제거됩니다. 디렉토리에서
stat
를 사용하는 경우 이 숫자는 "."를 포함하여 디렉토리의 파일 수를 나타냅니다. 현재 디렉토리에 대한 항목 및 상위 디렉토리에 대한 ".." 항목. - 액세스 : 파일 권한은 8진수 및 기존
rwx
(읽기, 쓰기, 실행 형식)로 표시됩니다. - Uid : 소유자의 사용자 ID 및 계정 이름입니다.
- Gid : 소유자의 그룹 ID 및 계정 이름입니다.
- 액세스 : 액세스 타임스탬프입니다. 보이는 것처럼 간단하지 않습니다. 최신 Linux 배포판은 액세스 시간을 업데이트하는 데 필요한 하드 드라이브 쓰기를 최적화하려고 시도하는
relatime
이라는 체계를 사용합니다. 간단히 말해서 액세스 시간이 수정된 시간보다 오래된 경우 업데이트됩니다. - 수정 : 수정 타임스탬프입니다. 파일 내용 이 마지막으로 수정된 시간입니다. (다행히 이 파일의 내용은 4년 전 오늘로 마지막으로 변경되었습니다.)
- 변경 : 변경 타임스탬프입니다. 파일의 속성 이나 내용 이 마지막으로 변경된 시간입니다. 새 파일 권한을 설정하여 파일을 수정하면 변경 타임스탬프가 업데이트되지만(파일 속성 이 변경되었기 때문에) 수정된 타임스탬프는 업데이트되지 않습니다(파일 내용 이 변경되지 않았기 때문에).
- Birth : 파일의 원래 생성 날짜를 표시하기 위해 예약되었지만 Linux에서는 구현되지 않습니다.
타임스탬프 이해하기
타임스탬프는 시간대에 민감합니다. 각 줄 끝에 있는 -0500
은 이 파일이 현재 컴퓨터의 시간대보다 5시간 빠른 UTC(협정 세계시) 시간대의 컴퓨터에서 생성되었음을 나타냅니다. 따라서 이 컴퓨터는 이 파일을 만든 컴퓨터보다 5시간 늦습니다. 사실, 파일은 영국 시간대 컴퓨터에서 생성되었으며 우리는 여기 미국 동부 표준 시간대의 컴퓨터에서 파일을 보고 있습니다.
수정 및 변경 타임스탬프는 처음 보는 사람에게는 이름이 같은 의미로 들리기 때문에 혼동을 일으킬 수 있습니다.
chmod
를 사용하여 ana.c
라는 파일에 대한 파일 권한을 수정해 보겠습니다. 우리는 그것을 모두가 쓸 수 있게 만들 것입니다. 이것은 파일의 내용에 영향을 미치지 않지만 파일의 속성에는 영향을 미칩니다.
chmod +w ana.c
그런 다음 stat
를 사용하여 타임스탬프를 확인합니다.
통계 분석
변경 타임스탬프가 업데이트되었지만 수정된 타임스탬프는 업데이트되지 않았습니다.
수정된 타임스탬프는 파일 내용이 변경된 경우에만 업데이트됩니다. 변경 타임스탬프는 콘텐츠 변경과 속성 변경 모두에 대해 업데이트됩니다.
여러 파일에 Stat 사용
여러 파일에 대한 통계 보고서를 한 번에 보려면 명령줄에서 파일 이름을 stat
에 전달합니다.
stat ana.h ana.o
파일 세트에서 stat
를 사용하려면 패턴 일치를 사용하십시오. 물음표 "?" 단일 문자를 나타내고 별표 "*"는 임의의 문자열을 나타냅니다. 다음 명령을 사용하여 단일 문자 확장자를 가진 "ana"라는 파일에 대해 보고하도록 stat
에 지시할 수 있습니다.
아나.?
stat를 사용하여 파일 시스템 보고하기
stat
는 파일 시스템의 상태와 파일의 상태를 보고할 수 있습니다. -f
(파일 시스템) 옵션은 stat
에 파일이 있는 파일 시스템에 대해 보고하도록 지시합니다. 파일 이름 대신 stat
에 "/"와 같은 디렉토리를 전달할 수도 있습니다.
통계 -f ana.c
정보 stat
가 제공하는 정보는 다음과 같습니다.
- 파일 : 파일의 이름입니다.
- ID : 16진수 표기법의 파일 시스템 ID입니다.
- Namelen : 파일 이름의 최대 허용 길이.
- 유형 : 파일 시스템의 유형입니다.
- 블록 크기 : 최적의 데이터 전송 속도를 위해 읽기 요청을 요청하는 데이터의 양.
- 기본 블록 크기 : 각 파일 시스템 블록의 크기입니다.
블록:
- Total : 파일 시스템에 있는 모든 블록의 총 개수입니다.
- Free : 파일 시스템에 있는 사용 가능한 블록의 수입니다.
- 사용 가능 : 일반(루트가 아닌) 사용자가 사용할 수 있는 사용 가능한 블록 수입니다.
아이노드:
- Total : 파일 시스템의 총 inode 수입니다.
- Free : 파일 시스템에서 사용 가능한 inode의 수입니다.
심볼릭 링크 역참조
실제로 심볼릭 링크인 파일에 stat
를 사용하면 링크에 대해 보고합니다. 링크가 가리키는 파일에 대해 stat
가 보고하도록 하려면 -L
(역참조) 옵션을 사용하십시오. ana.c
파일은 code.c
에 대한 심볼릭 링크입니다. -L
옵션 없이 살펴보겠습니다.
통계 코드.c
파일 이름은 ( ->
) ana.c
를 가리키는 code.c
를 보여줍니다. 파일 크기는 11바이트에 불과합니다. 이 링크를 저장하는 데 사용되는 블록은 없습니다. 파일 형식은 기호 링크로 나열됩니다.
분명히 우리는 여기서 실제 파일을 보고 있지 않습니다. 다시 한 번 -L
옵션을 추가해 보겠습니다.
stat -L code.c
이제 심볼릭 링크가 가리키는 파일에 대한 파일 세부 정보가 표시됩니다. 그러나 파일 이름은 여전히 code.c
로 지정됩니다. 이것은 대상 파일이 아니라 링크의 이름입니다. 이것은 명령줄에서 stat
에 전달한 이름이기 때문에 발생합니다.
간결한 보고서
-t
(간소) 옵션은 stat
가 요약된 요약을 제공하도록 합니다.
통계 -t ana.c
주어진 단서가 없습니다. 이를 이해하려면 필드 시퀀스를 암기할 때까지 이 출력을 전체 stat
출력과 상호 참조해야 합니다.
사용자 정의 출력 형식
stat
에서 다른 데이터 세트를 얻는 더 좋은 방법은 사용자 정의 형식을 사용하는 것입니다. 형식 시퀀스라고 하는 긴 토큰 목록이 있습니다. 이들 각각은 데이터 요소를 나타냅니다. 출력에 포함할 항목을 선택하고 형식 문자열을 만듭니다. stat
를 호출하고 형식 문자열을 전달하면 출력에는 우리가 요청한 데이터 요소만 포함됩니다.
파일 및 파일 시스템에 대한 다양한 형식 시퀀스 세트가 있습니다. 파일 목록은 다음과 같습니다.
- %a : 8진수로 된 접근 권한.
- %A : 사람이 읽을 수 있는 형식의 액세스 권한(
rwx
). - %b : 할당된 블록의 수입니다.
- %B : 각 블록의 크기(바이트).
- %d : 10진수로 된 장치 번호입니다.
- %D : 16진수로 된 장치 번호.
- %f : 16진수로 된 원시 모드.
- %F 파일 형식.
- %g : 소유자의 그룹 ID입니다.
- %G : 소유자의 그룹 이름입니다.
- %h : 하드 링크의 수.
- %i : 아이노드 번호.
- %m : 마운트 지점.
- %n : 파일명.
- %N : 기호 링크인 경우 역참조된 파일 이름과 함께 인용된 파일 이름입니다.
- %o : 최적의 I/O 전송 크기 힌트입니다.
- %s : 총 크기(바이트)입니다.
- %t : 문자/블록 장치 특수 파일의 주요 장치 유형(16진수).
- %T : 문자/블록 장치 특수 파일에 대한 16진수 보조 장치 유형입니다.
- %u : 소유자의 사용자 ID입니다.
- %U : 소유자의 사용자 이름입니다.
- %w : 파일 생성 시간, 사람이 읽을 수 있는 시간 또는 알 수 없는 경우 하이픈 "-".
- %W : 파일 생성 시간, Epoch 이후 초 알 수 없는 경우 0입니다.
- %x : 사람이 읽을 수 있는 마지막 액세스 시간.
- %X : 마지막 액세스 시간, Epoch 이후 초.
- %y : 사람이 읽을 수 있는 마지막 데이터 수정 시간.
- %Y : 마지막 데이터 수정 시간, Epoch 이후 초.
- %z : 사람이 읽을 수 있는 마지막 상태 변경 시간.
- %Z : Epoch 이후의 마지막 상태 변경 시간(초)입니다.
"에포크"는 1970-01-01 00:00:00 +0000(UTC)에 발생한 Unix Epoch입니다.
파일 시스템의 경우 형식 시퀀스는 다음과 같습니다.
- %a : 루트가 아닌 일반 사용자가 사용할 수 있는 사용 가능한 블록 수입니다.
- %b : 파일 시스템의 총 데이터 블록입니다.
- %c : 파일 시스템의 총 inode.
- %d : 파일 시스템에서 사용 가능한 inode의 수입니다.
- %f : 파일 시스템에서 사용 가능한 블록의 수입니다.
- %i : 16진수로 된 파일 시스템 ID입니다.
- %l : 파일 이름의 최대 길이.
- %n : 파일 이름.
- %s : 블록 크기(최적 쓰기 크기).
- %S : 파일 시스템 블록의 크기(블록 수).
- %t : 16진수로 된 파일 시스템 유형입니다.
- %T : 사람이 읽을 수 있는 형식의 파일 시스템 유형입니다.
형식 시퀀스의 문자열을 허용하는 두 가지 옵션이 있습니다. --format
및 --printf
입니다. 차이점은 --printf
가 개행 \n
및 탭 \t
와 같은 C 스타일 이스케이프 시퀀스를 해석하고 출력에 개행 문자를 자동으로 추가하지 않는다는 것입니다.
형식 문자열을 만들어 stat
에 전달해 보겠습니다. 사용할 형식 시퀀스는 파일 이름에 %n
, 파일 크기에 %s
, 파일 유형에 %F
입니다. 각 파일이 새 줄에서 처리되도록 하기 위해 문자열 끝에 \n
이스케이프 시퀀스를 추가할 것입니다. 형식 문자열은 다음과 같습니다.
"%n 파일은 %s바이트이며 %F\n입니다."
--printf
옵션을 사용하여 이것을 stat
에 전달할 것입니다. code.c
라는 파일과 ana.?
와 일치하는 파일 세트에 대해 보고하도록 stat
에 요청할 것입니다. . 이것은 전체 명령입니다. --printf
와 형식 문자열 사이의 등호 " =
"에 유의하십시오.
stat --printf="파일 %n은(는) %s바이트이고 %F\n" code.c ana/ana입니다.?
각 파일에 대한 보고서는 우리가 요청한 새 줄에 나열됩니다. 파일 이름, 파일 크기 및 파일 형식이 제공됩니다.
사용자 정의 형식을 사용하면 표준 stat
출력에 포함된 것보다 훨씬 많은 데이터 요소에 액세스할 수 있습니다.
미세 입자 제어
보시다시피, 관심 있는 특정 데이터 요소를 추출할 수 있는 엄청난 범위가 있습니다. 더 길고 복잡한 주문에 별칭을 사용하도록 권장한 이유도 알 수 있습니다.
리눅스 명령어 | ||
파일 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · 보기 · 문자열 · 유형 · 이름 바꾸기 · zip · 압축 풀기 · 마운트 · 언마운트 · 설치 · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · 패치 · 변환 · rclone · 파쇄 · srm | |
프로세스 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · 종료 · 재부팅 · 정지 · poweroff · passwd · lscpu · crontab · 날짜 · bg · fg | |
네트워킹 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
관련: 개발자 및 열광자를 위한 최고의 Linux 노트북