当我将文档保存在另一个用户帐户中时,如何停止文件权限更改?

当我将文档保存在另一个用户帐户中时,如何停止文件权限更改?

我有一个属于 user1:group1 的文件。它故意具有权限 770,以便 group1 中的其他用户可以对其进行协作。当我以 user2(属于 group1)身份打开文件时,我可以编辑它并按预期保存更改,但是当我保存这些更改时,文件所有权将更改为 user2:user2。

我从谷歌搜索中发现的最接近问题的是这个问题防止文件保存时组所有权发生更改这似乎只是说“忍受吧”,但那是五年前的事了。当然,在 Linux 桌面环境中不可能仍然无法进行协作,那么我做错了什么?

答案1

如果在目录上设置“设置组 ID”(SGID) 位,则在该目录中创建的文件将继承该目录的组 ID,而不是创建用户的主要组 ID。新的子目录也会自动设置 SGID 位,因此您无需手动执行此操作;但是,必须手动更改现有的子目录。

答案2

可能发生的情况是,您用于编辑文件的程序在保存文件时会创建一个新文件,替换旧文件。新创建的文件将始终由创建它的用户拥有。

要解决此问题(如果程序没有明显的方法来更改其行为),请使用新名称保存文件,然后运行

cat newname >oldname

将旧文件 ( oldname) 的内容替换为新文件 ( newname) 的内容。它通过截断和重写内容而不创建新文件来实现这一点。元数据,例如权限和所有权,不会改变。然后删除newname


另一个更明显的解决方案是使用类似的系统git或其他版本控制系统来进行协作工作。这将允许每个用户查看自己的私人信息复制在本地处理这些文件,然后将它们签入中央存储库。文件的所有权和权限将不再是问题,并且您将受益于查看谁在何时进行了哪些更改(以及回滚更改或将开发分叉到单独的分支中)。

文件的生产签出可以在生产系统上完成,同时在用户的本地计算机上进行更改。当测试表明新的生产副本按预期工作(无论您在做什么)时,将检查新的生产副本。

相关内容