首先提出一个问题:我们为什么需要打包压缩文件?
答:为了备份还原 有利于网络传输
但打包与压缩是两个过程,打包是将许多文件放到一起形成一个文件,也就是归档文件
,而压缩则是减少占用磁盘的空间。
Windows文件中的哪些压缩文件是Linux也是可以打开的?
zip是两者都支持的
.rar 文件在Linux里默认是不能打开的
常见的压缩指令
-
zip 压缩命令
- zip passwd.zip passwd 压缩
- unzip passwd.zip 解压缩
-
gzip
- gzip passwd 压缩
- gunzip passwd.gz 解压缩
-
xzip xzip passwd 与gzip类似 但是压缩效果比gzip好 (压缩后占比更少) 但是压缩时间长
-
bzip2 同gzip类似
linux 上常见的压缩指令是 gzip、bzip2 以及最新的 xz,还有支持 windows 的 zip,至于其他的压缩指令基本上都淘汰了。
gzip
gzip [-cdtv#] 文档名
zcat 文档名.gz
[root@localhost test]# gzip passwd
[root@localhost test]# ls
passwd.gz
[root@localhost test]# gunzip passwd.gz
[root@localhost test]# ls
passwd
其余几条指令的使用方法与gzip大致相同,此处便不做赘述
tar
这种将多个文件或目录包成一个大文件的指令功能,就可以称呼为 打包指令,tar 就是这样一个功能的打包指令,同时还可以通过压缩指令将该文件进行压缩。
tar 的选项与参数非常多,这里只接受几个常用的选项
选项与参数
- c:建立打包文件,可搭配
-v
来观察过程中被打包的文件名 - t:查看打包文件的内容含有哪些文件,重点在查看文件名
- x:接打包或解压缩的功能,可搭配 -C 在特定目录解开,特别注意 c、t、x 不能同时出现在一起
- z:通过 gzip 的支持进行压缩、解压缩;此时文件名最好为
*.tar.gz
- j:通过 bzip2 的支持进行压缩、解压缩;此时文件名最好为
*.tar.bz2
- J:通过 xz 的支持进行压缩、解压缩;此时文件名最好为
*.tar.xz
- v:在压缩、解压缩的过程中,将正在处理的文件名显示出来
- f:后面要立刻接要被处理的文件名,建议 -f 单独写一个选项(不容易忘记)
- C:在指定目录解压缩
- p:保留备份数据的原本权限与属性,常用语备份(-c)重要的配置文件
- P:保留绝对路径,保留 root 跟路径
--exclude=FILE
:在压缩过程中,排除指定的文件,不打包
最常用的是以下命令:
- 压 缩:
tar -cjf -v filename.tar.bz2 要被压缩的文件或目录
,后打包的压缩文件会覆盖原来的文件- tar -czf -->.tar.gz
- tar -cjf -->.tar.bz2
- tar -cJf -->.tar.xz
- 查 询:
tar -tjf -v filename.tar.bz2
- 解压缩:
tar -xjf -v filename.tar.bz2 -C 指定目录解开
#压缩
[root@localhost demo]# tar -czf test.sh.gz test.sh
[root@localhost demo]# ls
demo1 test1.sh test.sh test.sh.bz2 test.sh.gz
#查看
[root@study ~]# tar -jtv -f /root/etc.tar.bz2
drwxr-xr-x root/root 0 2019-10-04 18:38 etc/
-rw-r--r-- root/root 808 2019-10-27 22:43 etc/fstab
-rw------- root/root 0 2019-10-04 18:20 etc/crypttab
lrwxrwxrwx root/root 0 2019-10-04 18:20 etc/mtab -> /proc/self/mounts
-rw-r--r-- root/root 51 2019-10-04 18:20 etc/resolv.conf
#解压
[root@localhost demo1]# tar -zx -f test.sh.gz -C /wh
[root@localhost demo1]# cd /wh
[root@localhost wh]# ls
test
格式化输出日期
- +%Y year 年
- %m 月
- %d 天
- %H 小时
- %M 分
- %S 秒
ctime=$(date+%Y%m%d)
tar czf bool-$ctime.tar.gz /bool
tar czf bool-$(date+%Y%m%d).tar.gz /bool
系统备份
在工作中经常需要备份的东西:日志文件
编写一个脚本 实现备份/var/log目录下的所有文件 要求文件名包含当天日期 精确到秒 同时删除七天前的备份文件 只保留最近七天的文件
#!/bin/bash
ctime=$(date +%Y%m%d%H%M%S)
mkdir -p /scbackup
tar czf /scbackup/${ctime}-log.tar.gz /var/log 2>/dev/null
find /scbackup -mtime +7 -name "*tar.gz" -exec rm -rf {} \;
大文件处理
split
可以分割文件,按文件大小或行数来分割
选项和参数:
-
b 指定每个分割文件的大小
-
d 指定分割文件的后缀为数字
-
a 指定分割文件数字后缀的长度 如果是1 后缀为 0,1,2 如果是2 ,则是00,01,02.。。
-
C 指定每行最大的字节数
-
l 指定每个文件的最大行数
[root@localhost changsha]# ll -h
总用量 512M
-rw-r--r--. 1 root root 104 2月 27 15:55 bigfile.sh
-rw-r--r--. 1 root root 411M 2月 27 15:56 test.txt
[root@localhost changsha]# split -b 200M test.txt
[root@localhost changsha]# ll -h
总用量 923M
-rw-r--r--. 1 root root 104 2月 27 15:55 bigfile.sh
-rw-r--r--. 1 root root 411M 2月 27 15:56 test.txt
-rw-r--r--. 1 root root 200M 2月 27 16:00 xaa
-rw-r--r--. 1 root root 200M 2月 27 16:00 xab
-rw-r--r--. 1 root root 11M 2月 27 16:00 xac