此博客将主要介绍Linux文件同步常用的两种命令:scp(secure copy)、rsync(remote synchronization)和tftp(Trivial File Transfer Protocol)。它们是用于Linux系统之间进行文件同步的命令行工具。scp和rsync都可以通过SSH协议安全地传输文件,但是它们的功能和工作方式有所不同,tftp使用UDP协议进行数据传输,由于较为简单需要在受信任的的网络中使用。此外也会介绍一些不较常用的一些命令,例如ftp、sftp和lftp。
scp 是基于SSH协议的一个安全的文件复制命令,它用于在本地主机和远程主机之间复制文件和目录。scp可以将文件从本地复制到远程服务器,也可以从远程服务器复制到本地。scp的特点是使用简单,但是不支持增量备份,也就是说每次同步都会复制所有选定的文件,即使这些文件自上次同步后没有发生变化。但缺点是可能会导致不必要的数据传输,从而增加网络负担和同步时间。
从本地复制文件到远程:
scp /path/to/local/file username@remotehost:/path/to/remote/directory
从远程复制文件到本地:
scp username@remotehost:/path/to/remote/file /path/to/local/directory
从本地复制目录到远程:
scp -r /path/to/local/directory user@remotehost.com:/path/to/remote/directory
从远程复制目录到本地:
scp -r username@remotehost:/path/to/remote/directory /path/to/local/directory
使用-P指定非默认端口:
scp -P 2222 /path/to/local/file user@remotehost.com:/path/to/remote/directory
rsync 是一个更为强大的文件同步工具,它不仅可以通过SSH传输数据,还可以通过rsync守护进程传输。rsync 最大的特点是它支持增量备份,也就是说只有变更过的文件或文件的变更部分会被同步。这样可以大大减少数据传输量,提高效率。此外,rsync 还提供了许多高级选项,比如压缩传输时的数据、保留文件权限和时间戳、排除某些文件等。
从本地同步到远程,其中,-a 是归档模式,表示保持所有文件属性并递归复制(适用于目录同步),-v 表示详细模式,-z 表示压缩数据进行传输:
rsync -avz /path/to/local/directory username@remotehost:/path/to/remote/directory
从远程同步到本地,其中,-a 是归档模式,表示保持所有文件属性并递归复制(适用于目录同步),-v 表示详细模式,-z 表示压缩数据进行传输:
rsync -avz username@remotehost:/path/to/remote/directory /path/to/local/directory
仅同步文件结构(不传输文件内容,使用 -n 或 --dry-run 进行模拟):
rsync -avn /path/to/source/ /path/to/destination/
删除目标路径中存在但源路径中不存在的文件(使用 --delete):
rsync -avz --delete /path/to/source/dir/ user@remotehost.com:/path/to/destination/dir/
排除特定文件或目录(使用 --exclude):
rsync -avz --exclude 'pattern_to_exclude' /path/to/source/dir/ /path/to/destination/dir/
使用非默认SSH端口(使用 -e 指定 SSH 命令):
rsync -avz -e 'ssh -p 2222' /path/to/local/dir/ user@remotehost.com:/path/to/remote/dir/
rsync 还有很多其他选项,可以调整复制过程中的行为和性能,比如 --compress(压缩数据)、–progress(显示进度)、–bwlimit(限制带宽)和 --backup(创建备份)等等。
总的来说,scp 适合低频率的小规模文件传输,而rsync 由于其增量备份的特性,更适合定期的大规模文件同步和备份任务。
tftp(Trivial File Transfer Protocol)是一个简单的文件传输协议,它在设计上比标准的FTP(File Transfer Protocol)要简单得多。TFTP使用UDP协议进行数据传输,而不是FTP使用的TCP协议。因为它没有提供任何身份验证或加密功能,所以通常只在一个受信任的网络(比如局域网)内使用。
TFTP经常在需要低开销的文件传输任务中使用,比如在无盘工作站或网络设备(如路由器或交换机)中传输引导文件和配置文件。它也用于一些嵌入式系统和自动化环境中,以及在PXE(Preboot eXecution Environment)启动过程中加载操作系统映像。
tftp 命令允许用户通过TFTP客户端与服务器交互,以上传或下载文件。在大多数Linux发行版上,tftp 客户端并不总是默认安装的,可能需要通过包管理器(如 apt, yum, dnf 等)安装。
安装 tftp 客户端的命令示例(以Ubuntu为例):
sudo apt update
sudo apt install tftp
使用以下命令进入TFTP交互式模式:
tftp [hostname]
[hostname] 是你想要连接的TFTP服务器的主机名或IP地址。进入交互式模式后,你可以使用一系列命令来操作文件,比如
获取文件(get):
tftp> get filename
上传文件(put):
tftp> put filename
退出tftp交互式模式(quit):
tftp> quit
由于TFTP协议的简单性和不安全性(无加密,无认证),它不适合在公开或不安全的网络环境中传输敏感数据。TFTP主要用于某些特定场景,例如网络设备的引导和配置,或者其他需要小型、非安全文件传输的场合。如果需要安全的文件传输,应该使用支持加密和认证的协议,如SFTP或SCP。
ftp(File Transfer Protocol),这是一个较旧的、不安全的文件传输协议,因为它在传输数据时不提供加密。尽管还在使用,但不推荐在安全性要求较高的环境中使用。
sftp(Secure File Transfer Protocol),类似于 scp,它是一个在本地和远程系统之间交互式传输文件的工具。它也是基于 SSH 协议,提供了一个类似于 FTP 的接口,但是所有传输的数据都是加密的。
lftp 是一个功能非常强大的命令行文件传输客户端,支持 FTP、FTP over HTTP、SFTP、Fish、DFS 和 HTTP 协议,具有镜像下载、断点续传和其他高级特性。