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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

5 @5 E+ s, F- }; D
  ?+ |. T" K! a2 _' _7 F, K0 l& f

  j* R  D4 \  n前言
) x" l7 t/ X9 F) X9 x& N7 Z( a5 Z
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
$ z4 f+ ~! k9 ?7 D8 U- mtar' w7 n$ s. v* `. y  W$ `

$ q* G, N/ c1 J* m1 E" htar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。% v3 j# U! b$ f1 i1 [8 ^
涉及参数说明:

1 N( q# Y$ o  d-c 建立新的压缩文件* }0 ^. f4 f" X$ s1 Q
-r 添加文件到已经压缩的文件( }2 v/ J1 H, a9 T9 b: M0 Q: ~
-u 添加改变了和现有的文件到已经存在的压缩文件
4 P( a. ~2 v  P/ m% U( j-x 从压缩的文件中提取文件" \& s0 W1 X3 ^
-t 显示压缩文件的内容6 }) P3 B. ?% v* \0 o! F
-z 支持gzip解压文件" U( v1 Q$ z4 }7 d
-j 支持bzip2解压文件: p* ]  i1 b( m& y& t
-v 显示操作过程
7 i$ t2 H& h. {  M9 d-k 保留源有文件不覆盖
2 s: l! J! e  v" h-C 切换到指定目录! S! G8 q: i, x$ h* @4 k" R
-f 指定压缩文件% I) I7 k4 z6 N5 ]0 R  O# _# x

. i& G. b" s7 @0 `$ ~--delete            删除包中文件4 Z$ u5 h  Z- n& a; W, K4 p& Z* }8 D' u
--strip-components  去除目录/ k8 m3 s" t8 a9 Q2 V
--add-file          向包中添加文件5 M9 h9 J- ?! o$ M
压缩
6 Y8 l" l+ H8 k% t" `# y, J/ h2 U8 m8 i
归档tar包,不压缩
4 a9 n8 \+ W( d% C% z  h2 ~3 m. o, d
tar -cvf test.tar test1.log test2.log #归档多个文件9 J% r, k* H6 e
tar -cvf test.tar test/*  #归档test目录下所有文件$ r" x4 Y  P# }
tar -cvf test.tar *.log  #归档所有以.log结尾的文件 & L: h, y3 ?1 {3 Q% m( z( p9 w
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
& a: g, V5 s0 Z) i归档并压缩为tar.gz或tar.bz2: n# z4 r1 ^8 Y. ], v
) J$ H# I' k6 r' |
这种方式打包对文件进行了压缩:9 ^6 \  y# R7 Z0 `) n4 s
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
; ?* _6 ]# G7 X. star -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩' T8 K2 Y7 Z( U& p- r
查看压缩包中的文件: n! V! p/ A2 M4 G- A2 L! |/ x

1 |: g% ]% a" ?) i5 [如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:8 u9 u4 |. L+ J1 A0 A6 R* I1 E
tar -tvf test.tar #可查看test包中有哪些文件
) M% x# z/ y& C3 ^5 O打包后删除源文件
: r6 j) T: M: g3 x/ B
; g8 M; |+ S6 X4 J  ~' _有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:  F+ n5 Z$ y  r) R- `
tar -zcvf test.tar.gz test.log --remove-files % _# ?0 w9 ]" \' Z& ^
打包除指定目录或文件以外的文件
  ]$ j8 s! m% r2 z6 W2 b  n7 O$ r1 a  H
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:/ v$ a, W2 S9 Q. {
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
9 L- {: m# G# i3 S9 |0 Q这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
5 @) Q9 t$ J. Q6 d: k向压缩包中更新文件6 g+ j; M0 O1 F9 ?% U  ^% b. y- S, b

; N& _. p2 u1 S例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
$ N% H, k5 w" x7 [8 X$ ntar -tf test.tar --add-file=test #只针对tar包
! s: `4 R# x$ V0 H* c& H向tar包中增加文件
% \  n5 R7 Y, O6 B4 f1 G5 s# D& H$ d
向tar包中增加文件可使用-r参数:
' p, k! g9 r- }8 N' g7 ztar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
. t0 N! b$ H# M5 s删除压缩包中的文件6 u' f) [6 \; Z' u5 b: ]

' [# {0 `! o+ E  b在不解压的情况下,可使用--delete选项删除包中的文件:- `, u/ A, ^+ V  W! A
tar --delete -f test.tar  test1 #从test.tar中删除test1文件! O3 C: W% E: J: }  _5 j
解压
( k8 W1 _  F3 X3 F8 `3 r. N. t1 i/ }+ M% K" {- m
解压tar.gz和tar包到当前目录
/ G* p- E5 k3 I" B; n$ l1 N- O6 G, I' k# H
tar -xvf test.tar.gz
) n% i5 x2 _. Itar -xvf test.tar 1 @( A  s: b, \$ H! Q% u7 [  g
解压到指定目录5 U8 b# h& S6 Q* F

  H- Y4 d% e; Ntar -xvf test.tar.gz -C dir/ E! @" `0 {3 o5 {. b% i
tar -xvf test.tar -C dir& C3 k0 Y( X' o
解压包中指定的文件
: }& D& ^/ j8 d+ V9 n0 L" d2 P$ M- Q/ S
例如test.tar.gz包中文件情况如下:
  y9 ~: B  }5 _3 h, {1.txt- C8 E6 ?7 O. V+ K: P3 G& C
log/
, O% U6 ~0 d8 J# ylog/1.log
* g: u4 i1 H! j. p+ E( [9 X- H0 v0 G; Nlog/2.log
5 U9 t) ]3 ^8 o2 ?/ u1 v/ f- A3 nlog/2.log- K/ g  u) Y3 G' h1 R
log/4.log
% u$ y- }( M; F+ _log/5.log
. C: |% ?0 n9 l$ \如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:, t( y* z- C3 Y4 W
tar -xvf test.tar.gz log/1.log
. U2 B8 Y" p! T6 D$ Qtar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录! g- Q. V. \. w" }; ]' ?* `
解压时去掉目录结构
+ q& E3 ^8 E6 {* H6 H4 b1 ]2 p
% i& K1 E1 u" v% T+ e压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
3 X. w) O9 D  \1 C' k- Vtar -xvf test.tar.gz --strip-components=1 #去掉一层目录
' B% V! v* M$ n* y解压时不覆盖原文件* Y3 q' Y9 [' u7 X

6 M  Y& ?0 \+ p2 f$ k2 |7 w- ^当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):0 l# F; v1 E+ c
tar -xvkf test.tar.gz2 \( H1 {" ~# U5 G
特别提醒
& b0 g4 z0 }; }$ g3 g, s' o6 n) g! w. y2 h3 T4 H/ r' k
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。) l% Q& ?; m( b/ F
zip/unzip: X# ^0 I/ R/ G: \! P7 X( \8 b+ X

% ^" i6 W* W1 g. G7 Ezip和unzip命令主要用于处理zip包。
* s9 m1 ^+ J# ?9 l- u: j) A! b7 ^压缩& C/ W. v- W# }3 E# k
- ~' o7 N+ j0 b. \9 @& q6 n# d6 V0 h
涉及参数说明:6 p/ d/ @+ W0 Y2 Q/ A! L. l
-d 从压缩文件内删除指定的文件。
+ A$ W7 a9 L0 u. C1 P( x- \0 P-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
6 D" Q# L: j; O' f; `2 K" R3 s6 _-j 只保存文件名称及其内容,而不存放任何目录名称。1 h. R7 R0 k* Q, `& P
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
7 T5 h: ^( _$ B7 L5 l-u 更换较新的文件到压缩文件内。
1 @# ]9 ^% E' i-v 显示指令执行过程或显示版本信息。: P9 _# g& ~% N
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
6 s$ i) }' M7 B7 p; t- <压缩效率> 压缩效率是一个介于1-9的数值。8 X. v. s8 k: V' k
压缩文件
4 c# \+ ~( d% o+ C4 N$ F' E) A; O' E; E+ c& o
zip -r test.zip test/ #打包test目录下的文件
$ c. I2 E0 j" q- z# q6 Ozip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
7 s% U2 Z+ F/ M# g; U$ @- c/ @指定压缩率打包文件& S' V# J4 U  H" k3 J0 b: r4 B/ {

! b: w& \0 Z8 o8 N$ @zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长' ]' |; J3 y& H
打包符号链接文件5 f  ]9 q) [! p9 e, P" v' |

1 _- S8 }6 n  c% c9 O前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
5 ^# ~% Z# j5 m8 _zip  -ry test.zip test2 H4 f3 B' ?+ i5 d% r) I8 g
向压缩包中增加或更新文件
9 p. C; e+ c+ L8 O! N8 q* o( r. B. D' A( I
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:; L* a2 w/ L) w' S% {# L( A
zip -u test.zip test2 #向test.zip 包中增加test2文件+ x# O  u9 j1 v1 k, o1 e
压缩时加密
8 b- t* l, }0 d  C: o. X& J' q7 `* A" n# `0 E7 j
压缩时如果需要对压缩包进行加密,可使用-P参数:3 V; Z& t' z9 M6 O
zip -r test.zip test1 test -P 66666 #使用密码66666加密' q$ |3 c9 v9 I9 k' k# h
删除压缩包的特定文件
5 q- b; p% k/ b$ z! \% t* w& d* O9 X6 |9 \1 ^# K: v
zip -d test.zip test  #删除test.zip包中的test文件
; Z8 h/ p' V- _  c( x解压
8 y0 s% [# r( b
- D  @$ K6 Y* ~涉及参数说明:6 b; m4 F4 `( X. u& L+ r# x
-l 显示压缩文件内所包含的文件
# G$ ?' o! ~; U* I" k-j 只保存文件名称及其内容,而不存放任何目录名称。
4 v, R3 [  H1 b0 l$ D) {; _-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
; t' e3 d. {& H# M-v 显示指令执行过程或显示版本信息。! Z$ l' w& \9 l6 f1 q: w
-d 指定解压目录,目录不存在会创建
, @- J% ~  a6 r. B9 y$ ^0 B查看压缩包中的文件信息! t1 C; _  y4 ^: q" B

* n" ?; C* Z6 b  I! w$ `' G! f, {unzip -l test.zip #可以看到压缩包中的文件名,日期等信息$ @, m0 T9 W' e# A. g
unzip -v test.zip #查看更多信息,例如crc校验信息等
0 t* b* o8 V7 g% ?解压压缩包
- @) }) e, Z+ @. p: g: E% [1 D% T& `8 ^4 s# ?# h. Q& z. q
unzip -o test.zip -d dir #讲test.zip解压到dir目录! V6 A( {' q# C
解压包中指定的文件
) k5 |- J) _" _( r& p8 v* J
0 I/ v; s7 L# g5 A) F如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:# v7 f4 G7 T, S. x5 i; K3 O1 I
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
  B( Z( j( c8 l; b/ Funzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
' b( p) x/ A& U$ E解压时去掉目录结构
% ^$ w: A( }/ J3 ]! v3 L) ]9 ^+ j) k" u  G: e. T8 [
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:9 H. W. f) Y- H/ B
zip -oj test.zip -d ./temp  $ R0 B- G& ^& B' x  @
解压jar包
% A5 n5 D% V( _9 U; M9 w& z' g/ ~! A9 q
jar包是java归档包,但同样可用unzip解压查看里面的文件:
' Q( w8 e) k3 G* d- eunzip -o java.jar -d dir
- S. \5 Z5 n& _( Dgzip
2 B9 x/ h3 c& u; `
8 c# y: O+ f. s- M/ L% Z; ]涉及参数说明:
- J. @5 {: d, O+ s9 D3 T8 P-k 保留源文件
4 a; O# P% \- ?: R9 K-d 解开压缩文件& W# Y  ?+ |6 `; M8 i8 Q% W5 `
-r 递归处理,将指定目录下的所有文件及子目录一并处理  b# x) v1 D+ g3 N$ ?
-v 显示指令执行过程
( O3 B) W  A7 l( Ptar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:' [3 @% u" s5 `! t2 q1 _
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
9 V. ^7 w; J* q1 M" q$ m: ]/ Mgzip -rkv ./* 递归压缩
% |, }! m- G$ P解压也很简单:
/ q% ~* n; Z$ v$ ^gzip -dv test.gz
$ E% B% N' x  y2 n8 P( N' lbzip25 F; B2 S( ]% z+ V' z& g5 S8 _7 V: o
1 o& |& b9 t  D  r- _+ Z  Y, a
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
+ a: |+ n7 N# X9 U6 [! O7 t8 Z1 D. ]bzip2 -zk test  #压缩test文件9 J, L1 i% S# L0 v+ N1 B( ]$ I
bzip2 -dk test.bz2  #解压" Z; j/ v& h0 E$ g0 a/ j& ~# C) z
rar/unrar. L$ \9 P' f- @' [* N( R/ {

  t, q! k$ i. s, X. B" H* Urar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:6 h0 D# Y7 d& W2 d6 k
rar a test.tar test  #将test文件压缩为test.tar
8 p( p5 b2 L. D$ J0 u# grar e test.rar       #解压test.tar# G) g, y* R7 r/ M! j
unrar x test.rar     #解压test.tar
) e  m) \- o+ T8 A, r( Q& \& \4 [2 F压缩率比较& h6 U, T' A9 ?) g+ ]
$ c3 _2 `+ p  k
压缩率一般来说:# T4 S1 ^. m5 F# E4 S3 r. J
tar.bz2>tar.gz>zip>tar8 a' |: b$ Y4 |) W- d* K
压缩率越高,压缩以及解压的时间也就越长。
1 S( h. \' C2 r总结! Z- F6 x% m" H% @: W
5 }' z5 G' W4 |6 G6 S  @$ F
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
, a+ p6 }/ Y4 D  m2 x: Q* Y; ]有任何补充或建议,欢迎留言^_^。) R/ m' w( n6 q& X' ]0 r
' u* s4 x" H" I8 @

: u+ x+ }7 x- n! y' Y' h/ z4 Y* j! W3 M8 L
0 m% P; `4 d2 e& _+ p3 [

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-17 04:13 , Processed in 0.161169 second(s), 44 queries , Redis On.

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