geçerli dizin için bağlanma bilgisi


20

Yapabileceğim df .geçerli dizin olduğunu monte üzerindeki bilgi bazılarını almak için ve ben istediğiniz tüm bilgileri alabilirsiniz mount, ama çok bilgi için (diğer bağlar hakkında bilgi) olsun. Ben grep olabilir, ama daha iyi bir yolu olup olmadığını merak ediyorum.

Bazı komut var mı mountinfoböyle mountinfo .istediğim bilgi verir (gibi df .ama bilgi ile, mountverir.)


Debian Gnu + Linux kullanıyorum.


1
statKomutun da kullanılabileceğine inanıyorum . Ancak, %mbağlanma noktasını veren seçeneğin sistem sürümünüzde desteklenip desteklenmediğinden emin değilim . Sistemimi kontrol ettim ve montaj noktasını döndürmüyor gibiydi.
Ramesh

1
@Ramesh, Evet stat "--printf=%m\n" ., geçerli dizinin bulunduğu dosya sisteminin bağlama noktasını alır. Böylece bazı yanıtları basitleştirmemize izin veririz . Teşekkürler.
ctrl-alt-delor

Yanıtlar:


18

Bence böyle bir şey istiyorsun:

findmnt -T .

Seçeneği kullanırken

-T, --hedef yolu
yol bir bağlama noktası dosyası veya dizini değilse, bağlama findmntnoktasını almak için yol öğelerini ters sırayla denetler. İle yalnızca belirli alanları yazdırabilirsiniz -o, --output [list]. Kullanılabilir alanların listesi için
bkz findmnt --help.


Alternatif olarak şunları da çalıştırabilirsiniz:

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

Karşılaştığınız sorun, tüm yolların bir şeye veya başka bir şeye göre olmasıdır, bu yüzden sadece ağacı yürümek zorundasınız. Her zaman.

findmntutil-linux paketinin bir üyesidir ve birkaç yıldır kullanılmaktadır. Şimdiye kadar, dağıtımınızdan bağımsız olarak, aracınız varsa, Linux makinenize zaten yüklenmiş olmalıdır mount.

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

findmnttüm mount'ların bilgilerini bir mount-point argümanı olmadan ve sadece bir ile argümanı için yazdırır. -DOlan taklitdf seçeneği. -DÇıkışı olmadan mount's benzer - ama çok daha yapılandırılabilir. Deneyin findmnt --helpve kendiniz görün.

Geçerli kabuğun geçerli dizini değişmez bir alt kabuk içinde yapıştırın.

Yani:

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

ÇIKTI

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

Eğer yoksa -Dsizin için kullanılabilir seçeneği (Değil util-linux eski sürümlerinde) o zaman korku asla gerek - bu her durumda bir kolaylık anahtarı biraz daha fazladır. Her çağrı için ürettiği sütun başlıklarına dikkat edin - her bir çağırma için -obunları utput anahtarıyla dahil edebilir veya hariç tutabilirsiniz . Ben -Dgibi sağlayabilir aynı çıktı alabilirsiniz :

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

ÇIKTI

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

Beğendim, biraz da hariç, -Dbu seçeneğim yok. (Ben Debian7'yim, util-linux 2.20.1-5.3)
ctrl-alt-delor

Birkaç gün içinde sizi will yapacağım, daha mükemmel bir cevabı olup olmadığını görmek için biraz zaman bırakacağım. Bu mükemmel yakın olsa da (eğer df gibi çalıştı: döngü gerekmezdi, o zaman mükemmel olurdu).
ctrl-alt-delor

@richard - bu iyi bir fikir - Cevaplar çok erken kabul edildiğinde hoşuma gitmiyor. Döngü ile ilgili ve df- Döngü yaptığına bahse girmeye hazırım, sadece bunu yapmasını söylemene gerek yok.
mikeserv

1
@Ramesh sayesinde yapabilirizfindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor

2
Benim sürümümde döngüyü atlayabilecek findmntbir -Tseçenek var cd ... Başka biri için yararlı olabilir.
azot

1

Linux / Unix yolu, birleştirildiğinde size peşinde olduğunuz sonuçları veren küçük yardımcı programlara sahip olmaktır.

Her durum için bir faydaları bulunma eğilimindedirler. Bunun yerine, borular vb. İle bir araya getirilen birçok küçük kullanışlı programa sahipsiniz.

Örneğin, peşinde olduğunuz bilgileri almak için şunları kullanabilirsiniz:

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

Yukarıdakileri farklı dizinlerle yeniden kullanmak istiyorsanız, bir komut dosyası oluşturun:

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

Farklı kaydedin mountinfove yürütülebilir ( chmod +x mountinfo) yapın. Daha sonra şu şekilde kullanabilirsiniz:

mountinfo .

Hiçbiri birbiriyle birlikte çalışmayan her şey için bir yardımcı programa sahip bir sistem istiyorsanız, belirli bir Bay Gates size yardımcı olabilir ;-)


--outputsadece GNU coreutils'in son sürümlerinde mevcuttur (≥8.22).
Gilles 'SO- kötü olmayı kes'

Bu benim yaptığım şey, sadece mounthiçbir seçenekle sonradan biraz düşünülmüş gibi görünüyor: seçeneklerle bağlama noktaları oluşturursanız, onları listelemeden, daha iyi bir liste aracı umuyordum. Gördüğümüz gibi @mikeserv bize gösterdi findmnt.
ctrl-alt-delor

1

Montaj noktalarında boşluklar varsa biraz dağınık olabilir, ancak montaj noktalarının yeni satırlar içermesi durumu dışında bu işe yarar:

#!/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 -Pdosya sistemi için bir satır çıktısı; bu seçenek olmadan df, bağlama noktası uzunsa iki satır çıktısı verebilir. Bağlama noktası adı, başlık satırındaki "Bağlandı" etiketiyle aynı sütunda başlar.

Bağlanma noktasını aldıktan sonra, çıkışında grep mount.


1

Bir komut bilmiyorum ama bir fonksiyon yaratabilirsiniz. Aşağıdakileri aşağıdakilere ekleyebilirsiniz .bashrc:

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

Bu mountkomutu yürütür ve çıktıyı iletir grep. grepçıktısını arayacak df -P "$1" | tail -n 1 | awk '{print $1}'ve parçalayacak:

  • df -P "$1"çalışacak dfişlevine iletilen argüman üzerine,
  • tail -n 1yalnızca ikinci satırı, partitionbilgiyi içeren satırı verir .
  • awk '{print $1}'bu satırın disk / bölüm numarası olan ilk bölümünü yazdırır /dev/sda5. Yani ne grepçıktı üretmesi monte komuta arar ve edecektir.

.bashrcDeğişiklikleri uygulamak için dosyanızı kaynaklayın veya oturumu kapatın ve tekrar oturum açın.

Şimdi, koşarsanız mountinfo ., istediğiniz çıktıyı alırsınız.


Yaptığım şey neredeyse bu (ancak işlev olmadan, yeterince yapmıyorum, bunu yaptığımda diğer sistemlerde olduğu gibi, örneğin bu sitedeki cevaplar.), Sadece mounthiçbir seçenek olmadan biraz görünüyor sonra düşünülmüş: seçenekleri ile bağlama noktaları oluşturmak, onları listelemeksizin, daha iyi bir liste aracı umuyordum. Gördüğümüz gibi @mikeserv bize gösterdi findmnt.
ctrl-alt-delor

0

GNU coreutils df'nin tamamen eski olmayan bir sürümünü kullanıyorsanız, o zaman echo $(df . --output=target | tail -n 1)çalışır. Aynı şekilde stat -c '%m' ., https://linux.die.net/man/1/stat%m format seçeneğinin belgelerinden yoksun olmasına rağmen .

Bunu portatif olarak yapmak yorucu değildir: yukarıdakilerin hiçbiri stat veya df'nin BSD veya Cygwin sürümleriyle çalışmaz. Bağlama noktalarının yollarındaki boşluk olasılığı df -P . | tail -1 | awk '{ print $NF}'olmasaydı, iyi olurdu, ancak genellikle USB flash sürücülerde birim adında, muhtemelen montaj yolunda görünecek ve bunu kıracak boşluklar vardır. Taşınabilirlik için, Perl hemen hemen her yere kurulabilir ve CPAN, istenen işlevselliği sağlayan Sys :: Filesystem :: MountPoint modülüne sahiptir .


echo $()Komuta ne eklediğini söyleyebilir misiniz ?
ctrl-alt-delor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.