Сосуществование разных по своей сути файловых систем в едином дереве файлов и каталогов позволяет использовать для работы с его файлами «обычные» программы, ничего не знающие ни о местоположении, ни о свойствах самих источников информации этих файлов.
Таким же «файловым» образом можно организовать доступ к файлам внутри GZ/ZIP/…-архивов, файлам внутри ISO-образов CD/DVD-дисков, файлам зашифрованных каталогов, файлам других узлов сети, медиафайлам на медиаустройствах (плееры, смартфоны) и т. п.
Файловая абстракция в определенных случаях оказывается удобной даже для осуществления доступа к информации, организованной совершенно «нефайловым» образом — к данным таблиц и представлений внутри реляционных баз данных, к элементам и атрибутам внутри XML-файлов и пр.
Для реализации такого «файлового» доступа к произвольным источникам информации используются так называемые «внеядерные» файловые системы W: [FUSE] (Filesystem in USErspace), реализуемые не ядерными модулями файловых систем (как ext4, nfs, proc и пр.), а обычными программами, запущенными в обычных процессах и работающими вне ядра (для чего в ядре все-таки требуется один универсальный модуль fuse).
В примере из листинга ниже показано, как можно без распаковки смонтировать сжатый архив исходных текстов ядра linux-4.2.3.tar.xz и прочитать отдельный i файл fuse.txt.
Содержимое
Внеядерная файловая система «fuse.archivemount»
john@ubuntu:~$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.3.tar.xz
. . . . . . . . .
john@ubuntu:~$ file linux-4.2.3.tar.xz
linux-4.2.3.tar.xz: XZ compressed data
john@ubuntu:~$ archivemount linux-4.2.3.tar.xz ~/mnt/archive
john@ubuntu:~$ mount
. . . . . . . . .
archivemount on /home/john/mnt/archive type fuse.archivemount (rw.nosuid,…,user=john)
john@ubuntu:~$ cd ~/mnt/archive
john@ubuntu:~/mnt/archive$ ls -l
итого 0
drwxrwxr-x 0 root root 0 ноя. 3 14:52 linux-4.2.3
john@ubuntu:~/mnt/archive$ cd linux-4.2.3/Documentation/filesystems
john@ubuntu:~/mnt/archive/linux-4.2.3/Docunentatlon/filesystems$ less fuse.txt
john@ubuntu: ~/mnt/archive/linux-4.2.3/Docunentation/filesystems$ cd ~
john@ubuntu:~ $ fuse mount -u ~/mnt/archive
В примере из листинга ниже показано, как при помощи сетевого протокола SSH можно смонтировать часть дерева каталогов (домашний каталог пользователя mike) с удаленного узла mike@grex.org в каталог ~/mnt/net локального дерева каталогов.
Внеядерная файловая система «fuse.sshfs»
john@ubuntu:~$- sshfs mike@grex.org: ~/mnt/net
mike@grex.org’s password: P@s$wQrd
john@ubuntu:~$ mount
. . . . . . . . .
mike@grex.org: on /home/john/mnt/net type fuse.sshfs (rw,nosuid,…,user=john)
john@ubuntu:~$ cd ~/mnt/net
john@ubuntu:~/mnt/net$ ls -l
итого 488
-rw-rw-r— 1 156620 131077 495604 ноя. 10 20:28 OPENME.txz
-rw-r—г— 1 156620 131077 106 ноя. 10 20:31 README.gz
john@ubuntu:~/nnt/net$ zless README.gz
john@ubuntu:~/nnt/net$ cd ~
john@ubuntu:~ $ fusermount -u ~/mnt/netw
В примере из листинга ниже показано, как можно смонтировать зашифровываемый каталог /media/flash/secret USB-flash-накопителя (уже смонтированного в каталог /media/flash при помощи дисковой файловой системы vfat) в каталог ~/mnt/exposed и скопировать туда файлы, подлежащие зашифровыванию.
Теперь при утере накопителя можно не беспокоиться об информации, попавшей третьим лицам.
Внеядерная файловая система «fuse.encfs»
john@ubuntu:~ $ mount
. . . . . . . . .
/dev/sdc1 on /nedta/flash type vfat (rw)
. . . . . . . . .
john@ubuntu:~ $ encfs /media/flash/secret ~/mnt/exposed
Директория «/media/flash/secret» не существует. Создать ее? (у,n) у
Директория «/home/john/mnt/exposed» не существует. Создать ее? (у,n) у
Создание нового зашифрованого раздела.
Выберите одну из следующих букв:
введите «х» для режима эксперта,
введите «р» для режима максимальной секретности,
любой другая буква для выбора стандартного режима.
?>↵
Выбрана стандартная конфигурация.
Конфигурация завершена. Создана файловая система
с следующими свойствами:
Шифр файловой системы: «ssl/aes», версия 3:0:2
Шифр файла: «nameio/block», версия 3:0:1
Размер ключа: 192 бит
Размер блока: 1024 байт
Каждый файл содержит 8-ми байтный заголовок с уникальными IV данными.
Файловые имена зашифрованя с использованием IV цепочек.
File holes passed through to ciphertext.
Введите пароль для доступа к файловой системе.
Запомните пароль, так как в случае утери его,
будет невозможно восстановить данные. Тем не менее
этот пароль можно изменить с помощью утилиты encfsctl.
Новый пароль EncFS: $ecr6t ↵
Повторите пароль EncFS: $ecr6t ↵
john@ubuntu:~$ mount
encfs on /home/john/mnt/exposed type fuse.encfs (rw,nosuid,nodev,…, user=john)
john@ubuntu:~$ cp ~/ИзображенияIMG_20170802*.jpg ~/mnt/exposed
john@ubuntu:~$ ls -l ~/mnt/exposed/
. . . . . . . . .
-rw-r—r— 1 john john 1014408 ноя. 10 19:06 IMG_20170802_123522.jpg
. . . . . . . . .
-rw-r—r— 1 john john 1728838 ноя. 10 19:06 IMG_20170802_124215.jpg
john@ubuntu:~$ ls -l /media/flash/secret
. . . . . . . . .
-rv/-r—r— 1 john john 1014416 ноя. 10 19:06 9WgX2m6hiNNz8,ii7UIlAIPetU3qGuLbRNyww9eHTiNNl-
. . . . . . . . .
-rw-r—r— 1 john john 1728846 ноя. 10 19:06 aavAA80-WGYg5O42x2A0I5VZacpZfK-4tEzP3SCX8bk5y-
john@ubuntu:~$ file ~/mnt/exposed/IMG_20140801_123522.jpg
IMG_20140801_123522.jpg: JPEG image data, EXIF standard
john@ubuntu:~$ file /media/flash/secret/9MgX2nбhi^в4z8Лl7lSlA[PetUЗq(klU>RNyww9eOT’iNNl-9WgX2m6htN^lz8 ,117UIlAIPetU3qGuLbRNyww9eHTiNNl-: data
john@ubuntu:~$ fusermount -u /media/flash/secret
В примере из листинга ниже показано, как можно монтировать файловые системы fuse друг поверх друга в стек — смонтировать содержимое дерева каталогов FTP-сервера mirror.yandex.ru, далее смонтировать содержимое ISO-образа FreeBSD-9.з-RELEASE-ia64-disc1.iso, а затем смонтировать архив исходных текстов src.txz.
При чтении файла страницы руководства ls.1 файловые системы будут прозрачно и на лету извлекать файл из архива, архив из образа и образ с сервера без предварительных скачиваний и распаковываний.
Внеядерные файловые системы «ftise.curlftpfs», «fuse.fuseiso» и стекирование файловых систем
john@ubuntu:~$ curlftpfs ntrror.yandex.ru ~/mnt/net
john@ubuntu:~$ fuseiso ~/mnt/net/freebsd/releases/ISO-IMAGES/9.3/FreeBSD-9.3-RELEASE-ia64-disc1.iso ~/mnt/cd
john@ubuntu:~$ archivemount ~/mnt/cd/usr/freebsd-dist/src.txz ~/mnt/arctve
john@ubuntu:~$ mount
curlftpfs#ftp: //mirror. yandex. ru/ on /home/john/mnt/net type fuse (rw,… ,user=john)
fuseiso on /home/john/mnt/cd type fuse.fuseiso (rw,nosuid,nodev,user=john)
archivemount on /home/john/mnt/archive type fuse. archivemount (rw, nosuid,nodev, user=john)
john@ubuntu:~$ man ~/mnt/archve/usr/src/bin/ls/ls.1
. . . . . . . . .
LS BSD General Commands Manual
NAME
ls — list directory contents
. . . . . . . . .
john@ubuntu:~$ fusermount -u -/mnt/archive
john@ubuntu:~$ fusermount -u ~/mnt/cd
ohn@ubuntu:~$ fusermount -u ~/mnt/net