FHS и поиск файлов в системе [104.7]

Рейтинг: 45.3% · 9 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

FHS и поиск файлов в системе [104.7]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5]
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7] (вы здесь)
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 23. FHS и поиск файлов в системе [104.7]

Когда вы заходите на незнакомый сервер, первый вопрос обычно один: где что лежит. Конфиг сервиса, лог, бинарник, временный файл сборки. Стандарт FHS (Filesystem Hierarchy Standard) дает на это ответ заранее: он описывает, какой каталог за что отвечает, чтобы администратор и пакеты не гадали. В этом уроке разберем назначение ключевых каталогов корня и четыре инструмента поиска - find, locate, whereis, which/type, - а заодно почему locate в 2026 это почти всегда plocate.

Изображение

Как это работает

FHS делит файлы по двум осям. Первая ось - изменяемость: статичные данные (бинарники, библиотеки) отделены от переменных (логи, очереди, базы). Вторая ось - разделяемость: то, что можно смонтировать по сети и отдать многим машинам, отделено от локального. Отсюда и логика: /usr - статичный и разделяемый, /var - переменный, /etc - локальная конфигурация конкретного хоста.

Корень / должен содержать минимум, достаточный для загрузки и аварийного ремонта. Исторически /bin, /sbin, /lib были отдельно от /usr именно ради этого. В современных дистрибутивах (Debian, Ubuntu, Fedora, RHEL) действует usr-merge: /bin, /sbin, /lib - это просто символические ссылки на /usr/bin, /usr/sbin, /usr/lib. Различие "обычные утилиты против /sbin для администратора" сегодня скорее историческое, но в PATH root оно еще встречается.

Отдельная категория - виртуальные файловые системы. /proc - это интерфейс к ядру и процессам: каталог /proc/PID на каждый процесс, /proc/cpuinfo, /proc/meminfo. /sys (sysfs) описывает устройства и драйверы. /dev - файлы устройств, которые на лету создает devtmpfs и наполняет udev. Этих файлов нет на диске, они существуют только в памяти, поэтому искать по ним find бессмысленно и вредно.

Поиск делится на два подхода. find обходит дерево вживую прямо сейчас - точно, но медленно на больших ФС. locate ищет по заранее построенной базе имен путей, которую обновляет updatedb (обычно по таймеру systemd) - мгновенно, но база может отставать от реальности. whereis и which/type решают узкую задачу: найти, откуда запустится конкретная команда.

Команды и примеры

Карта корня по FHS:

Код: Выделить всё

/        корень, минимум для загрузки
/etc     конфигурация этого хоста (без бинарников)
/bin     основные команды (-> /usr/bin при usr-merge)
/sbin    системные/админские команды (-> /usr/sbin)
/usr     статичные данные: /usr/bin, /usr/lib, /usr/share
/var     переменное: /var/log, /var/cache, /var/lib, /var/spool
/tmp     временное, чистится при перезагрузке (часто tmpfs в RAM)
/opt     стороннее ПО отдельным деревом /opt/<vendor>
/home    домашние каталоги пользователей
/proc    процессы и параметры ядра (виртуальная)
/sys     устройства и драйверы, sysfs (виртуальная)
/dev     файлы устройств (devtmpfs + udev)
find - живой обход. Базовый синтаксис: путь, затем условия, затем действие.

Код: Выделить всё

# файлы крупнее 100 МБ в /var
find /var -type f -size +100M

# .conf в /etc, измененные за сутки
find /etc -name '*.conf' -mtime -1

# удалить старые логи безопасно, без xargs-сюрпризов
find /var/log -name '*.log.*' -mtime +30 -delete

# выполнить команду для каждого файла
find /home -name '*.sql' -exec gzip {} \;
locate - поиск по базе. На большинстве дистрибутивов сегодня пакет называется plocate:

Код: Выделить всё

# Debian/Ubuntu
apt install plocate
# RHEL/Fedora
dnf install plocate

# найти все nginx.conf
locate nginx.conf

# обновить базу вручную (нужен root)
sudo updatedb
whereis находит бинарник, исходники и man-страницу по стандартным каталогам. which (и встроенный type) показывают, что реально запустится из PATH:

Код: Выделить всё

whereis ssh
# ssh: /usr/bin/ssh /usr/share/man/man1/ssh.1.gz

type -a ls
# ls is aliased to `ls --color=auto'
# ls is /usr/bin/ls

which python3
# /usr/bin/python3
Частые грабли
  • locate ничего не находит сразу после установки пакета - база еще не построена. Запустите updatedb или дождитесь таймера; новые файлы база не видит до обновления.
  • locate показывает удаленные файлы. База статична, файла уже нет - проверяйте существование или используйте locate -e.
  • Путаница mlocate и plocate. Старый mlocate почти везде заменен на plocate (быстрее, компактнее). Команда та же - locate, - но база и формат другие; параллельно держать оба не нужно.
  • Попытка искать через find по /proc или /sys. Это виртуальные ФС, обход тонет в спецфайлах и может зависнуть. Исключайте их или указывайте конкретный путь.
  • which показывает не то, что выполнится в вашем шелле. which - внешняя программа и не знает про алиасы и функции; для точного ответа берите type.
  • Запись пакетами в /usr/local или своего ПО прямо в /usr вручную. Стороннее кладите в /opt, локально собранное - в /usr/local, чтобы не конфликтовать с менеджером пакетов.
Мини-лаба
  • Выполните ls -ld /bin /sbin /lib и определите, включен ли на вашем стенде usr-merge (ссылки или реальные каталоги).
  • Командой find найдите в /etc все файлы, измененные за последние 7 дней: find /etc -type f -mtime -7.
  • Установите plocate, выполните sudo updatedb и найдите locate sshd_config.
  • Создайте файл touch /tmp/labtest.txt, сразу запустите locate labtest - убедитесь, что его нет в базе. Сделайте updatedb и повторите.
  • Сравните вывод which, whereis и type -a для команды cat и объясните разницу.
  • Прочитайте /proc/self/status и /proc/cpuinfo через less - убедитесь, что это виртуальные данные, а не файлы на диске.
Контрольные вопросы
  • Чем принципиально различается назначение /etc, /var и /usr по двум осям FHS (изменяемость и разделяемость)?
  • Почему find /proc - плохая идея, и где физически хранятся файлы из /proc, /sys, /dev?
  • В каких случаях locate даст неверный результат и как этого избежать?
  • Чем вывод which отличается от type -a и почему type точнее в интерактивном шелле?
  • Что такое usr-merge и как проверить, включен ли он на конкретной системе?
  • Куда по FHS следует устанавливать стороннее проприетарное ПО и локально собранные программы?
👍2 ❤️ 🔥1 😄 🤔1
Аватара пользователя
cephdev
Сообщения: 1
Зарегистрирован: 13 май 2026, 01:36

Re: FHS и поиск файлов в системе [104.7]

Сообщение cephdev »

А usr-merge это везде уже по умолчанию? У меня на старой CentOS 7 /bin был реальным каталогом, а на свежей Fedora - симлинк. Из-за этого скрипт с жестким /bin путем повел себя по-разному.
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
jabez
Сообщения: 1
Зарегистрирован: 24 май 2026, 02:51

Re: FHS и поиск файлов в системе [104.7]

Сообщение jabez »

Поймал грабли: locate выдавал старый путь к конфигу, которого уже неделю нет. Дошло не сразу, что база просто не обновилась. Добавил locate -e в привычку.
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Жёсткие и символические ссылки
Следующая глава →
Окружение и кастомизация оболочки [105.1]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя