![服务中'\'字符不足](https://linux22.com/image/147465/%E6%9C%8D%E5%8A%A1%E4%B8%AD'%5C'%E5%AD%97%E7%AC%A6%E4%B8%8D%E8%B6%B3.png)
拾取自Arch Linux 维基条目,我认为这是从我的 Arch Linux 4.20.6 通过 SMB 访问 Windows 共享驱动器的最小设置:
sudo pacman -S samba
sudo echo "logging = systemd" >> /etc/samba/smb.conf
因为smb
服务需要这个配置文件,否则它会崩溃并出现错误:Job for smb.service failed because the control process exited with error code. See "systemctl status smb.service" and "journalctl -xe" for details.
sudo systemctl start smb
假设远程 Windows 计算机位于172.16.17.52
,我可以列出共享名
smbclient -L 172.16.17.52 -U MyUserName%MyPassword -W OurWindowsDomain
其中有一个“磁盘”类型的服务OurRemoteDirectory
,我想访问它的共享名称,即从它传输文件或向它传输文件。
希望能够OurRemoteDirectory
在共享驱动器上访问,我发出了
smbclient 172.16.17.52/OurRemoteDirectory -U MyUserName%MyPassword -W OurWindowsDomain
但这产生了这个错误消息:
Unable to initialize messaging context
172.16.17.52: Not enough '\' characters in service
如何修复此错误并访问OurRemoteDirectory
共享驱动器?
答案1
要解决此问题,只需添加两个向前IP 地址前有斜杠:
smbclient //172.16.17.52/OurRemoteDirectory -U MyUserName%MyPassword -W OurWindowsDomain
让我失望的是错误消息建议我应该添加落后斜杠,并且列出共享名称smbclient -L
不需要在 IP 地址前面有任何斜杠。
现在我有一个用于访问远程文件系统的命令行界面:
中小企业:>
建立连接后,man smbclient
描述用于传输文件的命令,例如put
和get
。
作为后记,从 v7.40 开始curl
支持中小企业协议也是如此,如果您只想从共享驱动器传输文件或将文件传输到共享驱动器,则该samba
包就变得多余了:smbclient
# Upload local file to shared drive
curl --upload-file /home/me/local_file.txt --user "OurWindowsDomain/MyUserName:MyPassword" smb://172.16.17.52/OurRemoteDirectory/Path/To/Dir/
# Download file from shared drive
curl -o file_from_server.txt --user "OurWindowsDomain/MyUserName:MyPassword" smb://172.16.17.52/OurRemoteDirectory/Path/To/Dir/remote_file.txt
目前,curl
不支持创建远程目录,意味着Path/To/Dir/
必须已经存在。简要讨论该功能这里。