• Главная
  • Карта сайта
Не найдено

10 способів роботи з find

  1. простий пошук
  2. Пошук за розміром
  3. Пошук по власнику
  4. Пошук по групі-власнику
  5. Пошук з прав доступу
  6. Використання регулярних виразів
  7. Робота з часом
  8. Робота з хвилинами
  9. обмеження пошуку
  10. Дії над знайденими файлами
  11. наостанок

GNU find є однією з найбільш часто використовуваних програм. На перший погляд опції find і їх синтаксис виглядають злегка незрозумілими. Однак, трохи попрактикуватися з find, ви зможете швидко і без зусиль знаходити будь-який файл у вашій системі. Щоб допомогти вам почати працювати з find, розгляньте запропоновані десять способів її використання.

find,

Майте на увазі, що не всі версії find однакові, і та, яку ви використовуєте в Linux, буде відрізнятися від версій для Mac, BSD або Solaris. В основному синтаксис однаковий у всіх версіях, але місцями зустрічаються невеликі відмінності.

простий пошук

Давайте почнемо з простого. Якщо вам відоме ім'я файлу, але ви не знаєте точно в якому каталозі він розташований, синтаксис find буде гранично простий. Просто повідомте find ім'я шуканого файлу:

find -name имя_файла

Якщо файл існує, то find виведе вам список шляхів, в яких зустрічається ім'я зазначеного вами файлу. Виглдеть це буде приблизно так:

jzb @ kodos: ~ $ find -name filename ./projects/filename jzb @ kodos: ~ $

Пошук за розміром

Іноді при пошуку файлу буває потрібно використовувати його додаткові атрибути, як критерій пошуку, а не тільки ім'я. Наприклад, розмір файлу. Наприклад, коли у вашій системі закінчується вільне місце в якомусь дисковому розділі і вам необхідно дізнатися, які файли займають дорогоцінний дисковий простір. За допомогою find ви можете знайти такі файли і вже потім вирішити, за рахунок чого можна вивільнити необхідне дисковий простір.

Для такого випадку у find є опція -size, приймаюча як параметр розмір, який є критерієм пошуку. Розмір можна вказувати починаючи з байтів (b), закінчуючи гігабайтами (G). Наприклад, щоб виконати пошук файлів розміром 100 кілобайт, можна використовувати команду:

find -size 100k

Однак такий варіант може не підійти в нашому випадку. Найбільш сприятливим буде пошукати файли розмірів більше (або менше) заданого. Щоб виконати такий пошук, просто додайте «+» або «-» до розміру, і find буде шукати файли більшого або меншого розміру відповідно, ніж вказано. Наприклад, наступна команда знайде всі файли розмірів більше 100 кілобайт:

find -size + 100k

а ця - менш, ніж 100 кілобайт:

find -size -100k

Також, ви можете попросити find знайти всі порожні файли:

find -empty -type f

Зверніть увагу на зазначену опцію -type з параметром «f», яка вказує find шукати тільки звичайні файли. Якщо не вказати це, то find виведе також і порожні каталоги.

Пошук по власнику

Інший, часто використовуваний, варіант пошуку - пошук за належністю файлу якомусь користувачеві або навіть по його відсутності. Наприклад, ви перемістили якісь файли в іншу систему або ж видалили якогось користувача, ймовірно зробивши файли «сиротами». Відшукати такі файли-сироти можна простою командою:

find -nouser

Для пошуку файлів, що належать якомусь конкретному користувачеві, існують опції -user і -uid. Перша опція приймає як ім'я користувача, так і його ідентифікатор, а друга - тільки ідентифікатор. Наприклад, якщо мені потрібно буде знайти всі файли, власником яких я є, я скористаюся однієї з команд:

find -user jzb find -user 1000 find -uid 1000

Також, вам може знадобитися знайти файли належать користувачу А чи користувачу Б. Для цього необхідно об'єднати дві умови пошуку за допомогою оператора «-o»:

find -user root -o -user www-data

Така команда буде шукати файли, власником яких є користувач root або ж користувач www-data. Якщо ж, наприклад, ви хочете знайти файли, власником яких користувач не є, використовуйте оператор «-not»:

find -not -user www-data

Природно, оператори працюють і з іншими опціями. Наприклад, наступна команда знайде файли, власником яких є www-data і які розміром не більше ста кілобайт:

find -user www-data -not -size + 100k

Пошук по групі-власнику

Ще один спосіб використання find - пошук файлів, що належать якоїсь групи користувачів. Для цього використовується опція «-group», параметром якої повинно бути ім'я групи або її ідентифікатор. наприклад:

find -group admin

У повсякденному житті ви, скоріш за все, будете комбінувати цю опцію з іншими. Наприклад, якщо вам потрібно відшукати файли, що належать певним користувачеві і групі.

Пошук з прав доступу

Іноді у вас може виникати необхідність знайти файли, доступні для запису кому завгодно або файли, які мають будь-які інші «погані» дозволу. Подібний пошук find може здійснювати за допомогою різних опцій. Найпростіші з них - це оператори -readable, -writable і -executable, які працюють стосовно користувачеві, який жбурнув find. Майте на увазі, що в занадто древніх версіях find ці опції відсутні.

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

find -type f -perm -110

Тут параметр «110» повідомляє find набір бітів доступу, а «-» змушує ігнорувати всі інші. Таким чином, якщо файл має до всього іншого встановлені біти читання і записи, він також буде відповідати критерію пошуку, оскільки для find важливо лише те, що встановлені зазначені біти виконання.

Якщо вам необхідно точний збіг із зазначеним режимом доступу, то приберіть опцію «-».

А що, якщо вам необхідно знайти файли, що виконуються власником або групою? У цей випадку замість «-» використовуйте «/»:

find -type f -perm / 110

Пошук по правам доступу часто пригождается, хоча і не позбавлений деякої складності, і вам може знадобитися якийсь час, перш, ніж ви звикнете до його синтаксису. Особливо це стосується новачків, які ще толком не розібралися з механізмом бітів доступу файлів. В цьому випадку читання man-сторінки find особливо рекомендується.

Використання регулярних виразів

Іноді вам може знадобитися використання регулярних виразів, щоб визначити критерії пошуку. І find підтримує їх навіть більшою мірою, ніж ви, можливо, очікували. find не тільки підтримує використання регулярних виразів, але і дозволяє використовувати різні їх типи. Тип регулярного виразу можна визначити за допомогою опції -regextype, яка приймає параметри posix-awk, posix-egrep і тому подібні. В man-сторінці ви знайдете повний перелік підтримуваних типів регулярних виразів вашою версією find.

Невеликий приклад. Скажімо, вам потрібно знайти файли, які мають розширення «.php» і «.js». Таке можна здійснити за допомогою такої команди:

find -regextype posix-egrep -regex '. * (php | js) $'

Виглядає страшнувато, чи не так? Ця команда говорить find використовувати синтаксис регулярних виразів egrep (-regextype posix-egrep), а потім повідомляє само регулярний вираз. Вираз обрамлено одинарними лапками, щоб оболонка не намагалася по-своєму інтерпретувати спецсимволи, що використовуються в вираженні. У самому вираженні «. *» Означає будь-який символ, який повторювався нуль або більше разів. Частина виразу «(php | js)» повідомляє про необхідність шукати «php» або «js» (символ вертикальної риски використовується для визначення оператора «або»). І, нарешті, знак долара в кінці виразу повідомляє про те, що попередня частина виразу повинна шукатися в кінці рядка.

Так само, як і з правами доступу, регулярні вирази можна комбінувати.

Робота з часом

Що, якщо вам знадобиться знайти файли, грунтуючись на їхньому віці? Іноді буває, що знаєш, в якому проміжку часу файл був створений, а все інше - забулося. Або ж, вам може знадобитися відшукати якісь старі файли, які пора видалити. Загалом, причин може бути купа.

find в повному обсязі вміє працювати з часом, дозволяючи шукати за часом останнього доступу до файлу (-atime), часу останньої зміни файлу (-mtime), або за часом його створення (-сtime).

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

find -mtime +2

Параметри опцій, які працюють з часом, можна інтерпретувати як «N раз по 24 години» і в дійсності означають проміжок часу. Якщо ви передасте find опцію «+1», то вона зрозуміє це як «не менше, ніж 24 години назад, але не більше, ніж 48».

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

find -mtime +2 -mtime -5

означає «два або більше дні тому, але не більше п'яти днів назад».

Робота з хвилинами

Іноді буває потрібно знайти файли, змінені за останні 24 години, і в цьому випадку розглянуті опції * time зі зрозумілих причин не підійдуть. Однак, на цей випадок, у find припасені спеціальні опції -amin, -cmin, -mmin, які працюють подібно вище розглянутим, з тією різницею, що в якості параметрів вони приймають хвилини, а не добу. Так що, якщо вам потрібно знайти якісь файли, змінені, наприклад, протягом робочого дня - це ті самі опції, які вам допоможуть.

обмеження пошуку

Іноді find видає набагато більше результатів пошуку, ніж вам потрібно. За допомогою опції -maxdepth ви можете обмежити find таким чином, щоб вона не «заривалась» занадто глибоко. Наприклад, якщо ви хочете знайти всі файли c розширенням «js» в каталозі wordpress, можна скористатися командою:

find wordpress -name '* js'

Але що, якщо вас цікавлять файли лише з каталогу верхнього рівня? Немає проблем: обмежте описки за допомогою опції -maxdepth:

find wordpress -maxdepth 1 -name '* js'

Така команда змусить шукати find тільки в каталозі wordpress, не заходячи в підкаталоги, які в ньому містяться. Якщо ви хочете пошукати в цих підкаталогах, але не потикатися глибше - збільште параметр опції -maxdepth на одиницю і т. Д.

Дії над знайденими файлами

Отже, ви знайшли те, що шукали. Що ви будете робити зі знайденим? Використовуючи xargs або опцію find -exec, можна виконувати необхідні дії з знайденими файлами.

Давайте уявимо, що ви хочете змінити власника якихось файлів з root на www-data. Для початку потрібно всі ці файли знайти, а потім вже змінювати їх власника. Зміна власника вручну за списком, отриманого від find звучить якось нудно. Все ж, найкращим рішенням буде використовувати опцію -exec:

find -user root -exec chown www-data {} \;

Така команда змушує find передавати шляху всіх знайдених файлів утиліти chown, яка і буде змінювати власника файлів. Легко і просто!

наостанок

Якщо ви за допомогою find -exec збираєтеся щось видаляти, то обов'язково двічі перевірте, що саме знаходить find, перш, ніж передавати їй команду на видалення знайденого.

По мотивам Linux.Com .

Що ви будете робити зі знайденим?
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью