vim/vi/nano/etc 是否会锁定文件以防止其被写入?

vim/vi/nano/etc 是否会锁定文件以防止其被写入?

正如标题所示,我的同事声称使用文本编辑器而不是解析器(例如 less)会锁定文件,并且在日志文件的情况下会导致无法写入日志文件。

我以前从未听说过这个,只是一些初步测试发现情况并非如此。此外,我在 Google 搜索中找不到任何相关信息,无法表明他的想法可能来自哪里。

答案1

vim 不会这样做,但我不确定其他的是否如此。不过,有一个非常简单的方法可以检查这一点:

打开两个终端窗口(konsole、gnome-terminal 等),并在第一个控制台中运行以下命令:

touch ~/test.txt
vim ~/test.txt

现在,在第二个控制台中输入以下内容:

echo "This is a test" >> ~/test.txt

如果文件被 vim 锁定,则第二个控制台中的命令将失败,因为无法写入文件。它不会失败。使用您想要的任何编辑器重复第一个控制台中的步骤 #2。

显然,如果您尝试在第一个控制台中保存任何更改,那么您就会进入未知领域,但就附加到日志文件而言,这是安全的。

有些编辑器(例如 vim、gedit 等)在打开文件时会创建一个“影子”文件,以表明该文件已在编辑器中打开。这不是锁定,也不会对系统上的其他应用程序产生任何影响 - 它只是让编辑器知道该文件已打开的一种方式。

答案2

vimvi执行(一个例子效果)。它们不会阻止文件被写入,但如果您使用另一个vi/实例vim编辑同一文件,则会发出警告。nanoemacs(v24.3.1) 则不会(至少默认情况下不会)。我必须查找其他编辑器。事实上,大多数像样的编辑器实际上都能够监视文件的外部更改,这强烈表明它们无法阻止外部更改。

如果应用程序使用某些锁定功能(O_EXLOCK在支持该功能的系统上使用,或者flock,或者 Windows 上的其他内容)。

答案3

我想我理解你的问题了。我自己也尝试过解决同样的问题

如果使用以下命令创建文档:

sudo nano nanoCreated.py 

文档已创建,但文档已被锁定。它只能通过 nano 编辑器进行编辑。当您尝试使用其他编辑器进行编辑时,这将成为一个问题。

不过我不认为其他编辑器(例如 Vim)有同样的问题。

要解决锁定文件的问题:

  1. 使用以下命令创建文件:touch nameOfFile.py或使用任何其他扩展名。您也可以使用任何其他命令,例如:cat>nameOfFile.py

  2. 然后您可以使用以下方式访问该文档:sudo nano nameOfFile.py

  3. 然后您可以从那里编辑文档,保存后,它将不会被锁定,并且可以由其他文本编辑器编辑使用
    如果您查看我上传的图片。我使用创建了文件 nameOfFile 和 nanoCreated.py 文件,sudo nano nameOfFile.py并且两个文件都被锁定了,您可以看到锁定图标。这两个文件只能由 Nano 编辑。但是,我使用我提供的步骤创建了其他文件,它们都没有被锁定

相关内容