Если у нас уже есть какое-то представление о дереве каталогов 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», в котором объединены стандартный вывод и вывод ошибок, перенаправляя их так, чтобы ни в коем случае не была получена информация вывода.
Ах, но отсутствует одна из наиболее часто используемых утилит в / dev / null, которая очищает файлы: $ cat / dev / null> file.log Таким образом, файл file.log будет пустым. Добавьте это!
Это было именно то объяснение, которое он искал.
Поддерживаю предложение добавить =)
Saludos!
Здравствуйте, во-первых, статья очень хорошая! во-вторых, я хотел бы внести свой вклад в эту ссылку по этой теме cron на php из Cpanel и третье поздравление для блога!
Хорошая статья на dev / null, какой позор, я думаю, что раньше я ошибочно прокомментировал не в том месте! я извиняюсь
хорошим вкладом благодаря
Привет, получаю нулевую атаку. Я использую andrirc и получаю приват от моего ника со словом Null. Через 2 секунды программа закрывается. Я читал, и из того, что я вижу, это может сделать только Shell, а не кто-то извне. Я пытался игнорировать себя / игнорировать -lrpcntikd, и меня ничего не удивляет, команда продолжает поступать. Если у вас есть способ заблокировать его, я был бы признателен. Ура
Что будет, если при исполнении предложения не поставить символ>?
Может ли кто-нибудь помочь мне?
Доброе утро, я установил Debian netinst в ACER Extensa 5620Z — 32 бит.После завершения установки с USB и удаления флешки, чтобы он загружался с жесткого диска (не переустанавливать с пера), но в момент загрузки система, она спрашивает меня:
Логин Debian: хххххххх (хорошо)
Пароль: хххххххх (ок)
ноль@debian:~$ ???? что это? Что мне туда положить?
Без этой команды я не могу продолжить загрузку системы.
Вы можете помочь мне? Я не знаю, как мне продолжать.
Спасибо большое. С уважением.