76 votes

Comment puis-je ajouter du texte au fichier /etc/apt/sources.list à partir de la ligne de commande ?

Je suis nouveau sur linux, et je commence juste à apprendre bash. J'utilise Ubuntu 9.04, et je voudrais ajouter des dépôts à /etc/apt/sources.list à partir de la ligne de commande. Fondamentalement, je voudrais faire ceci :

sudo echo "[some repository]" >> /etc/apt/sources.list

Cependant, même lorsque j'utilise sudo, j'obtiens cette erreur :

bash: /etc/apt/sources.list: Permission denied

Comment éviter cette erreur ?

0 votes

Vous devez mentionner 2 choses : 1) Etes-vous sur la liste des sudoers, et est-ce que c'est configuré correctement ? 2) Quelles sont les permissions de votre fichier /etc/apt/sources.list ?

0 votes

Il est préférable d'utiliser un fichier séparé dans /etc/apt/sources.list.d plutôt que de modifier /etc/apt/sources.list . Voir stackoverflow.com/questions/1584066/

142voto

lothar Points 11904
echo "[some repository]" | sudo tee -a /etc/apt/sources.list

Le site tee est appelée en tant que superutilisateur via sudo et le -a indique à tee d'ajouter au fichier au lieu de l'écraser.

Votre commande originale a échoué, car la redirection d'E/S avec >> sera fait en tant qu'utilisateur normal, seul votre écho a été exécuté avec sudo.

Appeler un sous-shell sudo comme

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'

fonctionne également, comme l'ont souligné d'autres personnes.

0 votes

Merci pour votre réponse - pour une référence future, à quoi cela correspond-il ? Ou voulez-vous dire qu'elle n'a pas sa place sur ce site ?

1 votes

Matthew Comme il n'est pas vraiment lié à la programmation, il serait probablement mieux adapté à serverfault.com une fois qu'il sera ouvert à tous. Pour l'instant, c'est uniquement en version bêta ( serverfault.com/beta-access )

5 votes

J'ai trouvé cela utile en tant que programmeur installant certaines dépendances ; je pense vraiment que cela devrait être sur StackOverflow.

9voto

araqnid Points 33350

L'interpréteur de commandes traite lui-même les caractères ">", "<", ">>", etc. avant de lancer les commandes. Le problème est donc que "sudo >> /etc/foo" essaie d'ouvrir /etc/foo pour l'ajouter avant d'obtenir des privilèges.

Une façon de contourner ce problème est d'utiliser sudo pour lancer un autre shell pour faire ce que vous voulez, par exemple :

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'

Ou alternativement :

echo "[some repository]" | sudo sh -c 'cat >> /etc/apt/sources.list'

Une approche plus simple peut simplement consister à utiliser sudo pour lancer un éditeur sur le fichier /etc/file :)

9voto

Neil Mayhew Points 2579

Il est préférable d'utiliser un fichier séparé dans /etc/apt/sources.list.d plutôt que de modifier /etc/apt/sources.list comme expliqué dans ce autre réponse . (Notez que le nom du fichier DOIT se terminer en .list ou elle sera ignorée).

Cependant, si vous voulez le créer en utilisant echo le problème des permissions demeure. Vous pouvez utiliser tee pour le créer comme ceci :

echo '[some repository]' | sudo tee /etc/apt/sources.list.d/some-repository.list >/dev/null

ou comme ça :

sudo tee /etc/apt/sources.list.d/some-repository.list >/dev/null <<EOF
[some repository]
EOF

Notez que vous n'avez pas besoin de -a sur le tee (parce que vous n'ajoutez rien).

Vous pouvez également créer le fichier ailleurs, puis le copier en place avec :

sudo cp path/to/some-repository.list /etc/apt/sources.list.d/

0 votes

Votre commentaire devrait faire partie de votre réponse, je vous suggère donc de modifier cette dernière.

3voto

Greg Hewgill Points 356191

Une façon de résoudre ce problème est d'effectuer la redirection dans un sous-shell :

sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'

De cette façon, le sh est exécuté sous sudo et a donc les privilèges nécessaires pour ouvrir la sortie redirigée vers /etc/apt/sources.list .

3voto

Salil Points 20300

Ce qui suit fonctionne pour moi

sudo echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee -a /etc/apt/sources.list.d/10gen.list

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X