Команда «linux find» — как найти файл в Линукс

Управление и взаимодействие с операционной системой Линукс основано на командах. Сегодня есть и графические интерфейсы в различных дистрибутивах, но их использование не научит человека компьютерному мышлению и не разовьет память. Именно поэтому при переходе на любую Unix-подобную операционную систему, необходимо учиться писать запросы и команды в терминале. Это значительно сокращает поиск нужных данных и выполнение расчетов. Одной из самых популярных команд является «find». Необходимо подробно рассмотреть, как осуществляется в Linux поиск файла с ее помощью.

Основные опции команды Linux find

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

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

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

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

Разница между locate и find Линукс

Многие новички часто спрашивают, почему в операционной системе Линукс есть две одинаковые команды: locate и find, ведь выполняют они одни и те же действия. Зачем использовать одну, если есть другая, и наоборот.

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

Команда locate делает все то же самое, но использует для поиска базу данных, которая была создана ранее (командой updatebd). Процедура нахождения файла или папки выполняется быстрее, но системе приходится пользоваться «старой» базой данных и искать имена или их части.

Для поиска по имени в Linux используют find name

Как найти все файлы только для чтения

Как уже было сказано, команда find более многофункциональна, чем locate. Она может выполнять поиск по операционной системе и жесткий дискам, руководствуюсь в качестве параметров и фильтров разрешениями, выданными конкретному пользователю (его учетной записи). Для этого используются специальные маски прав в восьмеричной и других системах исчисления. К примеру, для нахождения данных с маской прав 0664, необходимо выполнить команду «$find . type f -perm 0664» без кавычек (они добавлены для удобства отображения команд).

Для поиска файлов с установленными флагами suid/guid выполняют такую строку «$find / -perm 2644». А вот поиск файлов, которые доступны только для чтения, выглядит следующим образом: «$ find /etc -maxdepth 1 -perm /u=r».

Важно! Исполняемые файлы имеют такие же разрешения и по ним удобно проводить поиск. Пользуясь масками команды find, а не поиском по расширению. Для нахождения только исполняемых файлов прописывают и выполняют «$find /bin -maxdepth 2 -perm /a=x».

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

Есть возможность также воспользоваться специальным атрибутом, позволяющим выполнять поисковые работы по файлам, которые были открыты или отредактированы последний раз определенное время назад. В качестве единицы измерения времени выступает «день», который добавляется в качестве значения к атрибуту –atime. Команда выглядит так: «find / -atime 34» и ищет данные, доступ к которым осуществлялся ровно 34 дня назад.

Сортировка результатов по времени

Если данных найдено слишком много и они расположены в списке немного не так, как нужно для того, чтобы поиск нужных файлов был комфортным, то есть возможность предварительно  отсортировать результаты по времени. Для этого в команду добавляют параметр printf и пользуются программой sort. Выглядит это примерно так: «$ find /path/to/search -printf «%T+\t%p\n» | sort». Это будет упорядочивать данные от самых старых к самым новым. Чтобы поменять порядок добавляют ключ r: «$ find /path/to/search -printf «%T+\t%p\n» | sort r»

Найти файл на основе имени пользователя

В Linux найти файл по его владельцу или группе владельцев крайне просто. Для этого понадобится все та же команда. Для того чтобы искать все файлы с названием 1221.txt в корневом каталоге, принадлежащем пользователю с именем root, необходимо прописать «find / -user root -name 1221.txt».

Процедура использования locate мало чем отличается от find

Как отправить выход команде find в Linux

Проблема поиска через терминал состоит в том, что иногда файлов слишком много и выводится большой перечень результатов. Просмотреть их все порой не хватает сил. Вывод строки можно перенаправить tail или выводить результаты вы файл: «find / -name *.mp3 -fprint nameoffiletoprintto».

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

Простой рекурсивный поиск документов и данных в операционной системе Линукс может осуществляться без каких-либо дополнительных параметров. К примеру, чтобы найти документ по имени config в корневой папке, необходимо прописать «find / -name config –print».

Фильтрация файлов по глубине

По глубине ищут в тех случаях, когда документы точно находятся в каталогах, которые «лежат» в других папках. К примеру, каждый каталог (а всего их путь будет три уровня) содержит 10 файлов и 10 других подпапок Для создания подобной структуры необходимо выполнить команды:

cd

mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}

touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}

cd ~/test

Далее можно искать по имени (find -name file1) или выполнить фильтрацию по глубине (find -maxdepth 2 -name file1).

Работа с найденными файлами

Для того чтобы выполнять действия над найденными документами применяется find exec Linux. Чтобы получить подробную информацию по каждому результату, выполняют «$find . -exec ls -ld {} \;». Для удаления все текстовых типов во временную папку прописывают «$find /tmp -type f -name «*.txt» -exec rm -f {} \;». А для того чтобы, к примеру, удалить все данные, больше 50 мегабайт в объеме, выполняют «$ find /home/bob/dir -type f -name *.log -size +5M -exec rm -f {} \;».

Применение опции exec

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

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

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