/etc/apt/sources.list"E212:无法打开文件进行写入

cod*_*ark 166 vi ubuntu-11.04

我正在尝试使用vi编辑器编辑sources.list,但在保存文件时出现以下错误:

/etc/apt/sources.list" E212: Can't open file for writing
Run Code Online (Sandbox Code Playgroud)

Zso*_*kai 253

For some reason the file you are writing to cannot be created or overwritten.
The reason could be that you do not have permission to write in the directory
or the file name is not valid.
Run Code Online (Sandbox Code Playgroud)

Vim有一个内置的帮助系统.我刚才引用了它的内容:h E212.

您可能希望以超级用户身份编辑该文件sudo vim FILE.或者,如果您不想离开现有的vim会话(现在具有适当的sudo权限),您可以发出:

:w !sudo tee % > /dev/null
Run Code Online (Sandbox Code Playgroud)

这将保存文件.

HTH

  • 谢谢!在我的情况下,它试图编辑不存在的目录中的不存在的文件.事实证明,虽然您可以"打开"不存在的文件,然后通过保存它来创建它,但这不适用于不存在的目录.现在我知道了Vim的内置帮助系统!:) (50认同)
  • 谢谢,但在上面的命令中,"tee"的含义是什么? (2认同)

Eri*_*ski 26

这种情况一直发生在我身上,我打开一个根文件写作:

而不是丢失所有的更改,并重新打开sudo.请参阅此演示文稿,了解如何保存这些更改:

一次安装演示,为较低用户创建一个root拥有的只读文件:

sudo touch temp.txt
sudo chown root:root temp.txt
sudo chmod 775 temp.txt
whoami
el
Run Code Online (Sandbox Code Playgroud)

首先以普通用户身份打开文件:

vi temp.txt
Run Code Online (Sandbox Code Playgroud)

然后对文件进行一些更改,它会警告您只读.使用此命令.

:w !chmod 777 %
Run Code Online (Sandbox Code Playgroud)

然后写文件:

:wq!
Run Code Online (Sandbox Code Playgroud)

权限被扩展,文件被保存.您需要感叹号,因为您正在编辑根文件作为较小的用户.

该命令的作用说明:

:w表示写入文件.爆炸意味着开始解释为shell.chmod表示更改权限,777表示无处不在的完整权限.百分比表示当前文件名.

它适用于变化.它会询问您是否要重新加载.按"O"表示"确定".不要重新加载,否则您将丢失更改.

  • 当使用 `:w !chmod 777 %` 时,我得到 `chmod: 更改 'filename' 的权限: 不允许操作`... (3认同)
  • 如果出现权限错误,请使用 `:w !sudo chmod 777 %`。 (3认同)

小智 12

对我来说,有一个非常简单的解决方案.我试图在不存在的文件夹中编辑/创建文件.因为我已经在文件夹中,我试图编辑/创建一个文件.

pwd folder/file

并打字

sudo vim folder/file
Run Code Online (Sandbox Code Playgroud)

而且显然它正在寻找文件夹中的文件夹并且无法保存.


kel*_*ogs 9

或者也许你是一个只读的fs

  • @DmitryG毫无疑问,这里有一个问题.这就是我遇到同样情况的原因,我认为人们会发现知道它很有用. (13认同)

Osc*_*989 8

我在级别 2 中引用了 Zsolt,我输入:

:w !sudo tee % > /dev/null
Run Code Online (Sandbox Code Playgroud)

然后在我的情况下,我仍然无法修改文件,所以它提示添加“!”。所以我输入

:q! 
Run Code Online (Sandbox Code Playgroud)

然后它起作用了

  • 这不是只是退出文件而不保存它吗? (3认同)

小智 7

因为该目录不存在。

可以用来:!mkdir -p /etc/apt/制作目录。

然后:wq