51fly国际课程 (51fly.win)

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

* y* a& E' U  {0 t
% f5 D: A  V- l/ Z; N

; W" m& @0 J7 m# j前言0 ]. [, x; e& d2 j9 e- q: `: S

6 J/ V5 U# ?( p# ?3 x1 NLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。5 I, `* d9 d# L0 \! W0 u
tar
4 L/ ]4 M3 m9 ?8 O
  W7 I5 l, D% Q( ^tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
$ r1 |( y" i" }, h涉及参数说明:
' [5 _; ]) p2 \4 N
-c 建立新的压缩文件
* z8 @+ w3 [0 y' r1 L8 q# N) B-r 添加文件到已经压缩的文件
9 Q1 P" R. r* _, c-u 添加改变了和现有的文件到已经存在的压缩文件' ^& [. e: r. j( Q
-x 从压缩的文件中提取文件
" L2 }2 u- R! t* S$ u, Y-t 显示压缩文件的内容
- X2 U$ J0 \8 f8 Q/ _2 \-z 支持gzip解压文件. w: q4 k; I' a: X$ @6 S
-j 支持bzip2解压文件% n. W. j1 P( r" Z/ o8 O
-v 显示操作过程
/ f4 _/ t* t5 v5 N( W3 L% o* o-k 保留源有文件不覆盖/ n+ x' D0 f; z
-C 切换到指定目录
) C% b$ A$ Y# e6 n' p-f 指定压缩文件2 ?- h3 f2 L6 @: m

5 g0 d8 h  K1 y" `# P$ k--delete            删除包中文件. m8 v% {! {& G
--strip-components  去除目录
* ~& s- j; ]/ x9 w, a% B--add-file          向包中添加文件
1 r% Z7 R/ S$ I; n; m压缩
5 T' P& m9 `/ e0 C; J' q7 C% Q6 S! I- g1 }1 f# `
归档tar包,不压缩( L4 ], [  P+ I" d2 B7 ^

: [/ `) p* z* M0 r( R8 Qtar -cvf test.tar test1.log test2.log #归档多个文件5 J3 H! I4 }; x! C' o5 J1 u( L
tar -cvf test.tar test/*  #归档test目录下所有文件
$ t, c; k0 q% _9 h* ~6 Ctar -cvf test.tar *.log  #归档所有以.log结尾的文件 & Q2 c6 I1 v! m. M/ H+ R
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
7 y! U' g" Z5 ^8 e归档并压缩为tar.gz或tar.bz20 S& s. c+ m3 `- u, @8 F

8 d0 y% _5 i" f# m: k7 V这种方式打包对文件进行了压缩:" d* S; G2 Z5 `  _2 j
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩6 T5 P2 n8 p, X3 T
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
% w2 S8 E# t' [9 _$ h6 ^7 K+ A查看压缩包中的文件" W$ V/ F  ^5 e  Q
# P# @$ m! D! L1 s, R! ^& v
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
+ p6 Q# R$ K% W; ?% _! h/ N$ r  Rtar -tvf test.tar #可查看test包中有哪些文件/ i. T5 A% u" U6 e  t
打包后删除源文件
! i2 \% a& Z; J8 u2 U# @, {& |
: @' T  N- |! d8 f: `有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:4 i' C& [6 c9 @3 Z2 j7 @/ l
tar -zcvf test.tar.gz test.log --remove-files + d5 G) [) @1 f% w, n2 K
打包除指定目录或文件以外的文件
, q: S# W$ T; H2 q/ f
$ P- n0 P9 I! v! h9 U对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
& e! A/ _) n' Y# _. w- W" `  Rtar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
% R' g) I1 y$ U- v. E: N9 G这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
7 [' s  x, t  h) q- d. i向压缩包中更新文件. o7 {; u/ J  H

+ W0 D, C* R. Z; d5 Q例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
! A5 Y6 d4 C4 q0 }) f$ l  xtar -tf test.tar --add-file=test #只针对tar包/ j2 M/ x: O4 u8 ^. n) \2 h7 I, z
向tar包中增加文件/ R0 W2 j/ u& Q( u: z

) R/ r/ z1 Y# ^  W7 {% [! W向tar包中增加文件可使用-r参数:+ E0 T5 b  K8 g
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
5 |$ A) }- k) k, y8 V: [5 i删除压缩包中的文件) Y+ D# {" V  W

2 }. w3 g; r* h( B( D5 O在不解压的情况下,可使用--delete选项删除包中的文件:  h  N- o% r2 E$ R2 {; k- f
tar --delete -f test.tar  test1 #从test.tar中删除test1文件2 B% `4 K3 U1 I7 V5 }
解压$ ?* `/ M1 F" z
3 t1 B  q) X. N: M; S
解压tar.gz和tar包到当前目录
2 r! p5 W  h  r" |* }! P
" N9 ^; Y6 e9 star -xvf test.tar.gz
3 z5 m4 d3 U5 m* d, |4 etar -xvf test.tar & D5 Q6 m2 e" ^6 c# ]
解压到指定目录
! e- A3 X  V% E2 c% N' D8 m  X" j- v* O; [, b
tar -xvf test.tar.gz -C dir# L' A% \, I9 ]' ]$ z4 b1 U' K
tar -xvf test.tar -C dir
3 ~" d; }$ n5 J: c0 u解压包中指定的文件
9 U9 O9 P0 |9 d" O6 L% Q; H( l& g/ d1 q
例如test.tar.gz包中文件情况如下:. ?4 h4 ^; L4 S
1.txt5 t& g% R" U- f+ R6 D' N- Y3 f
log/
& Y: C- J. G9 z  s* glog/1.log  O) g& H: c8 y% m4 A6 d
log/2.log! a5 U( E( B1 a6 }4 Z& K- f
log/2.log
- T0 v2 S, n; `+ T: v( plog/4.log
; [( R- a. H1 d+ w+ {3 hlog/5.log
# _: Q. z9 N. K0 K6 L8 ]% T/ W如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:# h# q+ L4 u& o! U& d! X8 y
tar -xvf test.tar.gz log/1.log
6 W0 q; Q2 T- _8 G5 ftar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录/ M& u7 t! T! u# f3 D! C! e
解压时去掉目录结构
$ j6 R1 X* ?4 f( t" J8 h" a* M" @. ^! O4 @% d/ z" U
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
& `4 @( Q7 {- {9 T7 C1 f2 ctar -xvf test.tar.gz --strip-components=1 #去掉一层目录
1 ~: o' Q" M3 _- N  `解压时不覆盖原文件9 O4 W, S% C# E+ E4 e) y+ c3 K

7 X) T. T# t% Z/ V* c当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):& [9 z* h3 y7 T/ N5 _
tar -xvkf test.tar.gz
5 T) S$ h2 l* Q( j" }' F特别提醒
0 Q/ n. ^7 e, b; \$ M$ \7 z1 h* u, U
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。9 J3 g0 k& f1 p  k1 Y: K" Y
zip/unzip
7 b. P3 o- I' x& R/ p
& s+ L0 e' t+ f8 U* Qzip和unzip命令主要用于处理zip包。" c! q! h2 `$ M3 ]& N/ n6 J1 X
压缩
( q( Y% [* u. b* z2 P/ y. c/ w. V6 v& n+ B
涉及参数说明:
; o. N0 q- n; @* m-d 从压缩文件内删除指定的文件。
- j( u7 X8 e7 d% c8 I-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
' q$ h4 x6 C  r! i. a6 V$ U$ I1 @4 Z-j 只保存文件名称及其内容,而不存放任何目录名称。, s- y: O) {) m; D0 x
-r 递归处理,将指定目录下的所有文件和子目录一并处理。* ~0 e9 _4 P+ s' s6 H5 m( A
-u 更换较新的文件到压缩文件内。* |% ^; G. D5 u% ?& z0 G! V5 F
-v 显示指令执行过程或显示版本信息。% ^1 b" i. s0 e: Q. X7 |
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。' G2 |; @6 c) [
- <压缩效率> 压缩效率是一个介于1-9的数值。0 Y0 M6 z5 V8 s: J
压缩文件6 n+ l. @" r) ^+ G
$ b; n8 S/ B1 w- ?2 ~7 L8 ~; }- B* n) }
zip -r test.zip test/ #打包test目录下的文件, \& I8 K) a9 b- {! q3 i
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
/ u0 f* b, U+ [指定压缩率打包文件
0 Z4 Z, a& x" P7 _  J6 ^( ^# t" z: G* _! v
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长: N/ ~2 X! w5 }, ?" R7 x. H
打包符号链接文件+ `0 R* C4 F; }1 B& T3 s

& i" y9 H8 `) J前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:& v, A7 q, h, p- W  f. o
zip  -ry test.zip test- n# T; A" O8 k6 Q- B6 ^  M
向压缩包中增加或更新文件
9 B8 k# J3 r0 H$ @4 v0 {" a8 @, ~8 n
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:/ z+ h/ Y! S! O
zip -u test.zip test2 #向test.zip 包中增加test2文件, u0 Q, V: G; Y/ l
压缩时加密/ Q. F; d% a( C6 \/ O  ]1 A$ A

3 ?, ?3 H$ T: H( }0 x# y0 a压缩时如果需要对压缩包进行加密,可使用-P参数:
: L+ T6 m" H& a' azip -r test.zip test1 test -P 66666 #使用密码66666加密
  j8 v2 {' x2 w/ u删除压缩包的特定文件& W# P$ [; L8 l+ ^! m
' `; c9 H+ {; S# |# a( t
zip -d test.zip test  #删除test.zip包中的test文件' G9 p" w0 O6 L# a2 a, Y% I/ m
解压
- D: n9 D1 h% W- J
) k3 n- U) T. O2 z' M& b涉及参数说明:
) V9 u- h( d/ F* L. y-l 显示压缩文件内所包含的文件
3 Z& W, k. c; `! w# D# |/ S-j 只保存文件名称及其内容,而不存放任何目录名称。% `# y6 `6 S/ a( G/ E
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
* Z: F* y3 a" @0 F+ y; ?-v 显示指令执行过程或显示版本信息。
5 Z% H6 O* ?' e1 }$ s3 {2 u6 i4 c-d 指定解压目录,目录不存在会创建. q. Z" b+ v2 O6 [+ ]
查看压缩包中的文件信息" s. {, Q. j0 h

# k0 z& B$ b3 m" v  N2 Dunzip -l test.zip #可以看到压缩包中的文件名,日期等信息  ~/ Y" A/ }" V! L* N$ j0 {; |2 @9 F" D
unzip -v test.zip #查看更多信息,例如crc校验信息等
( \% _1 D) I# o& F& o7 ^8 Q解压压缩包
& y  H& k( O6 t5 x9 m; M- q2 y3 ^) m: [% ?' H7 X3 @
unzip -o test.zip -d dir #讲test.zip解压到dir目录
& a* z3 w. m( V3 o解压包中指定的文件
8 ^  S5 ]1 @' K1 d0 r  z; g$ r
: Q  c: f* |2 f! L0 p! C7 W如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:7 m( U& n9 J3 ]/ z& l7 f0 C
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录7 O" b7 A# a: L! o* z; ?
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
& V* y9 x* m' L) b解压时去掉目录结构% l3 C0 k! ]/ v- P) Z4 N, g9 Q

. P/ ?8 j5 M) x: D7 m压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
# x' i( _& a. {+ _5 B1 \5 O1 p! Uzip -oj test.zip -d ./temp  / T. p+ K3 g9 x9 f, z% R' q
解压jar包) V7 I6 U+ Z4 q; b

: H  v5 Q$ r) S- Djar包是java归档包,但同样可用unzip解压查看里面的文件:
+ `) T! Z: `' n1 ~0 ?5 f" C: f! Tunzip -o java.jar -d dir$ n0 r* e+ d# E- ?8 t) \! M
gzip
1 j& \* r, n/ F/ y* k
: P) o. W& N1 l* h3 X+ c5 |涉及参数说明:
4 ^: x6 ^1 X/ a4 E-k 保留源文件- n* z4 s- W- m. e
-d 解开压缩文件: b) y2 J8 E1 p- K1 e: _
-r 递归处理,将指定目录下的所有文件及子目录一并处理4 z1 t" q* ~+ U' U) C
-v 显示指令执行过程
" A0 c2 S+ c' k! F) G& C; |tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
# |* J: N( @: j; X2 t) r* J8 d* w( l& ygzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包2 t* Y: |+ a* q: P
gzip -rkv ./* 递归压缩5 A; U+ ]# H. x0 V# I3 l
解压也很简单:$ c* w" z/ d7 F9 l! }2 {
gzip -dv test.gz $ O3 h: C) @% z9 |$ W0 C2 @
bzip2
/ J: G. J2 W/ l, W# w
; V3 e+ b1 _; a% Z7 m8 w+ ~1 K) Ztar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
' [, w3 K+ w1 |+ {7 N  zbzip2 -zk test  #压缩test文件( ]( u& V3 p& O5 k+ r, r
bzip2 -dk test.bz2  #解压: m. H2 l; `6 e  m  }
rar/unrar. F$ k' q5 D' a
& z- f, ?/ h- B3 y/ Z
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:, A2 ~# [: c4 \% P- [  \* i  ?
rar a test.tar test  #将test文件压缩为test.tar: ]8 z* @3 G, q' ~
rar e test.rar       #解压test.tar
% c( N. D0 Z0 ~; w2 ~& Junrar x test.rar     #解压test.tar# z9 ]. W+ w1 j" g) t
压缩率比较& C' o; a8 A3 c% t) i/ ~. B
  p5 t7 L$ z7 ]* L, R3 f
压缩率一般来说:, ?2 O% @$ k. a+ `+ D1 S6 a3 O
tar.bz2>tar.gz>zip>tar& A  Q  J" P3 V) V
压缩率越高,压缩以及解压的时间也就越长。
) y1 w  a- h8 l% ~* k* C总结: l0 W, p- ?% W$ a
0 o7 D6 w* j/ l+ V8 k! v8 o
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。$ V3 |/ I4 v9 s+ o$ p8 e
有任何补充或建议,欢迎留言^_^。; X- W6 k* A5 ?# X! \; M+ [
/ _, p. Z4 G7 I$ f

6 l( Z1 i% q! j: Q! p3 l, v# Y! Z. F* p; }" q

, c& d6 S/ y6 w

微信扫一扫,分享更方便

回复

使用道具 举报

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

本版积分规则

浏览记录|手机版视频|手机版试卷|使用帮助|51fly国际课程 (https://51fly.win)

GMT+8, 2026-5-25 20:47 , Processed in 0.055538 second(s), 32 queries , Redis On.

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