管理压缩的tar归档
创建备份和通过网络传输数据时,归档和压缩非常有用。用来创建和使用备份存档的其中一个最早也是最常见的命令是tar命令
- tar包的归档和压缩
-- 1、整合分散的数据
-- 2、减小空间的占用 - Linux中常见的压缩格式:
-- .gz:gzip的压缩格式,压缩速度快
-- .bz2:bzip2的压缩格式,不快不小
-- .xz:xz的压缩格式,压缩最慢,压缩比例高 - 打包格式:
tar [option] /路径/压缩包名字 [option] 被压缩的数据源
- 解包格式:
tar [option] /路径/压缩包名字 [option] 被解包的路径
- tar命令的常用选项
-c #创建归档,打包
-x #释放归档,解包
-f #指定归档文件名称
-z、-j、-J #调用.gz、.bz2、.xz压缩格式的工具进行处理
-t #显示归档中的文件清单
-C #指定释放路径
-v #显示指令执行过程
- 创建压缩存档案例
[root@serverb ~]# tar -jcf /home/user/log.tar.bz2 /var/log/
tar: Removing leading `/' from member names
[root@serverb ~]# tar -Jcf /home/user/log.tar.xz /var/log/
tar: Removing leading `/' from member names
[root@serverb ~]# tar -zcf /home/user/log.tar.gz /var/log/
[root@serverb user]# ls -lh
total 1.6M
-rw-r--r--. 1 root root 468K Mar 31 21:34 log.tar.bz2
-rw-r--r--. 1 root root 700K Mar 31 21:31 log.tar.gz
-rw-r--r--. 1 root root 378K Mar 31 21:34 log.tar.xz
#如果出现以下报错,是系统缺少bzip2软件包,需要安装
[root@serverb ~]# tar -jcf log.tar.bz2 /var/log/
tar: Removing leading `/' from member names
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
[root@serverb ~]# yum install bzip2
#查看归档
[root@serverb user]# tar -tf log.tar.gz
var/log/
var/log/tallylog
var/log/grubby_prune_debug
var/log/lastlog
var/log/wtmp
var/log/tuned/
var/log/tuned/tuned.log
var/log/audit/
var/log/audit/audit.log
var/log/qemu-ga/
... ...
- 提取压缩存档解包
#不用-C选项指定解压路径,默认解压在当前路径
[root@serverb ~]# tar -zxf /home/user/log.tar.gz -C /tmp/
[root@serverb log]# tar -jxf /home/user/log.tar.bz2 -C /tmp/
[root@serverb tmp]# tar -Jxf /home/user/log.tar.xz -C /tmp/
在系统之间安全的传输文件
- 使用secure copy传输文件scp命令
运行此命令时,scp客户端将使用基于密钥的身份验证或以提示输入密码的方式向远程SSH服务器进行身份验证,就像ssh一样
[root@serverb ~]# scp -r /tmp/var/log/ root@192.168.2.100:/root/
The authenticity of host '192.168.2.100 (192.168.2.100)' can't be established.
ECDSA key fingerprint is SHA256:etAhB4GlCD3RMEkDMjBb3Kui1ULKK1ZeV03TRf/4pP8.
ECDSA key fingerprint is MD5:af:a3:a9:cb:8d:87:2d:74:eb:0e:b2:a8:aa:57:90:ad.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.100' (ECDSA) to the list of known hosts.
root@192.168.2.100's password:
tallylog 100% 63KB 7.3MB/s 00:00
grubby_prune_debug 100% 193 330.3KB/s 00:00
lastlog 100% 286KB 15.8MB/s 00:00
wtmp 100% 60KB 17.5MB/s 00:00
tuned.log 100% 13KB 10.8MB/s 00:00
... ...
- 使用安全文件传输程序传输文件
要以交互式从ssh服务器上传或下载文件,请使用安全文件传输程序sftp。sftp命令的会话使用安全身份验证机制,并将数据加密后再与ssh服务器来回传输
#连接远程ssh
[root@serverb ~]# sftp root@192.168.2.100
root@192.168.2.100's password:
Connected to 192.168.2.100.
sftp>lcd /tmp/var/
sftp> lpwd
Local working directory: /tmp/var
sftp> lls
log
sftp> mkdir /root/bak/
sftp> cd /root/bak/
sftp> pwd
Remote working directory: /root/bak
sftp> put -r log/
sftp> cd log/
sftp> ls -l
在系统间安全地同步文件
- 使用rsync同步文件和目录
rsync命令是在系统之间安全复制文件的另一种方式。此工具采用的算法可通过仅同步已更改的文件部分来将复制的数据量最小化。它与scp的区别在于,如果两个服务器间的两个文件或目录相似,rsync将仅复制文件系统间的差异部分,而scp仍复制所有内容 - rsync的常用选项
-n #用于空执行,空执行是对执行命令时所发生的情况模拟,在正常运行之前使用-n选项
-a #启用存档模式,这样可实现递归复制并开启很多有用的选项,以保留文件的大部分特征(递归方式同步整个目录树、同步符号链接、保留权限、保留时间戳、保留组所有权、保留文件所有者、同步设备文件)。\
不会保留硬链接,会增加同步时间,想要保留硬链接-H选项
-v #可提供详细的输出。对于故障排查和查看实时进度非常有用
- 可以使用rsync命令将本地文件或目录的内容和远程计算机上的文件或目录进行同步。也可以同步两个本地文件或目录的内容。
#两个本地文件同步,在源文件后面不加/会在目标文件下创建一个和源文件同名的子目录然后将文件内容一并同步
[root@serverb ~]# rsync -av /root/test /root/testdir
sending incremental file list
test/
test/file1.txt
test/file10.txt
test/file2.txt
test/file3.txt
test/file4.txt
test/file5.txt
test/file6.txt
test/file7.txt
test/file8.txt
test/file9.txt
sent 617 bytes received 210 bytes 1,654.00 bytes/sec
total size is 0 speedup is 0.00
[root@serverb ~]# cd test
[root@serverb test]# cd ../testdir/
[root@serverb testdir]# ls
test
[root@serverb testdir]# cd test/
[root@serverb test]# ls
file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
[root@serverb test]# pwd
/root/testdir/test
#如果在源文件后面加上/,就只同步源文件内的内容到新目录
[root@serverb ~]# rsync -av /root/test/ /root/testdir
sending incremental file list
./
file1.txt
file10.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
file7.txt
file8.txt
file9.txt
sent 604 bytes received 209 bytes 1,626.00 bytes/sec
total size is 0 speedup is 0.00
[root@serverb ~]# cd /root/testdir
[root@serverb testdir]# ls
file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
- 如果在源文件新加一些内容,rsync只会同步新加的内容
[root@serverb ~]# rsync -av /root/test/ /root/testdir/
sending incremental file list
./
file10.txt
file/
file/heihei
sent 357 bytes received 65 bytes 844.00 bytes/sec
total size is 0 speedup is 0.00
#查看
[root@serverb ~]# cd testdir/
[root@serverb testdir]# ls
file file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
[root@serverb testdir]# cd file
[root@serverb file]# ls
heihei
- 两台服务器之间使用rsync同步
#从本地同步到远程目录
[root@serverb ~]# rsync -av /root/testdir root@192.168.2.100:/tmp
root@192.168.2.100's password:
sending incremental file list
testdir/
testdir/file1.txt
testdir/file10.txt
testdir/file2.txt
testdir/file3.txt
testdir/file4.txt
testdir/file5.txt
testdir/file6.txt
testdir/file7.txt
testdir/file8.txt
testdir/file9.txt
testdir/file/
testdir/file/heihei
sent 723 bytes received 237 bytes 384.00 bytes/sec
total size is 0 speedup is 0.00
[root@myhost ~]# ls /tmp/testdir/
file file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt
#也可以从远程目录同步到本地
[root@myhost ~]# cd /tmp/testdir/
[root@myhost testdir]# touch newfile.txt #远程目录创建新内容
[root@serverb ~]# rsync -av root@192.168.2.100:/tmp/testdir/ /root/testdir/
root@192.168.2.100's password:
receiving incremental file list
./
newfile.txt
sent 47 bytes received 339 bytes 110.29 bytes/sec
total size is 0 speedup is 0.00
[root@serverb ~]# cd /root/testdir/
[root@serverb testdir]# ls
file file10.txt file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt file7.txt file8.txt file9.txt newfile.txt