Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний 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.