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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

0 V0 C6 U9 j# S( p1 Y3 B- r5 H7 }

& `/ e9 d' f2 z- T7 _* h3 j% E前言
5 s, F, n# j/ h, F9 F# N9 Z. B5 w3 i: g- r7 e7 U
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
- u1 K6 G5 O' T0 ztar% k$ o- S& _/ f) V

+ m% p8 K/ u! P+ q/ w( S! M) Dtar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。, n) z% u# W( F0 [- ]
涉及参数说明:
) u/ j1 m+ Z) f. A
-c 建立新的压缩文件1 {$ S3 L' r: D$ e7 X# j+ F
-r 添加文件到已经压缩的文件
- ?: h. e: e' _6 @- v' C-u 添加改变了和现有的文件到已经存在的压缩文件
0 l# o2 I* F* N0 A1 j+ H-x 从压缩的文件中提取文件$ t! b! b: ^. b! V7 R9 V% _
-t 显示压缩文件的内容
4 H+ D% S% n" S-z 支持gzip解压文件/ O8 g4 @7 G+ Q
-j 支持bzip2解压文件
$ o, W9 p! P& `! s-v 显示操作过程
* D* G3 `) E/ ^% ]-k 保留源有文件不覆盖
3 Y# l  t* h* c-C 切换到指定目录
. b4 _8 H0 S5 q# l. L) J$ B-f 指定压缩文件  e0 @" Y. |+ j) F
7 O7 c; R1 z* n! l
--delete            删除包中文件4 i/ I' Z# l. C0 g0 H7 }
--strip-components  去除目录
/ v, C4 ^- E6 d& b; m, F/ X# H6 b--add-file          向包中添加文件
2 T" ?# R0 d& d2 {压缩. J+ O+ N( U& Z& D/ s5 r. t
: d/ ?1 J8 d' T1 N3 t- ]" `4 i
归档tar包,不压缩4 l4 f) S+ F" v
- x- H. G  f9 c0 M* o
tar -cvf test.tar test1.log test2.log #归档多个文件8 {- M4 M# W! `- J0 m
tar -cvf test.tar test/*  #归档test目录下所有文件
3 b. y0 C6 m4 W8 S& M, @; etar -cvf test.tar *.log  #归档所有以.log结尾的文件
, K. I' w- u( `, L# U3 A由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。, [% }1 f" [/ N& m0 _4 e
归档并压缩为tar.gz或tar.bz2
* i: F! `/ }" p# o" }8 L: g2 W0 q& f$ K, f5 R  w: m( B
这种方式打包对文件进行了压缩:$ R+ L8 u; y- ?  {' r- ^( ~- S
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩, z0 l; U4 j3 N
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩0 g7 E4 Q' w0 q" H$ j9 g+ v
查看压缩包中的文件
4 Y' N1 ]3 j& s2 @* ]6 i/ e5 m" b( F& }" q- i
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
) q- m, k+ i9 N  w8 Htar -tvf test.tar #可查看test包中有哪些文件" r' P$ D0 s. K: e+ K5 a/ G
打包后删除源文件
  ^( d! L5 @) F* B2 H, O: z) x- I+ r% d0 h4 j4 N) c
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:6 Q6 ~4 |" g, f, S; ]2 L
tar -zcvf test.tar.gz test.log --remove-files ! b. H7 z  G* @6 t
打包除指定目录或文件以外的文件
; \6 d5 T9 _2 H1 b  _( P+ V; \# o. P2 G. O; [0 Q
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:  [+ V2 n7 x/ R, }2 R6 `
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
& @* p# v  X, i4 J+ F这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
' P' x6 k/ c4 p2 u9 c7 N向压缩包中更新文件' W, M: p0 n, Y

4 l) p  `/ T( ~4 u. X2 G例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:& P' q5 F$ C4 S
tar -tf test.tar --add-file=test #只针对tar包; @; E) q* R' G9 V
向tar包中增加文件
5 o9 _3 ^' U6 n" J) P9 Z  ?0 h9 O9 ]' k
3 C  w2 {0 K! f9 D: h+ `向tar包中增加文件可使用-r参数:/ \8 e! c) \. J- @/ q* P  G
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar包# |! M. p! h( w
删除压缩包中的文件+ v& N- |9 d  k

' m3 S- e7 @' Z5 k) X在不解压的情况下,可使用--delete选项删除包中的文件:
0 j! w4 o5 d! M; t- Ntar --delete -f test.tar  test1 #从test.tar中删除test1文件3 G; P9 D$ x# j$ @: Z5 b& F
解压( l  p# [$ y0 w/ |  e( i

0 O" y! E- o7 F% \! M5 L: e解压tar.gz和tar包到当前目录: G  i' ?. m2 u. A% N+ ?+ ~
7 v, ?: p2 {8 P* j
tar -xvf test.tar.gz
" M1 U& J9 \- Btar -xvf test.tar 6 W6 K6 v; q8 X4 g5 B2 u! f
解压到指定目录* I' l0 K, [' T8 n
  R& G9 V9 Z- U5 y. W( {
tar -xvf test.tar.gz -C dir
9 y# n( s/ J1 \tar -xvf test.tar -C dir" i7 X  u6 h# h9 D. u4 c" B
解压包中指定的文件
/ K5 Z( `1 c" e, b9 g  V2 V7 J
; Y& B1 q- H& E3 c例如test.tar.gz包中文件情况如下:# h2 H' M3 r8 f, I' D. B
1.txt: h; V% Y5 D7 l0 W% {. ]* s
log/
; b4 R- v; c: J/ |4 k6 q# hlog/1.log: V8 i+ V% i; Y. S
log/2.log
# ~% a% e' m* H; Qlog/2.log, }" z7 T7 c% Q
log/4.log+ t* S9 q9 }, k* H# z- \! _
log/5.log& i% |& V4 o% f# |3 r$ t- f
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
( D  I9 H5 y  _* F1 i8 Mtar -xvf test.tar.gz log/1.log( i# X6 u9 [: A5 @
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录( e  d7 T- F# f  Y
解压时去掉目录结构% i! [, m' ^7 f! q2 @. N6 d' s" q
( }! j! M. Q, g8 {, x6 Q+ I, O+ ~/ M
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):: ~3 J9 w% Z2 q; l$ f- m* W
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录- k5 y4 @6 o! ^  O' v  F
解压时不覆盖原文件7 F. A0 W/ l% G8 @
! e1 q( M8 R$ i
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):9 u' \+ Q7 `& n3 q' p
tar -xvkf test.tar.gz
; C/ x& N7 s+ r& d/ o5 Z" I3 Q特别提醒, x1 n4 M) Z7 P% x- |" s1 V

" Z+ a1 L: }+ d6 \前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
) G" Q' A" S! v& B- Y, N  x5 `zip/unzip
- N, q  G" x. R9 f! j0 a
8 r  A# D4 e$ Y- yzip和unzip命令主要用于处理zip包。0 w+ t* L% P! o+ y! i2 r
压缩
9 ?9 ~$ z& b, h+ S) ?+ q  D& |% G' }9 F# `, t
涉及参数说明:4 `3 [$ `0 V" M; m7 O
-d 从压缩文件内删除指定的文件。
4 K# I1 ^" j) c' d-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
! l6 q  _  f/ o7 Q-j 只保存文件名称及其内容,而不存放任何目录名称。
+ A% @1 o1 |4 x7 J-r 递归处理,将指定目录下的所有文件和子目录一并处理。' P& i) a1 [9 p. q4 t' y& b( C; j: ]
-u 更换较新的文件到压缩文件内。
7 A3 Z! ~) P* ^8 B& Q( I-v 显示指令执行过程或显示版本信息。
; [3 Q7 P* c* q( F. Z# K-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。& U: [, X- ^* M6 F) }- o
- <压缩效率> 压缩效率是一个介于1-9的数值。
% `7 S9 p; K4 W7 u3 J9 h压缩文件5 [- K" m- x* S1 w& k& W% T2 m4 A

* c# Q( d3 i; e9 Rzip -r test.zip test/ #打包test目录下的文件
. Q$ e$ A$ V% R" Bzip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录$ \& K: w$ f3 r4 S% d" h* q
指定压缩率打包文件
; w1 C; s9 v' S3 o( z
7 H) l7 i+ J' H9 Rzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
  C% g* N0 ^9 i& \  R2 g/ K打包符号链接文件
3 q. C$ t* I- ~* X( o3 I/ W9 q1 {, ]8 P/ a7 r7 n6 G* c8 u
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
+ B/ p. C. r2 ^0 c% ^6 B+ ~6 L0 hzip  -ry test.zip test! y/ |1 Z) P! v8 f) [2 e/ @, K6 X
向压缩包中增加或更新文件9 Y8 T! d/ }( `0 }/ Q
: t% q! r3 ]" ^/ D
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
4 d- U- J) O$ \  K$ |) U& izip -u test.zip test2 #向test.zip 包中增加test2文件% W1 Q! N# c  D( O
压缩时加密
& g6 j7 S' k% u* n& Q- t) Q* @- ~8 o8 ^1 X6 R6 c% p' [: C
压缩时如果需要对压缩包进行加密,可使用-P参数:
: {2 K/ X1 x/ \. ?# dzip -r test.zip test1 test -P 66666 #使用密码66666加密
2 E' `6 S1 N$ I: I% |删除压缩包的特定文件
$ |8 _" w0 w0 Z5 a, W- ]6 l1 [4 T4 S
2 e9 O& `8 n8 H0 \4 Fzip -d test.zip test  #删除test.zip包中的test文件
$ l3 L: E+ l& Y' z& P解压
& `3 B: {# }* m9 Q* p4 l3 V( q: K
0 L, t( v7 u2 _5 a! A涉及参数说明:, [9 J6 y4 V# T' v
-l 显示压缩文件内所包含的文件; J9 [; W  @2 u. N
-j 只保存文件名称及其内容,而不存放任何目录名称。8 r5 b0 w& c; C$ W$ h; c# N2 \
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该: p( R; @$ c/ x" _2 `4 @
-v 显示指令执行过程或显示版本信息。* G, X1 W5 k' v
-d 指定解压目录,目录不存在会创建
6 J6 z5 O7 z" N. Z' V7 ^查看压缩包中的文件信息
' Z6 E- B/ W2 ]( G8 M: M) ?* X
, n6 L# F# I6 q4 {unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
; e1 J& p6 I2 l& F- D  hunzip -v test.zip #查看更多信息,例如crc校验信息等
2 }0 Y! t; C3 O( J* H+ w解压压缩包
8 d! Q8 a' O% N# }: q: q1 x( [
  a- V8 Q9 D& ^( cunzip -o test.zip -d dir #讲test.zip解压到dir目录
3 Q# C/ x8 ~, C6 D& j  `解压包中指定的文件
# _1 Z+ \* o# v+ n5 O1 f* x+ b. d0 h# B& s  F8 j- _
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:4 c5 Z8 L% K; t1 y
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
# X! {; A- g4 n1 P* k  X; ~* t7 qunzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件. X) V7 u- T) t9 E8 U. m, [
解压时去掉目录结构  b( }: o9 U$ n# T2 \/ s
8 G0 f/ v' Z" V3 i& P0 h5 Y: Q9 t' v
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:% ~. [! `- x: E! v' y1 w
zip -oj test.zip -d ./temp  2 _+ W3 n* {- ]' E+ I
解压jar包  B! l% t; Q! H
" G6 m1 n1 o; E+ ?& e
jar包是java归档包,但同样可用unzip解压查看里面的文件:0 n$ L- ]) g4 O' A, Q4 Z4 W6 ^
unzip -o java.jar -d dir! K' }2 n$ [" p0 T# @" U& M
gzip/ R( Y5 {" l+ r5 P: m; y/ X

( C) u; o" [, }: G7 U* ^涉及参数说明:
" M9 X% `6 G( R5 Y-k 保留源文件. ]( ?9 A+ P1 q6 E! D
-d 解开压缩文件6 O6 s* b9 ?* f/ Q3 C+ }& N/ M. X
-r 递归处理,将指定目录下的所有文件及子目录一并处理
  l) N! ~7 Q) ~% z' _5 B& D: z  V; K-v 显示指令执行过程
: s7 P2 w- _. Q* n# z  ^tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:/ c4 ]9 p* U6 t# ^. [
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
$ q( S+ Q; B4 [( ]gzip -rkv ./* 递归压缩9 `& W9 @2 o& a# c) A
解压也很简单:0 s: K: D1 W% s3 @) c5 O3 F
gzip -dv test.gz
8 e, e9 o/ `: G2 ]4 V& Jbzip2
* U1 H$ t) c5 L! R9 B$ a, D- ^) a, s& M# J
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
+ O) R! a& }7 b# e2 c( R7 Wbzip2 -zk test  #压缩test文件2 J" J: `5 ?$ N) m" H, k; g7 h
bzip2 -dk test.bz2  #解压
8 {- `' C; O! W9 b" I1 Erar/unrar/ ^  Z9 D; v- L+ _

, @' J% J4 `4 b) k! C: r. f( Crar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:% i& `) ~" d* X; _
rar a test.tar test  #将test文件压缩为test.tar
0 ]% y5 b6 g. Vrar e test.rar       #解压test.tar
4 d* @+ P- ]" P; @+ \unrar x test.rar     #解压test.tar6 Z$ d0 D8 ?0 j0 q* N
压缩率比较5 E# C  f! N7 E$ @" R' }
% N, L- ~+ p$ j+ y0 R0 k/ C
压缩率一般来说:: }( G4 J& c7 l( D
tar.bz2>tar.gz>zip>tar2 ?5 m+ R8 W+ W+ K. x2 V9 c
压缩率越高,压缩以及解压的时间也就越长。
1 c+ B: ?* X( `+ \, s- x8 a总结
6 _+ J$ O( Q8 V6 R, t7 K
$ B% Q4 c! a8 r& l对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。1 ^- r* P: `4 t- U) A+ e$ n! a
有任何补充或建议,欢迎留言^_^。
) y2 N1 X' m0 }$ p( R9 |2 M
! T& @5 k% b; h! L+ M3 W4 X% w( g" Y/ E

4 _! K! D8 [  l/ C; x) K

  s3 }: p* a4 v4 j% `

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-30 06:54 , Processed in 0.043409 second(s), 33 queries , Redis On.

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