05_Linux的文件压缩

常见压缩命令

文件压缩是一种很常见的技术,Linux支持很多压缩命令,例如zip tar gz等等,应该或多或少都见过这些后缀名的文件,接下来一一进行介绍。

gzip

gzip是应用最广的压缩命令,用法如下:

python 复制代码
gzip -options 文件名
[root@node4 mydir]# gzip -v myfile 
myfile:	 50.0% -- replaced with myfile.gz
常用参数:
-# 压缩等级,默认是6,1速度最快,压缩比最差;9压缩最慢,压缩比最佳
-v 显示压缩比率
-d 将压缩文件解压缩

注意,gzip命令将文件压缩后会使用.gz后缀的文件替换掉源文件。

python 复制代码
# 使用以下命令解压
[root@node4 mydir]# gzip -d myfile.gz

读取压缩文件可以用zcat命令

python 复制代码
[root@node4 mydir]# zcat myfile.gz 
111111111111111

bzip2

bzip2的使用方式几乎和gzip一样,它的压缩比优于gzip

python 复制代码
bzip2 -options 文件名
常用参数 
-k 保留原始文件

xz

如果追求极致的压缩的话,可以使用xz命令。可以看到,压缩比竟然打到了100。

python 复制代码
[root@node4 mydir]# xz -v myfile 
myfile (1/1)
  100 %                 72 B / 20 B = 3.600

打包命令tar

前面介绍的压缩命令,只能对单个文件进行压缩。如果要对目录中的多个文件打包成一个文件,就要使用tar命令。

tar

用法如下

python 复制代码
# 打包并压缩命令
tar -参数[z/j/J] -f 新文件名 
# 解压缩命令
tar -参数[z/j/J] -f tar文件名 解压目录

常用参数

python 复制代码
-c:建立打包文件
-t:查看打包文件的文件名
-x:解压缩
-z:通过gzip进行压缩或解压缩,此时文件名是*.tar.gz
-j:通过bzip2进行压缩或解压缩,此时文件名是*.tar.bz2
-J:通过xz进行压缩或解压缩,此时文件名是*.tar.xz
-f: 注意,该命令后面要跟文件名,所以顺序一定要在最后
注意,只能选择一种压缩方式,所以参数z/j/J不能同时出现
-v 显示压缩和解压缩过程

举例说明:

比如一个常见的nginx安装文件,nginx-1.24.0.tar.gz 这说明是一个用gzip压缩和打爆的tar文件,我们来试下解压和打包

python 复制代码
# 解压
tar -zxvf nginx-1.24.0.tar.gz
# 查看打包文件
tar -ztvf nginx-1.24.0.tar.gz
# 打包
tar -zcvf nginx-1.24.0.tar.gz nginx-1.24.0/

例1:查看并解压压缩包中的某个文件

python 复制代码
# 第一步,搜索文件名
[root@node4 mydir]# tar -ztvf nginx-1.24.0.tar.gz | grep CHANGES
-rw-r--r-- ftpuser/nginx 494234 2023-04-11 09:45 nginx-1.24.0/CHANGES.ru
-rw-r--r-- ftpuser/nginx 323312 2023-04-11 09:45 nginx-1.24.0/CHANGES
# tar -zxvf 压缩包名称 目标文件名称
[root@node4 mydir]# tar -zxvf nginx-1.24.0.tar.gz nginx-1.24.0/CHANGES
nginx-1.24.0/CHANGES

例2:打包目录时,不打包指定文件

python 复制代码
# 假设我们文件夹有如下文件
[root@node4 nginx-1.24.0]# ls
CHANGES  venu
# 我们选择不打包venu文件夹
# tar -zcvf 打包后的文件名 --exclude=要排除的文件 要打包的目录名
[root@node4 mydir]# tar -zcvf nginx-1.24.0.tar.gz --exclude=nginx-1.24.0/venu nginx-1.24.0/
nginx-1.24.0/
nginx-1.24.0/CHANGES

例3:备份比某个时刻还要新的文件

python 复制代码
# 假设我文件夹下有如下文件
[root@node4 nginx-1.24.0]# ll
总用量 320
-rw-r--r-- 1 ftpuser nginx 323312 4月  11 2023 CHANGES
-rw-r--r-- 1 root    root       0 3月  31 17:22 new
-rw-r--r-- 1 root    root      37 3月  31 14:24 venu
# 通过以下命令备份了2024年的文件
[root@node4 mydir]# tar -zcvf nginx_bac.tar.gz --newer-mtime="2024/01/01" nginx-1.24.0/*
tar: 选项 --newer-mtime: 将日期 '2024/01/01' 当作 2024-01-01 00:00:00
tar: nginx-1.24.0/CHANGES: 文件未改变;未输出
nginx-1.24.0/new
nginx-1.24.0/venu
# 查看压缩包
[root@node4 mydir]# tar -ztvf nginx_bac.tar.gz 
-rw-r--r-- root/root         0 2024-03-31 17:22 nginx-1.24.0/new
-rw-r--r-- root/root        37 2024-03-31 14:24 nginx-1.24.0/venu

例4:备份系统文件

备份系统文件,排除压缩文件,排除/home/loop*

python 复制代码
[root@node4 ~]# tar -zcvf backups-20240331.tar.gz --exclude=/root/*.bz2 --exclude=/root/*.gz --exclude=/home/loop* /etc /home /var/spool/mail /var/spool/cron /root
[root@node4 ~]# ll -h backups-20240331.tar.gz 
-rw-r--r-- 1 root root 28M 3月  31 17:41 backups-20240331.tar.gz

XFS文件系统的备份和还原

xfs文件系统支持完整备份和增量备份,可以使用xfsdump命令进行备份,使用xfsrestore来进行还原。注意,这个命令备份的是整个文件系统,而不是某个目录。具体略。

其他一些备份命令,比如dd和cpio,这里也略过。

相关推荐
牛奶咖啡1341 分钟前
Linux中安装部署Hadoop集群的保姆级安装配置教程
linux·hadoop·openjdk21安装配置·openjre21安装配置·hadoop集群安装配置·linux的ssh配置·linux实现免密登录配置
dessler1 小时前
MYSQL-数据库介绍
linux·运维·mysql
Garc1 小时前
linux Debian 12 安装 Docker(手动)
linux·docker·debian
kaoa0001 小时前
Linux入门攻坚——52、drbd - Distribute Replicated Block Device,分布式复制块设备-1
linux·运维·服务器
Kay_Liang2 小时前
【Hive 踩坑实录】从元数据库初始化到 HiveServer2 启动的全流程问题解决
大数据·linux·hive·hadoop·笔记·mysql·ubuntu
NiKo_W2 小时前
Linux Socket网络编程基础
linux·服务器·网络
啊略略wxx2 小时前
嵌入式Linux面试题目
linux·运维·服务器
九河云2 小时前
华为云 Flexus 对象存储:高可靠低成本双引擎,筑牢企业数据根基
服务器·网络·人工智能·科技·华为云
半桔2 小时前
【IO多路转接】深入解析 poll:从接口到服务器实现
linux·运维·服务器·php
Dovis(誓平步青云)2 小时前
《静态库与动态库:从编译原理到实战调用,一篇文章讲透》
linux·运维·开发语言