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?
Antworten:
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.
quelle
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 :)
quelle
Verwenden Sie besser eine separate Datei,
/etc/apt/sources.list.d
wie in dieser anderen Antwort erläutert .Beachten Sie, dass der Dateiname auf .list enden muss, sonst wird er ignoriert.
quelle
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
sh
Prozess unter ausgeführtsudo
und verfügt daher über die erforderlichen Berechtigungen, um die umgeleitete Ausgabe zu öffnen/etc/apt/sources.list
.quelle
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
quelle
In Karmic können Sie den
add-apt-repository
Befehl zumindest für PPAs verwenden.Zum Beispiel:
quelle
apt-get install software-properties-common
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
ex
entsprichtvi -e
.quelle
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.
quelle
Öffnen oder erstellen Sie zuerst die Datei, die Sie bearbeiten möchten, mit dem folgenden Befehl
und du bist fertig.
quelle