Поиск файла в Linux

В операционных системах семейства Linux все объекты ОС являются файлами. Это означает, что не только данные пользователя и настройки системы хранятся в файлах, но и различные механизмы управления системой и коммуникации основаны тоже на файлах. Поэтому поиск файлов очень важен и для новичков будет очень полезно узнать, как найти местоположение того или иного файла, будь то программа, изображение или документ.

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

Поиск файла в Linux через графический интерфейс

В популярных графических окружениях рабочего стола таких как Gnome или KDE поддерживается поиск файлов прямо в главном меню. Этот поиск выполняется реальном времени и ищет только в самой домашней папке и в нескольких стандартных подпапках, таких как Документы, Загрузки и т д. Кроме того, большинство файловых менеджеров поддерживают поиск файла в выбранной папке и её подпапках. Я не буду рассматривать это в данной статье. Вместо этого давайте сосредоточимся на утилитах, которые позволяют выполнять расширенный поиск файлов.

1. Catfish

Это простая программа для поиска файлов. В ней можно выбрать тип файла для поиска, а также время его изменения. Программа ищет по всей файловой системе, поэтому это может занять довольно много времени. Она ищет не в реальном времени, а использует поисковый индекс mlocate. Вы можете установить Catfish в Ubuntu используя такую команду:

sudo apt install catfish

После запуска программы вы можете сразу же набрать нужный запрос в строке поиска и нажать кнопку со значком лупы, например file1:

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

Кроме того, утилита поддерживает поиск по содержимому. Для этого нужно включить галочку Search file contents в настройках:

2. FSearch

Это инструмент для поиска файлов по имени работающий также как и Everything Search Engine. При первом запуске необходимо создать индекс для поиска на основе папок, в которых вы собираетесь искать файлы. Затем вы будете получать результаты поиска сразу же при вводе текста. Программа поддерживает модификаторы по типу файла, символы подстановки, операторы И/ИЛИ, регулярные выражения, сортировку по типу и размеру, а также многое другое. Вы можете найти информацию о том как установить FSearch в вашем дистрибутиве на странице программы на GitHub. При первом запуске окно программы выглядит вот так:

После запуска программы необходимо нажать кнопку Add Folders и добавить папки, в которых вы хотите выполнять поиск с помощью кнопки со значком плюса:

Также здесь можно настроить параметры поискового индекса и частоту его обновления. Позже, индекс можно настроить открыв Edit -> Preferences -> Database. После этого вы можете просто начать набирать имя файла в поисковой строке и он сразу же появится в списке:

Можно использовать модификатор по типу файла, например pic: для картинок:

Кроме того доступны такие модификаторы типа файла: file, folder, app, archive, audio, doc, video. Также можно использовать регулярные выражения с помощью модификатора regex:

Или искать по размеру с помощью модификатора size:

Вы можете найти все остальные модификаторы поиска на этой странице.

Существует ещё одна похожая утилита для поиска - это AngrySearch. Но она уже давно не обновлялась и её функциональность примерно такая же как и у fsearch, поэтому я не буду рассматривать её в этой статье.

3. Recoll

Это приложение тоже может выполнять поиск файлов Linux не только по имени, но и по их содержимому. Здесь используется полнотекстовый поисковый движок Xapian. Как и в предыдущем варианте необходимо сначала создать поисковый индекс. Для этого нажмите кнопку Indexing Configuration:

В открывшемся окне вы можете добавить папки, в которых будет выполняться поиск в разделе Top-Level Directories, а также, поскольку это полнотекстовый индекс, то можно подключить словари словоформ для вашего языка в разделе Stemming Languages. По умолчанию выбрана только ваша домашняя папка:

Когда все настройки будут внесены, нажмите кнопку Ok, а затем Start the indexing process. В приложении доступно четыре варианта поисковых запросов:

  • Any word - вхождение хотя бы одного слова из запроса в имя или содержимое;
  • All words - вхождение всех слов из запроса в имя или содержимое;
  • File name - поиск только по имени файла;
  • Query language - позволяет формировать сложные запросы с помощью языка запросов Xapian.

Для поиска файлов по имени в Linux выберите тип поиска File Name, и наберите запрос. Например:

Для поиска по содержимому выберите Any Word, All Words, или Query Language. Например:

Можно искать по содержимому только в файлах с определённым расширением или вхождением определённых символов в имя файла используя язык запросов. Синтаксис довольно простой: имя_поля:значение. Например, так можно найти все вхождения kovalets в файлах, начинающихся на file:

Более подробную информацию про все возможные модификаторы можно найти в официальной документации.

Поиск файлов в Linux по имени через терминал

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

1. find

Самая часто используемая команда поиска файла Linux на данный момент - это find. Она имеет множество возможностей: вы можете искать файлы по имени, дате изменения или создания, использовать регулярные выражения и маски, выполнять определённые действия для найденных файлов, настраивать глубину поиска и многое другое.

По умолчанию команда find ищет и файлы и каталоги. Если папку не задать явно, то поиск будет выполняться в текущей папке. Указать что нужно искать именно файлы можно с помощью опции -type с параметром f, а сам запрос надо указать с помощью опции -name. Например:

find -type f -name "file"

Обратите внимание, что find будет искать файлы, имя которых точно совпадает с вашим запросом. Если вам нужно найти файлы которые содержат определённые символы в имени, используйте символы подстановки, например *:

find -type f -name "file*"

Папку для поиска нужно указать перед остальными параметрами. Например, для того чтобы найти все файлы, которые начинаются на pa в папке /etc/ используйте такую команду:

sudo find /etc/ -type f -name "pa*"

Для того чтобы не учитывать регистр символов при поиске, используйте опцию -iname вместо -name:

sudo find /etc/ -type f -iname "pa*"

Если вы хотите найти файлы только с определённым расширением, это можно сделать указав звездочку перед запросом. Например, для того чтобы получить все файлы .ini выполните:

sudo find /etc/ -type f -name "*.ini"

Более подробную информацию об этой команде читайте в статье команда find в Linux.

2. fd

Это альтернатива команды find, написанная на Rust. Она работает быстрее оригинальной find, поддерживает цветной вывод, поиск по регулярным выражениям, не учитывает скрытые файлы и файлы, перечисленные в .gitignore а также имеет более простой и удобный синтаксис. В Ubuntu утилиту можно установить с помощью следующей команды:

sudo apt install fd-find

Обратите внимание, что в Ubuntu эта команда пишется не fd, как задумали разработчики, а fdfind.

Как и find, эта утилита по умолчанию ищет в текущей папке, но вместо точного сопоставления имени, она ожидает часть имени или регулярное выражение. Например, для того чтобы найти все файлы в текущей папке, которые содержат слово file в имени достаточно команды:

fdfind file

Далее, для того чтобы найти файлы имя которых начинается на pa в папке /etc/ используйте такую команду:

sudo fdfind "^pa" /etc/

Если вам нужно искать файлы по расширению, используйте опцию -e. Например, для поиска всех ini файлов содержащих в имени букву x в папке /etc/ выполните:

sudo fdfind -e ini "x" /etc/

Более подробную информацию об утилите можно найти на её странице GitHub.

3. fzf

Команда fzf предназначена для живого нечеткого поиска файлов по имени. При запуске она показывает список файлов в текущей папке и строку поиска, куда вы можете вводить поисковый запрос, для того чтобы уменьшить количество этих файлов. Список фильтруется в реальном времени и всё работает довольно быстро. Для установки программы в Ubuntu можно использовать такую команду:

sudo apt install fzf

Когда утилита установлена, нужно перейти в папку, в которой вы хотите выполнять поиск. Например, в папку /etc/:

cd /etc/

Теперь запустите утилиту и наберите запрос pass, для того чтобы найти все файлы содержащие в названии pass:

fzf

Наиболее точные совпадения будут ниже всего. Вы можете перемещаться по списку файлов с помощью клавиш вверх и вниз. Для выхода нажмите Enter, и путь к выбранному в данный момент файлу будет выведен в терминал:

Если вы хотите искать вхождения только с начала имени файла, используйте символ ^ перед запросом:

А если только с конца, то символ $. Более подробную информацию можно найти в официальной документации.

4. skim

Это ещё одна утилита для нечеткого поиска в Linux в реальном времени, написанная на Rust. Она может делать почти всё то же самое что и fzf, но более легковесная. Утилиты нет в официальных репозиториях Ubuntu, но вы можете установить её с помощью cargo:

cargo install skim

Как и при использовании fzf вам нужно перейти в папку, в которой будет выполняться поиск. Например:

cd /etc/

Теперь вы можете запустить программу и начать вводить поисковый запрос:

sk

По списку найденных файлов можно перемещаться с помощью клавиш стрелка вверх и вниз. В отличие от fzf здесь также поддерживается командный режим, который позволяет добавить дополнительный уровень фильтрации комбинируя skim с grep или другой утилитой для поиска файлов. Просто укажите команду с помощью опции -c. Например:

sk --ansi -c 'grep -r "{}" .'

После выполнения команды вы увидите не только имена файлов но и их содержимое. Здесь вы можете отфильтровать файлы по имени. Например, только содержащие в пути init.d:

А затем, переключитесь в командный режим с помощью сочетания клавиш Ctrl+Q и наберите запрос уже для поиска по содержимому:

Или же сразу можно перейти в командный режим добавив опцию -i к команде запуска:

sk --ansi -i -c 'grep -r "{}" .'

5. locate

Команда locate считается устаревшей и уже была удалена из многих дистрибутивов. Она выполняет поиск не в реальном времени, как find, а по ранее созданной базе файлов, но она делает только поиск файла по имени Linux. Вы вводите слово, которое вас интересует, и утилита выдаёт все известные ей файлы, имя которых содержит такое слово. Можно использовать регулярные выражения. Например, найдем все файлы, в имени которых содержится passwd:

locate passwd

Обратите внимание, что если файл был добавлен после создания базы, то он найден не будет. Для обновления поискового индекса locate используйте такую команду:

sudo updatedb

Более подробно об этой утилите можно прочитать в статье Команда locate в Linux.

Поиск файлов по содержимому в в терминале

Существует несколько консольных утилит для поиска файлов по их содержимому и они будут подробно описаны в отдельной статье. Это SilverSearcher, ripgrep, ack и другие. Но исторически так сложилось, что самая популярная и часто используемая утилита для поиска текста по файлам это grep. Она поставляется во всех популярных дистрибутивах по умолчанию и её возможностей хватает для большинства задач.

Для того чтобы найти файлы, которые содержат определённую строку достаточно использовать опцию -r и указать папку, в которой надо искать текст. Например, давайте найдём все файлы в /etc/, которые содержат строчку error_reporting:

sudo grep -r "error_reporting" /etc/

С помощью grep очень удобно искать, где находится нужный конфигурационный файл или же проверять не содержат ли файлы с кодом чего-нибудь подозрительного. Подробнее про использование grep читайте в статье команда grep в Linux.

Как узнать расположение исполняемого файла Linux

Это можно сделать с помощью команды whereis. Эта команда достаточно простая и решает только одну задачу. Она показывает, где находится исполняемый файл, переданной ей программы. Например, если мы хотим узнать, в какой папке расположен grep, достаточно выполнить:

whereis grep

Выводы

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *