2009-05-12 5 views
63

Jestem nowy w Linuksie i dopiero zaczynam uczyć się basha. Używam Ubuntu 9.04 i chciałbym dodać repozytoria do /etc/apt/sources.list z linii poleceń. Zasadniczo chciałbym to zrobić:Jak mogę dodać tekst do /etc/apt/sources.list z wiersza poleceń?

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

Jednak nawet kiedy używać sudo, otrzymuję ten błąd:

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

Jak uniknąć tego błędu?

+0

Musisz wspomnieć o 2 rzeczach: 1) Czy jesteś na liście sudoerów i czy to jest poprawnie skonfigurowane? 2) Jakie są uprawnienia twojego pliku /etc/apt/sources.list? – sykora

Odpowiedz

1

W Karmic można po prostu użyć polecenia add-apt-repository, przynajmniej dla PPA.

Na przykład:

sudo add-apt-repository ppa:docky 
+0

add -apt-repozytorium nie znajduje się w bazie, aby go uruchomić: 'apt-get install-properties-common' – notpeter

+0

Wygląda na to, że jest dostępny w systemach opartych na Debianie, więc prawdopodobnie jest to właściwy sposób. – Wilf

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

Komenda tee nazywa się jako administrator poprzez sudo i -a argumentu mówi tee, aby dołączyć do pliku zamiast nadpisywania go.

Twoje pierwotne polecenie nie powiodło się, ponieważ przekierowanie we/wy z >> zostanie wykonane jako zwykły użytkownik, tylko twoje echo zostało wykonane z sudo.

Wywołanie sudo podpowłoki jak

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

prac, zbyt jak wskazano przez innych.

+0

Dzięki za odpowiedź - na przyszłość, gdzie by to było? Czy masz na myśli to, że w ogóle nie należy do tej witryny? –

+1

@Matthew Ponieważ nie jest to programowanie powiązane, prawdopodobnie byłoby lepiej dopasowane do serwera serverfault.com, gdy jest dostępne dla wszystkich. Obecnie jest to tylko wersja beta (http://serverfault.com/beta-access) – lothar

+4

Znalazłem to przydatne jako programista instalujący niektóre zależności; Zdecydowanie uważam, że powinno to być na StackOverflow. – williampli

3

Jednym ze sposobów rozwiązania tego problemu jest zrobić przekierowanie w podpowłoce:

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

ten sposób proces sh jest wykonywany pod sudo a zatem posiada niezbędne uprawnienia, aby otworzyć wyjście /etc/apt/sources.list przekierowany.

8

Procesy Shell ">", "<", ">>" itp sama przed uruchomieniem polecenia. Problem polega na tym, że "sudo >>/etc/foo" próbuje otworzyć/etc/foo dla dołączenia przed uzyskaniem uprawnień.

Jednym ze sposobów okrągłe to jest użycie sudo, aby uruchomić kolejną powłokę robić co chcesz, np:

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

lub alternatywnie:

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

Prostsze podejście może być po prostu użyć sudo aby uruchomić edytor w/etc/file :)

7

lepiej używać oddzielnego pliku w /etc/apt/sources.list.d jak wyjaśniono w tym other answer.

Należy pamiętać, że nazwa pliku MUSI kończyć się w .list lub zostanie zignorowana.

+0

Twój komentarz powinien być częścią twojej odpowiedzi, więc proponuję edytować to drugie. – tzot

0

Jeśli było zalogować się jako su (jeśli masz przywilej) ta sama komenda będzie działać dobrze ...

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

Jeśli nie jesteś superużytkownikiem, idź z odpowiedzią Lothara.

Jeśli zrobisz to w ten sposób mieć pewność, aby wyjść z su tak, że nie są uruchomione niepotrzebne programy jako root (administratora)

+1

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. – cpburnz

+0

Próbowałem poprawić odpowiedź, nie wiem, jak to nie daje odpowiedzi. Byłoby pomocne dowiedzieć się więcej, dlaczego doszedłeś do tego wniosku. – Shapeshifter

+0

Twoja odpowiedź jest dla mnie tylko komentarzem, zamiast odpowiadać na pytanie, ponieważ twoje pytanie zasadniczo mówiło tylko o użyciu odpowiedzi Lothara, a jeśli OP był już superużytkownikiem, nie napotkaliby tego problemu (niezrozumienie sudo z przekierowaniem I/O). – cpburnz

3

Obserwuje działa na mnie

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

to również działa dla mnie .. –

0

Oto rozwiązanie bez użycia przewodów rurowych tylko prosta edycja na miejscu:

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

ex jest równoważna vi -e.

-1

pierwszy otwarty lub utworzyć plik, który chcesz edytować je za pomocą następującego polecenia

1- sudo nano file_name

2- edit the file after it opens

3- ctrl+x

4- press 'Y' to say yes

i gotowe.

Powiązane problemy