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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

& a1 F( b! _5 v: ?$ ]1 ~+ `- g+ a. C" C/ `
9 R5 Q7 S2 P' O3 p& C/ a: A8 R
前言
1 b9 M3 a, j- I& H  d3 h; J
$ }6 S* N; L- X7 ~6 nLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
2 |( n: b" `4 ^( @tar7 ~+ m1 R9 \% a. F- `& M

5 a/ `4 t% W) K& Ctar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。, S* V' U% W0 M1 y. R
涉及参数说明:

& S2 b; }1 x$ R0 v-c 建立新的压缩文件
: T! q+ u( W( S: u-r 添加文件到已经压缩的文件
3 O0 b6 `  U, q, X-u 添加改变了和现有的文件到已经存在的压缩文件
- _) e, i' m0 S& [0 ]0 X. z-x 从压缩的文件中提取文件
9 _& t) S1 f! d8 O6 B2 V-t 显示压缩文件的内容$ c( u; H9 {; ]7 _! g4 H. v
-z 支持gzip解压文件
% B; b+ G7 V" Y0 e  T! J* Y# ?9 `2 I-j 支持bzip2解压文件8 \" b  j! x: |9 J" o! W# d, C! a
-v 显示操作过程
, E) H1 K' b) j7 _* N  ~! s* T-k 保留源有文件不覆盖8 C9 u& M9 ], D( j
-C 切换到指定目录
+ n% M7 [5 }% O! b# Y* e-f 指定压缩文件
: b4 D2 f& k! d9 H, f6 v1 ]4 v* Q* i3 h5 n- e  g* G" K) y
--delete            删除包中文件
' D3 [2 r* R. ^  P7 \  [--strip-components  去除目录
; O( J: ?! t% x! O--add-file          向包中添加文件
0 e$ A" k- O# x& J0 p$ v压缩1 o3 N  q' }% i, e9 X
- p+ B: h6 M( c+ c% S6 P/ }
归档tar包,不压缩
& l' I* N4 b0 R6 Y/ x
6 b8 ]8 ~6 Z( ttar -cvf test.tar test1.log test2.log #归档多个文件! ]8 d- i9 d* w
tar -cvf test.tar test/*  #归档test目录下所有文件; E7 F3 y4 k/ G) s8 ]% Q
tar -cvf test.tar *.log  #归档所有以.log结尾的文件
8 G9 z/ p  m9 l; u由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。4 G$ ?7 u& z9 Q+ b* |. y1 r& `
归档并压缩为tar.gz或tar.bz2
6 Y: k& y) f9 c( Y6 b% B5 \
4 o$ q& a/ s4 [这种方式打包对文件进行了压缩:
0 \+ a( h  _6 W0 ^& G, |; Ptar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩% d8 Q2 b6 e) j0 |4 o
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
- W3 f8 D. S( l. |查看压缩包中的文件
9 x  W  E) r8 o, [8 Z( n1 X
5 \$ }8 l: n; T/ p9 g/ C0 _3 A; m* F如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:7 m+ {1 v# l+ r# H
tar -tvf test.tar #可查看test包中有哪些文件. F5 F$ h  p: r( x6 K* g1 }
打包后删除源文件
  l5 e! |' s6 i( k0 J" z8 B, ^1 Y1 b. \2 t$ Z
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
8 e5 W5 m. v0 o7 Y5 V) M: F" M! b1 X2 ytar -zcvf test.tar.gz test.log --remove-files
, m- M3 A/ O2 ~  N打包除指定目录或文件以外的文件8 y* T: @6 p& W, \1 L9 v

* }. X- `) W. c) j) K对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
2 S5 y4 `  k; d9 _2 i& Ytar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
' Q) Q* d# Z6 q& T: c5 c这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。/ a% Y/ v+ Q+ C. _; g
向压缩包中更新文件+ Z! r, y' I0 t0 T+ B

5 B3 R! _8 c% u例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
+ _6 C- j' g+ G; R7 e0 gtar -tf test.tar --add-file=test #只针对tar包
% k0 I( L. h/ l* M. |: q6 P向tar包中增加文件
: P( ?$ v7 G' S$ O! }/ ]6 a+ E; q4 B8 I; w  p4 V
向tar包中增加文件可使用-r参数:1 S. v  n$ S+ ?' z
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar6 A/ ?5 i( ~1 j
删除压缩包中的文件
% S# a: |3 C4 C: ?1 {$ B1 f- H7 R- @# s4 S3 x& F8 r
在不解压的情况下,可使用--delete选项删除包中的文件:
  J# N8 m% ^2 l) |$ y& Q% Itar --delete -f test.tar  test1 #从test.tar中删除test1文件1 t$ J, p6 z; c: N- X$ y7 K% |8 d$ W
解压" C9 \) V3 r6 {
' v& Y( Q7 s7 i7 e; D8 G  u
解压tar.gz和tar包到当前目录0 @! o7 h2 S/ j. o9 L% ^

) N# Q% p2 I6 }5 J8 _8 Otar -xvf test.tar.gz
; _0 b+ l" c/ O( J$ Ztar -xvf test.tar
, _4 `$ j+ R8 y( n9 l3 a$ H5 J解压到指定目录$ _6 c& U5 n2 k4 W, h, _& l" C2 ]

; D  R$ g  }9 o. ?tar -xvf test.tar.gz -C dir
' l7 _7 _- U+ k3 u/ a* D" j5 ~tar -xvf test.tar -C dir/ l" E$ e8 T8 i2 b7 o
解压包中指定的文件
# r8 y+ G4 {7 k/ l* \# ?7 l6 u+ U" J9 U. {' a6 H
例如test.tar.gz包中文件情况如下:) V2 G; D2 |7 V) ]9 u; S$ D& s: l
1.txt; k* T& ~- O+ L+ @( p; x9 D
log/; a+ ^$ g8 M$ H& A
log/1.log) V, N1 |% s$ G5 Y
log/2.log
% L: e2 M8 G3 y3 e! a9 w- g  R" Tlog/2.log
3 K# d7 ^( T) G& W1 U: R7 |log/4.log
4 N( ~5 B9 J" b" ~5 W$ `log/5.log
7 k: i$ L# k0 t% l5 I如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
: Z  Y# e5 o; c( {- W! Y4 ~tar -xvf test.tar.gz log/1.log
; u; B) a% Q$ [. R  Ctar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录0 [7 k  G7 Y1 B) y" }0 z- _' g
解压时去掉目录结构
1 G( U3 Q8 F9 p7 N& i. Y9 L& b9 C% l
) Y  l* T+ C3 Z  N$ n压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):# L2 C* Z1 B3 p6 W: b  b5 ^
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
7 V7 K. p+ L; M$ h4 _" J4 ]+ R$ {解压时不覆盖原文件
3 k3 \8 V! B1 m- M" G- b* _; L1 N0 _# P6 s
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
3 U  _7 N* A. Xtar -xvkf test.tar.gz/ B0 Z$ A1 m0 G* L6 H
特别提醒
. m* [" w) h$ S/ x# Q! R
  d2 U% N' |" H7 {# S  }前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
, [( d) V7 f$ F, Gzip/unzip
" K# b  j% }9 S- `) K, B6 ^3 r6 r8 d) i( w
zip和unzip命令主要用于处理zip包。
" |  \' Q* z* G# v5 o' J压缩
/ _+ e: e9 `6 X( \- b0 I5 q. k; L9 Q: P. ~
涉及参数说明:
' q% l* C/ g1 e+ x8 S-d 从压缩文件内删除指定的文件。
+ L! \& [! F3 ?" p-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。* H' D9 V' a5 \1 J: Q# @1 s/ s
-j 只保存文件名称及其内容,而不存放任何目录名称。2 f; r4 L8 k  n9 }. Q
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
1 z+ L: c" ~( y% i-u 更换较新的文件到压缩文件内。
3 O/ U! d4 B, }% \9 G-v 显示指令执行过程或显示版本信息。8 m: _9 r2 X! ~% {; B/ @
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
# |  K3 Y" R1 S2 B1 P) P  z- <压缩效率> 压缩效率是一个介于1-9的数值。& \+ _/ H# t) z* M6 F* m
压缩文件! n6 k/ z( c! f0 l* U3 x
3 J  i  G$ s  @! T: U6 D/ P' j  h
zip -r test.zip test/ #打包test目录下的文件+ O0 u. m! i3 G# T/ U9 g9 R5 O
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录; _. r+ b  _) P0 M' M6 k5 w
指定压缩率打包文件; m) O; \4 f6 F$ F. A
; G- T5 e8 c0 b! Q  \3 ?$ Y3 a
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
' f& I, q8 J# k打包符号链接文件6 }4 }$ z4 |5 A% h
* h' i" z! X8 y8 _0 U9 W9 e
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
; A: g. U  O" Ozip  -ry test.zip test0 k" E) ~; L* z4 A8 V4 ~
向压缩包中增加或更新文件
) n1 X& g1 ^! M5 i% P+ i) L
  z) l0 ^& s9 E7 l有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:) f- Q) z  s/ e. x& o
zip -u test.zip test2 #向test.zip 包中增加test2文件" \4 [6 J# B) k1 X/ m
压缩时加密. l# ^+ o6 D8 ]; m6 M' h
; C9 ]' z4 x$ t+ |
压缩时如果需要对压缩包进行加密,可使用-P参数:: M7 }- ]1 Q0 }. K
zip -r test.zip test1 test -P 66666 #使用密码66666加密
/ I2 F4 p+ W7 f" @' X删除压缩包的特定文件* p" g, B+ W# P; T6 ^3 s* {% p

9 L) p6 S: {. Tzip -d test.zip test  #删除test.zip包中的test文件
+ {( e# H- s* W4 p2 A( ?7 q解压
4 }$ e' D+ X# v9 {5 h* ~! s8 l2 e* J* g7 x! u( m# m4 C2 Y* L
涉及参数说明:
" L- {3 K: n, L( N1 K% |# V1 H-l 显示压缩文件内所包含的文件7 B% A& l  n; U; A% `, e/ a
-j 只保存文件名称及其内容,而不存放任何目录名称。
8 x1 X. D$ i. Q" P-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
; e; p. V1 g# b/ i+ z; ?-v 显示指令执行过程或显示版本信息。
, k+ t* Y! H$ s" |-d 指定解压目录,目录不存在会创建0 \6 ~/ j, q& v& ]( h& E- F; _
查看压缩包中的文件信息
0 j# w: {6 ]0 [* C. H& j- Z- c5 T
+ i. T  {7 L" T2 _0 e( Hunzip -l test.zip #可以看到压缩包中的文件名,日期等信息4 K# `3 e9 z3 L/ d3 G
unzip -v test.zip #查看更多信息,例如crc校验信息等
- i' G0 b% _' o+ @: h8 l2 h解压压缩包
9 [) D3 Y5 i3 t$ w! J2 |
2 X% c& E  {: M2 tunzip -o test.zip -d dir #讲test.zip解压到dir目录6 q# H0 C3 `; h1 J. F
解压包中指定的文件
  f4 v4 G8 N9 E2 G5 l# ~/ [2 B- n" _5 k0 C& O& o
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
; A# m3 x" @' N! }8 [! m. e0 Bunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录7 N- |. i" l9 L' k, L( p
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
  s0 N1 B, u3 X  Q3 m解压时去掉目录结构
( z8 Y! R9 r/ o* m7 K
9 S3 n6 w7 E0 ^7 H压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:( G$ @- @. j+ |& b% g
zip -oj test.zip -d ./temp  
/ L' V9 r. _  l, q* H+ d解压jar包1 |# E0 ^  B, g- T. S: P

4 ^# K/ l# o8 k  s7 R8 X' B  yjar包是java归档包,但同样可用unzip解压查看里面的文件:
' f* `* P) U3 q7 A  w! [unzip -o java.jar -d dir
5 W- ]9 A+ v9 |! `: U, j' Qgzip% K4 b+ X. |* `5 p

5 _) r; l& {5 e2 ?" `- D: ]  \涉及参数说明:
# U$ [9 _% D* Q5 ~+ a! N, c-k 保留源文件2 R" Q" B- g1 x1 W' z! p- Z
-d 解开压缩文件
& U  c! C! a  ^% T( g-r 递归处理,将指定目录下的所有文件及子目录一并处理
3 J. Q8 p! K) k  Z0 ~-v 显示指令执行过程
0 P$ Y+ d1 R) Ztar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
" m7 {4 b- w; l& W8 y/ }- Agzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包' i3 `! I5 Y  O( T0 T
gzip -rkv ./* 递归压缩& \2 s% H+ F% B& S0 S. X
解压也很简单:
1 l6 S8 P* U  g, V  [1 rgzip -dv test.gz $ S5 H; Y2 ?* S
bzip2# Z- H9 ^* j, ?; c

- W( L, M  u! s3 x& gtar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:7 d4 i0 b/ r( ~" F- B& r# C+ i
bzip2 -zk test  #压缩test文件
! k# |1 Z  \5 `& Qbzip2 -dk test.bz2  #解压
/ u) t1 f2 |5 Xrar/unrar" t$ B+ x; [% Q) w( m4 e

6 e; D) I7 y0 Q( ?' krar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:
/ w( H* M- _% [* Erar a test.tar test  #将test文件压缩为test.tar( z' h. L: z4 ~! O) }
rar e test.rar       #解压test.tar
6 E5 s; h6 O3 munrar x test.rar     #解压test.tar
! S& M1 t) ~& }) |压缩率比较* ?% A' R1 B: r9 I6 z
6 t% X2 }3 b. o: P* w
压缩率一般来说:- t0 I) H2 c: T* _$ e, c! W$ ]3 S
tar.bz2>tar.gz>zip>tar
5 g2 u4 v& ]; i; B) _' k压缩率越高,压缩以及解压的时间也就越长。
- [3 C4 z- S2 @& H+ O总结0 y) s1 C4 D$ i* Z& M& x

; N0 E6 E8 Y4 G" A' ^对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
  Q4 W$ R7 ~4 i, i+ }# f% C有任何补充或建议,欢迎留言^_^。) W! s: k/ S+ n% B! s; ~' x: E
) ^1 J& ?1 e) g; E& ]
6 g$ _" ]) q0 R" t6 N5 f/ S

  X  f3 ^4 w. t; Y

" Y& h5 l; u! B- s3 z5 o& b( \

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 03:29 , Processed in 0.042046 second(s), 32 queries , Redis On.

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