在编辑文件时为Samba共享保留文件权限
我使用的代码库从Git仓库检出到我的Linux机器上。 由于我们的生产代码是编写在Linux上部署的,所以我在Linux机器上进行了所有testing,但是喜欢使用Windows进行日常使用,包括代码编辑/创作。
为此,我创build了一个Samba共享文件夹(我的home文件夹),在这里我检出代码,如下所示:
[wgrover] path = /home/wgrover available = yes valid users = wgrover read only = no browsable = yes public = yes writable = yes
但是,当我在Windows \\linux-box\wgrover
从samba共享\\linux-box\wgrover
编辑文件时, \\linux-box\wgrover
的文件权限不断更改为755
即使它在编辑之前为644
。
这不断显示在我这个git diff
:
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 = yes
设置是Samba中的默认值引起了混淆。 在设置map archive = no
,所有者执行位开始像我预期的那样工作。
通过阅读这里的文档find答案: http : //www.samba.org/samba/docs/using_samba/ch08.html在MS-DOS和Unix部分的文件权限和属性 。 它清楚地提到了这个副作用:
因此,Samba磁盘共享中的文件中存在三个Unix可执行位中的任何一个都没有用处。 然而,DOS文件有自己的属性,当它们存储在Unix环境中时需要保留:存档,系统和隐藏位。 Samba可以通过重新使用Unix端文件的可执行权限位来保留这些位 – 如果指示这样做的话。 但是,映射这些位有一个不幸的副作用:如果Windows用户将文件存储在Samba共享中,并且使用
ls -al
命令在Unix上查看它,则某些可执行位不代表您要期待他们。
但是,它也提到了这一点:
我们应该警告你,
map archive
选项的默认值是yes
,而另外两个选项的默认值是no
。 这是因为如果归档位未正确存储在DOS和Windows文件中,许多程序无法正常工作。 然而,系统和隐藏属性对于程序的运行并不重要,而由pipe理员决定。
您也可以在这里阅读更多关于存档位的信息: http : //en.wikipedia.org/wiki/Archive_bit