Використання find і locate для пошуку файлів на сервері linux

Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!

Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив

- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I

Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!

Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!

Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!

Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.

Задайте питання в службу підтримки 24/7/365

Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями

Починаючи роботу з сервером Linux, користувачі часто стикаються з проблемою пошуку необхідних файлів.

Даний посібник розглядає використання відповідної команди find, яка дозволяє шукати файли за допомогою різних фільтрів і параметрів. Крім того, це керівництво коротко охоплює команду locate, яку можна бути використовувати для пошуку команд.

Пошук по імені файлу

Звичайно, пошук файлу по імені - найочевидніший спосіб знайти потрібний файл.

Для цього використовуйте:

find -name "query"

Дана команда чутлива до регістру (тобто, вона сприймає файли з ім'ям file і File як два різних файлу).

Щоб знайти файл на ім'я без урахування регістру, наберіть:

find -iname "query"

Щоб знайти файли, які не збігаються з певним шаблоном, потрібно інвертувати пошук за допомогою прапорів -not або метасимвола «!». Зверніть увагу, при використанні «!» Потрібно уникати символів, щоб оболонка bash НЕ інтерпретувала «!» Ще до виконання команди find.

find -not -name "query_to_avoid"

find \! -name "query_to_avoid"

Пошук за типом файлу

За допомогою параметра «-type» можна вказати тип необхідного файлу. Це працює так:

find -type type_descriptor query

Ось список загальних дескрипторів, за допомогою яких можна вказати тип файлу:

Наприклад, щоб знайти в системі все символьні пристрої, потрібно виконати команду:

find / -type c
/ Dev / parport0
/ Dev / snd / seq
/ Dev / snd / timer
/ Dev / autofs
/ Dev / cpu / microcode
/ Dev / vcsa7
/ Dev / vcs7
/ Dev / vcsa6
/ Dev / vcs6
/ Dev / vcsa5
/ Dev / vcs5
/ Dev / vcsa4
.

Щоб знайти всі файли, які закінчуються на .conf, використовуйте:

find / -type f -name "* .conf"
/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf
/usr/share/base-files/nsswitch.conf
/usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf
/usr/share/rsyslog/50-default.conf
/usr/share/adduser/adduser.conf
/usr/share/davfs2/davfs2.conf
/usr/share/debconf/debconf.conf
/usr/share/doc/apt-utils/examples/apt-ftparchive.conf
.

Фільтрація за часом і розміром

Команда find дозволяє фільтрувати отриманий результат, керуючись розміром і часом останньої зміни.

розмір файла

Щоб відфільтрувати файли за розміром, використовуйте параметр -size.

Також потрібно внести суфікс в кінці значення, щоб вказати розмір:

Щоб знайти файли розміром рівно в 50 байт, наберіть:

Щоб знайти файли, розмір яких менше 50 байт, використовуйте символ «-» перед значенням:

Відповідно, щоб знайти файли, розмір яких перевищує 700 мегабайт, використовуйте перед значенням символ +; команда має такий вигляд:

find / -size + 700M

Пошук в залежності від часу

Linux зберігає дані про access time, modification time і change time.

Для фільтрації файлів за часом використовуйте параметри «-atime», «-mtime» і «-ctime» відповідно.

Значення даного параметра вказує, скільки днів назад був змінений файл. Як і у випадку з розміром файлу, можна використовувати символи - і +, щоб отримати файли, змінені менше ніж або більше ніж n днів тому.

Тобто, щоб знайти файл, вміст якого було змінено 1 день назад, використовуйте:

Щоб вивести файли, до яких зверталися менше 1 дня назад, використовуйте:

Щоб знайти файли, иноді яких були змінені більше трьох днів назад, введіть:

Існують також супутні параметри, за допомогою яких можна вказати хвилини замість днів:

Крім того, команда find може порівнювати файли і виводити новіші з них:

find / -newer myfile

Пошук по власнику і привілеїв

За допомогою команди find файли можна шукати по власнику або прав на файл.

Для того використовуються параметри -user, -group, і -perm відповідно. Наприклад, щоб знайти файл, який належить користувачеві з ім'ям syslog, наберіть:

find / -user syslog

Аналогічно, щоб вивести файли, що належать групі shadow, використовуйте:

find / -group shadow

Також можна шукати файли з особливими привілеями.

Щоб знайти файл з певними правами, використовуйте:

Цей рядок виведе всі файли з такими правами.

Щоб вивести всі файли, привілеї яких більше або дорівнюють зазначеним, використовуйте синтаксис:

Це поверне всі файли з додатковими привілеями (наприклад, файл з привілеями 744).

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

Щоб виконати приклади даного розділу, створіть в тимчасовому каталозі структуру каталогів. Вона повинна складатися з трьох рівнів каталогів, з десятьма каталогами на першому рівні. Кожен каталог (в тому числі тестовий каталог) повинен містити десять файлів і десять підкаталогів.

Щоб створити таку структуру, виконайте наступну команду:

Щоб ознайомитися з тільки що створеною структурою і перевірити, чи всі створено правильно, використовуйте команди ls і cd. Потім поверніться в тестовий каталог test:

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

find -name file1
./ Level1dir7 / level2dir8 / level3dir9 / file1
./ Level1dir7 / level2dir8 / level3dir3 / file1
./ Level1dir7 / level2dir8 / level3dir4 / file1
./ Level1dir7 / level2dir8 / level3dir1 / file1
./ Level1dir7 / level2dir8 / level3dir8 / file1
./ Level1dir7 / level2dir8 / level3dir7 / file1
./ Level1dir7 / level2dir8 / level3dir2 / file1
./ Level1dir7 / level2dir8 / level3dir6 / file1
./ Level1dir7 / level2dir8 / level3dir5 / file1
./ Level1dir7 / level2dir8 / file1
.

Ця команда вивела досить об'ємний результат. Передавши цей результат в лічильник, можна побачити, що в результаті виведено 1111 файлів.

find -name file1 | wc -l
1111

Звичайно, в більшості випадків цей висновок дуже об'ємний і незручний. Спробуйте звузити його.

Для цього можна використовувати параметр -maxdepth, щоб задати максимальну глибину пошуку:

find -maxdepth num -name query

Щоб знайти file1 в каталогах level1 і вище, вкажіть максимальну глибину 2 (1 для каталогу верхнього рівня і 1 для каталогів level1).

find -maxdepth 2 -name file1
./ Level1dir7 / file1
./ Level1dir1 / file1
./ Level1dir3 / file1
./ Level1dir8 / file1
./ Level1dir6 / file1
./ file1
./ Level1dir2 / file1
./ Level1dir9 / file1
./ Level1dir4 / file1
./ Level1dir5 / file1
./ Level1dir10 / file1

Як бачите, цей результат має набагато більш зручний вид.

Крім того, можна вказати мінімальну глибину пошуку:

find -mindepth num -name query

Це використовується для пошуку файлів, які знаходяться в кінці гілок каталогу:

find -mindepth 4 -name file
./ Level1dir7 / level2dir8 / level3dir9 / file1
./ Level1dir7 / level2dir8 / level3dir3 / file1
./ Level1dir7 / level2dir8 / level3dir4 / file1
./ Level1dir7 / level2dir8 / level3dir1 / file1
./ Level1dir7 / level2dir8 / level3dir8 / file1
./ Level1dir7 / level2dir8 / level3dir7 / file1
./ Level1dir7 / level2dir8 / level3dir2 / file1
.

Знову ж таки, даний результат буде містити величезну кількість файлів (1000).

Максимальну і мінімальну глибину пошуку можна комбінувати, щоб зменшити діапазон пошуку:

find -mindepth 2 -maxdepth 3 -name file
./ Level1dir7 / level2dir8 / file1
./ Level1dir7 / level2dir5 / file1
./ Level1dir7 / level2dir7 / file1
./ Level1dir7 / level2dir2 / file1
./ Level1dir7 / level2dir10 / file1
./ Level1dir7 / level2dir6 / file1
./ Level1dir7 / level2dir3 / file1
./ Level1dir7 / level2dir4 / file1
./ Level1dir7 / file1
.

Виконання і об'єднання команд

Утиліта find дозволяє виконувати будь-яку допоміжну команду на всі знайдені файли; для цього використовується параметр -exec. Базовий синтаксис виглядає так:

find параметри_поіска -exec команда_і_параметри <> \;

символи <> використовуються як заповнювач для знайдених файлів. Символи \; використовуються для того, щоб find могла визначити, де закінчується команда.

Для прикладу можна знайти файли з привілеями 644 (як в попередньому розділі) і змінити їх привілеї на 664:

/ test
find. -perm 644 -exec chmod 664 <> \;

Потім можна змінити привілеї каталогу:

find. -perm 755 -exec chmod 700 <> \;

Щоб зв'язати кілька результатів, використовуйте команди -and або -or. Команда -and передбачається, якщо вона опущена.

find. -name file1 -or -name file9

Пошук файлів за допомогою команди locate

Команда locate є альтернативою для find. Дана команда, як правило, працює швидше і може легко проводити пошук по всій файлової системи.

Встановити цю команду можна за допомогою з apt-get:

sudo apt-get update
sudo apt-get install mlocate

Але чому команда locate швидше, ніж find? Справа в тому, що locate залежить від бази даних файлів в файлову систему.

Як правило, cron-скрипт оновлює цю базу даних раз в день; але її можна оновити і вручну. Запустіть цю команду:

Запам'ятайте: БД потрібно регулярно оновлювати, щоб вона містила актуальні дані; в іншому випадку знайти недавно отримані або створені файли буде неможливо.

Щоб знайти файли за допомогою команди locate, просто використовуйте наступний синтаксис:

Отриманий результат також можна фільтрувати.

Наприклад, щоб повертати тільки файли, що містять сам запит, замість того щоб виводити кожен файл, який містить запит в провідних до нього каталогах, можна використовувати прапор -b (щоб шукати тільки basename, базове ім'я файлу):

Щоб команда locate повертала тільки файли, які все ще існують в файлової системі (тобто, файли, які не були видалені в проміжку між останнім запуском updated і поточним викликом locate), використовуйте прапор -е:

locate -S
Database /var/lib/mlocate/mlocate.db:
3,315 directories
37,228 files
1,504,439 bytes in file names
594,851 bytes used to store database

Команди find і locate - відмінні інструменти для пошуку файлів в UNIX-подібних операційних системах. Кожна з цих утиліт має свої переваги.

Незважаючи на те, що команди find і locate самі по собі дуже потужні, їх дію можна розширити, комбінуючи їх з іншими командами. Навчившись працювати з find і locate, спробуйте фільтрувати їх результати за допомогою команд wc, sort і grep.

Схожі статті