파일 시스템의 형식을 확인하는 방법

파일 시스템의 형식을 확인하는 방법

Bash 스크립트에서 디렉토리의 파일 시스템 유형을 확인하고 싶습니다.

아이디어는 이렇습니다

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

답변1

표준 Linux 배포판과 마찬가지로 GNU stat 명령이 설치된 시스템에서는 다음을 사용하여 구문 분석 없이 주어진 파일의 fs 유형을 얻을 수 있습니다 stat.

stat -f -c %T filename

-fstat파일이 아닌 파일 시스템에 대한 정보를 제공하고 -c %T사람이 읽을 수 있는 파일 시스템 유형만 포함하도록 출력 형식을 지정함을 나타냅니다 ( %T).

따라서 이것을 (bash에서) 사용할 수 있습니다:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat더 많은 정보가 제공될 것입니다.

답변2

사용 df. 경로를 전달하면 해당 경로에 대한 파일 시스템 정보가 제공됩니다. 파일 시스템 유형이 필요한 경우 -T다음과 같은 스위치를 사용하십시오.

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

파일 시스템 유형을 추출하려면 이를 구문 분석할 수 있습니다( -P장치 부분이 너무 긴 경우 줄 바꿈을 방지하려면 스위치를 사용하십시오).df

$ df -PT test | awk 'NR==2 {print $2}'
ext4

따라서 다음과 같이 구성에 값을 사용할 수 있습니다 if.

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

장치 열에는 공백이 포함될 수 있지만(드물게), 이 경우 구문 분석이 실패합니다.

답변3

findmnt(의 일부 ) 와 함께 util-linux:

findmnt -no fstype -T /path/to/file

이 옵션을 사용할 때

-T, --대상
경로가 마운트 지점 파일이나 디렉터리가 아닌 경우 findmnt마운트 지점을 얻기 위해 경로 요소를 역순으로 확인합니다. 다른 두 가지 옵션은 헤더 행을 억제 -n, --noheading하고 나열할 열을 선택합니다.-o, --output


dffrom에는 특정 필드만 인쇄하는 coreutils유사한 옵션이 있습니다 . 예를 들면 다음과 같습니다.--output=fstype

df --output=fstype /path/to/file

하지만 헤더를 제거할 수 있는 옵션이 없으므로 출력을 예를 들어 파이프로 연결해야 합니다.| sed 1d

관련 정보