apt-get прокси: Отказано в доступе

Я пытаюсь создать скрипт bash, который установит прокси-сервер на моем компьютере под управлением Ubuntu Studio. Это [1] говорит мне, что я должен настроить прокси для apt-get и Update Manager, создав файл 95proxies в /etc/apt/apt.conf.d/.

проблема в том, когда я запускаю этот код.

sudo echo "Acquire::http::proxy "http://myproxy.server.com:8080/";
Acquire::ftp::proxy "ftp://myproxy.server.com:8080/";
Acquire::https::proxy "https://myproxy.server.com:8080/";
" > /etc/apt/apt.conf.d/95proxies

Я получил:

bash: /etc/apt/apt.conf.d/95proxies: Permission denied

Мне удалось создать файл с помощью touch by

sudo touch /etc/apt/apt.conf.d/95proxies

но когда я иду, чтобы поместить данные в файл, я все еще получаю сообщение об ошибке выше.

[1] https://askubuntu.com/questions/150210/how-do-i-set-systemwide-proxy-servers-in-xubuntu-lubuntu-or-ubuntu-studio


person Andrew Pullins    schedule 05.04.2014    source источник


Ответы (3)


По сути, это та же проблема, что описана в разделе «Как использовать sudo для перенаправления вывода в место, в которое у меня нет разрешения на запись ?". То есть, даже если вы используете echo с sudo, запись в файл выполняет не echo, а ваша оболочка, и у вашей оболочки нет разрешения на запись в этот файл.

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

echo "Acquire::http::proxy \"http://myproxy.server.com:8080/\";" | sudo tee /etc/apt/apt.conf.d/95proxies > /dev/null

Дополнительные возможные решения этой проблемы см. в разделе Как использовать sudo для перенаправления вывода в папку, в которую у меня нет разрешения на запись?

person Ajedi32    schedule 15.08.2016

Попробуйте следующую команду,

sudo sh -c '(echo "Acquire::http::proxy \"http://myproxy.server.com:8080/\";"; echo "Acquire::ftp::proxy \"ftp://myproxy.server.com:8080/\";"; echo "Acquire::https::proxy \"https://myproxy.server.com:8080/\";") > /etc/apt/apt.conf.d/95proxies'

Поскольку каталог /etc/apt/apt.conf.d принадлежит пользователю root, вам необходимо выполнить команду echo в отдельной подоболочке.

Чтобы добавить несколько строк в файл с помощью команды echo, синтаксис будет таким:

(echo first line; echo second line) >> output file
person Avinash Raj    schedule 05.04.2014

sudo printf 'Acquire::http::proxy "http://myproxy.server.com:8080/;\nAcquire::ftp::proxy "ftp://myproxy.server.com:8080/;\nAcquire::https::proxy "https://myproxy.server.com:8080/;\n"' > /etc/apt/apt.conf.d/95proxies

Чтобы напечатать символ новой строки (\n) в файле, вы должны использовать printf, а не эхо.

В вашем случае bash будет использовать каждую строку команды как новую команду (из-за ;, поэтому > /etc/apt/apt.conf.d/95proxies будет выполняться как команда без sudo.

person agilob    schedule 05.04.2014