Команды и утилиты поиска по файловой системе с Linux
Для удобного поиска нужной информации в системе с Linux существует множество способов. В этой статье рассмотрим, как найти необходимые вам файлы непосредственно через терминал. Выполнить эту функцию можно с помощью специальных команд, таких как locate, whereis, which и самая популярная среди них find.
Утилита find
Утилита по-умолчанию установлена во всех дистрибутивах Linux, для начала работы с ней не нужно выполнять никаких дополнительных действий с установкой пакетов. Популярность утилиты обусловлена большим количеством критериев выборки и сортировки для максимально точного вывода результата поиска по заданным условиям. Утилита find поддерживает поиск по файлу, папке, имени, дате создания, дате изменения, размеру, правам доступа к файлу, владельцу, группе, типу файла и т.д.
Также есть возможность использовать find для поиска файлов и каталогов и выполнения последующих операций с ними. Утилиту find можно сочетать и с другими утилитами, например, такими как grep или же sed.
Утилита имеет следующий общий синтаксис:
find [options] [path] [expression]
- options - дополнительные параметры настроек выполнения команды;
- path - определяет начальный каталог с которого будет выполняться поиск;
- expression - условия, шаблоны выполнения поиска.
Основные опции:
-name - поиск файла по его имени (с учетом регистра символов);
Рассмотрим несколько вариантов использования -name с разными установленными значениями, полезная функция когда вам нужно найти файл не просто по его названию, а например когда точное название пользователь не помнит, но знает некоторые особенности, тем сам сузив выдачу поиска.
-name newfile - имеет название newfile;
-name 'newfile*' - название файла начинается с newfile (например newfile2);
-name 'newfile??' - название начинается с newfile, после которого идет еще 2 символа;
-name 'newfile??*' - название начинается с newfile, после которого идет еще 2 или более символа;
-name '*newfile*' - файлы, которые содержат в своем название слово newfile.
-iname - поиск по имени без учета регистра;
-type - указание типа файла:
- f - простой файл;
- d - директория (папка);
- l - символическая ссылка;
- c - файл символьного устройства;
- b - файл блочного устройства;
- s - файл локального сокета;
- p - канал.
-user - поиск файла по указанному владельцу;
-group - поиск по группе пользователей;
-perm - по установленным правам доступа;
-size - сортировка по размеру файла, используется с операторами + и -, где:
+ - файлы больше установленного значения;
- - файлы меньше установленного значения.
-mtime - по дате последний модификации файлы (в днях), также используется с операторами + и - (например, +50 - дата последней модификации файла более 50 дней назад).
-mmin - аналогичная к -mtime но значение уже задается в минутах
-atime - по последней дате открытия;
-name '*.php' или же '*.txt' - выборка по установленному расширению файла;
-name '.*' - поиск скрытых файлов;
-empty - поиск пустых файлов.
Сам путь можно прописать начиная с символов так:
. - поиск в текущем каталоге;
/ - поиск по необходимому указанному каталогу;
~ - поиск в домашней директории.
Наведем несколько практических примеров:
Пример 1: Выполним поиск по названию файла, которое содержит в себе слово test в домашней директории.
find ~ -name '*test*'
Результат выполнения команды:
[mar***@cp*nl ~]$ find ~ -name '*test*'
/home/mar***t/test1.txt
/home/mar***/test2.txt
/home/mar***/newtest
Пример 2: Выполним поиск по названию файла, которое содержит в себе слово test в домашней директории, но уже с расширением .txt.
find ~ -name '*test*' -name '*.txt'
Результат выполнения команды:
[mar***t@cp*nl ~]$ find ~ -name '*test*' -name '*.txt'
/home/mar***t/test1.txt
/home/mar***/test2.txt
Пример 3. Выполним поиск по название файла, которое начинается с слова orders и имеет размер меньше 10 байт в папках newdata и sale.
find /home/mar***/sale /home/gmar***/newdata -name 'orders*' -size -10b
Результат выполнения команды:
[mar***t@cp*nl ~]$ find /home/mar***/sale /home/mar***/newdata -name 'orders*' -size -10b
/home/mar***t/sale/formounth/orders2.txt
/home/mar***t/sale/orders.txt
/home/mar***/newdata/ordersnew.txt
Команда ГиперХост как всегда желает продуктивной работы, ну и конечно удачных поисков.