วิธีตรวจสอบรูปแบบของระบบไฟล์


11

ฉันต้องการตรวจสอบในสคริปต์ทุบตีในสิ่งที่ประเภทระบบแฟ้มไดเรกทอรีเป็น

ความคิดเป็นสิ่งที่ชอบ

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

คุณต้องการจุดเชื่อมต่อหรือประเภทระบบไฟล์หรือไม่? ผลลัพธ์ที่คุณต้องการจะเป็นอย่างไร
terdon

คำตอบ:


11

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

ระวังว่าคอลัมน์อุปกรณ์อาจมีช่องว่าง (แต่หายาก) ซึ่งในกรณีนี้การแยกวิเคราะห์จะล้มเหลว


12

ในระบบที่ติดตั้งคำสั่ง GNU stat (เช่นเดียวกับลินุกซ์ดิสทริบิวเตอร์มาตรฐานแบบอื่น ๆ ) คุณสามารถรับประเภท fs สำหรับไฟล์ที่กำหนดโดยไม่ต้องแยกวิเคราะห์โดยใช้statคำสั่ง:

stat -f -c %T filename

-fบอกstatให้ให้ข้อมูลเกี่ยวกับระบบไฟล์แทนไฟล์และ-c %Tตั้งค่ารูปแบบเอาต์พุตให้รวมเฉพาะประเภทระบบไฟล์ที่มนุษย์สามารถอ่านได้ ( %T)

ดังนั้นคุณสามารถใช้ (เป็นทุบตี) เป็น:

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

man stat จะให้ข้อมูลเพิ่มเติม


3

ด้วยfindmnt(ส่วนหนึ่งutil-linux):

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

เมื่อใช้ตัวเลือก

-T, - เป้าหมายพา ธ
หากพา ธ ไม่ใช่ไฟล์หรือไดเร็กทอรี mountpoint ให้findmntตรวจสอบองค์ประกอบพา ธ ในลำดับย้อนกลับเพื่อรับเมานต์ อีกสองตัวเลือกไม่แสดงบรรทัดส่วนหัว: -n, --noheadingและเลือกคอลัมน์ที่จะแสดง:-o, --output


dfจากcoreutilsมีตัวเลือกที่คล้ายกัน--output=เพื่อพิมพ์เฉพาะบางฟิลด์เช่นfstypeเช่น:

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

ไม่มีตัวเลือกในการลบส่วนหัวออกดังนั้นคุณจะต้องไพพ์เอาต์พุตเช่น | sed 1d


findmntเครื่องมือที่น่ารักแม้จะมีเอาต์พุต TUI แบบวาดเส้น ขอบคุณ!
Incnis Mrsi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.