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

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

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

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

Следовательно, в формуле "где искать + что искать" можно выделить третью важную часть – "что делать с найденным".

Составляющие поискового запроса

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

В самом простом случае команда find имеет следующий вид: find место_поиска ключ-свойство значение_свойства

Примеры использования команды find

На демонстрации рамка жёлтого цвета выделяет место поиска, тогда как оранжевая рамка представляет собой ключ и значение. В первом примере в каталоге folder находятся все файлы, изменённые (-mtime) за последние 10 дней. Во втором примере поиск осуществляется по имени (-name) в текущем каталоге. Имя файлов должно соответствовать шаблону *2*.

Обратите внимание, утилита find не следует стандарту Bash, в соответствии с которым ключи из целых слов начинаются с двух тире. У утилиты find они начинаются с одного.

Если необходимо задать несколько каталогов или несколько параметров поиска, это можно сделать с помощью перечисления.

Поиск в нескольких каталогах, поиск с двумя ключами

В данном примере производится поиск png-файлов размером более 5 килобайт в двух каталогах одновременно. Шаблон введён в кавычках, что является обязательным условием для корректной работы.

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

Пример использования ключа -exec команды find

В этом примере ищутся файлы, оканчивающиеся на "txt". Каждый найденный файл передается команде cp, при этом файл подставляется на место фигурных скобок. Команда cp выполняет копирование файла в каталог Загрузки. Конец аргумента exec обозначается обратно наклоненной чертой и точкой с запятой "\;".

Задание

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

Вопросы для самопроверки:

  1. Как называется утилита командной строки в Unix-подобных системах для поиска файлов?
  2. Какие атрибуты файлов могут использоваться для поиска, помимо имени?
  3. Какие параметры необходимо указать при использовании команды find для простого поиска?
  4. Почему шаблоны при задании поиска в команде find нужно заключать в кавычки?
  5. Каким ключом воспользоваться, чтобы выполнить действие с найденными файлами?
  6. Какое отличие в синтаксисе имеет утилита find по сравнению со стандартами Bash?

Программа курса:

  1. Описание курса
  2. История операционной системы Linux
  3. Основы лицензии GNU GPL и её преимущества
  4. Функции и структура ядра Linux-систем
  5. Структура и каталоги файловой системы Linux
  6. Основные типы файлов в системе Linux
  7. Интерфейс командной строки в Linux
  8. Командная оболочка Bash в Linux
  9. Использование параметров команд в Bash
  10. Использование Ctrl+C, Ctrl+D и Ctrl+Z
  11. Автодополнение и история команд в Bash
  12. Перенаправление ввода и вывода в Bash
  13. Документация Linux и Man-страницы
  14. Абсолютная и относительная адресация в Linux
  15. Команда ls - как просматривать каталоги в Linux
  16. Копирование, перемещение и удаление в Linux
  17. Жесткие и символьные ссылки в Linux
  18. Создание жестких и символических ссылок в Linux
  19. Права доступа к файлам и каталогам в Linux
  20. Изменение прав доступа к файлам с помощью chmod
  21. Использование шаблонов имен файлов в Linux
  22. Поиск файлов в Linux с помощью команды find
  23. Использование команды sudo в Linux
  24. Управление пакетами с помощью APT в Linux