GNU/Linux >> Znalost Linux >  >> Linux

Zkontrolujte, zda je adresář připojen pomocí bash

Neobtěžoval jste se zmínit O/S.

Ubuntu Linux 11.10 (a pravděpodobně nejaktuálnější verze Linuxu) má mountpoint příkaz.

Zde je příklad na jednom z mých serverů:

$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint

Ve vašem případě byste měli být schopni použít -q možnost, jako je tato:

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar

Doufám, že to pomůže.


Příručka z mountpoint říká, že:

zkontroluje, zda je daný adresář nebo soubor zmíněn v souboru /proc/self/mountinfo.

Příručka z mount říká, že:

Režim výpisu je zachován pouze pro zpětnou kompatibilitu. Pro robustnější a přizpůsobitelný výstup použijte findmnt(8), zejména ve vašich skriptech.

Takže správný příkaz k použití je findmnt , který je sám součástí util-linux balíček a podle manuálu:

je schopen vyhledávat v /etc/fstab, /etc/mtab nebo /proc/self/mountinfo

Takže ve skutečnosti prohledává více věcí než mountpoint . Poskytuje také pohodlnou možnost:

-M, --mountpoint cesta

Explicitně definujte soubor nebo adresář bodu připojení. Viz také --target.

Stručně řečeno, ke kontrole, zda je adresář připojen pomocí bash, můžete použít:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi

Příklad:

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"

Moje řešení:

is_mount() {
    path=$(readlink -f $1)
    grep -q "$path" /proc/mounts
}

Příklad:

is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/

Pro odpověď Marka J. Bobaka mountpoint nefunguje při připojení s bind možnost v jiném souborovém systému.

Pro odpověď Christophera Neylana není nutné přesměrovat výstup grepu do /dev/null, stačí použít grep -q místo toho.

Nejdůležitější je kanonizovat cestu pomocí readlink -f $mypath :

  • Pokud zaškrtnete cestu, například /path/to/dir/ končí zpětným lomítkem, cesta v /proc/mounts nebo mount výstup je /path/to/dir
  • Ve většině linuxových verzí /var/run/ je symbolický odkaz /run/ , takže pokud připojíte vazbu pro /var/run/mypath a zkontrolujte, zda je připojeno, zobrazí se jako /run/mypath v /proc/mounts .

Spuštění mount příkaz bez argumentů vám řekne aktuální připojení. Ze skriptu shellu můžete zkontrolovat bod připojení pomocí grep a příkaz if:

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

V mém příkladu příkaz if kontroluje výstupní kód grep , což označuje, zda došlo ke shodě. Protože nechci, aby se výstup zobrazoval při shodě, přesměruji ho na /dev/null .


Linux
  1. Jak zkontrolovat, zda je připojen konkrétní adresář?

  2. Bash -c s pozičními parametry?

  3. Cat soubory s adresářem?

  1. Zkontrolujte, jak dlouho trvá spuštění Bash skriptu s Time Command

  2. Jak změním adresář v Git Bash pomocí Git pro Windows?

  3. Jak zkontrolovat, zda soubor existuje v konkrétním adresáři ve skriptu bash?

  1. Spouštět Bash skripty při vstupu do adresáře?

  2. Připojte zařízení se specifickými uživatelskými právy

  3. Jaký je nejlepší způsob, jak zkontrolovat, zda je svazek připojen ve skriptu Bash?