Управление на файлове

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

Какво е / dev / null и как да се използва
Linux е интересна операционна система, която хоства някои виртуални устройства за множество цели. Що се отнася до изпълняваните в системата програми, тези виртуални устройства се държат така, сякаш са реални файлове. Инструментите могат да изискват и подават данни от тези източници. Данните се генерират от ОС, вместо да се четат от диск.

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

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

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

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

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

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

$ echo „Hello World”

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

$ echo $?

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

$ adfadsf
$ echo $?

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

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

$ echo “Hello World”> дневник.текст

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

$ asdfadsa 2> грешка.текст

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

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

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

$ grep -r здравей / sys /

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

$ grep -r здравей / sys / 2> / dev / null

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

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

$ ping google.com

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

$ ping google.com 1> / dev / null

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

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

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

$ grep -r здравей / sys /> / dev / null 2> & 1

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

$ echo $?

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

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

$ grep -r здравей / sys / &> / dev / null

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

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

$ dd ако = на = / dev / null статус = прогрес bs = 1M iflag = директно

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

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

$ wget -O / dev / null

Финални мисли

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

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

Наслади се!

Безплатни и игри с отворен код за разработване на Linux игри
Тази статия ще обхване списък с безплатни двигатели за игри с отворен код, които могат да се използват за разработване на 2D и 3D игри на Linux. Същес...
Урок Сянка на Tomb Raider за Linux
Shadow of the Tomb Raider е дванадесетото допълнение към поредицата Tomb Raider - франчайз за екшън-приключенска игра, създаден от Eidos Montreal. Игр...
Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...