【问题标题】:apt-get proxy: Permission deniedapt-get 代理:权限被拒绝
【发布时间】:2014-04-05 06:23:00
【问题描述】:

我正在尝试制作一个 bash 脚本,它将在我运行 ubuntu 工作室的计算机上设置一个代理。这个 [1] 告诉我应该通过在 /etc/apt/apt.conf.d/ 中创建文件 95proxies 来为 apt-get 和 Update Manager 设置代理。

问题是当我运行这段代码时。

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

我能够通过触摸创建文件

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

【问题讨论】:

    标签: linux bash ubuntu proxy xfce


    【解决方案1】:

    这与“How do I use sudo to redirect output to a location I don't have permission to write to?”中描述的问题基本相同。也就是说,即使您正在运行echosudo,写入文件的不是echo,而是您的shell,您的shell 没有写入该文件的权限。

    一种可能的解决方案是将sudotee 之类的程序一起使用,该程序实际上确实写入文件本身而不是依赖于shell:

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

    有关此问题的更多可能解决方案,请参阅How do I use sudo to redirect output to a location I don't have permission to write to?

    【讨论】:

      【解决方案2】:

      试试下面的命令,

      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所有,您必须在单独的子shell中运行echo命令。

      要通过echo 命令在文件中添加多行,语法为

      (echo first line; echo second line) >> output file
      

      【讨论】:

        【解决方案3】:
        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 而不是 echo。

        在您的情况下,bash 会将命令的每一行用作新命令(因为 ;,所以 > /etc/apt/apt.conf.d/95proxies 将作为不带 sudo 的命令执行。

        【讨论】:

          猜你喜欢
          • 2016-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-11
          • 2014-10-03
          • 2015-08-30
          相关资源
          最近更新 更多