Je veux faire:
echo "something" >> /etc/config_file
Mais, étant donné que seul l'utilisateur root a l'autorisation d'écriture sur ce fichier, je ne peux pas le faire. Mais ce qui suit ne fonctionne pas non plus.
Sudo echo "something" >> /etc/config_file
Existe-t-il un moyen d'ajouter un fichier à un fichier dans cette situation sans avoir à l'ouvrir au préalable avec un éditeur Sudo
'd, puis à l'ajout manuel du nouveau contenu?
Le bon outil pour la bonne tâche: ' tee '
tee - read from standard input and write to standard output and files
Donc, votre ligne de commande devient
% echo "output" | Sudo tee -a file
L’avantage de tee
sur l’exécution de Bash avec des autorisations administratives est le suivant:
La redirection est exécutée dans le shell actuel. Pour effectuer la redirection avec des privilèges élevés, vous devez exécuter le shell lui-même avec des privilèges élevés:
Sudo bash -c "somecommand >> somefile"
Est-ce que Sudo génère un sous-shell:
Sudo sh -c "echo 'Java_HOME=/usr/lib/jvm/Java-6-Sun' >> /etc/profile"
Dans cet exemple, Sudo exécute "sh" avec le reste comme arguments.
(ceci est présenté à titre d'exemple dans la page de manuel Sudo)
J'utilise habituellement le document Shell ICI avec Sudo tee -a . Quelque chose dans le genre de:
Sudo tee -a /etc/profile.d/Java.sh << 'EOF'
# configures Java
JAVA_HOME=/usr/lib/jvm/Java-8-Oracle
export Java_HOME
export PATH=$PATH:$Java_HOME/bin
EOF
À mon avis, le meilleur dans ce cas est dd:
Sudo dd of=/etc/profile <<< END
Java_HOME=/usr/lib/jvm/Java-6-Sun
END
Il peut y avoir un problème avec le Sudo ici et la redirection. Utilisez plutôt un éditeur de texte de votre choix pour ajouter la ligne.
Sudo nano /etc/profile
Ou, vous pouvez essayer le su à la place
su
echo ‘Java_HOME=/usr/lib/jvm/Java-6-Sun’ >> /etc/profile
exit
Utilisez ex - moyen:
Sudo ex +'$put =\"FOO\"' -cwq /etc/profile
et remplacez FOO
par votre variable à ajouter.
Sur certains systèmes (tels que OS X), le fichier /etc/profile
dispose de 444 autorisations. Par conséquent, si vous obtenez toujours autorisation refusée , commencez par vérifier et corriger l'autorisation:
Sudo chmod 644 /etc/profile
puis réessayez.
Cela ne fonctionnera pas si vous essayez de rediriger (en utilisant >>
) la sortie de Sudo. Ce que vous voulez vraiment faire est de rediriger la sortie de echo
. Je vous suggère simplement d’utiliser votre éditeur favori et d’ajouter cette ligne manuellement à /etc/profile
. Cela présente l’avantage supplémentaire que vous pouvez vérifier si /etc/profile
définit déjà Java_HOME
.