เมานต์ข้อมูลสำหรับไดเรกทอรีปัจจุบัน


20

ฉันสามารถทำได้df .เพื่อรับข้อมูลบางอย่างเกี่ยวกับการติดตั้งที่ไดเรกทอรีปัจจุบันอยู่ในและฉันสามารถรับข้อมูลทั้งหมดที่ฉันต้องการจากmountแต่ได้รับข้อมูลมาก (ข้อมูลเกี่ยวกับการติดตั้งอื่น ๆ ) ฉันสามารถ grep มันลง แต่ฉันสงสัยว่ามีวิธีที่ดีกว่า

มีคำสั่งบางmountinfoอย่างที่mountinfo .ให้ข้อมูลที่ฉันต้องการ (เช่นdf .แต่มีข้อมูลที่mountให้)


ฉันใช้ Debian Gnu + Linux


1
ฉันเชื่อว่าstatสามารถใช้คำสั่งได้เช่นกัน อย่างไรก็ตามฉันไม่แน่ใจว่า%mตัวเลือกที่ให้จุดเมานท์รองรับในระบบเวอร์ชั่นของคุณหรือไม่ ฉันตรวจสอบในระบบของฉันและดูเหมือนว่าจะไม่ส่งคืนจุดเชื่อมต่อ
Ramesh

1
@Ramesh, ใช่stat "--printf=%m\n" .รับจุดเมานต์ของระบบไฟล์ที่ไดเรกทอรีปัจจุบันมีอยู่ดังนั้นเราจึงทำให้คำตอบบางอย่างง่ายขึ้น ขอบคุณ
ctrl-alt-delor

คำตอบ:


18

ฉันคิดว่าคุณต้องการสิ่งนี้:

findmnt -T .

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

-T, - เป้าหมายพา ธ
หากพา ธ ไม่ใช่ไฟล์หรือไดเร็กทอรี mountpoint ให้findmntตรวจสอบองค์ประกอบพา ธ ในลำดับย้อนกลับเพื่อรับเมานต์ -o, --output [list]คุณสามารถพิมพ์เฉพาะบางสาขาผ่าน
ดูfindmnt --helpรายการเขตข้อมูลที่มีอยู่


หรือคุณสามารถเรียกใช้:

(until findmnt . ; do cd .. ; done)

ปัญหาที่คุณพบคือเส้นทางทั้งหมดสัมพันธ์กับสิ่งอื่นดังนั้นคุณต้องเดินบนต้นไม้ ทุกเวลา.

findmntเป็นสมาชิกของแพคเกจ util-linux และได้รับไม่กี่ปีที่ผ่านมาตอนนี้ ถึงตอนนี้ไม่ว่า distro ของคุณจะติดตั้งไว้ในเครื่อง Linux ของคุณแล้วหากคุณมีmountเครื่องมือ

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntจะพิมพ์ข้อมูลการเมานต์ทั้งหมดโดยไม่มีอาร์กิวเมนต์จุดเมานท์และเฉพาะสำหรับอาร์กิวเมนต์ที่มีหนึ่ง -Dเป็นเลียนแบบdfตัวเลือก หากไม่มี-Dเอาต์พุตคล้ายกับmount- แต่สามารถกำหนดค่าได้มากกว่า ลองfindmnt --helpดูด้วยตัวคุณเอง

ฉันติดมันใน subshell ดังนั้นไดเรกทอรีปัจจุบันของเชลล์ปัจจุบันจะไม่เปลี่ยนแปลง

ดังนั้น:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

เอาท์พุท

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

หากคุณไม่มี-Dตัวเลือกสำหรับคุณ(ไม่ใช่ในรุ่นเก่าของ util-linux)คุณไม่จำเป็นต้องกลัวเลย - มันมีอะไรมากกว่าสวิตช์ความสะดวกสบายในทุกกรณี สังเกตเห็นส่วนหัวของคอลัมน์ที่สร้างขึ้นสำหรับการโทรแต่ละครั้ง - คุณสามารถรวมหรือแยกส่วนสำหรับการเรียกใช้แต่ละครั้งด้วย-oสวิตช์ utput ฉันจะได้รับผลลัพธ์เช่นเดียวกับที่-Dอาจให้:

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

เอาท์พุท

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp

ฉันชอบมันยกเว้นเรื่องเล็กน้อย-Dฉันไม่มีทางเลือกนั้น (ฉันใช้ Debian7, util-linux 2.20.1-5.3)
ctrl-alt-delor

ฉันจะคุณในไม่กี่วันฉันจะปล่อยให้เวลาเพื่อดูว่าใครมีคำตอบที่สมบูรณ์แบบมากขึ้น แม้ว่านี่จะใกล้เคียงกับความสมบูรณ์แบบ (ถ้ามันทำงานได้เหมือน df: ไม่ต้องการลูปมันก็จะสมบูรณ์แบบ)
ctrl-alt-delor

@ Richard - เป็นความคิดที่ดี - ฉันไม่ชอบเมื่อคำตอบได้รับการยอมรับเร็วเกินไป เกี่ยวกับลูปและdf- ฉันยินดีที่จะเดิมพันว่ามันเป็นลูปคุณแค่ไม่ต้องบอกให้ทำ
mikeserv

1
ขอบคุณ @ramesh เราสามารถทำได้findmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor

2
เวอร์ชันของฉันfindmntมี-Tตัวเลือกที่สามารถข้ามcd ..ลูปได้ อาจเป็นประโยชน์กับคนอื่น
ไนโตรเจน

1

วิธี Linux / Unix คือการมีกล่องเครื่องมือของยูทิลิตี้ขนาดเล็กที่เมื่อรวมเข้าด้วยกันจะให้ผลลัพธ์ที่คุณต้องการ

พวกเขามักจะไม่ได้รับประโยชน์สำหรับทุกโอกาส แต่คุณมีโปรแกรมอรรถประโยชน์ที่มีประโยชน์ขนาดเล็กจำนวนมากที่รวมเข้ากับท่อเป็นต้นข้อดีของการทำเช่นนี้คือคุณสามารถเขียนโปรแกรมอรรถประโยชน์ของตัวเองได้อย่างง่ายดายหากไม่มี

ตัวอย่างเช่นในการรับข้อมูลที่คุณตามมาคุณสามารถใช้:

mount | grep $(df  --output=source . | tail -1)

หากคุณต้องการใช้ซ้ำกับไดเรกทอรีต่าง ๆ ข้างต้นให้สร้างสคริปต์:

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

บันทึกเป็นmountinfoและทำให้สามารถเรียกใช้งานได้ ( chmod +x mountinfo) จากนั้นคุณสามารถใช้เป็น:

mountinfo .

หากคุณต้องการระบบที่มียูทิลิตี้สำหรับทุกสิ่งที่ไม่มีการทำงานร่วมกันซึ่งกันและกันคุณเกทส์บางคนอาจช่วยคุณได้ ;-)


--outputมีอยู่ใน coreutils รุ่นล่าสุดของ GNU เท่านั้น (≥8.22)
Gilles 'หยุดความชั่วร้าย'

นี่เป็นสิ่งที่ฉันได้ทำไปแล้วมันเป็นเพียงแค่ว่าmountไม่มีตัวเลือกใด ๆ ที่จะเกิดขึ้นหลังจากที่คิด: ด้วยตัวเลือกที่คุณสร้างจุดเมานท์โดยที่ไม่แสดงรายการพวกเขาฉันหวังว่าจะเป็นเครื่องมือรายการที่ดีกว่า ที่เราเห็น @mikeserv findmntได้แสดงให้เรา
ctrl-alt-delor

1

มันอาจค่อนข้างยุ่งถ้าจุดเชื่อมต่อมีช่องว่าง แต่ควรทำงานยกเว้นในกรณีที่จุดเชื่อมต่อมีบรรทัดใหม่:

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pเอาต์พุตหนึ่งบรรทัดสำหรับระบบไฟล์ ไม่มีตัวเลือกที่dfการส่งออกเดือนพฤษภาคมสองบรรทัดถ้าติดจุดเป็นเวลานาน ชื่อจุดเชื่อมต่อเริ่มต้นในคอลัมน์เดียวกันเช่นเดียวกับป้ายกำกับ "ติดตั้งที่" ในบรรทัดส่วนหัว

หลังจากที่เราได้รับการจุดติดเรา grep mountสำหรับมันในการส่งออกของ


1

ฉันไม่รู้คำสั่ง แต่คุณสามารถสร้างฟังก์ชั่นได้ คุณสามารถเพิ่มด้านล่างของคุณ.bashrc:

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

นี้รันคำสั่งและผ่านออกไปmount จะมองหาผลลัพธ์ของและที่จะทำลายมันลง:grepgrepdf -P "$1" | tail -n 1 | awk '{print $1}'

  • df -P "$1"จะทำงานdfกับอาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชัน
  • tail -n 1จะส่งออกบรรทัดที่สองเฉพาะบรรทัดที่มีpartitionข้อมูล
  • awk '{print $1}'จะพิมพ์ส่วนแรกของบรรทัดนั้นซึ่งเป็นหมายเลขดิสก์ / /dev/sda5พาร์ทิชันเช่น นั่นคือสิ่งที่grepจะมองหาในคำสั่ง mount และส่งออกมัน

ส่ง.bashrcไฟล์ของคุณเพื่อใช้การเปลี่ยนแปลงหรือออกจากระบบและเข้าสู่ระบบอีกครั้ง

ตอนนี้ถ้าคุณเรียกใช้mountinfo .คุณจะได้ผลลัพธ์ที่คุณต้องการ


นี่เป็นสิ่งที่ฉันกำลังทำอยู่ (แต่ถ้าไม่มีฟังก์ชั่นฉันก็ไม่ได้ทำพอเมื่อฉันทำมันในระบบอื่น ๆ เช่นคำตอบในเว็บไซต์นี้) มันเป็นเพียงแค่ว่าmountไม่มีตัวเลือกใด ๆ ความคิดหลังจากนั้น: ด้วยตัวเลือกที่คุณสร้างจุดเมานท์โดยที่ไม่มีรายการเหล่านั้นฉันก็หวังว่าจะมีเครื่องมือรายการที่ดีกว่า ที่เราเห็น @mikeserv findmntได้แสดงให้เรา
ctrl-alt-delor

0

หากคุณใช้ GNU coreutils df รุ่นโบราณที่ไม่สมบูรณ์แล้วก็ใช้echo $(df . --output=target | tail -n 1)งานได้ ในทำนองเดียวกันstat -c '%m' .แม้ว่าฉันจะทราบว่าhttps://linux.die.net/man/1/statขาดเอกสารของ%mตัวเลือกการจัดรูปแบบ

การทำแบบนี้เป็นเรื่องที่น่าเบื่อ: ข้อใดข้อหนึ่งข้างต้นจะไม่สามารถใช้ได้กับ stat หรือ df รุ่น Cygwin หากไม่มีความเป็นไปได้ของช่องว่างในเส้นทางของจุดเมานท์df -P . | tail -1 | awk '{ print $NF}'จะดี แต่บ่อยครั้งที่ USB แฟลชไดรฟ์มีช่องว่างในชื่อโวลุ่มซึ่งอาจจะปรากฏในพา ธ เมานต์และแตกไฟล์นี้ สำหรับการพกพา Perl สามารถติดตั้งได้ทุกที่และ CPAN มีโมดูลSys :: Filesystem :: MountPointซึ่งมีฟังก์ชั่นที่ต้องการ


คุณสามารถบอกเราได้ว่าอะไรที่echo $()เพิ่มเข้ามาในคำสั่ง?
ctrl-alt-delor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.