Řešení 1:
Nepoužívejte /etc/mtab
protože to může být nekonzistentní.
Vyhněte se potrubí mount
protože to nemusí být tak složité.
Jednoduše:
if grep -qs '/mnt/foo ' /proc/mounts; then
echo "It's mounted."
else
echo "It's not mounted."
fi
(Mezera za /mnt/foo
je vyhnout se shodě např. /mnt/foo-bar
.)
Řešení 2:
if mountpoint -q /mnt/foo
then
echo "mounted"
else
echo "not mounted"
fi
nebo
mountpoint -q /mnt/foo && echo "mounted" || echo "not mounted"
Řešení 3:
findmnt -rno SOURCE,TARGET "$1"
vyhýbá se všem problémům v ostatních odpovědích. Úlohu provede čistě pomocí jediného příkazu.
Jiné přístupy mají tyto nevýhody:
grep -q
agrep -s
jsou zbytečným krokem navíc a nejsou podporovány všude./proc/\*
není všude podporováno. (mountpoint
je také založen na proc).mountinfo
je založen na /proc/..cut -f3 -d' '
kazí mezery v názvech cest- Analýza připojit bílé místo je problematické. Manuálová stránka nyní říká:
.. 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.
Funkce Bash:
#These functions return exit codes: 0 = found, 1 = not found
isMounted () { findmnt -rno SOURCE,TARGET "$1" >/dev/null;} #path or device
isDevMounted () { findmnt -rno SOURCE "$1" >/dev/null;} #device only
isPathMounted() { findmnt -rno TARGET "$1" >/dev/null;} #path only
#where: -r = --raw, -n = --noheadings, -o = --output
Příklady použití:
if isPathMounted "/mnt/foo bar"; #Spaces in path names are ok.
then echo "path is mounted"
else echo "path is not mounted"
fi
if isDevMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
#Universal:
if isMounted "/mnt/foo bar";
then echo "device is mounted"
else echo "device is not mounted"
fi
if isMounted "/dev/sdb4";
then echo "device is mounted"
else echo "device is not mounted"
fi
Řešení 4:
Skript jako tento nikdy nebude přenosný. Špinavé tajemství v unixu je, že pouze jádro ví, kde kde jsou souborové systémy, a kromě věcí jako /proc (nepřenosné) vám nikdy nedá přímou odpověď.
Obvykle používám df ke zjištění, jaký je bod připojení podadresáře a v jakém souborovém systému se nachází.
Například (vyžaduje posix shell jako ash / AT&T ksh / bash / atd.)
case $(df $mount)
in
$(df /)) echo $mount is not mounted ;;
*) echo $mount has a non-root filesystem mounted on it ;;
esac
Něco vám řekne užitečné informace.
Řešení 5:
následující je to, co používám v jednom z mých zálohovacích cron úloh rsync. zkontroluje, zda je připojen /backup, a pokusí se jej připojit, pokud není (může selhat, protože disk je v pozici vyměnitelné za běhu a nemusí být ani přítomen v systému)
POZNÁMKA:následující funguje pouze na linuxu, protože greps /proc/mounts - přenosnější verze by spouštěla 'mount | grep /backup', jako v Matthewově odpovědi..
if ! grep -q /backup /proc/mounts ; then if ! mount /backup ; then echo "failed" exit 1 fi fi echo "suceeded." # do stuff here