《码农说》公众号的第13篇文章来袭,今天分享一篇之前梳理过的Linux解压缩命令。
按照惯例,我们先上思维导图,稍后会逐步展开介绍。
我是用Docker部署的CentOS,执行下面的命令进入CentOS操作系统
Step1:先执行docker ps
查看启动中的容器,发现CentOS容器的IDa7d064b6d983
C:\Users\86135.000>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7d064b6d983 centos "/bin/bash" 6 minutes ago Up 6 minutes oldgeek-centos
26ffb592e1f9 mysql:8.0.27 "docker-entrypoint.s…" 10 days ago Up 9 minutes 33060/tcp, 0.0.0.0:3386->3306/tcp mysql-db-1
7bc836d62b67 portainer/portainer-ce:latest "/portainer" 10 days ago Up 9 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:9443->9443/tcp, 9000/tcp portainer
1c0904b11353 nginx "/docker-entrypoint.…" 10 days ago Up 9 minutes 0.0.0.0:80->80/tcp nginx
Step2: 执行docker exec
命令进入容器内部
C:\Users\86135.000>docker exec -it a7d064b6d983 /bin/bash
[root@a7d064b6d983 /]#
Step3:创建文件夹: oldgeek
[root@a7d064b6d983 /]# mkdir oldgeek
[root@a7d064b6d983 /]#
Step4:切换目录,然后用vi
命令创建一个文件,文件中输入写内容,尽量多输入些内容,便于比较后面的压缩率。
[root@a7d064b6d983 /]# cd oldgeek
[root@a7d064b6d983 oldgeek]# vi test.in
Step5:我们可以在创建一些示例用的文件夹或者文件,例如下面,大家根据自己情况创建即可
[root@a7d064b6d983 oldgeek]# mkdir test
[root@a7d064b6d983 oldgeek]# cd test
[root@a7d064b6d983 test]# vi 1.in
Step6: 我创建的文件夹目录结构大致如下
[root@a7d064b6d983 oldgeek]# ls -la
total 12976
drwxr-xr-x 3 root root 4096 Jan 6 01:03 .
drwxr-xr-x 1 root root 4096 Jan 6 00:57 ..
-rw------- 1 root root 13266944 Jan 6 00:59 .test.swp
drwxr-xr-x 2 root root 4096 Jan 6 01:05 test
-rw-r--r-- 1 root root 908 Jan 6 01:00 test.in
[root@a7d064b6d983 oldgeek]#
tar
命令下面只列出一些常用参数,参数很多,其他参数请查阅帮助文档
参数 | 描述 |
---|---|
-c | 建立新的压缩文件 |
-v | 显示操作过程 |
-f | 指定压缩文件 |
-z | 支持gzip解压文件 |
-x | 从压缩的文件中提取文件 |
-r | 添加文件到已经压缩的文件 |
-t | 显示压缩文件的内容 |
-add-file | 向包中添加文件 |
tar命令
tar -cvzf
-cvzf
:参数,表示创建一个压缩文件,并显示压缩过程,参数含义参照上面的表格test.tar.gz
: 压缩后的文件名称test.in
:被压缩的文件[root@a7d064b6d983 oldgeek]# tar -cvzf test.tar.gz test.in
test.in
[root@a7d064b6d983 oldgeek]# ls
test test.in test.tar.gz
[root@a7d064b6d983 oldgeek]#
执行完毕后会多出一个文件test.tar.gz
tar -cvzf
test
是文件夹名称[root@a7d064b6d983 oldgeek]# tar -cvzf folder-test.tar.gz test
test/
test/1.in
[root@a7d064b6d983 oldgeek]#
tar tvf
[root@a7d064b6d983 oldgeek]# tar -tvf folder-test.tar.gz
drwxr-xr-x root/root 0 2024-01-06 01:05 test/
-rw-r--r-- root/root 67 2024-01-06 01:05 test/1.in
tar -rzf
[root@a7d064b6d983 oldgeek]# tar -rzf folder-test.tar.gz test.in
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
错误解读:我们看提示出错了,是因为压缩包folder-test.tar.gz
,是先归档,再压缩的文件,就不支持压缩了。
继续尝试tar -cvf
压缩文件
tar -cvf folder-cvf.tar.gz test
: 使用参数-cvf
压缩文件tar -rf folder-cvf.tar.gz test.in
: 使用参数 -rf
添加文件tar -tf folder-cvf.tar.gz
: 使用参数 -tf
显示文件注意:虽然刚才生成的压缩包文件folder-cvf.tar.gz
, 仅仅是归档,因为没加参数z
,并未使用gzip
压缩,如果加参数z
就不能添加文件了。
[root@a7d064b6d983 oldgeek]# ls
folder-test.tar.gz test test.in test.tar.gz
[root@a7d064b6d983 oldgeek]# tar -cvf folder-cvf.tar.gz test
test/
test/1.in
[root@a7d064b6d983 oldgeek]# tar -rf folder-cvf.tar.gz test.in
[root@a7d064b6d983 oldgeek]# tar -tf folder-cvf.tar.gz
test/
test/1.in
test.in
[root@a7d064b6d983 oldgeek]#
在不解压情况我们也可以删除压缩包中的文件,参数--delte
,如下面的示例
tar --delete -f folder-cvf.tar.gz test.in
: 删除test.in
文件tar -tvf folder-cvf.tar.gz
: 确认删除后的文件中是否有test.in
文件[root@a7d064b6d983 oldgeek]# tar --delete -f folder-cvf.tar.gz test.in
[root@a7d064b6d983 oldgeek]# tar -tvf folder-cvf.tar.gz
drwxr-xr-x root/root 0 2024-01-06 01:05 test/
-rw-r--r-- root/root 67 2024-01-06 01:05 test/1.in
tar.gz
到指定目录加-C
参数,后面指定文件即可
[root@a7d064b6d983 oldgeek]# mkdir tmp
[root@a7d064b6d983 oldgeek]# tar -xvf folder-cvf.tar.gz -C tmp
test/
test/1.in
[root@a7d064b6d983 oldgeek]# ls tmp
test
[root@a7d064b6d983 oldgeek]#
tar.gz
到当前目录不加-C
参数,后面指定文件即可
[root@a7d064b6d983 oldgeek]# tar -xvf folder-cvf.tar.gz
先查看压缩包的目录结构
[root@a7d064b6d983 oldgeek]# tar -tvf folder-cvf.tar.gz
drwxr-xr-x root/root 0 2024-01-06 01:05 test/
-rw-r--r-- root/root 67 2024-01-06 01:05 test/1.in
然后直接压包中的1.in
文件
[root@a7d064b6d983 oldgeek]# tar -xvf folder-cvf.tar.gz test/1.in
test/1.in
[root@a7d064b6d983 oldgeek]#
zip
命令简介:压缩成zip
格式的包
重要参数
参数 | 说明 |
---|---|
-r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
-v | 显示指令执行过程或显示版本信息 |
-d | 从压缩文件内删除指定的文件 |
-u | 更换较新的文件到压缩文件内 |
- <压缩效率> | 压缩效率是一个介于1-9的数值 |
示例
当前文件夹
[root@5b90876298f9 oldgeek]# ls
t1.in test
[root@5b90876298f9 oldgeek]#
压缩示例1
zip test.zip test
: 压缩test目录下,因为没加-r
实际只压缩了文件夹,并不包含文件[root@5b90876298f9 oldgeek]# zip test.zip test
adding: test/ (stored 0%)
[root@5b90876298f9 oldgeek]# ls
t1.in test test.zip
[root@5b90876298f9 oldgeek]#
压缩示例2:注意,加参数-r
才会递归压缩文件夹中文件
[root@5b90876298f9 oldgeek]# zip -r test.zip test
adding: test/ (stored 0%)
adding: test/t2.out (deflated 19%)
[root@5b90876298f9 oldgeek]#
压缩示例3:想压缩包中添加文件
[root@5b90876298f9 oldgeek]# ls
t1.in t3.in test test.zip tmp
[root@5b90876298f9 oldgeek]# zip -u test.zip t3.in
adding: t3.in (stored 0%)
[root@5b90876298f9 oldgeek]#
unzip
命令简介:解压zip
格式的包
重要参数
参数 | 说明 |
---|---|
-l | 显示压缩文件内所包含的文件 |
-v | 显示指令执行过程或显示版本信息 |
-d | 指定解压目录,目录不存在会创建 |
示例
unzip test.zip -d tmp
, 加-d
指定解压目录,不加是当前目录[root@5b90876298f9 oldgeek]# mkdir tmp
[root@5b90876298f9 oldgeek]# unzip test.zip -d tmp
Archive: test.zip
creating: tmp/test/
[root@5b90876298f9 oldgeek]# ls tmp
test
[root@5b90876298f9 oldgeek]# ls tmp/test
[root@5b90876298f9 oldgeek]#
gzip
命令简介:
重要参数
参数 | 说明 |
---|---|
-c | 保留源文件 |
-r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v | 显示指令执行过程 |
-d | 解开压缩文件 |
示例1
[root@5b90876298f9 oldgeek]# gzip -rv test/*
test/t2.out: 19.4% -- replaced with test/t2.out.gz
[root@5b90876298f9 oldgeek]# ls test
t2.out.gz
[root@5b90876298f9 oldgeek]#
gunzip
命令简介:解压gz
格式文件
示例1:gunzip t2.out.gz
是解压命令
[root@5b90876298f9 oldgeek]# cd test
[root@5b90876298f9 test]# ls
t2.out.gz
[root@5b90876298f9 test]# gunzip t2.out.gz
[root@5b90876298f9 test]# ls
t2.out
[root@5b90876298f9 test]#
bzip2
命令简介:压缩率比较高的一种压缩格式,.bz2扩展名的文件就是bzip2压缩的结果,tar中加-j
参数来调用bzip2
重要参数
参数 | 说明 |
---|---|
-z | 压缩文件 |
-d | 解压文件 |
-k | 源文件不删除 |
示例1:压缩
[root@5b90876298f9 oldgeek]# bzip2 -kz test/*
[root@5b90876298f9 oldgeek]# ls
t1.in t3.in test tmp
[root@5b90876298f9 oldgeek]# cd test/
[root@5b90876298f9 test]# ls
t2.out t2.out.bz2
[root@5b90876298f9 test]#
示例2: 解压
[root@5b90876298f9 test]# bzip2 -d t2.out.bz2
[root@5b90876298f9 test]# ls
t2.out
[root@5b90876298f9 test]#
示例3:执行bzip2 -kz test/*
, 并不是压缩成一个压缩包,而是每个文件一个压缩包,这个是注意点。
[root@5b90876298f9 oldgeek]# ls test
t2.out t3.out
[root@5b90876298f9 oldgeek]# bzip2 -kz test/*
[root@5b90876298f9 oldgeek]# ls test
t2.out t2.out.bz2 t3.out t3.out.bz2
[root@5b90876298f9 oldgeek]#
bunzip2
简介:与bzip2
相反,是解压bz2
格式文件
重要参数
参数 | 说明 |
---|---|
-z | 压缩文件 |
-d | 解压文件 |
-f | 覆盖已有的文件 |
-k | 源文件不删除 |
示例1
bunzip2 -d t3.out.bz2
因为没有加参数-f
所以会提示出错[root@5b90876298f9 test]# ls
t2.out t2.out.bz2 t3.out t3.out.bz2
[root@5b90876298f9 test]# bunzip2 -d t3.out.bz2
bunzip2: Output file t3.out already exists.
[root@5b90876298f9 test]# rm -Rf t3.out
[root@5b90876298f9 test]# bunzip2 -d t3.out.bz2
[root@5b90876298f9 test]# ls
t2.out t2.out.bz2 t3.out
大家好!我是老码农。今天关于redis stack的安装就分享到这里。
关注《码农说》,期待未来能与更多的同学有深入的交流,一同学习技术,共同成长。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!