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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
  K! n7 }' [0 Y; n% q/ ^  F3 J" l- w  _
! p  O" S: t- }, E8 M& `% x

+ Y5 W+ |+ H. E5 |3 \1 F5 |前言) [8 }% ]5 Q! z& F

5 z' _$ O$ }, A3 ?' KLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。6 R+ C& G! F& |+ g
tar  V. i( Y4 `* a5 J+ z
4 }) A8 L  T. g6 _
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。: A2 n/ a, _$ u. u" P, L- h
涉及参数说明:
' \+ V3 X) }, {2 w5 d2 T, C4 s
-c 建立新的压缩文件
9 Y/ j# n9 C1 @$ F  c2 k1 m-r 添加文件到已经压缩的文件
6 C" r' @6 k4 h-u 添加改变了和现有的文件到已经存在的压缩文件
( ^3 U+ S& t& i! q1 p-x 从压缩的文件中提取文件; K% y+ n) t3 G2 P" {3 Z" O& l; _- X
-t 显示压缩文件的内容/ w5 V% _* n: o8 W5 {' |) x; g) d
-z 支持gzip解压文件
2 v! p9 L  A- P8 X. n$ g# C-j 支持bzip2解压文件
2 x& K9 O7 e# A  c5 p, n-v 显示操作过程
+ A3 O2 o' I) p: V5 D-k 保留源有文件不覆盖* U4 r2 K! k2 B4 q9 q& x9 q) G; N
-C 切换到指定目录
5 }' h% ~, R+ l# |, W) J-f 指定压缩文件
# z6 ]' y: q6 Z! |: w" L
' P; o0 ]3 e1 |3 E: O8 ?--delete            删除包中文件
  a* [" f- g: V9 r, Z* N--strip-components  去除目录
2 {( x* \- R2 d# `7 a2 ?+ [--add-file          向包中添加文件+ L0 J, d* ?& A+ p1 `. H, A8 }
压缩' y% V; _" x3 x5 v

% h: ~' I4 w9 J: T  c4 j; ^( d  R归档tar包,不压缩# n0 [& z) D" R$ O* A6 b* R( Z

: Y! B8 t5 P( X% {& A, \* ?tar -cvf test.tar test1.log test2.log #归档多个文件
7 @4 h" R0 @7 ^tar -cvf test.tar test/*  #归档test目录下所有文件
2 [9 j4 n" N: D: v' r) star -cvf test.tar *.log  #归档所有以.log结尾的文件 % e" ~6 U  ?% H; v, M
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
. P, l0 i! k2 h8 @归档并压缩为tar.gz或tar.bz2
/ l: K7 m# T3 J8 S5 S
( o, q, _, N" s  \3 t$ s这种方式打包对文件进行了压缩:
4 X0 j) D; ]7 X: r4 ptar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
- f9 }5 [5 p: Z; `tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
6 c' l% x9 O( o2 F查看压缩包中的文件
7 M* C: N8 Z4 `/ S
0 ^  q8 W% D8 g2 c' ^" b) S如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
$ U: [8 v  u& D4 v, D: C' a/ qtar -tvf test.tar #可查看test包中有哪些文件  A5 o4 B# w9 a& [  U7 ]5 U
打包后删除源文件+ U& `2 L" Y- N4 b- m

8 F0 h9 @' p; z- \+ b- j% c有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
! Z+ _/ |1 s) b! H$ a; s# Star -zcvf test.tar.gz test.log --remove-files
" `: v" U3 v& W' I8 S( U打包除指定目录或文件以外的文件9 t0 ^4 L* C% J  }0 d
2 t, N5 c; ]0 l8 C: }. n! f
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
* e! @1 U6 y! W6 Q( k# e* l6 ]tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件% C. ^# L# \( t# n+ V. I& j: P' y
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。! w8 i" O; a; s& M9 J. K# s: P1 u( c
向压缩包中更新文件4 O/ q5 B$ M/ v- e
6 N& I3 z% Q- e
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
/ k1 J5 z: P  h, _) K9 Atar -tf test.tar --add-file=test #只针对tar包. \( y0 D  h. Z4 p, Q. I
向tar包中增加文件
5 u/ a7 G4 e' |4 h: h  U
. I# L$ F  l1 I! S, n) u+ f1 O向tar包中增加文件可使用-r参数:, ^7 b( ?. A! B
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar8 j' B3 L+ O+ Z( H6 X8 L+ ]
删除压缩包中的文件
3 c0 o  g  n5 s  `; w/ @# w5 ], x, ~6 o
5 R( y) `8 t$ W1 m; `# l, y在不解压的情况下,可使用--delete选项删除包中的文件:
( k) R7 I& K( z& Otar --delete -f test.tar  test1 #从test.tar中删除test1文件
% b- ~1 T4 d# h$ [6 t5 E( {解压; `. `; p2 w4 m0 _

5 x9 \" J, d( H" A/ D解压tar.gz和tar包到当前目录, G0 M; Q  H% E& O2 m) \

  |9 N& N4 [/ ~& `% S2 \1 F% T' J( m! xtar -xvf test.tar.gz
2 f3 R+ Y+ k* n1 B% g6 otar -xvf test.tar ) w- R+ q; S' Z% |* r, Y" t- u
解压到指定目录; U( [. g, e1 d* x

2 Y" C7 s" |+ z* ?0 [tar -xvf test.tar.gz -C dir. k+ w/ g0 m# l
tar -xvf test.tar -C dir' V* d" z4 }- [' T% C
解压包中指定的文件/ x0 n! W3 y2 F9 ^

* k- E1 z" f  }( c, j2 w1 {例如test.tar.gz包中文件情况如下:1 s+ U3 O& ^) k! a: L7 Z$ Z2 S
1.txt
% P+ n/ q+ i% o$ Y8 X; ?- \log/
& |% |5 @) O/ G) Mlog/1.log, `) A( {8 x+ a' ^+ d; {  n# p& G
log/2.log
5 [) P# ~0 u7 m2 ~6 j7 Elog/2.log
9 P+ ^  O4 N' f  ?% Xlog/4.log
7 D& v9 Z/ K' Q3 l' M/ Ylog/5.log6 b1 L( k. @( y5 Z
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:2 G0 Y! F% n  f# I
tar -xvf test.tar.gz log/1.log$ R4 v  Y/ v( w( M  f6 Q* k/ F- |& v
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
9 I6 ]3 q, u* j$ g2 G解压时去掉目录结构
* k' b( `* A6 R) z5 t* X2 I7 u) m
& C" B# u. I' n$ `: F/ h3 l压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
; t) y" P+ n9 t) U) ]( Ntar -xvf test.tar.gz --strip-components=1 #去掉一层目录2 y  u3 A5 s- t
解压时不覆盖原文件/ N2 x! }/ |( y7 @

1 H$ ^5 O8 D2 g) N8 h当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):* A" K8 D* j9 ?, S
tar -xvkf test.tar.gz
+ t3 }' C+ r- P- u特别提醒
/ L$ `' A' o4 E3 O) |* C0 I
4 ]# a" u7 c# v6 L$ k前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
& G% L2 L+ d3 Q" o8 @zip/unzip
- s7 Q+ u: u* h, z( `) T; C) d# }, x
: a& l% D9 H0 H% E& szip和unzip命令主要用于处理zip包。
8 V" ?: I% ?/ ]: @$ o( V8 H压缩
4 x& h+ X  v" X+ J: L/ [7 ^
( ~& l. y6 }/ V* L2 t, g8 \+ D+ E涉及参数说明:- ^! _* ?/ l4 m
-d 从压缩文件内删除指定的文件。1 a: ]& _' u* D( U
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。! c: `" u  ?( z( y: [
-j 只保存文件名称及其内容,而不存放任何目录名称。
: n& [/ j6 m; H-r 递归处理,将指定目录下的所有文件和子目录一并处理。) B9 ~( z/ m- f3 B; \' J# k. T
-u 更换较新的文件到压缩文件内。$ [2 I6 N5 D4 q: `; X: w: I3 s2 a
-v 显示指令执行过程或显示版本信息。! }  m' b2 Q) N6 r
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
/ g8 v, F' z0 G# h3 ^- <压缩效率> 压缩效率是一个介于1-9的数值。
8 ^' K/ v4 a! F% R压缩文件
4 H  v  d9 e, K' ?9 a) k
) Z/ Z8 `$ ~# C6 D, |zip -r test.zip test/ #打包test目录下的文件$ E4 z0 V/ H; \. m8 p. V
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录  V4 _: \; E+ Z3 I- b
指定压缩率打包文件
+ C3 C  I' L. H, e9 }' A  B2 ?' b
0 R% u% g7 _7 n& E) N; X9 szip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长- k% t4 s! V1 u
打包符号链接文件
" i* Z5 }& P! W% z
2 V  C% y" @6 C8 Q( m2 [3 C前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:  t: P% T1 q' C  B
zip  -ry test.zip test2 G3 o# X4 p8 m3 V3 b4 d7 g
向压缩包中增加或更新文件
% N/ P  R0 s8 M9 b
% g: a% h+ F: _; M* r有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:! G. D* K5 y; x1 g5 z/ F
zip -u test.zip test2 #向test.zip 包中增加test2文件; Y, G+ {  Z* v, T# j) ~
压缩时加密% c& _/ U# P" R: I8 t2 |7 ]; `
/ ]! [  f. p" y  W5 E4 r) \3 o5 L+ F
压缩时如果需要对压缩包进行加密,可使用-P参数:0 @/ _3 `. Z: g/ _
zip -r test.zip test1 test -P 66666 #使用密码66666加密: e- V( F0 k/ h& G0 h
删除压缩包的特定文件
" _1 \" r5 I1 }% F' H
1 ~# I6 V: Q8 c5 J9 Dzip -d test.zip test  #删除test.zip包中的test文件7 S( Q' K* \' Y& @3 W6 Y2 f
解压" Z, ~0 U. I8 m( P# j
9 x" t5 J* V' l
涉及参数说明:
3 V/ F9 x; X$ D" n0 x-l 显示压缩文件内所包含的文件
2 E% `8 d( o& ^) i) L0 p-j 只保存文件名称及其内容,而不存放任何目录名称。5 u5 E# A. }, L, K  {2 i8 M
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
/ B! D* z) y: a) `-v 显示指令执行过程或显示版本信息。: d. ^2 N. {; g& I! }8 G0 {" |/ c. J
-d 指定解压目录,目录不存在会创建
0 U4 G, A, C$ x% m# r- |查看压缩包中的文件信息  F$ p) L5 G+ I" i/ G

8 ]2 s9 Z9 Y8 s' o( z( Qunzip -l test.zip #可以看到压缩包中的文件名,日期等信息- k; }- k. `  I* q$ A
unzip -v test.zip #查看更多信息,例如crc校验信息等
" m( c0 R1 x7 v; g$ H6 S解压压缩包
# R* U5 f6 [9 j
! T9 q! i: }) Iunzip -o test.zip -d dir #讲test.zip解压到dir目录& A, f9 j8 K$ J% y+ N) m
解压包中指定的文件
( _+ H! j3 R! z4 Q2 h  r# U5 N$ B0 a0 X( B5 Z7 W- q
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
* o; l7 |/ ^5 F% Dunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
6 x# ~' w0 ^+ g0 X( u  U( }unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
9 X& \6 n4 C+ p' c7 M2 g; f5 U, V解压时去掉目录结构1 q) R- M- i2 a! v% y

  `$ F& D5 G2 x3 X! D# p9 P压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:$ y  a$ e: B5 _' m$ [
zip -oj test.zip -d ./temp  
1 u: D; E* M: e+ i0 Q! t+ a解压jar包
* v$ a# O6 c9 f/ A" g% K- y6 H+ _$ R( ]4 P. J
jar包是java归档包,但同样可用unzip解压查看里面的文件:
! w8 M! e0 f3 p8 R" ?; Z+ eunzip -o java.jar -d dir  S. L. x8 e6 V+ A* ~- |( Q- P
gzip6 G6 V! y6 `( G. y

7 p( w( p9 Y5 h' {# i# Y涉及参数说明:& ~/ k( ~' A" \
-k 保留源文件2 f- a! d6 `& k) E: s) }7 {
-d 解开压缩文件' v" l8 m, q' e& [& ]1 \
-r 递归处理,将指定目录下的所有文件及子目录一并处理
- R$ L, \+ P) c-v 显示指令执行过程+ a5 C$ R* Z. b& x; c' h
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:7 r: a2 F* z1 B
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
6 p  q& L) m  V# l$ egzip -rkv ./* 递归压缩
2 S0 ?$ g8 W. x解压也很简单:
( u- a# e" t3 U$ ^& {' b* m) e" ygzip -dv test.gz
, Q, R: H4 M3 ]' @bzip27 l1 t8 e0 d& g% X
- z4 |; o* F: [( A
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
& z3 K4 a( d" k9 Hbzip2 -zk test  #压缩test文件
% c0 n8 V0 b+ x, G  J+ T3 m/ ^bzip2 -dk test.bz2  #解压" m1 i  g4 j, F! W) E
rar/unrar
; r# B% \  C" T% B( r- `6 i/ [" H
9 `) ~8 t% w4 Z8 t+ orar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:  p- b: ]- M9 u$ [9 M8 ~* r
rar a test.tar test  #将test文件压缩为test.tar
8 C; Q' U, ^0 T, X) I+ Orar e test.rar       #解压test.tar
6 u* S; ^0 E1 n7 K- N7 \unrar x test.rar     #解压test.tar
5 J" f/ d4 p0 g0 n$ G$ f; P. T压缩率比较4 L: \6 m' i( e
" C- F. F  }5 Z
压缩率一般来说:
( p" F* ^  H: ftar.bz2>tar.gz>zip>tar! x/ P0 m  H& i- M7 x& y6 q
压缩率越高,压缩以及解压的时间也就越长。
" k! m5 O5 O) w5 ?% E; b0 E- m总结- s- x# p5 S+ I4 A/ b$ @

- `9 [: J: o' A+ l6 S" U* k对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
4 q- }* K* B) T# U! i; A( g有任何补充或建议,欢迎留言^_^。, m9 i) F5 i! U* h* t* D

' V  n& l! l# K3 P
; q9 f9 o4 ?( r" ^2 x
) o& y' J5 G% S! c4 R
: v6 R! M* i$ J) W; a1 l% N

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-15 14:39 , Processed in 0.051455 second(s), 32 queries , Redis On.

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