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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

* L  I) A- H$ ~7 X2 G
; z6 ?4 [  e- Y3 x$ h) g

( }3 _, N: q& l& Z7 j前言
8 c% Y( [7 d6 w$ Y$ F( L' Z9 x+ H  n1 e% c- p
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
5 b! w0 l0 S  r* \6 H. Q  P5 ]& i) w8 }1 @tar
3 P) [$ a) p" [! p' i  o2 s! h5 ?- F7 v( t# Z
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
+ K5 P% r0 V# ~7 k1 M& I! {涉及参数说明:

  O0 @7 |# d. S1 h, k9 N" k-c 建立新的压缩文件  |9 i5 ]+ y  M0 j2 X
-r 添加文件到已经压缩的文件9 a! |% k+ B' f4 g2 t7 i( [
-u 添加改变了和现有的文件到已经存在的压缩文件
, S! y! F7 t9 g& R-x 从压缩的文件中提取文件
5 t7 \- t5 W! e( x" [5 _. z! F% @-t 显示压缩文件的内容
0 ~9 [& x$ [- n4 a-z 支持gzip解压文件' V3 A* ^( G' s' o) P0 f; W
-j 支持bzip2解压文件
2 n9 H8 c7 _: i' l4 g-v 显示操作过程
) l2 a* g2 B3 ~, g+ E+ D-k 保留源有文件不覆盖9 G  k+ |! ^+ g. o" C1 [
-C 切换到指定目录
4 ~8 o- y. o4 |5 J% ~/ v-f 指定压缩文件. K5 ?) D# c, C4 ~0 E

5 N+ e- K% W4 L--delete            删除包中文件
8 m7 G+ [$ ]: c5 s$ b0 V% n--strip-components  去除目录  k: `. l, o6 C" \
--add-file          向包中添加文件
' I, L, p7 a! N" F! l+ ^5 S; T压缩
8 V# N- t9 Y# {4 l9 Z' p4 V6 i# E1 n9 J5 u! c) A
归档tar包,不压缩& a4 c2 j' M7 ~  a; ~

. I0 O$ l8 i  n5 Gtar -cvf test.tar test1.log test2.log #归档多个文件
. \7 k! [9 w1 V* `2 @3 Atar -cvf test.tar test/*  #归档test目录下所有文件6 g7 E' r$ K% g  Z3 u+ S. a( s8 q- d
tar -cvf test.tar *.log  #归档所有以.log结尾的文件
7 S) J- V; g2 L7 W由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
" C, S) U" U3 @! f归档并压缩为tar.gz或tar.bz2
; T! l# a$ K& a- Q$ ?1 d# B- K' W5 z. x% f# O
这种方式打包对文件进行了压缩:
0 C' L& M! K$ R  H% T+ u; Q( y; rtar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
* z  E0 B6 P1 P0 M  ctar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
! W5 U. L  W5 U5 T% e查看压缩包中的文件
5 {& w4 V" y$ ^7 }( N8 q& B) I5 K4 K# G+ G/ h
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
' y+ Y+ p3 t* [! y( Z* p2 w5 ?tar -tvf test.tar #可查看test包中有哪些文件
, R- g. R- N; V$ b( y& }打包后删除源文件
, X# A, |& O% a( f) v3 s1 t+ c7 E# X
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:! y! |  c" p! F+ |* E
tar -zcvf test.tar.gz test.log --remove-files + ^; X2 K( g5 X
打包除指定目录或文件以外的文件
2 \1 Q7 N4 \9 I" ^
/ G7 u( ]$ o& Y" @" i' l对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
. k' k% q7 l" Z5 X& J4 jtar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件$ W; U0 x/ ?2 [+ k9 l
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。$ z( Y* P. X" ]: o7 W9 U' V
向压缩包中更新文件' ~/ d1 f% R, z; X( _& _

2 ^7 Z% [6 p. e例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
3 `; T: |& [) J/ u7 N& b2 [; Ttar -tf test.tar --add-file=test #只针对tar包
! m2 U9 w# y0 R1 k, N( i# |向tar包中增加文件
2 z  g7 {" }3 q3 r. Q" J5 |
( B8 `* R) P9 t向tar包中增加文件可使用-r参数:* O5 \& p' x0 e  h7 Y% ]2 x6 o
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar2 X( c2 }4 l3 N9 F
删除压缩包中的文件5 `% E+ J8 W" H- u, w1 i. I+ v

9 M8 \" M5 Y1 G# b+ a. B在不解压的情况下,可使用--delete选项删除包中的文件:" n; T+ Z+ q1 B' i; v
tar --delete -f test.tar  test1 #从test.tar中删除test1文件# ~1 D- a  w0 h$ t! S. I0 E! I
解压4 v! g0 D$ o: o( }

/ g9 H6 v" I1 x0 T' ~$ f. M解压tar.gz和tar包到当前目录* q$ _: }3 i2 L9 T& d
! G7 u* ~; O2 S0 h, P+ l
tar -xvf test.tar.gz
$ c5 A$ v! F1 [( r+ Utar -xvf test.tar   v) E+ f1 w' B5 m) X2 Y- Y! y
解压到指定目录
8 @. c6 R: Z( r  q* o; |$ w" Z8 m. M6 {
tar -xvf test.tar.gz -C dir
7 g8 ?" F; {3 j' xtar -xvf test.tar -C dir
2 L& K3 B& N) K解压包中指定的文件8 N% |1 i) i5 z( x8 W" g

$ ~2 e& x+ m6 ^4 Z; W' c9 [例如test.tar.gz包中文件情况如下:
/ r5 T3 w- W: y- B+ r' |1.txt+ p; |) c# p) P* |- F
log/
9 M9 [% d1 D# [4 A' Dlog/1.log: l6 @, c# c% }% o3 {
log/2.log! s# V6 e, u6 ^5 C, ]
log/2.log: {: q* u. }( T5 r9 t
log/4.log# a3 N! r8 p. O% |9 G
log/5.log
5 N/ a6 _+ L: R如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
/ s! ~2 X2 J5 w( K5 ~" ~* f* m0 Rtar -xvf test.tar.gz log/1.log
. m1 G" w% }, ntar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
& F" c4 r! j& I1 K% ^解压时去掉目录结构& d# @# i$ m6 g7 H$ r( j

. q4 u- O) Z9 `% z0 ~) r压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):1 [5 N" r  P& `" p. r* g
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录7 X# T/ _4 }3 p, @" e6 ^# r5 I
解压时不覆盖原文件
3 h. N. s3 ]0 X% @3 d' V. R, r, q9 {' p) E& _# B  M" H/ z
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
. Y8 z. O1 x- ztar -xvkf test.tar.gz9 z. i0 R- b6 \7 w
特别提醒0 _$ t: a& G/ I* _" D' _+ J
' g7 E3 b4 @9 m$ L2 c
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
" y! L$ e! T9 |& }) kzip/unzip9 B4 p) {2 a4 o

; m: K1 j, N9 N- x4 B3 ?$ {zip和unzip命令主要用于处理zip包。2 s( H6 ~9 i" T$ n, k
压缩
+ y5 J6 i" c: L8 e/ h; @7 u$ r6 L1 K3 A# g  P% V1 M( T7 s
涉及参数说明:
3 [" C4 Y" k! k; z9 v-d 从压缩文件内删除指定的文件。! s% L6 J; U/ |: ?4 e
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。" v: k" G; y. X6 r. {& S
-j 只保存文件名称及其内容,而不存放任何目录名称。  Q2 U$ q& Y5 o& W
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
; X+ k+ k: i; A3 r- u-u 更换较新的文件到压缩文件内。8 H) j+ W4 D$ H! T
-v 显示指令执行过程或显示版本信息。
+ ~  o$ w& G0 Q+ I$ i8 {-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。. R5 b1 Z2 a/ E9 H3 I+ |) c/ V. {
- <压缩效率> 压缩效率是一个介于1-9的数值。8 }9 Q3 D/ S! I5 m: v
压缩文件8 v( ?3 B  J. u$ q0 C3 _9 V
2 d) I- \* _9 L; g
zip -r test.zip test/ #打包test目录下的文件
& @3 H4 G' X* |( Nzip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录3 j& N7 f6 \) Z' n; ]' ^7 q' r
指定压缩率打包文件
% n8 g8 U9 R, K; a/ y" W+ C1 Y' S6 H) F7 @* l2 e3 m
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长7 N( D4 V; a, L( J* N$ L/ x
打包符号链接文件! t; X: r) A" R( s6 t
- b& E& ~4 E+ g) M" C( z" Z
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:* @" a! L2 K' R/ c
zip  -ry test.zip test
+ @3 ~# b- y$ I  G% J) d" ^- a. E向压缩包中增加或更新文件
* d% q: ^# o* t2 H% O+ F9 f
: w& t- p6 \* `4 t  W# L有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
# G8 `) h, \7 u1 J9 m( Nzip -u test.zip test2 #向test.zip 包中增加test2文件
& g+ _2 i* N5 i压缩时加密
6 O2 }3 G; N) S# `( e/ K, `0 N% ~7 P) j. G
压缩时如果需要对压缩包进行加密,可使用-P参数:" [3 {; [7 r% e! d9 k: Q5 d; g& `
zip -r test.zip test1 test -P 66666 #使用密码66666加密
7 }4 s' K' j6 |# J6 g$ {删除压缩包的特定文件. b) e  n5 \# G) y

# e9 ]6 y% W  q" c. o3 A+ r4 z7 J" Kzip -d test.zip test  #删除test.zip包中的test文件9 X  J; }# i+ p( P1 s& z$ O) d$ Q
解压0 E0 x4 b% w/ b/ M/ |2 l2 J1 t

/ z7 t" Y1 Y9 w+ {$ R, D# |$ _5 f: _涉及参数说明:' R8 k7 @$ H' G) }! [9 v
-l 显示压缩文件内所包含的文件/ y9 ?% W) `& W
-j 只保存文件名称及其内容,而不存放任何目录名称。
  w6 U6 U1 [3 D* {9 [  b-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该/ y  E: j$ ]; b
-v 显示指令执行过程或显示版本信息。( u" c7 h# h- ?0 ~6 O" W" d5 `
-d 指定解压目录,目录不存在会创建
/ r3 V6 w6 T% t0 I2 V5 a9 P查看压缩包中的文件信息& w1 y( O: ^4 l8 ~6 S, P% B
+ W/ x+ F1 c# T
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息$ y9 I% E$ l* x
unzip -v test.zip #查看更多信息,例如crc校验信息等7 y/ `! l+ F3 r
解压压缩包5 ]3 j1 _" G, t* s$ o

, C4 W6 ?! A" Lunzip -o test.zip -d dir #讲test.zip解压到dir目录
. g0 u* Z$ n2 ]0 F0 R解压包中指定的文件
  N) Z5 B# [$ A# d' P
$ N$ |8 Q4 K2 \$ M如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:0 y5 V7 R/ g; i9 r  [0 J3 O
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录8 O' G* `" i( m* k) W* r: n( u
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件: _* C8 u1 J: \4 L9 U- e  {3 ~! Y
解压时去掉目录结构
% o& C1 Y( }+ A5 V
5 V9 s5 M, x' i5 b. G压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:* I9 [; |) M. L# T" l) d6 U- E
zip -oj test.zip -d ./temp  - ]2 r# d' I, e9 m0 E
解压jar包
+ h- u) `2 [2 Q
. z! B, k) h+ ^' C& bjar包是java归档包,但同样可用unzip解压查看里面的文件:/ r4 q/ G' \9 z  l/ e+ K0 i. ^
unzip -o java.jar -d dir
6 n/ ]: z6 {) K' agzip# T5 j( c# O8 G+ _

. J$ p% M* s: I4 W涉及参数说明:
: a) z7 a' T: k# L* ^, A-k 保留源文件
' Z" f" F, g8 Q8 o-d 解开压缩文件
0 g' ?, l$ g. Q8 n-r 递归处理,将指定目录下的所有文件及子目录一并处理
9 r" H5 i! ^: u4 O) [-v 显示指令执行过程2 D8 ~/ N* B$ H) d; O4 r) R  |
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
( o1 k2 G* H$ vgzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包% ?2 L7 C' n$ h: x
gzip -rkv ./* 递归压缩, \: c  E3 O" E2 W' U
解压也很简单:
/ ?% H' W# S+ C6 K- Z3 k( Q; Ggzip -dv test.gz " V8 ^6 }0 \. d/ T  x
bzip2$ o6 A4 g2 k; A- l- {2 t
  x2 N! M6 [9 A! E2 X
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
) f1 x- V/ I& Ybzip2 -zk test  #压缩test文件
( c$ z* {6 }. N  Y& [  o  |bzip2 -dk test.bz2  #解压
% f5 }9 X( `: R3 hrar/unrar) Q' p# v- [4 s
; C$ D+ t5 q8 u! f( v) E
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:
& F( c% v9 i7 i) s# V" X9 L  ~rar a test.tar test  #将test文件压缩为test.tar. i5 X0 W6 y2 p/ I0 z
rar e test.rar       #解压test.tar% f- F; E/ Q3 L& `. a; m
unrar x test.rar     #解压test.tar: Q. n6 n3 W- f% b+ X* {! p
压缩率比较
1 H2 e0 P) n1 ]. h' `3 t0 ]$ Y# J, e$ _, s0 _1 J
压缩率一般来说:
$ T$ c+ c# `$ x, s( }tar.bz2>tar.gz>zip>tar
, G9 D5 K) p& j( G  \压缩率越高,压缩以及解压的时间也就越长。
% k! ?  N0 H2 a+ b/ I! d总结2 o* T# W% U* i
! [* k9 E7 v7 f  Q  p7 l: G
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。$ }! H2 i2 p8 f/ b
有任何补充或建议,欢迎留言^_^。, F$ ^4 {& {6 ?1 D; X; d, z

, N( y9 o7 I! K8 i1 ]# C# I5 k) Y6 K# W/ X/ ~

5 w" ]7 A- Y! i3 e! [. O

: H, }7 \6 j! A0 M

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 00:26 , Processed in 0.069297 second(s), 32 queries , Redis On.

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