Làm thế nào để kiểm tra định dạng của một hệ thống tập tin


11

Tôi muốn kiểm tra, trong một tập lệnh bash, trên hệ thống tập tin loại thư mục là gì.

Ý tưởng là một cái gì đó như

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

Bạn có muốn điểm gắn kết hoặc loại hệ thống tập tin? Sản lượng mong muốn của bạn sẽ là gì?
terdon

Câu trả lời:


11

Sử dụng df. Bạn có thể truyền cho nó một đường dẫn và nó sẽ cung cấp cho bạn thông tin hệ thống tập tin cho đường dẫn đó. Nếu bạn cần loại hệ thống tập tin, hãy sử dụng công -Ttắc, như vậy:

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

Để trích xuất loại hệ thống tập tin, bạn có thể phân tích cú pháp (sử dụng công -Ptắc để tránh dfngắt dòng nếu phần thiết bị quá dài):

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

Vì vậy, bạn có thể sử dụng giá trị đó trong một ifcấu trúc như vậy:

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

Coi chừng cột thiết bị có thể chứa dấu cách (nhưng hiếm khi xảy ra), trong trường hợp đó việc phân tích cú pháp sẽ thất bại.


12

Trên một hệ thống có lệnh GNU stat được cài đặt (như với bất kỳ bản phân phối Linux tiêu chuẩn nào), bạn có thể lấy loại fs cho một tệp đã cho mà không yêu cầu bất kỳ phân tích cú pháp nào bằng cách sử dụng statlệnh:

stat -f -c %T filename

-fyêu statcầu cung cấp thông tin về hệ thống tệp thay vì tệp và -c %Tđặt định dạng đầu ra chỉ bao gồm loại hệ thống tệp có thể đọc được của con người ( %T).

Vì vậy, bạn có thể sử dụng (trong bash) như:

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

man stat sẽ cung cấp thêm thông tin.


3

Với findmnt(một phần của util-linux):

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

Khi sử dụng tùy chọn

-T, - đường dẫn nhắm mục tiêu
nếu đường dẫn không phải là tệp hoặc thư mục mountpoint, hãy findmntkiểm tra các phần tử đường dẫn theo thứ tự ngược lại để lấy mountpoint. Hai tùy chọn khác triệt tiêu dòng tiêu đề: -n, --noheadingvà chọn (các) cột sẽ được liệt kê:-o, --output


dftừ coreutilscó một tùy chọn tương tự --output=để chỉ in một số trường nhất định, fstypeví dụ:

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

không có tùy chọn để loại bỏ tiêu đề, vì vậy bạn sẽ phải chuyển đầu ra sang, vd | sed 1d


Một findmntcông cụ dễ thương , ngay cả với đầu ra TUI vẽ đường. Cảm ơn!
Incni Mrsi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.