Ако вече имаме някои понятия за дървото на директориите на GNU / Linux, трябва поне да сме запознати с / dev / reference, който е на практика там, където всички файлове, свързани с хардуерни устройства.
Ако погледнем в директорията / dev / ще видим "файл", наречен нула, но ако искаме да го отворим, за да видим съдържанието му, системата ще ни каже, че не е възможно, тъй като не е обикновено съдържание. Приложих думата файл, защото, както всички знаете за Linux, всичко (хардуер и софтуер) е представено като файл. |
На какво устройство отговаря / dev / null?
За практически цели си представете кофа за боклук, бездънна яма или космическо пространство, в което да хвърлите каквото и да било, без възможността да го възстановите (колкото и да се опитват хората от НАСА).
Но ако вече имам команди като rm, защо искам нещо ново, което да изтрия?
Защото начинът, по който работят и двете „черни дупки“, е напълно различен: как бихте могли да замените стандартния изход на грешка в команда в скрипта на черупката по време на изпълнение? Тук влиза / dev / null.
Нека го видим с пример.
Създадохме файл, наречен тестове, съдържащ низа "Hello World". Ако искаме да представим съдържанието на този файл в командния ред, можем да го направим по следния начин:
потребител @ лаптоп: ~ $ тест за котка
Здравей свят
Ако файлът не съществуваше или беше именуван като тестове (с 's' в края), щяхме да получим следната грешка в конзолата:
user @ laptop: ~ $ тестове за котки
cat: tests: Файлът или директорията не съществуват
Какво бихме могли да направим, за да избегнем съобщението за грешка? Е, просто пренасочете изхода на командата, в случай на грешка, към "кошче за боклук", тоест на / dev / null
Как да го посочим в случай на грешка? Тук въвеждате стандартните стойности за вход, изход и грешка за програма: STDIN, STDOUT и STDERR (които могат да бъдат заменени съответно на 0, 1 и 2). По този начин, ако сложим ...
потребител @ лаптоп: ~ $ cat тестове 2> / dev / null
потребител @ лаптоп: ~ $
... Ще видим, че съобщението за грешка няма да бъде изведено на конзолата.
Трябва да внимавате, защото синтаксисът е от съществено значение: между символите 2 и> не трябва да има интервал. В противен случай ще даде следното:
потребител @ лаптоп: ~ $ cat тестове 2> / dev / null
cat: tests: Файлът или директорията не съществуват
cat: 2: Файлът или директорията не съществуват
За разлика от това, интервал между> и / dev / null няма да повлияе отрицателно на резултата.
Можем също да използваме пренасочване на грешки, например, за улавяне на грешки в регистрационен файл, както следва:
потребител @ лаптоп: ~ $ cat тестове 2> err.log
Друг интересен случай би бил събирането на резултати в друг файл, стига да не възникне грешка, за което бихме поставили:
потребител @ лаптоп: ~ $ тест за котка 1> output_result 2> err.log
И накрая, възможно е да се постави израза «> / dev / null 2> & 1», в който се комбинират стандартният изход и изходът за грешка, като ги пренасочва, така че в никакъв случай не се получава изходна информация.
А, но липсва една от най-използваните помощни програми, която / dev / null има, което изпразва файлове: $ cat / dev / null> file.log По този начин файлът file.log ще бъде празен. Добавете го!
Точно обяснението търсеше.
Подкрепям предложението за добавяне =)
Saludos!
Здравейте, първо статията е много добра! второто бих искал да допринеса нещо с тази връзка по темата cron работа в php от Cpanel и третото поздравление за блога!
Хубава статия за dev / null, какъв срам мисля, че погрешно коментирах на грешното място преди! извинявам се
благодаря добър принос
Поздрави получавам нулева атака. Използвам andrirc и получавам private от псевдонима си с думата Null. 2 секунди след затварянето на програмата чета и от това, което виждам, това може да се направи само от Shell, а не от някой външен. Опитах се да се игнорирам / игнорирам -lrpcntikd и нищо не ме изненадва, командата продължава да идва. Ако имате някакъв начин да се опитате да го блокирате, ще го оценя. Наздраве
Какво се случва, ако при изпълнение на изречението символът> не е поставен?
Може ли някой да ме насочи, моля?
Добро утро, инсталирах Debian netinst в ACER Extensa 5620Z – 32 bit. След като инсталацията от USB приключи и флаш устройството се извади, така че да се стартира от твърдия диск (не преинсталирайте от писалката), но в момента на зареждане системата тя ме пита:
Вход в debian: xxxxxxxx (ОК)
Парола: xxxxxxxx (ОК)
nil@debian:~$ ???? какво е това? Какво да сложа там?
Без тази команда не мога да продължа със зареждането на системата.
Можеш ли да ми помогнеш? Не знам как да продължа.
Благодаря ти много. Поздрави.