Да:
Обычно, когда вы запускаете команду, она вызывает fork
и exec
(, а также канал и т. д. ). Но когда вы добавляете exec
в начале (, например. exec ls
), он не вызывает fork
, поэтому оболочка заменяется командой. То есть команда выполняется в том же процессе, что и оболочка в (, оболочка больше не существует ).
Он применяет перенаправления, которые вступают в силу позже.
Поскольку вы используете apt
для установки, вы можете просто найти его:
apt search davfs
davfs2/stable 1.5.5-1 amd64
mount a WebDAV resource as a regular file system
Как видите, в моем случае пакет находится в репозиториях, но не устанавливается. В отличие от, например,.vim
:
apt search vim
vim/stable,now 2:8.1.0875-5 amd64 [installed]
Vi IMproved - enhanced vi editor
В качестве альтернативы (и еще немного сохранения -это также будет применяться к пакетам не из репозиториев, а также вручную установленным через.deb
-файлы )используйте dpgk
для вывода списка всех локальных и grep имени пакета
dpkg -l | grep davfs
(в моем случае пусто)
dpkg -l | grep vim
ii vim 2:8.1.0875-5 amd64 Vi IMproved - enhanced vi editor
Где ii
означает «установлено».
/proc/filesystems
показывает только файловые системы, поддерживаемые ядром. Поддержка DavFS реализована с помощью FUSE в пользовательском пространстве, поэтому она там не показана. Лучший способ проверить, вероятно, просто проверить, существует ли mount.davfs
двоичный файл (, например, используяwhich
).
/proc/filesystems
перечисляет только те файловые системы, которые в настоящее время известны ядру. Но при mount(src, dst, fstype,...)
ядро попытается динамически загрузить соответствующий модуль ядра, если он доступен и еще не загружен.
Для некоторых файловых систем, таких как nfs
или aufs
, для настройки монтирования требуется вспомогательная программа. Это будет mount.fsname
. В Debian яблочко первое, что делает команда mount
при запросе на монтирование файловой системы с -t fsname
, — это ищет mount.fsname
в /sbin
, /sbin/fs.d
и /sbin/fs
в указанном порядке.
davfs2
— это файловая система, реализованная в пользовательском пространстве. Драйвер ядра будет fuse
, а хелпер mount.davfs2
будет отвечать за запуск программы пользовательского пространства и соединение ее с fuse
.
Итак, здесь, чтобы проверить, доступен ли fsname
, вы можете сделать:
has_fs() {
[ -e "/sbin/mount.$1" ] || # helper found in /sbin
[ -e "/sbin/fs.d/mount.$1" ] || # helper found in /sbin/fs.d
[ -e "/sbin/fs/mount.$1" ] || # helper found in /sbin/fs
< /proc/filesystems FS=$1 awk '
$NF == ENVIRON["FS"] {found = 1; exit}
END {if (!found) exit 1}' || # currently available in kernel
modprobe -c | FS=fs_$1 awk '
$1 == "alias" && $2 == ENVIRON["FS"] {found = 1; exit}
END {if (!found) exit 1}' # available via a kernel module
}
Путь поиска помощника монтирования может отличаться в разных системах. Обратите внимание, что доступность помощника является убедительным признаком, но не гарантией того, что драйвер будет доступен (или что вы сможете смонтировать ФС этого типа ).