Pourquoi Sudo /dev/null > /var/log/syslog
et Sudo > /var/log/syslog
ne fonctionnent-ils pas, alors que Sudo rm /var/log/syslog
fonctionne?!
Il y a deux problèmes principaux.
Un problème est que /dev/null
n'est pas une commande, donc exécuter Sudo /dev/null
ne peut pas réussir. Vous avez besoin de Sudo [a command]
. Dans ce cas, vous voulez probablement Sudo cat /dev/null
.
L’autre problème est que >
sépare les éléments en une commande complète à gauche et un fichier à droite, de sorte que commande complète à gauche correspond à Sudo cat /dev/null
et que le travail de Sudo
est maintenant exécuté une fois que cat /dev/null
est exécuté.
Cela signifie que le >
est exécuté en tant qu'utilisateur et non pas sous Sudo
. Votre utilisateur n’a pas l’autorisation d’écrire sur /var/log/syslog
, donc cela échouera.
Vous avez besoin d’un moyen d’exécuter la ligne complète cat /dev/null > /var/log/syslog
sous Sudo
. >
n'est pas une commande ou quoi que ce soit. C'est quelque chose que Shell gère, vous devez donc avoir un Shell pour gérer correctement ce symbole de redirection. Vous pouvez le faire avec l'option -c
de sh
: sh -c 'cat /dev/null > /var/log/syslog'
.
Maintenant que vous avez tout en une seule commande, vous pouvez avoir Sudo
exécuter tout le processus:
Sudo sh -c 'cat /dev/null > /var/log/syslog'
La commande à laquelle vous pensez est probablement
> /var/log/syslog
Rien d'autre n'est nécessaire. Dans bash et d'autres shells, le >
tronquera immédiatement le fichier, le vider. Cependant, lorsque vous exécutez ceci:
Sudo /dev/null > /var/log/syslog
Le système tente d'exécuter /dev/null
en tant que commande et vous obtiendrez cette erreur:
Sudo: /dev/null: command not found
Notez cependant que malgré cela, /var/log/syslog
a en fait été vidé car, comme je l’ai dit ci-dessus, le >
suffit, aucune commande n’est nécessaire.
truncate -s 0 /var/log/syslog
travaillant pour moi le 18.04. Je l'ai eu d'ici: