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

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

我如何避免这个错误?

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

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

原始命令失败,因为使用>>的IOredirect将以常规用户的身份完成,只有您的回显与sudo一起执行。

调用一个sudo子shell

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

作品也如其他人指出的那样。

在启动命令之前,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 /文件上启动编辑器:)

最好在/etc/apt/sources.list.d使用一个单独的文件,如其他答案所述 。

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

解决这个问题的一种方法是在子shell中进行redirect:

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

这样, sh进程在sudo下执行,因此具有将redirect的输出打开到/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 

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

例如:

 sudo add-apt-repository ppa:docky 

这里是没有使用pipe道的解决scheme,只需简单的就地编辑:

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

ex相当于vi -e

如果你想以su身份login(如果你有权限的话),同样的命令就可以正常工作。

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

如果你不是超级用户,那么就跟洛塔的回答一样。

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

首先打开或创build您想要编辑它的文件通过以下命令

1- sudo nano file_name

2-打开文件后编辑它

3- ctrl + x

4-按“Y”说是

你完成了。