Linux tar
Linux 下面的压缩命令主要有下面几个:
- zip,对应压缩文件格式:.zip
- gzip,对应压缩文件格式:.gz
- bzip2,对应压缩文件格式:.bz2
- xz,对应压缩文件格式:.xz
打包命令:
- tar,对应压缩文件格式:.tar
- 如果和 gzip 一块使用:.tar.gz 或者 .tgz
- 如果和 bzip2 一块使用:.tar.bz2
- 如果和 xz 一块使用:.tar.xz
所谓打包,就是将一个文件、或者一堆文件打包成一个单一文件的过程。
这里还需要说明一个术语:压缩率。其计算公式是:(压缩后文件体积) / (压缩前文件体积)。
还有一点是:gzip bzip2 xz 这几个命令都只能对但一个文件做压缩,不能压缩一个目录,压缩目录需要通过 tar 配合这几个压缩命令来处理,或者使用 zip 命令
zip 命令能提供的功能和 tar 非常类似,更详细的使用方法使用 tldr zip & tldr unzip 来查看。
tar命令
命令简介
tar 命令用于打包、压缩与解压压缩包文件。
tar 命令常常用于打包、压缩某些文件或目录,也可以添加新文件到归档文件中。Tar 代表的是磁带存档,是一种归档的文件格式,早期用于将文件归档到磁带备份存储。现可以用于收集、分发、归档文件,还可以保留文件原有的属性,如:用户和组权限,访问和修改日期以及目录结构。
tar 命令的参数可以说是 Linux 上面最复杂且最不容易记忆的几个之一了。
先解释下 tar 的作用:tar 是打包命令,也就是将一系列文件,或者某个文件夹,打包成单一文件。如果配合压缩命令 gzip bzip2 xz (不包含 zip ),那么其可以完成 打包+压缩 的功能。
tar 执行完后,原有文件或者目录将保留。
语法格式
tar [OPTIONS] [FILE]
选项参数说明
-A #新增文件到已经存在的归档文件
-B #设置区块大小
-c #建立新的归档文件
-C #将压缩的文件解压到指定的目录下
-d #记录文件的差异
-x #解压或提取归档文件内容
-t #列出备份文件的内容
-z #通过gzip命令来压缩/解压缩文件,文件名一般为 xx.tar.gz
-Z #通过compress命令处理备份文件
-f #指定备份文件
-v #显示命令执行过程
-r #添加新文件到已经压缩的文件中
-u #添加改变了和现有的文件到已经存在的压缩文件
-j #通过bzip2命令来压缩/解压缩文件,文件名一般为xx.tar.bz2
-v #显示操作过程;
-k #保留原有文件不覆盖
-m #保留文件不被覆盖
-w #确认压缩文件的正确性
-p #保留原来的文件权限与属性
-P #使用文件名的绝对路径,不删除文件名称前的“/”号
-N #只将较指定日期更新的文件保存到备份文件中
--exclude=[范本样式] #排除符合范本样式的文件
--remove-files #归档/压缩之后删除源文件
压缩与解压
拓展名称 | 分类 |
---|---|
.zip/.rar | Windows系统压缩包 |
.tar | 在Linux下的打包文件 |
.gz | 在Linux下的压缩文件 |
.tar.gz | 在Linux下的打包压缩文件 |
压缩文件
tar | 参数 压缩包名 一个或多个文件{对一个或多个文件进行打包并压缩} |
---|---|
-c | 创建一个打包的文件 |
-v | 显示打包的详细过程 |
-z | 压缩文件 |
-f<压缩文件名称> | 只当压缩包的文件名称,f后面跟着压缩的文件名,一般放在参数最后面 |
$ touch a.c
$ tar -czvf test.tar.gz a.c //压缩 a.c文件为test.tar.gz
a.c
解压文件
tar 参数 压缩文件名称 | 解压文件到当前目录 |
---|---|
-x | 解压指定的文件 |
-v | 显示解压的详细过程 |
-f<压缩文件> | 指定要解压的文件 |
-C | 解压到指定的目录下 |
$ tar -xzvf test.tar.gz
a.c
应用举例
tar -cf mingongge.tar *.jpg
#将所有.jpg的文件打包成一个名为mingongge.tar的文件
tar -rf mingongge.tar *.gif
#将所有.gif的文件增加到mingongge.tar的包里
tar -uf mingonggel.tar mingongge.gif
#更新mingongge.tar文件中的mingongge.gif文件
tar -tf mingongge.tar
#列出 all.tar 包中所有文件
tar -cfv mingongge.tar foo bar
#将文件foo和bar打包成mingongge.tar文件包,也可以理解成:从这两个文件中去创建这个mingongge.tar文件
tar -tvf mingongge.tar
#详细列出mingongge.tar中的所有文件
tar -xf mingongge.tar
#从mingongge.tar提取所有文件
列出压缩文件内容
$ tar -tzvf test.tar.gz
-rw-r--r-- root/root 0 2010-05-24 16:51:59 a.c
将文件全部打包成tar包
tar -cvf mingongg.tar mingongg.log #仅打包,不压缩!
tar -zcvf mingongg.tar.gz mingongg.log #打包后,以gzip方式压缩
tar -jcvf mingongg.tar.bz2 mingongg.log #打包后,以bzip2方式压缩
解压目录
tar -xvf portal-web-v2.0.0.tar --strip-components 1 -C 指定目录
#排除目录--strip-components
将 tar包解压缩
tar -zxvf /opt/soft/test/log.tar.gz
打包或压缩文件时,排队指定的文件类型
tar -zcf mingongge.tar.gz /etc/ /var/ --exclude=*.txt
注意:如果在使用过程中遇到这类错误提示
tar: Removing leading `/` from member names
原因是tar默认为相对路径,使用绝对路径的话就回报这个错,可以使用-P
(大写)参数解决这个问题。
只打包文件不压缩
打包单个或多个文件:
tar -cv -f target.tar a.txt b.txt c.txt d.txt
打包单个目录或者多个目录:
tar -cv -f target.tar dir1 dir2 dir3
同时打包文件和目录:
tar -cv -f target.tar dir1 dir2 a.txt b.txt c.txt
打包同时用 gzip 压缩
tar -cvz -f target.tar.gz dir1 dir2 a.txt
打包同时使用 bzip2 压缩
tar -cvj -f target.tar.bz dir1 dir2 a.txt
打包同时使用 xz 压缩
tar -cvJ -f target.tar.xz dir1 dir2 a.txt
查看
tar -tvz -f target.tar.gz
或者
tar -tvJ -f target.tar.xz
解包和解压缩
tar -xvz -f target.tar.gz
上述命令将会在当前目录下解压缩,也就是 target.tar.gz 里面的文件会解压缩到当前目录下。
如果要解压缩到指定目录怎么做呢?
使用 -C
参数:
tar -xvz -f target.tar.gz -C ~/test
上述命令,会将 target.tar.gz 里面的所有文件解压到 ~/test 目录下。
总结下:tar 命令可以将任意的文件和目录打包成一个单一文件,解压缩时,默认是将 tar ball 里面的所有文件倾倒在当前目录,如果需要倾倒到其它目录,使用 -C
参数。
gzip命令
命令简介
gzip 命令用来压缩文件,gzip,gunzip命令用于压缩或扩展 GNU GZIP 格式的文件。
如果压缩文件名对其文件系统而言太长,则gzip会将其截断。默认情况下,gzip 会将原始文件名和时间戳等信息保留在新产生的压缩文件中。
gzip 会就地压缩,也就是源文件会被压缩文件替代。
语法格式
gzip [ OPTIONS ] [ name ]
gunzip [ OPTIONS ] [ name ]
选项说明
-a #使用ASCII文字模式
-c #将输出写入到标准输出,保持原始文件不变。
-d #解压缩文件
-f #强制压缩文件
-h #显示在线帮助信息
-l #列出压缩文件的相关信息
-L #显示版本与版权信息
-n #压缩文件时,不保留原来的文件名称及时间戳等属性信息
-N #压缩文件时,保留原来的文件名称及时间戳属性信息
-q #不显示警告信息
-r #递归处理,将指定目录下的所有文件及子目录一并处理
-t #测试压缩文件是否正确无误
-v #显示命令执行过程信息
-V #显示版本信息
-<压缩效率> #压缩效率是一个介于1~9的数值,默认值为“6”,指定的值越高,压缩率就越高
应用举例
把当前目录所有的文件压缩成.gz包
[root@centos7 testdir]# gzip *
[root@centos7 testdir]# ll
total 24
-rw-r--r-- 1 root root 59 Jan 16 12:15 cest.txt.gz
-rw-r--r-- 1 root root 57 Jan 16 12:12 cuttest.txt.gz
-rw-r--r-- 1 root root 81 Jan 16 09:55 mingongge1.txt.gz
-rw-r--r-- 1 root root 51 Jan 16 03:36 mingongge2.txt.gz
-rw-r--r-- 1 root root 87 Jan 16 09:59 mingongge.txt.md5.gz
-rw-r--r-- 1 root root 65 Jan 16 10:19 sort.cut.txt.gz
把当前目录的每个压缩的文件解压,并列出详细的信息
[root@centos7 testdir]# gzip -dv *
cest.txt.gz: 77.8% -- replaced with cest.txt
cuttest.txt.gz: 73.5% -- replaced with cuttest.txt
mingongge1.txt.gz: 61.3% -- replaced with mingongge1.txt
mingongge2.txt.gz: 25.0% -- replaced with mingongge2.txt
mingongge.txt.md5.gz: -4.1% -- replaced with mingongge.txt.md5
sort.cut.txt.gz: 19.0% -- replaced with sort.cut.txt
[root@centos7 testdir]# ll
total 24
-rw-r--r-- 1 root root 144 Jan 16 12:15 cest.txt
-rw-r--r-- 1 root root 102 Jan 16 12:12 cuttest.txt
-rw-r--r-- 1 root root 124 Jan 16 09:55 mingongge1.txt
-rw-r--r-- 1 root root 24 Jan 16 03:36 mingongge2.txt
-rw-r--r-- 1 root root 49 Jan 16 09:59 mingongge.txt.md5
-rw-r--r-- 1 root root 42 Jan 16 10:19 sort.cut.txt
详细显当前目录每个压缩的文件的信息,但不将文件解压出来
[root@centos7 testdir]# gzip -l *
compressed uncompressed ratio uncompressed_name
59 144 77.8% cest.txt
57 102 73.5% cuttest.txt
81 124 61.3% mingongge1.txt
51 24 25.0% mingongge2.txt
87 49 -4.1% mingongge.txt.md5
65 42 19.0% sort.cut.txt
400 485 23.9% (totals)
压缩
gzip <file_name>
执行完上述命令,会在当前目录下生成 file_name.gz 文件。
压缩命令有个比较有用的参数:
-v
: 可以显示压缩后的压缩率gzip -v <file_name>
解压缩
gzip -d <file_name>.gz
或者
gunzip <file_name>.gz
zip命令
命令简介
zip 命令可以用来压缩、打包文件。
zip 命令和 gzip bzip2 xz 不一样,它压缩后不会覆盖原有的文件。#Debian/Ubuntu安装 apt-get install zip #CentOS安装 [root@centos7 testdir]# zip -bash: zip: command not found [root@centos7 testdir]# yum install zip -y
zip 命令也可以用来解压缩文件,zip也是一个常用的压缩、解压应用程序,文件经它压缩后会产生一个新以.zip为扩展名的压缩包文件。
语法格式
zip [ OPTIONS ] [ NAME ..]
选项说明
-A #调整可执行的自动解压缩文件 -b<工作目录> #指定压缩文件的存放目录 -c #给每个被压缩的文件加上注释信息 -d #从压缩文件内删除指定的文件,也可以使用--delete参数 -D #压缩文件内不建立目录名称 -f #更新既有文件,将其它文件一并加入到压缩文件中 -F #修复已损坏的压缩文件 -g #将指定文件压缩至已存在的压缩文件中,不建立新文件 -h #打印帮助信息 -i<范本样式> #只压缩匹配指定条件的文件 -m #将指定文件压缩打包后直接删除原始文件 -o #将压缩文件的属性信息更改成与压缩文件中的最新文件的属性一致 -q #安静模式 -r #递归处理 -t<日期时间> #把压缩文件的日期设成指定的日期 -T #检查备份文件内的每个文件是否正确无误 -u #更新较新的文件到压缩文件内 -v #打印命令执行过程信息或版本信息 -x<范本样式> #压缩时排除符合条件的文件 -z #给压缩文件加上注释信息 -<压缩效率> #指定压缩效率(1~9数字)
应用举例
在当前目录下创建压缩文件(自动创建以.zip的文件)
[root@centos7 testdir]# zip mingongge * adding: cest.txt.gz (stored 0%) adding: cuttest.txt.gz (stored 0%) adding: dir/ (stored 0%) adding: file (stored 0%) adding: mingongge1.txt.gz (stored 0%) adding: mingongge2.txt.gz (stored 0%) adding: mingongge.txt.md5.gz (stored 0%) adding: sort.cut.txt.gz (stored 0%)
分割一个大文件
[root@centos7 ~]# ls -lh total 22M -rw-------. 1 root root 1.3K Aug 20 10:39 anaconda-ks.cfg -rw-r--r-- 1 root root 140 Jan 16 11:36 dos_test.txt drwxr-xr-x 3 root root 39 Aug 30 03:48 goinception -rw-r--r-- 1 root root 13M Aug 30 03:42 goInception-linux-amd64-v1.2.3.tar.gz drwxr-sr-x 11 root 40 4.0K Dec 24 22:35 httpd-2.4.46 -rw-r--r-- 1 root root 9.0M Aug 5 07:32 httpd-2.4.46.tar.gz -rw-r--r-- 1 root root 0 Jan 16 11:32 mingongge.file drwxr-xr-x 3 root root 192 Jan 16 16:19 testdir -rw-r--r-- 1 root root 140 Jan 16 11:32 test.txt [root@centos7 ~]# zip -s 4M -r mingongge.zip httpd-2.4.46.tar.gz adding: httpd-2.4.46.tar.gz (deflated 0%) [root@centos7 ~]# ls -lh total 31M -rw-------. 1 root root 1.3K Aug 20 10:39 anaconda-ks.cfg -rw-r--r-- 1 root root 140 Jan 16 11:36 dos_test.txt drwxr-xr-x 3 root root 39 Aug 30 03:48 goinception -rw-r--r-- 1 root root 13M Aug 30 03:42 goInception-linux-amd64-v1.2.3.tar.gz drwxr-sr-x 11 root 40 4.0K Dec 24 22:35 httpd-2.4.46 -rw-r--r-- 1 root root 9.0M Aug 5 07:32 httpd-2.4.46.tar.gz -rw-r--r-- 1 root root 0 Jan 16 11:32 mingongge.file -rw-r--r-- 1 root root 4.0M Jan 16 16:24 mingongge.z01 -rw-r--r-- 1 root root 4.0M Jan 16 16:24 mingongge.z02 -rw-r--r-- 1 root root 943K Jan 16 16:24 mingongge.zip drwxr-xr-x 3 root root 192 Jan 16 16:19 testdir #从结果可以看出会拆分成三个文件即:4M大小的mingongge.z01、4M大小的mingongge.z02和一个943k的mingongge.zip
压缩单个文件
zip <compresed>.zip <file_name>
或者加入
-v
参数,可以查看压缩率:zip -v <compresed>.zip <file_name>
执行上述命令,将会在当前目录下新生成
.zip 文件,原有的 将继续保留。 压缩多个文件
zip <compresed>.zip a.txt b.txt c.txt
会将 a.txt, b.txt, c.txt 同时压缩到 compresed.zip 文件中。
压缩目录
zip -r dir.zip <dir_name>
解压缩
unzip <compresed>.zip
如果这个 .zip 文件是从多个单一文件通过 zip 命令压缩来的,那么执行 unzip 将会倾倒里面所有的文件到当前文件夹;
- 如果这个 .zip 文件是从某个目录通过 zip -r 压缩来的,那么执行 unzip 将会在当前目录下生成一个 compresed 名字的目录,目录里面的所有文件不会被倾倒在当前目录。
unzip命令
命令简介
unzip 命令用于解压由zip命令压缩的压缩包文件。#Debian/Ubuntu安装 apt-get install unzip #CentOS安装 [root@centos7 ~]# unzip -bash: unzip: command not found [root@centos7 ~]# yum install unzip -y
语法格式
unzip [ OPTIONS ] file[.zip] [file(s) ...]
选项说明
-c #将解压缩的结果输出,并对字符做适当的转换 -f #更新现有的文件 -l #列出压缩文件内所包含的文件 -p #将解压缩的结果显示到屏幕上,但不执行任何的转换 -t #检查压缩文件是否正确; -u #除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中 -v #显示详细的信息 -z #仅显示压缩文件的备注信息 -a #对文本文件进行必要的字符转换 -b #不对文本文件进行字符转换 -C #压缩文件名称区分大小写 -j #不处理压缩文件中原有的目录路径 -L #将压缩文件中的全部文件名改为小写 -M #将输出结果再交给more程序处理 -n #解压缩时不覆盖原有的文件 -o #unzip执行后覆盖原有的文件,不提示 -P<密码> #使用zip的密码选项 -q #不显示任何命令执行过程信息 -s #将文件名中的空白字符转换为底线字符 -d<目录> #将解压缩后存至指定的目录下 -x<文件> #指定不要处理.zip压缩文件中的哪些文件 -Z #unzip-Z相当于执行zipinfo命令
应用举例
解压一个文件
查看一个压缩文件但不解压 ```bash [root@centos7 testdir]# unzip -v mingongge.zip Archive: mingongge.zip Length Method Size Cmpr Date Time CRC-32 Name[root@centos7 testdir]# unzip mingongge.zip
59 Stored 59 0% 01-16-2021 12:15 b32621da cest.txt.gz
57 Stored 57 0% 01-16-2021 12:12 cbda1ce8 cuttest.txt.gz
0 Stored 0 0% 01-16-2021 16:18 00000000 dir/
0 Stored 0 0% 01-16-2021 16:18 00000000 file
81 Stored 81 0% 01-16-2021 09:55 da9f2476 mingongge1.txt.gz
51 Stored 51 0% 01-16-2021 03:36 8fdf382e mingongge2.txt.gz
87 Stored 87 0% 01-16-2021 09:59 982ab7bb mingongge.txt.md5.gz
65 Stored 65 0% 01-16-2021 10:19 17350869 sort.cut.txt.gz
400 400 0% 8 files
指定解压后的文件存放目录
```bash
[root@centos7 testdir]# unzip -n mingongge.zip -d /tmp/
Archive: mingongge.zip
extracting: /tmp/cest.txt.gz
extracting: /tmp/cuttest.txt.gz
creating: /tmp/dir/
extracting: /tmp/file
extracting: /tmp/mingongge1.txt.gz
extracting: /tmp/mingongge2.txt.gz
extracting: /tmp/mingongge.txt.md5.gz
extracting: /tmp/sort.cut.txt.gz
[root@centos7 testdir]# ll /tmp/
total 24
-rw-r--r-- 1 root root 59 Jan 16 12:15 cest.txt.gz
-rw-r--r-- 1 root root 57 Jan 16 12:12 cuttest.txt.gz
drwxr-xr-x 2 root root 6 Jan 16 16:18 dir
-rw-r--r-- 1 root root 0 Jan 16 16:18 file
-rw-r--r-- 1 root root 81 Jan 16 09:55 mingongge1.txt.gz
-rw-r--r-- 1 root root 51 Jan 16 03:36 mingongge2.txt.gz
-rw-r--r-- 1 root root 87 Jan 16 09:59 mingongge.txt.md5.gz
-rw-r--r-- 1 root root 65 Jan 16 10:19 sort.cut.txt.gz
bzip2 命令
默认情况下,bzip2 命令也是就地压缩,压缩后源文件将会被替代。
使用方法和 gzip 基本一样,但是能提供更好的压缩率,当然,付出的代价就是压缩时间更长。
压缩
bzip2 <file_name>
或者引入 -v
参数查看压缩率:
bzip2 -v <file_name>
解压缩
bzip2 -d <file_name>.bz2
或者
bunzip2 <file_name>.bz2
xz
命令
默认情况下,xz
命令也是就地压缩,原始文件将被覆盖。
使用方法和前面提到的 gzip bzip2 类似,参数也几乎是一样的。
压缩
xz <file_name>
或者加上 -v
参数查看压缩率:
xz -v <file_name>
压缩完后,会在当前目录下生成 <file_name>.xz
文件。
这时可以使用 -l
参数,来查看压缩前后的文件对比信息:
xz -l <file_name>.xz
举个例子如下:
Fcant@mbp:~/Downloads$ xz -l ppt模板.pptx.xz
Strms Blocks Compressed Uncompressed Ratio Check Filename
1 1 124.7 KiB 135.5 KiB 0.920 CRC64 ppt模板.pptx.xz
Fcant@mbp:~/Downloads$
解压缩
xz -d <file_name>.xz
注意,在 xz
命令这里,没有 xunz
这种命令。