Linux stat 명령으로 파일 메타데이터 검색하기

LinuxBeginner
지금 연습하기

소개

Linux 운영 체제에서 파일과 디렉토리는 내용 외에도 중요한 메타데이터를 포함합니다. 이 메타데이터에는 파일 권한, 소유권, 크기 및 다양한 타임스탬프와 같은 정보가 포함됩니다. Linux 의 stat 명령은 파일과 디렉토리에 대한 이 상세한 정보를 검색하고 표시하는 강력한 방법을 제공합니다.

이 랩에서는 stat 명령을 사용하여 파일 메타데이터를 검사하고, 다양한 타임스탬프 유형을 이해하며, 특정 정보를 추출하기 위해 출력 형식을 사용자 정의하는 방법을 배우게 됩니다. 이러한 기술은 시스템 관리, 파일 권한 문제 해결 및 파일 변경 모니터링에 필수적입니다.

stat 명령의 기본 사용법

Linux 의 stat 명령은 파일과 디렉토리에 대한 포괄적인 정보를 제공합니다. 이 단계에서는 stat 명령의 기본 형식을 사용하는 방법과 출력을 이해하는 방법을 배우겠습니다.

stat 명령 이해하기

stat 명령은 ls와 같은 일반적인 명령으로는 일반적으로 볼 수 없는 메타데이터 정보를 보여줍니다. 이 메타데이터에는 다음이 포함됩니다.

  • 파일 크기 및 블록 할당
  • Inode 정보
  • 접근 권한
  • 사용자 및 그룹 소유권
  • 다양한 타임스탬프
  • 파일 유형

테스트 파일 생성하기

이 랩 전체에서 사용할 간단한 텍스트 파일을 생성해 보겠습니다.

echo "This is a test file for the stat command." > ~/project/testfile.txt

터미널에서 위의 명령을 실행합니다. 이렇게 하면 project 디렉토리에 한 줄의 텍스트가 있는 testfile.txt라는 파일이 생성됩니다.

기본 stat 명령 사용하기

이제 stat 명령을 사용하여 방금 생성한 파일의 메타데이터를 검사해 보겠습니다.

stat ~/project/testfile.txt

다음과 유사한 출력을 볼 수 있습니다.

  File: /home/labex/project/testfile.txt
  Size: 41        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12345678    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  labex)   Gid: ( 1000/  labex)
Access: 2023-04-28 10:30:00.000000000 +0000
Modify: 2023-04-28 10:30:00.000000000 +0000
Change: 2023-04-28 10:30:00.000000000 +0000
 Birth: -

출력 이해하기

이 출력의 주요 요소를 분석해 보겠습니다.

  1. File: 파일의 전체 경로
  2. Size: 바이트 단위의 파일 크기
  3. Blocks: 할당된 블록 수
  4. IO Block: 파일 시스템 I/O 의 블록 크기
  5. Device: 16 진수/10 진수 형식의 장치 ID
  6. Inode: Inode 번호 (파일의 고유 식별자)
  7. Links: 하드 링크 수
  8. Access: 숫자 (8 진수) 및 기호 형식의 파일 권한
  9. Uid/Gid: 파일 소유자의 사용자 ID 및 그룹 ID
  10. Access/Modify/Change/Birth: 파일과 관련된 다양한 타임스탬프

타임스탬프는 특히 중요합니다.

  • Access: 파일이 마지막으로 읽힌 시간
  • Modify: 파일 내용이 마지막으로 수정된 시간
  • Change: 파일의 메타데이터가 마지막으로 변경된 시간
  • Birth: 생성 시간 (모든 파일 시스템에서 사용 가능한 것은 아님)

이제 stat 명령을 사용하여 기본 파일 메타데이터를 표시하고 해석하는 방법을 배웠습니다.

파일 타임스탬프 및 권한 탐색

이 단계에서는 파일 타임스탬프를 자세히 살펴보고 파일 권한을 수정하는 방법을 배우겠습니다. 파일 메타데이터의 이러한 측면을 이해하는 것은 파일 관리 및 보안에 매우 중요합니다.

파일 타임스탬프 이해하기

이전 단계에서 살펴본 바와 같이 Linux 는 각 파일에 대해 여러 타임스탬프를 유지 관리합니다.

  • Access time (atime): 파일이 읽힐 때 업데이트됨
  • Modification time (mtime): 파일의 내용이 변경될 때 업데이트됨
  • Change time (ctime): 파일의 메타데이터 (권한, 소유권) 가 변경될 때 업데이트됨
  • Birth time (btime): 파일이 생성된 시간을 기록합니다 (모든 파일 시스템에서 사용 가능한 것은 아님)

이러한 타임스탬프가 어떻게 변경되는지 시연해 보겠습니다.

  1. 먼저, 테스트 파일의 현재 타임스탬프를 확인합니다.
stat ~/project/testfile.txt
  1. 이제 파일 내용을 수정해 보겠습니다.
echo "Adding a new line to change the modification time." >> ~/project/testfile.txt
  1. 타임스탬프를 다시 확인합니다.
stat ~/project/testfile.txt

파일의 내용을 변경했으므로 수정 시간 (Modify) 과 변경 시간 (Change) 이 모두 업데이트된 것을 확인할 수 있습니다.

파일 권한 작업하기

파일 권한은 파일을 읽고, 쓰고, 실행할 수 있는 사용자를 결정합니다. stat 명령은 기호 형식 (-rw-r--r--) 과 숫자 형식 (0644) 으로 권한을 표시합니다.

권한을 보고 수정하는 방법을 살펴보겠습니다.

  1. 먼저, 테스트 파일의 현재 권한을 확인합니다.
stat -c '%A %a %n' ~/project/testfile.txt

이 명령은 사용자 정의 형식을 표시하기 위해 -c 옵션을 사용합니다.

  • %A는 기호 형식으로 권한을 표시합니다.
  • %a는 8 진수 (숫자) 형식으로 권한을 표시합니다.
  • %n은 파일 이름을 표시합니다.

출력은 다음과 유사해야 합니다.

-rw-r--r-- 644 /home/labex/project/testfile.txt
  1. 이제 권한을 변경해 보겠습니다.
chmod 755 ~/project/testfile.txt

이 명령은 권한을 755로 변경합니다. 즉,

  • 소유자는 읽기, 쓰기 및 실행 권한을 갖습니다 (7 = 4+2+1).
  • 그룹은 읽기 및 실행 권한을 갖습니다 (5 = 4+1).
  • 다른 사용자는 읽기 및 실행 권한을 갖습니다 (5 = 4+1).
  1. 권한을 다시 확인합니다.
stat -c '%A %a %n' ~/project/testfile.txt

이제 출력은 다음과 같이 표시되어야 합니다.

-rwxr-xr-x 755 /home/labex/project/testfile.txt
  1. 변경 시간이 어떻게 영향을 받았는지도 확인해 보겠습니다.
stat ~/project/testfile.txt | grep Change

파일의 메타데이터 (권한) 를 수정했으므로 Change 타임스탬프가 업데이트된 것을 확인할 수 있습니다.

타임스탬프와 권한을 이해하는 것은 시스템 관리 및 파일 액세스 문제 해결에 필수적입니다. stat 명령을 사용하면 파일 메타데이터의 이러한 측면을 쉽게 모니터링할 수 있습니다.

stat 명령으로 사용자 정의 형식 사용하기

stat 명령의 가장 강력한 기능 중 하나는 출력 형식을 사용자 정의할 수 있다는 것입니다. 이는 파일에 대한 특정 정보가 필요하거나 스크립트에서 출력을 사용하려는 경우 특히 유용합니다.

형식 옵션

stat 명령은 출력 형식을 사용자 정의하기 위해 -c 또는 --format 옵션을 제공합니다. 이 옵션을 사용하면 표시할 정보와 형식을 지정하는 형식 문자열을 지정할 수 있습니다.

작업할 다른 테스트 파일을 만들어 보겠습니다.

echo "This is another test file." > ~/project/second_file.txt

형식 지정자

stat 명령은 %로 시작하는 다양한 형식 지정자를 지원합니다. 다음은 가장 일반적으로 사용되는 몇 가지 지정자입니다.

  • %n: 파일 이름
  • %s: 바이트 단위의 파일 크기
  • %b: 할당된 블록 수
  • %u: 소유자의 사용자 ID
  • %U: 소유자의 사용자 이름
  • %g: 소유자의 그룹 ID
  • %G: 소유자의 그룹 이름
  • %a: 8 진수 (숫자) 형식의 접근 권한
  • %A: 사람이 읽을 수 있는 형식의 접근 권한
  • %x: 마지막 접근 시간
  • %y: 마지막 수정 시간
  • %z: 마지막 변경 시간

몇 가지 예를 시도해 보겠습니다.

  1. 파일 이름과 크기를 표시합니다.
stat -c '%n is %s bytes' ~/project/testfile.txt

출력은 다음과 같아야 합니다.

/home/labex/project/testfile.txt is 85 bytes
  1. 소유자와 권한을 표시합니다.
stat -c 'Owner: %U, Permissions: %A' ~/project/testfile.txt

출력은 다음과 같아야 합니다.

Owner: labex, Permissions: -rwxr-xr-x
  1. 여러 정보를 표시합니다.
stat -c 'File: %n\nSize: %s bytes\nOwner: %U\nPermissions: %A\nModified: %y' ~/project/testfile.txt

이 명령은 파일 이름, 크기, 소유자, 권한 및 수정 시간을 각각 새 줄에 표시합니다.

  1. 여러 파일에 대한 정보를 비교합니다.
stat -c '%n: %s bytes, modified %y' ~/project/testfile.txt ~/project/second_file.txt

이 명령은 두 파일의 이름, 크기 및 수정 시간을 표시합니다.

스크립트에서 Stat 사용하기

사용자 정의 형식 기능은 특정 정보를 추출해야 할 때 셸 스크립트에서 특히 유용합니다. 여러 파일의 총 크기를 계산하는 간단한 스크립트를 만들어 보겠습니다.

echo '#!/bin/bash
total=0
for file in "$@"; do
  size=$(stat -c "%s" "$file")
  echo "File: $file, Size: $size bytes"
  total=$((total + size))
done
echo "Total size: $total bytes"' > ~/project/file_size.sh

chmod +x ~/project/file_size.sh

이제 테스트 파일에서 스크립트를 실행해 보겠습니다.

~/project/file_size.sh ~/project/testfile.txt ~/project/second_file.txt

출력은 각 파일의 크기와 총 크기를 표시해야 합니다.

stat 명령의 사용자 정의 형식 옵션을 마스터하면 특정 요구 사항에 맞게 파일 메타데이터를 효율적으로 추출하고 처리할 수 있습니다.

디렉토리 및 파일 시스템 작업하기

이 단계에서는 stat 명령을 디렉토리 및 파일 시스템과 함께 사용하는 방법을 살펴보겠습니다. 이 지식은 시스템 관리 작업 및 스토리지 사용량 이해에 유용합니다.

디렉토리와 함께 stat 명령 사용하기

stat 명령은 파일과 동일한 방식으로 디렉토리와 함께 작동합니다. 테스트 디렉토리를 만들고 메타데이터를 검사해 보겠습니다.

mkdir -p ~/project/test_dir
stat ~/project/test_dir

파일에 대해 보았던 것과 유사한 출력을 볼 수 있지만, 파일 유형 필드에는 "regular file" 대신 "directory"가 표시됩니다.

파일과 디렉토리의 주요 차이점은 디렉토리가 일반적으로 더 많은 링크를 갖는다는 것입니다 (각 하위 디렉토리마다 하나씩, 디렉토리 자체와 상위 디렉토리에 대해 두 개).

하위 디렉토리를 만들고 링크 개수에 어떤 영향을 미치는지 살펴보겠습니다.

mkdir -p ~/project/test_dir/sub_dir
stat ~/project/test_dir

링크 개수가 1 증가한 것을 확인할 수 있습니다.

파일 시스템 정보

stat 명령은 -f 또는 --file-system 옵션을 사용하여 파일 시스템에 대한 정보도 제공할 수 있습니다. 이 옵션은 파일 시스템 유형, 블록 크기 및 사용 통계와 같은 세부 정보를 표시합니다.

프로젝트 디렉토리를 포함하는 파일 시스템을 검사해 보겠습니다.

stat -f ~/project

출력에는 다음이 포함되어야 합니다.

  • 파일 시스템 유형
  • 블록 크기
  • 총 블록 수
  • 사용 가능한 블록 수
  • 사용 가능한 블록 수 (비 루트 사용자의 경우)
  • 총 inode 수
  • 사용 가능한 inode 수

이 정보는 디스크 공간 사용량을 모니터링하고 용량을 계획하는 데 유용합니다.

옵션 결합하기

파일 시스템 옵션을 사용자 정의 형식 옵션과 결합하여 특정 정보를 추출할 수 있습니다.

stat -f -c 'File System: %T\nTotal size: %b blocks\nFree: %f blocks\nAvailable: %a blocks' ~/project

이 명령은 파일 시스템 유형, 총 블록 수, 사용 가능한 블록 수 및 사용 가능한 블록 수를 표시합니다.

심볼릭 링크 따라가기

기본적으로 stat 명령이 심볼릭 링크를 만나면 링크가 가리키는 파일이 아닌 링크 자체에 대한 정보를 표시합니다. 심볼릭 링크를 만들고 이를 실제로 확인해 보겠습니다.

echo "Target file content" > ~/project/target_file.txt
ln -s ~/project/target_file.txt ~/project/symlink.txt
stat ~/project/symlink.txt

출력은 파일 유형이 "symbolic link"이고 크기가 대상 파일에 대한 경로의 길이임을 표시해야 합니다.

링크 대신 대상 파일에 대한 정보를 보려면 -L 또는 --dereference 옵션을 사용합니다.

stat -L ~/project/symlink.txt

이제 출력은 대상 파일에 대한 정보를 표시해야 하며, 여기에는 크기와 "regular file"로의 유형이 포함됩니다.

실제 적용: 큰 디렉토리 찾기

stat 명령의 실제 적용 사례 중 하나는 큰 디렉토리를 찾는 것입니다. 디렉토리 크기를 계산하는 스크립트를 만들어 보겠습니다.

echo '#!/bin/bash
for dir in "$@"; do
  if [ -d "$dir" ]; then
    size=$(du -s "$dir" | cut -f1)
    echo "Directory: $dir, Size: $size KB"
  else
    echo "$dir is not a directory"
  fi
done' > ~/project/dir_size.sh

chmod +x ~/project/dir_size.sh

이제 테스트 디렉토리에서 스크립트를 실행해 보겠습니다.

~/project/dir_size.sh ~/project/test_dir

이 스크립트는 du 명령을 사용하여 디렉토리 크기를 계산하여 stat 명령에서 제공하는 메타데이터 정보를 보완합니다.

stat 명령을 디렉토리 및 파일 시스템과 함께 사용하는 방법을 이해하면 Linux 시스템의 스토리지 구성 및 사용량에 대한 귀중한 통찰력을 얻을 수 있습니다.

요약

이 랩에서는 Linux stat 명령을 사용하여 파일 메타데이터를 검색하고 분석하는 방법을 배웠습니다. 다음 내용을 살펴보았습니다.

  • 포괄적인 파일 정보를 표시하기 위한 stat 명령의 기본 사용법
  • 파일 타임스탬프 및 권한을 이해하고 작업하는 방법
  • 특정 메타데이터 정보를 추출하기 위한 사용자 정의 형식 사용
  • 스토리지 사용량에 대한 통찰력을 얻기 위해 디렉토리 및 파일 시스템 작업

이러한 기술은 시스템 관리, 파일 액세스 문제 해결, 파일 변경 모니터링 및 스토리지 구성을 이해하는 데 유용합니다. stat 명령은 Linux 가 모든 파일과 디렉토리에 대해 유지 관리하는 자세한 메타데이터를 보여주는 창을 제공하여 파일 시스템에 대한 더 깊은 통찰력을 얻을 수 있도록 합니다.

stat 명령과 다양한 옵션을 마스터함으로써 파일을 보다 효과적으로 관리하고 문제를 보다 효율적으로 진단하는 데 도움이 되는 강력한 도구를 Linux 툴킷에 추가했습니다.