Как я могу добавить текст в /etc/apt/sources.list из командной строки? - PullRequest
72 голосов
/ 12 мая 2009

Я новичок в Linux, и только начинаю изучать bash. Я использую Ubuntu 9.04 и хотел бы добавить репозитории в /etc/apt/sources.list из командной строки. В основном, я хотел бы сделать это:

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

Однако, даже когда я использую sudo, я получаю эту ошибку:

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

Как мне избежать этой ошибки?

Ответы [ 9 ]

136 голосов
/ 12 мая 2009
echo "[some repository]" | sudo tee -a /etc/apt/sources.list

Команда tee вызывается суперпользователем с помощью sudo , а аргумент -a указывает tee добавить файл вместо перезаписи. *

Ваша исходная команда не выполнена, поскольку перенаправление ввода-вывода с >> будет выполнено как обычный пользователь, только ваше эхо было выполнено с помощью sudo.

Вызов sudo subshell как

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

работает, как указано другими.

9 голосов
/ 12 мая 2009

Оболочка обрабатывает ">", "<", ">>" и т. Д. Перед запуском команд. Поэтому проблема в том, что "sudo >> / etc / foo" пытается открыть / etc / foo для добавления до получения привилегий.

Одним из способов решения этой проблемы является использование sudo для запуска другой оболочки, чтобы делать то, что вы хотите, например ::

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

Или альтернативно:

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

Более простой подход может заключаться в использовании sudo для запуска редактора в / etc / file:)

8 голосов
/ 03 июля 2010

Лучше использовать отдельный файл в /etc/apt/sources.list.d, как описано в этом другом ответе .

Обратите внимание, что имя файла ДОЛЖНО заканчиваться на .list, иначе оно будет проигнорировано.

3 голосов
/ 10 января 2013

следующие работы для меня

sudo echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee -a /etc/apt/sources.list.d/10gen.list
3 голосов
/ 12 мая 2009

Один из способов решить эту проблему - выполнить перенаправление в подоболочке:

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

Таким образом, процесс sh выполняется под sudo и, следовательно, имеет необходимые привилегии для открытия перенаправленного вывода в /etc/apt/sources.list.

1 голос
/ 13 ноября 2009

В Karmic вы можете просто использовать команду add-apt-repository, по крайней мере, для PPA.

Например:

sudo add-apt-repository ppa:docky
0 голосов
/ 07 августа 2016

сначала откройте или создайте файл, который вы хотите отредактировать, с помощью следующей команды

1- sudo nano имя_файла

2 - редактировать файл после его открытия

3-ctrl + x

4 - нажмите «Y», чтобы сказать «да»

и все готово.

0 голосов
/ 25 мая 2015

Вот решение без использования труб, просто простое редактирование на месте:

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

ex эквивалентно vi -e.

0 голосов
/ 25 мая 2011

Если вы вошли в систему как su (если у вас есть привилегия), та же команда будет работать нормально ...

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

Если вы не суперпользователь, тогда ответьте на вопрос Лотара.

Если вы сделаете это таким образом, обязательно выйдите из su, чтобы не запускать ненужные программы от имени root (суперпользователь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...