Что такое / dev / null и чем он может вам помочь?

Если у нас уже есть какое-то представление о дереве каталогов GNU / Linux, мы должны, по крайней мере, быть знакомы со ссылкой / dev /, где фактически находятся все файлы, относящиеся к аппаратные устройства.

Если мы заглянем в каталог / dev / мы увидим "файл" под названием нуль, но если мы хотим открыть его, чтобы увидеть его содержимое, система сообщит нам, что это невозможно, поскольку это не обычное содержимое. Я заключил слово файл, потому что, как вы все знаете, для Linux все (оборудование и программное обеспечение) представлено в виде файла.

Это вклад Даниэля Дюранте, который стал одним из победителей нашего еженедельного конкурса: «Поделитесь своими знаниями о 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», в котором объединены стандартный вывод и вывод ошибок, перенаправляя их так, чтобы ни в коем случае не была получена информация вывода.


8 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Гвидо Игнасио Игнасио сказал

    Ах, но отсутствует одна из наиболее часто используемых утилит в / dev / null, которая очищает файлы: $ cat / dev / null> file.log Таким образом, файл file.log будет пустым. Добавьте это!

    1.    Эдуардо Х сказал

      Это было именно то объяснение, которое он искал.
      Поддерживаю предложение добавить =)

      Saludos!

  2.   Пабло сказал

    Здравствуйте, во-первых, статья очень хорошая! во-вторых, я хотел бы внести свой вклад в эту ссылку по этой теме cron на php из Cpanel и третье поздравление для блога!

  3.   Пабло сказал

    Хорошая статья на dev / null, какой позор, я думаю, что раньше я ошибочно прокомментировал не в том месте! я извиняюсь

  4.   анонимный сказал

    хорошим вкладом благодаря

  5.   Джерс сказал

    Привет, получаю нулевую атаку. Я использую andrirc и получаю приват от моего ника со словом Null. Через 2 секунды программа закрывается. Я читал, и из того, что я вижу, это может сделать только Shell, а не кто-то извне. Я пытался игнорировать себя / игнорировать -lrpcntikd, и меня ничего не удивляет, команда продолжает поступать. Если у вас есть способ заблокировать его, я был бы признателен. Ура

  6.   София Мартинес сказал

    Что будет, если при исполнении предложения не поставить символ>?

    Может ли кто-нибудь помочь мне?

  7.   Ноль сказал

    Доброе утро, я установил Debian netinst в ACER Extensa 5620Z — 32 бит.После завершения установки с USB и удаления флешки, чтобы он загружался с жесткого диска (не переустанавливать с пера), но в момент загрузки система, она спрашивает меня:
    Логин Debian: хххххххх (хорошо)
    Пароль: хххххххх (ок)
    ноль@debian:~$ ???? что это? Что мне туда положить?

    Без этой команды я не могу продолжить загрузку системы.
    Вы можете помочь мне? Я не знаю, как мне продолжать.
    Спасибо большое. С уважением.