Как найти файл если знаешь только его содержимое linux

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

Обновл. 4 Сен 2021 |

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

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

Главное меню

С помощью главного меню ОС вы можете не только искать и запускать программы, но также и выполнять поиск файлов. Подобный функционал присутствует во многих окружениях рабочего стола (KDE, GNOME, Xfce и пр.). Например, в KDE это представлено следующим образом:

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

Файловые менеджеры

Многие файловые менеджеры также предоставляют возможности поиска файлов. Например, в Dolphin для запуска поиска достаточно просто нажать кнопку со значком лупы, а затем ввести имя файла (или папки) в строку поиска. При этом вы можете выбрать папку, в которой будет выполняться поиск, а также указать дополнительные параметры (поиск по содержимому и пр.). Помимо этого в качестве поискового запроса допускается применять символы ? и * :

Поиск по содержимому в Dolphin:

KFind

В KDE, помимо вышеупомянутых инструментов поиска, также есть замечательная утилита под названием KFind. С её помощью вы можете точно настроить параметры поиска (указать имя файла, его тип и путь поиска, обычный текстовый поиск или мета-поиск, дату изменения, размер, пользователя, группу и пр.). Она также позволяет сохранять результаты поиска в виде простого текстового списка URL-адресов найденных файлов:

SearchMonkey

SearchMonkey позволяет выполнять поиск файла, как по имени, так и по его содержимому, по диапазону дат и пр. Но главное преимущество SearchMonkey — это возможность везде применять регулярные выражения.

Поиск с применением регулярного выражения в SearchMonkey:

Recoll

Recoll — это приложение (поисковый движок) для полнотекстового поиска, выполняющее поиск ваших данных по содержимому, а не по внешним атрибутам (например, по имени файла). Вам не нужно запоминать, в каком файле или сообщении электронной почты вы хранили ту или иную информацию. Необходимо лишь указать слова (или выражения), которые должны или не должны присутствовать в искомом тексте, и взамен вы получите список соответствующих документов, упорядоченных таким образом, что первыми идут наиболее релевантные из них (подобно поисковым системам Интернета).

Читайте также:  Как удалить файлы без корзины mac os

Установить программу можно из официальных репозиториев через командную строку:

sudo apt-get install recoll

Или через графический интерфейс:

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

Это может быть очень удобно при работе с большим объемом текстовых данных. Программа поддерживает такие форматы файлов, как: .pdf, .djvu, .doc, .docx, .odf. А также умеет находить перечисленные файлы в архивах.

Поиск файлов через терминал. Команда find

Команда find — производит поиск файлов и каталогов на основе заданного пользователем выражения и может выполнять назначенные пользователем действия над каждым найденным файлом.

Вы можете применять команду find для поиска файлов и каталогов на основе их разрешений, типа, даты, владельца, размера и многого другого. Она также может быть объединена с другими инструментами, такими как grep или sed .

Общий синтаксис команды find выглядит следующим образом:

find [опции] [путь. ] [выражение]

опции — аргументы, управляющие обработкой символьных ссылок, параметрами отладки и методом оптимизации;

путь — начальный каталог (или каталоги), в которых команда find будет искать файлы;

выражение — состоит из параметров, шаблонов поиска и действий, разделенных операторами.

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

Давайте рассмотрим следующий пример:

find -L /var/www -name «*.js»

опция -L — указывает команде find следовать по символическим ссылкам;

путь /var/www — задает каталог, в котором будет выполняться поиск;

выражение -name «*.js» — сообщает команде find искать файлы, заканчивающиеся на .js (расширение JavaScript-файлов).

Поиск файлов по имени

Поиск файлов по имени, вероятно, является наиболее распространенным применением команды find . Чтобы найти файл по его имени, используйте опцию -name , за которой следует имя файла, который вы ищете.

Например, для поиска файла document.pdf в каталоге /home/linuxize можно применить следующую команду:

find /home/linuxize -type f -name document.pdf

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

find /home/linuxize -type f -iname document.pdf

Критериям поиска вышеприведенной команды будут соответствовать как Document.pdf, так и DOCUMENT.pdf и т.д.

Поиск файлов по расширению

Поиск файлов по расширению аналогичен поиску файлов по имени. Например, чтобы найти внутри каталога /var/log/nginx все файлы, заканчивающиеся на .log.gz, необходимо выполнить:

find /var/log/nginx -type f -name ‘*.log.gz’

Важно отметить, что шаблон поиска необходимо взять в одинарные кавычки, либо экранировать символ звездочки * обратной косой чертой \ , чтобы при использовании подстановочного знака он не интерпретировался командной оболочкой.

Чтобы найти все файлы, которые не соответствуют регулярному выражению *.log.gz вы можете использовать опцию -not . Например, чтобы найти все файлы, которые не заканчиваются на *.log.gz вы можете использовать:

find /var/log/nginx -type f -not -name ‘*.log.gz’

Поиск файлов по типу

Иногда вам может потребоваться выполнить поиск файлов определенного типа: обычные файлы, каталоги или символические ссылки. В Linux, как вы помните, всё является файлом.

Для поиска файлов по их типу используется параметр -type и один из следующих идентификаторов для указания типа файла в Linux:

Читайте также:  Как отключить запуск экранной клавиатуры при запуске windows

f — обычный файл;

l — символьная ссылка;

c — символьные устройства;

b — блочные устройства;

p — именованный канал (FIFO);

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

Поиск файлов по размеру

Для поиска файлов по заданному размеру необходимо добавить параметр -size . Указание размера происходит с помощью следующих суффиксов:

b — 512-байтовые блоки (по умолчанию);

w — двухбайтовые слова;

Следующая команда найдет все файлы размером 1024 байта в каталоге /tmp:

find /tmp -type f -size 1024c

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

В следующем примере мы ищем в текущем рабочем каталоге все файлы размером менее 1 МБ. Обратите внимание на символ минуса — перед значением размера:

find . -type f -size -1M

Если вы хотите выполнить поиск файлов размером более 1 МБ, то вам нужно использовать символ плюса + :

find . -type f -size +1M

Вы даже можете искать файлы в пределах диапазона размеров. Следующая команда найдет все файлы размером от 1 до 2 МБ:

find . -type f -size +1M -size 2M

Поиск файлов по дате изменения

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

Так же, как и при поиске по размеру, используйте символы + или — для критериев «больше» или «меньше».

Допустим, несколько дней назад вы изменили один из конфигурационных файлов dovecot, но забыли, какой именно. Вы можете легко отфильтровать все файлы в каталоге /etc/dovecot/conf.d, которые заканчивается на .conf и были изменены за последние пять дней:

find /etc/dovecot/conf.d -name «*.conf» -mtime 5

Вот еще один пример фильтрации файлов на основе даты изменения с помощью параметра -daystart . Следующая команда выведет список всех файлов в каталоге /home, которые были изменены 30 или более дней назад:

find /home -mtime +30 -daystart

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

Параметр -perm позволяет выполнять поиск файлов на основе прав доступа к ним.

Например, чтобы найти внутри каталога /var/www/ravesli все файлы с разрешением 644, вы должны использовать:

find /var/www/ravesli -perm 644

Рассмотрим следующий пример команды:

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

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

Поиск файлов по владельцу

Чтобы найти файлы, принадлежащие определенному пользователю или группе, применяются параметры -user и -group .

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

find / -user ravesli

Вот еще один пример. Допустим, вы хотите найти все файлы, принадлежащие пользователю www-data, и изменить владельца соответствующих файлов с www-data на nginx. Вам нужно выполнить следующий набор команд:

find / -user www-data -type f -exec chown nginx <> \;

Поиск и удаление файлов

Чтобы удалить все совпадающие с поисковым запросом файлы, необходимо в конец поискового запроса добавить опцию -delete .

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

Читайте также:  Реестр другого пользователя windows

Например, чтобы удалить из каталога /var/log/ все файлы, заканчивающиеся на .temp, применяется следующий набор команд:

find /var/log/ -name *.temp -delete

Предупреждение: Используйте опцию -delete с особой осторожностью. Команда find вычисляется как выражение, и если вы добавите опцию -delete в начало данного выражения, то команда удалит всё в указанных вами папках.

Когда дело доходит до каталогов, команда find , как и команда rmdir , может удалять только пустые каталоги.

Запись результатов поиска в файл

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

find /etc -type f -name «*.conf» > conf_search

Она производит поиск в каталоге /etc всех файлов, имеющих расширение .conf, и записывает результат в файл conf_search.

Поиск файлов через терминал. Команда locate

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

Стоит заметить, что если файл появился в системе уже после создания базы, то он не будет найден.

Иногда вам может потребоваться обновить базу данных, к которой обращается locate . Для этого необходимо ввести команду updatedb (её запуск производится от имени суперпользователя):

Поиск файлов через терминал. Команда grep

Команда grep может использоваться не только в роли фильтра для других команд, но и производить поиск файлов. Для этого необходимо задать параметр -r и указать папку, в которой следует искать текст. Предположим, что мы хотим найти в каталоге /var/log все файлы, которые содержат строку error:

sudo grep -r «error» /var/log

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

Поиск файлов через терминал. Команда whereis

Команда whereis выполняет только одну задачу — отображает местоположение исполняемого файла, переданного ей в качестве параметра. Например, для того, чтобы узнать, где находится исполняемый файл команды uname , достаточно выполнить:

Заключение

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

Поделиться в социальных сетях:

26 команд в Linux, которые должен знать каждый сисадмин

Комментариев: 2

Стоит добавить, что для обновления базы файлов, по которой осуществляется поиск с командой “locate”, есть команда “updatedb”.
А пакет, например, для Ubuntu или CentOS, в котором есть locate и updatedb — mlocate

Источник

Оцените статью