Linux:丢失文件的组所有权

我有一个在Linux中创build的文件

我需要给他们另一个用户的写入权限。 于是我创build了一个他和我都是成员的“dev”组,并将这些文件的所有权改为这个组。

一个典型的文件现在有这些权限:

-rw-rw-r-- 1 phil dev 5617 Jul 14 15:45 profile.html 

但是,当我编辑文件profile.html时,它会像这样回复我,而我的同事失去了编辑的能力。

 -rw-rw-r-- 1 phil phil 5617 Jul 14 15:45 profile.html 

我如何避免它像这样回复? 改变所有权是错误的事情吗? 还是它做了错误的select? 或者这是用我的编辑器(emacs)configuration?

在包含的文件夹中,您需要将该组更改为dev,然后使用标记set-gid。

 chgrp dev <containing-folder> chmod g+ws <containing-folder> 

设置gid位使该文件夹中创build的文件能够inheritance该文件夹的组,并在任何新文件夹上标记setgid位。 在将文件移动到目录时,您需要小心,因为这将保留其现有权限。

您可以使用目录上的setgid位来保留子组的所有权。

 chown :dev directory/ chmod g+s directory/ 

你也可以使用grpid挂载选项挂载文件系统(假设是ext2 / 3),只要你在一个目录下创build一个新文件,它就会使组的所有者和父目录一样。 那么你只需要这样做,这些文件存在的目录是由组“dev”所有。

如果它是根分区(示例),则重新装入它:

 sudo mount -o remount,grpid,rw,relatime,errors=remount-ro / 

从'男子8号':

 grpid or bsdgroups / nogrpid or sysvgroups These options define what group id a newly created file gets. 

当grpid被设置时,它将创build它的目录的组ID; 否则(默认)它取当前进程的fsgid,除非该目录设置了setgid位,在这种情况下,它将从父目录获取gid,并且如果它是目录本身,也会获得setgid位集。

emacs的默认行为是通过重命名来创build备份文件。 从emacs手册:

Emacs可以重命名原始文件,使其成为备份文件,然后将保存的缓冲区写入新文件。 在此过程之后,原始文件的任何其他名称(即硬链接)现在都引用备份文件。 新文件由进行编辑的用户拥有,其组是用户在该目录中由该用户写入的新文件的默认值。

有几种方法可以改变这一点。

  • 像其他人所描述的那样设置组和粘性位。
  • 在编辑文件之前运行“newgrp dev”,以便您的默认组是dev。

或者emacs特定的:

  • 在emacs中设置文件珍贵的标志,它改变了行为,以保留组,但有其他副作用。
  • 在emacs中设置错误备份时,emacs使用复制而不是重命名,这将导致所有者或组发生更改。

所以,添加到您的.emacs:

 (setq backup-by-copying-when-mismatch 't) 

我的偏好实际上是“newgrp dev”,因为它是从“个人”模式(我编辑的文件只是我的)显式切换到组开发模式(我现在编辑的文件在组中共享)。