完成后,dest_dir 中的目录 dir 就会出现在 host 上。图 12-1 显示了 rsync 通常如何处理包含 a 和 b 文件的目录的示例。
图 12-1:正常的 rsync 复制
不过,在源名称后添加斜线 (/) 会明显改变行为:
$ rsync -a dir/ host:dest_dir
复制代码
在这里,rsync 会将 dir 中的所有内容复制到主机上的 dest_dir,而不会在目标主机上创建 dir。因此,可以将 dir/ 的传输视为类似于本地文件系统上 cp dir/* dest_dir 的操作。
例如,假设有一个包含 a 和 b 文件(dir/a 和 dir/b)的目录 dir。运行该命令的跟踪斜线版本,将它们传输到主机上的 dest_dir 目录:
$ rsync -a dir/ host:dest_dir
复制代码
传输完成后,dest_dir 包含 a 和 b 的副本,但不包括 dir。但是,如果省略了 /on dir 的尾部,dest_dir 就会得到一个包含 a 和 b 的 dir 副本。传输的结果是,远程主机上会有名为 dest_dir/dir/a 和 dest_dir/dir/b 的文件和目录。图 12-2 展示了 rsync 在使用尾部斜线时如何处理图 12-1 中的目录结构。
在向远程主机传输文件和目录时,如果不小心在路径后添加了 /,通常只会造成麻烦;你可以前往远程主机,添加 dir 目录,然后将所有传输的项目放回 dir 中。不幸的是,当你将尾部的 / 与 --delete 选项结合使用时,可能会造成更大的灾难;一定要格外小心,因为这样很容易删除不相关的文件。
你的 Linux 机器在网络上可能并不孤单,当你在网络上有多台机器时,几乎总有理由在它们之间共享文件。在本章的其余部分,我们将首先介绍 Windows 和 macOS 机器之间的文件共享,然后你将进一步了解 Linux 如何适应与完全陌生环境的交互。为了在 Linux 机器之间共享文件或从网络区域存储(NAS)设备访问文件,我们将讨论如何使用 SSHFS 和网络文件系统(NFS)作为客户端。
12.3.1 文件共享的使用和性能
在使用任何类型的文件共享系统时,都需要问自己一个问题,那就是为什么要这样做。在传统的基于 Unix 的网络中,有两个主要原因:方便和缺乏本地存储。一个用户可以登录到网络上的多台机器之一,每台机器都可以访问用户的主目录。将存储集中在少数集中式服务器上,比为网络上的每台机器购买和维护大量本地存储要经济得多。
这种模式的优点被一个多年不变的主要缺点所掩盖:与本地存储相比,网络存储的性能往往很差。某些类型的数据访问没有问题;例如,现代硬件和网络将视频和音频数据从服务器流式传输到媒体播放器没有问题,部分原因是数据访问模式非常可预测。从大型文件或数据流发送数据的服务器可以高效地预载和缓冲数据,因为它知道客户端可能会按顺序访问数据。
但是,如果你正在进行更复杂的操作或同时访问许多不同的文件,你就会发现你的 CPU 经常在网络上等待。延迟是罪魁祸首之一。这是从任何随机(任意)网络文件访问中接收数据所需的时间。在向客户端发送任何数据之前,服务器必须接受并破译请求,然后定位并加载数据。最初的步骤通常是最慢的,几乎每次新文件访问都要进行这些步骤。
这个故事的寓意是,当你开始考虑网络文件共享时,问问自己为什么要这么做。如果是为了不需要频繁随机访问的大量数据,你可能不会有问题。但是,如果你正在编辑视频或开发一个规模较大的软件系统,你就会希望将所有文件保存在本地存储器中。
12.3.2 文件共享的安全性
如果你有运行 Windows 的机器,你可能会希望允许这些 Windows 机器使用标准的 Windows 网络协议服务器消息块(SMB)访问 Linux 系统的文件和打印机。
Unix 的标准文件共享软件套件称为 Samba。Samba 不仅能让网络中的 Windows 计算机访问你的 Linux 系统,还能反过来使用:你可以通过 Samba 客户端软件从 Linux 机器打印和访问 Windows 服务器上的文件。
要设置 Samba 服务器,请执行以下操作:
创建一个 smb.conf 文件。
在 smb.conf 文件中添加文件共享部分。
在 smb.conf 中添加打印机共享部分。
启动 Samba 守护进程 nmbd 和 smbd。
从发行版软件包安装 Samba 时,系统会使用服务器的一些合理默认值执行这些步骤。不过,它可能无法确定你希望将 Linux 机器上的哪些特定共享(资源)提供给客户端。
本章对 Samba 的讨论并不全面;它仅限于让单个子网中的 Windows 机器通过 Windows 网络位置浏览器看到一台独立的 Linux 机器。配置 Samba 的方法不胜枚举,因为访问控制和网络拓扑结构有多种可能性。有关如何配置大型服务器的详细内容,请参阅 Gerald Carter、Jay Ts 和 Robert Eckstein 合著的《Using Samba》(第 3 版)(O'Reilly,2007 年),该指南内容更为丰富,也可访问 Samba 网站 (https://samba.org/)。
12.4.1 服务器配置
默认情况下,Samba 会读取登录用户的 /etc/passwdentry 来确定 [homes] 的主目录。不过,如果不想让 Samba 遵循这一行为(即希望将 Windows home 目录放在与常规 Linux home 目录不同的位置),可以在路径参数中使用 %S 替换。例如,下面是切换用户的