pasang info untuk direktori saat ini

20

Saya dapat melakukan df .untuk mendapatkan beberapa info di mount yang ada di direktori saat ini, dan saya bisa mendapatkan semua info yang saya inginkan mount, tetapi mendapatkan banyak info (info tentang mount lain). Saya bisa menolaknya, tetapi saya bertanya-tanya apakah ada cara yang lebih baik.

Apakah ada beberapa perintah mountinfosehingga mountinfo .memberikan info yang saya inginkan (seperti df ., tetapi dengan info yang mountmemberikan.)


Saya menggunakan Debian Gnu + Linux.

ctrl-alt-delor
sumber
1
Saya percaya statperintah dapat digunakan juga. Namun, saya tidak yakin apakah %mopsi yang memberikan titik pemasangan didukung di versi sistem Anda. Saya memeriksa sistem saya dan sepertinya tidak mengembalikan titik mount.
Ramesh
1
@ Ramesh, Ya stat "--printf=%m\n" .mendapatkan mount-point dari sistem file tempat direktori saat ini. Dengan demikian memungkinkan kita untuk menyederhanakan beberapa jawaban. Terima kasih.
ctrl-alt-delor

Jawaban:

18

Saya pikir Anda menginginkan sesuatu seperti ini:

findmnt -T .

Saat menggunakan opsi

-T, jalur --target
jika path bukan file atau direktori mountpoint, findmntperiksa elemen path dalam urutan terbalik untuk mendapatkan mountpoint. Anda hanya dapat mencetak bidang tertentu melalui -o, --output [list].
Lihat findmnt --helpdaftar bidang yang tersedia.


Atau, Anda dapat menjalankan:

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

Masalah yang Anda hadapi adalah bahwa semua jalur relatif terhadap sesuatu atau lainnya, jadi Anda hanya perlu berjalan di atas pohon. Setiap saat.

findmntadalah anggota dari paket util-linux dan telah ada selama beberapa tahun sekarang. Sekarang, terlepas dari distro Anda, itu harus sudah diinstal pada mesin Linux Anda jika Anda juga memiliki mountalat itu.

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

findmntakan mencetak semua info mount tanpa argumen mount-point, dan hanya itu untuk argumennya dengan satu. Ini -Dadalah opsi menirudf . Tanpa -Doutputnya mirip dengan mount- tetapi jauh lebih dapat dikonfigurasi. Coba findmnt --helpdan lihat sendiri.

Saya memasukkannya ke dalam subshell sehingga direktori shell saat ini tidak berubah.

Begitu:

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

KELUARAN

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

Jika Anda tidak memiliki -Dopsi yang tersedia untuk Anda (Tidak dalam versi util-linux yang lebih lama) maka Anda tidak perlu takut - ini lebih dari sekadar saklar kenyamanan. Perhatikan judul kolom yang dihasilkannya untuk setiap panggilan - Anda dapat memasukkan atau mengecualikannya untuk setiap doa dengan -osakelar utput. Saya bisa mendapatkan output yang sama seperti yang -Ddisediakan seperti:

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

KELUARAN

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp
mikeserv
sumber
Saya suka, kecuali sedikit tentang -D, saya tidak punya opsi itu. (Saya di Debian7, util-linux 2.20.1-5.3)
ctrl-alt-delor
Saya akan √ Anda dalam beberapa hari, saya akan meluangkan waktu untuk melihat apakah ada yang punya jawaban yang lebih sempurna. Meskipun ini hampir sempurna (jika berfungsi seperti df: tidak perlu loop, maka itu akan sempurna).
ctrl-alt-delor
@ Richard - itu ide yang bagus - saya tidak suka kalau jawaban diterima terlalu cepat. mengenai loop dan df- Saya bersedia bertaruh itu loop, Anda hanya tidak perlu mengatakannya untuk melakukannya.
mikeserv
1
Berkat @ramesh kami juga dapat melakukanfindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor
2
Versi saya findmntmemiliki -Topsi yang dapat memotong cd ..loop. Mungkin bermanfaat bagi orang lain.
nitrogen
1

Cara Linux / Unix adalah memiliki kotak peralatan utilitas kecil yang, jika digabungkan, memberi Anda hasil yang Anda cari.

Mereka cenderung tidak memiliki utilitas untuk setiap kesempatan. Sebaliknya Anda memiliki banyak utilitas kecil yang bermanfaat yang dikombinasikan bersama dengan pipa dll. Keuntungannya adalah Anda dapat menulis utilitas sendiri dengan mudah jika tidak ada yang tersedia.

Misalnya, untuk mendapatkan info yang Anda cari, Anda dapat menggunakan:

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

Jika Anda ingin menggunakan kembali yang di atas dengan direktori yang berbeda, buat skrip:

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

Simpan sebagai mountinfodan buat itu dapat dieksekusi ( chmod +x mountinfo). Anda kemudian dapat menggunakannya sebagai:

mountinfo .

Jika Anda menginginkan sistem yang memiliki utilitas untuk semua yang tidak ada yang saling beroperasi satu sama lain, maka Mr Gates tertentu mungkin dapat membantu Anda ;-)

garethTheRed
sumber
--outputhanya ada di versi terbaru GNU coreutils (≥8.22).
Gilles 'SANGAT berhenti menjadi jahat'
Ini cukup banyak apa yang telah saya lakukan, hanya saja mounttanpa ada opsi yang kelihatannya sedikit setelah dipikirkan: dengan opsi yang Anda buat mount point, tanpa itu daftar mereka, saya berharap untuk alat daftar yang lebih baik. Seperti yang kita lihat @mikeserv telah menunjukkan kepada kita findmnt.
ctrl-alt-delor
1

Ini bisa agak berantakan jika titik mount berisi kosong, tetapi ini harus berfungsi kecuali dalam kasus di mana titik mount berisi baris baru:

#!/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 -Pmenghasilkan satu baris untuk sistem file; tanpa opsi itu, dfdapat menghasilkan dua baris jika titik pemasangannya panjang. Nama titik mount dimulai pada kolom yang sama dengan label "Mounted on" di baris header.

Setelah kami mendapatkan titik mount, kami menerima untuk itu di output dari mount.

Tandai Plotnick
sumber
1

Saya tidak tahu perintah, tetapi Anda bisa membuat fungsi. Anda dapat menambahkan di bawah ini ke .bashrc:

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

Ini mengeksekusi mountperintah dan meneruskan output ke grep. grepakan mencari output df -P "$1" | tail -n 1 | awk '{print $1}', dan memecahnya:

  • df -P "$1"akan berjalan dfpada argumen yang dilewatkan ke fungsi,
  • tail -n 1hanya akan menampilkan baris kedua, baris yang berisi partitioninfo.
  • awk '{print $1}'akan mencetak bagian pertama dari baris itu, yang merupakan nomor disk / partisi, misalnya /dev/sda5. Itulah yang grepakan dicari dalam perintah mount, dan mengeluarkannya.

Sumber .bashrcfile Anda untuk menerapkan perubahan, atau keluar dan masuk kembali.

Sekarang, jika Anda menjalankan mountinfo ., Anda akan mendapatkan output yang Anda inginkan.

Alaa Ali
sumber
Ini cukup banyak apa yang telah saya lakukan (tetapi tanpa fungsi, saya tidak cukup melakukannya, ketika saya melakukannya pada sistem lain misalnya jawaban di situs ini.), Hanya saja mounttanpa opsi tampaknya sedikit setelah dipikirkan: dengan opsi yang Anda buat poin mount, tanpa itu daftar mereka, saya berharap untuk alat daftar yang lebih baik. Seperti yang kita lihat @mikeserv telah menunjukkan kepada kita findmnt.
ctrl-alt-delor
0

Jika Anda menggunakan versi GNU coreutils df yang tidak sepenuhnya kuno, maka echo $(df . --output=target | tail -n 1)berfungsilah. Demikian juga dengan stat -c '%m' ., meskipun saya perhatikan bahwa https://linux.die.net/man/1/stat tidak memiliki dokumentasi %mopsi format.

Melakukan ini dengan mudah adalah melelahkan: tidak satu pun di atas akan bekerja dengan versi BSD atau Cygwin dari stat atau df. Jika bukan karena kemungkinan spasi di jalur titik mount, df -P . | tail -1 | awk '{ print $NF}'akan baik, tetapi sering USB flash drive memiliki ruang dalam nama volume, yang mungkin akan muncul di jalur mount dan hancurkan ini. Untuk portabilitas, Perl dapat diinstal secara praktis di mana-mana dan CPAN memiliki modul Sys :: Filesystem :: MountPoint yang menyediakan fungsionalitas yang diinginkan.

Charles Stewart
sumber
Bisakah Anda memberi tahu kami apa yang echo $()ditambahkan ke perintah?
ctrl-alt-delor