sudo echo “quelque chose” >> /etc/privilegedFile ne fonctionne pas
C'est une question assez simple, au moins, il semble que ce devrait être, à propos de sudo autorisations dans Linux.
Il y a beaucoup de moments où j'ai juste envie d'ajouter quelque chose à /etc/hosts
ou d'un fichier similaire, mais finissent par ne pas être capable de parce que les deux >
et >>
ne sont pas autorisés, même avec la racine.
Est là d'une certaine manière pour faire ce travail sans avoir à su
ou sudo su
en root?
InformationsquelleAutor David | 2008-09-17
Vous devez vous connecter pour publier un commentaire.
Utilisation
tee --append
outee -a
.Assurez-vous d'éviter de guillemets à l'intérieur des guillemets.
Afin d'éviter l'impression de données à la console, rediriger la sortie vers /dev/null.
echo 'tmpfs /tmp tmpfs defaults 0 0' | sudo tee /etc/fstab
feraittee -a
au lieu detee --append
.-a
(--append
) drapeau la commande serait de remplacer la totalité du fichier avec la chaîne au lieu d'ajouter à la fin.-a
sur le Serveur Ubuntu 16.04,--append
est ignoré comme @totymedli illustre.Le problème est que le shell ne redirection de la sortie, pas de sudo echo, donc c'est votre utilisateur régulier.
Essayez l'extrait de code suivant:
sh
, echo peut interpréter les séquences d'échappement comme\t
à l'intérieur des guillemets simples. Vous pouvez utiliserprintf %s 'something'
à la place.sudo /bin/bash -c "echo 'fs.inotify.max_user_watches = 524288' > /etc/sysctl.d/60-golang-inotify.conf"
par exemple.sudo sh -c "!!"
Le problème c'est que c'est le shell qui gère la redirection; c'est en essayant d'ouvrir le fichier avec votre autorisations sont pas ceux du processus, vous êtes en cours d'exécution en vertu de sudo.
Utiliser quelque chose comme cela, peut-être:
sudo
(pour des raisons de sécurité) ne se propagent pas l'environnement pour le processus secondaire. Vous pouvez utilisersudo -E
de contourner cette restriction.sudo sh -c "echo 'something' >> $FILENAME"
, avec des guillemets, ce est travail - la substitution de variable se fait par la coque extérieure, pas la sudoed shell.Faire
devrait fonctionner. Le problème, c'est que > et >> sont gérées par votre shell, et non par le "sudoed de la commande", de sorte que les autorisations sont vos proches, ne sont pas ceux de l'utilisateur que vous êtes "sudoing" en.
Je tiens à souligner, pour les plus curieux, que vous pouvez également citer un heredoc (pour les gros blocs):
"
, mais ne provoque pas l'échec de la commande.)En bash, vous pouvez utiliser
tee
en combinaison avec> /dev/null
de garder stdout propre.À l'aide de Yoo répondre, mettez ceci dans votre
~/.bashrc
:Maintenant, vous pouvez exécuter
sudoe 'deb blah # blah' /etc/apt/sources.list
Edit:
Une version plus complète qui vous permet de tuyau d'entrée ou de redirection à partir d'un fichier et comprend un
-a
commutateur pour désactiver l'ajout (qui est par défaut):Vous pouvez également utiliser
sponge
de lamoreutils
paquet et pas besoin de rediriger la sortie (c'est à dire, pas detee
de bruit pour masquer):echo 'Hello World' | sudo tee-a /etc/apt/sources.liste)
Cela a fonctionné pour moi:
de la commande d'origine
Travail de commande
tee -a
. Justetee
va écraser le fichier!En utilisant sed-i avec $ un , vous pouvez ajouter du texte, contenant à la fois des variables et des caractères spéciaux, après la dernière ligne.
Par exemple, l'ajout de NEW_HOST avec $NOUVELLE_IP à /etc/hosts:
sed options expliqué:
Pouvez-vous changer le propriétaire du fichier, puis le modifier après l'utilisation de
cat >>
à ajouter?Quelque chose comme ce travail pour vous?