构建 Linux 高效备份与跨平台传输体系
文件归档和备份
归档和压缩文件对于创建备份和通过网络传输数据非常有用。
用于创建和使用备份存档的最古老和最常用的命令之一是 tar 命令。
tar 可以将大量文件集合到一个文件(存档)中,还可以使用 gzip,bzip2或xz压缩来压缩存档。
tar 命令语法
核心动作参数
| 参数 | 作用 |
|---|---|
| -c | 创建新压缩包 |
| -x | 解压文件 |
| -t | 查看压缩包内容列表 |
| -r | 向已有压缩包追加文件 |
常用辅助参数
| 参数 | 功能说明 |
|---|---|
| -v | 显示详细过程 |
| -f | 指定压缩包文件名 |
| -C | 指定解压目标路径 |
| –exclude | 排除指定文件/目录 |
压缩格式参数
| 参数 | 压缩类型 | 后缀 |
|---|---|---|
| -z | gzip 压缩 | .tar.gz / .tgz |
| -j | bzip2 压缩 | .tar.bz2 |
| -J | xz 高压缩 | .tar.xz |
tar 包管理
创建一个 tar 包
# 创建tar包,确保用户有权限访问目标文件
[gsb@server ~ 14:38:19]$ tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
tar: /etc/crypttab:无法 open: 权限不够
tar: /etc/grub.d:无法 open: 权限不够
tar: /etc/pki/CA/private:无法 open: 权限不够
tar: /etc/pki/rsyslog:无法 open: 权限不够
tar: /etc/lvm/archive:无法 open: 权限不够
....
# 没有权限读取的文件,当然无法打包
# root 用户可以打包所有文件
[root@server ~ 14:38:12]# tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
# 注意打包的时候,会将文件的第一个字符/剔除掉。解压的时候,默认解压到当前位置。
# 再次打包,如果存在相同的tar包,不会提示是否覆盖
[root@centos7 ~]# tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
# 通过添加日期,确保每天打包的文件名不一致
[root@server ~ 14:40:48]# tar -cf etc.tar /etc
tar: 从成员名中删除开头的“/”
[root@server ~ 14:41:06]# ls
anaconda-ks.cfg etc.tar
[root@server ~ 14:41:17]# tar -cf etc.$(date +%Y%m%d).tar /etc
tar: 从成员名中删除开头的“/”
[root@server ~ 14:43:18]# ls
anaconda-ks.cfg etc.20260517.tar etc.tar
查看 tar 包中文件
# 查看tar包内容
[root@server ~ 14:43:45]# tar -t -f etc.20260517.tar
etc/
etc/fstab
etc/crypttab
etc/mtab
etc/resolv.conf
etc/grub.d/
etc/grub.d/00_header
......
# 配合grep过滤
[root@server ~ 14:44:38]# tar -t -f etc.20260517.tar |grep etc/host
etc/host.conf
etc/hosts
etc/hosts.allow
etc/hosts.deny
etc/hostname
提取 tar 包中文件
# 提取所有文件
root@server ~ 14:45:21]# tar -xf etc.20260517.tar
[root@server ~ 14:45:52]# ls
anaconda-ks.cfg etc etc.20260517.tar etc.tar
# 查看其中一个子目录
[root@server ~ 14:48:13]# tree -L 1 etc/yum
etc/yum
├── fssnap.d
├── pluginconf.d
├── protected.d
├── vars
└── version-groups.conf
4 directories, 1 file
# 提取部分文件
[root@server ~ 14:48:52]# tar -t -f etc.20260517.tar |grep etc/host
etc/host.conf
etc/hosts
etc/hosts.allow
etc/hosts.deny
etc/hostname
[root@server ~ 14:49:14]# tar -x -f etc.20260517.tar $(tar -t -f etc.20260517.tar|grep etc/host)
[root@server ~ 14:50:43]# tree etc
etc
├── adjtime
├── aliases
├── aliases.db
├── alternatives
│ ├── ld -> /usr/bin/ld.bfd
│ ├── libnssckbi.so.x86_64 -> /usr/lib64/pkcs11/p11-kit-trust.so
│ ├── mta -> /usr/sbin/sendmail.postfix
│ ├── mta-aliasesman -> /usr/share/man/man5/aliases.postfix.5.gz
│ ├── mta-mailq -> /usr/bin/mailq.postfix
│ ├── mta-mailqman -> /usr/share/man/man1/mailq.postfix.1.gz
│ ├── mta-newaliases -> /usr/bin/newaliases.postfix
│ ├── mta-newaliasesman -> /usr/share/man/man1/newaliases.postfix.1.gz
│ ├── mta-pam -> /etc/pam.d/smtp.postfix
│ ├── mta-rmail -> /usr/bin/rmail.postfix
.....
tar 包中追加文件
[root@server ~ 15:01:12]# tar -r -f etc.20260517.tar /tmp/mycfg.txt
tar: 从成员名中删除开头的“/”
tar -tf:列出 tar 包里的所有文件(-t 是查看,-f 是指定文件名)
[root@server ~ 15:01:43]# tar -tf etc.20260517.tar |grep mycfg.txt
tmp/mycfg.txt
删除 tar 包中文件
[root@server ~ 15:03:16]# tar --delete -f etc.20260517.tar tmp/mycfg.txt
[root@server ~ 15:03:57]# tar -tf etc.20260517.tar |grep mycfg.txt
tar 包压缩管理
tar 命令支持多种压缩方法:
- gzip:-z, --gzip 文件名通常以.tar.gz结尾。最快,最老,使用最广泛。
- bzip2:-j, --bzip2 文件名通常以.tar.bz2结尾。压缩后比gzip小,没gzip使用广泛。
- xz:-J, --xz 文件名通常以.tar.xz结尾。比较新,更好的压缩比。
压缩的效果取决于被压缩的对象,例如已经压缩的图片或者rpm包,压缩效果不明显。
# 确保相关压缩工具已经安装了
[root@centos7 ~]# yum install gzip bzip2 xz
# gzip压缩
[root@server ~ 15:05:28]# time tar -czf etc.tar.gz /etc
tar: 从成员名中删除开头的“/”
real 0m1.467s
user 0m0.645s
sys 0m0.913s
# bzip2 压缩
[root@server ~ 15:06:07]# time tar -cjf etc.tar.bz2 /etc
tar: 从成员名中删除开头的“/”
real 0m3.851s
user 0m3.420s
sys 0m0.503s
# xz 压缩
[root@server ~ 15:06:28]# time tar -cJf etc.tar.xz /etc
tar: 从成员名中删除开头的“/”
real 0m19.046s
user 0m18.537s
sys 0m0.574s
[root@server ~ 15:07:03]# ll -lh etc*
-rw-r--r-- 1 root root 8.8M 5月 17 15:06 etc.tar.bz2
-rw-r--r-- 1 root root 10M 5月 17 15:06 etc.tar.gz
-rw-r--r-- 1 root root 7.2M 5月 17 15:07 etc.tar.xz
# 查看压缩的 tar 包不需要指定压缩选项
[root@server ~ 15:08:47]# tar -tf etc.tar.gz
系统间复制文档
windows 和 Linux 之间传输
xshell 工具
Linux服务器安装 lrzsz 软件包。该方式传输速度比ftp慢。
[root@centos7 ~]# yum install -y lrzsz
上传:直接将文件拖拽到命令行窗口即可。

拉取:使用 sz 工具,并指定保存位置。
- sz (Send):把文件从 Linux 服务器“发送”出来,也就是下载到本地。
- rz (Receive):把文件从本地“接收”进去,也就是上传到 Linux 服务器。

Linux 之间传输
scp 命令
scp,全名secure copy,也就是安全复制,是基于ssh协议,也就是说Linux服务器要开启ssh服务。
为了方便上传和下载,提前配置好秘钥登录服务器。
[root@client ~ 15:22:04]# scp root@server:/root/etc.tar.gz .
etc.tar.gz 100% 10MB 42.5MB/s 00:00
[root@client ~ 15:23:39]# ls
anaconda-ks.cfg etc.tar.gz
# 复制多个文件
[root@client ~ 15:23:44]# scp root@server:/root/{etc.tar.bz2,etc.tar.xz} .
etc.tar.bz2 100% 8973KB 43.0MB/s 00:00
etc.tar.xz 100% 7296KB 35.4MB/s 00:00
[root@client ~ 15:26:27]# ls
anaconda-ks.cfg etc.tar.bz2 etc.tar.gz etc.tar.xz
# 复制目录,使用 -r 选项
[root@server ~ 15:18:24]# mkdir csgo
[root@client ~ 15:31:12]# scp -r root@server:/root/csgo/ .
[root@client ~ 15:32:01]# ls
[root@client ~ 15:32:13]# ls
anaconda-ks.cfg csgo etc.tar.bz2 etc.tar.gz etc.tar.xz
# 上传,如果路径没有写,表示相对用户家目录。这里是上传到root用户家目录/root
[root@client ~ 15:37:19]# scp 1.txt root@server:
1.txt 100% 0 0.0KB/s 00:00
[root@server ~ 15:30:53]# ls
1.txt anaconda-ks.cfg csgo etc.tar.bz2 etc.tar.gz etc.tar.xz mycfg.txt.txt
...
scp 命令缺点:不管目的位置是否有文件,总是再复制一次,可以理解为全量备份。缺少比对功能。
rsync 命令
Rsync(Remote Synchronize)是一款开源的、快速的、多功能的、远程数据同步备份工具,并且支持多种操作系统平台运行。
Rsync具有本地与远程两台主机之间的数据快速复制同步镜像、远程备份等功能,该功能类似scp,但是优于scp功能,还具有本地不同分区目录之间全量及增量复制数据。
Rsync同步数据镜像时,通过“quick check”算法,仅同步大小或最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性变化的同步,所以可以实现快速同步。
前提:客户端和服务端都要提前安装好 rsync 软件包。
# 安装 rsync
[root@server ~ 15:38:50]# yum install -y rsync
shell 模式
shell 模式是基于 sshd 服务传送。
语法:
rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
常用选项:
- -n 参数执行空运行,与真实执行显示结果一致,但是没有做任何改变。
- -v 显示执行过程中详细输出。
- -a 代表“archive mode”,同时启用参数:-r -l -p -t -g -o -D
- -r 递归同步整个文件夹
- -l 同步软连接
- -p 保留权限
- -t 保留时间戳
- -g 保留所属组
- -o 保留所有者
- -D 同步设备文件
说明:
- -A,同步时保留ACLs内容。
- -X 同步时保留selinux内容。-a,不同步acl selinux内容。
# 准备文件
[root@client ~ 15:43:02]# touch csgo/niko{1..5}.jpg
# 首次同步
[root@client ~ 15:44:20]# rsync -av csgo root@server:
sending incremental file list
csgo/
csgo/niko1.jpg
csgo/niko2.jpg
csgo/niko3.jpg
csgo/niko4.jpg
csgo/niko5.jpg
sent 347 bytes received 115 bytes 924.00 bytes/sec
total size is 0 speedup is 0.00
# 再次同步
[root@client ~ 15:45:46]# rsync -av csgo root@server:
sending incremental file list
sent 149 bytes received 17 bytes 332.00 bytes/sec
total size is 0 speedup is 0.00
# 更新部分文件时间戳,再同步
[root@client ~ 15:45:52]# touch csgo/niko{1,2}*
[root@client ~ 15:47:05]# rsync -av csgo root@server:
sending incremental file list
csgo/niko1.jpg
csgo/niko2.jpg
sent 235 bytes received 55 bytes 580.00 bytes/sec
total size is 0 speedup is 0.00
# 删除 SRC 中文件,默认不会同步删除DEST中文件
[root@client ~ 15:47:19]# rm -f csgo/niko3.jpg
[root@client ~ 15:48:15]# rsync -av csgo root@server:
sending incremental file list
csgo/
sent 139 bytes received 20 bytes 318.00 bytes/sec
total size is 0 speedup is 0.00
# 使用选项 --delete 同步删除 DEST 中文件
[root@client ~ 15:48:53]# rsync -av csgo root@server: --delete
sending incremental file list
deleting csgo/niko3.jpg
sent 140 bytes received 31 bytes 342.00 bytes/sec
total size is 0 speedup is 0.00
将目标文件拉取到本地,操作过程一致。
同步注意事项:
- 文件访问时间等属性、读写等权限、文件内容等有任何变动,都会被认为修改。
- 目标目录下如果文件比源目录还新,则不会同步。
- 源路径的最后是否有斜杠有不同的含义:
- 有斜杠,只是复制目录中的文件。
- 没有斜杠的话,不但要复制目录中的文件,还要复制目录本身。
daemon 模式
daemon 模式,不依赖 ssh 服务。
daemon 模式要求:服务端部署 rsynrc 服务。
- **语法1:**源路径或目的路径的主机名后面包含两个冒号。
- **语法2:**rsync://URL格式。
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
更多推荐



所有评论(0)