Якщо ви вивчали програмування оболонки, можливо, ви вже зустрічали щось на зразок /dev/null. У цій статті ми розберемося, що це таке і як його використовувати. Давайте почнемо з розуміння того, що таке /dev.
Що таке /dev?
У файловій системі Linux все є файлом або каталогом. Навіть пристрої доступні як файли. Ваші розділи жорсткого диска, Pen Drive, динаміки, для всього цього існує файл, з якого доступ до них. Тепер, щоб зрозуміти, як доступ до пристроїв здійснюється як файли, подумайте про це так: що ми робимо з файлом? Ми читаємо з нього дані та записуємо в нього дані. Такий пристрій, як динамік, може вводити дані для створення звуку, жорсткий диск можна використовувати для читання та запису даних, принтер приймає вхідні дані для друку файлів тощо. Файли та пристрої схожі таким чином
/dev — це каталог, у якому зберігаються всі фізичні та віртуальні пристрої системи Linux. Фізичні пристрої легко зрозуміти, це матеріальні пристрої, такі як флеш-накопичувач, динаміки, принтери тощо. Система Linux також має віртуальні пристрої, які діють як пристрої, але не є фізичними пристроями.
Що таке /dev/null?
Це віртуальний пристрій, який має спеціальну властивість: будь-які дані, записані в /dev/null, зникають або зникають. Через цю характеристику його також називають бітбакетом або чорною дірою. Давайте подивимося демонстрацію.
Переспрямувати вихід до /dev/null

У цій демонстрації ви бачите, що ми додали деякі дані, але ці дані не були збережені. Ця конкретна характеристика /dev/null має деякі випадки використання. Давайте подивимося на них.
Використання /dev/null
Оскільки він відкидає все, що в нього записане, ви можете перемістити файли в /dev/null, щоб видалити їх. Але це не дуже поширений випадок використання. Він в основному використовується для відхилення стандартного виводу та стандартної помилки з виводу.
Що таке стандартний вихід і стандартна помилка?
Вивід команди Linux містить два потоки даних: стандартний вихід (stdout) і стандартну помилку (stderr0), тоді як стандартний вихід є звичайним виводом, якщо команда не містить помилок, стандартна помилка – це помилка, створена командою. Вихід може містити як стандартний вихід, так і стандартний вхід. Приклад stdout і stderr:
Давайте запустимо наступний сценарій оболонки
# /bin/sh ls apt update>

Перша команда виконана успішно, але друга породила помилку. Оскільки stdout і stderr є двома окремими потоками даних, їх можна обробляти окремо.
Як отримати доступ до stderr і stdout?
Stdout і stderr — це потоки даних, обидва з яких розглядаються як файл у Linux. Якщо ви бажаєте виконати будь-яку дію з ними, ви використовуєте файловий дескриптор, який унікально ідентифікує файловий потік. Дескриптор файлу для stdout — 1, а для stderr — 2.
Щоб отримати доступ до них окремо, розглянемо наступну команду, яка виконується для того самого файлу сценарію, який використовувався в попередньому прикладі.
./script.sh 1>stdout.txt>

У цьому ви бачите, що вивід містить стандартні помилки, але стандартний вивід не відображався. Це пояснюється тим, що потік stdout було надіслано до файлу stdout.txt, і ви бачите, що файл stdout.txt містить стандартний вихід.
Під час написання сценарію оболонки ми можемо захотіти відкинути стандартну помилку з виводу. Незалежно від того, який потік ми хочемо придушити з виводу, цей потік даних можна записати в /dev/null. Ви можете записати ці дані в інший файл, як у прикладі вище, але якщо ці дані вам не потрібні, навіщо вам витрачати на них пам’ять, краще їх повністю видалити. Розглянемо наступний приклад
./script.sh 2>/dev/null>

І просто так ми видалили stderr з виводу. Якщо ви бажаєте скасувати повний вихід, ви можете використати таку команду
command>/dev/null 2>&1>
Команда &> перенаправляє вихідні дані файлового дескриптора, згаданого ліворуч (у наведеній вище команді вихід 2), у потік файлового дескриптора, згаданого праворуч. Таким чином, вихід stderr (2) перенаправляється на stdout (1), який, у свою чергу, записується в /dev/null і таким чином знищується.
Безпечне видалення файлів
‘/dev/null’ знаходить корисність у безпечному видаленні файлів. Переспрямувавши '/dev/null' у файл, ви можете ефективно перезаписати його вміст нульовими байтами, що ускладнить відновлення будь-яких значущих даних.
Наприклад:
cat /dev/null>чутливий_файл>>>Ця команда замінює вміст ‘sensitive_file’ нульовими байтами, забезпечуючи його безпечне видалення.
Очищення файлів журналу
Файли журналу можуть накопичувати значні дані з часом. Щоб очистити файли журналу, не перериваючи роботу служб, ви можете перенаправити їхній вміст до «/dev/null».
Наприклад:
команди LinuxЦя команда очищає файл «syslog», перенаправляючи його вміст до «/dev/null», фактично очищаючи журнал без видалення самого файлу. Поради та підказки:
- Переспрямування стандартного виводу на «/dev/null»: «command> /dev/null»
- Переспрямування стандартної помилки на «/dev/null»: «команда 2> /dev/null»
- Перенаправлення виводу та помилки на «/dev/null»: «команда>/dev/null 2>&1»
Висновок
У цій статті ми обговорювали `/dev/null' у Linux — це віртуальну чорну діру, у якій дані зникають під час запису. Він зазвичай використовується для відхилення виводу та помилок, що робить виконання команд чистішим. Його також можна використовувати для безпечного видалення файлів і очищення файлів журналу. Розуміння його функціональності дозволяє ефективно виконувати операції командного рядка в Linux.