两台linux的文件传输
起因
本地拉取docker镜像timeout,然后就准备把阿里云上已经在运行的镜像打包下载下来。
指令1:rsync
rsync
是一个非常强大的工具,用于文件同步和高效的数据传输。它可以用于备份、文件传输以及数据同步等多种场景。
rsync
的主要优点在于其高效性和灵活性,特别是在处理大量文件和远程传输时表现优异。
主要特点
- 增量传输:
rsync
只传输两个文件之间的差异部分,而不是整个文件,从而显著减少了传输时间。 - 多平台支持:
rsync
可以在多种操作系统上运行,包括 Linux、macOS 和 Windows。 - 安全传输:通过 SSH 或 SSL/TLS 进行加密传输,保证数据的安全性。
- 灵活的选项:支持多种选项来定制传输行为,如保留文件元数据、压缩数据等。
- 远程文件同步:可以轻松地在本地计算机和远程服务器之间同步文件。
基本语法
rsync
的基本语法如下:
rsync [options] SOURCE DESTINATION
其中:
- options:一系列用于控制
rsync
行为的选项。 - SOURCE:要同步或传输的源文件或目录。
- DESTINATION:目标文件或目录的位置。
常用选项
基础选项
- -a(archive):归档模式,保留文件属性(如权限、时间戳、符号链接等)。
- -v(verbose):详细模式,显示更多输出信息。
- -z(compress):启用压缩,减少数据传输量。
- -P(progress):显示进度条,并在传输完成后打印统计数据。
- -r(recursive):递归复制目录。
- -u(update):只传输那些源端比目标端新或不存在的文件。
进阶选项
- -e(program):指定用于远程 shell 的程序,默认为
ssh
。 - -H(hard-links):保持硬链接的关联。
- -L(links):将符号链接作为普通文件传输。
- -B(block-size):指定块大小,用于提高传输效率。
- -S(sparse):保留稀疏文件的稀疏性。
- -I(ignore-errors):忽略错误,继续处理其他文件。
- -q(quiet):安静模式,减少输出信息。
示例
1. 本地文件同步
将本地目录 source_dir
同步到本地目录 dest_dir
:
rsync -avz /path/to/source_dir /path/to/dest_dir
2. 从远程服务器拉取文件到本地
将远程服务器上的文件 remote_file
拉取到本地目录 local_dir
:
rsync -avz user@remote_server:/path/to/remote_file /path/to/local_dir
3. 将本地文件推送到远程服务器
将本地目录 local_dir
推送到远程服务器的 remote_dir
:
rsync -avz /path/to/local_dir user@remote_server:/path/to/remote_dir
应用场景
数据备份
定期将重要数据备份到另一个存储设备或远程服务器上:
rsync -avz --delete /path/to/data user@backup_server:/path/to/backup_dir
文件同步
实时同步工作目录到远程服务器:
rsync -avz --delete /path/to/workdir user@remote_server:/path/to/remotedir
--delete:该选项表示在同步过程中删除目标端(destination)中不再存在于源端(source)的文件或目录。这有助于保持目标端与源端的一致性。
亲测
将我笔记本上的ollama.tar的包传输到办公室的Pi5上。之前从阿里云服务器上下载下来操作类似,网速也差不多,不过没截图。
指令2 scp
scp
(Secure Copy)是一个用于通过 SSH 协议安全地传输文件的工具。它主要用于简单的文件传输任务,特别适合在本地计算机和远程服务器之间传输单个文件或目录。
基本语法
scp
的基本语法如下:
scp [options] source destination
常用选项
- -r:递归复制目录。
- -p:保留文件的权限、时间戳等属性。
- -v:详细模式,显示更多输出信息。
- -C:启用压缩(默认不压缩)。
- -P
:指定 SSH 端口(默认为 22)。 - -i <identity_file>:指定私钥文件,用于密钥认证。
常见用法
1. 从本地传输文件到远程服务器
将本地的 file.txt
文件传输到远程服务器的 /home/user/
目录:
scp -P 22 file.txt user@remote_server:/home/user/
这里的 -P 22
指定使用默认的 SSH 端口 22。
2. 从远程服务器拉取文件到本地
将远程服务器上的 file.txt
文件拉取到本地的当前目录:
scp -P 22 user@remote_server:/home/user/file.txt .
3. 传输目录
将本地的 directory
目录传输到远程服务器的 /home/user/
目录:
scp -Pr directory user@remote_server:/home/user/
这里的 -Pr
表示递归复制目录。
示例
1. 从本地传输文件到远程服务器
假设你要将本地的 ~/Documents/file.txt
文件传输到远程服务器的 ~/backups
目录:
scp -P 22 ~/Documents/file.txt user@remote_server:~/backups
2. 从远程服务器拉取文件到本地
假设你要将远程服务器上的 ~/data/file.txt
文件拉取到本地的 ~/Downloads
目录:
scp -P 22 user@remote_server:~/data/file.txt ~/Downloads
3. 传输目录
假设你要将本地的 ~/Projects/project
目录传输到远程服务器的 ~/projects
目录:
scp -Pr ~/Projects/project user@remote_server:~/projects
与 rsync
的区别
虽然 scp
和 rsync
都可以用来传输文件,但它们有一些不同之处:
- 功能复杂度:
rsync
提供了更丰富的功能,如增量传输、文件同步等。 - 性能:对于大型文件或目录,
rsync
通常更高效,因为它只传输文件的不同部分。 - 易用性:
scp
更适合简单的文件传输任务,而rsync
更适合复杂的同步和备份场景。