我试图弄清楚为什么当从 SAMBA 安装的 Unix 分区上的 Windows 编辑器保存的文件的权限发生变化时会出现特定行为。
情况:
我们在 Unix 上有一个文件,具有 777 权限:
-rwxrwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
该文件所在的目录是通过 Samba 从 Windows 7 PC 安装的。
我们在“Notepad++”或“Sublime”编辑器中打开文件进行编辑。
当文件被更改并保存时,在 unix 端,权限更改为:
-rw-rwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*
现在,我怀疑这可能不是由于 Samba 安装造成的,因为同样的问题才不是在常规 Windows 记事本中打开和保存文件时发生!
因此,我最初的想法是,这是因为上面提到的编程编辑器可能被设置为 - 而不是简单地保存文件 - 将原始文件重命名为,$orig_filename.bak
然后将新内容保存为具有原始文件名的新文件。这是基于我自己之前使用 UltraEdit 编辑器时遇到的相同问题的经验。
然而,如果这是烫发改变的原因,我就无法解释我观察到的另外两种症状:
首先,根本没有创建备份文件。
其次,在 Unix Shell 中的同一目录中创建新文件(使用
touch
)时,新文件的权限-rw-rwxrwx
根本没有。第三,如果重要的话,文件的 inode # 在编辑后保持不变。
还有什么问题可能存在?我应该采取什么步骤来调查它?
当我告诉 UE 不要通过重命名来备份文件时,我自己的 UltraEdit 问题就解决了;然而 Notepad++ 没有这样的选项。
答案1
我在尝试解决一个非常相似的问题时发现了这个问题。我的情况的解决方案是添加map archive = no
到 smb.conf 的全局部分。
根本问题在于 Samba 将权限从 Dos 映射到 Linux 的方式。
似乎当 notepad++ 保存文件时,它会设置/重置 dos 文件的“存档”属性。默认情况下,Samba 使用它来管理文件的用户权限的执行属性。
因此,如果您设置 Samba 参数:
map archive = no
该属性未映射,并且用户执行权限将按照先前的设置保留。
答案2
我遇到了同样的情况。对我来说,更改 smb.conf 文件中的创建掩码参数很有帮助。
create mask = 0600 -> create mask = 0700