<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF92:Что за штука - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF92:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 21:12:23 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: Новая: ==Что за штука… libferris?==  : Согласно философии Unix, все в мире – файлы, верно? Но на самом ли деле все? Автор...</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF92:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0&amp;diff=5465&amp;oldid=prev</link>
			<description>&lt;p&gt;Новая: ==Что за штука… libferris?==  : Согласно философии Unix, все в мире – файлы, верно? Но на самом ли деле все? Автор...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Что за штука… libferris?==&lt;br /&gt;
&lt;br /&gt;
: Согласно философии Unix, все в мире – файлы, верно? Но на самом ли деле все? Автор ''libferris'' '''Бен Мартин''' тоже задался этим вопросом.&lt;br /&gt;
&lt;br /&gt;
* '''Почему вы назвали библиотеку ''libferris''?'''  &lt;br /&gt;
&lt;br /&gt;
И вы хотите знать, почему Бьюллер? ['''Феррис Бьюллер (Ferris Bueller) – название американской комедии, – прим. перев.'''] Нет, он тут совершенно ни при чем! Настоящая (ну, почти) причина выбора этого&lt;br /&gt;
названия – слово “ferris” звучит похоже на акроним Virtual File System (VFS), если его произносить вслух:&lt;br /&gt;
«Ви-Эф-Эс».&lt;br /&gt;
&lt;br /&gt;
* '''Э-э… а что такое виртуальная файловая  система?'''&lt;br /&gt;
&lt;br /&gt;
Идея состоит в том, чтобы работать с вещами, которые&lt;br /&gt;
обычно не рассматриваются как файловая система,&lt;br /&gt;
так, будто это она и есть. Старый добрый пример такого подхода – рассматривать FTP-сервер как локальный диск.&lt;br /&gt;
&lt;br /&gt;
* '''И что в этом хорошего?'''&lt;br /&gt;
&lt;br /&gt;
Ну, например, представьте, что вы можете&lt;br /&gt;
использовать некоторый запрос, и получить все файлы, удовлетворяющие этому запросу, сформировав&lt;br /&gt;
содержимое виртуального каталога. Вы просто говорите «Найдите мне все файлы группы R.E.M.» и получаете каталог со всеми этими файлами. Поскольку это&lt;br /&gt;
файловая система, то вы с этим каталогом можете&lt;br /&gt;
делать то же, что и с обычными файлами – копировать их в плейер, ставить в очередь воспроизведения ''Amarok'' или что там еще можно делать с набором файлов.&lt;br /&gt;
&lt;br /&gt;
* '''Но есть уже GnomeVFS и KIO от KDE, неужели миру мало виртуальных файловых систем?'''&lt;br /&gt;
&lt;br /&gt;
Главная идея ''libferris'' – файловой системой может быть&lt;br /&gt;
что угодно, надо только предусмотреть в ''libferris'' подключаемый модуль для каждой новой штуки, которую&lt;br /&gt;
вы хотите смонтировать. Такие модули уже существуют для реляционных баз данных, XML-файлов, почтовых ящиков, приложений и даже для расположения файловых систем поверх самих себя. Даже один&lt;br /&gt;
файл, вроде RPM, может стать файловой системой.&lt;br /&gt;
Извлечение и сохранение метаданных тоже входит в&lt;br /&gt;
задачи проекта.&lt;br /&gt;
&lt;br /&gt;
* '''Погодите минутку: а как приложение может быть файловой системой?'''&lt;br /&gt;
&lt;br /&gt;
Многие приложения ориентированы на данные.&lt;br /&gt;
Например, в ''Firefox'' есть список окон и вкладок, и каждая содержит документ с иерархической структурой.&lt;br /&gt;
Проигрыватель видео и музыки, например, ''XMMS'' или ''Amarok'', содержит список файлов и текущую позицию&lt;br /&gt;
воспроизведения в этом списке. Если вы смонтируете ''XMMS'' как файловую систему, то сможете копировать&lt;br /&gt;
файлы из вашего списка воспроизведения на мобильный плейер с помощью обычной утилиты ''cp''. Если вы&lt;br /&gt;
смонтируете ''Firefox'', то сможете скопировать на диск&lt;br /&gt;
виртуальный файл, соответствующий третьему параграфу просматриваемой web-страницы.&lt;br /&gt;
&lt;br /&gt;
Точно так же, как вы управляете ядром Linux через&lt;br /&gt;
файловую систему '''/proc''', вы сможете через некоторые&lt;br /&gt;
файлы управлять поведением приложения. Например,&lt;br /&gt;
записав единицу в файл '''amarok://control/play''', вы даете команду начать проигрывание. А чтение и запись&lt;br /&gt;
файла '''amarok://control/volume''' позволит вам контролировать громкость.&lt;br /&gt;
&lt;br /&gt;
* '''Чуть раньше вы упоминали «извлечение и сохранение метаданных». Зачем это нужно в ''libferris''?'''&lt;br /&gt;
&lt;br /&gt;
Когда вы упоминаете о метаданных для файловой системы, большинство думает про такие вещи, как размер&lt;br /&gt;
файла, время модификации и имя владельца. Но в&lt;br /&gt;
''libferris'' метаданные могут включать любую информацию о файле. Например, для аудио-записей метаданными могут быть имя артиста и название композиции,&lt;br /&gt;
извлеченные из ID3-тэгов. Поскольку все метаданные&lt;br /&gt;
доступны через один и тот же интерфейс, вы может&lt;br /&gt;
легко отсортировать каталог по ID3-номеру дорожки&lt;br /&gt;
точно так же, как и по имени.&lt;br /&gt;
&lt;br /&gt;
* '''Понятно... А как насчет сохранения?'''&lt;br /&gt;
&lt;br /&gt;
Метаданные могут храниться или с использованием механизма расширенных атрибутов на уровне ядра (Extended Attributes, EA), или в персональном хранилище в формате '''RDF'''. '''RDF''' – это набор стандартов W3C, позволяющий программистам указывать&lt;br /&gt;
метаданные, которые могут быть использованы различными приложениями. Обычно так хранят ссылки&lt;br /&gt;
на дополнительную информацию – например, на web-страницы или локальные файлы. Использование '''RDF'''&lt;br /&gt;
для хранения метаданных позволяет добавлять заметки к FLAC-файлу, к NFS-тому, доступному только для&lt;br /&gt;
чтения, к строке в базе данных или к web-странице.&lt;br /&gt;
Использование метаданных возможно где угодно, так&lt;br /&gt;
что вы всегда найдете файлы на их основе.&lt;br /&gt;
&lt;br /&gt;
* '''Идея в общем хорошая, но команда ''find'' на 500 ГБ диске работает довольно медленно.'''&lt;br /&gt;
&lt;br /&gt;
В последние годы (а проект стартовал в 2001 г.) в&lt;br /&gt;
''libferris'' были добавлены возможности индексирования и поиска. Индексирование вынесено в отдельные&lt;br /&gt;
модули, так что у вас есть возможность выбирать, с&lt;br /&gt;
помощью чего создавать и хранить индекс. Есть модули для ''PostgreSQL, Lucene, Xapian, Beagle'' и других&lt;br /&gt;
библиотек. Индексирование – достаточно заковыристая задача: и на скорость поиска по вашему индексу, и&lt;br /&gt;
на объем используемой при этом памяти влияет способ обновления индекса. Наличие нескольких подключаемых модулей позволяет выбрать вариант, который&lt;br /&gt;
вам подходит лучше всего.&lt;br /&gt;
&lt;br /&gt;
Кстати, это значит, что вместо стандартной утилиты ''find(1)'' лучше использовать ''ferris-find(1)''. У нее тот&lt;br /&gt;
же самый интерфейс, но она гораздо быстрее, так как использует индекс файловой системы.&lt;br /&gt;
&lt;br /&gt;
* '''Ага, значит “ferris-find(1)”? Это значит, что файловая система ''libferris'' должна обслуживаться специальными утилитами?'''&lt;br /&gt;
&lt;br /&gt;
Не обязательно. Вы можете подключать файловые&lt;br /&gt;
системы ''libferris'' к ядру Linux с помощью ''Fuse''.&lt;br /&gt;
&lt;br /&gt;
* '''Супер! Кстати, а что такое ''Fuse''?'''&lt;br /&gt;
&lt;br /&gt;
С помощью ''Fuse'' (Filesystem in UserSpace) вы&lt;br /&gt;
можете заставить ядро Linux перенаправлять системные вызовы к приложению, запущенному пользователем, вместо того чтобы обрабатывать их на месте.&lt;br /&gt;
Это позволяет разработчикам писать файловые системы, независимые от ядра, поскольку они работают&lt;br /&gt;
не внутри него, а в виде отдельных процессов. Если&lt;br /&gt;
я использую команду cat, чтобы посмотреть содержимое файла в файловой системе ''Fuse'', ''cat'' попросит&lt;br /&gt;
ядро Linux передать ему файловые данные, ядро же в&lt;br /&gt;
свою очередь запросит процесс пользователя и вернет&lt;br /&gt;
полученные от него результаты команде. Такая схема&lt;br /&gt;
работы позволяет cat считать, что она работает с обычной ядерной файловой системой.&lt;br /&gt;
&lt;br /&gt;
* '''А при чем тут ''libferris''?'''&lt;br /&gt;
&lt;br /&gt;
У ''libferris'' есть команда ''ferrisfs'', использующая ''Fuse'' для доступа через ядро Linux ко всему, что&lt;br /&gt;
является файловой системой ''libferris''. Это дает возможность программам, которые ничего не знают про&lt;br /&gt;
''libferris'', читать и писать данные в файловой системе&lt;br /&gt;
''libferris'' обычным способом.&lt;br /&gt;
&lt;br /&gt;
Большая часть дистрибутивов Linux уже включает&lt;br /&gt;
пакеты с ''Fuse'' и его утилиты.&lt;br /&gt;
&lt;br /&gt;
Кроме того, существуют варианты реализации традиционных утилит командной строки, таких как ''ls, cp, mv, rm'' и ''cat'', которые используют ''libferris'' без помощи ''Fuse'', напрямую.&lt;br /&gt;
&lt;br /&gt;
* '''Зачем же возиться с переписыванием ''ls, cp'' и остальных, если ''libferris'' можно использовать&lt;br /&gt;
через ''Fuse''?'''&lt;br /&gt;
&lt;br /&gt;
Ну, во-первых ''libferris'' была создана до того, как появился ''Fuse''. А во-вторых, вы можете добавить парутройку очень удобных фильтров и опций сортировки&lt;br /&gt;
при использовании утилит, разработанных с учетом ''libferris''. Например, вы может использовать&lt;br /&gt;
ввод-вывод с отображением файла в память,&lt;br /&gt;
чтобы скопировать файл. Это может быть&lt;br /&gt;
полезно, так как ''libferris'' сообщит ядру,&lt;br /&gt;
что вы будете читать и писать последовательно, и ядро сможет подстроить&lt;br /&gt;
стратегию кэширования. Таким образом, в вашем дисковом кэше останется&lt;br /&gt;
гораздо меньше ненужной информации,&lt;br /&gt;
чем при использовании других утилит&lt;br /&gt;
копирования.&lt;br /&gt;
&lt;br /&gt;
Работать с метаданными тоже гораздо удобнее при помощи новых клиентов.&lt;br /&gt;
Вы можете указать, какие из них вы предпочитаете видеть при просмотре каталога&lt;br /&gt;
в ''ferrisls'', дополнительно указав отфильтровать или отсортировать результаты на&lt;br /&gt;
основе метаданных.&lt;br /&gt;
&lt;br /&gt;
* '''Есть ли еще что-нибудь интересное для меня, о Создатель?'''&lt;br /&gt;
&lt;br /&gt;
Если бы мне пришлось выбирать любимую возможность ''libferris'', я бы указал на&lt;br /&gt;
оповещения об изменении виртуальных&lt;br /&gt;
файлов внутри XML-документа или базы&lt;br /&gt;
данных Berkeley DB4. Одним из процессов&lt;br /&gt;
вы можете смонтировать XML-файл и затем&lt;br /&gt;
получать оповещения об изменениях, выполняемых другим процессом. Это делает поведение DB4-файла очень похожим на поведение&lt;br /&gt;
настоящей файловой системы.&lt;br /&gt;
&lt;br /&gt;
Второе место получило бы сохранение истории&lt;br /&gt;
обращения к метаданным. Потом вы можете выполнять к этой истории запросы типа «Какие последние&lt;br /&gt;
50 фильмов я смотрел?» или «Какие DVD я смотрел на&lt;br /&gt;
неделе после возвращения с Linux Kongress?»...&lt;br /&gt;
&lt;br /&gt;
* '''Какие еще безумные планы есть для ''libferris''?'''&lt;br /&gt;
&lt;br /&gt;
Подключение новых штук у нас всегда в поле&lt;br /&gt;
зрения. Мы также планируем интегрироваться с большим числом XML-утилит и стандартов: например,&lt;br /&gt;
пользователи смогут выполнять запросы ''XQueries'' на&lt;br /&gt;
файловой системе ''libferris'' или на ее индексе.&lt;br /&gt;
&lt;br /&gt;
* '''Ну вы и голова. Где я могу получить подробную информацию и скачать программу?'''&lt;br /&gt;
&lt;br /&gt;
Спасибо, я знаю. Домашняя страница нашего проекта: http://witme.sf.net/libferris.web. Новые версии обычно&lt;br /&gt;
выходят каждые один-два месяца, и анонсируются на http://freshmeat.net. '''LXF'''&lt;/div&gt;</description>
			<pubDate>Thu, 20 Nov 2008 07:35:01 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF92:%D0%A7%D1%82%D0%BE_%D0%B7%D0%B0_%D1%88%D1%82%D1%83%D0%BA%D0%B0</comments>		</item>
	</channel>
</rss>