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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

* K' e1 E7 j* c* ]0 |: E8 v/ G& X7 m; @4 T4 k  }  P

+ n; X' c2 m8 K1 c' M( x- F前言
7 U) H+ `# F3 j( q6 e$ c" x# F+ P  |
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。7 Y& ]* C/ P( ?7 n
tar
" `! n7 J' |9 s  V: O- ^: r* y( P
: b8 W5 V8 _: Itar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。3 [* F# A: x, Y# P7 e: Z
涉及参数说明:

! C0 ?) I, s8 R. g, A! X) F' \-c 建立新的压缩文件
3 l) Q. w3 y- }( @$ y" M-r 添加文件到已经压缩的文件
" z, C, R+ C. O0 p-u 添加改变了和现有的文件到已经存在的压缩文件1 r( y0 r& l) a4 s8 t
-x 从压缩的文件中提取文件" B$ A  {2 P4 F
-t 显示压缩文件的内容8 Q8 f9 y& p1 x# a8 o+ N6 D1 z
-z 支持gzip解压文件: x9 @7 ]' V1 N: n  b
-j 支持bzip2解压文件& ?5 S& e: j" {8 o3 Z
-v 显示操作过程
* V4 l1 Y; c! z, u8 x( \0 F-k 保留源有文件不覆盖
  c! G3 m& @) p7 C& W0 S-C 切换到指定目录4 X* t; g! `" u
-f 指定压缩文件
; S# h: p. O. z6 i& o0 J! E% O. t+ i
--delete            删除包中文件3 ^# O7 M& @& H" }$ `# M
--strip-components  去除目录: u. J- F( x0 ~$ u; _! h
--add-file          向包中添加文件8 f* `+ U: E* i* O
压缩% z( q+ U- Z( v; \: m9 X8 T

" d# H2 s3 `& p3 S' R归档tar包,不压缩
7 Z5 x$ g3 c3 a& `2 J4 e# @- m; \$ J
tar -cvf test.tar test1.log test2.log #归档多个文件: p# x7 u2 v& @8 [) ~! |
tar -cvf test.tar test/*  #归档test目录下所有文件' l! h# b+ |5 V& f2 ^3 F
tar -cvf test.tar *.log  #归档所有以.log结尾的文件 2 b' q0 e+ C5 N" y/ \  w8 g  z
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
$ r. l; e' g' Y% v; S: A( F归档并压缩为tar.gz或tar.bz2% i( `2 ?7 N9 r" U. d7 X
9 z, _9 l1 `- `9 p+ V! l
这种方式打包对文件进行了压缩:
7 J0 R* w+ X+ r3 t( _7 e6 Ytar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩% ?7 ?" }, m0 v8 h, h8 H
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩1 {* y/ G9 P( z* U" ?& k3 g
查看压缩包中的文件+ \: w# i# f( u& d; {! }
4 p3 d- c' I$ G) p! @- b
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:, N4 H7 H: I! b4 X$ V  L9 a4 I* [) Y7 r
tar -tvf test.tar #可查看test包中有哪些文件
7 u& ~* Z0 |/ O5 H3 r; T打包后删除源文件
) n% C5 e- T' b  u# X+ f5 y; F* J7 j* t2 \. c- E( j: y
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
. _9 @" i  U- H+ G$ R: Y$ Z1 Otar -zcvf test.tar.gz test.log --remove-files
; b% ?" H; D1 x0 F, D7 Y8 c- C打包除指定目录或文件以外的文件& @' T4 U( f, [" F1 v
8 l) E/ P  N; R- G3 T
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:6 ]6 I$ M# q5 E9 U5 M
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件" z- R; }1 G/ E; l* E4 S5 y9 Z
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
! Y6 a0 Z9 h1 a5 B1 x9 i* x  b向压缩包中更新文件  d" z$ f- T& i

$ l" I9 i! ?. G2 O) ~- G+ z例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:, i+ L( D0 T$ e4 H7 I
tar -tf test.tar --add-file=test #只针对tar包
3 e3 |- P2 |6 ^$ F. s向tar包中增加文件
* c5 A; d5 O  g
& l/ e% a  @- e3 l" O8 z; j向tar包中增加文件可使用-r参数:
; V" F2 W3 x4 ktar -rf test.tar testfile #在test.tar包中增加文件,只针对tar! x' m/ X2 ~+ R+ y/ H
删除压缩包中的文件3 z0 n) @5 G- u! c& t
. ^# c- ~  Z  _
在不解压的情况下,可使用--delete选项删除包中的文件:* ?7 Q4 F2 U6 D( l; L! }
tar --delete -f test.tar  test1 #从test.tar中删除test1文件
5 i# J" Y* t3 B1 A解压6 B" ~, ^6 [* L9 b

+ [8 o" p; r7 m/ y# ?, ^解压tar.gz和tar包到当前目录
/ J0 L  W5 m" ?3 Z( i1 E4 r
/ Q4 M/ N1 N2 l: y: Ltar -xvf test.tar.gz
7 X" B* l# M) p8 {tar -xvf test.tar
' J- ]& @0 k: B; W解压到指定目录
3 }4 {- P6 e* _  F  ]( P. b3 p
6 r' ]! x+ D# w! m, ~! Gtar -xvf test.tar.gz -C dir
, K5 |9 o1 a3 otar -xvf test.tar -C dir
' V+ b' J. W2 A4 Y解压包中指定的文件# m3 T* d/ J; q) E) ~6 t
" u: u. K+ i% A, u" a
例如test.tar.gz包中文件情况如下:3 n9 y* G5 M" d: g
1.txt
! u8 ^$ Q* Y: v4 P. Flog/
" Y2 l0 ~+ ~- y2 j! V  klog/1.log' L/ \( b' H0 ?, w* H
log/2.log% V8 @2 Z& b, `5 y9 M* r6 O9 _
log/2.log
$ A9 n( N# v$ z& m# _log/4.log7 \, Y* J/ i/ y% x
log/5.log6 {% J, h4 Q. G& \1 k! Q* }
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
( w( m7 ?; K9 K0 m( [tar -xvf test.tar.gz log/1.log  p- R; o; O& X: f9 N
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录+ a" t% e0 A7 C! g& o+ \* D5 ~
解压时去掉目录结构! O  w0 G: H. s- _- e
" z& E5 p% k, V- m7 s1 f9 a$ ], l" T( |
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):& P' {. i3 t  z9 h  O% _1 X. F
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
) e( o  ~8 h) q7 B5 c1 }4 {解压时不覆盖原文件+ P, V- m# w; {3 U; V& |

8 n6 f8 G' @( F. b) l6 c6 e2 O当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):6 A/ z! c, X* d' O8 X& @7 y# {# v
tar -xvkf test.tar.gz8 T+ a! ?1 f4 j' X! x3 Z1 g: e
特别提醒' _- ]' f2 o0 |. o% I
0 D# S# ^7 o5 G7 q5 _/ m+ b' G. t
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。6 \* R; X0 ?. Y( I' E, @) Y$ C: `
zip/unzip
4 o0 b+ I0 ]7 [. U$ ?6 D+ ^+ Q8 l+ L
zip和unzip命令主要用于处理zip包。8 |9 Y* T0 O+ a
压缩0 p, q+ ]: a. ~& s" y4 x
4 [. J" l9 X6 z4 z
涉及参数说明:
8 J7 D# y4 t5 S; F6 h-d 从压缩文件内删除指定的文件。; c8 }( g8 D, ~7 z8 z- ]; x
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
5 r  H) u- X' I9 B-j 只保存文件名称及其内容,而不存放任何目录名称。
' z  ]' s9 M# ~-r 递归处理,将指定目录下的所有文件和子目录一并处理。" c9 s) Z$ e) @' I* v9 r2 f
-u 更换较新的文件到压缩文件内。
* r3 v; r; U: w: q% z-v 显示指令执行过程或显示版本信息。
0 ]( X- Q) s: {, j8 N-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。  O/ R( S( e1 @3 [0 M7 F/ }
- <压缩效率> 压缩效率是一个介于1-9的数值。: K' [; f* a6 X+ q# B, {  W: Z
压缩文件5 G/ ?. J. C9 V% Z; v2 A

0 X$ @7 N3 F  d) k, Bzip -r test.zip test/ #打包test目录下的文件' O/ `8 D8 k0 s) {. `1 D& y" b
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录+ L8 n% c' Q! V$ Q1 I5 H
指定压缩率打包文件) K9 Z4 H3 I) D& C1 K* c

- J; x: g- E# ~zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长% p! b8 R+ U* L3 k( V) O! E3 ~
打包符号链接文件
0 @* I8 E1 F- H+ A5 x' u
  q# ~+ Q) }8 l! c9 |前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
: X4 d' N4 M7 f5 [* x8 ^zip  -ry test.zip test9 e6 ?4 w$ A- V/ Y. [
向压缩包中增加或更新文件
9 N5 {; _; E& M: o
' [" F+ k+ c$ Y9 V, [* e+ w7 ^有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
1 m+ I; N5 L. }- l2 u/ Wzip -u test.zip test2 #向test.zip 包中增加test2文件" W# `9 X5 E8 V! N9 }
压缩时加密
6 o% S' X$ y. h2 @! x1 Y8 \
" r/ `; |! r) }* p压缩时如果需要对压缩包进行加密,可使用-P参数:( a7 q* N+ Y9 O& i# F, t
zip -r test.zip test1 test -P 66666 #使用密码66666加密/ v. o, M1 Q0 s, ?% D; n
删除压缩包的特定文件
. p+ F! W, Y$ g# l$ [+ n! @- Z
9 Z, A& O' c( |+ W3 mzip -d test.zip test  #删除test.zip包中的test文件
4 ~5 _/ U0 `! ^5 H2 i5 M解压7 C2 u; p9 O$ `3 y. h

  c1 G  ?8 F7 h" U  K" l/ n/ j: \涉及参数说明:' R; p7 o, M- |' j0 U
-l 显示压缩文件内所包含的文件
8 O3 E0 v9 ]8 o: c: v-j 只保存文件名称及其内容,而不存放任何目录名称。6 ^, o4 {1 X- o( n2 G) b! ^
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该7 i5 \0 z% r1 t# F4 a$ T# {; Y
-v 显示指令执行过程或显示版本信息。/ N5 J( P) s% ]
-d 指定解压目录,目录不存在会创建
; U+ z' w8 M# [! w' E, Z8 V查看压缩包中的文件信息
/ \% ^1 \; o# Q) z
7 A2 `* _: D/ W  |unzip -l test.zip #可以看到压缩包中的文件名,日期等信息) |6 {& Q7 {. m* t, ~: ~+ H
unzip -v test.zip #查看更多信息,例如crc校验信息等
: H! a2 i: l" W6 F! E解压压缩包
8 T. l) k7 y$ r4 ?. O1 B' x$ u* m( i! M* U! @1 l" k$ v
unzip -o test.zip -d dir #讲test.zip解压到dir目录! @2 Q" K/ H: n( C, M
解压包中指定的文件
1 i. y: C# z& u- ]2 l* ^" I) L$ b
  O0 R8 A( _- h# m* u9 Y" s' ^如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
& d  A) l0 U. |! ?' iunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录6 A) G6 f9 _6 \
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
1 e2 K8 p, a$ O" `1 W解压时去掉目录结构
, \$ ^9 S! o! E& ~$ U  o/ K( P5 U- Q) }/ p* f
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
- G' ~; Z5 z) q$ v9 F) X( nzip -oj test.zip -d ./temp    Z9 I# |( C& g" }
解压jar包6 r; Z# A5 e" {. R  \

/ q0 ]' W5 r* K0 O5 b! p* Bjar包是java归档包,但同样可用unzip解压查看里面的文件:
& O5 e' A7 o) |, A' t0 G4 ~* Runzip -o java.jar -d dir. A% b6 {4 _4 v7 X0 z" M
gzip* i! c/ [/ r. b  {$ I

2 R8 L( X2 E- o! w涉及参数说明:' Y: @5 z, R: a& ?2 a3 [
-k 保留源文件
, s2 C) n" l5 e; t3 P# @-d 解开压缩文件2 [3 B2 o7 j8 r9 ?- @2 s$ _+ W$ p
-r 递归处理,将指定目录下的所有文件及子目录一并处理  j+ M- A2 f- Z3 Q6 e% j3 _
-v 显示指令执行过程
- O: x, A& K2 N: t9 ytar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
# _! S2 |# n6 g. s' l' _gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
* n/ G# I* |* |: B9 p! U: H2 h( E, H0 ggzip -rkv ./* 递归压缩
: A! A5 C: R- b) e  s' c解压也很简单:) Q7 o# E* j% _/ S% G7 V* x: o; P* e
gzip -dv test.gz 6 @9 C7 p) L, r6 N& e) Y
bzip2
$ s. l9 A3 Y( A( K% O2 w, x
7 n% ^/ c2 D0 w& b$ wtar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
; ?. F/ q% l' v/ W' V, j- wbzip2 -zk test  #压缩test文件1 u" V* m6 h/ f
bzip2 -dk test.bz2  #解压
# g2 l$ H- z" z* O- i. T; m- Xrar/unrar7 D/ z; `8 m( p4 P. U

2 T1 d* S" }2 s' D8 E8 d  lrar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:8 j0 h. m7 f, [  w0 W
rar a test.tar test  #将test文件压缩为test.tar2 b$ z# D# Z8 A( O
rar e test.rar       #解压test.tar
0 s& b7 ]' k& M; A; kunrar x test.rar     #解压test.tar' N3 \5 [: u. G
压缩率比较+ q: x$ b4 g* l" I
' J# N5 L6 h  S  I0 b+ {) A) k
压缩率一般来说:8 y' E6 X0 i8 W4 r9 k
tar.bz2>tar.gz>zip>tar4 R( x1 O' c: R- G. Z/ O
压缩率越高,压缩以及解压的时间也就越长。' ^: k  ]6 H" F* u: o
总结: ~5 M! _/ c6 y- W1 j( W1 O

; t2 J! [- ~+ L& l对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
' J( V. \6 u. o" L6 \+ S1 K有任何补充或建议,欢迎留言^_^。
  Y1 R6 U2 O; b. D* L; t" j# f# X" q) ?% s% j* m

  z5 ~7 |4 X) |6 ]3 y% @
$ J1 z( l( R# l6 l$ ^
- q8 b+ w5 Q; j$ C# @1 k6 [

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 22:10 , Processed in 0.067653 second(s), 33 queries , Redis On.

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