Szukam szybkiego sposobu znalezienia punktu podłączenia systemu plików zawierającego dany PLIK. Czy jest coś prostszego lub bardziej bezpośredniego niż moje rozwiązanie poniżej?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Podobne pytanie „ Czy istnieje polecenie, aby zobaczyć, gdzie jest zamontowany dysk? ” Używa węzła urządzenia bieżącego dysku jako danych wejściowych, a nie dowolnego pliku z dysku ...
shell
filesystems
mount
Stu
źródło
źródło
tr
rozmowę możesz zlikwidować, używającawk -F'% '...
Odpowiedzi:
Możesz zrobić coś takiego
lub nawet
Ponieważ
awk
domyślnie dzieli się na białe znaki, nie trzeba ich określać,-F
a także nie trzeba przycinać białych znakówtr
. Na koniec, określając numer zainteresowania (NR==2
), którego możesz również pozbyć siętail
.źródło
-P
prawa? We wszystkich przypadkach ostatnim drukowanym polemawk
powinien być dysk.-P
opcji, którą właśnie dodał Gilles.-P
. Niemniej jednak polecam zawsze używać-P
podczas analizowania danych wyjściowychdf
, jest to łatwiejsze niż sprawdzanie, czy to konkretne użycie jest bezpieczne.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
W GNU / Linux, jeśli masz GNU
stat
z Coreutils 8.6 lub nowszy, możesz:Inaczej:
Twoje podejście jest prawidłowe, ale zakładamy, że punkt montowania nie zawiera spacji,%, nowej linii lub innych niedrukowalnych znaków, możesz to nieco uprościć dzięki nowszym wersjom GNU
df
(8.21 lub nowszym):źródło
df
nie rozpoznaje--output
opcji.df
> = 8,21.W przypadku Linuksa znaleźliśmy specjalnie zaprojektowany do tego celu program ut-linux
Zauważ, że może zostać zwrócony jakiś losowy punkt montowania, jeśli istnieje kilka montowań powiązań. Korzystanie
df
ma ten sam problem.źródło
Ponieważ
stat
zwraca pole „Urządzenie”, byłem ciekawy, jakstat()
można wykorzystać wywołanie biblioteki bazowej, aby uzyskać te informacje programowo w sposób zgodny z POSIX.Ten fragment kodu C:
Poda identyfikatory głównych i podrzędnych urządzeń dla urządzenia zawierającego plik wymieniony w wierszu poleceń (
argv[1]
). Niestetymajor()
iminor()
nie są POSIX-em, chociaż strona podręcznika twierdzi, że są one „obecne w wielu innych systemach” oprócz GNU / linux.Następnie można uzyskać korespondencję między numerem głównym / podrzędnym urządzenia a węzłem urządzenia z np.
/proc/diskstats
I odwzorować, z którego można montować punkty/proc/mounts
, inaczej./etc/mtab
.Tak więc narzędzie wiersza polecenia do tego byłoby całkiem proste.
źródło
/proc/diskstats
jest tylko dla urządzeń blokowych, przegapisz NFS, proc, bezpiecznik ... Przynajmniej w Linuksie różne punkty montowania mogą mieć tę samą maj + minst_dev
może nie zapewniać sposobu na odróżnienie jednej partycji NFS od drugiej. Ktokolwiek naprawdę chce to napisać, będzie musiał wziąć to pod uwagę;)Oto więcej kodu C ++, jeśli chcesz to zrobić z C ++ ...
Więcej linków do metod programistycznych
źródło