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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
; i" o8 g/ M% u# q

* U  ^. c# Z" j3 g

" O  B# `5 V( o& _前言% p: ]5 f" @- [( u  x
$ S8 w2 P+ [1 Z# q* q) J" c# m
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。- D0 [7 _3 M3 i0 t' ~
tar' @' W! u3 g7 G( Z
$ F8 G9 x$ X1 }' U& \( P. c
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
/ j& I# f& n, c% G- y# }% g涉及参数说明:
& r7 i3 U$ y% [: U7 s: p# J( Y; v3 Z
-c 建立新的压缩文件# Y3 ~0 X" @) ^! y; S& [/ Z
-r 添加文件到已经压缩的文件. x: C5 j1 z$ s3 f: o; E' q  x
-u 添加改变了和现有的文件到已经存在的压缩文件* e( }5 K$ h% |2 H* X
-x 从压缩的文件中提取文件
7 ^, }2 Q# j7 i4 h7 P0 ?-t 显示压缩文件的内容
9 k( W$ u: N* D) E/ v-z 支持gzip解压文件0 K4 Z7 @4 A3 J" e
-j 支持bzip2解压文件* P6 ~' p' R0 [- }( J
-v 显示操作过程9 q- B9 ^1 m+ u5 S) v8 M2 e
-k 保留源有文件不覆盖
1 w9 J8 e, r1 n; p$ W# x-C 切换到指定目录) U: M7 Z* Y' O* [* t1 _9 t
-f 指定压缩文件( E, C0 v8 V5 H' Y& l
; ~2 g& |" o8 ^" A( Z
--delete            删除包中文件
" L3 f& U, y+ w0 o, \4 D' K) t! W--strip-components  去除目录0 }. y& N# [" E: E2 x2 U  R
--add-file          向包中添加文件$ ~, @5 Q' s4 `) b3 |5 B1 k4 q& t
压缩
9 J+ n& L. j) q' f! ^' c4 t0 v& D+ D; ?' Z; f
归档tar包,不压缩
. \  t7 J5 a  i  y" L# O. P/ j
  x5 l- \  X% C6 z& h% D% o& `3 htar -cvf test.tar test1.log test2.log #归档多个文件
& _2 h1 T& ~* U. ~8 itar -cvf test.tar test/*  #归档test目录下所有文件6 Y3 y  t( ~. |4 A3 w( H
tar -cvf test.tar *.log  #归档所有以.log结尾的文件 8 w/ d  ~! p- w
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
# R. _2 q  r  m. G  V9 D, j归档并压缩为tar.gz或tar.bz2: M; Q' Q2 k  T2 x$ }, J+ x

0 f( E5 J$ S! J/ f% |$ Z这种方式打包对文件进行了压缩:( O& W# H6 f# N9 |2 l! E
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩6 p7 D5 `8 P" x! ~$ ]& Y
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
) v- t# f: b' G  d% Z" X查看压缩包中的文件
# G4 H" n% F3 p$ E5 Z9 r: f$ ~" w
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
- x- {# b1 |, k$ ~  O8 Qtar -tvf test.tar #可查看test包中有哪些文件' w9 m- Q! n! T" _2 I
打包后删除源文件' h5 j+ @, d* g/ {

# B* B; f7 j! k% J2 L  p( {有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:8 O/ |& I2 }$ k& p
tar -zcvf test.tar.gz test.log --remove-files ; Q* ~; ^. z  ]$ x" S
打包除指定目录或文件以外的文件
% u! M5 D& U. f$ M, ^& c
7 d5 c' c- p5 C6 b$ I" ^对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
9 |7 D/ c8 l$ U2 Ktar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
# \/ t/ k+ _; L& s" [! a- j+ U这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
' \# i8 A7 [& B' l7 x: O向压缩包中更新文件
. a4 x8 [; r9 `
9 Y8 r' _4 c8 d- m) o例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
2 M8 G. j. m9 D  v+ }tar -tf test.tar --add-file=test #只针对tar包) r  Q4 Q+ [) o
向tar包中增加文件7 [  ?4 J1 y; ]/ v: W1 M
8 T- G% k' z/ w" R& U! C5 A2 D# i
向tar包中增加文件可使用-r参数:5 o3 a6 U5 _5 G
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar0 x; ?6 I# c% j
删除压缩包中的文件5 b# ?! ~# k) g' s' g1 M

2 [9 J& b$ E# X; L* S9 F  u$ x& B8 ?在不解压的情况下,可使用--delete选项删除包中的文件:
/ o5 H$ N2 ~# A1 Ctar --delete -f test.tar  test1 #从test.tar中删除test1文件7 R; O  B4 L6 j) F, u9 }# L; R
解压
$ H  B8 Z9 x% N. c. H% V7 _/ p: Z; {
解压tar.gz和tar包到当前目录. [1 D8 \( F' n3 }

" _) I0 r6 r$ Etar -xvf test.tar.gz' O" O$ l. [5 C, @; h
tar -xvf test.tar & m% `4 {; j$ }  V. R5 B. q
解压到指定目录
* V( D" h: X9 y0 a+ M6 r- S! F/ |6 D( N  M7 W
tar -xvf test.tar.gz -C dir
0 q: D9 K9 I% \) ]& k5 Ftar -xvf test.tar -C dir7 G6 u  S( F( u# p6 n
解压包中指定的文件, r2 P2 k# Q) U+ O& h# {0 s

: F& n& b$ W7 P" Z' y/ c8 ^! M例如test.tar.gz包中文件情况如下:- f" h& G! C. P$ I) @* ^/ N. s
1.txt
0 M* C1 g* w0 Y; zlog/) O/ z2 S. u# q' b. y8 p
log/1.log
& d: a! \0 U1 o( C+ Mlog/2.log
$ X# m' N5 b: a3 t5 Clog/2.log
8 L3 U- |  b' B0 i! Slog/4.log9 q; {7 S% A7 Y' _, x& [% |8 U
log/5.log
. l. A+ H% j- l) n/ }7 m3 v) W如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
1 U0 j' l: I: u3 E& ?tar -xvf test.tar.gz log/1.log
, y2 Q2 r' U( c4 ptar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
9 f+ @) e+ @# D5 @5 d) U8 p解压时去掉目录结构6 s3 L' ~4 D8 v5 g1 J
2 G2 j3 r1 r6 X8 S" }
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
1 J4 G' o, Q! {6 O* B9 g, Y5 z9 mtar -xvf test.tar.gz --strip-components=1 #去掉一层目录* J- g8 d* v3 g- b' U  A: `
解压时不覆盖原文件  X1 T! E3 l) F" C, h

3 B$ w4 ?& T6 n' H当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):. ?9 N  W4 X4 N% Q
tar -xvkf test.tar.gz$ A& E1 `7 H& [6 X% {
特别提醒; p/ V2 a, @8 g' E
. `% a$ e0 ^! b0 q
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
; B+ [* Y: m! P# z5 Qzip/unzip
8 @4 S5 q5 s9 b3 ^& Z9 {8 V$ f  x7 L3 {, R$ d
zip和unzip命令主要用于处理zip包。
% h! ~/ b5 t* ^) w压缩
. S' N7 n  z% r( {- C
! ?9 }1 y  Q$ n. N% @$ }1 d5 t涉及参数说明:
* ?& m  r/ y/ ?; {8 g0 o0 v: N-d 从压缩文件内删除指定的文件。
9 V( E' y9 f$ S$ v8 m. t& J( B-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
- m3 V+ O6 k3 M& h) n6 I% }2 Z9 Q" @-j 只保存文件名称及其内容,而不存放任何目录名称。) b1 E+ o1 s; U2 o4 I: k
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
% j+ a! y8 q4 A4 C* u) t-u 更换较新的文件到压缩文件内。. e: U: m( a& A; W. f- Z$ v
-v 显示指令执行过程或显示版本信息。
' m) a: R" Y* q1 \-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
# T" o9 s0 e& s. H3 d- <压缩效率> 压缩效率是一个介于1-9的数值。" K( y6 D4 K" z6 ~
压缩文件
3 D; ]0 c0 m/ \$ S# {1 b9 K" d* \
zip -r test.zip test/ #打包test目录下的文件5 ~7 S4 n& z6 r# k- }5 s
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
+ q9 R. v3 ?% d( I: U指定压缩率打包文件, a1 I7 t# C3 I+ e$ M& q1 u1 P
; K# }8 Y" q- B( F
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
+ T& z. Z1 s$ s+ S* \4 l打包符号链接文件+ z. P6 g0 R3 s: F+ P

& x( X; L& x1 T" ^前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:# h5 `& \- |( I' N
zip  -ry test.zip test
! l6 `" `7 k, o: R& A7 k向压缩包中增加或更新文件! H. _3 B0 T% U4 A( p

$ T/ V/ O, x3 f0 z有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
' `( d: J8 r1 ~5 ~7 K) Y' ezip -u test.zip test2 #向test.zip 包中增加test2文件6 J5 L# }1 m/ c6 e; R# S8 N
压缩时加密, X* l2 J' I! }4 j! h! u4 X
; R$ R. T5 T3 m
压缩时如果需要对压缩包进行加密,可使用-P参数:
9 }1 X4 O7 R: G( X% D2 |7 yzip -r test.zip test1 test -P 66666 #使用密码66666加密
( }9 L2 x3 T( Y9 l. |% K1 ^; x- p删除压缩包的特定文件
5 {6 n0 X( ]  K$ a" O- {
$ X( K; @/ ]+ A/ a: E1 l# {zip -d test.zip test  #删除test.zip包中的test文件
3 e) [' g  l# s解压
% ?, q- y7 F4 h) ^7 F6 w5 b& a+ u8 E) Q3 Y
涉及参数说明:7 x4 d: g6 C# o& e6 m
-l 显示压缩文件内所包含的文件
0 L  a" @+ a. d5 L, g-j 只保存文件名称及其内容,而不存放任何目录名称。/ I4 F2 _$ e4 d  a+ m" s
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该7 ^8 x+ v8 L! A
-v 显示指令执行过程或显示版本信息。
4 ^) ]: |$ x; y: ~-d 指定解压目录,目录不存在会创建' {  ^$ N5 V; a5 W' O$ c) Y
查看压缩包中的文件信息# r0 S) f7 N& a* e
$ ]$ S9 [8 v# y% _4 I* W
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
5 a1 [7 _, G$ h1 I' Q, i: w3 Q2 N* {unzip -v test.zip #查看更多信息,例如crc校验信息等
2 i8 Y, B) |0 e解压压缩包
) S4 T) Q! l+ o) M# R/ W
  n6 S0 ?- n. E+ ]$ Z3 d# }unzip -o test.zip -d dir #讲test.zip解压到dir目录
# X' k1 B4 S5 h8 v* A解压包中指定的文件! T* u$ }' @9 g- V9 G9 B1 Z

' Y- b$ L0 K: m如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
+ y9 j+ v0 h0 s, f- dunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录; J$ ]1 P  M& y
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
- b& w' k" s7 t+ p  q! H解压时去掉目录结构1 o0 `9 M; m2 U3 k5 J& i

( P, U2 M; H# L$ n& U" j压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
8 v7 a) ~7 I; z5 y. vzip -oj test.zip -d ./temp  
4 z; Q+ H& G8 Q解压jar包
( r" w/ m# u4 y& z/ J+ N
5 @2 u" K; b7 ~- ?jar包是java归档包,但同样可用unzip解压查看里面的文件:3 r; J/ q: ?( Q. V
unzip -o java.jar -d dir
, D8 w' Z7 i5 D5 x  i( Q3 tgzip
- k" j* {: a( N; [/ N$ w) q
* V: A6 I. e! w5 \1 Q涉及参数说明:
. P. j3 D6 c: e-k 保留源文件1 |; w0 d- \% K3 v& c9 F% o" R
-d 解开压缩文件
9 C! n" W  F  b3 y-r 递归处理,将指定目录下的所有文件及子目录一并处理: d1 A2 A. l7 A- \( R" }& F
-v 显示指令执行过程2 ~+ ^1 u% i/ g+ D& ?% i
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:( O& i4 D; a  o# {& L2 }3 Y1 n
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包! f' _* {* T: i' f
gzip -rkv ./* 递归压缩" u5 Y: }- o5 ~- m* ~
解压也很简单:
2 ^9 Q. L2 [/ j' x# ~* ~9 o7 t! ?gzip -dv test.gz
3 e; T: v0 T; O$ Gbzip2
  I' _" h0 l9 G
; h$ p+ ~5 i- ]# l2 Qtar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
/ m3 O: _# g. S5 w& D# ]bzip2 -zk test  #压缩test文件
: S$ }  s5 o& y* n* P9 ^bzip2 -dk test.bz2  #解压3 S( R9 S2 }: z
rar/unrar
& A* V0 U# ]$ H2 r7 O# G5 C6 _1 y. G
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:- n% i& _* L! K+ e9 G
rar a test.tar test  #将test文件压缩为test.tar/ |% Q8 P( R; }" A, J. [
rar e test.rar       #解压test.tar
! w. C) x' W- S# G$ u& D8 dunrar x test.rar     #解压test.tar) n- u+ K. L$ w: `4 K7 r* r3 L
压缩率比较3 W8 o" h5 [  n) F

( l+ R- g6 T+ i  I) K: D压缩率一般来说:. {. [* G0 }2 k" g# z, p
tar.bz2>tar.gz>zip>tar/ `  j' }& A6 T: F# Q" p2 y; L
压缩率越高,压缩以及解压的时间也就越长。
6 U+ [" S! f$ F) |& q1 M9 \: o总结  H2 ]) y9 T/ ?+ Y# m( I
& N! p+ J  r: X& C3 r5 ?
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。0 T, a3 i2 w% Q' K- @; v* E. J: r
有任何补充或建议,欢迎留言^_^。
- b  u% x7 `9 L  D/ d; e
0 ^2 B" ^# U7 h9 ?6 r* H$ i
" V  I+ m7 t3 T0 }$ s6 z' S' v2 f$ C
, H' }0 [' @  P$ T2 y

  n6 ?8 x% @, w- h" S/ g

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 12:04 , Processed in 0.061075 second(s), 32 queries , Redis On.

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