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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
3 I5 E* O$ n& f+ }+ Q+ ^1 C8 T

9 Z3 x/ D, e. c2 y3 Z0 h2 U

7 }( {1 h( Z5 _# b前言5 w1 J4 m" T$ ?/ |

8 H6 n8 B" {* D2 T+ Y; W* U7 w( g" `5 iLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
8 e5 t' L5 q  h8 ~: @tar  g' L* E# _1 C! P
- |% _: V+ {5 [7 A4 k8 b8 K
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。1 ]) Y2 B/ l+ f/ J8 U( C; V! q
涉及参数说明:

1 g$ P' S, {+ q9 f7 n/ J  E-c 建立新的压缩文件
4 S' t5 R- s9 X-r 添加文件到已经压缩的文件
7 b2 _3 o' ?* b8 W& A1 H-u 添加改变了和现有的文件到已经存在的压缩文件( X+ a8 @' K, x3 _+ N& l
-x 从压缩的文件中提取文件0 t- Y% }$ E# ~, g, ?
-t 显示压缩文件的内容
' y* D; x4 g" j5 c$ ]-z 支持gzip解压文件1 t* _# o4 k) S8 u, M
-j 支持bzip2解压文件
, Z4 f" d# F, @8 r-v 显示操作过程1 d9 b; _) ^- U) S6 |2 Z0 F
-k 保留源有文件不覆盖3 W5 d8 B) V! n, z; F: P
-C 切换到指定目录
( p- E8 b+ ?3 b: Z! t1 E8 p( Y" a9 Z-f 指定压缩文件3 [7 h; N/ `6 `2 t* v5 P  M

$ K! m' [1 X! u/ T3 p--delete            删除包中文件
0 @/ _9 O% t. I4 J  u+ W! P--strip-components  去除目录
( _; b$ K7 Y0 J. x4 H% L--add-file          向包中添加文件5 H0 x2 a6 J5 T
压缩
; G3 ?+ `! m' k1 r6 G
/ o9 Y  q( x8 I7 t归档tar包,不压缩
" D( U8 A: N# U2 g+ n1 b! `3 p% [$ l% |  E9 \
tar -cvf test.tar test1.log test2.log #归档多个文件( B, M; @. m( c* p/ H3 T
tar -cvf test.tar test/*  #归档test目录下所有文件
1 E. S2 Q& H+ @! ]& Q% wtar -cvf test.tar *.log  #归档所有以.log结尾的文件
2 }2 y* Y# J+ [! g6 D' T由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。6 ]1 _, c" w- }" V- g, y" f
归档并压缩为tar.gz或tar.bz2
. c. }4 _# e6 y% T8 [1 M  f
0 u1 C& w6 `+ y9 C9 U0 ?这种方式打包对文件进行了压缩:
  `# h+ x/ p3 h- t5 A% n- Mtar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
/ n% L' P8 C  s2 [% i6 V. [* Ztar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩2 k. Z. r" v- T; J4 k
查看压缩包中的文件& ?% O( \, {. o+ W- q
# ?2 W( c. N; b+ _( R8 `
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:- ]; E+ l/ s9 E7 ]( w2 K) e; B
tar -tvf test.tar #可查看test包中有哪些文件
% K# i, y# p3 G1 `$ j9 \: f" `打包后删除源文件
2 l/ h2 [+ u$ l5 k4 K: W7 _" ^- K  Q0 f4 e$ ~# m# e0 `4 ?! ^
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:$ z6 E. H6 M% \! {4 R1 M# t
tar -zcvf test.tar.gz test.log --remove-files
& i  z* K8 i, F/ Z" n. g打包除指定目录或文件以外的文件. ]; g7 Q9 {6 y! v7 \0 C# H! ~
: p) ]0 N4 g7 G; [; L
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:0 o# m- |; a5 e( i
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
( s1 J% ?7 u3 R4 Q6 D% \6 `+ {( W这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。2 l$ C( Q9 `! }" b4 a
向压缩包中更新文件
7 ?. a% i) k0 d9 @' ~' P3 l
; d! V, k: @! Y* f% \1 Y例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
+ D5 a/ q9 L4 x9 E" T4 Etar -tf test.tar --add-file=test #只针对tar包" w6 F* T) Q3 `% N! o) L9 Z' X
向tar包中增加文件
1 \, ^9 _$ _4 }5 }! \8 V/ D$ x# N' M8 j% T" }
向tar包中增加文件可使用-r参数:
# ~/ S! k8 G3 L! W2 S- D" B- mtar -rf test.tar testfile #在test.tar包中增加文件,只针对tar/ w) A* k9 V4 k- m
删除压缩包中的文件
1 _' R5 g# j. m$ H& _0 _. o
9 D- o/ q! D. F8 F. n8 M在不解压的情况下,可使用--delete选项删除包中的文件:
! k5 }6 H  e8 ^6 l, c" ^5 Z# J( htar --delete -f test.tar  test1 #从test.tar中删除test1文件
3 `6 ~  D+ O9 k解压/ V* \) k" B, Q: h* p$ N( W

2 Z! D/ R. x' `( ?& \& H解压tar.gz和tar包到当前目录, O- P8 P) o8 }7 ^) j& v

  q2 i/ N) S8 s! }3 ~. T' Ctar -xvf test.tar.gz: t- Y' T" O! C( ~+ h( E, n4 f' c
tar -xvf test.tar 4 ~  n6 e  k( y
解压到指定目录& }6 p* d6 F5 A. V9 ^

/ m  i4 z- n* a2 G( l* A5 O7 ftar -xvf test.tar.gz -C dir
6 a$ }( A! ^0 P) Star -xvf test.tar -C dir% O/ k# s$ I4 @0 P% M4 C# A
解压包中指定的文件
+ Y$ L1 Z+ |, r. Q- o' T+ k* h! ~8 W: ~) g
例如test.tar.gz包中文件情况如下:6 w( l$ p2 \1 u0 f6 J' H0 ]6 N
1.txt
2 N+ B& E7 H. f2 ^log/
' V' {, O1 n, G5 b) R2 Alog/1.log
0 h' v6 G9 _6 u- U. D! Y* clog/2.log
. N3 Z& v, {% I" [log/2.log2 i/ F. z2 J, v- J- w
log/4.log
, |9 M, U1 U  z, S( Elog/5.log
6 T  \  e' I, e- B' E, E. t4 v3 Z如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
/ T" w2 w" K( F( {6 p6 Z' _( L) ~tar -xvf test.tar.gz log/1.log. u8 |' F+ X- h- x- M9 ~8 N. O& F! V
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
6 k" E3 J0 v1 y解压时去掉目录结构( d- m% L" B, W% j7 {
) L7 e+ F8 }& z3 p
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
' k3 Y  ]4 f0 X, atar -xvf test.tar.gz --strip-components=1 #去掉一层目录3 J0 I, ~% W+ ]# M! k  i
解压时不覆盖原文件
; r2 o$ H1 O/ V) R& r2 B
. p- R7 I0 B0 m0 B% {* X  [* D当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
3 E5 l& q* h) A2 {  b, X. Ttar -xvkf test.tar.gz
6 \" X- ^" R! W. ]特别提醒
4 [) L( g3 h# e4 W! T3 L+ T# m5 D- T( H/ o0 D- j5 u0 \% f
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
0 [9 g" D  X# {9 {$ W& D# azip/unzip" {- f/ V/ _2 c6 I

+ q$ B) T, F0 l/ d, pzip和unzip命令主要用于处理zip包。
9 ]. ]0 d2 C& m- M% ]3 V- ^: _压缩
: p: j( `- R) s6 r
+ H2 i. n1 h: F0 X( [* @9 \涉及参数说明:% H& ], ^& \4 A2 k" K
-d 从压缩文件内删除指定的文件。
* O. J% V" T. p. l2 Y-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
; A0 C4 w$ h+ z-j 只保存文件名称及其内容,而不存放任何目录名称。7 p/ P- ]; g& t/ _0 n4 z
-r 递归处理,将指定目录下的所有文件和子目录一并处理。. c5 L; {/ }* Z5 E% [3 T6 {) A$ z
-u 更换较新的文件到压缩文件内。- }7 C7 {+ h/ W# p$ V( l5 h; f0 q
-v 显示指令执行过程或显示版本信息。
' d9 [! ]! x) N& F) P# f- g& B' k-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。- O% w$ E* s8 S
- <压缩效率> 压缩效率是一个介于1-9的数值。
+ I) a; v8 v: v5 }1 R1 R( n" x压缩文件
6 T" f8 n' J) \9 u$ S
$ D$ B: O* a/ H. bzip -r test.zip test/ #打包test目录下的文件4 i$ m# y2 T  b% G  |  ]
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
& T( E  U- t( z  |/ f指定压缩率打包文件/ y, Q3 B! b" e( o

  |; M" T! A! g# U! ?2 bzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
: ~, z+ V4 m: U2 Y打包符号链接文件
& l. n& o  m6 J) F% X2 W' v
3 T+ Q9 U' {8 S4 S前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:3 k( s% y) O% a' k2 ^
zip  -ry test.zip test
  o/ G  |5 g! ?# R向压缩包中增加或更新文件+ L: m1 g" e% `/ @. H6 V9 x' e: S0 t* S
1 M) ?$ J3 Y. ^- R7 t  i
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
- o% {, I& r- bzip -u test.zip test2 #向test.zip 包中增加test2文件, K4 y* c% ?; x) r% @
压缩时加密
5 D, j" F- {/ N$ K1 z8 P( }0 R. L+ Z" T
压缩时如果需要对压缩包进行加密,可使用-P参数:
/ n+ `! w8 a- t* dzip -r test.zip test1 test -P 66666 #使用密码66666加密
4 @% C7 g" X, `7 Q# D删除压缩包的特定文件/ k  J. F1 O! t( y2 G
1 E+ |0 i0 q+ |
zip -d test.zip test  #删除test.zip包中的test文件5 P2 ^9 E7 h. z6 x6 p# U
解压2 w. c  i+ O) R& a$ I  \5 j

  s0 g  J9 K( r6 x5 C涉及参数说明:, g4 g5 E$ Z/ w1 [) k+ q) h
-l 显示压缩文件内所包含的文件# R9 V% l/ |& M  c# A" k
-j 只保存文件名称及其内容,而不存放任何目录名称。6 D; ?$ ~. c3 s, @- G2 h3 ~! R
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该6 g9 S1 y5 g% K- h* z6 N
-v 显示指令执行过程或显示版本信息。
3 F1 J/ h" _- E: ^-d 指定解压目录,目录不存在会创建
1 A' @' T+ B% A' B) N查看压缩包中的文件信息1 H9 s4 m; @& B' _

6 O8 o: K2 D+ R7 w  O  _/ Funzip -l test.zip #可以看到压缩包中的文件名,日期等信息0 t! a( g- ~( @0 y/ x$ c- r  c) r
unzip -v test.zip #查看更多信息,例如crc校验信息等- Y) h9 H" k9 S5 \
解压压缩包
/ M/ c/ V2 X8 ]$ ?8 c( K- Z9 _, Q" u# e1 ]% _( w2 L
unzip -o test.zip -d dir #讲test.zip解压到dir目录
  d- \' x: Z+ u& N解压包中指定的文件" S  r( l) P- T
/ S8 Y8 Q) `) e; B( U: r6 z% p. n
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:$ F1 P% Z. o& a, i9 E4 t
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
3 D1 ^4 C  A) y- ^, qunzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
, |) t% V# k' y/ Y# {( `+ Z4 r' Y) D解压时去掉目录结构' _7 @5 u) v$ d0 m4 y6 o/ b& p

( v  x2 \( O$ N# R: ]6 a压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:0 Z. t+ q8 b" B
zip -oj test.zip -d ./temp  
) u" g, E" Y4 Y% R0 q解压jar包% r* O( y7 W& R  u' _
" R0 Q. \% I$ n& T4 x! B2 v
jar包是java归档包,但同样可用unzip解压查看里面的文件:
  k- U* j2 L/ Gunzip -o java.jar -d dir
' D+ Z" t# t7 z% l. \% E( xgzip* J1 b0 e, V2 W8 d

( F" h9 R( B7 i! ^涉及参数说明:' U, f( n' l! i7 ?4 j5 u/ S. ^6 B
-k 保留源文件2 y; n! z  I; k7 q! r
-d 解开压缩文件7 O! _$ K" u0 D& T4 l( z
-r 递归处理,将指定目录下的所有文件及子目录一并处理2 [0 ^) M' E/ s& S6 B0 a8 [
-v 显示指令执行过程+ I7 `, z* N: b' Y) R' y
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:& q- X1 v" @6 C# c4 c" M
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包) t6 L& E. k4 T, y5 y1 L# Y
gzip -rkv ./* 递归压缩! i* n) ^) F7 k8 E" b
解压也很简单:
9 Y( F% f9 `! N. E0 p9 k* @+ Ugzip -dv test.gz % c3 v2 a( U: Z' Z  S9 e
bzip2
; ?% B9 N6 }: b* d0 T; R. V
6 z/ n% W0 `$ o- C9 Htar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
% O0 Q2 X. C9 J/ B9 ^- {% I% E6 [: sbzip2 -zk test  #压缩test文件* v- c* p: j" J4 X6 ^6 p! C
bzip2 -dk test.bz2  #解压2 W$ w  Q0 G" u+ a
rar/unrar; r5 W1 f6 N# S2 h: b/ f, d

6 h/ m, r/ r7 ?& P4 X8 xrar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:+ c1 h( i0 A, H0 g# x% C
rar a test.tar test  #将test文件压缩为test.tar
+ F8 w( ~! V! Q! f. L' o, C) m) r5 Arar e test.rar       #解压test.tar& x3 ]4 i# L  y
unrar x test.rar     #解压test.tar$ d, k! Q* r/ t) X2 b1 N- H
压缩率比较8 O9 M  K& |6 p) @& L: W- q/ g% v

. g/ P. c/ Z: r2 E# E, R' Z压缩率一般来说:5 |. Q2 M/ V/ V3 y$ j* r" n
tar.bz2>tar.gz>zip>tar, }; v: e4 [( `
压缩率越高,压缩以及解压的时间也就越长。. ~5 G" N% t6 D$ J
总结" t! ]! Y7 r. H9 K

5 j# \1 S$ i6 I9 Y" b8 `2 {3 S) T对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
6 y8 U1 G# {$ h3 L! @有任何补充或建议,欢迎留言^_^。
; O7 k0 h0 e3 K& `/ `0 l( d0 x
2 ~5 i9 H. m3 t4 p! T% h7 W  ]. ~4 K
' j, l9 T' r9 Q0 [6 m: O, Z9 ^
6 B# A9 }0 x3 x6 U5 s# ^. d
! B2 c; [) ~2 |' A& M! y& R" C

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 09:46 , Processed in 0.067442 second(s), 47 queries , Redis On.

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