|
Если у нас уже есть какое-то представление о дереве каталогов GNU / Linux, мы должны, по крайней мере, быть знакомы со ссылкой / dev /, где фактически находятся все файлы, относящиеся к аппаратные устройства.
Если мы заглянем в каталог / dev / мы увидим "файл" под названием нуль, но если мы хотим открыть его, чтобы увидеть его содержимое, система сообщит нам, что это невозможно, поскольку это не обычное содержимое. Я заключил слово файл, потому что, как вы все знаете, для Linux все (оборудование и программное обеспечение) представлено в виде файла. |
Какому устройству соответствует / dev / null?
Для практических целей представьте мусорное ведро, бездонную яму или космическое пространство, в которое можно бросить что-нибудь без возможности вернуть это (как бы ни старались ребята из НАСА).
Но если у меня уже есть такие команды, как rm, зачем мне удалять что-то новое?
Поскольку обе «черные дыры» работают совершенно по-разному: как бы вы переопределили стандартный вывод ошибки в команде в сценарии оболочки во время выполнения? Здесь на помощь приходит / dev / null.
Посмотрим на это на примере.
Мы создали файл с именем tests, содержащий строку «Hello World». Если мы хотим представить содержимое этого файла в командной строке, мы могли бы сделать это следующим образом:
пользователь @ ноутбук: ~ $ cat test
Привет, мир
Если бы файл не существовал или был назван тестом (с буквой s в конце), мы получили бы следующую ошибку в консоли:
пользователь @ ноутбук: ~ $ cat тесты
cat: tests: файл или каталог не существует
Что мы могли сделать, чтобы избежать сообщения об ошибке? Ну, просто перенаправьте вывод команды в случае ошибки в «мусорное ведро», то есть в / dev / null
Как указать, что это будет в случае ошибки? Здесь вы вводите стандартные значения ввода, вывода и ошибок для программы: STDIN, STDOUT и STDERR (которые могут быть заменены на 0, 1 и 2 соответственно). Таким образом, если мы положим ...
пользователь @ ноутбук: ~ $ cat tests 2> / dev / null
пользователь @ ноутбук: ~ $
… Мы увидим, что сообщение об ошибке не выводится на консоль.
Вы должны быть осторожны, потому что синтаксис очень важен: между символами 2 и> не должно быть пробелов. В противном случае это дало бы следующее:
пользователь @ ноутбук: ~ $ cat tests 2> / dev / null
cat: tests: файл или каталог не существует
cat: 2: файл или каталог не существует
Напротив, пробел между> и / dev / null не повлияет отрицательно на результат.
Мы также можем использовать перенаправление ошибок, например, для записи ошибок в файл журнала следующим образом:
пользователь @ ноутбук: ~ $ cat tests 2> err.log
Еще один интересный случай - это сбор результатов в другом файле, пока не возникает ошибка, для чего мы бы поместили:
пользователь @ ноутбук: ~ $ cat test 1> output_result 2> err.log
Наконец, стоит поставить выражение «> / dev / null 2> & 1», в котором объединены стандартный вывод и вывод ошибок, перенаправляя их так, чтобы ни в коем случае не была получена информация вывода.