25 примеров использования утилиты find

25 примеров использования утилиты find
Photo by Paul Zoetemeijer / Unsplash

Краткое описание find

Утилита find позволяет искать по:

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

Если файл был найден, то мы можем сделать следующее:

  • просмотреть или отредактировать
  • сохранить
  • удалить или переименовать
  • сменить права доступа
  • любое другое действие

Немного примеров:

Простой поиск

1. Поиск всех обычных файлов

$ find Symfony -type f
Symfony/web/.htaccess
Symfony/web/app.php
Symfony/web/app_dev.php
Symfony/web/robots.txt
...

2. Поиск всех каталогов

$ find Symfony -type d
Symfony/
Symfony/web
Symfony/web/bundles
Symfony/web/bundles/webprofiler
...

3. Поиск по имени файла или каталога

$ find Symfony -name '*config*';
Symfony/app/config
Symfony/app/config/config_prod.yml
Symfony/app/config/config.yml
...

4. Поиск по имени (регистронезависимый)

$ find Symfony -iname '*config*';
...
Symfony/.../Loader/ConfigurationLoader.php
Symfony/.../ConfigurationResource.php
...
Symfony/app/config
Symfony/app/config/config_prod.yml
Symfony/app/config/config.yml
...

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

5. Найти все файлы, размер которых 300MB

$ find . -size 300M

6. Найти все файлы, размер которых больше 300MB

$ find . -size +300M

7. Найти все файлы, размер которых меньше 300MBкаталоги

$ find . -empty

Поиск по дате

GNU/Linux хранит последнюю дату следующих операций:

Операция Значение Опции find
access чтение содержимого файла -atime, -amin
modification изменение контента файла -mtime, -mmin
change of status смена имени файла или атрибутов (права доступа, владелец, ...) -ctime, -cmin

Чтоб узнать даты файла можно использовать команду stat:

$ stat index.php
...
Access: 2016-06-02 22:53:22.813885684 -0500
Modify: 2016-05-08 12:12:12.971073193 -0500
Change: 2016-05-08 12:12:12.971073193 -0500

10. Найти файлы с датой доступа менее 15 дней назад

$ find . -atime -15

11. Найти модифицированные файлы более 7 дней назад

$ find . -mtime +7

12. Найти измененные файлы в промежутке от 2 до 6 минут назад

$ find . -cmin +2 -cmin -6

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

13. Найти файлы пользователя sedlav

$ find . -user sedlav -type f

14. Найти файлы, которые относятся к группе flossblog

$ find . -group flossblog -type f

15. Найти файлы, где владелец имет uid между 500 и 1000 (исключая 500 и 1000)

$ find . -uid +500 -uid -1000 -type f

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

16. Найти все файлы, которые не принадлежат ни одному пользователю

$ find . -nouser

17. Найти все файлы, которые не принадлежат ни одной группе

$ find . -nogroup

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

find позволяет искать файлы, которые может читать (-readable), писать
(-writable) или запускать (-executable) текущий пользователь или файлы,
которые имеют определенные права

18. Найти все файлы, которые может читать текущий пользователь

$ find . -readable

19. Найти все файлы, которые может записывать текущий пользователь

$ find . -writable

20. Найти все файлы, которые может запускать текущий пользователь

$ find . -executable

Поиск файлов с определенными правами доступа

-perm PMODE

  • PMODE может быть числовым или символьным
  • PMODE может иметь префикс / или -
  • Если PMODE не имеет префикса / или -, тогда права файла должны точно
    соответствовать PMODE
  • Если PMODE имеет префикс -, то права файла должны содержать PMODE
  • Если PMODE имеет префикс /, то права файла должны содержать любой из
    битов указанных в PMODE (символьные права не допустимы)
Права Числовое обозначение Символьное обозначение
Чтение 4 r
Запись 2 w
Запуск 1 x

Примеры:

21. Найти все файлы, владелец и группа которых имеют права на чтение и запись, а остальные могут только читать
$ find -perm 664
22. Найти все файлы, владелец и группа которых имеют права на чтение и запись, а остальные могут только читать

Примечание: - перед правами указывает на то, что будут найдены так же
все файлы с правами: 777, 666, 776

$ find . -perm -664
23. Найти все файлы, которые может модифицировать (записывать) любой пользователь
$ find . -perm /222

Расширенный поиск

24. Поиск на основе регулярных выражений по каталогам на 1 уровень ниже

Найти все каталоги одним уровнем ниже каталога project (не рекурсивный
поиск), которые не пусты, не оканчиваются на цифру, old backups, bkp или
содержат слова backup, copy, new с последующим одинм из символов -_. .

$ PATTERN='.*/((.*([0-9]|old|ba?c?ku?ps?))|(..*)|(copy|new|backup|back|)[-_.].*)$';
$ find project -maxdepth 1 -mindepth 1 -regextype posix-egrep ! -iregex  $PATTERN  ! -empty -type d 

25. Комбинируем find, xargs и grep

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

$ find project -name '*.php' -type f -print0 | xargs -0 grep -l ireg

Оригинал статьи

Read more

🔄 Своя Dropbox-альтернатива: Syncthing

🔄 Своя Dropbox-альтернатива: Syncthing

🧠 Зачем? Облачные сервисы — удобно, но: * не хочется платить Google/Dropbox за хранение своих файлов * хочется моментально синхронизировать фото, документы и заметки между устройствами * и делать это на своём сервере, без отправки данных «в облако» 👉 Решение — Syncthing: децентрализованный, зашифрованный, open source-синк между любыми устройствами. 🚀 Что ты получишь? * 📂 Автосинк папок между сервером,

🎧 Свой подкаст-сервер за 5 минут: Podgrab

🎧 Свой подкаст-сервер за 5 минут: Podgrab

✨ Зачем? Подкасты — отличный способ учиться, развлекаться и быть в курсе мира. Но что, если: * Хочется слушать подкасты офлайн * Хочется архивировать любимые шоу * Не устраивают сторонние сервисы, реклама и трекеры Решение: Podgrab — простой подкаст-граббер, который автоматически скачивает новые выпуски с любого RSS. А в связке с Audiobookshelf ты получаешь полноценный медиасервер.

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Безопасное управление конфигурациями в Ansible: Полное руководство по использованию rescue и always

Введение: Почему это важно В мире DevOps и системного администрирования существует простое правило: всё ломается. Особенно в самый неподходящий момент. Когда вы изменяете конфигурацию критического сервиса (например, Nginx), цена ошибки может быть очень высока — от простого даунтайма до потери данных. Ansible предлагает элегантное решение для безопасного внесения изменений через механизм

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Использование ~/.ssh/authorized_keys для управления входящими SSH-соединениями

Файл ~/.ssh/authorized_keys позволяет настроить команды, которые будут выполняться при входящих SSH-соединениях. Это полезный инструмент для управления доступом и обеспечения безопасности, особенно при работе с резервным копированием данных. Настройка резервного копирования с использованием authorized_keys В данном примере рассматривается использование authorized_keys для настройки резервного копирования базы данных Bacula