104.7 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
104 Пристрої, файлові системи Linux, стандарт ієрархії файлової системи |
Тема: |
104.7 Пошук системних файлів та розміщення їх в правильному місці |
Урок: |
1 з 1 |
Вступ
Дистрибутиви Linux бувають будь-яких форм і розмірів, але майже всі вони мають спільні риси. Те, чого вони дотримуються - це Стандарт ієрархії файлової системи (FHS, Filesystem Hierarchy Standard), який визначає «стандартний макет» для файлової системи, що значно полегшує взаємодію та адміністрування системи. У цьому уроці ви дізнаєтеся більше про цей стандарт і як знайти файли в системі Linux.
Стандарт ієрархії файлової системи
Стандарт ієрархії файлової системи (FHS) — це спроба Linux Foundation стандартизувати структуру каталогів і вміст каталогів у системах Linux. Дотримання стандарту не є обов’язковим, але більшість дистрибутивів йому слідують.
Note
|
Ті, хто цікавиться деталями організації файлової системи, можуть ознайомитися зі специфікацією FHS 3.0, доступною в кількох форматах за адресою: http://refspecs.linuxfoundation.org/fhs.shtml |
Відповідно до стандарту базова структура каталогів така:
/
-
Це кореневий каталог, найвищий каталог в ієрархії. Кожен інший каталог знаходиться всередині нього. Файлову систему часто порівнюють з «деревом», тому це буде «стовбур», до якого підключені всі гілки.
/bin
-
Основні двійкові файли, доступні всім користувачам.
/boot
-
Файли, необхідні для процесу завантаження, включаючи початковий диск RAM (initrd) і саме ядро Linux.
/dev
-
Файли пристрою. Це можуть бути як фізичні пристрої, підключені до системи (наприклад,
/dev/sda
буде першим диском SCSI або SATA), так і віртуальні пристрої, надані ядром. /etc
-
Спеціальні конфігураційні файли хоста. Програми можуть створювати підкаталоги в
/etc
для зберігання кількох файлів конфігурації, якщо це необхідно. /home
-
У кожного користувача в системі є «домашній» каталог для зберігання особистих файлів і налаштувань, і більшість з них знаходиться в
/home
. Зазвичай домашній каталог збігається з ім’ям користувача, тому користувач John матиме свій каталог під/home/john
. Винятком є суперкористувач (root), який має окремий каталог (/root
) і деякі користувачі системи. /lib
-
Спільні бібліотеки, необхідні для завантаження операційної системи та для запуску двійкових файлів у
/bin
та/sbin
. /media
-
Знімні носії, які можна монтувати користувачам, такі як флеш-накопичувачі, пристрої для зчитування компакт-дисків і DVD-ROM, дискети, карти пам’яті та зовнішні диски, встановлені тут.
/mnt
-
Точка монтування для тимчасово змонтованих файлових систем.
/opt
-
Пакунки прикладного програмного забезпечення.
/root
-
Домашній каталог для суперкористувача (root).
/run
-
Дані змінної під час виконання.
/sbin
-
Системні двійкові файли.
/srv
-
Дані, що обслуговуються системою. Наприклад, сторінки, які обслуговує вебсервер, можуть зберігатися в каталозі
/srv/www
. /tmp
-
Тимчасові файли.
/usr
-
Дані користувача лише для читання, включаючи дані, необхідні деяким вторинним утилітам і програмам.
/proc
-
Віртуальна файлова система, що містить дані, пов’язані з запущеними процесами.
/var
-
Дані змінних, записані під час роботи системи, включаючи чергу друку, дані журналу, поштові скриньки, тимчасові файли, кеш браузера тощо.
Майте на увазі, що деякі з цих каталогів, такі як /etc
, /usr
і /var
, містять цілу ієрархію підкаталогів під ними.
Тимчасові файли
Тимчасові файли – це файли, що використовуються програмами для зберігання даних, які потрібні лише на короткий час. Це можуть бути дані запущених процесів, журнали збоїв, скретч-файли з автозбереження, проміжні файли, які використовуються під час перетворення файлів, файли кешу тощо.
Розташування тимчасових файлів
Версія 3.0 Стандарту ієрархії файлової системи (FHS) визначає стандартні розташування для тимчасових файлів у системах Linux. Кожне місце розташування має різну мету та поведінку, тому розробникам рекомендується дотримуватися умов, встановлених FHS під час запису тимчасових даних на диск.
/tmp
-
Відповідно до FHS, програми не повинні вважати, що файли, записані тут, будуть збережені між викликами програми. Рекомендується очистити цей каталог (усі файли стерти) під час завантаження системи, хоча це не є обов’язковим.
/var/tmp
-
Інше розташування для тимчасових файлів, але його не слід очищати під час завантаження системи. Збережені тут файли зазвичай зберігаються між перезавантаженнями.
/run
-
Цей каталог містить дані змінних часу виконання, які використовуються запущеними процесами, наприклад файли ідентифікаторів процесу (
.pid
). Програми, яким потрібно більше одного файлу під час виконання, можуть створювати тут підкаталоги. Це розташування повинно бути очищено під час завантаження системи. Колись цілі цього каталогу виконував/var/run
, а в деяких системах/var/run
може бути символьним посиланням на/run
.
Зауважте, що ніщо не заважає програмі створювати тимчасові файли в інших місцях системи, але слід дотримуватися умов, встановлених FHS.
Пошук файлів
Щоб шукати файли в системі Linux, ви можете використовувати команду find
. Це дуже потужний інструмент, повний параметрів, які можуть налаштувати його поведінку та змінити вихідні дані саме відповідно до ваших потреб.
Для початку команді find
потрібні два аргументи: вихідна точка та те, що шукати. Наприклад, для пошуку всіх файлів у поточному каталозі (і підкаталогах), ім’я яких закінчується на .jpg
, можна використовувати:
$ find . -name '*.jpg' ./pixel_3a_seethrough_1.jpg ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Це відповідатиме будь-якому файлу, останні чотири символи назви якого є .jpg
, незалежно від того, що стоїть перед ним, оскільки *
є підстановочним знаком для «будь-чого». Однак подивіться, що станеться, якщо в кінець шаблону додати ще один символ "*":
$ find . -name '*.jpg*' ./pixel_3a_seethrough_1.jpg ./Pentaro.jpg.zip ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Файл Pentaro.jpg.zip
(виділений вище) не був включений до попереднього списку, тому що навіть якщо він містить у своїй назві .jpg
, він не відповідав шаблону, оскільки після нього є додаткові символи. Новий шаблон означає «що-небудь .jpg
будь-що», тому він підходить під шаблон.
Tip
|
Майте на увазі, що параметр |
Вираз *.jpg
необхідно помістити в одинарні лапки, щоб оболонка не інтерпретувала сам шаблон. Спробуйте без лапок і подивіться, що вийде.
За замовчуванням find
почне пошук з початкової точки і спускатиметься через будь-які знайдені підкаталоги (і підкаталоги цих підкаталогів). Ви можете обмежити цю поведінку за допомогою параметрів -maxdepth N
, де N
– максимальна кількість рівнів.
Щоб шукати лише в поточному каталозі, використовуйте -maxdepth 1
. Припустимо, у вас є така структура каталогів:
directory ├── clients.txt ├── partners.txt -> clients.txt └── somedir ├── anotherdir └── clients.txt
Для пошуку всередині somedir
вам потрібно буде використовувати -maxdepth 2
(поточний каталог +1 рівень нижче). Для пошуку всередині anotherdir
знадобиться -maxdepth 3
(поточний каталог +2 рівня вниз). Параметр -mindepth N
працює навпаки, шукаючи лише в каталогах принаймні на рівні N
нижче.
Параметр -mount
можна використовувати, щоб запобігти проходженню find
вниз всередині змонтованих файлових систем. Ви також можете обмежити пошук певними типами файлової системи за допомогою параметра -fstype
. Тож find /mnt -fstype exfat -iname "*report*"
шукатиме лише файлові системи exFAT, змонтовані під /mnt
.
Пошук за атрибутами
Ви можете використовувати наведені нижче параметри, щоб шукати файли з певними атрибутами, наприклад файли, які доступні для запису вашому користувачу, мають певний набір дозволів або мають певний розмір:
-user USERNAME
-
Відповідає файлам, які належать користувачу
USERNAME
. -group GROUPNAME
-
Відповідає файлам, що належать групі
GROUPNAME
. -readable
-
Відповідає файлам, які доступні для читання поточним користувачем.
-writable
-
Відповідає файлам, які доступні для запису поточним користувачем.
-executable
-
Відповідає файлам, які можна виконати поточним користувачем. У випадку каталогів це буде відповідати будь-якому каталогу, до якого може ввійти користувач (дозвіл
x
). -perm NNNN
-
Відповідатиме будь-яким файлам, які мають саме дозвіл
NNNN
. Наприклад,-perm 0664
відповідатиме будь-яким файлам, які користувач і група можуть читати та записувати, і які можуть читати інші (абоrw-rw-r--
).
Ви можете додати -
перед NNNN
, щоб перевірити наявність файлів, які мають принаймні вказаний дозвіл. Наприклад, -perm -644
відповідатиме файлам, які мають принаймні дозволи 644
(rw-r—r--
). Це включає файл з 664
(rw-rw-r--
) або навіть 775
(rwxrwx-r-x
).
-empty
-
відповідатиме порожнім файлам і каталогам.
-size N
-
відповідатиме будь-яким файлам розміру
N
, деN
за замовчуванням є кількістю 512-байтових блоків. Ви можете додати суфікси доN
для інших одиниць:Nc
рахуватиме розмір у байтах,Nk
у кібібайтах (КіБ, кратні 1024 байтам),NM
у мебібайтах (МіБ, кратні 1024 * 1024) іNG
для гібібайт (ГіБ, кратні 1024 * 1024 * 1024).
Знову ж таки, ви можете додати префікси +
або -
(тут це означає більше ніж і менше ніж) для пошуку відносних розмірів. Наприклад, -size -10M
відповідатиме будь-якому файлу розміром менше 10 МiБ.
Наприклад, щоб шукати файли у вашому домашньому каталозі, які містять нечутливий до регістру шаблон report
у будь-якій частині імені, мають дозволи 0644
, доступ до яких було здійснено 10 днів тому і розмір яких становить принаймні 1 МiБ, ви можете використати
$ find ~ -iname "*report*" -perm 0644 -atime 10 -size +1M
Пошук за часом
Окрім пошуку атрибутів, ви також можете виконувати пошук за часом, знаходячи файли, до яких зверталися, чи змінили їх атрибути або файли, які були змінені протягом певного періоду часу. Параметри:
-amin N
,-cmin N
,-mmin N
-
Це відповідатиме файлам, до яких мали доступ, атрибути яких були змінені або були змінені (відповідно)
N
хвилин тому. -atime N
,-ctime N
,-mtime N
-
Це відповідатиме файлам, до яких було здійснено доступ, атрибути яких були змінені або вони були змінені
N*24
години тому.
Для -cmin N
і -ctime N
будь-яка зміна атрибута призведе до збігу, включаючи зміну дозволів, читання або запис у файл. Це робить ці параметри особливо потужними, оскільки практично будь-яка операція з файлом ініціює збіг.
Наступний приклад буде відповідати будь-якому файлу в поточному каталозі, який був змінений менше ніж 24 години тому і розміром більше 100 МiБ:
$ find . -mtime -1 -size +100M
Використання locate
та updatedb
locate
та updatedb
– це команди, які можна використовувати для швидкого пошуку файлу, що відповідає заданому шаблону, у системі Linux. Але на відміну від find
, locate
не буде шукати шаблон у файловій системі: замість цього він шукає його в базі даних, створеній за допомогою виконання команди updatedb
. Це дає дуже швидкі результати, але вони можуть бути неточними залежно від того, коли база даних була в останнє оновлена.
Найпростіший спосіб використовувати locate
— це просто дати йому шаблон для пошуку. Наприклад, щоб знайти кожне зображення JPEG у вашій системі, ви можете використовувати locate jpg
. Список результатів може бути досить довгим, але має виглядати так:
$ locate jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Коли проводиться пошук по шаблону jpg
, locate
покаже все, що містить цей шаблон, незалежно від того, що буде до або після нього. Ви можете побачити приклад цього у файлі jpg_specs.doc
у списку вище: він містить шаблон, але розширення не є jpg
.
Tip
|
Пам’ятайте, що за допомогою |
За замовчуванням шаблон чутливий до регістру. Це означає, що файли, що містять .JPG
, не відображатимуться, оскільки шаблон написаний у нижньому регістрі. Щоб уникнути цього, передайте параметр -i
у locate
. Повторюємо наш попередній приклад:
$ locate -i .jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg
Зверніть увагу, що файл Mate1_old.JPG
, виділений жирним шрифтом вище, не був присутній у попередньому списку.
Ви можете передати кілька шаблонів для locate
, просто розділіть їх пробілами. У наведеному нижче прикладі буде здійснено пошук будь-яких файлів, які відповідають шаблонам zip
та jpg
, без урахування регістру:
$ locate -i zip jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/OPENMSXPIHAT.zip /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/gbs-control-master.zip /home/carol/Downloads/lineage-16.0-20190711-MOD-quark.zip /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Використовуючи кілька шаблонів, ви можете наказати locate відображати лише файли, які відповідають всім із них. Це робиться за допомогою параметра -A
. У наступному прикладі буде показано будь-який файл, що відповідає шаблонам .jpg
і .zip
:
$ locate -A .jpg .zip /home/carol/Downloads/Pentaro.jpg.zip
Якщо ви хочете підрахувати кількість файлів, які відповідають заданому шаблону, замість того, щоб показувати їх повний шлях, ви можете використовувати параметр -c
. Наприклад, щоб підрахувати кількість файлів .jpg
у системі:
$ locate -c .jpg 1174
Одна з проблем locate
полягає в тому, що він показує лише записи, наявні в базі даних, створеній updatedb
(знаходиться в /var/lib/mlocate.db
). Якщо база даних застаріла, у виведенні можуть відображатися файли, які були видалені з моменту останнього оновлення. Один із способів уникнути цього — додати параметр -e
, який змусить його перевірити, чи існує файл, перш ніж показати його у виведенні.
Звичайно, це не вирішить проблему з тим, що файли, створені після останнього оновлення бази даних, не відображаються. Для цього вам доведеться оновити базу даних командою updatedb
. Скільки часу це займе, залежить від кількості файлів на вашому диску.
Керування поведінкою updatedb
Поведінкою updatedb
можна керувати за допомогою файлу /etc/updatedb.conf
. Це текстовий файл, у якому кожен рядок керує однією змінною. Порожні рядки ігноруються, а рядки, які починаються з символу #
, розглядаються як коментарі.
PRUNEFS=
-
Будь-які типи файлової системи, зазначені після цього параметра, не будуть перевірені
updatedb
. Список типів має бути розділений пробілами, а самі типи не чутливі до регістру, томуNFS
іnfs
однакові. PRUNENAMES=
-
Це розділений пробілами список імен каталогів, які не слід сканувати
updatedb
. PRUNEPATHS=
-
Це список імен шляхів, які слід ігнорувати
updatedb
. Імена шляхів мають бути розділені пробілами та вказані так само, як вони будуть показані вupdatedb
(наприклад,/var/spool /media
) PRUNE_BIND_MOUNTS=
-
Це проста змінна
yes
абоno
. Якщо встановлено значенняyes
, монтування прив’язки (каталоги, змонтовані в інших місцях за допомогою командиmount --bind
) будуть ігноруватись.
Пошук двійкових файлів, man-сторінок та вихідного коду
which
є дуже корисною командою, яка показує повний шлях до виконуваного файлу. Наприклад, якщо ви хочете знайти виконуваний файл для bash
, ви можете використати:
$ which bash /usr/bin/bash
Якщо додано параметр -a
, команда покаже всі імена шляхів, які відповідають виконуваному файлу. Зверніть увагу на різницю:
$ which mkfs.ext3 /usr/sbin/mkfs.ext3 $ which -a mkfs.ext3 /usr/sbin/mkfs.ext3 /sbin/mkfs.ext3
Tip
|
Щоб дізнатися, які каталоги знаходяться в |
type
– це подібна команда, яка показуватиме інформацію про двійковий файл, зокрема, де він розташований та його тип. Просто використовуйте type
з наступною назвою команди:
$ type locate locate is /usr/bin/locate
Параметр -a
працює так само, як і параметр which
, показуючи всі імена шляхів, які відповідають виконуваному файлу. Результат буде наступним:
$ type -a locate locate is /usr/bin/locate locate is /bin/locate
Параметр -t
покаже тип файлу команди, який може бути alias
, keyword
, function
, builtin
або file
. Наприклад:
$ type -t locate file $ type -t ll alias $ type -t type type is a built-in shell command
Команда whereis
є більш універсальною, і окрім двійкових файлів також можна використовувати для відображення розташування man-сторінок або навіть вихідного коду програми (якщо доступно у вашій системі). Просто введіть whereis
, а потім ім’я двійкого файлу:
$ whereis locate locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
Наведені вище результати включають двійкові файли (/usr/bin/locate
) і стислі man-сторінки (/usr/share/man/man1/locate.1.gz
).
Ви можете швидко відфільтрувати результати за допомогою перемикачів командного рядка, наприклад -b
, який обмежить результати лише двійковими файлами, -m
, який обмежить їх лише man-сторінками, або -s
, який обмежить лише вихідним кодом. Повторивши наведений вище приклад, ви отримаєте:
$ whereis -b locate locate: /usr/bin/locate $ whereis -m locate locate: /usr/share/man/man1/locate.1.gz
Вправи до посібника
-
Уявіть, що програмі потрібно створити одноразовий тимчасовий файл, який більше ніколи не знадобиться після закриття програми. У якому каталозі потрібно створити цей файл?
-
Який тимчасовий каталог треба очистити під час процесу завантаження?
-
Використовуючи
find
, здійсніть пошук лише в поточному каталозі файлів, доступних для запису користувачеві, які були змінені протягом останніх 10 днів і мають розмір більше 4 ГБ. -
Використовуючи
locate
, знайдіть будь-які файли, що містять у своїх іменах шаблониreport
таupdated
,update
абоupdating
. -
Як ви можете знайти, де зберігається man-сторінка для
ifconfig
? -
Яку змінну потрібно додати до
/etc/updatedb.conf
, щоб змуситиupdatedb
ігнорувати файлові системиntfs
? -
Системний адміністратор хоче підключити внутрішній диск (
/dev/sdc1
). Відповідно до FHS, до якого каталогу слід монтувати цей диск?
Дослідницькі вправи
-
Коли використовується
locate
, результати витягуються з бази даних, створеноїupdatedb
. Однак ця база даних може бути застарілою, через щоlocate
показуватиме файли, які більше не існують. Як ви можете зробити так, щобlocate
показував у вихідних даних лише наявні файли? -
Знайдіть будь-який файл у поточному каталозі або підкаталогах до 2 рівнів нижче, за винятком змонтованих файлових систем, які містять шаблон
Status
абоstatute
у своїх іменах. -
Обмеживши пошук файловими системами
ext4
, знайдіть будь-які файли в/mnt
, які мають принаймні дозволи на виконання для групи, є доступними для читання поточним користувачем і мають будь-який атрибут, змінений протягом останніх 2 годин. -
Знайдіть порожні файли, які були створені більше 30 днів тому і знаходяться щонайменше на два рівні нижче поточного каталогу
-
Врахуйте, що користувачі
carol
таjohn
є частиною групиmkt
. Знайдіть у домашньому каталозіjohn
будь-які файли, які також доступні для читання користувачуcarol
.
Підсумки
У цьому уроці ви дізналися про основну організацію файлової системи на комп’ютері з операційною системою Linux відповідно до FHS, а також про те, як знайти двійкові файли та файли за назвою або за атрибутами. На цьому уроці обговорювалися такі команди:
find
-
Універсальна команда, яка використовується для пошуку файлів і папок за різними критеріями пошуку.
locate
-
Утиліта, яка використовує локальну базу даних, що містить розташування локально збережених файлів.
updatedb
-
Оновлює локальну базу даних, яку використовує команда
locate
. which
-
Показує повний шлях до виконуваного файлу.
whereis
-
Показує розташування man-сторінок, двійкових файлів та вихідного коду в системі.
type
: Відображає розташування двійкового файлу та тип програми (наприклад, встановлена програма, вбудована програма Bash тощо).
Answers to Guided Exercises
-
Уявіть, що програмі потрібно створити одноразовий тимчасовий файл, який більше ніколи не знадобиться після закриття програми. У якому каталозі можна створити цей файл?
Оскільки ми не дбаємо про файл після завершення роботи програми, правильним каталогом буде
/tmp
. -
Який тимчасовий каталог треба очистити під час процесу завантаження?
Каталог має назву
/run
або, на деяких системах,/var/run
. -
Використовуючи
find
, здійсніть пошук лише в поточному каталозі файлів, доступних для запису користувачеві, які були змінені протягом останніх 10 днів і мають розмір більше 4 ГБ.Для цього вам знадобляться параметри
-writable
,-mtime
і-size
:find . -writable -mtime -10 -size +4G
-
Використовуючи
locate
, знайдіть будь-які файли, що містять у своїх іменах шаблониreport
таupdated
,update
абоupdating
.Оскільки
locate
повинен дотримуватися всіх шаблонів, використовуйте параметр-A
:locate -A "report" "updat"
-
Як ви можете знайти, де зберігається man-сторінка для
ifconfig
?Використовуйте параметр
-m
дляwhereis
:whereis -m ifconfig
-
Яку змінну потрібно додати до
/etc/updatedb.conf
, щоб змуситиupdatedb
ігнорувати файлові системиntfs
?Змінна
PRUNEFS=
, за якою слідує тип файлової системи:PRUNEFS=ntfs
-
Системний адміністратор хоче підключити внутрішній диск (
/dev/sdc1
). Відповідно до FHS, до якого каталогу слід монтувати цей диск?На практиці диск можна встановити де завгодно. Однак FHS рекомендує тимчасове монтування виконувати під
/mnt
Відповіді до дослідницьких вправ
-
Коли використовується
locate
, результати витягуються з бази даних, створеноїupdatedb
. Однак ця база даних може бути застарілою, через щоlocate
показуватиме файли, які більше не існують. Як ви можете зробити так, щобlocate
показував у вихідних даних лише наявні файли?Додайте параметр
-e
, щоб виконати пошук, таким чиномlocate -e PATTERN
. -
Знайдіть будь-який файл у поточному каталозі або підкаталогах до 2 рівнів нижче, за винятком змонтованих файлових систем, які містять шаблон
Status
абоstatute
у своїх іменах.Пам’ятайте, що для
-maxdepth
ви також повинні враховувати поточний каталог, тому нам потрібно три рівні (поточний плюс 2 рівні вниз):find . -maxdepth 3 -mount -iname "*statu*"
-
Обмеживши пошук файловими системами
ext4
, знайдіть будь-які файли в/mnt
, які мають принаймні дозволи на виконання для групи, є доступними для читання поточним користувачем і мають будь-який атрибут, змінений протягом останніх 2 годин.Використовуйте параметр
-fstype
дляmount
, щоб обмежити пошук певними типами файлової системи. Файл, доступний для читання поточним користувачем, мав би принаймні4
у першій цифрі дозволів, а доступ для виконання групою мав би щонайменше1
у другій цифрі. Оскільки ми не піклуємося про дозволи для інших, ми можемо використовувати0
для третьої цифри. Використовуйте-cmin N
, щоб відфільтрувати останні зміни атрибутів, пам’ятаючи, що N вказується у хвилинах. Тому:find /mnt -fstype ext4 -perm -410 -cmin -120
-
Знайдіть порожні файли, які були створені більше 30 днів тому і знаходяться щонайменше на два рівні нижче поточного каталогу
Параметр
-mindepth N
можна використовувати, щоб обмежити пошук принаймніN
рівнями вниз, але пам’ятайте, що ви повинні включити поточний каталог до підрахунку. Використовуйте-empty
, щоб перевірити наявність порожніх файлів, і-mtime N
, щоб перевірити час модифікації. Тому:find . -empty -mtime +30 -mindepth 3
-
Врахуйте, що користувачі
carol
таjohn
є частиною групиmkt
. Знайдіть у домашньому каталозіjohn
будь-які файли, які також доступні для читання користувачуcarol
.Враховуючи, що вони є членами однієї групи, нам потрібен принаймні
r
(4
) у дозволах групи, і ми не піклуємося про інші. Тому:find /home/john -perm -040