无法通过 Samba 修改 HTML 文件

无法通过 Samba 修改 HTML 文件

我在运行 Debian 的 Raspberry Pi 上托管了一个简单的 Apache Web 服务器,到目前为止,它仅提供其默认/var/www/目录中的静态内容。

我想/var/www/通过 Samba 共享文件夹,这样我就可以轻松地从 Windows 机器挂载该文件夹并直接在服务器上进行快速更新。

从 Windows 机器(通过 Samba 共享),我可以……

  • 读取任何文件类型的文件
  • 重命名、创建或删除任何文件类型的文件
  • 修改大多数文件类型的内容

然而,我无法从 Windows修改.html.htm文件(也可能是其他文件类型),并在尝试保存修改时收到以下错误消息:

该进程无法访问该文件,因为它正在被另一个进程使用。

无论我在 Windows 中使用哪种编辑器(例如记事本、Visual Studio 等),都会发生这种情况。

在 Windows 中,这给了我一个有趣的功能:重命名受影响的文件(例如,将其从 更改为*.htm*.htm.edit,修改内容,然后将名称改回来。但是,如果不重命名,我就无法编辑它。

我仍然可以修改全部从 Unix 上可以完美地处理文件。

拥有用户和文件权限对于受影响和不受影响的文件而言是相同的:-rwxrw-rw-

请注意,Apache 服务器提供的其他静态 Web 内容(例如 CSS 文件)仍然可以通过 Samba 从 Windows 客户端进行编辑。

由于它似乎仅限于 HTML 相关文件(到目前为止),我天真的猜测是 Samba 和 Apache 之间存在一些冲突,可能与文件锁定有关。我尝试禁用此 Samba 共享的 OpLocks(我不太熟悉它们,但我听说它们会导致一些锁定问题),但没有成功。

smb.conf以下是与此 Samba 共享相关的Samba 配置文件部分( ):

[www]
Comment = WWW root folder
Path = /var/www
Browseable = yes
Writeable = Yes
only guest = no
create mask = 0777
directory mask = 0777
Public = yes
valid users = pi
force user = pi
strict locking = no
oplocks = False
level2 oplocks = False

我只是希望能够.html使用 Samba 共享从 Windows 客户端编辑文件。如果能提供任何有关如何排除故障或解决此问题的建议,我将不胜感激。

答案1

我的问题实际上是 Windows 内部的锁冲突,似乎仅出现在 Samba 共享上。

我发现对于某些文件(包括 HTML 文件),预览处理程序Windows 资源管理器预览窗格使用的 SambaDENY_WRITE文件锁,因此在 Windows 资源管理器中选择文件将锁定该文件以防止其被编辑。

这让我很惊讶:对于本地 Windows 机器上的 HTML 文件,预览处理程序获得的文件锁不会阻止其他进程写入它;但是当文件在 Samba 共享上时,由于某种原因,Windows 文件锁被转换为DENY_WRITESamba 中的锁,因此当第二Windows 机器上的进程(文本编辑器)尝试修改该文件,但由于 Samba 锁的存在,它自然会失败。

我个人不需要 Windows 中的预览处理程序,因此我简单地禁用了它们(文件夹选项 >> “查看”选项卡 >> 取消选中“在预览窗格中显示预览处理程序”)。这更像是一种解决方法;理想情况下,预览处理程序的文件锁不会转换为DENY_WRITESamba 中的锁。

相关内容