我是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
如何避免此错误?
我是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
如何避免此错误?
Answers:
echo "[some repository]" | sudo tee -a /etc/apt/sources.list
该三通命令被称为通过超级用户须藤和-a参数告诉发球附加到文件,而不是覆盖它。
您的原始命令失败,因为使用>>的IO重定向将以常规用户的身份完成,只有sudo执行了回显。
像这样调用sudo子外壳
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 / file上启动编辑器:)
最好在使用一个单独的文件/etc/apt/sources.list.d
在此说明对方的回答。
请注意,文件名必须以.list结尾,否则将被忽略。
在Karmic中,您add-apt-repository
至少可以对PPA使用该命令。
例如:
sudo add-apt-repository ppa:docky
apt-get install software-properties-common
如果您以su身份登录(如果您有特权),则相同的命令也可以正常工作...
su
echo "[some repository]" >> /etc/apt/sources.list
如果您不是超级用户,请遵循Lothar的答案。
如果以这种方式执行此操作,请确保从su退出,这样您就不会以root(超级用户)身份运行不必要的程序。