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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
4 a- c* \8 \' m: F+ W
' J+ r( a* @( ^4 u& W/ z
2 ^$ U) Y$ }! A5 J' x$ e
前言1 F2 r7 ?/ q1 R3 l9 F

- z- _* A; h2 S4 m7 k5 {: _Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。# P3 }* q# e3 u1 g4 g  @
tar
" K% a+ S9 E$ @/ i! o. A- f
6 d8 i  j. W  `. utar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。7 e" d( h) O. e) U: n& i' F6 Z: Q
涉及参数说明:

0 y' e5 B8 g6 ?5 t1 S$ U6 n-c 建立新的压缩文件: u; w% c$ i6 I/ j; E; O2 z2 X$ J
-r 添加文件到已经压缩的文件
" x' ^/ T) E  |( o  ]4 [8 {-u 添加改变了和现有的文件到已经存在的压缩文件
1 D- ]% Z8 h2 `/ L$ }& o" u-x 从压缩的文件中提取文件
( ~8 v% p% x; N7 O. A* h-t 显示压缩文件的内容9 B5 H) y  k6 C" w/ N+ D, }
-z 支持gzip解压文件2 ]9 y. Z' j6 m' d- b7 Q
-j 支持bzip2解压文件" @; g8 ^; ]2 O4 k' V
-v 显示操作过程
) g' u  @- _+ ~7 n. I-k 保留源有文件不覆盖! ~% i1 Q& m4 j: ?
-C 切换到指定目录0 X/ W, d  g! P! Q2 g/ Q
-f 指定压缩文件  L8 @% a9 F7 I( D  v) N9 S

! Q3 h+ H' ]. {3 B. @5 v" ?! V4 ?/ F--delete            删除包中文件
1 [. Y7 Z1 n* r* O1 i) A: R. q! r--strip-components  去除目录
0 f- p2 j/ B) l, z1 t: t0 {--add-file          向包中添加文件
! L$ G+ W0 ^; X5 \: x压缩
3 L3 X8 k7 W1 Q( B. g8 m9 K" n% X6 O# z: J- b
归档tar包,不压缩( m9 H& J, H% ?; K* ]0 p* b

- P( K6 m5 I- T# G  i( h7 z$ ztar -cvf test.tar test1.log test2.log #归档多个文件" |& J7 ]& o" X3 y
tar -cvf test.tar test/*  #归档test目录下所有文件
9 w7 R# d8 s' k* E) _tar -cvf test.tar *.log  #归档所有以.log结尾的文件 3 n9 a" W0 ~7 V& V( V+ B
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。0 X$ C0 H: S% d  p
归档并压缩为tar.gz或tar.bz2( c0 P5 _: Q% F9 o+ `1 M
, h4 r' k+ m- A
这种方式打包对文件进行了压缩:
. _% X/ `1 A, s1 ltar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩) n% S) Y9 p" @7 |# [8 r' k% ^
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩2 S; j2 [0 J/ e: U
查看压缩包中的文件8 c) K- m( }4 V3 u
6 ]0 ^& I3 \- D" [
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
% S/ C1 `9 D8 b- `6 ftar -tvf test.tar #可查看test包中有哪些文件7 ^& I4 I, k  n  v5 j
打包后删除源文件
2 Z, F, d6 B% \* A. s/ y; i; y0 S/ H9 ^* [. R9 l+ r
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:8 ?0 X7 Y' ?- P& U6 T2 e& A; X
tar -zcvf test.tar.gz test.log --remove-files
6 ?) ~, _! G( I' s3 c打包除指定目录或文件以外的文件- s: j+ ~% x4 G2 q9 C& J

; K$ ~! P$ d- d! L- r对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:0 o+ |0 v; w5 U* E
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件+ P5 f1 m" z$ R3 \+ j3 @: E; x" f
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。2 n# J+ V# o% }- {2 J# M& @
向压缩包中更新文件- s. l# {4 m( W' Y. F" S$ H
. a/ f7 V4 e' [) J' B1 ~) @3 A: E+ ?
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
% Z' C+ K) {, L) L5 Vtar -tf test.tar --add-file=test #只针对tar包
( K% b% _# u( f' s( q向tar包中增加文件
  z; v3 j/ x5 B- R$ T9 y5 w- x& v# U1 a3 ~0 J0 q& F
向tar包中增加文件可使用-r参数:# {, X( E8 [0 e, \) h
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
/ J* ]0 X0 \6 L4 O3 J% S0 }删除压缩包中的文件. W+ x: C  p/ W4 q1 T
5 \/ X& {5 w$ l3 B) A
在不解压的情况下,可使用--delete选项删除包中的文件:1 T3 F+ j2 D0 @  m4 p' V# o4 X4 q
tar --delete -f test.tar  test1 #从test.tar中删除test1文件( P. c  X( n2 H2 t% B
解压
# ]# i" q- d  M, e" S7 C( O5 y% S! t, M3 o
解压tar.gz和tar包到当前目录6 {" e5 j; i% m2 E; I
3 n  L0 O5 x  r) o& \3 t
tar -xvf test.tar.gz" U/ a# S/ O# }
tar -xvf test.tar
4 w7 _- x0 J9 E8 |- D解压到指定目录
: }" K" f9 E+ n5 Q2 a, n
& G6 a! l5 y2 J4 Q7 ~! Htar -xvf test.tar.gz -C dir; N! Y6 Y3 e9 e* A8 P
tar -xvf test.tar -C dir
) U$ O# i# _9 i1 W- X* \6 H7 Q1 K解压包中指定的文件
  R2 |4 U6 G0 M* j, T2 L$ p& x2 r
1 U5 W) A) x- Z& x, ?% Y+ J2 W例如test.tar.gz包中文件情况如下:) a8 D( ^2 X; o/ s8 A
1.txt
4 Y# s  \9 M  {0 f. S2 \log/  o/ S& Y% L% B7 p( [1 I$ \; J
log/1.log
0 [8 O8 ~) i0 {+ {# V9 P. Vlog/2.log
. m7 P+ v9 r: |6 |, Klog/2.log# c6 j9 Z* X0 Z9 l$ O0 Z9 L
log/4.log2 j0 Y5 B/ x) A+ G
log/5.log
3 h& f6 r, \. J- x) f6 N如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:7 x- Q' P. i9 \" w1 n. l1 u' ~
tar -xvf test.tar.gz log/1.log
+ A3 a# z+ ?( \0 ^7 Z& r$ Otar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
. B. B, ]/ g& L; w2 m+ A解压时去掉目录结构: ?: ]" b8 ~. Y& l/ \* u
5 v8 A+ @1 @8 |* c$ _' n. V
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
+ M9 g. g" T) i% Y% J; Y( }tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
6 o0 ]* Q# T' ^% u: {) _1 w解压时不覆盖原文件
# x6 n' f7 t3 g9 B  a) D4 d. c4 ?  J4 k# n0 A/ p1 _9 \
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):( T/ m; e) G8 g. _9 r8 ?
tar -xvkf test.tar.gz* B# f& p6 [! y* x
特别提醒1 \4 N. Z; a# h" J
/ z9 }% y$ a6 U5 H2 C. @$ }  v
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
$ o" ^) k% h5 h3 U2 ]' U7 a( `( Y) nzip/unzip1 A3 n5 G# U& \6 w4 x

! H( p# t4 |. n; R9 S7 Z# ]zip和unzip命令主要用于处理zip包。
) F2 q7 S; l, o& k压缩; y7 }- z1 u" d, b( O  X4 E4 ~

" r; G+ z% h, @$ I* e( A涉及参数说明:$ S7 T+ |) Z0 f+ Q* i6 O( ?
-d 从压缩文件内删除指定的文件。+ @+ c5 |$ @3 C/ u: }# S/ a* _
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
5 q+ s% o  V% B9 B-j 只保存文件名称及其内容,而不存放任何目录名称。
: c* C! d+ T- y4 S-r 递归处理,将指定目录下的所有文件和子目录一并处理。% ~8 O" Q/ K4 U. ~
-u 更换较新的文件到压缩文件内。$ t/ V$ C5 V9 q6 z) x( T8 E
-v 显示指令执行过程或显示版本信息。
7 S9 y3 m3 }) G-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
( O7 S$ t& k! h" Y( o. f: x- <压缩效率> 压缩效率是一个介于1-9的数值。5 L4 f- P$ l& J
压缩文件* _4 c1 Y2 Z  k

; n. }9 O& b7 j8 Vzip -r test.zip test/ #打包test目录下的文件  y* ]" i, K, e% W4 c
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
7 a0 l3 h+ d4 z1 |' N& c  h指定压缩率打包文件
  _/ h; a4 Q" }, \) K1 ]2 D: M! p* _& J
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
) t1 W1 T! g2 w打包符号链接文件0 q1 f. S1 q+ w; J* U  q* r* Z* b

! K3 g( C9 e  @4 d前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:6 m% O# Q. ]. A+ O3 d
zip  -ry test.zip test
1 n$ V) W& D. l+ A$ o, Z$ y: y向压缩包中增加或更新文件( |- Q% ]' w& k- _# M

6 G7 N8 V& t1 D0 c+ i) T# ~4 G3 a有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
: x  P; o6 E! w/ ?& {0 Lzip -u test.zip test2 #向test.zip 包中增加test2文件9 x% p5 h+ c5 A! Q% P1 r  }# f& Y  M
压缩时加密
$ F2 s( N4 c  h
" |- s9 ?, f- ^- T7 m压缩时如果需要对压缩包进行加密,可使用-P参数:
6 S1 H, N# E* a0 z8 K* gzip -r test.zip test1 test -P 66666 #使用密码66666加密& E* C: D. x% A( `
删除压缩包的特定文件
* h; c$ G/ V/ c/ M- Z- b
/ X, U4 A( E# O/ ^. ~zip -d test.zip test  #删除test.zip包中的test文件+ ]6 I3 G7 P' [: A! y. H$ K  c: ~& v
解压- ~) G: j6 x9 B& t. d$ J3 j9 d

, I8 y; f0 L7 x' j涉及参数说明:! ]5 U  B7 Z7 B
-l 显示压缩文件内所包含的文件* C) \/ A3 h" I6 j  y. S; [: [
-j 只保存文件名称及其内容,而不存放任何目录名称。
) Z7 J/ l- K, G/ ]# s3 K-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该# u" c3 f) z2 C) ]1 n1 q
-v 显示指令执行过程或显示版本信息。9 A9 {' x$ o0 n: R8 }. c
-d 指定解压目录,目录不存在会创建4 _5 z! r0 @( I$ i  [6 Q  I
查看压缩包中的文件信息) Z  T3 D# i+ B5 i& ]9 r3 W" `
: ]7 h: F3 z3 V* u  I3 o
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息/ y8 }0 v1 o$ w1 z* O
unzip -v test.zip #查看更多信息,例如crc校验信息等) _# u; O, i  @4 h
解压压缩包9 _$ I! ]1 u$ k. G" N& S, e. n

" |  ~* F8 @# w; n" ^0 }, gunzip -o test.zip -d dir #讲test.zip解压到dir目录
4 n) v& h" p6 X6 V! q; O7 n7 Q+ G解压包中指定的文件. M: j6 L6 D/ ]  E# M
" Q# F+ b3 M3 e2 f4 s
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
- A1 l" s2 c( H# O: j1 tunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录& S/ p$ f: B% b* _: o. I
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
; m5 ]& z, q( @2 F解压时去掉目录结构' L- \7 ]9 I! ~8 M; L. N
, p* D  s$ D( F2 o6 |* i
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:5 h& ~; l$ p8 Q. l. }  x
zip -oj test.zip -d ./temp  
+ F+ m" C' g2 T  j3 u# I解压jar包
6 m1 x: Y1 R2 c9 Y- h
2 m, k) Z% E$ f: q9 L6 Qjar包是java归档包,但同样可用unzip解压查看里面的文件:
, |6 e" b4 ~$ x8 d0 a. gunzip -o java.jar -d dir
1 w# ]/ Q7 }# q8 ]9 j6 \gzip
+ h$ R4 D5 ?7 h9 b
; a; g1 ~: w$ h1 A# a& P- |4 _涉及参数说明:
& i( j! M. V5 o3 j! f7 ]$ b/ u-k 保留源文件
# h* K6 ]8 n3 m; L5 c5 G-d 解开压缩文件# R" l3 i% o/ X/ |
-r 递归处理,将指定目录下的所有文件及子目录一并处理
. I% K4 D( S! S+ V-v 显示指令执行过程) t" Q0 ^' [6 t5 X4 K" D4 ^
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:5 r* ]+ {4 g) e& l+ }! b2 H
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
* W( ?9 q: t" Q+ ^4 rgzip -rkv ./* 递归压缩. y) w" c: L4 E+ `
解压也很简单:
7 D3 d  K. b% \. g2 Ygzip -dv test.gz - J! _8 C0 M6 k7 ~
bzip26 O5 O8 q/ i( f9 g. o! G

9 z9 T: \8 V: w- \. g$ Etar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:2 ?' W2 H+ K6 o6 K
bzip2 -zk test  #压缩test文件
/ J5 _. y) M) T2 ]" x/ zbzip2 -dk test.bz2  #解压, H# i! K/ l4 o2 E2 d
rar/unrar1 }, M; |4 G8 s7 Z# ^8 y$ r0 u3 P' j
) _5 Z$ R9 p, U4 n7 `9 H( R
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:
! F9 d. V+ R! g# z% L9 [rar a test.tar test  #将test文件压缩为test.tar8 p7 e' w$ Q, u8 H2 W; a
rar e test.rar       #解压test.tar% k0 L8 y- r4 K8 C0 k$ r5 d
unrar x test.rar     #解压test.tar/ Y! \! t' j' f* h0 ~
压缩率比较
& F1 r3 j4 o% C8 x9 X8 S8 p- ?, M$ r: |% x8 A5 D! y6 G/ ^% b+ G
压缩率一般来说:
, M& l3 p4 j8 dtar.bz2>tar.gz>zip>tar
8 V! A' Z+ U$ W1 P) F0 E4 X. c压缩率越高,压缩以及解压的时间也就越长。
( h* y* N' A- Z& P& E总结
9 d  b, v8 E( \0 ^: i# r
5 d9 u- C+ e+ b  j( A7 U- e  c4 \对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。4 U& Y* G* J7 ]* E8 J
有任何补充或建议,欢迎留言^_^。' w7 d( f; _  I9 ?  s) m, q: m
+ {: [9 z( a. R$ d1 \  F
, ?" Q0 Q' U# s4 {
( ]' {* _  l/ X" h6 R

$ c) V5 A  Q1 A- Z8 p

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 00:49 , Processed in 0.066375 second(s), 32 queries , Redis On.

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