我有一台 Ubuntu 开发服务器和一台 Windows 7 工作站。我使用 Windows Gvim 通过 samba 连接编辑 Linux 服务器上的文件。
从 Windows 保存文件会以奇怪的方式更改 Linux 权限,具体取决于我正在使用的 Windows 应用程序,也取决于是否有文件扩展名。
以下是一些测试
无扩展名;Notepad2:644 至 764
matt@mattserver ~ % ls -l testfile
-rw-r--r-- 1 matt matt 0 2011-05-28 07:09 testfile
--- Save from Windows Notepad2 over network ---
matt@mattserver ~ % ls -l testfile
-rwxrw-r-- 1 matt matt 1 2011-05-28 07:09 testfile
无扩展;Gvim:644 至 760
matt@mattserver ~ % ls -l testfile
-rw-r--r-- 1 matt matt 0 2011-05-28 07:10 testfile
--- Save from Windows Gvim over network ---
matt@mattserver ~ % ls -l testfile
-rwxrw---- 1 matt matt 0 2011-05-28 07:11 testfile
扩展;Notepad2:644 到 644(好!)
matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:13 testfile.txt
--- Save from Windows Notepad2 over network ---
matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:13 testfile.txt
扩展;Gvim:644 至 760
matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:14 testfile.txt
--- Save from Windows Gvim over network ---
matt@mattserver ~ % ls -l testfile.txt
-rwxrw---- 1 matt matt 0 2011-05-28 07:14 testfile.txt
这是我的 smb.conf 的相关部分
[matt]
comment = Matt
path = /home/matt
public = yes
writable = yes
valid users = matt
create mask = 0771
directory mask = 0771
force user = matt
force group = matt
我希望通过 Samba 连接保存时权限完全不受影响。我该怎么做?
答案1
答案2
试试这个(smb.conf) store dos attributes = yes
:(.vimrc) set backupcopy=yes
我刚刚花了几个小时测试各种选项(使用 VIM 8.1.1 Windows 32 位),以下是我发现的:
samba 3.6.23 x86_64 CentOS 6,已启用 ext4 和扩展属性set backup copy = yes
假设您在 VIM 中拥有,则所有默认选项基本都可以正常工作。map archive
并且store dos attributes
没有任何区别。Vim 的撤消、交换和备份文件是使用 SMB 创建的create mask
,但覆盖时会保留目标文件的权限。
如果您将 VIM 的撤消目录设置为 Samba 共享之外的某个位置(仅在 Samba 3 中),则该nt acl support
选项似乎会破坏撤消文件。所以我想在 Samba 3 中最好将其设置为“否”。
与 Samba3 相同,但您必须store dos attributes
设置。但是,无论我做什么,此配置中 VIM 创建的备份文件似乎始终将组权限设置为rwx
,我不知道为什么。无论如何,我都会在我的环境中禁用 VIM 备份,因此它不会影响我。nt acl support
与 Samba 4 中的 UNIX 权限没有任何区别。
为了完整起见,我的配置文件如下所示(Samba 4):
smb配置文件
...
# Create new files with these permissions. Doesn't affect
# old files being overwritten by VIM, only the new ones, as well
# as swap & undo files.
create mask = 0644
# Used when creating directories over Samba
directory mask = 0755
# Seems to be necessary in Samba 4
store dos attributes = yes
# Seems necessary in Samba 3 with some VIM options
#nt acl support = no
...
.vimrc
...
# Don't leave backups behind when overwriting files
set nobackup
# Create a backup before overwriting a file, but delete it after
# (makes overwriting files safer in some cases)
set writebackup
# When creating a backup, make a copy of the original file, then update
# the original (this ensures that permissions on the original file
# remain unchanged)
set backupcopy=yes
...
答案3
我发现“nt acl support = no”和“map archive = no”都不能解决问题。我的经验是,Samba 始终应用“create mask”和“directory mask”定义的文件权限,无论保存的是新文件还是现有文件。