我使用 Geany 来编辑位于/var/www
./var/www
其所有子目录和文件的所有者和组都是www-data:www-data
.我的用户帐户是该组的成员,我以我的用户身份编辑文件。有时,Geany 似乎将编辑文件的所有者和组更改为我的用户和我的组。
当我使用 Geany 编辑文件时,如何确保 user:group 永远不会更改?
我在 Geany 帮助中找到了这条线索:
使用原子文件保存
定义 Geany 将文件保存到磁盘的模式。如果禁用,Geany 会直接将文档内容写入磁盘。当磁盘上没有更多可用空间来保存文件时,这可能会导致数据丢失。当设置为 true 时,Geany 首先将内容保存到临时文件中,如果成功,则临时文件将移动到真实文件中进行保存。在没有更多可用磁盘空间的情况下,这可以提供更好的错误检查。但它也会破坏原始文件的硬链接及其权限(例如重置可执行标志)。小心使用它,因为它可能会严重破坏事情。更好的方法是确保您的磁盘不会耗尽可用空间。
截至目前它已被禁用,这意味着文件是直接写入的,我认为这可以防止我的问题发生。
这个问题包含一些相关信息: 如何编辑文件并保留其访问控制列表/SELinux 安全上下文?
答案1
看着吉尼的维基,看起来您可能还需要禁用此选项:
use_gio_unsafe_file_ saving
这是默认打开的,由 GIO 库提供。
此选项尝试尽可能多地处理与其他方法相关的问题:
- 它尝试使用上述原子重命名保存方法,但尝试解决尽可能多的问题:
- 它检查临时文件的元数据并尝试从现有文件复制元数据,
- 如果元数据正确,它将写入临时文件并重命名,如上所示,
- 如果元数据不正确,它会使用非原子但安全的方法:
- 将现有文件复制到临时文件
- 截断并覆盖现有文件,如果失败,临时文件应被复制回或可用,但请参阅下面的缺点。
- 它尝试确定重命名在底层文件系统上是否可用,如果重命名失败,则使用非原子方法。
优点:
- 处理最不同的条件,因此在大多数文件系统上都能最正确地工作。这就是为什么它是默认值。
缺点:
- 有一个长期存在的错误或者 GIO 库中的设计错误,如果写入数据文件失败,则会从非原子保存中删除临时文件。这意味着它并不比简单的覆盖方法更安全,因为以前的数据不会被恢复,甚至可供用户恢复。
- 非原子保存通过网络复制数据三次(读取和写入以制作临时文件,写入输出文件),这在远程网络上可能会很慢。
- 使用两倍的磁盘空间。
- 相当复杂。
- 使用库代码,因此 Geany 无法修改其行为
多么奇怪的文件保存方法啊。看起来它可以导致与选项相同的“原子”保存use_atomic_file_saving
。