web-dev-qa-db-fra.com

Autorisation refusée lorsque vous essayez d'ajouter un fichier à un fichier appartenant à root avec sudo

Il s'agit de la commande Shell qui se traduit par "Autorisation refusée" lorsque j'essaie d'ajouter les données d'un fichier à un autre fichier avec Sudo:

Sudo cat add_file >> /etc/file

Le fichier à /etc/file appartient à root (c'est-à-dire moi) et ses autorisations sont rw-r--r--. Dois-je devenir root pendant un moment pour le faire fonctionner ou existe-t-il une solution pour Sudo?

43
Desmond Hume

Exécutez bash en tant que Sudo:

$ Sudo bash -c "cat add_file >> /etc/file"

$ whoami;Sudo bash -c "whoami";whoami
iiSeymour
root
iiSeymour
63
Chris Seymour

Essayez plutôt de faire ceci:

Sudo tee -a /etc/file < add_file

C'est plus léger que d'exécuter bash ou sh -c command

26
Gilles Quenot

Une possibilité amusante est d'utiliser ed (l'éditeur standard):

Sudo ed -s /etc/file <<< $'r add_file\nwq'

Je sais que je ne serai pas voté pour cette merveilleuse réponse, mais je voulais quand même l'inclure ici (parce que c'est drôle). Terminé!

9
gniourf_gniourf

Vous essayez d'écrire le résultat de la commande Sudo cat add_file dans le fichier/etc/file. Et apparemment, vous n'avez pas ce droit.

man Sudo donne cet exemple:

   To make a usage listing of the directories in the /home partition.  Note
   that this runs the commands in a sub-Shell to make the cd and file
   redirection work.

    $ Sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

Vous devriez donc essayer:

Sudo sh -c "cat add_file >> /etc/file"

5
Maxime Chéramy

Approche similaire à @ gniourf_gniourf réponse, mais en utilisant ex:

Sudo ex +"r in.txt" -cwq out.txt

qui équivaut à vi/vim Ex-mode (-e).

Cet exemple de modification sur place est une approche simple, sûre et pratique, car il n'utilise aucun tuyau Shell, FIFO ou Shell dans les solutions de contournement de Shell.

Pour améliorer les performances à des fins de script, envisagez d'utiliser le mode silence (-s).

1
kenorb