【问题标题】:/etc/apt/sources.list" E212: Can't open file for writing/etc/apt/sources.list" E212: 无法打开文件进行写入
【发布时间】:2012-01-05 09:42:34
【问题描述】:

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

/etc/apt/sources.list" E212: Can't open file for writing

【问题讨论】:

  • 当我试图写入文件的目录超过其最大值时,我得到了这个。光盘使用情况
  • 作为一个答案中提到的评论,如果文件所在的文件夹已被删除或首先不存在,您可能会得到这个。根据情况查找用于更改目录或从 vi 创建目录的命令。

标签: vi ubuntu-11.04


【解决方案1】:

Vim 有一个内置的帮助系统。在 Vim 中运行 :h E212 会打印以下内容:

由于某种原因,无法创建或覆盖您正在写入的文件。 原因可能是您没有在目录中写入的权限 或者文件名无效。

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

:w !sudo tee % > /dev/null

这将保存文件。

【讨论】:

  • 谢谢!就我而言,它试图在不存在的目录中编辑不存在的文件。事实证明,虽然您可以“打开”不存在的文件,然后通过保存它来创建它,但这不适用于不存在的目录。现在我知道了 Vim 的内置帮助系统! :)
  • 谢谢!就我而言,我试图写入网络驱动器,并且我的网络权限在该屏幕会话中部分崩溃。我最终写入 /var 中的一个临时文件,并将其从另一个 ssh 实例复制到我的主目录。
  • 回滚了invalid edit
  • :h E212 说:“.bashrc” E212:无法打开文件进行写入 E433:没有标签文件 E149:对不起,E212 没有帮助
【解决方案2】:

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

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

一次性安装演示为低级用户创建根拥有的只读文件:

sudo touch temp.txt
sudo chown root:root temp.txt
sudo chmod 775 temp.txt
whoami
el

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

vi temp.txt

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

:w !chmod 777 %

然后写入文件:

:wq!

权限被扩展,文件被保存。您需要感叹号,因为您正在以小用户身份编辑根文件。

解释该命令的作用:

:w 表示写入文件。 bang 表示开始解释为 shell。 chmod 表示更改权限,777 表示任何地方的完全权限。百分比表示当前文件名。

它应用更改。它会询问您是否要重新加载。按“O”表示“确定”。不要重新加载,否则您将丢失所做的更改。

【讨论】:

  • chmod:无法在 vimrc 上更改文件模式:不允许操作
  • 当使用:w !chmod 777 % 我得到chmod: changing permissions of ‘filename’: Operation not permitted...
  • 如果您遇到权限错误,请使用 :w !sudo chmod 777 %
  • 谢谢@LamerLink 你救了我这一天。我实际上是在我的 centos7 机器上设置 turn/stun 服务器。
【解决方案3】:

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

pwd folder/file

并且正在输入

sudo vim folder/file

而且很明显它是在文件夹中寻找文件夹而未能保存。

【讨论】:

    【解决方案4】:

    或者你可能在一个只读挂载的 fs 上

    【讨论】:

    • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
    • @DmitryG 这里没有问题,只是陈述了一种情况。这就是我遇到同样情况的原因,我认为人们会发现了解它很有用。
    【解决方案5】:

    我在第 2 关引用了 Zsolt,我输入:

    :w !sudo tee % > /dev/null
    

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

    :q! 
    

    然后就可以了

    【讨论】:

    • 这不是只是退出文件,而不是保存它吗?
    【解决方案6】:

    因为目录不存在。

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

    然后:wq

    【讨论】:

      【解决方案7】:

      对我来说,在运行 vim 之前将文件系统从只读更改为:

      bash-3.2# mount -o remount rw /
      

      【讨论】:

        【解决方案8】:

        将用户更改为root

        sodu su -
        

        浏览等

        vi sudoers
        

        在用户权限部分寻找 root 用户。你会得到它像

        root ALL=(ALL:ALL) ALL 
        

        为您的用户名输入相同的条目。如果您的用户名是“myuser”,则添加

        myuser ALL=(ALL:ALL) ALL
        

        看起来像

        root ALL=(ALL:ALL) ALL 
        
        myuser ALL=(ALL:ALL) ALL 
        

        保存。将root用户更改为您的用户。现在试试你遇到 sudoers 问题的地方

        【讨论】:

        • 这是不好的做法。 root 应该作为最后的手段使用。
        【解决方案9】:

        尝试以 root 身份连接,然后编辑文件。这对我有用

        【讨论】:

          【解决方案10】:

          使用sudo 预先附加您的命令。

          例如,使用sudo vim textfile.txt 代替vim textfile.txt。这将解决问题。

          【讨论】:

          • 感谢它的帮助!
          【解决方案11】:

          1。需要创建目录,如

          mkdir -p /var/dir1/dir2
          

          2。你可以vi或者vim你的文件,然后修改,保存esc>.wq,比如

          vim /var/dir1/dir2/filename.txt
          

          【讨论】:

            【解决方案12】:

            您正在访问的文件可能在同一目录中已存在交换副本(或交换版本)

            因此首先查看是否存在隐藏文件。

            例如,查看以下类型的文件

            .system.conf.swp
            

            通过使用命令

            ls -a
            

            然后,使用 ... 删除它

            rm .system.conf.swp
            

            通常,我建议使用...开始使用超级用户权限

            sudo su
            

            【讨论】:

              【解决方案13】:

              我在目录中的文件上使用git rm 时收到此错误。

              我在 ~/gitRepo/code/newFeature 之类的地方

              在 newFeature 中只有一个文件。我在该文件上做了一个git rm 然后尝试使用 vi 创建一个新文件 myNewFile。

              Ubuntu 显示我仍在 newFeature 目录中,但实际上 git rm 已经删除了整个目录。

              我不得不退出 vi,向上导航一个目录,然后重新创建 newFeature 目录。

              【讨论】:

                【解决方案14】:

                当我的目录路径不正确时出现此错误,请确保您的目录名称和路径正确

                【讨论】:

                  【解决方案15】:

                  更改其他用户的权限 对于那种类型 setfacl -m u:username:rw 文件名

                  【讨论】:

                    【解决方案16】:

                    您只需要以 root 访问权限访问 Gemfile。之前vi

                    命令:

                    sudo su -
                    

                    然后:

                    vi ~/...
                    

                    【讨论】:

                      猜你喜欢
                      • 2015-02-01
                      • 1970-01-01
                      • 2021-06-08
                      • 1970-01-01
                      • 2021-03-31
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多