Кожне оточення робочого столу в Linux має вбудований інструмент пошуку файлів та каталогів. Якщо за замовчуванням такий інструмент відсутній, то його можна встановити самостійно.
Пошук файлів через графічний інтерфейс
Головне меню
За допомогою головного меню ОС ви можете не тільки шукати та запускати програми, але й виконувати пошук файлів. Подібний функціонал присутній у багатьох оточеннях робочого столу (KDE, GNOME, Xfce та ін.). Наприклад, у KDE це представлено наступним чином:

При цьому варто зазначити, що такий варіант пошуку орієнтований більше на пошук програм, ніж на пошук файлів, тому він виконується тільки в домашньому каталозі та не йде вглиб файлової системи.
Файлові менеджери
Багато файлових менеджерів також надають можливості пошуку файлів. Наприклад, у Dolphin для запуску пошуку достатньо просто натиснути кнопку зі значком лупи, а потім ввести ім’я файлу (або каталогу) у рядок пошуку. При цьому ви можете вибрати каталог, в якому виконуватиметься пошук, а також вказати додаткові параметри (пошук за вмістом та ін.). Крім цього як пошуковий запит допускається використовувати символи ? та *:

Пошук за вмістом у Dolphin:
KFind
У KDE, крім вищезазначених інструментів пошуку, також є чудова утиліта під назвою KFind. З її допомогою можна точно налаштувати параметри пошуку (вказати ім’я файлу, його тип і шлях пошуку, звичайний текстовий пошук або мета-пошук, дату зміни, розмір, користувача, групу тощо). Вона також дозволяє зберігати результати пошуку у вигляді простого текстового списку URL-адрес знайдених файлів:
SearchMonkey
SearchMonkey дозволяє виконувати пошук файлу, як за ім’ям, так і за його вмістом, по діапазону дат та ін. Але головна перевага SearchMonkey — це можливість використовувати регулярні вирази.

Пошук із застосуванням регулярного виразу в SearchMonkey:
Recoll
Recoll — це програма для повнотекстового пошуку, що виконує пошук даних за вмістом, а не за зовнішніми атрибутами (наприклад, за ім’ям файлу). Вам не потрібно запам’ятовувати, у якому файлі чи повідомленні електронної пошти ви зберігали ту чи іншу інформацію. Необхідно лише вказати слова (або вирази), які повинні або не повинні бути присутніми в тексті, і натомість ви отримаєте список відповідних документів, упорядкованих таким чином, що першими будуть найбільш релевантні з них (подібно до пошукових систем Інтернету).
Встановити програму можна з офіційних репозиторіїв через командний рядок:
sudo apt-get install recoll
Або через графічний інтерфейс:

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

Це зручно під час роботи з великим обсягом текстових даних. Програма підтримує такі формати файлів, як: .pdf, .djvu, .doc, .docx, .odf. А також вміє знаходити перелічені файли в архівах.
Пошук файлів через термінал. Команда find
Команда find — здійснює пошук файлів та каталогів на основі заданого користувачем виразу і може виконувати вказані користувачем дії над кожним знайденим файлом.
Ви можете використовувати команду find для пошуку файлів та каталогів на основі їх дозволів, типу, дати, власника, розміру та іншого. Вона також може бути поєднана з іншими інструментами, такими як grep або sed.
Загальний синтаксис команди find має наступний вигляд:
find [опції] [шлях] [вираз]
Розберемо детально:
опції — аргументи, які керують обробкою символьних посилань, параметрами відлагодження та методом оптимізації;
шлях — початковий каталог (або каталоги), у яких команда find шукатиме файли;
вираз — складається з параметрів, шаблонів пошуку та дій, розділених операторами.
Для пошуку файлів у каталозі користувач, що використовує команду find, повинен мати дозволи на читання у цьому каталозі.
Розглянемо наступний приклад:
find -L /var/www -name "*.js"
Тут:
опція -L — вказує команді find слідувати за символьними посиланнями;
шлях /var/www — задає каталог, у якому виконуватиметься пошук;
вираз -name "*.js" — повідомляє команді find шукати файли, що закінчуються на .js (розширення JavaScript-файлів).
Пошук файлів за іменем
Пошук файлів за іменем, ймовірно, є найпоширенішим застосуванням команди find. Щоб знайти файл за іменем, використовуйте опцію -name, за якою вказується ім’я файлу.
Наприклад, для пошуку файлу document.pdf в каталозі /home/linuxize можна використати наступну команду:
find /home/linuxize -type f -name document.pdf
Щоб здійснити пошук без врахування регістру, замініть -name на -iname:
find /home/linuxize -type f -iname document.pdf
Критеріям пошуку вищенаведеної команди відповідатимуть як Document.pdf, так і DOCUMENT.pdf тощо.
Пошук файлів за розширенням
Пошук файлів за розширенням аналогічний пошуку файлів за іменем. Наприклад, щоб знайти всередині каталогу /var/log/nginx всі файли, які закінчуються на .log.gz, необхідно виконати:
find /var/log/nginx -type f -name '*.log.gz'
Важливо зазначити, що шаблон пошуку необхідно взяти в одинарні лапки, або екранувати символ зірочки * бекслешем \, щоб при використанні підстановочного знаку він не інтерпретувався командною оболонкою.
Щоб знайти всі файли, які не відповідають регулярному виразу *.log.gz ви можете використати опцію -not. Наприклад, щоб знайти всі файли, які не закінчуються на *.log.gz:
find /var/log/nginx -type f -not -name '*.log.gz'
Пошук файлів за типом
Іноді вам може знадобитися пошук файлів певного типу: звичайні файли, каталоги або символьні посилання. У Linux, як ви пам’ятаєте, все є файлом.
Для пошуку файлів за їх типом використовується параметр -type та один із наступних ідентифікаторів для вказівки типу файлу в Linux:
f — звичайний файл;
d — каталог;
l — символьне посилання;
c — символьні пристрої;
b — блокові пристрої;
p — іменований канал (FIFO);
s — сокет.
Наприклад, щоб знайти всі каталоги у поточному робочому каталозі, використовуйте:
find . -type d
Пошук файлів за розміром
Для пошуку файлів за вказаним розміром необхідно додати параметр -size. Вказівка розміру відбувається за допомогою наступних суфіксів:
b — 512-байтові блоки (за замовчуванням);
c — байти;
w — двобайтові слова;
k — кілобайти;
М — мегабайти;
G — гігабайти.
Наступна команда знайде всі файли розміром 1024 байти в каталозі /tmp:
find /tmp -type f -size 1024c
Команда find також дозволяє шукати файли, розмір яких більший або менший від заданого.
У наступному прикладі ми шукаємо у поточному робочому каталозі всі файли розміром менше ніж 1 МБ. Зверніть увагу на символ - перед значенням розміру:
find . -type f -size -1M
Якщо ви хочете здійснити пошук файлів розміром більше ніж 1 МБ, то потрібно використовувати символ +:
find . -type f -size +1M
Ви можете навіть шукати файли в межах діапазону розмірів. Наступна команда знайде усі файли розміром від 1 до 2 МБ:
find . -type f -size +1M -size 2M
Пошук файлів за датою зміни
Команда find також може виконувати пошук файлів на основі дати їх останньої зміни або часу доступу до них. Так само як і під час пошуку за розміром, використовуйте символи + або - для критеріїв “більше” або “менше”.
Припустимо, кілька днів тому ви змінили один із конфігураційних файлів dovecot, але забули, який саме. Ви можете легко відфільтрувати всі файли в каталозі /etc/dovecot/conf.d, які закінчуються на .conf та були змінені за останні п’ять днів:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Ось ще один приклад фільтрації файлів на основі дати зміни за допомогою параметра -daystart. Наступна команда виведе список усіх файлів у каталозі /home, які були змінені 30 або більше днів тому:
find /home -mtime +30 -daystart
Пошук файлів за правами доступу
Параметр -perm дозволяє виконувати пошук файлів на основі прав доступу до них.
Наприклад, щоб знайти всередині каталогу /var/www/acode всі файли з розширенням 644, ви можете використати:
find /var/www/acode -perm 644
Розглянемо наступний приклад команди:
find . -perm /444
Тут ми знайдемо всі файли з дозволами на читання для користувача, групи чи інших користувачів.
Якщо ж в якості префіксу використовується символ -, то у знайдених файлів повинні збігатися всі вказані біти. Наступна команда шукатиме файли, які мають дозвіл на читання та запис для власника та групи та доступні для читання іншими користувачами:
find . -perm -664
Пошук файлів за власником
Щоб знайти файли, які належать певному користувачеві або групі, використовуються параметри -user та -group.
Наприклад, для пошуку всіх файлів та каталогів, що належать користувачеві acode, ми можемо виконати команду:
find / -user acode
Ось ще один приклад. Припустимо, ми хочемо знайти всі файли, що належать користувачеві www-data, та змінити власника відповідних файлів з www-data на nginx:
find / -user www-data -type f -exec chown nginx {} \;
Пошук та видалення файлів
Щоб видалити всі файли, які співпадають з пошуковим запитом, необхідно в кінець пошукового запиту додати опцію -delete.
Перш за все, переконайтеся, що ви використовуєте цю опцію тільки тоді, коли впевнені, що результат пошуку співпадає з файлами, які ви дійсно хочете видалити. Завжди корисно попередньо вивчати список файлів, які потенційно видаляються, перед використанням опції -delete.
Наприклад, щоб видалити з каталогу /var/log/ всі файли, що закінчуються на .temp, використовується наступний набір команд:
find /var/log/ -name *.temp -delete
Попередження: Використовуйте опцію -delete з особливою обережністю. Команда find обчислюється як вираз, і якщо ви додасте опцію -delete на початок даного виразу, то команда видалить все у вказаних вами каталогах.
Коли справа доходить до каталогів, команда find, як і команда rmdir, може видаляти лише порожні каталоги.
Запис результатів пошуку в файл
Якщо ви заздалегідь знаєте, що пошук поверне велику кількість знайдених об’єктів, або хочете зберегти результат пошуку для подальшого неспішного ознайомлення з ним, то вам допоможе команда, що записує знайдену інформацію у файл:
find /etc -type f -name "*.conf" > conf_search
Тут здійснюється пошук у каталозі /etc всіх файлів, що мають розширення .conf, та результат записується у файл conf_search.
Пошук файлів через термінал. Команда locate
Команда locate вважається застарілою, тому що вона виконує пошук не в реальному часі, подібно до команди find, а лише за раніше створеною базою файлів. Ви вводите слово, яке вас цікавить, і команда видає всі відомі їй файли, імена яких містять вказане слово. Команда locate підтримує роботу з регулярними виразами. Наприклад, щоб знайти всі файли, в імені яких міститься слово users, необхідно виконати:
locate users
Варто зауважити, що якщо файл з’явився в системі після створення бази файлів, то він не буде знайдений.
Іноді вам може знадобитися оновити базу даних, до якої звертається locate. Для цього необхідно ввести команду updatedb (її запуск здійснюється від імені суперкористувача):
sudo updatedb
Пошук файлів через термінал. Команда grep
Команда grep може використовуватися не лише у ролі фільтра для інших команд, а й здійснювати пошук файлів. Для цього необхідно задати параметр -r та вказати каталог, в якому потрібно шукати текст. Припустимо, що ми хочемо знайти у каталозі /var/log всі файли, які містять рядок error:
sudo grep -r "error" /var/log
За допомогою команди grep досить легко проводити пошук потрібної конфігурації або ж перевіряти, чи не містять файли з кодом чогось підозрілого.
Пошук файлів через термінал. Команда whereis
Команда whereis виконує лише одне завдання — показує розташування виконуваного файлу, переданого їй в якості параметра. Наприклад, для того, щоб дізнатися, де знаходиться виконуваний файл команди uname, достатньо виконати:
whereis uname



