sudo /dev/null > /var/log/syslog and
sudo > /var/log/syslog work, while
sudo rm /var/log/syslog works?!
There are two main problems.
One problem is that
/dev/null isn't a command, so running
sudo /dev/null can't succeed. You need
sudo [a command]. In this case, you probably want
sudo cat /dev/null.
The other problem is that
> separates things into a full command on the left and a file on the right, so the full command on the left is
sudo cat /dev/null, and
sudo's job is now done once it runs
That means that the
> is running as your user, not under
sudo. Your user doesn't have permission to write to
/var/log/syslog, so this will fail.
You need some way to run the entire line
cat /dev/null > /var/log/syslog under
> isn't a command or anything. It's something the shell handles, so you need to have a shell handle that redirection symbol properly. You can do that with
sh -c 'cat /dev/null > /var/log/syslog'.
Now that you have everything together as one command, you can have
sudo run the entire thing:
sudo sh -c 'cat /dev/null > /var/log/syslog'
The command you are thinking of is probably
Nothing else is needed. In bash and other shells, the
> will immediately truncate the file, emptying it. However, when you run this:
sudo /dev/null > /var/log/syslog
The system is attempting to run
/dev/null as a command and you will get this error:
sudo: /dev/null: command not found
Note, however, that despite this,
/var/log/syslog has actually been emptied because, as I said above, the
> is enough, no command is necessary.