ja używam
mount -o bind /some/directory/here /foo/bar
chcę sprawdzić /foo/bar
skryptem bash i zobaczyć, czy został zamontowany? Jeśli nie, wywołaj powyższe polecenie montowania, w przeciwnym razie zrób coś innego. Jak mogę to zrobić?
CentOS to system operacyjny.
Odpowiedzi:
Uruchomienie
mount
polecenia bez argumentów powie ci bieżące montowania. Ze skryptu powłoki możesz sprawdzić punkt montowania za pomocągrep
i instrukcji if:if mount | grep /mnt/md0 > /dev/null; then echo "yay" else echo "nay" fi
W moim przykładzie instrukcja if sprawdza kod zakończenia
grep
, który wskazuje, czy wystąpiło dopasowanie. Ponieważ nie chcę, aby dane wyjściowe były wyświetlane, gdy istnieje dopasowanie, przekierowuję je do/dev/null
.źródło
grep
zwraca niezerowy kod zakończenia, jeśli nie ma dopasowań. Nie ma potrzeby testowania ani podpowłoki utworzonej przez $ ().if command | grep -q 'stuff'; then ...
mount | grep ...
tym, że pokażesz ci, że twoje powiązanie z wierzchowcem jest nadal aktywne. Jeśli urządzenie bazowe zostanie odmontowane i ponownie zamontowane, powiązanie montowania w rzeczywistości nie będzie już łączyć dwóch plików / katalogów, mimo żemount
nadal pokazuje, że jest połączone. A jeśli to zrobiszumount ...
, powie ci nawet, że nie jest zamontowany, chociażmount
powiedział, że tak. OGROMNY błąd w systemie plików Linuksa.readlink -f
, które nic nie zwraca, gdy ścieżka / plik nie istnieje. Jeśli nie ma bazowego / mount / path / to_file (na readlink), bazowe montowanie jest zepsute (ponownie zamontuj bazowe montowanie i powiązanie). Jeśli podstawowy plik istnieje ireadlink -f
mówi, że nie ma tam wersji powiązania tego pliku, powiązanie jest zepsute, po prostu podłącz ponownie powiązanie./mnt/md0xxx
tak zwany montaż , polecenie wskaże/mnt/md0
jako zamontowane, podczas gdy to, czego nie musi być ...Nie zadałeś sobie trudu, aby wspomnieć o O / S.
Ubuntu Linux 11.10 (i prawdopodobnie większość aktualnych wersji Linuksa) ma
mountpoint
polecenie.Oto przykład na jednym z moich serwerów:
Właściwie w twoim przypadku powinieneś móc skorzystać z tej
-q
opcji:mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar
Mam nadzieję, że to pomoże.
źródło
Podręcznik
mountpoint
mówi, że to:Podręcznik
mount
mówi, że:Tak więc prawidłowe polecenie to
findmnt
, które samo jest częściąutil-linux
pakietu i zgodnie z instrukcją:Więc w rzeczywistości przeszukuje więcej rzeczy niż
mountpoint
. Zapewnia również wygodną opcję:Podsumowując, aby sprawdzić, czy katalog jest zamontowany za pomocą basha, możesz użyć:
if [[ $(findmnt -M "$FOLDER") ]]; then echo "Mounted" else echo "Not mounted" fi
Przykład:
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"
źródło
Lubię odpowiedzi, które używają
/proc/mounts
, ale nie lubię robić prostego grepa. To może dać fałszywe alarmy. To, co naprawdę chcesz wiedzieć, to „czy którykolwiek z wierszy ma dokładnie ten ciąg dla pola numer 2”. Więc zadaj to pytanie. (w tym przypadku sprawdzam/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
źródło
mountpoint
lubfindmnt
istnieją. Bardzo prosta odpowiedź, dużo radości, taki UNIX :)Moje rozwiązanie:
is_mount() { path=$(readlink -f $1) grep -q "$path" /proc/mounts }
Przykład:
is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/
Dla odpowiedzi Marka J. Bobaka ,
mountpoint
nie działa, jeśli mount zbind
opcją w innym systemie plików.Dla odpowiedzi Christophera Neylana nie trzeba przekierowywać wyjścia grepa do / dev / null, po prostu użyj
grep -q
zamiast tego.Najważniejsze, kanonizuj ścieżkę za pomocą
readlink -f $mypath
:/path/to/dir/
koniec z ukośnikiem odwrotnym, ścieżka wejścia/proc/mounts
lubmount
wyjścia to/path/to/dir
/var/run/
jest dowiązaniem symbolicznym/run/
, więc jeśli zamontujesz bind/var/run/mypath
i sprawdzisz, czy jest zamontowany, wyświetli się jak/run/mypath
w/proc/mounts
.źródło
Inne czyste rozwiązanie jest takie:
$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted
Z pewnością wyrażenie „echo coś” można zastąpić tym, co trzeba zrobić dla każdego przypadku.
źródło
Odpowiedzi tutaj są zbyt skomplikowane, po prostu sprawdź, czy uchwyt istnieje, używając:
cat /proc/mounts | tail -n 1
Spowoduje to tylko wyprowadzenie ostatniego zamontowanego folderu, jeśli chcesz zobaczyć je wszystkie, po prostu usuń polecenie tail.
źródło
W moim .bashrc utworzyłem następujący alias:
alias disk-list="sudo fdisk -l"
źródło