Як видалити файли та каталоги в терміналі Linux

У світі Linux, macOS та інших Unix-подібних систем, команди `rm` і `rmdir` служать для знищення файлів та директорій. Вони виконують аналогічну функцію, що й команди `del` та `deltree` у середовищах Windows і DOS. Ці інструменти володіють значною потужністю та підтримують численні параметри.

Варто пам’ятати, що файли та папки, видалені за допомогою `rm` та `rmdir`, не потрапляють у кошик. Вони безповоротно стираються з комп’ютера. Єдиний спосіб повернути їх назад – це відновлення з резервної копії, якщо така існує.

Видалення файлів командою `rm`

Найпростіший сценарій – це видалення окремого файлу, який знаходиться у вашій поточній директорії. Для цього введіть команду `rm`, пробіл, і потім вкажіть ім’я файлу, який потрібно стерти.

rm file_1.txt

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

rm ./шлях/до/файлу/file_1.txt

Команда `rm` дозволяє вказати декілька імен файлів одночасно. У такому разі всі зазначені файли будуть видалені.

rm file_2.txt file_3.txt

Можна використовувати підстановки для вибору групи файлів. Символ `*` відповідає будь-якій кількості символів, а символ `?` – одному символу. Наприклад, наступна команда видалить усі файли PNG з поточної директорії.

rm *.png

А ця команда видалить файли з односимвольним розширенням, як File.1 та File.2, але не File.12.

rm *.?

Якщо файл захищений від запису, система запитає підтвердження перед видаленням. Потрібно буде ввести `y` (так) або `n` (ні) та натиснути Enter.

Щоб знизити ризик випадкового видалення файлів при використанні підстановок, можна використовувати параметр `-i` (інтерактивний). У такому разі система вимагатиме підтвердження для кожного файлу окремо.

rm -i *.dat

Протилежним до інтерактивного є параметр `-f` (force – примусово). Він скасовує запит на підтвердження, навіть якщо файли захищені від запису.

rm -f ім'я_файлу

Видалення директорій командою `rm`

Для видалення порожньої директорії використовуйте параметр `-d` (directory). З іменами директорій також можна використовувати символи підстановки (* і ?).

rm -d директорія

Передаючи декілька імен директорій, ви видалите всі порожні директорії, які вказали.

rm -d директорія1 директорія2 /шлях/до/директорії3

Щоб видалити директорії, що не є порожніми, використовується параметр `-r` (recursive – рекурсивно). Це означає, що будуть видалені не тільки самі директорії, а й усі файли та піддиректорії всередині них.

rm -r директорія1 директорія2 директорія3

Якщо директорія або файл захищені від запису, система вимагатиме підтвердження видалення. Щоб видалити непорожні директорії та уникнути запитів на підтвердження, використовуйте комбінацію параметрів `-r` (рекурсивний) і `-f` (примусово).

rm -rf директорія

З цією командою потрібно бути обережним. Помилка з `rm -rf` може призвести до втрати даних або до поломки системи. Тому обережність – найкращий підхід. Щоб краще зрозуміти структуру директорій і файлів, які збираєтеся видалити за допомогою `rm -rf`, використовуйте команду `tree`.

Встановіть цей пакет за допомогою `apt-get`, якщо ви користуєтесь Ubuntu або іншим дистрибутивом на базі Debian. Для інших дистрибутивів Linux використовуйте відповідний менеджер пакетів.

sudo apt-get install tree

Виконання команди `tree` покаже наочне деревоподібне відображення структури директорій та файлів в поточній директорії.

tree

Можна також вказати шлях до каталогу як аргумент `tree`, щоб вивести його структуру з іншого місця у файловій системі.

tree шлях/до/директорії

Команда `rm` має ще параметри `–one-file-system`, `–no-preserve-root`, `–preserve-root`, але їх використання рекомендовано тільки досвідченим користувачам. Помилка при їх застосуванні може призвести до випадкового стирання всіх системних файлів. Для отримання додаткової інформації зверніться до сторінки посібника.

Видалення директорій командою `rmdir`

Існує ще одна команда для видалення директорій – `rmdir`. Відмінність між `rm` і `rmdir` полягає в тому, що `rmdir` може видаляти лише порожні директорії, не чіпаючи файли.

Найпростіший випадок – це видалення однієї порожньої директорії. Як і з `rm`, можна вказати декілька імен директорій або повний шлях до директорії.

Для видалення директорії в поточній директорії введіть її ім’я після `rmdir`:

rmdir директорія

Для видалення декількох директорій вкажіть їх імена через пробіл:

rmdir директорія1 директорія2 директорія3

Для видалення директорії, яка не знаходиться в поточній директорії, вкажіть повний шлях до неї:

rmdir /шлях/до/директорії

Якщо ви спробуєте видалити папку, яка не є порожньою, `rmdir` видасть повідомлення про помилку. Наприклад, `rmdir` успішно видалить каталог “клієнти”, але відмовиться видалити “проекти”, оскільки він містить файли. Директорія “проекти” залишиться без змін разом з усіма її файлами.

Коли `rmdir` видає помилку “Директорія не порожня”, він припиняє обробку інших директорій. Якщо ви просили видалити чотири каталоги, і в першому були файли, `rmdir` видасть повідомлення про помилку і більше нічого не зробить. Ви можете змусити його ігнорувати ці помилки, використовуючи параметр `–ignore-fail-on-non-empty`, щоб оброблялися інші каталоги.

У наступному прикладі `rmdir` отримав дві папки: `work/reports` та `work/quotes`. Параметр `–ignore-fail-on-non-empty` був використаний. Оскільки в папці `work/reports` є файли, `rmdir` не може її видалити. Параметр `–ignore-fail-on-non-empty` змушує `rmdir` проігнорувати цю помилку і перейти до наступної папки, `work/quotes`. Ця папка порожня, тому `rmdir` успішно її видаляє.

Команда виглядала наступним чином:

rmdir --ignore-fail-on-non-empty work/reports /work/quotes

Ви можете використовувати параметр `-p` (parents – батьківські) для видалення каталогу разом з його батьківськими каталогами. Це працює, бо `rmdir` починає з цільової директорії і повертається до батьківської. Якщо вона порожня, то її також можна видалити, і процес повторюється до самого верху шляху.

У наступному прикладі команда, передана до `rmdir`:

rmdir -p work/invoices

За цим запитом будуть видалені і рахунки-фактури, і папка `work`.

Незалежно від того, використовуєте ви Bash або іншу оболонку, Linux надає гнучкі та потужні інструменти для видалення директорій і файлів прямо з командного рядка термінала. Деякі користувачі вважають за краще працювати виключно через термінал, в той час як інші можуть не мати іншого вибору, наприклад, при роботі на серверах без графічного інтерфейсу або у віддалених сесіях безголовних систем, таких як Raspberry Pi. Ці команди ідеально підходять для таких ситуацій.

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