如何从命令行将文本附加到/etc/apt/sources.list?

时间:2009-05-12 01:13:48

标签: bash

我是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

如何避免此错误?

10 个答案:

答案 0 :(得分:136)

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

tee命令通过 sudo 作为超级用户调用, -a 参数告诉tee附加到文件而不是覆盖它。

您的原始命令失败,因为使用>> 的IO重定向将以普通用户身份完成,只有您的回显是使用sudo执行的。

调用类似

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

也像其他人所指出的那样有效。

答案 1 :(得分:9)

shell处理“>”,“<”,“>>”在启动命令之前自己等。所以问题是“sudo>> / etc / foo”尝试在获得权限之前打开/ etc / foo进行追加。

这方面的一个方法是使用sudo启动另一个shell来做你想做的事,例如:

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

或者:

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

更简单的方法可能只是使用sudo在/ etc / file上启动编辑器:)

答案 2 :(得分:8)

最好在/etc/apt/sources.list.d中使用单独的文件,如other answer中所述。

请注意,文件名必须以.list结尾,否则将被忽略。

答案 3 :(得分:3)

解决此问题的一种方法是在子shell中执行重定向:

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

这样,sh进程在sudo下执行,因此具有将重定向输出打开到/etc/apt/sources.list的必要权限。

答案 4 :(得分:3)

以下为我工作

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

答案 5 :(得分:1)

在Karmic中,您可以使用add-apt-repository命令,至少对于PPA。

例如:

sudo add-apt-repository ppa:docky

答案 6 :(得分:0)

如果您以su身份登录(如果您有权限),相同的命令将正常工作...

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

如果您不是超级用户,请转到Lothar的回答。

如果你这样做,一定要退出su,这样你就不会以root身份运行不必要的程序(超级用户)

答案 7 :(得分:0)

以下是不使用滚边的解决方案,只需简单的就地编辑:

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

ex相当于vi -e

答案 8 :(得分:-1)

首先通过以下命令打开或创建要编辑的文件

  

1- sudo nano file_name

     

2-打开后编辑文件

     

3- ctrl + x

     

4-按' Y'说是的

你已经完成了。

答案 9 :(得分:-2)

有趣,1- 用 rm 删除文件,2 用 touch 再次创建文件,3 用 printf 打印格式化,4 用 tee 管道到文件(这适用于 DEBIAN)替换为您的口味和喜好

sudo rm /etc/apt/sources.list && sudo touch /etc/apt/sources.list && sudo chmod +rwx /etc/apt/sources.list && sudo printf "deb http://deb.debian.org/debian buster main contrib non-free
deb-src http://deb.debian.org/debian buster main contrib non-free
deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free
deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free
deb http://deb.debian.org/debian buster-updates main contrib non-free
deb-src http://deb.debian.org/debian buster-updates main contrib non-free" | sudo tee -a /etc/apt/sources.list