当你需要在办公室或家庭网络中,让一台 Linux 电脑、一台 Windows 笔记本和一台 Mac 之间轻松互传文件时,可能会感到有些头疼。不同系统自带的“方言”(协议)不同,直接访问往往行不通。其实,只要选对通用的“普通话”协议并稍作配置,跨平台文件共享完全可以实现。本文将为你梳理几种最主流、最实用的方案,并提供详细的配置步骤。
共享基石:选择通用的网络协议
在开始配置前,了解背后通用的协议是关键。它们就像是不同系统都能理解的“普通话”。
1. SMB/CIFS:这是 Windows 原生使用 的文件共享协议,也是目前跨平台兼容性最好的选择。macOS 和现代 Linux 发行版都内置了出色的 SMB 客户端和服务器支持。
2. NFS:类 Unix 系统(包括 Linux 和 macOS) 传统的文件共享协议,在 Unix-like 系统间性能优异。Windows 专业版和企业版也提供了 NFS 客户端功能。
3. SSH/SFTP:通过加密的 SSH 连接进行文件传输。几乎所有 Linux 和 macOS 系统都自带 SSH 服务器,Windows 10/11 也内置了 OpenSSH 客户端和服务器。这种方式安全性高,配置相对简单。
考虑到易用性和广泛的兼容性,我们将重点放在 SMB 协议上,因为它能确保在三者之间无缝工作。同时也会简要介绍其他方案。
方案一:使用 SMB 协议(最通用)
目标是让 Linux 和 Mac 能像访问另一台 Windows 电脑一样,访问彼此共享的文件夹。
在 Linux 上创建共享(供 Windows 和 Mac 访问)
这里以 Ubuntu/Debian 为例,使用 `samba` 软件包。
1. 安装 Samba 服务
sudo apt update
sudo apt install samba
2. 为你要共享的目录设置 Samba 密码(例如,为当前用户)
sudo smbpasswd -a $(whoami)
系统会提示你输入并确认一个密码,这个密码用于网络访问。
3. 编辑 Samba 主配置文件
sudo nano /etc/samba/smb.conf
在 `smb.conf` 文件的末尾,添加类似下面的共享配置块:
ini
# 共享配置示例:共享名为“LinuxShare”,共享路径为 /home/你的用户名/shared
[LinuxShare]
path = /home/你的用户名/shared
browseable = yes
read only = no
guest ok = no
valid users = 你的用户名
create mask = 0775
directory mask = 0775
`[LinuxShare]` 是你在网络上看到的共享名称。
确保 `path` 指向的目录存在且你有权限。
`valid users` 指定了允许访问的用户(即你刚刚用 `smbpasswd` 添加的用户)。
保存并关闭文件后,重启 Samba 服务:
# 重启 Samba 服务使配置生效
sudo systemctl restart smbd
# 设置开机自启
sudo systemctl enable smbd
现在,从 Windows 或 Mac 的“文件资源管理器”或“访达”中,输入 `\\Linux机器的IP地址`(如 `\\192.168.1.100`),就能看到 `LinuxShare` 并访问了。
在 Windows 上创建共享(供 Linux 和 Mac 访问)
右键点击想要共享的文件夹,选择“属性”,切换到“共享”选项卡,点击“高级共享”,勾选“共享此文件夹”,可以自定义共享名。点击“权限”,为“Everyone”或其他用户/组设置读写权限(通常建议设置特定用户)。在“安全”选项卡中,确保对应的用户也有适当的 NTFS 权限。
重要:现代 Windows 默认使用 SMB3 并可能关闭了较旧的协议。为确保 Linux 和 Mac 能连接,可以在“控制面板”->“程序”->“启用或关闭 Windows 功能”中,确认“SMB 1.0/CIFS 文件共享支持”下的“SMB 1.0/CIFS 服务器”是禁用的(出于安全),但确保“SMB 1.0/CIFS 自动删除”和“SMB 1.0/CIFS 客户端”根据需求启用或禁用。通常,保持禁用 SMB1 是更安全的,现代系统都支持 SMB2/3。
在 Mac 上,打开“访达”,按 `Cmd+K` 或选择“前往”->“连接服务器”,输入 `smb://Windows机器的IP地址`(如 `smb://192.168.1.50`)即可连接。
在 Mac 上创建共享(供 Linux 和 Windows 访问)
打开“系统设置”->“通用”->“共享”,启用“文件共享”,在“共享文件夹”区域点击“+”添加要共享的目录。在“用户”区域,为每个用户(例如你的 macOS 用户名)或“所有人”设置权限(只读、读与写)。注意看窗口上方显示的共享地址,例如 `smb://192.168.1.150`。
为了让 Windows 更好地访问,可以点击“选项...”,确保“使用 SMB 来共享文件和文件夹”已勾选,并选中你允许通过 SMB 共享的账户。
在 Linux 上,可以使用 `smbclient` 命令行工具访问,或使用文件管理器(如 GNOME Files)的“连接到服务器”功能,输入 `smb://Mac的IP地址`。
方案二:使用 SSH/SFTP(最安全、配置最简单)
如果文件传输需求是临时的,或者安全性要求高,SSH/SFTP 是最佳选择。它无需复杂的服务器配置。
从 Linux 或 Mac 访问其他机器
如果你的 Linux 或 Mac 上开启了 SSH 服务(Linux 通常默认安装了 `openssh-server`,Mac 在“系统设置”->“通用”->“共享”中开启“远程登录”),那么从另一台 Linux 或 Mac 上,可以直接使用 `scp` 或 `sftp` 命令:
复制文件到远程机器
scp ./local_file.txt 用户名@远程主机IP:/home/username/
从远程机器复制文件
scp 用户名@远程主机IP:/path/to/remote_file.txt ./
使用 sftp 交互式传输多个文件
sftp 用户名@远程主机IP
从 Windows 访问 Linux 或 Mac
Windows 10/11 内置了 OpenSSH 客户端。你可以在 PowerShell 或命令提示符中直接使用 `scp` 和 `sftp` 命令,语法与上面类似。
powershell
# 在 Windows PowerShell 中示例
scp .\local_file.txt 用户名@远程主机IP:/home/username/
你也可以使用图形化的 SFTP 客户端,如 FileZilla、WinSCP。只需在主机名处输入远程机器的 IP,协议选择 SFTP,端口 22,输入用户名和密码即可。
方案三:使用 NFS(适用于 Linux 和 Mac 深度协作)
对于主要在 Linux 和 macOS 之间共享的场景,NFS 性能很好。
在 Linux 上安装和配置 NFS 服务器:
# 在 Ubuntu/Debian 上安装 NFS 服务端
sudo apt install nfs-kernel-server
# 编辑导出配置文件
sudo nano /etc/exports
添加一行,例如:
/home/你的用户名/shared *(rw,sync,no_subtree_check)
这表示将 `/home/你的用户名/shared` 共享给所有主机(`*`),权限为读写(`rw`)。保存后,导出并重启服务:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
在 macOS 上,打开“终端”,使用 `mount` 命令挂载:
# 创建本地挂载点
mkdir ~/nfs_mount
# 挂载 Linux 的 NFS 共享
sudo mount -t nfs Linux_IP:/home/你的用户名/shared ~/nfs_mount
常见故障排查点:
法发现或连接:首先确保所有设备在同一个局域网网段,并且防火墙放行了相应端口(SMB:139, 445; SSH:22; NFS:2049)。可以尝试用 IP 地址直接连接,排除主机名解析问题。
权限错误:仔细检查共享端设置的用户权限(Samba 密码、Windows 用户账户、文件夹安全权限)和目录本身的文件系统权限。
协议版本不匹配:特别是在连接旧设备时,尝试在客户端调整支持的 SMB 协议版本(如 macOS 的 `mount` 命令可指定 `-o vers=2.0`)。
总而言之,实现 Linux、Windows 和 macOS 之间的文件共享,首选 SMB 协议进行系统级的共享设置,它能提供最接近原生体验的集成度。对于快速、安全的单次文件传输,SSH/SFTP 是最便捷的工具。根据你的主要使用场景和协作深度,选择最适合的方案,你就能在这三个系统间搭建起高效的文件交换桥梁。
相关内容
