Ответ 1
В Karmic вы можете просто использовать команду add-apt-repository
, по крайней мере для PPA.
Например:
sudo add-apt-repository ppa:docky
Я новичок в 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
Как избежать этой ошибки?
В Karmic вы можете просто использовать команду add-apt-repository
, по крайней мере для PPA.
Например:
sudo add-apt-repository ppa:docky
echo "[some repository]" | sudo tee -a /etc/apt/sources.list
Команда tee вызывается как суперпользователь через sudo, а аргумент -a указывает tee добавить к файлу, а не переписывать его.
Ваша исходная команда не удалась, так как перенаправление IO с → будет выполняться как обычный пользователь, только ваше эхо было выполнено с помощью sudo.
Вызов sudo subshell, как
sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'
работает также, как указано другими.
Перед запуском команд сама оболочка обрабатывает " > ", "<", " → " и т.д. Поэтому проблема заключается в том, что "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:)
Лучше использовать отдельный файл в /etc/apt/sources.list.d
, как описано в этом другом ответе.
Обратите внимание, что имя файла ДОЛЖНО заканчиваться в .list или оно будет проигнорировано.
Один из способов решения этой проблемы - выполнить перенаправление в подоболочке:
sudo sh -c 'echo "[some repository]" >> /etc/apt/sources.list'
Таким образом, процесс sh
выполняется под sudo
и поэтому имеет необходимые привилегии для открытия перенаправленного вывода на /etc/apt/sources.list
.
Следующие работы для меня
sudo echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | sudo tee -a /etc/apt/sources.list.d/10gen.list
Если вы должны войти в систему как su (если у вас есть привилегия), то такая же команда будет работать нормально...
su
echo "[some repository]" >> /etc/apt/sources.list
Если вы не суперпользователь, тогда отправляйтесь с Лотаром.
Если вы сделаете это так, не забудьте выйти из su, чтобы вы не запускали ненужные программы как root (суперпользователь)
Вот решение без использования трубопроводов, простое редактирование на месте:
sudo ex +'$put = \"[some repository]\"' -cwq /etc/apt/sources.list
ex
эквивалентен vi -e
.
сначала откройте или создайте файл, который вы хотите отредактировать, следующей командой
1- sudo nano file_name
2- отредактируйте файл после его открытия
3- ctrl + x
4- нажмите "Y", чтобы сказать "да"
и все готово.