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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
8 j3 Y  H, r" G# ^

! K: a7 z3 _5 U% F5 {
% I, H( A7 o8 P+ I9 L6 _* C
前言& c8 Y& q  p% }; J

8 d/ F2 @% V4 m- s  ?1 ^Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。% i8 k5 R: V2 h) B1 T6 `+ j8 x* |
tar! e: c, _/ F- f1 z4 }

) s2 i9 P: B/ w& X$ w' {tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。1 A9 W! w  s; U* L  U6 D( z
涉及参数说明:

8 j5 h) S/ d& {; v, i-c 建立新的压缩文件6 Q# d! P+ `3 W9 D
-r 添加文件到已经压缩的文件4 u2 [9 L( G/ @! q9 M! I' B4 x
-u 添加改变了和现有的文件到已经存在的压缩文件
$ c& @7 K6 v' f/ Q4 K# ^! L9 W-x 从压缩的文件中提取文件
& ?' y+ C  ^* Y# x' n-t 显示压缩文件的内容3 b* F  a) D  t: C. P  ?  T
-z 支持gzip解压文件4 Z/ F: \# I9 g& T
-j 支持bzip2解压文件7 \9 T) N/ n0 y2 u# E  ]" s
-v 显示操作过程
5 ]( P$ \/ ~$ T-k 保留源有文件不覆盖
+ T. u7 f" d9 y* i) q! j- I-C 切换到指定目录
, K1 L! l  v5 k/ n& J6 n-f 指定压缩文件1 M  Q1 U9 h  [

8 s8 f4 F2 C- \# f# e" J--delete            删除包中文件
4 K0 ]6 t+ x8 @, ~" x% T* j& D--strip-components  去除目录1 f" p8 ^7 i. d
--add-file          向包中添加文件- A& i' ~* q- i% W4 {1 v7 e9 N
压缩
) P5 |7 L/ K+ U. p" M% e+ {' c5 x
2 ]! Q( W* @/ ^归档tar包,不压缩' F3 F% y  D0 f# `8 M
; t% i4 t7 n8 V1 E9 s( u! T2 V. V3 R
tar -cvf test.tar test1.log test2.log #归档多个文件
0 p4 V: t. c3 K# rtar -cvf test.tar test/*  #归档test目录下所有文件* S6 k3 R/ S. ?2 ]1 R8 K' U
tar -cvf test.tar *.log  #归档所有以.log结尾的文件
7 {6 D! A# Y' @4 l; Z" P由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。6 m& x$ b! Z1 \
归档并压缩为tar.gz或tar.bz2
/ H' C: F% T" Q
, u0 j+ {, ^" v( ~% z这种方式打包对文件进行了压缩:  e1 w# [- p8 ?- c$ i9 [6 D
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩" m3 N! S! D; ?
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩. C2 ~+ `7 t4 k$ j2 N: P$ P) m* Z
查看压缩包中的文件$ J6 K8 X( _& e4 @) b* F
4 E9 }  V" ?6 D. z
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
. L  L8 a+ d! ?& a/ Ptar -tvf test.tar #可查看test包中有哪些文件
; P0 u8 I$ P# h7 l0 a) G& S打包后删除源文件) Q, l8 T/ N# h
. u4 W) y! v; ]! R
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
* b' A, T, o, u. U6 ?# [tar -zcvf test.tar.gz test.log --remove-files ! W; m5 k- `7 _8 [+ ^
打包除指定目录或文件以外的文件4 d3 H% W2 ?- X0 L; x: T1 \

( Z) L, J( H0 l6 i" P对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:% h; Q, l8 u8 A7 A
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
0 ~0 C) P6 j# U4 f# P! S这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。  H0 w; v3 R1 B5 z/ i
向压缩包中更新文件
" h, E6 f. _; O
: w* w3 P: Z( }# ?# F0 b+ [例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
7 s' ~* R* o! c$ m( Y# X& h) ytar -tf test.tar --add-file=test #只针对tar包
/ U2 g7 Q5 |/ G% e7 E向tar包中增加文件
! V) [; M- K: N# S" ]0 h5 J, s% Y  }3 J0 Z: S
向tar包中增加文件可使用-r参数:
; b% @+ a8 N; utar -rf test.tar testfile #在test.tar包中增加文件,只针对tar% {- {, |* m$ l3 H2 j! G, c" H3 }
删除压缩包中的文件7 @- R. J8 [  n" q1 `: u5 K
+ t6 Y& V( I$ k
在不解压的情况下,可使用--delete选项删除包中的文件:2 E$ I! u9 U# g4 @; G8 `
tar --delete -f test.tar  test1 #从test.tar中删除test1文件4 w5 P3 T, a; O6 w# y6 S
解压
4 B; Q# @2 T) ~; f2 n/ b. n7 t/ }) ?9 p# ^
解压tar.gz和tar包到当前目录
% P( f, L) o; }# H" T
/ i$ g& x( s' F  H4 Star -xvf test.tar.gz6 S: H& W, P0 N1 [7 ?, r
tar -xvf test.tar
) F. ~! W) j% ~! a" Q: t7 y) f- i解压到指定目录
( w  X  z. |  m, J" W3 W9 |  f/ y7 X
tar -xvf test.tar.gz -C dir5 \6 D- o6 J* e, c
tar -xvf test.tar -C dir
5 _$ S/ }# |3 B  h7 U# e解压包中指定的文件; V8 a' }" u9 o, L! l

3 v# j9 t, D! Q5 X例如test.tar.gz包中文件情况如下:' s2 N1 ~+ n' M7 }7 U
1.txt" X. q' B$ q( T! R' @
log/8 M- t1 x3 t+ ^$ ^9 y2 \' L
log/1.log) \0 m- W, A$ R5 V" B
log/2.log
+ t8 [$ x- h. O9 Q$ W* `log/2.log0 i$ n/ D- Z2 n3 i
log/4.log2 p; c. t9 u/ y4 [' D% V. j
log/5.log
( q5 Z3 x& Y6 y7 ?3 U如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
+ ^+ L# ?; D  xtar -xvf test.tar.gz log/1.log5 {* i7 x2 g+ g& |9 D4 i
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录: K8 Z+ E- ^9 w# r. p
解压时去掉目录结构
  [8 c* a0 H" r& j
9 F7 Y: `6 U: i( m压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):  z/ w" X+ S( l' k! E
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录. m7 h! s, j+ z, R; ?$ p
解压时不覆盖原文件
- `7 d1 L6 ?1 _# Y9 M  ]$ p) B
1 s/ B6 R( S. v* y. N2 q当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):3 P, {" h) Q: ~5 g
tar -xvkf test.tar.gz
( I/ o8 }& J2 Z5 _/ i$ u特别提醒8 z) d2 ^! m* @/ k
3 ]) i1 t. i" ?8 U( i7 P
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。" W* `! B, f4 {9 F+ Z+ s+ q* S3 [
zip/unzip
) W% l! C0 w7 B8 v
  H! W4 V2 X5 S7 j* Jzip和unzip命令主要用于处理zip包。' C4 j1 [& {' C0 q7 [  k' v- u
压缩
$ Z0 \- A$ b% I; C* W' J# P+ c( H/ b, ?; O0 e2 ]1 O) P% B, m
涉及参数说明:
9 h$ }' `6 F% ]+ p0 [5 \-d 从压缩文件内删除指定的文件。
# M. m* K* d2 c+ t" N-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。% a1 @+ \) n# c" {( X" E& o* l
-j 只保存文件名称及其内容,而不存放任何目录名称。3 s3 |2 q7 d- F- n+ _6 x
-r 递归处理,将指定目录下的所有文件和子目录一并处理。2 X* P& c$ n2 ^# @1 k) J& o( y
-u 更换较新的文件到压缩文件内。
0 V4 g; H+ H% ]  w2 b/ t-v 显示指令执行过程或显示版本信息。
1 K& h# Q$ I  e+ e1 K-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。4 F- {: X* y3 B1 ^
- <压缩效率> 压缩效率是一个介于1-9的数值。
5 A8 w+ J# k9 l* b. \压缩文件
) @+ t$ s; A/ F, H- q) x. E  O0 I( u: b/ z! K/ }2 ?1 p' ]
zip -r test.zip test/ #打包test目录下的文件7 _) d" `4 d: Z
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
& Y* r1 C8 k* P指定压缩率打包文件
' C, Y+ U( C1 D
/ i7 H+ _" ?$ y& W6 @" dzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长' @7 A  s; G: s7 `/ u
打包符号链接文件; O# e$ \7 Z9 Z; }' W
% n$ N% B6 a4 E6 C
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:1 {- S; k( j8 ~: Y
zip  -ry test.zip test& g+ o7 E; T0 c$ F
向压缩包中增加或更新文件' R: l' V6 s0 }0 L
' }. q" y' U. x9 Q# \/ \/ k
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:7 e" ]3 x- L& V
zip -u test.zip test2 #向test.zip 包中增加test2文件# W6 k' `: D; e/ _3 F' h
压缩时加密3 P- o5 y- G: N
3 s3 Q' }6 J7 T/ z5 x  \
压缩时如果需要对压缩包进行加密,可使用-P参数:
2 a! b: k  V: f9 P8 Q  Szip -r test.zip test1 test -P 66666 #使用密码66666加密
, p6 Y* S- G2 K- b6 a! R% G4 X删除压缩包的特定文件6 @* K4 t4 B0 {

, L+ D- N. {" G& X/ j9 Vzip -d test.zip test  #删除test.zip包中的test文件: r2 M& U8 m8 ]; p: l! {- S- Z4 q3 T
解压: P" I* o1 S  t; m- a2 o
5 D& q" j; D5 Q
涉及参数说明:! W6 {4 W5 S) k, h3 I. O; {- C
-l 显示压缩文件内所包含的文件9 x2 [  c/ o( X0 ]. c8 s! i0 |6 T
-j 只保存文件名称及其内容,而不存放任何目录名称。8 o4 K% p# x0 G  \$ o, X
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
2 {; j) i% X. [& Q( L5 F-v 显示指令执行过程或显示版本信息。
2 q% U- f+ K3 F-d 指定解压目录,目录不存在会创建/ q$ X% C7 \# C* W
查看压缩包中的文件信息
$ k( }$ z" K! u" u
# e( u0 n; H) Runzip -l test.zip #可以看到压缩包中的文件名,日期等信息3 v$ Y: j" J. H/ K; w# v
unzip -v test.zip #查看更多信息,例如crc校验信息等
# B/ e; {' m- |  n  {解压压缩包: Z, r  J2 `8 K& I/ e: a

+ e: Z: ]: W3 t; J0 w9 lunzip -o test.zip -d dir #讲test.zip解压到dir目录
6 d& d8 P9 \8 ]1 Q  y) Z* z" d" _解压包中指定的文件( M0 b- I; s6 l2 E; W! |$ t
% p! N! p. {; O
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:! K, `7 D, f4 R9 Z0 ^8 h
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录  I! S  X9 c, @" x4 |1 n. q' j
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件5 y* G, J( h6 k, g* u; z7 W
解压时去掉目录结构
/ _0 j5 \  F% B, K. `* f/ W% O" u( g7 R
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:' P2 y. D+ \) H% d
zip -oj test.zip -d ./temp  2 J) |* b6 Y7 ?' {
解压jar包
! [# N/ V# m6 [, p/ C8 O, i2 D) @! w4 @
jar包是java归档包,但同样可用unzip解压查看里面的文件:
  B% Y. J( U; A% Kunzip -o java.jar -d dir* v! j8 I" z! C5 _7 R
gzip
( m1 [  j% U3 l! t: e. B) e. C: G0 E1 d6 A- f8 K. R. [
涉及参数说明:* ~; X$ K0 j4 l9 H0 ?& d
-k 保留源文件
; v. s) `2 _3 z9 g+ Z7 o-d 解开压缩文件* N) k& M2 }  z/ @  [8 F; ?; q6 `2 ]! y
-r 递归处理,将指定目录下的所有文件及子目录一并处理, v6 t+ t2 g! k3 s& y, @
-v 显示指令执行过程
& O2 e- z: I* O* A( p* Gtar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:( ], T( j; ~5 b; c% a4 I6 }8 ^, R+ v
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包  b( Q# y* L& m4 O7 o$ ^+ O. v
gzip -rkv ./* 递归压缩
5 E' X3 h# g9 E  k解压也很简单:
; e; N  C0 t* _gzip -dv test.gz
+ {: i# Z3 A0 ^! q! s7 z  f/ Hbzip20 g$ C1 i8 n: _
9 M8 @7 x# L% G: g
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
0 ?" L/ }$ T8 m; r: ~1 [bzip2 -zk test  #压缩test文件- B! ^7 B6 j8 p& n4 m
bzip2 -dk test.bz2  #解压( b+ `% w, l- F, v% K+ o, p
rar/unrar7 F% N2 J" q2 ?, p7 f

1 B6 D( ^, u" n/ ^& [' arar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:* q. @* \% |) L5 M4 c' M5 X: r, ]
rar a test.tar test  #将test文件压缩为test.tar, c3 G$ I* N' h! L" p/ W7 y  N
rar e test.rar       #解压test.tar
8 s4 K4 P6 A3 Q& V, V# funrar x test.rar     #解压test.tar
* v7 a& M6 P$ [压缩率比较2 w! t& e! G5 V+ c
! ]. {0 R% u+ I* d) V1 J& d
压缩率一般来说:
5 ^& U: E+ ^- h# a) Ntar.bz2>tar.gz>zip>tar
8 ?! g8 g. P, T5 I8 k+ }5 C$ F压缩率越高,压缩以及解压的时间也就越长。
1 T/ |6 H( w& N' I# [1 B: K; m总结: |- O. X6 V) T5 B) {

" N. x8 d6 u* X+ f3 `" C对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。$ H' |7 P4 v8 _8 H
有任何补充或建议,欢迎留言^_^。" v" t6 H, J/ M* c' S8 ]

' c% J6 ?0 C! `4 m
- H, k$ |( I# k! d$ [2 \0 w! k9 [- X7 _& L6 h5 _! U

9 [" ^' l7 r4 P/ D2 k1 z4 M

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 04:08 , Processed in 0.048225 second(s), 32 queries , Redis On.

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