Каков наилучший способ (надежный, переносимый и т. Д.), Чтобы проверить, находится ли данная папка в смонтированной удаленной (nfs) файловой системе внутри сценария оболочки?
Я ищу команду, которая выглядела бы так:
chk-remote-mountpoint /my/path/to/folder
/etc/mtab
или результатыmount
вместо использованияdf
могут сделать в некоторых других случаях./proc/mounts
mount
, ни/etc/mtab
, ни даже не/proc/mounts
являются стандартными, поэтому нет никакой гарантии, что там можно найти ...-T
имеют другое значениеВы могли бы использовать GNU
stat
.%m
выяснить точку монтирования.%T
(в режиме файловой системы), чтобы узнать имя файловой системы.Таким образом, вы знаете, что
/usr/src/linux
в моей системе хранится в файловой системе, которая смонтирована/usr/src
и имеет тип файловой системыreiserfs
.Также обратитесь к
man stat
для дальнейшей ссылки. Это очень универсальная команда, полезная почти всегда, когда вам нужна информация о файлах и вы не хотите возвращаться кgrep | awk
безопасности.источник
stat
не имеет%m
опции для--format
(используя Debian Squeeze, coreutils 8.5). Итак, я думаю, это решение не очень надежно.2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file
. Это почти 3 года назад. Удивительно, что Debian до сих пор не имеет этого.mount -l
и используйтеgrep
,sed
или,awk
чтобы найти строку, которая относится к рассматриваемому каталогу.источник
/my/path/to/the/directory
это действительно что-то из точки монтирования/my/path
с вашим ответом. Может быть , вы можете дать некоторые дополнительные детали оgrep
,sed
,awk
команду вы предлагаете (полный ответ) ?.mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'
должен дать вам список всех точек монтирования nfs в системе.mount | fgrep "`stat --printf=" on %m type" /var/log/`". The
командой stat: mount`, которая напечатает все точки монтирования в<device> on <mountpoint> type <type>
формате. Чтобы понять это, я долженstat --printf
создатьon <mountpoint> type
часть.К сожалению, нет универсального ответа Unix на это.
Единственное, что вы можете сделать для данного файла,
/a/b/c/d
это пройти путь:... и делать
stat(2)
на каждом уровне, доst_dev
изменений. Тогда вы будете знать, где находится точка монтирования. Затем вы можете найти канонический путь этой точки монтирования в/etc/mtab
или в выходных данных,mount
чтобы узнать тип файловой системы. Тогда выяснить, что удаленно, а что нет, будет непросто, особенно для предохранителей. Так , например,nfs
,cifs
,fuse.sshfs
,fuse.davfs
очевидны, но как, например ,fuse.gvfs-fuse-daemon
илиfuse.avfsd
которые могут иметь как сетевые и несетевые файлы?источник
stat(2)
, я думаю, что вы ссылаетесь на функцию C, но я использую shell. Тем не менее,st_dev
относится к старшему и второстепенному идентификатору устройства (это специфично для Linux?), А команда оболочкиstat(1)
имеет (нестандартный)%t
и%T
с--format
параметрами для соответственно старшего и младшего номеров, но всегда возвращает «0» (local и nfs) ). Я примерял Debian Squeeze и Lenny.--file-system
опции?--file-system
.От -l к df (1) завершится с ошибкой в нелокальных файловых системах, поэтому вы можете использовать это поведение, чтобы узнать, удалена ли файловая система:
Однако этот
-l
вариант не является стандартным .источник
df
бы не получиться, и это само по себе делает это не очень хорошим ответом, но он пытается ответить на вопрос, поэтому я не понимаю, почему вы бы назвали это «не ответом».df /path
скажет вам, что/path
это точка монтирования, если он говорит, что точка монтирования не является/
.источник
Просто сделать
Если первое поле (файловая система) находится в формате host: / path, то вы знаете, что это NFS
источник
Вы можете использовать
df -t
на Linux иdf -T
на системах BSD.От человека Д.Ф . :
источник
-t
опция имеет другое значение в POSIX / SUS. Таким образом, использование этой опции может привести к противоречивым результатам в разных версиях инструмента / UNIX.Я бы лично использовал
mountpoint
(очень переносимый в Linux!):или
showmount
который в значительной степени требуется для установки в любой системе, которая фактически монтируетNFS
общие ресурсы (частьnfs-common
пакета):Другим вариантом будет что-то вроде:
источник
mountpoint
Утилита не скажет вам , если точка монтирования является маловероятной. Более того, удаленные файловые системы не ограничиваются файловыми системами NFS. Наконец,mountpoint
не является стандартным (нет в этом списке ).mountpoint
является стандартным в этом случае.проверит все папки с именем 'nfs', если они смонтированы
источник
nfs
.