如何在 Mac 和 Linux 之间传输文件
要在 Mac 和 Linux 之间移动文件,可以通过 SSH 用 rsync 拷贝、共享 Mac 文件夹并在 Linux 文件管理器中打开,或者用 Samba 共享 Linux 文件夹。每种方法都需要在两台电脑上设置,而且文件共享处理小文件文件夹很慢。
为什么比想象中难
- 没有共同的快速发送功能。隔空投送是 Apple 独有的,Linux 桌面上也没有 Mac 能识别的功能。
- 每种方法都需要账户和密码。SSH 和 Mac 文件共享用 Mac 账户登录。Samba 需要单独的密码。
- Linux 默认不会与 Mac 共享文件夹。你需要安装并配置 Samba,并打开防火墙。在 Fedora 等发行版上,还需要让 SELinux 允许共享文件夹。
- Samba 需要针对 Mac 的设置。没有 Apple 兼容选项时,访达会在你的文件旁边留下额外的隐藏
._文件。 - 线缆连接需要地址。Mac 会在线缆上给自己分配一个 169.254 地址。Linux 常常会等待一个并不存在的 DHCP 服务器,结果根本得不到 IPv4 地址。
- 小文件慢得像爬。在我们的测试中,Mac 通过 10 Gb/s 雷雳连接向 Samba 共享拷贝 20,000 个小文件(331 MB)用了将近四分钟。
- 硬盘不能通用。Mac 无法写入 Linux 的 ext4 或 btrfs 硬盘,Linux 对 Mac 的 APFS 硬盘支持也很差。只有 exFAT 在两边都好用。
- 线缆可能只跑一半速度。在我们的测试中,一台 Linux 笔记本和一台 Mac 只用 40 Gb/s 线缆中的一条 20 Gb/s 通道连接。
连接线缆并找到每台电脑的地址
如果两台电脑都有雷雳或 USB4,用线缆连接它们就能得到一条直接的网络连接。Mac 称之为雷雳网桥,Linux 将其命名为 thunderbolt0。没有这类端口时,请改用家庭网络及其地址。请参阅用雷雳传输文件。
在 Mac 上
- 连接线缆。
- 在系统设置中选择网络,然后选择雷雳网桥。
- 点按详细信息…,记下 IP 地址。如果线缆上没有其他设备,它以 169.254 开头。
在 Linux 电脑上
在终端中运行以下命令。它只读取设置:
ip -4 addr show thunderbolt0inet 169.254… 这一行就是线缆的地址。如果没有 inet 行,说明 NetworkManager 仍在等待 DHCP。给线缆一个自分配的地址:
- 在设置中选择网络,然后单击线缆有线连接旁边的设置按钮。
- 在 IPv4 选项卡上选择仅本地链路,然后单击应用。
- 关闭再打开该连接,然后再次运行
ip命令。
始终按 169.254 地址连接,而不是按电脑名称。名称可能会找到电脑的 Wi-Fi 地址,拷贝就会走 Wi-Fi。
方法 1:在终端中通过 SSH 使用 rsync
rsync 适合熟悉终端的人。它能拷贝整个文件夹,如果拷贝中断,再次运行时会跳过已拷贝的文件。所有命令都在 Linux 电脑上运行,所以只需设置 Mac。
在 Mac 上
- 在系统设置中选择通用,然后选择共享,开启远程登录。
- 点按远程登录旁边的信息按钮,确认你的账户已被允许。
- 要从桌面、文稿或下载拷贝,请在同一面板中开启允许远程用户完全访问磁盘。不开启的话,macOS 会以“Operation not permitted”拒绝访问这些文件夹。
在 Linux 电脑上
- 在终端中运行
rsync -a --progress user@address:/Users/user/Projects/ ~/Projects/。把user替换为 Mac 账户的短名称(即其个人文件夹的名称),把address替换为 Mac 的 169.254 地址。 - 第一次连接时,SSH 会询问是否信任这台 Mac。输入
yes。 - 输入 Mac 账户的密码。rsync 会在拷贝时列出每个文件。
交换两个路径即可反方向拷贝。末尾的 / 很重要:有它时,rsync 拷贝文件夹的内容;没有它时,拷贝文件夹本身。包含空格的路径要加上引号。这里没有可浏览的界面,所以开始前你需要知道确切的路径。
方法 2:共享 Mac 文件夹并在 Linux 中打开
Mac 文件共享不需要在 Linux 上安装任何软件。GNOME“文件”和大多数其他 Linux 文件管理器都能打开 SMB 共享。
在 Mac 上
- 在系统设置中选择通用,然后选择共享,开启文件共享。
- 点按文件共享旁边的信息按钮。在共享文件夹下点按 +,然后选择文件夹。
- 如果 Linux 需要向其中拷贝文件,请在用户下把你的账户设为读与写。
- 点按选项…,在 Windows 文件共享下选择你的账户,输入它的密码,然后点按完成。不做这一步,Linux 就无法登录。
在 Linux 电脑上
- 在“文件”中按 Ctrl+L,输入
smb://和 Mac 的地址,例如smb://169.254.20.30,然后按 Enter。 - 选择注册用户,输入 Mac 账户的短名称和密码,然后单击连接。
- 打开共享文件夹。把文件拖进或拖出。
用这种方式拷贝大文件效果很好。小文件文件夹很慢,因为文件共享依次打开、写入并关闭每个文件。
方法 3:用 Samba 共享 Linux 文件夹
如果你想在访达中浏览 Linux 电脑的文件,请从 Linux 共享。下面的每个命令都会更改系统,并需要输入 sudo 密码。把 you 替换为你的 Linux 用户名。
在 Linux 电脑上
- 安装 Samba:在 Fedora 上运行
sudo dnf install samba,在 Ubuntu 上运行sudo apt install samba。 - 把共享添加到
/etc/samba/smb.conf的末尾,如下所示。fruit这一行会添加 Apple 兼容选项。 - 用
sudo smbpasswd -a you为你的用户设置 Samba 密码。它与你的登录密码是分开的。 - 打开防火墙。在 Fedora 上,运行
sudo firewall-cmd --permanent --add-service=samba,然后运行sudo firewall-cmd --reload。在 Ubuntu 上,除非你开启过防火墙,否则它是关闭的。如果已开启,请运行sudo ufw allow samba。 - 在 Fedora 上,让 SELinux 允许共享该文件夹:运行
sudo semanage fcontext -a -t samba_share_t "/home/you/Projects(/.*)?",然后运行sudo restorecon -R /home/you/Projects。 - 启动 Samba:在 Fedora 上运行
sudo systemctl enable --now smb,在 Ubuntu 上运行sudo systemctl restart smbd。
[Projects]
path = /home/you/Projects
valid users = you
read only = no
vfs objects = catia fruit streams_xattr在 Mac 上
- 在访达中选择前往 > 连接服务器…。
- 输入
smb://和 Linux 电脑的地址,例如smb://169.254.40.50,然后点按连接。 - 选择注册用户,输入你的 Linux 用户名和 Samba 密码,然后点按连接。
- 选择 Projects 共享。它会在访达中打开。
在我们通过 10 Gb/s 雷雳连接进行的测试中,Mac 从 Samba 共享拷贝 20,000 个小文件(331 MB)用了 114 秒,向它拷贝则用了 238 秒。一个 4 GiB 文件在两个方向上的拷贝速度都约为 7.6 Gb/s。
睡眠、重启或拔掉线缆后
这里的每种方法都只在线缆连接正常时有效。任一台电脑睡眠或你拔掉线缆时,连接就会断开。
- rsync 因连接错误而停止。再次运行同一命令。它会跳过已经到达的文件。
- 共享文件夹会断开。访达会提示与服务器的连接已中断,“文件”会关闭共享。请重新连接并登录。
- 地址可能会变。拔掉线缆后,自分配的地址可能会变,所以重新连接前请再次查找。
- 重启后共享仍然开启。远程登录、文件共享和已启用的 Samba 服务都会自动重新启动。你仍然需要从另一台电脑重新连接。
请参阅网络共享为什么在睡眠后断开。
方法 4:exFAT 硬盘
把硬盘格式化为 exFAT,然后把文件拷上去再拷下来。它不需要在任何一台电脑上设置,没有雷雳或 USB4 也能用,但每个文件都要拷贝两次,而且硬盘需要有足够的可用空间。