Wie kann ich über die Befehlszeile Text an /etc/apt/sources.list anhängen?

75

Ich bin neu in Linux und fange gerade an, Bash zu lernen. Ich verwende Ubuntu 9.04 und möchte über die Befehlszeile Repositorys zu /etc/apt/sources.list hinzufügen. Grundsätzlich möchte ich dies tun:

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

Selbst wenn ich sudo verwende, wird folgende Fehlermeldung angezeigt:

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

Wie vermeide ich diesen Fehler?

Matthew
quelle
Sie müssen zwei Dinge erwähnen: 1) Sind Sie auf der Sudoers-Liste und ist das richtig eingerichtet? 2) Welche Berechtigungen hat Ihre Datei /etc/apt/sources.list?
Sykora

Antworten:

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

Der Befehl tee wird über sudo als Superuser aufgerufen, und das Argument -a weist tee an, an die Datei anzuhängen, anstatt sie zu überschreiben.

Ihr ursprünglicher Befehl ist fehlgeschlagen, da die E / A-Umleitung mit >> als regulärer Benutzer ausgeführt wird und nur Ihr Echo mit sudo ausgeführt wurde.

Ich nenne eine Sudo-Subshell wie

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

funktioniert auch, wie von anderen hervorgehoben.

Lothar
quelle
Vielen Dank für Ihre Antwort - zum späteren Nachschlagen, wo würde das hingehören? Oder meinst du damit, dass es überhaupt nicht auf diese Seite gehört?
Matthew
1
@Matthew Da es nicht wirklich mit der Programmierung zu tun hat, passt es wahrscheinlich besser zu serverfault.com, wenn es für alle offen ist. Derzeit ist es nur Beta ( serverfault.com/beta-access )
Lothar
5
Ich fand dies nützlich als Programmierer, der einige Abhängigkeiten installiert. Ich denke definitiv, dass dies auf StackOverflow sein sollte.
wwwilliam
Siehe auch diese Antwort auf eine ähnliche Frage (mit sed): Fügen Sie Text von der Befehlszeile ohne Verwendung der Io-Umleitung an die Datei an
Thomas
Scheint ein Problem zu haben, wenn es auf Amazon VPC / EC2 installiert wird. Folgendes bekomme ich: echo "deb deb.theforeman.org trusty 1.7" | sudo tee -a /etc/apt/sources.list.d/foreman.list sudo: Host ip-10-0-0-91 kann nicht aufgelöst werden deb deb.theforeman.org vertrauenswürdig 1.7
Dennis
9

Die Shell verarbeitet ">", "<", ">>" usw. selbst, bevor Befehle gestartet werden. Das Problem ist also, dass "sudo >> / etc / foo" versucht, / etc / foo zum Anhängen zu öffnen, bevor Berechtigungen erlangt werden.

Eine Möglichkeit, dies zu umgehen, besteht darin, mit sudo eine weitere Shell zu starten, um das zu tun, was Sie wollen, z.

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

Oder alternativ:

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

Ein einfacherer Ansatz könnte einfach darin bestehen, mit sudo einen Editor für die Datei / etc / zu starten :)

araqnid
quelle
8

Verwenden Sie besser eine separate Datei, /etc/apt/sources.list.dwie in dieser anderen Antwort erläutert .

Beachten Sie, dass der Dateiname auf .list enden muss, sonst wird er ignoriert.

Neil Mayhew
quelle
Ihr Kommentar sollte Teil Ihrer Antwort sein, daher schlage ich vor, dass Sie letztere bearbeiten.
Zot
3

Eine Möglichkeit, dies zu lösen, besteht darin, die Umleitung in einer Unterschale durchzuführen:

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

Auf diese Weise wird der shProzess unter ausgeführt sudound verfügt daher über die erforderlichen Berechtigungen, um die umgeleitete Ausgabe zu öffnen /etc/apt/sources.list.

Greg Hewgill
quelle
3

Das Folgende funktioniert für mich

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

In Karmic können Sie den add-apt-repositoryBefehl zumindest für PPAs verwenden.

Zum Beispiel:

sudo add-apt-repository ppa:docky
Matthew
quelle
Add-Apt-Repository ist nicht in der Basis, um es zum Laufen zu bringen:apt-get install software-properties-common
Notpeter
Und scheint jetzt in Debian-basierten Systemen verfügbar zu sein, ist also wahrscheinlich der richtige Weg, dies zu tun.
Wilf
0

Hier ist eine Lösung ohne Verwendung von Rohrleitungen, nur einfache Bearbeitung vor Ort:

sudo ex +'$put = \"[some repository]\"' -cwq /etc/apt/sources.list

Das exentspricht vi -e.

Kenorb
quelle
0

Wenn Sie sich als su anmelden (wenn Sie das Privileg haben), funktioniert der gleiche Befehl einwandfrei ...

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

Wenn Sie nicht der Superuser sind, gehen Sie mit Lothars Antwort.

Wenn Sie dies auf diese Weise tun, beenden Sie su unbedingt, damit Sie keine unnötigen Programme als root (Superuser) ausführen.

Gestaltwandler
quelle
1
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag.
Alle Arbeiter sind wesentlich
Ich habe versucht, die Antwort zu verbessern, bin mir nicht sicher, wie sie keine Antwort liefert. Es wäre hilfreich, mehr darüber zu erfahren, warum Sie zu diesem Schluss gekommen sind
Shapeshifter
Ihre Antwort war für mich nur ein Kommentar, anstatt die Frage zu beantworten, da in Ihrer Frage im Grunde nur Lothars Antwort verwendet wurde. Wenn das OP bereits ein Superuser wäre, wäre dieses Problem nicht aufgetreten (Missverständnis von sudo mit E / A. Umleitung).
Alle Arbeiter sind wesentlich
Ich verstehe Ihren Standpunkt, aber meine Antwort lautet nur, dass das OP diesen Befehl als Superuser ausführen kann, anstatt sudo zu verwenden, und es wird funktionieren.
Gestaltwandler
-1

Öffnen oder erstellen Sie zuerst die Datei, die Sie bearbeiten möchten, mit dem folgenden Befehl

1- sudo nano Dateiname

2- Bearbeiten Sie die Datei nach dem Öffnen

3- Strg + x

4- Drücken Sie 'Y', um Ja zu sagen

und du bist fertig.

Jihad Ismail
quelle