linux-编辑文件时保留samba共享的文件权限
我使用的代码库已从Git存储库检出到我的Linux机器上。 由于我们的生产代码被编写为可以在Linux上部署,因此我在Linux机器上进行了所有测试,但希望将Windows用于日常使用,包括代码编辑/创作。
为此,我创建了文件夹(我的主文件夹)的Samba共享,我在其中签出了代码,如下所示:
[wgrover]
path = /home/wgrover
available = yes
valid users = wgrover
read only = no
browsable = yes
public = yes
writable = yes
但是,当我从Windows中的samba共享create mask
编辑文件时,Linux中的文件许可权会不断更改为create mask
,即使在编辑之前是fileMode = false
。
这样一直显示在我的create mask
中,如下所示:
diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf
old mode 100644
new mode 100755
index 7cda506..7eab574
可以在smb.conf中设置create mask
,但这也不会“保留”原始文件权限。 我可以通过在.gitconfig
中设置fileMode = false
来忽略git中的文件模式更改,但这也忽略了该问题。
从Linux修改文件权限后,有什么方法可以保留它们?
最终可以弄清楚为什么更改权限。 混淆是由map archive
设置(Samba中的默认值)引起的。 设置yes
后,所有者执行位开始以我预期的方式运行。
通过阅读此处的文档找到了答案:[http://www.samba.org/samba/docs/using_samba/ch08.html]在MS-DOS和Unix上的文件权限和属性部分中。 它清楚地提到了这种副作用:
因此,Samba磁盘共享中文件上存在的三个Unix可执行位中的任何一个都没有用。 但是,DOS文件具有它们自己的属性,这些属性在Unix环境中存储时需要保留:存档,系统和隐藏位。 如果有指示,Samba可以通过在Unix端重用文件的可执行权限位来保留这些位。 但是,映射这些位会产生不利的副作用:如果Windows用户将文件存储在Samba共享中,而您在Unix上使用
map archive
命令查看该文件,则某些可执行位将不意味着您期望它们 至。
但是,它也提到了这一点:
我们应该警告您,
map archive
选项的默认值为yes
,而其他两个选项的默认值为no
。这是因为如果未正确存储DOS和Windows文件的存档位,则许多程序无法正常工作。 但是,系统属性和隐藏属性对于程序的操作并不重要,并且由管理员自行决定。
您还可以在此处阅读有关存档位的更多信息:[http://en.wikipedia.org/wiki/Archive_bit]