Comment ajouter une ligne à un fichier qui n'a que la permission d'écriture root et continuer l'exécution du script


9

J'essaie d'apprendre le script bash. Je travaille sur un problème pratique et à un moment donné, je dois ajouter une ligne à un fichier qui nécessite l' rootautorisation d'écrire.

Le code ressemble à ceci:

# some code
echo "add this line to the code" >> fileName
# some code

Est-il possible de faire en sorte que le script demande le mot de passe root, de valider le mot de passe et de modifier le fichier en cas d'authentification réussie? Le script doit ensuite revenir en mode utilisateur et poursuivre l'exécution de la commande.

Réponses:


13

Il y a une astuce dans la sudopage de manuel qui explique comment faire quelque chose comme ça. Voici mon one-liner:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Évidemment, vous devrez d'abord configurer votre utilisateur pour qu'il ait des sudoprivilèges. Le shshell est utilisé en raison de la redirection vers le fichier appartenant à la racine. J'ai également dû échapper aux citations utilisées pour la echocommande.


2

su est disponible sur la plupart des systèmes Unix et devrait fonctionner:

su root -c 'echo "add this line to the code" >> fileName'

Contrairement à avec sudo, les mots de passe ne semblent pas être mis en cache avec su.
Ryne Everett

@Ryne Everett: Je ne connais pas sudo. Mais le comportement de 'su' est en fait tel que requis par le script de l'OP. La plupart du temps, j'utilise «su» dans l'autre sens: passer de root à un autre utilisateur. Dans ce cas, aucun mot de passe n'est nécessaire.
miracle173

1

Vous pouvez utiliser teeavec sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoLa sortie de est redirigée avec |( pipe ) vers sudo tee. teelit à partir de l'entrée standard et écrit dans la sortie standard tout fichier donné, dans ce cas filename. -a(ou --append) fait teeajouter des fichiers, sans cela les fichiers seraient écrasés. Comme il teeest exécuté avec, sudoil ouvre des fichiers avec des autorisations root. Enfin, > /dev/nullsupprime teela sortie de la sortie standard .

Un avantage d'utiliser teeau lieu de simplement démarrer la commande entière, y compris la redirection avec su -cou, sudo sh -cest que vous n'avez pas à modifier la citation de la commande initiale de quelque manière que ce soit (les lignes de citation contenant déjà des guillemets peuvent parfois être assez laides).


0

Essayez ceci Cette commande est disponible sur Unix et Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"


-2

Ferait l'affaire:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

Pourquoi ssh? Vous n'avez pas besoin sude sudoni de spécifier rootcar c'est la valeur par défaut. Dans l'ensemble, un peu plus d'explications seraient bien car l'OP voulait apprendre quelque chose et pas seulement un problème résolu.
Adaephon

Je pense que vous rencontrerez des problèmes avec vos guillemets doubles
miracle173
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.