Dupliquer possible:
[.____] Redirection de stdout à un fichier que vous n'avez pas d'autorisation d'écriture
Exécuter une commande comme Sudo echo 'text' >> /file.txt
échoue avec:
bash: /file.txt: Permission denied
Cela ne fonctionne pas car la redirection est exécutée par la coquille, non par la commande qui s'applique à. Mais votre coquille ne fonctionne pas en tant que root, seulement echo 'text'
est.
Une astuce commune lorsque vous devez avoir des autorisations root pour écrire dans un fichier, mais pour ne pas générer les données, est d'utiliser tee
:
echo 'text' | Sudo tee -a /file.txt
tee
imprime également le texte sur stdout. Afin de le mettre en sourdine, il se comporte plus semblable à la coque ajoutée (>>
), acheminez le stdout pour /dev/null
:
echo 'text' | Sudo tee -a /file.txt > /dev/null
Si vous avez besoin d'autorisations de racine pour générer les données, vous pouvez exécuter deux commandes distinctes Sudo
ou exécuter une coque à l'intérieur Sudo
et faire la redirection là-bas (prudent avec la citation).
Sudo echo 'text' | Sudo tee -a /file.txt
Sudo sh -c 'echo "text" >>/file.txt'
Lorsque vous écrasez plutôt que d'ajouter, si vous êtes habitué à votre shell refusant de tronquer un fichier existant avec le >
Opérateur (set -o noclobber
), rappelez-vous que cette protection ne s'appliquera pas. Sudo sh -c 'echo >/etc/passwd'
et Sudo tee /etc/passwd
écrasera /etc/passwd
, vous auriez besoin de Sudo sh -o noclobber -c 'echo >/etc/passwd'
pour ce paramètre noclobber
doit également être appliqué sur sh
commencé par Sudo
.
Vous indiquez bash d'ouvrir un fichier et d'ajouter la sortie de la commande Sudo echo 'text'
Pour cela, ce qui ne fonctionne bien sûr pas depuis que votre bash fonctionne comme une non-racine. Interactivement, je gère habituellement Sudo -s
Pour contourner cela (puisque la coquille fonctionne en tant que root et peut ouvrir le fichier). Alternativement, vous pouvez courir Sudo sh -c "echo 'text' >> /file.txt"
, qui fonctionne également, mais est un peu tracas avec toute l'interpolation/l'échappée qui peut interférer si vous avez des expressions compliquées.