无忧得胜-网上国际课程 (5edu.win)

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式

$ R6 k) \# ]) V2 z! ?( U6 y1 v% P; j( g. P3 ], }4 n

- P  l! @2 A5 m) k. K前言
0 ~4 m# f5 u  J# i0 A7 d- q4 Q& T- ?& Y+ ~5 O
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
" H! u: s# Y$ P5 h! Rtar
- b7 m0 b6 \- y( L% b" m7 k
* a& W# T0 u  @. k& J0 w5 @tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。9 A7 }1 H: i! }
涉及参数说明:

* m0 \5 s$ p% \' |-c 建立新的压缩文件0 F$ x6 Q& E( V) T7 g
-r 添加文件到已经压缩的文件
& H( s9 A5 L, J5 ?-u 添加改变了和现有的文件到已经存在的压缩文件3 T0 @% E& F6 }. ]" o3 l. x, b
-x 从压缩的文件中提取文件1 Q4 J+ x/ f0 ~' @! O
-t 显示压缩文件的内容7 I1 I# W: T2 A: w
-z 支持gzip解压文件
& T! l; q; ?0 b-j 支持bzip2解压文件
$ s1 L) Q) F9 z+ x* B6 L6 [-v 显示操作过程
1 n, e: F  k+ g; _# t/ E/ f-k 保留源有文件不覆盖5 [: Y' r/ q3 H2 [
-C 切换到指定目录5 P4 r9 z7 H. j9 x: Z4 [9 {
-f 指定压缩文件/ A) K3 o% t, V4 G# v+ a! D

# F/ k' y* Y1 y) \--delete            删除包中文件, b, X  w$ @3 G
--strip-components  去除目录
4 ]# O8 b) b! T$ A8 `( y6 a; D- [--add-file          向包中添加文件1 g; r$ w% x$ k
压缩( T3 E) G0 l7 G

2 t2 g9 o1 o( U# U, [( o归档tar包,不压缩# B  ?6 R1 L2 s( ]6 O% m

( {* h8 l' R' Utar -cvf test.tar test1.log test2.log #归档多个文件
$ ~" N. l+ }$ F- Q) k2 w. g$ Ztar -cvf test.tar test/*  #归档test目录下所有文件
0 C) Q! g1 V. W+ c9 Etar -cvf test.tar *.log  #归档所有以.log结尾的文件 4 j  y: x; U: t% ^$ O; {0 k' E% P
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。) k. t% C& p& j4 y% \! S
归档并压缩为tar.gz或tar.bz2
. O# k% Q1 _$ B  R& I% x7 t6 |4 _3 t5 e8 z/ |( _
这种方式打包对文件进行了压缩:; @: H9 b! `  g2 E% b' ?
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
6 Z9 `5 R$ a7 N* m9 B5 @tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩% o; r! x) t. S* l# T$ a" a
查看压缩包中的文件
* e4 b5 `4 R+ J. s8 \" ], E) T+ j: i4 H1 W0 u) ?. \
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
& l* I0 i. _2 o  f6 ltar -tvf test.tar #可查看test包中有哪些文件" \, r6 i3 Z4 U2 Y; ]
打包后删除源文件
! x8 B) L! n9 a# `; t) e
4 C" V, K& X9 Y1 M/ N/ j; ?有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
" L" T+ G- N! O1 I' }* Otar -zcvf test.tar.gz test.log --remove-files
( l( Q, D( E; c/ H8 U  d2 `. [' t6 n6 f打包除指定目录或文件以外的文件; U# G3 q+ `/ u9 i

9 N" C" }% |& K/ Z& ], T3 P# Z对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:: f8 ~' b$ }; ^! d
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件' l! C7 l) ~4 @6 h. o: ~) o
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。  ]+ ?3 N7 P7 }
向压缩包中更新文件; T5 [" R; H1 w. f6 \, {

# x8 ~  C. U* Y( t  _0 P例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:. @- K: g" t6 P; I8 V: X7 b
tar -tf test.tar --add-file=test #只针对tar包0 o+ i! F; Z0 R8 G- E8 K
向tar包中增加文件
2 H+ a' Y' n1 ]2 V% r+ b  o# a5 Z
* [: I  a. W6 i+ b/ }3 v1 C向tar包中增加文件可使用-r参数:
4 B1 H) H2 A4 s- E4 rtar -rf test.tar testfile #在test.tar包中增加文件,只针对tar3 ?! b6 M9 v7 Z' i* O2 s
删除压缩包中的文件: |* Z: W; G7 G1 i
! L+ x7 c+ U* K9 S
在不解压的情况下,可使用--delete选项删除包中的文件:
% E* a+ S$ E; t- J' j4 C7 `tar --delete -f test.tar  test1 #从test.tar中删除test1文件: r6 |: Y0 r# k% D
解压
4 @; e: f  m0 w' v3 F2 v1 u" Y' [) L- a4 s7 B
解压tar.gz和tar包到当前目录# {( X( m0 Z0 W. e. a" c5 T

  B. z$ \/ ~/ z& |/ @tar -xvf test.tar.gz
0 d, A' ^2 Y8 l/ B+ p# ^* mtar -xvf test.tar 6 a$ i: Q. ^9 [" i# d6 t, \
解压到指定目录0 B5 ~/ r) H; C; k

3 \) {# V+ f& c/ L# rtar -xvf test.tar.gz -C dir
* Z" [! v8 @" Rtar -xvf test.tar -C dir3 i& d' d/ [, B( R7 b# B) p1 k  d) u( |
解压包中指定的文件
: V; `  {( Y- P3 n8 u5 ^* V% P0 `' ~  F; U
例如test.tar.gz包中文件情况如下:( X# @- e, o+ S& A& j  t
1.txt
( {# o) o) u3 H7 ]; slog/
3 y/ S2 ^% V% J4 ]9 dlog/1.log
) }- B5 P" J2 r) Klog/2.log- I. _; t1 }  t) k
log/2.log
" U) F0 g  w$ d8 a; c4 ilog/4.log
6 {' s) |3 s/ e' Glog/5.log
- L, [8 M( G7 }% L6 N如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:" l- n/ v6 B* l8 \
tar -xvf test.tar.gz log/1.log
% O/ u7 `1 T- \- X$ E$ |tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
6 `! I, x% }: p6 F+ m" j1 N) t5 \: A解压时去掉目录结构: ?8 v3 c" v5 i; m1 C; \- I8 ~

" ?" g) c( \& ~3 p压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):8 x& _8 s+ R$ `% o
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录  |) c, d/ l' ]
解压时不覆盖原文件
% M- Z* |8 P! M& D. [. z! _( f' J& x) D! I
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):% a' ^; k, M8 W! [2 Q9 p5 x7 z
tar -xvkf test.tar.gz
1 r% }3 P( }3 N3 D特别提醒! K3 v( o4 x+ D2 n; l2 h/ X2 g
& l3 g% n+ X. i% D& g5 B
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
& o; ?6 B" r$ H. l3 w4 t+ lzip/unzip8 Q7 k6 ]6 E: M+ ^% A  e( y$ q
3 M" V! P5 Y0 y" V- o
zip和unzip命令主要用于处理zip包。8 ?& h8 {. @* u  W/ K5 m
压缩
; E0 E, i7 C+ c+ N1 G: o
" f# `) M5 j5 p涉及参数说明:
5 @; |, ]9 H* c7 l) n2 p-d 从压缩文件内删除指定的文件。: s$ c- Z, R& }# m8 L
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。! \7 n- C9 k+ ?% I
-j 只保存文件名称及其内容,而不存放任何目录名称。
, d3 p; l9 Q; b& g-r 递归处理,将指定目录下的所有文件和子目录一并处理。; w5 Z+ G$ Y4 H: G' f( I3 e
-u 更换较新的文件到压缩文件内。# R$ c4 N9 [+ W6 s
-v 显示指令执行过程或显示版本信息。4 V' ~1 n# T$ q6 R
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
8 E! I2 e. E2 f- <压缩效率> 压缩效率是一个介于1-9的数值。
' T4 m  o0 t+ ]  O/ ~% M压缩文件' [8 _2 D2 L7 F! r
8 R8 o1 `. ~1 g2 x0 j0 r4 I7 ~
zip -r test.zip test/ #打包test目录下的文件# H1 `0 z/ {. _# d  O* |) K
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
0 S: G6 _4 l# A3 b; z, F指定压缩率打包文件- z0 x  _% y' \9 J  z

- y/ z. J- I/ v: W4 Zzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
1 Y4 ?# u8 V& W3 d- A+ }打包符号链接文件
' N+ J) M" B3 `# o7 K# b9 U
3 ^5 [6 u, x/ E+ c前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:. }! H/ O, f6 P2 B; g) b  I
zip  -ry test.zip test
2 o  s1 k+ h6 Z$ a5 R7 c, ?+ b向压缩包中增加或更新文件
0 I# A9 t0 P! j9 m1 m! a0 g" _8 j8 I% h0 T9 [* K9 b2 R8 I& t6 l
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:- ?6 {  w' M. S) n  g# p
zip -u test.zip test2 #向test.zip 包中增加test2文件
+ Y! A& m. j4 M& F% B压缩时加密8 ?, O& r% B$ j' X- u2 ?  \% |
% a& {: v3 \, c3 G8 k* c
压缩时如果需要对压缩包进行加密,可使用-P参数:
- v6 d, z7 H9 N, Dzip -r test.zip test1 test -P 66666 #使用密码66666加密
0 ?3 L& A6 t7 ?删除压缩包的特定文件9 ?, d" L6 [7 T4 k( i  u

6 b+ Y: z& r- K" f4 Izip -d test.zip test  #删除test.zip包中的test文件$ h- I; I) P* f- \
解压
: f2 C( W+ v( |' i9 `# `: F" P1 C6 Q# u3 D3 d9 l
涉及参数说明:
0 h( C! `9 d8 F4 g' `-l 显示压缩文件内所包含的文件
+ f$ A% K$ ~2 n( y3 E9 R" p-j 只保存文件名称及其内容,而不存放任何目录名称。& b3 A; R( A% c  ~6 V3 Q5 U+ r" E/ K
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
: q& ^8 ], H9 l-v 显示指令执行过程或显示版本信息。
3 q1 D4 f) N8 D& ?' h-d 指定解压目录,目录不存在会创建
' o4 v4 i: p% y& {9 V- ?+ f  M查看压缩包中的文件信息/ [% e0 d3 `: Y/ Y; _) q
$ O; y+ Y- I( o4 B
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息& E" d" u2 y7 ~3 K  Q5 z9 K, |
unzip -v test.zip #查看更多信息,例如crc校验信息等
! y: \0 P2 E3 z( n6 u  h" a解压压缩包
9 x" Z$ K  a: _8 Y3 w! x; q  A/ k) {" B
unzip -o test.zip -d dir #讲test.zip解压到dir目录2 D& `* Q5 Y8 Z+ j( t
解压包中指定的文件
* C9 \$ V& f; ?  |3 @& B! M
* b! w. _9 u3 }3 O2 [如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:+ n2 R- K, Z. s
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录7 P* d+ S( C  c: F" u2 U" q
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
7 k' O3 C* D  P! n2 K+ ]解压时去掉目录结构  P$ t8 T9 s5 s/ }' A) V
- }/ u; D/ e5 i
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:" h9 w7 K' R$ s
zip -oj test.zip -d ./temp  1 `# _& n$ \: U* a, F0 \  u/ E
解压jar包! \( q3 h2 T; a; r* M/ Q. g- ~
) `1 i) D: [. g; s
jar包是java归档包,但同样可用unzip解压查看里面的文件:
& N. [: C8 P1 g- A4 l+ P2 punzip -o java.jar -d dir% c1 l# p% T7 y& S% ?( I5 G7 T. w
gzip3 t0 o- B3 B: a& K  g5 E% D8 V

3 m# c9 @$ F. ]$ @9 V涉及参数说明:
6 X' I, c8 v- W! ?# y6 J7 ~6 I# x; S-k 保留源文件
/ o2 l# t* }9 }* }4 y-d 解开压缩文件8 i6 q( x9 O8 R, }0 w& c+ s- h+ r8 Z
-r 递归处理,将指定目录下的所有文件及子目录一并处理
* T2 @5 j- Q* h, q% c-v 显示指令执行过程
1 P7 h3 _+ L: M- m8 |& ctar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:; C! |( \* [0 a/ ~" C0 Q7 v
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
- c6 U5 E8 l* L$ A6 hgzip -rkv ./* 递归压缩
7 k2 G* o" o+ R3 `5 }解压也很简单:! \. [$ T3 s3 F) X3 D; u
gzip -dv test.gz
$ s; `1 b# c7 c: _2 Abzip2: V8 O$ Z1 n4 @0 G
' _; }; C$ s4 A. E
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
" a4 y9 u5 ?. e) J# O7 A0 G$ Cbzip2 -zk test  #压缩test文件
* Y# n- b" s! H% W0 n7 }( n. \: vbzip2 -dk test.bz2  #解压5 q. ]: c0 S8 t* ^
rar/unrar# f" j$ m5 ^! h( F
- o4 Z* E& w' W" Q
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:3 y! U# b* _5 N8 {' C$ l
rar a test.tar test  #将test文件压缩为test.tar, K, p* B0 K/ B, y- Z6 q- [& M
rar e test.rar       #解压test.tar& q- w* T% S2 k' N
unrar x test.rar     #解压test.tar
- f2 Z9 [( K4 V" K. s压缩率比较
) T3 g' c, ^/ X/ A5 J  K
: X8 S1 m+ W8 |7 H# F2 S压缩率一般来说:
) C3 o- F) j& D( z7 ~! {tar.bz2>tar.gz>zip>tar- A8 c9 g1 ?8 ~# g
压缩率越高,压缩以及解压的时间也就越长。4 o: I0 g7 f6 m& Z0 B$ t8 _- K. C
总结% z' d- z- r1 @* r1 N
" J  _/ L& Z& {
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
1 ^: t% G7 z0 y& ]2 d9 N有任何补充或建议,欢迎留言^_^。
* E: o( N  H  d, f* Y! `* p6 m; u& `
0 e; N6 x' t" _1 r4 T

) m1 J, W, W+ M- u: L1 U7 f. Y* v7 I

( a5 C  w5 @, O% m

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

浏览记录|手机版试卷|使用帮助|手机版|无忧得胜-网上国际课程 (https://5edu.win)

GMT+8, 2026-6-23 08:04 , Processed in 0.173279 second(s), 32 queries , Redis On.

搜索
快速回复 返回顶部 返回列表