Как узнать (в sh), смонтирован ли каталог через NFS

df -t nfs $каталог

возвращает две строки вывода, если каталог подключен к NFS, и одну строку, если это не так.

Некоторые версии df дают статус выхода 1, если он не был смонтирован через NFS, но GNU coreutils 5.3.0 этого не делает...

if [ `df -t nfs . | wc -l` = 2 ]; 

кажется неэлегантным, и коллеги говорят, что он недостаточно проверяет ошибки. Есть лучший способ сделать это?


person Tom Womack    schedule 28.01.2011    source источник
comment
Я пробовал несколько вариантов, но ваш все равно кажется мне более элегантным. Упомянули ли вы, коллеги, об ошибках, которые ускользнули бы от этого метода? +1 за хорошую попытку.   -  person Shawn Chin    schedule 28.01.2011
comment
Хорошо, я нашел одну проблему. Если первый выходной столбец слишком длинный (например, nfs_server:/long/mount/point), то df разделит вывод на две строки, и вы получите wc -l = 3. Легко решить, изменив решение на if [ .... -gt 1 ].   -  person Shawn Chin    schedule 28.01.2011
comment
@ShawnChin: если вы примените параметр --portability / -P, он не будет переносить длинные строки. Идеально подходит для машинной обработки. (Проверено с df (GNU coreutils) 7.4)   -  person RobM    schedule 23.05.2011


Ответы (2)


Повторяющийся вопрос Как сделать Я определяю, является ли каталог точкой монтирования NFS в сценарии оболочки. Короткий ответ, используйте команду stat.

person Noufal Ibrahim    schedule 28.01.2011
comment
+1 Хорошо подмечено. Из связанного ответа эквивалентным решением будет if [ $(stat -f -L -c %T .) == "nfs" ]. - person Shawn Chin; 28.01.2011

Вы всегда можете проверить mtab, он ведет запись всех смонтированных файловых систем в плоском файле, если вы используете strace и посмотрите, что все равно делает df. Я полагаю, вы также можете использовать /proc/mounts, если вы используете это в Linux.

person gymnodemi    schedule 28.01.2011
comment
Использование to /etc/mtab потребует гораздо большего анализа/обработки. Также произойдет сбой, если целевой каталог содержит символическую ссылку на точку монтирования. - person Shawn Chin; 28.01.2011