Предполагая, что команды выполнены успешно, /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