J'essaie de suivre ce que je suppose est la meilleure pratique consistant à utiliser sudo au lieu d'un compte root.
J'exécute une opération de fichier concat simple, telle que:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Cela échoue à droite du ">>" en tant qu'utilisateur normal. L'ajout de plus de sudos échoue également (comportement attendu depuis la tuyauterie à la commande sudo et non au fichier).
Cet exemple est juste mais il a été vérifié et testé sous le compte root.
shell
sudo
io-redirection
quoting
DarkSheep
la source
la source
tee
commandes sont exécutées en tant que root, et non la commande principale, qui pourrait être complexe et sujette à des erreurs de comportement. (pas le cas deecho
)Une autre option, tout aussi sûre, consiste à utiliser
sudo
le-i
commutateur pour se connecter en tant que root:Cela suit toujours les meilleures pratiques car le compte root n'est pas activé en tant que tel, mais vous permet de faire les choses en tant que root en toute sécurité. De
man sudo
:la source
sudo bash
Si vous exprimez votre commande sans guillemets simples, vous pouvez la mettre entre guillemets simples et l'exécuter via un shell intermédiaire.
Pour l'exécuter en tant que root:
Ecrivez la commande d'une manière différente qui n'utilise pas
'
:Puis invoquer
sudo sh -c …
:Sinon, pour écrire la sortie dans un fichier que seule la racine peut écrire, appelez-la
sudo tee
. Passez l'-a
option àtee
ajouter au fichier de destination, sinon le fichier est tronqué.Pour les modifications des fichiers plus complexes, vous pouvez appeler
sudo sed
,sudo ed
,sudo perl
, ...Sinon, utilisez un éditeur correct et appelez-le sudo. Dans Emacs, ouvrez
/sudo:/etc/conf.d/hwclock
. Dans Vim, appelez:w !sudo tee %
pour écrire dans le fichier ouvert en tant que root ou utilisez le plugin sudo.vim . Ou aller du sudo et appelersudoedit /etc/conf.d/hwclock
.Ou vous pouvez céder du côté obscur et lancer un shell en tant que root.
la source
La commande échoue en raison des autorisations sur le fichier redirigé. La redirection se produit avant même que la
sudo
commande ne soit appelée.Vous devrez vous assurer que c'est la racine qui ouvre le fichier en écriture.
Le moyen le plus simple de faire cela:
Le
echo
peut être exécuté comme un utilisateur ordinaire, car il ne produit qu'une chaîne de texte. L'tee
utilitaire devra cependant être exécuté en tant que root ettee -a
ajouter des données. Nous redirigeons la sortie/dev/null
cartee
, par défaut, dupliquera ses données d'entrée sur sa sortie standard en plus d'écrire dans les fichiers indiqués.Avec
bash
ou n'importe quel shell qui comprend "here-strings":Ceci est identique à ce qui précède. Seule la façon dont nous produisons la chaîne est modifiée.
Une autre façon légèrement détournée de le faire:
Ici, la redirection s'effectue dans un
sh -c
shell enfant s'exécutant en tant que root.la source
sudo dd of=
Ajouter comme vous voulez:
ou pour recréer le fichier à partir de zéro:
Avantages:
tee
depuis aucune/dev/null
redirectionsh
depuis pas de sous-coquedd
dispose de nombreuses options puissantes, par exemplestatus=progress
pour voir les progrès du transfertFonctionne parce que sudo transmet stdin à la commande.
la source