headermask image
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

LPI 101: Устройства, файловые системы Linux и стандарт FHS. Поиск и расположение системных файлов

Стандарт Filesystem Hierarchycal Standard

Стандарт Filesystem Hierarchycal Standard – это документ, который определяет структуру каталогов в Linux и других UNIX-подобных системах. Он был создан для формирования общей структуры, которая помогает упростить разработку программного обеспечения, независимого от дистрибутивов, путем расположения файлов на всех дистрибутивах Linux в одни и те же общие каталоги. Этот документ также используется в базе стандартов Linux (см. “Ресурсы”).

Две независимые категории стандарта FHS

В основе стандарта Filesystem Hierarchycal Standard лежат две характеристики файлов:

Файлы общего или локального использования
Файлы общего использования могут быть расположены на одной системе и использоваться на другой, а файлы локального использования должны храниться на той системе, где они используются.

Переменные или статические
В число статических файлов входит документация, библиотеки и двоичные файлы, которые не изменяются без вмешательства системного администратора. Все остальные файлы являются переменными.

Такое разделение позволяет хранить файлы с разными характеристиками в различных файловых системах. В таблице 6 приведен пример из документа cтандарта Filesystem Hierarchycal Standard, где показана структура, соответствующая этому стандарту.

Общего использования Локального использования
Статический /usr
/opt
/etc
/boot
Переменный /var/mail
/var/spool/news
/var/run
/var/lock

Корневая файловая система

Целью стандарта Filesystem Hierarchycal Standard является максимально возможное сокращение корневой файловой системы. В ней должны содержаться все файлы, необходимые для загрузки, восстановления или исправления системы, в том числе утилиты, которые могут понадобиться опытным администраторам для выполнения их задач. Следует отметить, что для загрузки системы необходимо, чтобы в корневой файловой системе находились все средства, необходимые для монтирования других файловых систем.

Каталоги корневой файловой системы

В таблице 7 показано назначение каталогов, наличие которых в корневой файловой системе (/) обуславливает стандарт Filesystem Hierarchycal Standard. В ней должны присутствовать перечисленные каталоги или символические ссылки на них, за исключением отмеченных как необязательные, которые необходимы только в случаях, когда имеется соответствующая подсистема.

Каталог Назначение
bin Двоичные коды необходимых команд
boot Статические файлы загрузчика
dev Файлы устройств
etc Конфигурация системы для этого узла
lib Необходимые модули ядра и библиотеки общего пользования
media Точка монтирования для съемных носителей
mnt Точка временного монтирования файловых систем
opt Дополнительные пакеты программных приложений
sbin Двоичные коды необходимых системных файлов
srv Данные служб, предоставляемых этой системой
tmp Временные файлы
usr Дополнительная иерархия
var Переменные данные
home Домашние каталоги пользователей (необязательно)
lib<qual> Важные библиотеки общего пользования в альтернативном формате (необязательно)
root Домашний каталог пользователя root (необязательно)

/usr и /var

Иерархии /usr и /var достаточно сложны, для их описания выделены целые разделы стандарта Filesystem Hierarchycal Standard. Файловая система /usr является вторым важным разделом файловой системы, в котором содержатся данные только для чтения, находящиеся в общем доступе. Они могут использоваться различными системами, однако в современной практике это делается нечасто. В файловой системе /var содержатся переменные файлы данных, в том числе каталоги и файлы подкачки, данные администрирования и журналов, а также промежуточные и временные файлы. Некоторая часть /var не может использоваться другими системами, однако другие части, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news, могут находиться в общем доступе.

Для того чтобы полностью понять стандарт Filesystem Hierarchycal Standard, ознакомьтесь его описанием.

Где искать файл?

В системах Linux зачастую содержатся сотни тысяч файлов. Только что установленная система Ubuntu, которую мы используем в этом руководстве, насчитывает около 50000 файлов только в иерархии /usr. В системе Fedora, с которой я работал одно время, насчитывается около 175000 файлов. В оставшейся части этого раздела мы рассмотрим инструменты, которые помогут вам найти файлы (в частности, программы) в этом необозримом море данных.

Ваш PATH

Если вы работали с несколькими системами Linux, вы могли отметить, что если вы входите как пользователь root, вы можете запускать такие команды, как fdisk, которые недоступны вам, если вы обычный пользователь. Когда вы запускаете программу в командной строке, командный процессор bash (или любой другой) производит поиск запрошенной вами программы по списку каталогов. Список каталогов указывается в переменной среды PATH, и нет ничего необычного во включении каталога /sbin в путь пользователя root, в то время как для остальных пользователей этого каталога в пути нет. В листинге 64 показаны два различных примера путей пользователя, а также пример пути для пользователя root.

Листинг 64. Несколько примеров PATH

ian@pinguino:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
[ian@attic4 ~]$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/ian/bin
[ian@attic4 ~]$ su -
Password:
[root@attic4 ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:
/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

Как вы можете видеть, переменная PATH представляет собой просто список наименований каталогов, разделенных двоеточиями. Поскольку команда fdisk фактически расположена по пути /sbin/fdisk, только первый и последний примеры путей позволят пользователю запускать эту команду, просто вводя fdisk, без указания полного имени (/sbin/fdisk).

Как правило, путь устанавливается в файле инициализации, например, в .bash_profile или .bashrc. Вы можете изменить его для текущей сессии путем указания нового пути. Для того чтобы новое значение было доступно другим процессам, которые вы запускаете, нужно не забывать экспортировать переменную PATH. Пример приведен в листинге 65.

Листинг 65. Изменение переменной PATH

[ian@attic4 ~]$ fdisk
-bash: fdisk: command not found
[ian@attic4 ~]$ export PATH=/sbin:$PATH
[ian@attic4 ~]$ fdisk
Usage: fdisk [-l] [-b SSZ] [-u] device
E.g.: fdisk /dev/hda (for the first IDE disk)
or: fdisk /dev/sdc (for the third SCSI disk)
or: fdisk /dev/eda (for the first PS/2 ESDI drive)
or: fdisk /dev/rd/c0d0 or: fdisk /dev/ida/c0d0 (for RAID devices)
...

which, type, и whereis

В предыдущем примере мы узнали, что команда fdisk недоступна, только когда попытались её запустить. Существует несколько команд, которые помогут вам сделать это.

which

Вы можете использовать команду which для поиска по вашему пути программы, которая будет запускаться (если будет) при вводе команды. В листинге 66 показан пример поиска команды fdisk.

Листинг 66. Использование команды which

[ian@attic4 ~]$ which fdisk
/usr/bin/which: no fdisk in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:
/usr/X11R6/bin:/home/ian/bin)
[ian@attic4 ~]$ export PATH=/sbin:$PATH
[ian@attic4 ~]$ which fdisk
/sbin/fdisk

Команда which показывает вам первую найденную команду в вашем пути. Если вы хотите узнать, нет ли нескольких соответствий, вы можете добавить параметр -a, как показано в листинге 67.

Листинг 67. Использование команды which для поиска нескольких файлов

[root@attic4 ~]# which awk
/bin/awk
[root@attic4 ~]# which -a awk
/bin/awk
/usr/bin/awk

Здесь мы нашли команду awk в каталоге /bin (который содержит команды, которые могут быть использованы и пользователями, и системным администратором, но не обязательные при отсутствии других смонтированных файловых систем), а также в каталоге /sbin (в котором содержатся исполняемые файлы, необходимые для загрузки, восстановления и исправления системы).

type

Существует ряд команд, которые не сможет найти команда which. К их числу, например, относятся встроенные команды командной оболочки. Встроенная команда type сообщит вам, как поданная вами команда будет оцениваться при выполнении. В листинге 68 показан пример использования команды type для самой себя.

Листинг 68. Использование команды type

[root@attic4 ~]# which type
/usr/bin/which: no type in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:
/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)
[root@attic4 ~]# type type
type is a shell builtin

whereis

Если вам нужна более подробная информация, а не просто место расположения программы, можно использовать команду whereis. Например, можно искать документацию man и иную информацию, как показано в листинге 69.

Листинг 69. Использование команды whereis

[root@attic4 ~]# whereis awk
awk: /bin/awk /usr/bin/awk /usr/libexec/awk /usr/share/awk
/usr/share/man/man1p/awk.1p.gz /usr/share/man/man1/awk.1.gz

Заметьте, что копия awk, расположенная в каталоге /sbin, не была найдена командой whereis. Число каталогов, используемых whereis, зафиксировано, поэтому команда не всегда может найти то, что вы ищете. Кроме того, команда whereis позволяет выполнять поиск исходных файлов, указывать альтернативные пути поиска, а также искать необычные элементы. Чтобы узнать, как изменить такое поведение или изменить фиксированные пути, используемые whereis, обратитесь к документации man.

find

Из руководства к теме 103 “Подготовка к экзамену LPI 101: команды GNU и UNIX” вы узнали, как искать файлы по имени (в том числе – с использованием подстановочных знаков), пути, размеру и дате создания. В предыдущем разделе, посвященном жестким и символическим ссылкам, вы узнали, как найти ссылки на определенный файл или узел inode.

Команда find – своего рода «швейцарский армейский нож» среди инструментов поиска файлов в системах Linux. У нее есть еще две возможности, которые могут быть вам полезны – это поиск файлов по имени пользователя и группы, а также поиск файлов по полномочиям.

В листинге 70 показан листинг каталога для рабочей группы ~greg/xml101, которую мы уже рассматривали ранее, а также пример того, как можно найти все файлы, владельцем которых является пользователь ian, и все файлы, не принадлежащие группе xml-101. Заметьте, что в команде find восклицательный знак ! инвертирует критерий поиска.

Листинг 70. Поиск файлов по пользователю и группе

ian@pinguino:~$ ls -l ~greg/xml101/*
-rw-r--r-- 1 greg xml-101 0 2005-12-27 07:38 /home/greg/xml101/file1.c
-rw-r----- 1 greg xml-101 0 2005-12-27 07:39 /home/greg/xml101/file2.c
-rw-r--r-- 1 tom xml-101 0 2005-12-27 07:41 /home/greg/xml101/file3.c
-rw-r--r-- 1 ian ian 0 2005-12-27 07:40 /home/greg/xml101/file4.c
-rw-r--r-- 1 tom xml-101 0 2005-12-27 07:41 /home/greg/xml101/file5.c
-rw-r--r-- 1 ian xml-101 0 2005-12-27 07:40 /home/greg/xml101/file6.c
-rw-r--r-- 1 tom xml-101 0 2005-12-27 07:43 /home/greg/xml101/file7.c
-rwxr-xr-x 1 tom xml-101 0 2005-12-27 07:42 /home/greg/xml101/myprogram
ian@pinguino:~$ find ~greg/xml101 -user ian
/home/greg/xml101/file4.c
/home/greg/xml101/file6.c
ian@pinguino:~$ find ~greg/xml101 ! -group xml-101
/home/greg/xml101/file4.c

Чтобы найти файлы по полномочиям, можно использовать критерий -perm вместе с символическим выражением, подобным используемому в командах chmod и umask. Вы можете выполнять поиск по точным полномочиям, однако чаще более полезным является использование в выражении полномочия префикса в виде дефиса, что означает указание искать файлы с установленными данными полномочиями, не обращая внимания на остальные полномочия. В листинге 71 показано с использованием файлов из листинга 70, как найти исполняемые файлы, и приведены два различных способа поиска файлов, которые не могут прочитать другие пользователи.

Листинг 71. Поиск файлов по полномочиям

ian@pinguino:~$ find ~greg/xml101 -perm -ug=x
/home/greg/xml101
/home/greg/xml101/myprogram
ian@pinguino:~$ find ~greg/xml101 ! -perm -o=r
/home/greg/xml101/file2.c
ian@pinguino:~$ find ~greg/xml101 ! -perm -0004
/home/greg/xml101/file2.c

Мы рассмотрели несколько основных видов поиска, которые можно выполнить с помощью команды find. Чтобы сузить результаты поиска, вы можете сочетать несколько расширений, а также добавлять регулярные выражения. Чтобы узнать больше об этой разносторонней команде, используйте документацию man, или лучше, если у вас установлена система info, введите команду info find.

В листинге 72 показан пример поиска с помощью команды find. В этом примере выполняется переход в каталог /usr/include, чтобы сохранить длину листинга в разумных пределах, после чего выполняется поиск всех файлов, содержащих в наименовании пути буквы xt с учетом регистра. Во втором примере вывод ограничивается ещё больше, до файлов, которые не являются каталогами и минимальный размер которых составляет 2 килобайта. Информация, которая будет выведена на вашей системе, может отличаться от этой в зависимости от того, какие пакеты у вас установлены.

Листинг 72. Заключительный пример использования команды find

ian@pinguino:/usr/include$ find . -iregex ".*xt.*"
./X11/xterm
./X11/xterm/ptyx.h
./irssi/src/fe-common/core/printtext.h
./irssi/src/fe-common/core/hilight-text.h
ian@pinguino:/usr/include$ find . -iregex ".*xt.*" ! -type d -size +2k
./X11/xterm/ptyx.h
./irssi/src/fe-common/core/printtext.h

Следует помнить, что регулярные выражения должны соответствовать полному пути, возвращаемому командой find, а также не забывать о разнице между регулярными выражениями и подстановочными символами.

locate и updatedb

Команда find выполняет поиск по всем каталогам, которые вы укажете, при каждом запуске. Для ускорения процесса вы можете использовать другую команду, locate, которая использует базу данных сохраненной информации о путях, а не выполняет всякий раз поиск по файловой системе.

locate и slocate

Команда locate выполняет поиск файлов по базе данных, которая обычно обновляется ежедневно с помощью задания cron. В современных системах Linux эта команда обычно замещается командой slocate, которая хранит полномочия вместе с путями, таким образом, не давая пользователям просматривать каталоги, права на просмотр которых у них нет. В этих системах вы можете увидеть, что locate является символической ссылкой на slocate, поэтому вы можете использовать любую команду.

Команда locate выполняет поиск по любой части пути, а не только по имени файла. В листинге 73 показано, что locate является символической ссылкой на locate, после чего приведен пример поиска пути, содержащего строку bin/ls.

Листинг 73. Использование команды locate

[ian@attic4 ~]$ ls -l $(which locate)
lrwxrwxrwx 1 root slocate 7 Aug 24 23:04 /usr/bin/locate -> slocate
[ian@attic4 ~]$ locate bin/ls
/bin/ls
/usr/bin/lsb_release
/usr/bin/lskatproc
/usr/bin/lspgpot
/usr/bin/lsattr
/usr/bin/lskat
/usr/bin/lshal
/usr/bin/lsdiff
/usr/sbin/lsof
/sbin/lsmod
/sbin/lsusb
/sbin/lspci


updatedb

База данных, используемая командой slocate, хранится в файловой системе /var, в файле /var/lib/slocate/slocate.db. Если вы увидите вывод, похожий на листинг 74 – значит, это задание в вашей системе не выполняется.

Листинг 74. Отсутствие базы данных slocate

[ian@attic4 ~]$ locate bin/ls
warning: locate: could not open database: /var/lib/slocate/slocate.db: No such file or
directory
warning: You need to run the 'updatedb' command (as root) to create the database.
Please edit /etc/updatedb.conf to enable the daily cron job.

База данных создается и обновляется с помощью команды updatedb. Обычно она выполняется ежедневно как задание cron. Файлом конфигурации updatedb является /etc/updatedb.conf. Для того чтобы включить ежедневное обновление, пользователь root должен изменить файл /etc/updatedb.conf и установить параметр DAILY_UPDATE=yes. Чтобы создать базу данных, запустите команду updatedb под пользователем root.

Источник: ibm developerworks

Похожие посты
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Установка владельца и группы файла
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Жесткие и символические ссылки
  • Описание более 350 команд Linux c примерами.
  • Дизайн блога расползается в IE
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Монтирование и размонтирование файловых систем
  • Mac4Lin: как Linux превратить в Mac
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Дисковые квоты
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Целостность файловых систем
  • Скрипт, закрывающий Outlook перед началом резервного копирования PST файлов
  • LPI 101. Аппаратные средства и архитектура. Коммуникационные устройства