Какво е /dev /null и как да го използвам

What Is Dev Null How Use It



Linux е интересна операционна система, която хоства някои виртуални устройства за множество цели. Що се отнася до програмите, работещи в системата, тези виртуални устройства действат сякаш са истински файлове. Инструментите могат да изискват и подават данни от тези източници. Данните се генерират от операционната система, вместо да ги четат от диск.

Един такъв пример е /dev /null. Това е специален файл, който присъства във всяка отделна система на Linux. Въпреки това, за разлика от повечето други виртуални файлове, вместо четене, той се използва за писане. Всичко, което пишете на /dev /null, ще бъде изхвърлено и забравено в празнотата. Известно е като нулево устройство в UNIX система.







Защо искате да изхвърлите нещо в празнотата? Нека проверим какво е /dev /null и неговото използване.



Предпоставки

Преди да се потопим дълбоко в използването на /dev /null, трябва да имаме ясно разбиране на stdout и stderr поток от данни. Проверете това задълбочено ръководство за stdin , stderr , и stdout .



Нека бързо опресним. Всеки път, когато се изпълнява помощна програма за командния ред, тя генерира два изхода. Изходът отива към stdout и грешката (ако е генерирана) отива към stderr . По подразбиране и двата потока от данни са свързани с терминала.





Например, следната команда ще отпечата низа в двойните кавички. Тук изходът се съхранява в stdout .

$изхвърленЗдравей свят



Следващата команда ще ни покаже състоянието на излизане на предишната команда.

$изхвърлен $?

Тъй като предишната команда се изпълни успешно, състоянието на излизане е 0. В противен случай състоянието на излизане ще бъде различно. Какво се случва, когато се опитате да изпълните невалидна команда?

$ adfadsf
$изхвърлен $?

Сега трябва да знаем за файловия дескриптор. В екосистемата UNIX това са цели числа, присвоени на файл. И двете stdout (дескриптор на файл = 1) и stderr (дескриптор на файл = 2) имат специфичен файлов дескриптор. Използвайки файловия дескриптор (1 и 2 в тази ситуация), можем да пренасочим stdout и stderr към други файлове.

Като начало следният пример ще пренасочи stdout на командата echo към текстов файл. Тук не посочихме файловия дескриптор. Ако не е посочено, ще използва bash stdout по подразбиране.

$изхвърленЗдравей свят>log.txt

Следващата команда ще пренасочи stderr към текстов файл.

$asdfadsa2>error.txt

Използване на /dev /null

Пренасочване на изхода към /dev /null

Сега сме готови да научим как да използваме /dev /null. Първо, нека проверим как да филтрираме нормален изход и грешка. В следната команда grep ще се опита да търси низ (в този случай здравей, в директорията /sys).

$захващане -rЗдравейте/sys/

Въпреки това, той ще генерира много грешки, тъй като без root права, grep няма достъп до редица файлове. В такъв случай това ще доведе до грешки при отказ на разрешение. Сега, използвайки пренасочването, можем да получим по -ясен изход.

$захващане -rЗдравейте/sys/ 2> /dev/нула

Изходът изглежда много по -добре, нали? Нищо! В този случай grep няма достъп до много файлове, а тези, които са достъпни, нямат низа hello.

В следния пример ще пингваме Google.

$пингGoogle com

Не искаме обаче да виждаме всички тези успешни резултати от пинг. Вместо това искаме да се съсредоточим само върху грешките, когато ping не може да достигне до Google. Как да направим това?

$пингGoogle com1> /dev/нула

Тук съдържанието на stdout се изхвърлят в /dev /null, оставяйки само грешките.

Пренасочете целия изход към /dev /null

В определени ситуации изходът може изобщо да не е полезен. Използвайки пренасочване, можем да изхвърлим целия изход в празнотата.

$захващане -rЗдравейте/sys/ > /dev/нула2> &1

Нека разбием малко тази команда. Първо, изхвърляме всичко stdout към /dev /null. След това, във втората част, казваме на bash да изпрати stderr да се stdout . В този пример няма какво да се изведе. Ако обаче сте объркани, винаги можете да проверите дали командата е изпълнена успешно.

$изхвърлен $?

Стойността е 2, защото командата генерира много грешки.

Ако сте склонни да забравите файловия дескриптор на stdout и stderr , следната команда ще се справи добре. Това е по -обобщен формат на предишната команда. И двете stdout и stderr ще бъде пренасочен към /dev /null.

$захващане -rЗдравейте/sys/ &> /dev/нула

Други примери

Това е интересно. Помните ли инструмента dd? Това е мощен инструмент за конвертиране и копиране на файлове. Научете повече за dd. С помощта на dd можем да тестваме скоростта на последователно четене на вашия диск. Разбира се, това не е точно измерване. Въпреки това, за бърз тест, това е доста полезно.

$дд ако=<голям_файл> на=/dev/нуласъстояние= напредъкbs= 1Мiflag= директно

Тук използвах Ubuntu 18.04.4 ISO като голям файл.

По същия начин можете също да тествате скоростта на изтегляне на вашата интернет връзка.

$wget -ИЛИ /dev/нула<big_file_link>

Последни мисли

Надяваме се, че имате ясно разбиране за това какво представлява този /dev /null файл. Това е специално устройство, което, ако е записано на него, изхвърля и ако се чете от него, чете нула. Истинският потенциал на тази интересна функция е в интересни баш скриптове.

Интересувате ли се от bash скриптове? Разгледайте ръководството за начинаещи по bash скриптове .

Наслади се!