Какво точно прави 2>/dev/null?

What Exactly Does 2 Dev Null Do



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

Нулево устройство - „/dev/null“

Всички базирани на Linux системи имат функция, наречена виртуални устройства. Тези виртуални устройства взаимодействат като действителни файлове в операционната система. Работата на такива виртуални устройства е подобна на реалните устройства; те се използват за писане и четене на данни. Основната разлика между двете е, че данните за виртуалните устройства се доставят от операционната система.







/dev/null е нулево устройство - специален тип виртуално устройство. Той присъства във всяка система на Linux и целта на това устройство е да изхвърли всичко, изпратено до него, и да прочете края на файла (EOF). Повечето виртуални устройства се използват за четене на данни; /dev /null обаче е уникален, тъй като се използва за потискане на всички записани данни. С прости думи, той действа като черна дупка за всички данни, които се записват в него в операционни системи Linux.



Сега нека да разгледаме останалите части на командата 2> /dev /null



Дескриптор на файл - „2“

Всяко изпълнение на команда в Linux генерира три свързани файла: стандартен вход, стандартен изход и стандартни файлове с грешки. Операционната система Linux се отнася до всеки от тези файлове с уникално неотрицателно цяло число.





  • '0' за стандартен вход
  • „1“ за стандартен изход
  • „2“ за стандартна грешка

Техническите условия за стандартен вход, стандартен изход и стандартни грешки са stdin, stdout и stderr, съответно.

Знаем, че числото „2“ в командата „2>/dev/null“ се отнася до потока от стандартни грешки (stderr).



Оператор за пренасочване на файлове - ‘>’

Символът „>“ е известен като оператор за пренасочване на файлове. Неговата цел е да насочи това, което е отляво към командите от дясната страна. С по -прости думи, всеки низ от данни вляво ще бъде насочен към дясната страна на оператора.

Досега разбрахме целта зад всеки компонент на командата 2>/dev/null. Той изпраща потока от грешки на /dev /null, който го изхвърля. С други думи, тази команда се използва за изхвърляне и потискане на изходите за грешки. Ако обаче сте опитен Linux ветеран, можете да разгледате съдържанието на /dev /null файла, като изпълните следната команда в терминала:

$ls -на /dev/нула

Тази команда обикновено се използва в сценарии, при които трябва да филтрираме изхода въз основа на грешки или когато искаме да изхвърлим всеки изход, свързан с погрешни описания. Продължавайки напред, ще разгледаме примери за използването му в система Ubuntu.

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

Тъй като знаем, че командата 2>/dev/null се използва за изхвърляне на грешки, тя винаги ще се използва заедно с други команди. Ще видим подобен подход в следващите примери. Можете да отворите терминала или като влезете в него чрез менюто с приложения, или като използвате клавишната комбинация Ctrl + Alt + T.

В първия пример ще извършим търсене в директорията / sys / за произволен низ (в този случай helloworld). Командата за търсене е grep, а неговият аргумент ще бъде низът за търсене. Въведете следната команда за търсене на вашия низ.

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

Тази команда за търсене е длъжна да показва множество грешки, тъй като се използва без root достъп. Ще изпратим потока от грешки на/dev/null, като използваме командата 2>/dev/null, за да изхвърлим тези грешки.

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

Можем да видим, че изходът на командата е много по -изчистен и по -прост от последния. Причината е, че грешките се изхвърлят с помощта на 2> /dev /null и тъй като командата grep не успя да намери файл, съответстващ на нашия низ „helloworld“, тя не показва никакъв изход.

За да разберем по -добре използването на /dev /null, ще разгледаме следния пример за пинг на всеки уебсайт (google.com в нашия случай). Можете да пингвате google.com, като изпълните следната команда:

$пингGoogle com

Ако искаме да изключим всички неуспешни пингове, можем да използваме командата 2>/dev/null:

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

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

Ако обаче искаме да видим само неуспешните пингове, можем да изпълним следната команда:

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

Тук изпращаме стандартния изходен поток (stdout) към /dev /null устройството, което го изхвърля. Следователно, остават ни само пинговете, които не успяха да достигнат до сървъра google.com. В нашия случай обаче нямаше неуспешни пингове. Също така можем да насочим stdout и stderr към различни места. Това е полезно, ако искаме да изхвърлим изходните данни и да съхраняваме грешки в дневник или обратно. Можете да изпълните следната команда, за да съхраните неуспешните пингове в регистър на грешки, като същевременно изхвърлите стандартния изход на командата ping:

$пингGoogle com1> /dev/нула2>error.log

Понякога може да искате да потиснете целия изход на команда (включително стандартен изход и стандартни грешки). Можем да постигнем това, като използваме /dev /null устройството по малко по -различен начин. Можете да въведете следната команда, за да потиснете целия изход:

$пингGoogle com> /dev/нула2> &1

Обърнете внимание, че редът на командите тук е много важен. След изпълнение на командата ping, '>/dev/null' казва на системата да потисне изхода, а '2> & 1' насочва стандартния поток от грешки към стандартен изход. По този начин всички резултати от командата се изхвърлят.

Заключение

Разделихме командата 2>/dev/null и прости примери в тази статия и се надяваме, че сега разбирате какво прави всеки бит от нея. Това обаче е само върхът на айсберга; нулевите устройства се използват по множество начини в bash програмирането. Някои от по -напредналите приложения включват проверка на съществуването на файл, автоматизиране на инсталирането на пакети и избягване на скриптове да се сблъскат с нежелани изключения.