我是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
如何避免此错误?
答案 0 :(得分:136)
echo "[some repository]" | sudo tee -a /etc/apt/sources.list
tee命令通过 sudo 作为超级用户调用, -a 参数告诉tee附加到文件而不是覆盖它。
您的原始命令失败,因为使用>> 的IO重定向将以普通用户身份完成,只有您的回显是使用sudo执行的。
调用类似
的sudo子shellsudo 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