เป็นวิธีที่ดีที่สุด (เชื่อถือได้พกพา ฯลฯ ) เพื่อตรวจสอบว่าโฟลเดอร์ที่กำหนดอยู่ในระบบไฟล์ระยะไกลติดตั้ง (NFS) ภายในเปลือกสคริปต์คืออะไร?
ฉันกำลังมองหาคำสั่งที่จะมีลักษณะ:
chk-remote-mountpoint /my/path/to/folder
เป็นวิธีที่ดีที่สุด (เชื่อถือได้พกพา ฯลฯ ) เพื่อตรวจสอบว่าโฟลเดอร์ที่กำหนดอยู่ในระบบไฟล์ระยะไกลติดตั้ง (NFS) ภายในเปลือกสคริปต์คืออะไร?
ฉันกำลังมองหาคำสั่งที่จะมีลักษณะ:
chk-remote-mountpoint /my/path/to/folder
คำตอบ:
ในขณะที่สเตฟานกล่าวว่า "ไม่มีคำตอบ Unix สากล"
ทางออกที่ดีที่สุดที่ฉันได้พบกับคำถามของฉัน:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
จะกลับชนิดของระบบแฟ้มตัวอย่างเช่น: หรือnfsext3
-Tตัวเลือกที่ไม่ได้มาตรฐานดังนั้นจึงอาจไม่ทำงานในระบบอื่น ๆ Unix / Linux ...
ตามความเห็นของGilles 'ด้านล่าง: "ใช้งานได้บน Linux ที่ไม่ได้ฝัง แต่ไม่ได้อยู่ใน BusyBox, * BSD, ฯลฯ "
/etc/mtabหรือผลลัพธ์mountแทนการใช้dfสามารถทำได้ในบางกรณี
/proc/mounts
mountหรือ/etc/mtabไม่ได้/proc/mountsมาตรฐานจึงมีการรับประกันที่ไม่มีในสิ่งที่อาจจะพบว่ามี ...
-Tมีความหมายแตกต่างกันที่นี่
คุณสามารถใช้ statGNU
%m เพื่อหาจุดเมานต์
$ stat --format=%m /usr/src/linux
/usr/src
%T (ในโหมดระบบไฟล์) เพื่อค้นหาชื่อของระบบไฟล์
$ stat --file-system --format=%T /usr/src/linux
reiserfs
ดังนั้นคุณรู้ว่า/usr/src/linuxในระบบของฉันถูกเก็บไว้ในระบบแฟ้มที่ติดตั้งอยู่บนและมีประเภทระบบแฟ้ม/usr/srcreiserfs
ยังอ้างถึงman statสำหรับการอ้างอิงเพิ่มเติม มันเป็นคำสั่งที่ใช้งานได้หลากหลายมีประโยชน์เกือบทุกครั้งที่คุณต้องการข้อมูลเกี่ยวกับไฟล์และไม่ต้องการถอยกลับไปสู่grep | awkวอร์ด
statไม่มี%mตัวเลือกสำหรับ--format(ใช้ Debian Squeeze, coreutils 8.5) ดังนั้นฉันเดาว่าโซลูชันนี้ไม่น่าเชื่อถือมาก
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a filecoreutils: เกือบ 3 ปีที่แล้ว น่าประหลาดใจที่เดเบียนยังไม่มีสิ่งนี้
mount -lและการใช้งานgrep, sedหรือawkจะหาบรรทัดที่หมายถึงไดเรกทอรีในคำถาม
/my/path/to/the/directoryจริง ๆ แล้วมีบางอย่างจากจุดเมานท์/my/pathพร้อมคำตอบ บางทีคุณอาจจะสามารถให้รายละเอียดบางอย่างเพิ่มเติมเกี่ยวกับgrep, sed, awkคำสั่งที่คุณแนะนำ (คำตอบที่สมบูรณ์) ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'ควรให้รายการของจุดเชื่อมต่อ nfs ทั้งหมดบนระบบ
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The คำสั่งstat: mount` จะพิมพ์จุดเมานต์ทั้งหมดใน<device> on <mountpoint> type <type>รูปแบบ เพื่อ grep นี้ฉันได้stat --printfสร้างon <mountpoint> typeส่วน
น่าเสียดายที่ Unix ไม่มีคำตอบสากล
สิ่งหนึ่งที่คุณสามารถทำได้สำหรับไฟล์ที่กำหนด/a/b/c/dคือการเดินไปตามเส้นทาง:
... และทำstat(2)ในแต่ละระดับจนกว่าจะมีst_devการเปลี่ยนแปลง จากนั้นคุณจะรู้ว่าจุดต่อคืออะไร จากนั้นคุณสามารถค้นหาพา ธ แบบบัญญัติของจุดเมานต์นั้นใน/etc/mtabหรือในผลลัพธ์ของmountเพื่อค้นหาประเภทระบบไฟล์ จากนั้นหาสิ่งที่อยู่ห่างไกลและสิ่งที่จะไม่ยุ่งยากโดยเฉพาะอย่างยิ่งสำหรับคนประเภทฟิวส์ ยกตัวอย่างเช่นnfs, cifs, fuse.sshfs, fuse.davfsที่เห็นได้ชัด แต่สิ่งที่เกี่ยวกับตัวอย่างfuse.gvfs-fuse-daemonหรือfuse.avfsdว่าสามารถมีได้ทั้งไฟล์เครือข่ายและนอกเครือข่าย?
stat(2)ฉันคิดว่าคุณกำลังอ้างถึงฟังก์ชั่น C แต่ฉันใช้เชลล์ อย่างไรก็ตามst_devอ้างอิงถึง ID อุปกรณ์หลักและรอง (เป็น Linux เฉพาะหรือไม่) และคำสั่งเชลล์stat(1)มี (ไม่ใช่มาตรฐาน) %tและ%Tมี--formatตัวเลือกสำหรับหมายเลขหลักและรองตามลำดับแต่จะส่งกลับ "0" (local และ nfs เสมอ) ) ฉันลองใช้ Debian Squeeze และ Lenny
--file-systemตัวเลือกนี้หรือไม่?
--file-systemมันมีความหมายอื่นถ้าใช้กับ
"-l" ถึง df (1) จะล้มเหลวโดยมีข้อผิดพลาดในระบบไฟล์ที่ไม่ได้อยู่ในระบบดังนั้นคุณสามารถใช้ลักษณะการทำงานนี้เพื่อทราบว่าระบบไฟล์นั้นเป็นระยะไกลหรือไม่:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
dfจะล้มเหลวและเพียงอย่างเดียวทำให้นี่เป็นคำตอบที่ไม่ดีนัก แต่ก็พยายามตอบคำถามดังนั้นฉันจึงไม่เห็นว่าทำไมคุณถึงเรียกมันว่า "ไม่ใช่คำตอบ"
df /pathจะบอกคุณว่าเป็นจุดติดถ้ามันบอกว่าติดประเด็นก็คือไม่ได้/path/
แค่ทำ
df /me/path/to/folder
หากฟิลด์แรก (ระบบไฟล์) อยู่ในรูปแบบโฮสต์: / path คุณจะรู้ว่าเป็น NFS
คุณสามารถใช้df -tบน Linux และdf -Tบนระบบ BSD
จากผู้ชาย df :
-t, --type = TYPE
จำกัด รายการไปยังระบบไฟล์ประเภท TYPE
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-tตัวเลือกนั้นมีความหมายแตกต่างกันใน POSIX / SUS ดังนั้นการใช้ตัวเลือกนี้อาจให้ผลลัพธ์ที่ไม่สอดคล้องกันในเวอร์ชันต่าง ๆ บนเครื่องมือ / UNIX
ฉันจะใช้เป็นการส่วนตัวmountpoint(พกพาได้บน Linux!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
หรือshowmountต้องการติดตั้งบนระบบใด ๆ ที่ติดตั้งการNFSแชร์ (ส่วนหนึ่งของnfs-commonแพ็คเกจ):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
ตัวเลือกอื่นจะเป็น someting เช่น:
$ mount -l -t nfs | grep 'my mount point'
mountpointเป็นมาตรฐานในกรณีนี้
find . -type d -name nfs -exec mountpoint {} \; | grep not
จะตรวจสอบโฟลเดอร์ทั้งหมดที่ชื่อ 'nfs' หากพวกเขาถูกเมาท์
nfsไม่ได้มองหาโฟลเดอร์ชื่อ