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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式

* p7 ~0 o6 B: u  ]* O; y  z6 C5 c5 k- e8 R2 O% g
: f) o+ K  |- s4 S7 B+ r
前言2 A/ w# }% T8 N9 r* ~2 m6 Z
  D% |) Z! v( [- v
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
( ^: F( [  U# a" T9 h4 x. g# etar" I+ r# e& X4 q$ T6 W

" ?6 R. x' g; q  ~- ]0 _tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。. y) V! j# L  l9 P9 P5 J
涉及参数说明:
) R2 z: S0 y# g- T! }1 [5 B
-c 建立新的压缩文件
; S% \0 J7 [9 F7 ^/ C-r 添加文件到已经压缩的文件% O% I- p$ V  S$ J) l) P, U# W1 @
-u 添加改变了和现有的文件到已经存在的压缩文件" Q0 J9 b' F4 ~* {$ x; N2 X
-x 从压缩的文件中提取文件9 u) I: P: g' `) F# h7 o. f: \* O
-t 显示压缩文件的内容8 D3 y! u7 G4 Z8 J. G& ?
-z 支持gzip解压文件
+ G( {& b- f1 Z4 }-j 支持bzip2解压文件1 m- P+ K- s' Z
-v 显示操作过程" x- o# Z/ H& l+ k$ i4 D/ ^# T
-k 保留源有文件不覆盖
( b4 U8 z- g  e! ?-C 切换到指定目录) B3 y/ \! m5 M, G2 O' Z
-f 指定压缩文件
# K& Q. u' E0 o; Z2 O* c5 g( h& z6 k
) M" i  `# Y  t$ R2 w, H: @2 G--delete            删除包中文件
: z) j9 ~1 a8 w( z! \- ~--strip-components  去除目录
+ y3 Q6 q1 P1 O; s9 i# f8 w) B--add-file          向包中添加文件8 V( {" C0 f1 j3 @* A# U9 v7 [
压缩
4 C7 C$ n/ `$ g2 T- M9 v/ \. s% J8 z5 h3 ^
归档tar包,不压缩
5 u! w" A3 x4 x% R6 d; M
5 A: i: {) S7 O; ztar -cvf test.tar test1.log test2.log #归档多个文件7 a! O4 ^; |, `
tar -cvf test.tar test/*  #归档test目录下所有文件5 C% ^8 ?! V  C
tar -cvf test.tar *.log  #归档所有以.log结尾的文件 & k8 t% s  b. I1 J8 v+ e
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
% j. h8 P1 u9 Y归档并压缩为tar.gz或tar.bz2) X+ t/ b. _1 N$ s: y

1 p# T, j7 B4 @$ g' `/ }$ n这种方式打包对文件进行了压缩:: I* s. n& V6 P. i) ]/ }
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩  H% N) Y8 d8 _9 h9 e7 c& ^
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
( t+ r) G9 h7 B% n9 g3 \) G; C查看压缩包中的文件  S* [0 b0 n2 E& h( p! O5 U
( ~6 C& D! k5 a7 ?5 ?% h
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
5 T- |: C  M" v! Gtar -tvf test.tar #可查看test包中有哪些文件' {. C$ ~" N# K( M' _
打包后删除源文件+ n- j0 R" l: C5 s+ r
* T3 H% Q- `6 y# d5 S) S" m9 d
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:8 q) u, I  B$ I& B! x
tar -zcvf test.tar.gz test.log --remove-files , ~1 j$ \* k! S  U# N. G- K- ?
打包除指定目录或文件以外的文件/ G* W$ k& N2 x

" w0 a- @8 z8 {% _  R5 e9 H+ C对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:) a/ l3 {5 ]' U+ g  A  t) A/ |
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件$ K) p5 Q: P* J
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
+ t. y# j2 P4 e3 v向压缩包中更新文件
9 O3 D  ]$ l( j' Y, q$ F1 a" Z
* i% E3 `* H' A* j1 j例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:% w4 z- x0 F1 D8 h/ `) Q7 r/ m
tar -tf test.tar --add-file=test #只针对tar包
9 |; z! A9 _3 B向tar包中增加文件
$ u! F; u( a2 Y" p' [6 \" E2 J. z* }2 n& d; r9 C# _& y4 ~
向tar包中增加文件可使用-r参数:# Z, X2 i: s# J# E' N+ f% h
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
) I9 G+ `5 [5 {0 o/ I' P2 [% [删除压缩包中的文件4 W# A+ Q" G5 k, [: n

. Y5 K0 i- h9 C在不解压的情况下,可使用--delete选项删除包中的文件:
- f7 m, z1 C2 \' ~  G  e; ltar --delete -f test.tar  test1 #从test.tar中删除test1文件
* B3 G8 r6 v* d& d解压% ~# u$ {. |6 K8 B* Y, [: @  k, E, y

' d( N) g/ |3 J& ]3 K解压tar.gz和tar包到当前目录$ A. T6 v5 L% j% b

7 I- V8 |  @! {9 }3 btar -xvf test.tar.gz
5 t" @# u, d3 mtar -xvf test.tar
4 d2 R3 g6 Y6 c0 }: e解压到指定目录* O* G; H4 M8 O
7 B6 n0 R* }5 W
tar -xvf test.tar.gz -C dir9 j4 v& H- C4 g! b
tar -xvf test.tar -C dir& n* |6 U4 I/ |5 p$ [* e
解压包中指定的文件4 G. i$ r) ]# G) O2 ^

0 _. ?9 c$ u# f" e% {) _例如test.tar.gz包中文件情况如下:+ C- v: C+ g, [1 k
1.txt1 {1 `  y: C+ u
log/, p" j( L& S( w( j& h! N6 i0 U1 Y
log/1.log
1 E8 U2 t. d- _, Xlog/2.log2 @# C2 K3 `1 S' ^% V: C& b; x" Z
log/2.log
8 ]$ d) W# J- }( G) W- Xlog/4.log+ D/ [. |( z+ g% F3 J; t0 C! ]9 H
log/5.log0 H7 |" \- ?/ I0 j
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:! {8 K7 [/ x% g) |% G, n; p! C
tar -xvf test.tar.gz log/1.log. W  l' c9 P% M* N! y
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
# y0 l' q4 A2 w2 f, C1 P解压时去掉目录结构9 Q2 P5 ~1 e0 S5 e% d0 V8 D$ J
1 j9 T" p  i$ }( G  |. M8 F- S
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
3 [3 I, i) V; Ctar -xvf test.tar.gz --strip-components=1 #去掉一层目录' d5 U; [- V  e- B
解压时不覆盖原文件0 V0 L3 s. @. O" ]  H$ T! A( v$ L

' {; r, I; O' s1 T1 i2 a当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
* t1 p: M6 ~6 _& |( C+ W. dtar -xvkf test.tar.gz
3 v9 F, }" T7 b; a2 E; T  s, }特别提醒) W5 v, @2 y. U8 p; p# `& q
- R, ]" b7 P5 O; G
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
) ?$ j& Q" i/ a# Q- Yzip/unzip
' W, H  Z3 i* d4 y; P6 L  M
- \7 h+ J9 t" J; y. Uzip和unzip命令主要用于处理zip包。5 \, v3 Y  Q. M6 @5 B/ m$ n
压缩
  n( m* T; ~! r) [8 k" ]
9 c1 v) D+ Y9 r8 \# w7 C, n涉及参数说明:( B3 o7 A  Y! J) `4 o
-d 从压缩文件内删除指定的文件。& B+ U; L$ N. I4 G) C% C8 M% y
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。. E) b2 [7 `3 P5 ]  ^
-j 只保存文件名称及其内容,而不存放任何目录名称。& P1 V$ T4 y* n0 t) f" N
-r 递归处理,将指定目录下的所有文件和子目录一并处理。$ w2 L! D; R( ?' b- l& n" U5 M
-u 更换较新的文件到压缩文件内。9 T6 I# z4 H% |4 ]" }
-v 显示指令执行过程或显示版本信息。
) g% ^( H8 H& u; s! `7 u-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。) m# p, _, ]( F7 ]- G7 U0 n1 A. D
- <压缩效率> 压缩效率是一个介于1-9的数值。
" \! a  Y# V$ ^# ^- _3 I3 p9 L, B压缩文件
( x' F! K% ^. m( H3 h5 ^
* W! k, D  D; j( f" tzip -r test.zip test/ #打包test目录下的文件5 E/ d+ t8 d( ^
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录* J: E1 b( O) X1 b- i
指定压缩率打包文件
/ u7 i; O2 U* a# h; |" T
9 S+ B" e4 g1 S1 \zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
8 K$ A7 K4 |( |8 k打包符号链接文件
9 d' {8 V* Y/ P! G: {- K4 K( G9 V) ~' @* d" }6 S
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
& H% s. F& ^( M: m: {3 _/ I4 Nzip  -ry test.zip test
  K+ D6 C- b  `3 h/ Y向压缩包中增加或更新文件! `9 T( E3 ]: J$ ~# c4 \; C3 c/ L/ O
/ P- X( E8 k3 {( ?- m( Z9 [5 d
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
( n) ~' U, t7 ^$ _7 D+ Jzip -u test.zip test2 #向test.zip 包中增加test2文件; u4 e( l+ k6 V( t9 h$ E
压缩时加密
; u+ M+ L! u/ u7 o  g1 i2 J0 \. F: K# c/ P6 ]" o, [) x5 I
压缩时如果需要对压缩包进行加密,可使用-P参数:
# v+ i# O* K* O9 d( c! Zzip -r test.zip test1 test -P 66666 #使用密码66666加密
. H- V2 e# _" f: s% c6 A删除压缩包的特定文件1 ~4 H) T" F& w4 G4 L/ ~
6 D- T+ G  r3 K# j
zip -d test.zip test  #删除test.zip包中的test文件, ^+ l. C6 |# M$ ~
解压
$ |+ y' {8 l4 f6 ]
$ _( H; i. p. ]3 ]涉及参数说明:, D8 l' N' J3 L# p2 F
-l 显示压缩文件内所包含的文件
5 `) U& ~  w$ F7 q- k9 U. V* ^" |-j 只保存文件名称及其内容,而不存放任何目录名称。! P- L- F) I: x: C/ @
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该$ }, R5 N! b7 F
-v 显示指令执行过程或显示版本信息。
; N2 J# l! p: F-d 指定解压目录,目录不存在会创建/ ^, q7 a- f! @; l8 H
查看压缩包中的文件信息
* z* Q1 C/ v9 I/ K$ ?3 v5 I" y6 A6 B* ~. d: D& m
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
5 s1 `, p2 p1 S( r" cunzip -v test.zip #查看更多信息,例如crc校验信息等1 t& ~- L- e& K' K3 n5 X$ i
解压压缩包; Y( Z4 g. ?5 x" U; ~! ]6 p2 w! k# ~
  ?3 b6 N. F: w' q0 {
unzip -o test.zip -d dir #讲test.zip解压到dir目录
0 I: w! \; X( D* E' o" m解压包中指定的文件0 L' R; D! V; C" R. L, H2 Q8 x# S

* S$ |4 l3 w* D$ m如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:# a; r( ?. e: x1 r2 M  R
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录, W; f( {/ t0 k- k
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
: l9 X9 d2 o. t* B5 K0 l( p解压时去掉目录结构# d. B! f) u1 U0 M9 k0 v

2 W& [5 [! C8 ^5 ?% Z4 V' i- c% @压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
2 i. W2 k) F7 f4 u: I4 _zip -oj test.zip -d ./temp  
: Y: L1 p/ t& d2 K, Q" [# M6 [( ^7 R解压jar包5 |" X9 Q. E/ B( h3 `

9 F! A, }9 H  }0 R' E# @6 Fjar包是java归档包,但同样可用unzip解压查看里面的文件:
+ |5 J4 d- `+ a" X: q+ U7 {unzip -o java.jar -d dir/ \$ c, R- u( f) h
gzip9 h- w6 I4 @4 C) q: g) O
# f. m% c* J5 T' v
涉及参数说明:, V4 U$ u$ X1 J4 }* u
-k 保留源文件
4 `" m, b$ A( }; \: j-d 解开压缩文件
5 |1 J/ j$ y4 ~-r 递归处理,将指定目录下的所有文件及子目录一并处理4 z5 N9 a  g6 ?: o, y" j
-v 显示指令执行过程
( S4 q% N% G) v; W, J' Xtar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
% }' e! P, V8 i8 ~2 y) fgzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包1 s5 T4 [$ x6 J/ X
gzip -rkv ./* 递归压缩
; m  n# W" `4 x解压也很简单:
. \8 f2 j: P% k0 V% [* G! ~gzip -dv test.gz + d. Q7 @. e7 K8 f0 R3 @
bzip25 u8 q! e+ F9 q5 y3 G- {2 o

+ s0 q/ _& \" I" k. ptar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
- e" U9 F% v; s2 Z+ \: z7 vbzip2 -zk test  #压缩test文件
/ m0 G3 F# |; D% `2 wbzip2 -dk test.bz2  #解压- m  Z9 _0 X$ X7 ?! V9 p
rar/unrar2 w  z; C5 z( \' k

/ h. }5 C8 {) U3 hrar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:
+ V; ?3 `2 _- q3 A. e& C' hrar a test.tar test  #将test文件压缩为test.tar- D$ _  r1 v, ]  G6 N/ \& H! z) w" P
rar e test.rar       #解压test.tar
+ B4 s1 F0 }( O1 y5 Uunrar x test.rar     #解压test.tar. v5 T# G7 j5 ^3 n
压缩率比较
, O: _( l. X/ ]  N' w6 p8 R. J# n3 T
压缩率一般来说:
0 U! k8 D/ b  U6 C4 [8 |) ptar.bz2>tar.gz>zip>tar
2 N8 C% `' ^. q, D; {& z) Q" t压缩率越高,压缩以及解压的时间也就越长。
& q# c# |. a3 S& p总结- ?- s1 p9 C, F- U3 @" S: H

, D$ \- q2 s. [: n对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。% x& B4 B9 o6 v; ~( G5 M7 M
有任何补充或建议,欢迎留言^_^。
8 z7 [( R8 w6 T7 Q* D
5 a( s4 H: x- H7 B0 R
7 I2 v* u8 e0 }  R7 p3 ^
& u* ?$ s- x- J( h& s% m! C/ @

5 U: V/ R, ]" u0 p, Z4 K: ~% N; v

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 04:36 , Processed in 0.073307 second(s), 43 queries , Redis On.

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