img

Как пользоваться командой Find в Linux

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

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

Как пользоваться командой Find Linux

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

$ find directory-to-search criteria action

где:

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

Критерии

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

Вот простой пример. Следующая команда выполняет поиск файла a.txt в текущем каталоге:

$ find . -name "a.txt"
./a.txt

Где:

  • . - ссылается на текущий каталог
  • -name – определяет критерии для сопоставления

По умолчанию, ключевое слово -name чувствительно к регистру и игнорирует файл A.txt. Чтобы убедиться, что поиск не учитывает регистр, используйте -iname:

$ find . -iname "a.txt"
./a.txt
./A.txt

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

$ find . -name "*.jpg"
./genxfacebook2.jpg
./genxfacebook1.jpg
./Moodle2.jpg
./moodle.jpg
./moodle/moodle1.jpg
./genxfacebook.jpg

Можно использовать имя каталога для поиска. Например, для поиска всех изображений .jpg в каталоге /home:

$ find /home -name "*.jpg"
find: `/home/ubuntu/.ssh': Permission denied
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
find: `/home/me/testfiles': Permission denied
find: `/home/me/data': Permission denied
/home/me/water.jpg
find: `/home/me/.cache': Permission denied

При наличии слишком большого количества сообщений об отказе в доступе в конце команды можно добавить 2 >/dev/null. Это перенаправляет сообщения об ошибках на устройство /dev/null и выдает чистые выходные данные:

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/me/hello.jpg
/home/me/water.jpg

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

С помощью ключевого слова -type можно искать файлы по типу. Типы файлов могут быть:

f plain files
d directories
l symbolic links
b block devices
c character devices
p named pipes
s sockets

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

$ find . -type d
.
./.ssh
./.cache
./moodle

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

Возможно, потребуется выполнить поиск больших файлов и удалить их. В следующем примере за после ключевого слова -size следует строка 1G. Это приведет к поиску всех файлов размером более 1 ГБ.

$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

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

За номером следует единица измерения размера файла. Единицами измерения могут быть:

  • b - Блоки по 512 байтов
  • c - Байты
  • k - Килобайты
  • M - Мегабайты
  • G - Гигабайты

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

Используйте параметр -empty для поиска пустых каталогов и файлов:

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

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

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

$ find . -cmin -60
.
./a.txt
./datafiles

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

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

Поиск файлов можно выполнить по времени последнего доступа с помощью ключевого слова -atime. Например, следующая команда выполняет поиск файлов, доступ к которым не осуществлялся за последние 180 дней:

$ find . -atime +180

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

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

С помощью параметра -user username можно искать все файлы и каталоги, принадлежащие конкретному пользователю. Например, следующая команда выполняет поиск всех файлов и каталогов, принадлежащих пользователю ubuntu в каталоге /home:

$ find /home -user ubuntu 2>/dev/null
/home/ubuntu
/home/ubuntu/.bash_logout
/home/ubuntu/.bashrc
/home/ubuntu/.ssh
/home/ubuntu/.profile

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

Хотите найти файлы с определенным режимом доступа, то есть имеющие определенный набор разрешений? Используйте ключевого слова -perm. В следующем примере выполняется поиск файлов с разрешениями 777:

$ find /home -perm 777

Операторы

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

  • -and
  • -or
  • -not

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

$ find /home  -user me  -and  -size +100M  2>/dev/null
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

Следующая команда ищет файлы, размер которых превышает 100MB, принадлежащие пользователю me или пользователю vagrant:

$ find /home ( -user vagrant -or -user me )  -and  -size +100M  2>/dev/null
/home/vagrant/LibreOffice_7.0.1_Linux_x86-64_deb.tar.gz
/home/me/kali-linux-2020.3-installer-netinst-i386.iso

Необходимо поместить символ обратной косой черты перед скобками, чтобы предотвратить попытку их интерпретации оболочкой.


Действия

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

  • -delete - Удаление файлов, соответствующих критериям поиска
  • -ls - Отображение подробных выходных данных ls с размерами файлов и количеством входов
  • -print - Показывает полный путь к соответствующим файлам. Это действие по умолчанию, если не указано другое действие
  • -exec - Выполняет следующую команду в каждой строке результатов поиска

Итак, если вы хотите найти все пустые файлы и удалить их, вы можете сделать это следующим образом:

$ find . -empty -delete
Внимание! Перед использованием действия удаления всегда безопасно выполнить команду один раз с действием -print и подтвердить результаты.

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

-exec command {} ;

Здесь

  • command – команда, которую требуется выполнить в результатах поиска, например, rm, mv или cp.
  • {} – представляет результаты поиска.
  • Команда заканчивается точкой с запятой с обратной косой чертой.

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

$ find . -empty -exec rm {} ;

Вот еще один пример использования действия -exec. Следующая команда копирует все PNG-файлы образов в каталог backup/images:

$ find . -name "*.png" -exec cp {} /backups/images ;

Заключение

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

После того, как вы освоите команду find, она может помочь вам и упростить задачи системного администрирования. И ключ к его освоению - это его практика и использование!

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Системное администрирование
Скидка 10%
Администратор Linux
Стань Linux администратором и сделай весомый шаг в сторону карьеры в DevOps. Самые важные знания от сертифицированного и практикующего тренера с 20 летним стажем
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Fail2ban — это программное обеспечение, которое защищает ваш сервер от атак. ПО отслеживает журналы сервера и выявляет любую под
img
Виртуализация серверов — популярная тема в мире ИТ, особенно на уровне предприятий. Она позволяет разным операционным системам з
img
  Введение Системные вызовы выступают в роли посредников между приложениями и ядром. Они создают уровень абстракции, который защ
img
  Введение SWAP (SWAP-память или SWAP-пространство) – это раздел жесткого диска или SSD компьютера, где операционная система (ОС
img
  Введение Абсолютные и относительные пути определяют расположение файла или каталога в файловой системе. Это набор инструкций д
img
  Введение Файлы конфигурации Linux определяют поведение и функциональное наполнение операционной системы. Файлы конфигурации –
21 ноября
20:00
Бесплатный вебинар
Введение в Docker