Почему не делает sudo /dev/null > /var/log/syslog
и sudo > /var/log/syslog
работа, в то время как sudo rm /var/log/syslog
работы?!
Существует две основных проблемы.
Одна проблема - это /dev/null
не команда, таким образом работая sudo /dev/null
не может успешно выполниться. Вам нужно sudo [a command]
. В этом случае Вы, вероятно, хотите sudo cat /dev/null
.
Другая проблема - это >
разделяет вещи на полную команду слева и файл справа, таким образом, полная команда слева sudo cat /dev/null
, и sudo
задание теперь сделано, после того как оно работает cat /dev/null
.
Это означает что >
работает как Ваш пользователь, не под sudo
. У Вашего пользователя нет разрешения записать в /var/log/syslog
, таким образом, это перестанет работать.
Вам нужен некоторый способ выполнить всю строку cat /dev/null > /var/log/syslog
под sudo
. Ну, >
не команда или что-либо. Это - что-то дескрипторы оболочки, таким образом, у Вас должен быть дескриптор оболочки тот символ перенаправления правильно. Можно сделать это с sh
-c
опция: sh -c 'cat /dev/null > /var/log/syslog'
.
Теперь, когда у Вас есть все вместе как одна команда, Вы можете иметь sudo
выполните всю вещь:
sudo sh -c 'cat /dev/null > /var/log/syslog'
Команда, о которой Вы думаете, вероятно
> /var/log/syslog
, Ничто иное не необходимо. В ударе и других оболочках, эти >
сразу усечет файл, освобождая его. Однако, когда Вы выполняете это:
sudo /dev/null > /var/log/syslog
система пытается работать /dev/null
как команда, и Вы получите эту ошибку:
sudo: /dev/null: command not found
Примечание, однако, который несмотря на это, /var/log/syslog
был на самом деле освобожден , потому что, как я сказал выше, эти >
, достаточно, никакая команда не необходима.
truncate -s 0 /var/log/syslog
работа для меня на 18,04. Получил его отсюда:
truncate: процесс усечения в основном удаляет все содержимое файла. Он не удаляет сам файл, а оставляет его на диске как файл с нулевым байтом.
Очистите ВСЕ содержимое системного журнала с помощью:
sudo truncate -s 0 / var / log / syslog