Предполагая, что команды выполнены успешно, /var/log/messages
и /var/log/wtmp
все еще существуют, но теперь пустой.
Перенаправление оболочки
>
это оператор перенаправления, реализованный оболочкой. Его синтаксис таков:
команда> файл
Это перенаправляет command
'с стандартный выходной сигнал к file
.
-
file
может также быть узел устройства. - Если
file
не существует, он создается как обычный файл. - Если
file
уже существует как обычный файл и не является пустым, он перезаписывается. Обычно это имеет место в командах, которые вы выполняли, когда вы перенаправляли выводcat /dev/null
кmessages
иwtmp
. - Если
file
уже существует как символическая ссылка, используется цель ссылки. - Если
file
уже существует как каталог, вы получите сообщение об ошибке типаbash: файл: Является каталогом
.
(Конечно, эти операции могут завершиться неудачей по другим причинам, таким как отсутствие разрешения или ошибка файловой системы.)
То >>
оператор перенаправления аналогичен, но он добавляет в конец непустых обычных файлов вместо перезапись их содержание. (Другим оператором перенаправления является <
. команда < файл
использует file
как command
'с стандартный ввод.)
То null
Устройство
/dev/null
это простое устройство (реализованное в программном обеспечении и не соответствующее ни одному аппаратному устройству в системе).
-
/dev/null
выглядит пустым, когда вы читаете из него. - Пишу в
/dev/null
ничего не делает: данные, записанные на это устройство, просто "исчезают".
Часто стандартный вывод команды отключается путем перенаправления его на /dev/null
, и это , пожалуй, самый null
наиболее распространенное использование устройства в сценариях оболочки:
команда> /dev/null
Ты используешь /dev/null
иначе. cat /dev/null
выводит "содержимое" /dev/null
, то есть его выходные данные пусты. > messages
(или > wtmp
) приводит к перенаправлению этого пустого вывода в файл в правой части >
оператор.
С messages
и wtmp
являются обычными файлами (а не, например, узлами устройств), они превращаются в пустые файлы (т.е. очищаются).
Вы можете использовать любую команду, которая ничего не делает и не выдает никаких выходных данных, слева от >
.
Альтернативным способом очистки этих файлов было бы запустить:
echo -n > messagesecho -n > wtmp
То -n
флаг является обязательным, или echo
пишет новая строка характер.
(Это всегда работает в bash
. И я верить значение по умолчанию sh
в каждом дистрибутиве GNU /Linux и других Unix-подобных системах, широко используемых сегодня, поддерживается -n
флаг в его echo
встроенный. Но джиллиагр прав тот echo -n
следует избегать использования действительно переносимого сценария оболочки, поскольку он не требуется для работы. Может быть, именно поэтому руководство, которым вы пользуетесь учит тому, cat /dev/null
путь вместо этого.)
То echo -n
способ эквивалентен по своим эффектам, но, возможно, является лучшим решением, поскольку он проще.cat /dev/null > файл
открывает три "файла":
- То
cat
исполняемый файл (обычно/bin/cat
), обычный файл. - То
/dev/null
устройство. file
В отличие от, echo -n > файл
открывается только file
(echo
является встроенной оболочкой).
Хотя следует ожидать, что это улучшит производительность, это не является преимуществом - во всяком случае, не при простом выполнении пары этих команд вручную. Вместо этого преимущество заключается в том, что легче понять, что происходит.
Перенаправление и тривиальная (пустая/пустая) команда.
Как Джиллиагр указал на (см. также ответ Джиллиагра), это можно сократить еще больше, просто опустив команду слева от >
в целом. В то время как вы не можете опустить правую часть >
или >>
выражение, пустая команда действительна (это команда, которую вы выполняете, когда просто нажимаете Enter в пустой строке), и, опуская левую часть, вы просто перенаправляете вывод этой команды.
- Обратите внимание, что этот вывод делает нет содержать новую строку. Когда вы нажимаете Enter в командной строке - независимо от того, ввели вы что-либо или нет - командная оболочка (работающая в интерактивном режиме) выводит новую строку перед выполнением выданной команды. Эта новая строка не является частью выходных данных команды.
Перенаправление из пустой команды (вместо из cat /dev/null
или echo -n
) выглядит как:
> messages> wtmp