- Как пользоваться командой find
- Синтаксис
- Примеры
- Список папок и файлов директории
- Искать в домашнем каталоге пользователя
- Дата модификации
- Поиск файла в директории с помощью критерия «по имени»
- Поиск файлов определённого размера
- Поиск файлов определённом диапазоне размеров
- Действие
- Поиск документов в нескольких директориях
- Без учета регистра, используя критерий «по имени»
- Поиск файлов, которые отличаются от упомянутых
- По большому количеству критериев
- Использование оператора
- Права доступа
- Ищем все скрытые файлы
- Поиск всех файлов группы
- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
Как пользоваться командой find
Каждый пользователь желает быстро и без особых затруднений находить требуемую информацию. Существует большое количество типов файловых менеджеров, которые имеют отличную функциональность. Одним из самых лучших является терминал Linux. Он отличается высокой эффективностью и хорошей гибкостью.
С помощью терминала Linux можно без особого труда найти требуемые файлы не только по имени, но и по дате их обновления. Для поиска еще можно указать содержимое и различные регулярные выражения. Терминалом очень удобно пользоваться, так как с найденными данными сразу же можно осуществлять определенные действия.
Синтаксис
«find»- это одна из самых популярных и особенно важных утилит, которая устанавливается в операционной системе Линукс. Такая команда дает возможность быстро находить различные файлы и каталоги путем использования специальных условий. Она ищет требуемые данные по разрешению, собственнику, группе, объему, типу и иным условиям.
Данная утилита установлена «по умолчанию» в каждом дистрибутиве ОС Linux. Пользователю нет необходимости монтировать на ПК какие-либо дополнительные пакеты. Такая особенность позволяет максимально эффективно пользоваться командными строками.
find [директория] [опции][критерии поиска](операторы) [действия]
- Директория. Это путь, где поиск ищет требуемую информацию.
- Опции. Здесь можно ввести дополнительные аргументы, а также настроить глубину.
- Критерий. Перед поиском требуется определиться с критерием, с помощью которого будут найдены данные. К критериям относится имя файла, дата его создания, владелец, права и многое другое.
- Операторы. Используются для объединения критериев поиска.
- Действия. Устанавливаются предварительно. С их помощью отбираются нужные файлы.
- -L — опция указывает, что нужно переходить по символическим ссылкам.
- -P — указывает, что по символическим ссылкам не переходить.
- -depth или -d — искать в директории в которой находишься, а также в подкаталогах.
- -print — выводить на экран полные имена документов.
- -type d — опция type показывает какой тип искать, буква d указывает на каталоги.
- —type f — буква f указывает на поиск файлов.
- -version — информация о версии утилиты.
- -size — размер.
- -name — искать по имени.
- -group — искать по группе.
- -nogroup — файлы, которые не относятся ни к одной группе.
- -mtime — поиск по дате изменения документа.
- -atime — искать по дате чтения.
- -user — владелец документа.
ВАЖНО! Критерии можно объединять используя операторы.
- -exec команда \; — запустить команду
- -ls — выполнить ls.
Примеры
Утилита, которая имеется практически во всех версиях Линукс, дает возможность быстро найти требуемую информацию. Для этих целей предварительно вводятся критерии поиска. Пользоваться командой можно по-разному, так как у нее много опций. Рассмотрим примеры.
Список папок и файлов директории
Чтобы вывести все списки файлов, потребуется набрать название команды без параметров.
Имеется и альтернативный вариант – «find .».
Для обнаружения файлов в конкретной директории требуется в терминале набрать название утилиты и путь. Например /var/log
Искать в домашнем каталоге пользователя
Чтобы найти именно те файлы, которые относятся к определённому пользователю, нужно ввести команду
Дата модификации
Чтобы найти документы по дате, необходимо использовать критерии «mtime, atime».
- mtime — модификация.
- atime — чтение.
Найдем все файлы в каталоге /home, которые открывались 120 дней назад.
find /home -atime 120
Почти тоже самое будет, если нужно найти документы, которые изменялись 120 дней назад.
find /home -mtime 120
Поиск файла в директории с помощью критерия «по имени»
Чтобы найти файл по имени в требуемой директории необходимо использовать опцию «-name».
find /var/log -name «test.log»
Она в считанные секунды найдет файл «test.log». Одновременно с этим, будут показаны все данные, имеющие расширение «.log».
Поиск файлов определённого размера
Если требуется найти файл, размер которого известен пользователю, вводится -size с указанием размера.
Поиск файлов определённом диапазоне размеров
Если пользователь знает ориентировочный размер документа, критерий также можно указать во время поиска.
find / -size +12M -size -25M
Действие
Выполним команду ls в каталоге run, для документов, которые изменялись 150 дней назад. Будем использовать действие «ls».
find /run -mtime 150 -type f -ls
Запустим утилиту ls, в каталоге home, для файлов больше 5000 байт.
find /home -size +5000c -type f -exec cat\;
Поиск документов в нескольких директориях
Чтобы выполнить такой поиск, необходимо вводить пути директорий через пробел. Например /var /home.
find /var /home -name «file.txt»
Она дает возможность найти файл с именем «file.txt» в директориях формата «/var» и «/home».
Без учета регистра, используя критерий «по имени»
Найдем документ test.txt без учета регистра в каталоге /home. Для этого, будем использовать «iname».
find /home -iname «test.txt»
В итоге на экране вашего монитора появятся файлы, имеющие название «test.txt». Их может быть более двух.
Поиск файлов, которые отличаются от упомянутых
Зачастую пользователю нужно найти определенные данные, которые отличаются от определённого типа файлов. Для этих целей необходимо использовать оператор «-not» для отрицания.
find /root -not -name «*.txt»
По большому количеству критериев
Во время установки параметров поиска можно вводить несколько признаков. К примеру, если требуется найти файлы, имеющие расширение «.txt» и «.html», нужно ввести команду
$ find /var -regex «.*\.\(txt\|html\)$»
Использование оператора
Допускается одновременное совмещение нескольких критериев. Система обнаружит информацию, которая будет удовлетворять одному из условий. Для этих целей потребуется использование одного из операторов or (или), and (и), not (отрицание не).
find /var/log/exim4 -name «*.txt» -оr -name «test*»
Права доступа
Чтобы найти документ с определенными правами, используется критерий поиск -perm.
find /var/log -type f -perm 777
Почти тоже самое будет для папок с правами 777.
find /var/log -type d -perm 777
Поиск документов, у которых есть право на исполнение.
find /var/log -type f -perm /a=x
Найдем файлы в каталоге run, у которых есть право читать.
find /run -perm /u=r
Ищем все скрытые файлы
Для обнаружения скрытых файлов в директории необходимо ввести:
find /etc -type f name «.*»
Поиск всех файлов группы
Чтобы найти файлы, которые относятся к определённой группе, необходимо указать аргумент «group».
find /run -group apache
Существует множество способов применения find. Выше описаны лишь некоторые примеры, которые демонстрируют широкую функциональность утилиты.
Источник
Поиск в Linux с помощью команды find
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
— набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-name | Поиск по имени. |
-iname | Регистронезависимый поиск по имени. |
-type | |
-size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). |
-mtime | Время изменения файла. Указывается в днях. |
-mmin | Время изменения в минутах. |
-atime | Время последнего обращения к объекту в днях. |
-amin | Время последнего обращения в минутах. |
-ctime | Последнее изменение владельца или прав на объект в днях. |
-cmin | Последнее изменение владельца или прав в минутах. |
-user | Поиск по владельцу. |
-group | По группе. |
-perm | С определенными правами доступа. |
-depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. |
-maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. |
-prune | Исключение перечисленных каталогов. |
-mount | Не переходить в другие файловые системы. |
-regex | По имени с регулярным выражением. |
-regextype | Тип регулярного выражения. |
-L или -follow | Показывает содержимое символьных ссылок (симлинк). |
-empty | Искать пустые каталоги. |
-delete | Удалить найденное. |
-ls | Вывод как ls -dgils |
Показать найденное. | |
-print0 | Путь к найденным объектам. |
-exec <> \; | Выполнить команду над найденным. |
-ok | Выдать запрос перед выполнением -exec. |
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
find / -name «file.txt»
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/\(sess_.*cd\)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name «*.log»
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).
а) дате изменения:
find . -type f -newermt «2019-11-02 00:00»
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
б) дате обращения:
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
в) дате создания:
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
find / -perm 0666
2. Находим файлы, доступ к которым имеет только владелец:
find / -perm 0600
Поиск файла по содержимому
find / -type f -exec grep -i -H «content» <> \;
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name «sess_*» -type f -print -exec rm <> \;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name «sess_*» -type f -exec mv <> new_name \;
find . -name «sess_*» -type f | xargs -I ‘<>‘ mv <> new_name
3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name «*.tmp» | wc -l
4. Изменить права:
find /home/user/* -type d -exec chmod 2700 <> \;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Источник