なぜSudo /dev/null > /var/log/syslog
とSudo > /var/log/syslog
は機能しないのに、Sudo rm /var/log/syslog
は機能しないのですか?!
主に2つの問題があります。
問題の1つは、/dev/null
がコマンドではないため、Sudo /dev/null
を実行できないことです。 Sudo [a command]
が必要です。この場合、おそらくSudo cat /dev/null
が必要です。
もう1つの問題は、>
が左側の完全なコマンドと右側のファイルに分けているため、左側のfull commandはSudo cat /dev/null
であり、Sudo
のジョブは、cat /dev/null
を実行すると完了します。
つまり、Sudo
の下ではなく、>
がユーザーとして実行されています。ユーザーには/var/log/syslog
への書き込み権限がないため、これは失敗します。
Sudo
の下でcat /dev/null > /var/log/syslog
行全体を実行する何らかの方法が必要です。さて、>
はコマンドなどではありません。これはシェルが処理するものなので、そのリダイレクトシンボルを適切に処理するシェルが必要です。 sh
の-c
オプションでそれを行うことができます:sh -c 'cat /dev/null > /var/log/syslog'
。
すべてを1つのコマンドとしてまとめたので、Sudo
で全体を実行できます。
Sudo sh -c 'cat /dev/null > /var/log/syslog'
truncate -s 0 /var/log/syslog
18.04に私のために働いています。ここからそれを得ました:
あなたが考えているコマンドはおそらく
> /var/log/syslog
他に何も必要ありません。 bashやその他のシェルでは、>
はすぐにファイルを切り捨てて空にします。ただし、これを実行すると:
Sudo /dev/null > /var/log/syslog
システムは/dev/null
をコマンドとして実行しようとしていますが、次のエラーが表示されます。
Sudo: /dev/null: command not found
ただし、これにも関わらず、/var/log/syslog
実際には空になっているであることに注意してください。前述したように、>
で十分なので、コマンドは不要です。