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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
3 I8 X) F" p5 `- n) ?1 I5 l
  B* }; c* `" V& P

" ]* y5 R- ]3 Z- W) {. w8 B' V前言/ K" _/ `! i" D8 P

% o& f' Q% R" a, D1 i) CLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。) k0 x% ~# S- x4 f/ J! o* }/ ^
tar
/ g# T. k4 E7 q1 H
( O) a) x! U; Z5 Q! v! J/ t, Mtar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。# @5 P+ w: z* t% P- s
涉及参数说明:

# r. [! w% \7 C2 O, z. A( d-c 建立新的压缩文件. y1 h4 F" e( C+ m0 K' X4 M" J" K
-r 添加文件到已经压缩的文件* L7 p- S6 J8 y+ t- ^* q4 z
-u 添加改变了和现有的文件到已经存在的压缩文件1 l+ |$ _6 z: B0 U+ w$ h, P, G
-x 从压缩的文件中提取文件
& \& T  d5 W# x3 T-t 显示压缩文件的内容' y8 K* t5 }. ~5 H, R. E  L
-z 支持gzip解压文件7 s( m& e8 C' f
-j 支持bzip2解压文件; t6 L6 p$ o  A1 h" G: O
-v 显示操作过程
' m5 N, _7 y) {. j  F( N( ?( c-k 保留源有文件不覆盖
1 h7 ~+ O0 B# I9 S8 F-C 切换到指定目录% O$ P+ Z9 Z7 X  J+ J8 _) W
-f 指定压缩文件
# c! I+ Y5 f) t
2 x3 U9 }. R6 @, D8 k- C7 q--delete            删除包中文件; c* K) f9 `" I) |5 ?( j
--strip-components  去除目录
6 u& Y3 u0 x: O+ |3 a' [--add-file          向包中添加文件5 _5 ?# T% f: x
压缩
1 B1 w' n9 y) P3 l  }$ `2 R; C& c  M# W
归档tar包,不压缩
  b& @% [; L# n/ V2 d" `# O) @1 T1 Z
* q( G" q9 b8 V2 y( n" g  V7 p; Mtar -cvf test.tar test1.log test2.log #归档多个文件  Y" i1 h) \, W. X) L6 t
tar -cvf test.tar test/*  #归档test目录下所有文件
3 ]1 Y  y& z4 x; Rtar -cvf test.tar *.log  #归档所有以.log结尾的文件 7 ]0 d# t" N. c
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。% O, t1 t, F- c6 [' t
归档并压缩为tar.gz或tar.bz2
* X( M: W  _7 U4 ]
" O9 j+ _' c2 M( ^9 {% {" R  a这种方式打包对文件进行了压缩:
; y0 v$ A. j$ u' }" ]* [& a, q7 w. o! btar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
7 l, N- o0 ?" Htar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩6 J) r9 u% n, N) W, {/ e
查看压缩包中的文件0 y0 T7 W- T  t. T5 G+ L- O
' G& c  v( W) N1 r
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
# I' p7 K. h3 H* S' Utar -tvf test.tar #可查看test包中有哪些文件; b9 g1 t5 t1 F' t) x& R
打包后删除源文件
% ^3 M, y* P# g& T7 {/ N$ x8 ~1 M( T) Y4 u* Y3 Q- w
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:9 m& @- V9 g: ?
tar -zcvf test.tar.gz test.log --remove-files
6 U! x+ w# a: Z7 `' z4 i打包除指定目录或文件以外的文件
0 f( T% \+ ^8 v; w0 l7 u0 P' E: N2 i4 g) H% i
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
5 s2 x7 s, F% utar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件: z# H' m( K" f' y+ D! y
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
; `) ]3 m0 ^1 W2 g5 F8 o7 W7 r向压缩包中更新文件
  R3 f, c) P8 n; u: p+ k! o# r9 e: h, x7 c8 u! c$ v
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
! @  @" s' M, x& T: ^6 D" Ltar -tf test.tar --add-file=test #只针对tar包
" v( J# w7 T0 y( @" ^向tar包中增加文件
, N. S$ G% A2 W: I
" {7 d- O) N" d- K) N7 \向tar包中增加文件可使用-r参数:' U8 y% Y7 O) }1 Y3 S
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar: e7 l2 ?/ ]3 h% j* Z$ h
删除压缩包中的文件
# ]6 p/ G8 }* M" G) r3 u
2 T/ c, O; \8 L在不解压的情况下,可使用--delete选项删除包中的文件:) }4 g" x1 ]7 R; r
tar --delete -f test.tar  test1 #从test.tar中删除test1文件  Y. B: p$ v  U6 Z# m
解压' ]% o. h0 z0 d# x0 A6 ?
" R6 _- H+ q+ w( J: A2 R% p" T" M0 i
解压tar.gz和tar包到当前目录
) G2 E8 _8 V+ A) _, E# L, c( ?: j  L; B& N7 z1 M, ~/ g
tar -xvf test.tar.gz
% ?6 y& {- Q5 ?  Ltar -xvf test.tar $ |. C, ?+ w+ S" d2 ~
解压到指定目录! d) v) T0 h1 M4 M, ^
( A4 \' [1 @% E" c
tar -xvf test.tar.gz -C dir, |$ k- f# C* ?+ R
tar -xvf test.tar -C dir
- H3 v2 y" T7 r, ^3 L4 n解压包中指定的文件
( e1 q: w8 ?& Y% |5 V7 [) J9 {( {$ r/ F
5 p% k( Z5 @& I* m8 c9 Q例如test.tar.gz包中文件情况如下:
5 @5 f( N8 V6 m; T  I' x1.txt
- A& H. v0 m4 h7 D6 {9 \3 Olog/
& a0 Z* L1 R% b8 z+ z) y7 j( klog/1.log' u; Z2 d' I5 C
log/2.log- A" s( Z2 `' p* E, v
log/2.log
1 P% n5 g% |) e5 Qlog/4.log# t0 Z5 ~. s" o$ ~5 S
log/5.log
; x7 u9 C8 R3 X% s! V% ?如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
. m3 M8 _1 v2 {; ]9 d4 O, |tar -xvf test.tar.gz log/1.log( A* [0 l* B4 G/ {& o+ u
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
% L- J" T+ k1 x解压时去掉目录结构9 w; ]9 d9 L' p. D
$ x9 d* R) s4 j' y/ g2 n; d" w
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
0 j6 Q* |7 ]8 x: R, ^3 d! T" X+ Rtar -xvf test.tar.gz --strip-components=1 #去掉一层目录
  F3 {* G) w' [, k& A  h解压时不覆盖原文件
; Z# n8 {+ W3 e7 r2 o& z1 ]: o0 j
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
! }! E- Z& Q% t) T; s3 ~, \$ l9 qtar -xvkf test.tar.gz' Q- Q! C) l" u% ]4 x8 l
特别提醒
. r9 d" i- f0 z
1 l; c" s5 ]% ?, T5 j2 r+ _# a) u前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
" F" h3 i2 `% R# Y/ xzip/unzip4 e! Y; |; f" K* b8 H

  \! ~) Z1 T! M/ s9 c: Yzip和unzip命令主要用于处理zip包。3 x& i8 i. ?- [, N* y, f: |) V& @7 @
压缩
, U& z1 J) c& L# ~
3 L( n+ x5 ~1 h! H6 L( {9 |涉及参数说明:
0 x+ [4 B) ^& c-d 从压缩文件内删除指定的文件。
5 J1 \; O* P  y5 @; ~  ~) |  L-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。8 }" i( F9 F* u# Z0 c. M6 J
-j 只保存文件名称及其内容,而不存放任何目录名称。; V0 m, o* Z. K$ i) s/ |% ^) l8 o
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
, y% {9 v: w( Y$ Q& _-u 更换较新的文件到压缩文件内。5 K5 k6 C/ V/ y& d; P+ ]3 j7 t& s
-v 显示指令执行过程或显示版本信息。. B: t6 W3 \* g. p
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。! ^) m& ~7 J3 }/ M
- <压缩效率> 压缩效率是一个介于1-9的数值。
! `! l( X' C+ L压缩文件6 h! b' c. y" v
2 \6 x$ |+ f  k. Y
zip -r test.zip test/ #打包test目录下的文件
- ], f! u* ?5 ^zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
3 C  \* j+ N0 s4 w9 ?1 c3 R$ ^指定压缩率打包文件4 Y$ L3 p7 q# c  L* ?9 `
, c; z0 k, T  ]/ }- Q* M
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
' i- @3 c  a7 H) K9 t9 f$ \0 U  z打包符号链接文件
& O" Q5 s' |( t+ Y/ P1 M
2 i1 D9 l! T" `前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
* Q: e- t* V: {5 q# D) |5 Czip  -ry test.zip test
, P6 S+ U) U$ I; I向压缩包中增加或更新文件
# B9 H3 y5 H/ c9 Z4 T. H2 N0 T
: r; m. p1 N* ^% C1 W  [有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
( p% y- Y4 f7 l, A9 I2 L) Nzip -u test.zip test2 #向test.zip 包中增加test2文件1 ^. A9 @3 X  F. T) x: Z! P6 d2 n6 Q
压缩时加密
0 w) O9 q" y4 u  k6 z
' y7 X% I  O1 j; {& {* v- L压缩时如果需要对压缩包进行加密,可使用-P参数:
- `6 M: Y1 X2 Ezip -r test.zip test1 test -P 66666 #使用密码66666加密
; f/ A! d. J5 B  F' L9 W! V删除压缩包的特定文件
+ H$ x/ ~& o! A3 R
  r3 F; s+ d8 X' v. ^+ l* szip -d test.zip test  #删除test.zip包中的test文件- }- C. o# S# E3 B) u; N
解压
3 r8 _* k1 g; o6 a! Q- ]* G6 i7 L, h! s
涉及参数说明:
$ _  i+ d) ^7 s! I  ?* i# W/ x-l 显示压缩文件内所包含的文件
8 O( z  G0 L9 w/ ?-j 只保存文件名称及其内容,而不存放任何目录名称。5 _# P3 r' G  F5 J" q
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
2 `5 u0 ?4 F+ K2 D. Q; R-v 显示指令执行过程或显示版本信息。
  N1 G$ r/ n5 T/ }2 o- K, K-d 指定解压目录,目录不存在会创建
+ Y% w( X9 {$ ~查看压缩包中的文件信息
! h3 x5 [  q5 k, t* F5 k
/ _! n: }$ P% Q) j* g, ~! \9 T- Lunzip -l test.zip #可以看到压缩包中的文件名,日期等信息
/ n% `& B) L4 N; _, d( l+ yunzip -v test.zip #查看更多信息,例如crc校验信息等: W5 w2 T+ m* l9 e2 D5 X
解压压缩包6 |: T2 i+ j/ h+ p4 v# W8 E

# h" w) N. h2 Zunzip -o test.zip -d dir #讲test.zip解压到dir目录/ _+ S0 w1 o) w. i) d
解压包中指定的文件1 S! m2 f: p. U; ~1 s0 e

& a2 [! h. F2 J+ u* b/ E6 ]3 m如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:+ ?( b* Y" S, }% ?5 U
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录' K3 ~8 [. C7 W4 k
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件5 ^- s4 O2 S+ m- n
解压时去掉目录结构
8 g: V4 Q. b5 ]) _* Q- |4 J* q
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:  N. B: Q+ b; ~% w2 ]
zip -oj test.zip -d ./temp  $ n7 U9 n$ q$ z1 ^
解压jar包7 d+ P0 R% G) r6 ^' H: I4 K
+ z* v/ s; k/ N8 Z+ R7 n
jar包是java归档包,但同样可用unzip解压查看里面的文件:
0 H* A$ i. f8 l8 sunzip -o java.jar -d dir  W  N3 Z  {! _! t5 p7 Z! t" [
gzip
% F$ E0 p$ g. z! ?) j& M% p2 `0 }  N
$ J; A: T  a& E1 L涉及参数说明:7 z/ a6 A9 ]  S
-k 保留源文件3 ^4 `. y( V$ `
-d 解开压缩文件) `; ]& A( M8 D2 {; W0 O: J7 t
-r 递归处理,将指定目录下的所有文件及子目录一并处理+ J/ ]# ?1 u6 M* l( F' s/ H
-v 显示指令执行过程8 r, R' d: p9 o& f" k6 k
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
0 x! \6 q) t  M+ |1 cgzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
  {8 j/ _5 K. e/ d, `gzip -rkv ./* 递归压缩
( s! T; K$ F! r6 D- k0 }解压也很简单:
  \+ m' K9 R) W2 M3 f5 Igzip -dv test.gz : k$ l# r3 F( [7 A' U4 A$ |
bzip2  O) K/ d# R6 i) n/ y
2 f8 I/ q( w( v& E( j3 q, P
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
: A* ]: @' u$ ?. f1 ybzip2 -zk test  #压缩test文件
6 t% d/ W( {) pbzip2 -dk test.bz2  #解压
, g  W/ x% x9 S, g7 Q: Lrar/unrar3 l5 M) `% V2 `* Z) L' B* {
- ~2 D  d+ B3 K) }. E5 R
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:, Z; e$ V3 ?6 c, o9 ~
rar a test.tar test  #将test文件压缩为test.tar1 x& D1 b! m# P5 N
rar e test.rar       #解压test.tar
5 W+ B8 f# ^9 j( N, Kunrar x test.rar     #解压test.tar
9 N# ^+ a9 N7 i' d压缩率比较
4 M5 E( S; G) L: s4 V
5 F  E+ H1 F$ L& n压缩率一般来说:
  n9 j& v+ }; Q1 s/ Xtar.bz2>tar.gz>zip>tar
1 E" C* l! X3 n压缩率越高,压缩以及解压的时间也就越长。0 J  k# F0 t: K5 X; l, x
总结8 I2 @/ |* E/ E7 I# C) ?/ |' J

$ a+ i, c  `* u6 m3 }$ b* J6 Q对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。+ P& p1 R6 p- @& t( R
有任何补充或建议,欢迎留言^_^。
- I6 k% J) a, ~: V0 ~: f/ r$ ^8 ]
0 g! B. i1 M1 X0 n  X
, g$ [, j" h9 L' ~  K; p* M- b9 n' i6 _

% I4 X$ p. J/ \1 o. Y$ m

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-24 16:46 , Processed in 0.065440 second(s), 35 queries , Redis On.

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