我使用以下命令通过 SSHFS 挂载远程文件系统:
$ sshfs -o uid=1000 -o gid=1000 [email protected]:/ "/home/chendy/my_mount"
一切似乎都很愉快,除非我尝试使用 Sublime 打开并保存文件......
查看和重命名文件?是的:
...我可以在文件资源管理器中查看我的文件,并且可以使用文件资源管理器成功重命名文件。
权限/用户/组?是的
...检查权限时,一切似乎都按顺序进行:
$ ls -l '/home/chendy/my_mount/home/kano/test.py'
-rwxrwxrwx 1 chendy chendy 927 Apr 15 16:24
使用 VIM 编辑文件?是的
...我也可以用VIM打开文件并保存。
使用 Sublime 编辑文件?错误
...但是当我通过文件资源管理器加载文件或使用命令行在 Sublime (Sublime Text 3 Build 3059) 中打开文件时:
$ /opt/sublime_text/sublime_text '/home/chendy/my_mount/home/kano/test.py'
我犯了同样的错误:
无法保存 ~/my_mount/home/kano/test.py 错误:重命名(/home/chendy/my_mount/home/kano/.subl979.tmp,/home/chendy/my_mount/home/kano/test.py)失败: 不允许操作
这是怎么回事?有什么办法解决吗?
答案1
与许多编辑器一样,Sublime 保存到临时文件,然后将该临时文件移动到位。这样做是为了防止系统在保存过程中崩溃:保证原始文件或新版本都会存在,您不会有丢失文件的风险。
SSHFS 构建在 SFTP 之上,SFTP(至少由 OpenSSH 实现)不允许重命名文件并自动覆盖目标。 (这一点在SSHFS常见问题解答.)
您可以通过告诉 SSHFS 允许重命名和覆盖,但使操作成为非原子操作来解决此限制(因此,在很短的时间内删除旧文件,但新文件仍具有其临时名称)。对于某些用例来说这是一个问题,但在仅编辑文件时则不是。
将选项添加-o workaround=rename
到sshfs
命令行中。
答案2
简短的回答,在您的配置中设置此设置:
"atomic_save": false
它将避免通过不支持的 sshfs (SFTP) 进行重命名。