51fly国际课程 (51fly.win)

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
: E: v* L+ a. d8 x$ e
- u. M) M* o* U

3 o7 X8 Z. ~6 _, [- |前言
5 q0 x  I0 L" ~7 Z: p3 n
& j+ A8 L: y& d3 ELinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。  g8 ^9 f5 l8 `- W, ^2 h
tar
( r& S& p, k: u* t& M- |9 q3 F, d; k% U  t" K' Y, `  a
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
; V+ n5 x1 q" B6 V涉及参数说明:
& f, c  b  k+ r3 _7 R  f& b
-c 建立新的压缩文件" e8 X. ^: u2 Z) p
-r 添加文件到已经压缩的文件
7 |) d( N9 P0 e2 t-u 添加改变了和现有的文件到已经存在的压缩文件
0 ^6 Y' J1 K, x: d-x 从压缩的文件中提取文件
, m% |( [8 X- i8 H, y7 [0 ~9 V+ m-t 显示压缩文件的内容
0 M2 P+ _- h3 t* M. g1 b. \-z 支持gzip解压文件$ ^& I9 p* h% p& H& v8 ^; T2 |3 O) y
-j 支持bzip2解压文件& v! v7 O% Y. Z0 H4 ]" S9 X( N
-v 显示操作过程
: o3 j- _. H, G, M  m7 _-k 保留源有文件不覆盖
7 ~+ a( k, ^; i" g- X/ E9 Z1 Z+ f-C 切换到指定目录7 W2 c' b) N! ]
-f 指定压缩文件
* O$ z$ I4 {! t& F
4 _! f* s& B; ?1 X8 X7 @0 ~6 G--delete            删除包中文件
8 c, z/ i9 g8 ]4 A! f) O--strip-components  去除目录
3 y* p) I3 f. e0 f! H--add-file          向包中添加文件9 D2 G6 X7 p; I& B* {
压缩3 i7 L2 V0 i. Y& l
) p0 H, ?0 y8 L2 P% [+ e; U9 E# q" c
归档tar包,不压缩& a& y( H3 t4 r4 T/ u* B
$ B( ?# L  |% D4 E0 A
tar -cvf test.tar test1.log test2.log #归档多个文件
) T2 M0 A( `* ftar -cvf test.tar test/*  #归档test目录下所有文件1 J4 K  `: W+ w1 n# d2 d9 r
tar -cvf test.tar *.log  #归档所有以.log结尾的文件   n- G9 p4 h: ]. d, o
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
+ K1 R2 L: z  E1 Q/ X) x$ V归档并压缩为tar.gz或tar.bz20 P0 W/ x9 v1 \6 [0 G' f& p% C
  d0 y5 J$ i- o  m8 i
这种方式打包对文件进行了压缩:
2 a6 ^* k9 G% j$ _# M0 o' Ntar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
2 Q/ \0 y7 |6 [2 }tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
8 J' [# }( y' j查看压缩包中的文件
: j* M9 U( g0 w  L9 L% I4 {  g6 U3 N( T4 l0 G0 M% I: [
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:! P( z5 i, S" ]* m8 z
tar -tvf test.tar #可查看test包中有哪些文件
5 k: j( ?& x9 h1 C" _" \2 h% L  p打包后删除源文件
, I# U2 }& |. G/ P. K$ ?$ ?3 A3 O& T+ |7 f1 `
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:5 I8 ]! H' l# e7 I6 r& v4 N8 D: H
tar -zcvf test.tar.gz test.log --remove-files 7 D% j% v: N8 n7 ~
打包除指定目录或文件以外的文件
9 J( F% j% ?" T. g, P
8 k) V7 c' M9 A9 R+ B对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
& B4 z' b' F& Vtar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件% ]( o/ [8 ]1 F* y7 _
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
" i0 ?- ^6 i8 x( j向压缩包中更新文件4 M1 j/ s3 U: f7 V6 e

. b+ A# n" V$ M! P) J( M% U例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:$ Z/ e) G- ?$ {* P, S
tar -tf test.tar --add-file=test #只针对tar包; H, e/ ~6 f6 K
向tar包中增加文件
3 X/ }% J7 u) n; i5 h# R" d. l3 Y# _1 J; ^: J* ^- ~4 N, T
向tar包中增加文件可使用-r参数:8 e) t' I- v9 I% [# \* x
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
( ?: G% C) r; e( X4 O删除压缩包中的文件
2 m% X4 a- `- z* ^4 R. d) Y
: R; E3 p  ^9 ?. |& y: I) G8 j$ N在不解压的情况下,可使用--delete选项删除包中的文件:
" z$ d3 Q6 i7 ~% z1 G% v; Y+ F4 otar --delete -f test.tar  test1 #从test.tar中删除test1文件
8 e5 {7 O  f1 a- L' |解压# @: s. O: O/ L- _: {4 {

0 Y% D9 [6 H: q9 w2 w解压tar.gz和tar包到当前目录: N1 p2 l3 v, x; Q3 R4 @3 ^

( M2 s' w: ]6 R. S/ M  A% ztar -xvf test.tar.gz
. B! G& }$ O- J( k4 Qtar -xvf test.tar
; m& T4 _9 R% A! }# ~解压到指定目录$ P0 P. P. \/ I2 ~( i

: d' V& k3 Y1 s3 ~0 V* O5 star -xvf test.tar.gz -C dir
- F1 [% {7 ~$ j6 T$ ^tar -xvf test.tar -C dir3 I. T) R" P# B
解压包中指定的文件+ `% h, {7 v' P2 Q7 ~0 B- B! s

$ C& I( }4 ]! I( g& h例如test.tar.gz包中文件情况如下:* m# p2 o7 y7 Y+ F
1.txt
9 p" c% J- N- ^& ]' Qlog/
4 d( N/ d6 u! d3 Y. _' dlog/1.log# P4 y& z: o8 s. @
log/2.log, C- c. y4 N9 T
log/2.log5 R% W3 c) T+ x1 d& g- i* v7 `
log/4.log
/ l  `; X" v) plog/5.log
. N; G$ e# A. T. L9 C如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:1 X! U$ I" x9 f! _+ R- E
tar -xvf test.tar.gz log/1.log6 _  N: I: w* h8 a/ J: W
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录; ^7 i/ s: D. S: d
解压时去掉目录结构
, N& x$ k; |% H4 [" J# G0 Q( _9 h& l( Y# `5 M; t* n9 `7 S* L
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):5 E. `' t+ [/ K5 }/ `! C
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
3 o# O0 c7 h2 o! X( L' u解压时不覆盖原文件$ ?% F0 a6 K+ ~$ a" e0 q
+ b% Z( C1 i1 s  W
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
- g1 J/ W* b% t$ ~7 t0 Utar -xvkf test.tar.gz
# k3 Y/ n- C: O特别提醒
; ^8 z( q, _) m) n0 a7 ?0 J, n" J2 F9 g/ e# g' M. ^& ]# h
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。& M, f7 S% f5 Y7 Z+ J7 J
zip/unzip) ]9 m3 ]/ r1 I6 y- m
% m: K2 M- f( C4 K/ _; p
zip和unzip命令主要用于处理zip包。
3 n8 F9 ^6 ^  u0 i压缩
1 K; s! t2 e, N- Q) v" j* Q1 n# {1 q: ]# F
涉及参数说明:! G* E: L/ G6 g+ T! h/ B
-d 从压缩文件内删除指定的文件。
" V' J- o9 b' t-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。( `  Y1 o( O6 z. T2 j  E
-j 只保存文件名称及其内容,而不存放任何目录名称。
( Q  m* _1 k* ]* B-r 递归处理,将指定目录下的所有文件和子目录一并处理。& w% C& Q. n- L; j7 J" \
-u 更换较新的文件到压缩文件内。
. g% j! v3 e7 r8 ]3 y3 o, v+ [-v 显示指令执行过程或显示版本信息。- M' n# n. ]5 }+ G
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。6 \! v' K! {0 O
- <压缩效率> 压缩效率是一个介于1-9的数值。
- Z$ }$ B3 v* r. Y) }压缩文件
6 a2 d, p( \- Q3 b8 L9 I; o% t8 F+ L7 [, F/ h1 @2 Q& V
zip -r test.zip test/ #打包test目录下的文件4 y" H/ j. T3 ^9 F
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录3 ?. w$ b" }9 X- @& W0 q# ?
指定压缩率打包文件
; b' u( T) g# [; k* F
5 \+ w& [/ C. l- c3 q% p, zzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
% p& W8 }" L3 `- `/ L打包符号链接文件
% i' ^0 i, n* w  E% o1 Q7 N' T; _$ \6 C3 P9 V2 q0 E4 o
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:( h) _; |3 i5 Z& d( S; V9 o
zip  -ry test.zip test
* b* Q. U* i# n, Y- q向压缩包中增加或更新文件
$ h/ b7 P8 X' n9 I; X8 h) p% E# X6 W. l8 D
有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:" h* E& s. T8 Y  f* k8 F
zip -u test.zip test2 #向test.zip 包中增加test2文件4 z5 I+ a9 p$ U$ _
压缩时加密
% B1 [1 @+ w- X0 `* i0 S+ V+ E
- M4 P' f5 I& h4 [压缩时如果需要对压缩包进行加密,可使用-P参数:
: u1 H( H  F2 zzip -r test.zip test1 test -P 66666 #使用密码66666加密
  Z/ R6 ]+ p, G+ g) R: k, }+ ?; ^删除压缩包的特定文件
" S4 g+ ~- I/ b, f, H0 U+ `- Y
- j5 {1 n/ J" n" X7 D% @zip -d test.zip test  #删除test.zip包中的test文件
, ^4 g( E9 ~, t) ^& h8 M1 {解压; B2 z" E2 n9 V
- J: u# T4 F) Z( g
涉及参数说明:/ p: u' ^/ f4 @7 B) a
-l 显示压缩文件内所包含的文件
0 v; a5 q5 u  p5 L+ I/ M-j 只保存文件名称及其内容,而不存放任何目录名称。. \" b8 W" v4 |% F
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该1 b9 W; Q4 G; V' N
-v 显示指令执行过程或显示版本信息。% b4 z5 Z( K# c
-d 指定解压目录,目录不存在会创建6 i, t# g! m6 U; c3 a4 ]" h
查看压缩包中的文件信息: E- ^* F1 C3 W! Z; G" ~
) u- z0 x( {: J7 i
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息$ l* V$ Q% W0 ?
unzip -v test.zip #查看更多信息,例如crc校验信息等
6 v$ \  V, }2 ^解压压缩包: Z) m' S/ p' ?

( x4 G3 v  \; p: f2 o2 \unzip -o test.zip -d dir #讲test.zip解压到dir目录  Z& [4 v( W/ T8 r0 M, @' c0 x# v, V
解压包中指定的文件
! U0 H! h" W  G! O. S9 e
' a% T' ^$ x! L2 u+ {+ B如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
8 K6 S% n& R+ a: E0 H  munzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录+ c% \8 u  q  [3 W8 x7 z, W
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件3 O1 @3 q" d# e) F
解压时去掉目录结构
3 ~: E- v% V- t0 w4 H0 j, S( Y  V5 S: Z4 F. l! j
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:' c6 ?$ I. F8 C, i' w8 l! `$ K! z
zip -oj test.zip -d ./temp  
- B5 _# |1 {4 E: |" k/ q3 D+ V解压jar包/ `( c/ f" B  T2 ~  \4 @. t

7 z( e( a5 G! }: o. Y. Tjar包是java归档包,但同样可用unzip解压查看里面的文件:
$ N( t- P/ t+ ~# |& Z6 yunzip -o java.jar -d dir
0 {" o6 J$ F5 ~% X6 l$ X7 l; ggzip
' M8 {$ g) ~5 |& C9 C4 ], y9 E4 K) U  X5 O: {: W$ c6 g
涉及参数说明:( V* S9 O+ }4 @0 @
-k 保留源文件
/ U/ o& {7 ?/ b* _% `6 h# H-d 解开压缩文件
& \6 l. q  l1 H, Q-r 递归处理,将指定目录下的所有文件及子目录一并处理1 c4 O" I2 b$ q- K
-v 显示指令执行过程( F+ U9 M  a- d& \
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:( O. @$ U- F: A- Z: q5 D- M
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包
* P. _( A" ~* [  u$ wgzip -rkv ./* 递归压缩
. s7 g. U: q% n解压也很简单:
8 o6 \- E* x5 c5 K8 O0 n5 N" k5 Igzip -dv test.gz 4 N# [! k* i0 Q: I' M: v. a
bzip22 C7 V8 }$ b; [" `! k+ t
7 h( F5 m' q! a* @( Q
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:/ E5 q+ w; X5 `0 L( N$ ]" G
bzip2 -zk test  #压缩test文件5 z- N; ?. J# N- J. \
bzip2 -dk test.bz2  #解压; T' R  z2 M0 @" F
rar/unrar5 K9 r8 x( E2 p+ x

/ Y2 y" O7 \6 `- frar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:* g% K3 _1 e1 j9 D
rar a test.tar test  #将test文件压缩为test.tar
  N; U5 M0 v1 y5 R" o2 e& grar e test.rar       #解压test.tar5 d  f2 D8 y, }8 ^# v8 J8 D* ~
unrar x test.rar     #解压test.tar
3 o# V) T/ b& [+ t压缩率比较! i7 R; U# Q- h8 P
, ^% V6 x; Z) a4 z) C
压缩率一般来说:
+ Q2 L6 Q8 k" \. x& {tar.bz2>tar.gz>zip>tar( r7 o* q4 ^1 N4 `
压缩率越高,压缩以及解压的时间也就越长。. U+ i0 t- m, I& Q0 M' H- z# ?
总结5 Q; j" Z: n3 O* f0 L  B
4 v$ H6 E0 J- V2 e3 k, q2 s& n
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。; w. b( N4 g0 w  s' S6 X
有任何补充或建议,欢迎留言^_^。7 d/ B$ n) ?* n

8 G1 i1 U" r" I5 x
* P+ y( f! O/ e' a+ Y7 S! z# H' S: Y( n& O& I9 p# Q; h3 U% P

7 J/ S5 [9 d0 x

微信扫一扫,分享更方便

回复

使用道具 举报

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

本版积分规则

浏览记录|手机版视频|手机版试卷|使用帮助|51fly国际课程 (https://51fly.win)

GMT+8, 2026-4-16 22:17 , Processed in 0.061485 second(s), 33 queries , Redis On.

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