В статье пойдет речь о расположении файлов и папок, как использовать поиск для нахождения нужной информации. Задача ознакомление с предназначение основных папок в операционной системе Linux и то, что в них находиться.
Разберемся в структуре FHS и посмотрим, как искать файлы и команды. FHS (File System Hierarchy Standard) – это стандартная иерархия ОС. Согласно Hierarchy FHS - есть стандартные папки, которые должны располагаться в корне.
Вот классическое расположение файлов и папок в корневой папке ОС Linux. Стандарт FHS был изначально предназначен для того, чтобы во всех дистрибутивах ОС Linux могли понять и найти все, что нам нужно. Некоторые дистрибутивы Linux отклоняются от этого стандарта, но не сильно в целом данный стандарт соблюдается. Перечислим основные папки и их предназначение.
/bin
– базовые исполняемые файлы/boot
– файлы loader/dev
– устройства/etc
– конфигурация ПК/home
– домашние директории/lib
– библиотеки ядра/proc
– информация о работающей системе/media
– монтирование носителей/mnt
– монтирование носителей/opt
– дополнительное программное обеспечение/root
– домашняя директория админа/sbin
– основные программы настройки системы/srv
– данные системных служб/tmp
– временные файлы/usr
– бинарные файлы пользователей/var
- переменные
Первая папка bin
в ней находятся базовые исполняемые файлы команд, т.е все команды которые может использовать пользователь они находятся здесь в данной папке. Папка boot
– в данной папке находятся файлы загрузчика. Обычно это отдельный диск примонтированный в котором находиться ядро Linux. В папке dev
– находятся файлы всех устройств в операционной системе Linux все и даже устройства представляют собой файлы. Папка etc
– здесь находиться конфигурация нашего конкретного ПК, в ней много подпапок и в ней лежит конфигурация. В директории home
находятся домашние папки всех пользователей, кроме пользователя root. В данной папке находятся документы, рабочий стол и т.д все что относится к пользователю. Папка lib
здесь находятся общие библиотеки и модули ядра. Папка proc
– здесь находятся вся информация о запущенных в данный момент процессах. В данную папку монтируется виртуальная файловая система procfs
. Папка media
создана для монтирования съемных накопителей типа USB или CD-ROM. В старых версиях Linux и до сих пор осталась, есть папка mnt
. Раньше в нее монтировались съемные носители, теперь же данную папку обычно используют для монтирования дополнительных файловых систем. Папка opt
- для установки дополнительного программного обеспечения. Папка root
– говорит сама за себя. Папка sbin
в данной папке лежат настройки серьезных таких компонент, как файрвол iptables
, например, или процесс инициализации init
. Папка srv
в ней лежат данные для всех системных служб. Папка tmp
– понятно, что в ней хранятся временные файлы. Причем данные файлы там хранятся до перезагрузки операционной системы, во время нее они удаляются. В папке usr
хранятся двоичные файлы, которые относятся непосредственно к пользователю, например, игры или программы, т.е то что пользователь самостоятельно установил. Папка var
– папка переменные, здесь обычно размещается почта или логи программ. Понятно, что это стандарт во многих дистрибутивах могут быть отклонения, но в том или ином виде все эти папки присутствуют в различных дистрибутивах.
Подробнее про структуру FHS можно прочитать здесь
Вторая часть не менее важная, как же найти в данных папках необходимую информацию.
Команды, используемые для поиска:
Grep
– Утилита поиска по содержимому в том числе и внутри файлаFind
- Утилита поиска файлов по свойствам. Серьезная утилита, которая начинает поиск файлов по файловой системе в реальном времени, у данной утилиты есть множество ключей и параметровLocate
– Это быстрый поиск файлов.Which
– Поиск команды. Выводит минимальное количество информацииType
– Вывод точной командыWhereis
– Поиск команды, исходников и мануалов. Серьезный глубокий инструмент
Начнем с find / -name mail
. Данная команда начнет искать в корневой папке /
все файлы с именем mail
.
Данная команда рекурсивно осуществляет поиск по всей файловой системе. Т.к мы запустили поиск от пользователя root, то он пробежался по всем папкам спокойно, если запускать от обычного пользователя, то может не хватать прав.
Есть другая команда - locate mail
.
Данная команда отрабатывает практически мгновенно. Команда find
искала именно по синтаксису, плюс можно добавлять сложные конструкции поиска. Команда locate
делает проще показывает все где находится сочетание символов.
Запустим поиск с помощью команды find / -user siadmin
, поиск будет искать все что касается данного пользователя. Поиск опять идет дольше, чем поиск командой locate siadmin
.
Дело в том, что данная команда по умолчанию ищет не везде и у нее есть конфигурационный файл cat /etc/updatedb.conf
.
В данном конфигурационном файле мы можем увидеть, что данная утилита не ищет в примонтированных файловых системах. Даная строчка # PRUNENAMES=".git .bzr .hg .svn"
, говорит о том , что в данных форматы в поиске не выдаются. Поиск не производится в папках PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
. И не ищет в перечисленных файловых системах в файле. Данный файл можно конфигурировать и будут манятся параметры поиска.
Создадим файл текстовый touch Vadim.txt
. И попробуем найти - locate Vadim.txt
. Ничего не нашел. find Vadim.txt
- поиск успешен.
locate
работает с индексной локацией. Данный механизм напоминает индексацию файлов в MS Windows. Проходит индексация файлов и папок и после этого windows знает, что и где лежит. А если индексация не была проведена, то операционная система Windows или говорит, что ничего не найдено или поиск происходит длительное время. Аналогично утилита locate
работает в Linux. Раз в день, команда locate
запускает команду find
. Команда find
пробегает по всей файловой системе, а команда locate
создает некую Базу данных и запоминает где и что находиться. Именно поэтому команда find
работает долго, а команда locate
работает практически моментально. Locate
знает, где и что лежит в тот момент когда find
искал. Но есть большой минус, данная функция происходит раз в день и изменения могут быть не актуальны. Для обновления базы данных команды locate
, необходимо ее запустить вручную updatedb
. Т.е ест конфигурация /etc/updatedb.conf
и мы запускаем обновление Базы данных команды. После обновления, команда будет практически мгновенно находить.
И последняя часть статьи, в которой необходимо рассмотреть поиск по командам. Тут достаточно просто, есть команда ls
– она показывает содержимое папки. Мы можем найти где находиться данная команда which ls
и получим, что она находиться /bin/ls
. Т.е. команда ls
хранится в папке bin
– где хранятся бинарники тех команд, которые могут быть вызваны пользователями. По сути когда мы набираем команду ls
, мы вводим /bin/ls
.
У нас есть команда type
. Обратите внимание, когда мы вызываем команду ls
срабатывает подсветка файлов и так далее, т.е. настройки оболочки. Когда мы запускаем напрямую /bin/ls
то вызывается непосредственно команда и игнорируются настройки оболочки. Причина заключается в том, что когда мы запускаем просто команду ls
, то она запускается с некоторыми ключами.
Чтобы узнать, что за ключи используются необходимо набрать type ls
.
Обратите внимание, что команда ls
– это алиаспсевдоним. Т.е запуская в таком режиме, фактически мы вводим /bin/ls –color=auto
. И получаем красивый вывод. Type
позволяет выводить псевдоним.
Есть еще одна команда, которая более детальную информацию выводит whereis ls
. Для ls
там не много информации.
Показывает, где лежит и к какому пакету относится.