以下是用户故事,只是为了更好地说明这是一个 Ubuntu 问题 ;-)
我作为 Ubuntu 用户(20.04.2),
想要
通过 LAN 电缆连接到我的 Windows 10 机器(最好通过 SMB 协议)以便
我可以复制/移动我在那里编写的下载文件和文档因为
最终,我希望我的 Ubuntu 机器成为我的文档的规范(哈!)之家。
我知道这不是一个 Windows 问答网站,所以如果您不想的话,您可以不详细介绍我在 Windows 机器上需要执行的步骤,但是,您至少可以提供一个关于 Samba 设置的步骤列表,作为我可以按照并逐一进行谷歌搜索的关键字吗?
我需要的:
不幸的是,我似乎不能直接拉取整个目录然后就完事了。相反,我想使用图形文件管理器 (Nautilus) 将一些选定的远程目录的内容“合并”到其相应的本地目录中,并手动解决任何可能出现的冲突。
我已尝试过:
我曾尝试在 Windows 上启用 NFS(因为我已经有了一些 NFS 经验),但发现 Windows 10 仍然只支持 NFS 3,因此可传输的文件名仅限于 ASCII 字符;所以这并不好。
这就是我追求桑巴舞的原因。
答案1
我最终遵循了本教程:
http://www.bitpi.co/2015/02/16/accessing-a-windows-share-with-a-raspberry-pi/
在 Windows 上:
本文针对的是 Windows 8,因此 Windows 10 中的网络设置 UI 有点不同,但设法找到了所有内容。
- 开启网络发现(仅适用于专用网络)
- 打开文件和打印机共享(仅适用于私人网络)
- 选择要共享的文件夹,以及选择要授予访问权限的 Windows 用户(可以是普通的 Windows 用户),并设置(通过复选框)通过网络访问时应授予哪些权限
- 小型共享设置窗口将显示共享文件夹的“网络路径”,请注意,挂载时需要它
找出 Windows 机器的 LAN IP 地址也是必要的:ipconfig
在 Powershell 中发出的命令会显示它。
额外任务:
我的 Windows 10 不会自动设置我的 LAN 网络私人的(但是,共享仅适用于私人网络)。
以管理员权限启动 Powershell 来修复此问题:
# This will reveal — among other things — the "Name" of the LAN
Get-NetConnectionProfile
# This sets it private
Set-NetConnectionProfile -Name "the value of 'Name' from the previous command" -NetworkCategory Private
在 Ubuntu 上:
准备挂载点:
sudo mkdir /mnt/my_windows_stuffs
sudo chown LinuxUserNameHere:LinuxUserNameHere /mnt/my_windows_stuffs
安装cifs-utils
,它是 samba 的一个部分插件;smbclient
和winbind
包将作为其依赖项自动安装。
sudo apt install cifs-utils
安装方式cifs
:
sudo mount.cifs //WINDOWS.IP.ADDRESS.HERE/path/on/windows /mnt/my_windows_stuffs/ -o user=WindowsUserNameHere,uid=$(id -u),gid=$(id -g)
对一些精选论点的注释:
//WINDOWS.IP.ADDRESS.HERE/path/on/windows
请注意,从 Windows 建议的“网络路径”(其中包含 Windows 计算机的名称作为服务器标识符)中,我们仅使用文件系统路径。计算机的名称将由 Windows 计算机的 LAN IP 地址替换。它仍然需要在前面加上//
。
user=WindowsUserNameHere
上面链接的教程建议除了提供一个选项之外,user
还为密码提供一个选项,但最终可能会以纯文本形式显示~/.bash_history
,最好避免这种情况。
但是,如果省略此密码选项,则将以交互方式提示输入密码,并且可以以与 Linux 的 sudo 密码类似的方式输入。
另一种可能性是使用选项credentials
指向包含用户和密码值的文件。当需要装入指令时,此选项最适合/etc/fstab
。有关此内容的更多信息,请参阅以下链接的文档。
uid=$(id -u),gid=$(id -g)
如果没有这些选项,挂载文件夹的内容将无法写入,即使在 Windows 端授予了写入权限。这是因为,即使在准备过程中将挂载文件夹提供给了我们的普通用户,cifs 仍会以 root 身份将内容放入其中:其中的所有内容仍归 root 所有。
我们需要告诉 cifs 代表我们的常规用户处理内容。
uid
和选项gid
将实现这一点。要预先找出它们的值,可以相应地运行id -u
和id -g
命令。这些将返回我们普通用户的用户和组 ID。
然而,这可以实现自动化,通过在命令本身中使用动态替换,如上面的代码片段所示。
请注意,如果 Windows 随内容一起发送所有权信息,则可能还需要进一步的forceuid
选项forcegid
(不需要值)。
(我从以下人士处了解到了后者的选择@Huygens 的回答在 Unix SE 网站上。
此时,所需的 Windows 内容应该在/mnt/my_windows_stuffs/
目录中可用。
请注意,在此安装上使用 plainrsync
会非常慢。不幸的是,这是预料之中的. 但正常复印的费用是合理的。
处理完这些文件后,Windows 计算机可以解除绑定:
sudo umount /mnt/my_windows_stuffs/
更多信息请见mount.cifs
文档。