Перейти к содержимому

Какие утилиты для поиска файлов вы знаете в linux

  • автор:

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

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

which

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

Таким образом, bash находится в /bin каталоге. Это очень ограниченная команда для поиска, так как она ищет только в вашем PATH.

whereis

Команда whereis работает аналогично программе which, но в дополнение к последней, так же ищет man страницы и исходники программ. Результат выполнения whereis для bash будет следующий:

$ whereis bash

bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz

Эта команда не только говорит, где находится программа, но так же указывает, где находится её онлайн документация. Но она всё ещё весьма ограничена. Что если вам необходимо найти определённый конфигурационный файл? which или whereis тут вам не помогут.

grep

Команда grep (расшифровывается как global regular expression print)

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

$ grep [опции] шаблон [имя файла…]

Опции — это дополнительные параметры, с помощью которых указываются различные настройки поиска и вывода, например количество строк или режим инверсии.

Шаблон — это любая строка или регулярное выражение, по которому будет вестись поиск

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

-b — показывать номер блока перед строкой;

-c — подсчитать количество вхождений шаблона;

-h — не выводить имя файла в результатах поиска внутри файлов Linux;

-i — не учитывать регистр;

-l — отобразить только имена файлов, в которых найден шаблон;

-n — показывать номер строки в файле;

-s — не показывать сообщения об ошибках;

-v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;

-w — искать шаблон как слово, окружённое пробелами;

-e — использовать регулярные выражения при поиске;

-An — показать вхождение и n строк до него;

-Bn — показать вхождение и n строк после него;

-Cn — показать n строк до и после вхождения;

Все самые основные опции рассмотрели и даже больше, теперь перейдём к примерам работы команды grep Linux.

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

Поиск текста в файлах

В примере мы будем искать пользователя User в файле паролей Linux. Чтобы выполнить поиск текста c grep в файле /etc/passwd введите следующую команду:

  • grep User /etc/passwd

Поиск слов в grep

Когда вы ищете строку abc, grep будет выводить также kbabc, abc123, aafrabc32 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова с помощью опции -w:

  • grep -w “abc” имя_файла

Поиск двух слов

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

  • egrep -w ‘word1 word2’ /path/to/file

find

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

find потребует много времени для поиска, так как эта команда пролистает всё дерево каталогов для поиска. И если вы выполните команду, как обычный пользователь, то на экран, вероятно, неоднократно будут выведены сообщения об ошибке доступа к некоторым из каталогов (к тем, которые может просматривать только root). Но find нашла наш файл. Уже хорошо. Если бы только она работала чуточку быстрее…

locate

Команда locate производит поиск по всей файловой системе, в точности как и find, но она просматривает свою базу данных вместо того, чтобы пролистать все каталоги. База данных настроена так, что она автоматически обновляется в 4:40 утра. Вы так же можете вручную выполнить updatedb, для обновления этой базы данных (перед запуском её вручную вам следует выполнить su nobody). Вот пример использования locate:

$ locate xinitrc # нам не надо быть root

/var/X11R6/lib/xinit/xinitrc

/var/X11R6/lib/xinit/xinitrc.fvwm2

/var/X11R6/lib/xinit/xinitrc.openwin

/var/X11R6/lib/xinit/xinitrc.twm

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

Команда find в Linux – мощный инструмент сисадмина

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

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

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

Синтаксис команды find:

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.

Поиск по имени

Следующая команда ищет файл s.txt в текущем каталоге:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.

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

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

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

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

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

  • «+» — Поиск файлов больше заданного размера
  • «-» — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

Единицы измерения файлов:
  • c — Байт
  • k — Кбайт
  • M — Мбайт
  • G — Гбайт

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

Критерий -empty позволяет найти пустые файлы и каталоги.

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

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

Поиск по времени доступа

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

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

Поиск по имени пользователя

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

Поиск файлов с разрешениями 777.

Операторы

Для объединения нескольких критериев в одну команду поиска можно применять операторы:

  • -and
  • -or
  • -not

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

Перед скобками нужно поставить обратный слеш «\».

Действия

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

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.
    -delete

    Полезен, когда необходимо найти и удалить все пустые файлы, например:

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

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

    • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
      • rm
      • mv
      • cp

      С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

      Другой пример использования действия -exec:

      Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

      Заключение

      Команду find можно использовать для поиска:

      • Файлов по имени.
      • Дате последнего доступа.
      • Дате последнего изменения.
      • Имени пользователя (владельца файла).
      • Имени группы.
      • Размеру.
      • Разрешению.
      • Другим критериям.

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

      • Удаление.
      • Копирование.
      • Перемещение в другой каталог.

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

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

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

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

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

      1. Главное меню системы

      Главное меню операционной системы позволяет, как правило, не только запускать программы, но и искать их, а также искать файлы. Такая возможность есть как в Gnome, так и в KDE. В главном меню Gnome вы можете ввести нужную фразу для поиска:

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

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

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

      Открыв стрелочку дополнительных параметров можно выбрать период, за который был создан интересующий нас документ, а также тип документа.

      В качестве поискового запроса можно использовать символы подстановки: ? и *. Но для более точного поиска придётся использовать сторонние программы.

      3. Gnome Search

      Утилита Gnome Search по умолчанию поставляется не всегда, но вы можете установить её из центра приложений или через официальные репозитории. Она предоставляет такие же возможности, как и файловый менеджер, плюс здесь можно искать по содержимому файлов, что иногда очень удобно.

      4. SearchMonkey

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

      5. Recoll

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

      sudo apt install recoll

      Сразу же после запуска она предложит вам создать индекс документов, которые есть в вашем домашнем каталоге.

      И только после создания индекса вы сможете выполнять по нему поиск. Далее, вам будет достаточно ввести запрос, например Wi-Fi, и вы увидите все файлы, которые содержат это слово с примерами вхождений, отсортированные по релевантности:

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

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

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

      1. find

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

      /Изображения -iname «Снимок*»

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

      2. locate

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

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

      3. grep

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

      sudo grep -r «error_reporting» /etc/

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

      4. whereis

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

      Выводы

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

      Похожие записи

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

      alt=»Creative Commons License» width=»» />
      Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

      Об авторе

      Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

      16 комментариев к “Поиск файла в Linux”

      Поправка. Опция -r в grep это рекурсивный поиск. А поиском по содержимому grep занимается и без опций.

      Я — программист (-хренов). Пишу проги для микроконтроллеров и для компа. Очень часто после компиляции проекта, состоящего из многих файлов, компилятор выдаёт ошибки. Иногда приходится искать по проекту использование (вызовы) той или иной функции или какие-то другие вещи. Поэтому я интенсивно пользуюсь утилитой grep.

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

      grep -n lcd_init *.c # Поиск в исходных файлах проекта, где вызывается инициализация дисплея. Дополнительно к указании имени файла, опция -n также выводит номер строки.

      grep -nr post_message *.[ch] # Поиск по всему проекту и его директориям (-r — флаг рекурсивности просмотра поддиректориев) во всех исходных и хэдерных файлах.

      grep -ni led *.c # опция -i заставляет игнорировать регистр буква искомого слова. В результате будут найдены все led, Led, LED, LED_ON, LED_OFF и так далее.

      Кроме того, вывод команды grep можно «подкрасить». У меня Debian. А у него в домашнем директории пользователя в файле .bashrc имеется 82-ая строка вот с таким содержанием:

      alias grep=’grep —color=auto’

      Эту строку нужно раскомментировать и перезапустить сессию пользователя.

      (Можно очень много интересного написать по работе в Линуксе и можно дать много полезных советов. Линукс огромен, как вселенная! Обилие информации не приводит к увеличению скорости освоения. Вы же не наедаетесь за один раз и на всю неделю. Вы едите каждый день, но по немного. Вы каждую неделю тренируетесь в спортзале или выполняете какие-то силовые нагрузки периодически. Но вы не рвете жо и не губите своё здоровье, как «последний раз». Так и с освоением Линукса — не нужны не авралы, а нужно методичное освоение. Мудрость гласит — «Нет! Мы медленно спустимся в долину и возьмём всё стадо.» Успехов вам!)

      Тогда уж alias добавить в /etc/bash.bashrc, чтоб и для root-а было цветно ��
      А зоодно обратите внимание, сколько раз Вы ткнули в буковку «n», не проще так: alias grep=’grep —color=auto -n’

      1. А зачем? У root-а совсем иные задачи. Я под root-ом не имею привычки работать над проектами. Root предназначен совсем-совсем для иных целей. Это ж не Винда!

      2. Ага. Можно и так. Вроде даже когда-то так тоже делал. А в целом, на брать дополнительно пару символов «-n» абсолютно не напрягает (руки-то не на мышке, а на клаве). Ну и есть волшебная клавиша «Tab», и история команд.

      В общем, кому как нравится. Мне нравится так, и кроме того, я уже привык делать именно так. Никого не агитирую делать именно так, как я делаю. Просто предложил свой способ. А каждый сам найдёт для себя единственный удобный для него способ. Ага.

      Ну, раз уж про цвет, то ещё чуток offtop-а: gcc у меня тоже цветной �� более удобочитаемый вывод ��
      P.S.: прошу прощения за описочку: зоодно -> заодно ��

      Ага. Я тоже «подкрасил».

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

      Строки 86-87 в том же файле:

      # colored GCC warnings and errors
      export GCC_COLORS=’error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01′

      Согласен — дело вкуса, но можно и разнообразить: export GCC_COLORS=’error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01;34:quote=33′

      Иногда приходится искать по проекту использование (вызовы) той или иной функции или какие-то другие вещи. Поэтому я интенсивно пользуюсь утилитой grep.

      Это потому, Александр Антонович, что вам не хватает внутренней дисциплины и привычки комментировать свой код. Определили функцию в каком-то файле, сделали вызов функции в другом файле, напишите в файле с определением функции соответствующий комментарий с адресом файла, где есть вызов, комментарии для этого и нужны, чтобы потом не делать судорожные поиски и не блукать в трёх соснах под солнцем, но во тьме. Вы даже представить себе не можете, как облегчите свою жизнь в будущем, потратив 3 секунды на полезный комментарий. :))) При этом приставка к слову «программист», которой вы себя обзываете, сама отпадёт. Ни можно так про себя! ;)) Вас молодёжь читает. Пример ещё брать будет.

      Ну и для описанного вами случая некоторые программистские IDE имеют соответствующие специализированные инструменты для поиска по проекту. Иногда это бывает удобней чем grep, хотя grep могуч конечно.

      Всё, что Вы говорите — всё верно!

      К сожалению, мои проекты довольно-таки большие. Проект, над которым я сейчас тружусь, насчитывают нескольку десятков файлов, в общей сложности чуть менее 10 тысяч строк. Хозяйство очень большое. Кроме того, это — разработка. Постоянно что-то меняется, постоянно что-то куда-то переносится.

      Ну, например, в схеме используется LCD (OLED) индикатор, микросхема Zig-Bee и вокодер. У всех у них интерфейс SPI. Но у микроконтроллера, который заложен в изделии, только два SPI. Выход простой — нужно просто объединить два устройства на одном интерфейсе. Я посчитал, что радиоканал из них самый быстрый, и посадил его на один SPI, а LCD и вокодер завёл на другой SPI.

      Оказалось, не угадал!

      Оказалось, что Zig-Bee может ждать дольше обработки (после того, как микроконтроллер (МК) получит от неё прерывание), чем вокодер. Ну, LCD — это товарищ вообще не принципиальный, но у него тоже есть неприятное свойство. Он — графический. А это значит, что вывод информации для подновления изображения на нём потребует значительно больше времени, чем если бы он был символьным. Ну, в общем, вывод небольшого кусочка может занять 1-2 миллисекунды. Если МК начал работать с LCD, то ему не желательно прерваться на обработку вокодера, так как придётся заново выводить этот кусок изображения. С другой стороны, для вокодера 1-2 мс — это существенное время, которое может нарушить его работу.

      В общем, пришлось перемещать LCD от вокодера на радиоканал.

      Простой (казалось бы!) вопрос — в каком файле (модуле) должна осуществляться инициализация интерфейса SPI? Ну тот SPI, который работает на одно устройство, — там понятно — там можно проинициализировать его и в самом модуле устройства (в драйвере этого устройства). Например, радиоканал сидел на отдельном SPI, значит, можно SPI можно не выделять в отдельный файл, а объединить его с драйвером радиоканала. А, вот, что делать с вокодером и LCD?

      Пришлось создавать три модуля драйверов: один для LCD, другой — для вокодера, третий — для их совместно используемого SPI.

      Но это ещё ягодки! Потом, когда поднялся вопрос экономии питания, посыпались ягодки. Оказалось, что вокодер даже в режиме сна жрёт довольно-таки много. Пришлось отказаться от этого режима, а тупо отрубать ему питание. Получилось. Но возникла другая проблема.

      По логике работы устройства возникают ситуации, когда LCD работает с выключенным вокодером. Но вокодер (собака!), будучи вообще обесточенным, умудряется получить питание и работать через сигнальные цепи, которые являются общими для LCD и вокодера.

      Всё бы ничего, но оказалось, что и радиоканал тоже способен нормально запитываться от сигнальных цепей. По идее нужно менять МК на другой, у которого три SPI.

      Добряк, я не прошу Вас вникать в описанную проблему. Я это всё не поленился написать для Вас, что бы развеять Ваше чувство, что чужую будку, руками разведу. Пожалуйста, не судите людей по себе. Проекты (программы) бывают чрезвычайно разные. Со стороны всегда кажется — что там тупить-то!

      Уважаемый Добряк!

      Всё, что Вы говорите — всё верно!

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

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

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

      Главное меню

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

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

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

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

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

      KFind

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

      SearchMonkey

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

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

      Recoll

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

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

      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:

      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 .

      Например, чтобы удалить из каталога /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-системах и показать, что существует множество различных вариантов, которые позволят вам решить любые задачи по поиску файлов и не только.

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

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

Капельница от запоя — облегчение за 15–20 минут