ฉันใช้
mount -o bind /some/directory/here /foo/bar
ฉันต้องการตรวจสอบ /foo/bar
ด้วยสคริปต์ทุบตีและดูว่าถูกเมาท์หรือไม่? ถ้าไม่เช่นนั้นให้เรียกใช้คำสั่ง mount ด้านบนทำอย่างอื่น ฉันจะทำเช่นนี้ได้อย่างไร?
CentOS คือระบบปฏิบัติการ
ฉันใช้
mount -o bind /some/directory/here /foo/bar
ฉันต้องการตรวจสอบ /foo/bar
ด้วยสคริปต์ทุบตีและดูว่าถูกเมาท์หรือไม่? ถ้าไม่เช่นนั้นให้เรียกใช้คำสั่ง mount ด้านบนทำอย่างอื่น ฉันจะทำเช่นนี้ได้อย่างไร?
CentOS คือระบบปฏิบัติการ
คำตอบ:
การรันmount
คำสั่งโดยไม่มีอาร์กิวเมนต์จะบอกให้คุณทราบถึงการติดตั้งปัจจุบัน จากเชลล์สคริปต์คุณสามารถตรวจสอบจุดเชื่อมต่อด้วยgrep
และคำสั่ง if:
if mount | grep /mnt/md0 > /dev/null; then
echo "yay"
else
echo "nay"
fi
ในตัวอย่างของฉันคำสั่ง if กำลังตรวจสอบรหัสทางออกของgrep
ซึ่งระบุว่ามีการจับคู่หรือไม่ /dev/null
เพราะผมไม่ต้องการออกไปจะแสดงเมื่อมีการแข่งขันผมเปลี่ยนเส้นทางไปยัง
grep
ส่งคืนสถานะการออกที่ไม่ใช่ศูนย์หากไม่มีรายการที่ตรงกัน ไม่จำเป็นต้องทำการทดสอบหรือ subshell ที่สร้างโดย $ () if command | grep -q 'stuff'; then ...
mount | grep ...
แสดงให้คุณเห็นว่าการผูกเมาท์ของคุณยังคงทำงานอยู่ หากไม่ได้ต่อเชื่อมอุปกรณ์พื้นฐานและติดตั้งใหม่การเชื่อมต่อการเชื่อมต่อจะไม่เชื่อมต่อทั้งสองไฟล์ / ไดเรกทอรีแม้ว่าจะmount
ยังแสดงว่าเชื่อมต่ออยู่ก็ตาม และถ้าคุณทำumount ...
มันจะบอกคุณว่ามันไม่ได้เมาท์แม้ว่าmount
มันจะบอกว่ามันเป็น ข้อบกพร่องมากมายในระบบไฟล์ linux
readlink -f
ซึ่งไม่ส่งคืนอะไรเลยเมื่อไม่มีเส้นทาง / ไฟล์ หากไม่มี / mount / path / to_file ที่อยู่ภายใต้ (ต่อลิงก์สำหรับอ่าน) การเชื่อมต่อที่อยู่ภายใต้จะพัง (ต่อเชื่อมต่อระหว่างการเชื่อมต่อและการเชื่อมต่อ) หากไฟล์ต้นแบบอยู่ที่นั่นและreadlink -f
ระบุว่าไม่มีเวอร์ชันการเชื่อมโยงของไฟล์นั้นการเชื่อมจะเสียเพียงแค่ต่อเชื่อมการโยงใหม่
/mnt/md0xxx
คำสั่งจะระบุ/mnt/md0
ว่าเมาท์ในขณะที่สิ่งที่ไม่จำเป็นต้องเป็น ...
คุณไม่ได้กังวลที่จะพูดถึง O / S
Ubuntu Linux 11.10 (และอาจเป็นเวอร์ชันล่าสุดของ Linux) มีmountpoint
คำสั่ง
นี่คือตัวอย่างบนเซิร์ฟเวอร์ของฉัน:
$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
จริงๆแล้วในกรณีของคุณคุณควรจะใช้-q
ตัวเลือกนี้ได้:
mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
หวังว่าจะช่วยได้
คู่มือmountpoint
บอกว่า:
ตรวจสอบว่าไดเร็กทอรีหรือไฟล์ที่ระบุถูกกล่าวถึงในไฟล์ / proc / self / mountinfo
คู่มือmount
กล่าวว่า:
โหมดรายชื่อจะคงไว้สำหรับความเข้ากันได้แบบย้อนหลังเท่านั้น สำหรับเอาต์พุตที่มีประสิทธิภาพและปรับแต่งได้มากขึ้นให้ใช้ findmnt (8) โดยเฉพาะในสคริปต์ของคุณ
ดังนั้นคำสั่งที่ถูกต้องในการใช้คือfindmnt
ซึ่งเป็นส่วนหนึ่งของutil-linux
แพ็คเกจและตามคู่มือ:
สามารถค้นหาใน / etc / fstab, / etc / mtab หรือ / proc / self / mountinfo
mountpoint
ดังนั้นมันเป็นจริงการค้นหาสิ่งที่มากกว่า นอกจากนี้ยังมีตัวเลือกที่สะดวก:
-M, - นับ เส้นทางนับ
กำหนดไฟล์ mountpoint หรือไดเร็กทอรีอย่างชัดเจน โปรดดูที่ - เป้าหมาย
โดยสรุปเพื่อตรวจสอบว่าไดเร็กทอรีถูกเมาท์ด้วย bash หรือไม่คุณสามารถใช้:
if [[ $(findmnt -M "$FOLDER") ]]; then
echo "Mounted"
else
echo "Not mounted"
fi
ตัวอย่าง:
mkdir -p /tmp/foo/{a,b}
cd /tmp/foo
sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing
[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"
ฉันชอบคำตอบที่ใช้/proc/mounts
แต่ฉันไม่ชอบทำ grep ง่ายๆ นั่นสามารถให้ผลบวกปลอม สิ่งที่คุณจริงๆต้องการทราบว่าเป็น "ดำเนินการใด ๆ แถวที่มีสตริงตรงนี้จำนวนสาขา 2" ดังนั้นถามคำถามนั้น (ในกรณีนี้ฉันกำลังตรวจสอบ/opt
)
awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts
# and you can use it in and if like so:
if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then
echo "yes"
else
echo "no"
fi
mountpoint
หรือfindmnt
มีอยู่จริง ตอบกลับง่ายมากมีความสุขมาก UNIX เช่นนี้ :)
วิธีแก้ปัญหาของฉัน:
is_mount() {
path=$(readlink -f $1)
grep -q "$path" /proc/mounts
}
ตัวอย่าง:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
สำหรับคำตอบของมาร์คเจ Bobak ของ , mountpoint
ไม่ทำงานหากติดกับbind
ตัวเลือกในระบบแฟ้มที่แตกต่างกัน
สำหรับคำตอบของ Christopher Neylanไม่จำเป็นต้องเปลี่ยนเส้นทางเอาต์พุตของ grep ไปที่ / dev / null เพียงแค่ใช้grep -q
แทน
ที่สำคัญที่สุดกำหนดเส้นทางโดยใช้readlink -f $mypath
:
/path/to/dir/
ลงท้ายด้วยแบ็กสแลชเส้นทางใน/proc/mounts
หรือmount
เอาต์พุตคือ/path/to/dir
/var/run/
คือ symlink ของ/run/
ดังนั้นหากคุณติดผูกสำหรับ/var/run/mypath
และตรวจสอบว่ามันติดมันจะแสดงเป็นใน/run/mypath
/proc/mounts
วิธีอื่นที่สะอาดก็เป็นเช่นนั้น:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
แน่นอนว่า 'echo something' สามารถทดแทนได้ด้วยสิ่งที่คุณต้องทำในแต่ละกรณี
คำตอบที่นี่ซับซ้อนเกินไปเพียงตรวจสอบว่ามีเมาท์อยู่หรือไม่โดยใช้:
cat /proc/mounts | tail -n 1
สิ่งนี้จะส่งออกเฉพาะโฟลเดอร์ที่ติดตั้งสุดท้ายหากคุณต้องการดูทั้งหมดเพียงแค่ลบคำสั่ง tail
ใน. bashrc ของฉันฉันสร้างนามแฝงต่อไปนี้:
alias disk-list="sudo fdisk -l"