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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
4 I0 r. F/ G  q+ }. P3 A
& Z% y2 T- h% c3 [5 @+ a

- H0 i+ ?; k$ f- P* E/ t8 d# D前言9 ~% T" M2 n' d) T
6 ]8 b- k( V6 W$ s0 E, T3 u" {( U
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。3 Y' Z' Q) v' z5 j
tar
( v. m' ^5 a6 l/ c9 z( @+ @" l3 S7 M) a& u
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。1 h+ z% v" f% i" @; T! A( N
涉及参数说明:
* D& g- J) d$ G5 g4 v& @
-c 建立新的压缩文件; o( G# C  N* Q! T0 X
-r 添加文件到已经压缩的文件
7 p: a5 z1 Q* F-u 添加改变了和现有的文件到已经存在的压缩文件
) }8 @- K3 ?+ T. k% U-x 从压缩的文件中提取文件, A+ N/ w  J/ G6 Q7 X: ]% V& K
-t 显示压缩文件的内容$ }9 L( B( \) y" H3 a4 I
-z 支持gzip解压文件  S8 o. \! }6 h) M, B* i7 O3 Z
-j 支持bzip2解压文件: @; R: f4 ]! P& x+ C4 w, |8 l
-v 显示操作过程
( s4 G4 j, `7 k) V- m-k 保留源有文件不覆盖- M% [0 e- B- I/ \( D
-C 切换到指定目录
& w) g& @% c7 c6 k* i2 U. L-f 指定压缩文件
1 I' Q+ h0 ]% }" m0 b
  t6 T$ J1 `9 _' I6 e; P--delete            删除包中文件
/ d! s; A% L1 _6 q, ~) E' @--strip-components  去除目录2 b& B# D# k  m5 o' K
--add-file          向包中添加文件. [0 ^7 [3 {) ~( s7 e! D6 Y6 e" y  F
压缩
- ^3 v. @  m2 z7 A3 y4 ]- d! g0 `- b$ N  @0 z' m% d5 Q
归档tar包,不压缩1 L5 U, o3 {) z5 t& o* v6 C
5 {2 X4 M9 c( S, C' L
tar -cvf test.tar test1.log test2.log #归档多个文件
5 N1 O' h. X: X1 n7 y2 p# Otar -cvf test.tar test/*  #归档test目录下所有文件
7 B8 }' `/ `2 `% g: ?tar -cvf test.tar *.log  #归档所有以.log结尾的文件
' A- s6 l/ o* w0 ]; s9 O7 e由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。9 B% Q3 b7 n+ @1 L* z2 r0 ]( X
归档并压缩为tar.gz或tar.bz2
$ _$ P, ~) V9 k' v
4 l: }- q4 F+ i这种方式打包对文件进行了压缩:
9 d  d% @( |+ U  Y8 N  Z7 h' Itar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
* [: o  m$ a' J! gtar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
, N- C( z$ ^" `/ A+ `/ d2 {查看压缩包中的文件
) ^3 K" s" p0 B4 X/ J6 `. t
8 e% J4 k/ J% ]9 U; I如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:# Z0 _& \3 I5 p: k1 }/ o
tar -tvf test.tar #可查看test包中有哪些文件8 H, E* |9 l8 ]- N* B
打包后删除源文件4 b' X) |! A9 Y! L; k/ B

- h! f3 D$ h( W+ k2 ?8 U* ^有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:' `! f* O3 c; X+ E
tar -zcvf test.tar.gz test.log --remove-files , [& p0 b( T: U) }$ |. [9 y
打包除指定目录或文件以外的文件
$ z4 E- Q1 M1 j9 P2 F/ Z: w. I% n8 r. n
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:3 |6 Q# {' _! E7 ]4 `& d7 l
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件0 _# f3 @+ ]$ ]  ^/ ~
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
/ ]0 J' `- l3 O) d向压缩包中更新文件7 G) P5 C# W" E: V- }. @/ V. P

; f9 [+ t" Y  L' S8 C例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:) n( k2 u. _# a( f  f+ c/ K* \
tar -tf test.tar --add-file=test #只针对tar包3 S/ n& A1 Q) p$ v$ v
向tar包中增加文件# B7 v2 R& w  {5 b- a: z: v
% A1 h5 L" `2 g
向tar包中增加文件可使用-r参数:+ Q9 N& N( E/ S6 M3 |' B/ Y- S
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
5 `# x' S5 b4 H. J  F& F4 B0 ^5 ^* P删除压缩包中的文件
4 y0 e  Z% t+ I# ~- r& E( M0 P- O2 Q
0 {+ U# q# ~+ h/ k- |8 X6 P. ?, k在不解压的情况下,可使用--delete选项删除包中的文件:$ Z* f- z2 L" W. t! H! L) F
tar --delete -f test.tar  test1 #从test.tar中删除test1文件
" ~) ]( @4 d! j& C  [( B. m解压9 b5 S; x+ ]/ W* \+ E
$ P! k. J! j( ?: r2 O
解压tar.gz和tar包到当前目录, Z+ Q7 q) \; {( N
0 n1 L7 B' ]: F' J- r+ b
tar -xvf test.tar.gz6 a) l# |- I% l; W: u( `
tar -xvf test.tar 7 A' Y6 ]. p/ M
解压到指定目录5 s) ]" T1 }3 i: N% `

4 v  L6 b/ z1 f; I& a! N( B) t, wtar -xvf test.tar.gz -C dir
6 ^9 n& b- L7 u% ~4 Qtar -xvf test.tar -C dir
4 j/ l. U9 _; |6 G, a解压包中指定的文件
) O& H% f$ T% L* w: x" ]; g3 o( t& n( U; `
例如test.tar.gz包中文件情况如下:; u6 c  |" G- j$ O! O. e% b$ V
1.txt9 W  X, N6 j/ f; D# Y
log/  [" @& a2 g, G! C
log/1.log
6 R/ G& Q# o$ j* N1 [; D3 ]. Flog/2.log
9 v0 a' \9 f+ E2 Glog/2.log
( [. D$ V* d7 E+ _+ @log/4.log, E0 v0 Q2 r; ?* J
log/5.log
1 h8 p0 Z3 b1 b2 \  Q& I如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:& \1 a' a( u- M/ W: A% O7 V
tar -xvf test.tar.gz log/1.log
% |% O2 i1 r/ B& @tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
( N: C( A* ]8 y  t* z& H5 k解压时去掉目录结构1 u- L( k9 M: z6 z5 H0 @! e# H; y

. W: D2 y7 G2 h3 [' c0 A- y8 f, I压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
$ p% `  u3 c+ V+ W) P* c( q8 d: etar -xvf test.tar.gz --strip-components=1 #去掉一层目录
2 m" f3 v' c0 b" {8 e6 {解压时不覆盖原文件
" J, f* j  l" q8 O% Y6 K/ g5 L/ I- S. N7 C3 u& R- x! v
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):4 I, d' x" }1 X, f$ `' S- @
tar -xvkf test.tar.gz
$ `6 S. z6 Q: D* S+ o; M% p% M( {特别提醒
. F7 o0 X: _: ?. z" v, N0 H! x4 r. N5 L0 \3 @/ V; g0 Y7 T+ y* t$ o
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
- z) _1 [6 f% E5 p, S# M) yzip/unzip
% S. z2 \1 W/ c' w5 J0 `2 c' X3 w+ W3 H
zip和unzip命令主要用于处理zip包。- p) U7 i/ D( _8 V/ N& Y+ l
压缩" {% Q  e8 ]. L, V- E6 O- u

% t6 H  f0 D+ C5 t涉及参数说明:
! `# q$ i2 h9 |4 N-d 从压缩文件内删除指定的文件。1 E, ?9 j; h; @
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
7 r# o; x) t! U2 q2 y6 A-j 只保存文件名称及其内容,而不存放任何目录名称。! ]) S; v' H* T8 b& U% d" B7 Q! B
-r 递归处理,将指定目录下的所有文件和子目录一并处理。3 M) j! E4 \! b9 |7 |! G
-u 更换较新的文件到压缩文件内。1 n3 t" ^" p& q: {- O- o
-v 显示指令执行过程或显示版本信息。
3 K+ R/ ?& y/ _" d3 u. H' n-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
% ~6 V6 q+ c& n/ ^3 e# P- <压缩效率> 压缩效率是一个介于1-9的数值。
+ F# l4 d! C$ M$ `压缩文件
- i" X6 D2 H+ [* b! N: ~2 y5 y- f( @1 e' m1 A/ g
zip -r test.zip test/ #打包test目录下的文件
  ]1 B1 q& ^7 E0 Z5 e7 yzip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
0 E0 U5 m; K2 [' ]" l指定压缩率打包文件
. x+ q  }* q/ b- f# V
$ y+ s; M$ E% c; zzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长# B  {! |' k; [, u
打包符号链接文件
9 v: z6 r* Q, |, F/ L; u) w
4 _# ]; w, V' I# ~前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:* p1 P: k  Z7 u' ]5 Y0 N0 B
zip  -ry test.zip test
- i, ~5 `! k8 `9 o向压缩包中增加或更新文件
; T& T0 t% y- [1 b; R+ f/ O! |7 o; k6 Q
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
5 Y! u, D( G- Zzip -u test.zip test2 #向test.zip 包中增加test2文件) L# B/ O) T% @7 ]
压缩时加密
) b9 O! Z. X' I/ ?+ }1 n' x+ G# k
压缩时如果需要对压缩包进行加密,可使用-P参数:
! u. p8 r- r1 c% {, d( X; [# b: Izip -r test.zip test1 test -P 66666 #使用密码66666加密* s4 o6 @0 n( ?$ _
删除压缩包的特定文件
( V& w9 p+ ?3 G/ g
8 h, `# j- y3 [0 Nzip -d test.zip test  #删除test.zip包中的test文件
2 U3 X- _5 W# s/ a( Z8 X8 S解压
( i- b0 L2 P6 w- Y; X( F* _# j  f' y; k# C. f6 j8 n. p$ z+ n
涉及参数说明:5 U7 ~1 i' R! ~
-l 显示压缩文件内所包含的文件
+ W& L, y4 }9 j5 P6 \-j 只保存文件名称及其内容,而不存放任何目录名称。& K& |  _3 i4 a* n
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该2 }; d4 N3 V7 {3 [
-v 显示指令执行过程或显示版本信息。9 h/ W' C, h& ]8 |3 v
-d 指定解压目录,目录不存在会创建9 ]9 [8 w( p3 ?% @! S% }3 b
查看压缩包中的文件信息
0 R+ F9 J8 P) R. K6 S* a1 {% ]% K! A1 g4 {6 |: A
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
" ^. g. Z' ^, L" }7 d" T5 Xunzip -v test.zip #查看更多信息,例如crc校验信息等8 o( o, p/ P' ?1 Q
解压压缩包6 Z( z/ m1 f; {" E

+ M0 U; G; `- k& m4 kunzip -o test.zip -d dir #讲test.zip解压到dir目录+ K! G$ ^2 A' ~3 n$ G
解压包中指定的文件
! [5 g3 _2 L- v- `3 T8 ]) U. R8 M. D/ Q# o" O
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
# t' G: q4 B0 K/ hunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录$ m# r" b& t% W; d
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
  A' n% t$ ?# Y2 Y解压时去掉目录结构9 z4 H" h" H3 t9 A' }

: r2 L& C+ ~) n1 w压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:7 B/ C3 ]& j; l
zip -oj test.zip -d ./temp  
5 Q% e) q9 o- d: z+ \$ k解压jar包
% l; a+ P/ a- H8 Y# ~% M3 I6 G# }7 D& L2 X- }" T- J, \
jar包是java归档包,但同样可用unzip解压查看里面的文件:8 p( G: l2 o7 Z- G
unzip -o java.jar -d dir7 ^9 E  c$ x- F) J4 J+ o
gzip
: N/ m0 P2 C. E; o8 i8 l/ `
# t, Z2 f9 {& a. \$ E9 Y! Z涉及参数说明:# S, G1 U  l) r
-k 保留源文件8 }7 \% @# A- a; s
-d 解开压缩文件9 g2 j  r( W: r- W+ c+ w  K& B
-r 递归处理,将指定目录下的所有文件及子目录一并处理8 l+ Z8 ~- I& ]# V8 c! a
-v 显示指令执行过程2 L& h8 U$ p( N
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
  X5 x" l& n4 t( w$ \gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包  {/ c6 W. o! s1 a+ t& L& i. \
gzip -rkv ./* 递归压缩: x8 r; e4 H4 [2 z  V! W/ D
解压也很简单:0 `' A5 n1 y( i$ ^
gzip -dv test.gz
" |* Q1 H) r4 p4 k1 z( N4 o# nbzip2
3 m5 d( L& D, G  V7 o5 T
! i' ^: G. z5 T2 Ftar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:& y( j9 V! {- |8 K1 b& a( t
bzip2 -zk test  #压缩test文件
7 b8 b; C3 R1 Z" D/ Zbzip2 -dk test.bz2  #解压& |9 o8 v; [7 b# ?; U" [
rar/unrar) k& |. X3 [* q! J' i

3 n% w& C, u! t  w  T  crar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:# k2 Q5 E/ `- p: c" ]# z2 k
rar a test.tar test  #将test文件压缩为test.tar' Z' b" A2 |; s* x
rar e test.rar       #解压test.tar
3 ]8 R: N; S" lunrar x test.rar     #解压test.tar
2 ?$ Z% \- Z% H9 N' ]压缩率比较
3 W. ^4 F. F! o  ?# ?, N' A6 V/ ~6 w" |5 e  I0 h* _
压缩率一般来说:# a3 Y" \: W5 N- T( t% w
tar.bz2>tar.gz>zip>tar
& t# {% y. W; q4 e# I. }3 u1 f压缩率越高,压缩以及解压的时间也就越长。
  T6 E6 _4 x. o# R7 h& j总结8 y- I0 ]" Z& J' S
9 V' K, @  m6 ~, A/ s
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
( ~9 a, ?' Q, J- O8 A/ B有任何补充或建议,欢迎留言^_^。- [# P1 W4 r9 b
; u/ A4 R' ]6 Q9 {5 B

" `7 {% e' C- b- ?2 T+ c$ z0 _* z& `3 H
8 `* ?* N3 k5 D' ?

# v, o# v! ?; r. A2 A  h- B2 Z

微信扫一扫,分享更方便

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 09:06 , Processed in 0.067890 second(s), 32 queries , Redis On.

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