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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
/ W5 W" J! P6 q7 j, z, S- d% n

3 Z3 g  U1 Z' z$ i! J' i9 w/ {
* ~* b! @1 Z/ R8 x
前言
5 F. z8 T4 g" \0 q  C+ v& O' a6 S1 i5 [6 v" J
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
3 B5 \7 n$ q5 z' g( N; ftar. J/ y8 R( n0 d+ c- }
0 C* x; S4 N" V
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
" @+ t- i9 l8 O) j涉及参数说明:

3 c6 p$ x0 c* n" n# J2 {4 b% t0 s. k-c 建立新的压缩文件" j: W& s0 E- l7 B' j
-r 添加文件到已经压缩的文件
1 G. O* b5 n8 _2 c-u 添加改变了和现有的文件到已经存在的压缩文件5 |. D5 z# [) R' s( Z$ |
-x 从压缩的文件中提取文件
/ j0 B% ^# F5 W-t 显示压缩文件的内容5 O$ n6 ^$ x1 B4 u1 Q( B
-z 支持gzip解压文件
/ f6 t6 Z3 M/ u! }$ f-j 支持bzip2解压文件. Q% U* j7 z3 j
-v 显示操作过程0 h1 v0 r, k8 W; D$ q
-k 保留源有文件不覆盖. t- u1 z( G; L2 q
-C 切换到指定目录" J$ r; |* y" n; K* H+ q
-f 指定压缩文件
" V! p0 F. l- \" G
( G7 h: r$ E! O7 @9 R) d--delete            删除包中文件
8 Z) Z4 Z6 K  ^2 l9 u--strip-components  去除目录3 S( n. b/ c% q5 E
--add-file          向包中添加文件
4 m1 I( _( T1 O" _2 \# y压缩5 E% f( g# h# g% h
* e  K( Y+ b2 D; a8 l
归档tar包,不压缩! {3 p7 Y6 D2 `0 r* B* f; o

& J% M* O, t' E1 @4 I$ h8 f2 _tar -cvf test.tar test1.log test2.log #归档多个文件
3 @% b2 i! d+ e& ^5 i: T, @+ X* utar -cvf test.tar test/*  #归档test目录下所有文件
6 }4 t6 P5 W/ X! ?3 y% m# Ptar -cvf test.tar *.log  #归档所有以.log结尾的文件 4 s: z; Q3 C0 ~) h$ X
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。  _6 |+ w) m  Q3 w8 ^
归档并压缩为tar.gz或tar.bz2
3 U0 X; M# z& N. d) I
, |3 D/ L; y2 M: J这种方式打包对文件进行了压缩:. i6 K/ o% A- G2 j9 L/ v
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
0 {' L8 Y' b* o  Q) E% V  p1 star -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩+ ^( x4 o# Z9 B8 y
查看压缩包中的文件; G, i- p4 @6 ~  Y

, a. V* M2 F7 G5 u& M如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
* _3 V) G1 G) h5 \4 l3 dtar -tvf test.tar #可查看test包中有哪些文件
3 G) N; N: v8 i3 y打包后删除源文件
" d; a  Y1 F( A2 M4 x5 H/ O
8 m6 L0 t2 k; l4 f有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:; {* |+ F9 w) [& @. P. s5 Z
tar -zcvf test.tar.gz test.log --remove-files
# {1 I' ]+ B- \4 z1 u打包除指定目录或文件以外的文件( u) ]8 {: f! d' }, |9 W! o& P

  V2 V1 p$ d# f0 e对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:5 Y2 i2 L. j1 \4 c
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件7 v6 N3 B! v8 R" ~* X  y
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。0 n. a9 v# G6 Y
向压缩包中更新文件# i. v2 ^. m/ m2 t6 N0 b( A
8 `( m$ Q' g# t1 U% m9 y  ?* F; U
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
$ j3 k5 I' |/ N3 \: s7 S0 S2 T. Ftar -tf test.tar --add-file=test #只针对tar包0 E$ {# j+ _* z! F, O% N
向tar包中增加文件0 S! W3 f0 G9 X7 }

+ |& p9 K7 U, x( T向tar包中增加文件可使用-r参数:9 g! [- e" M. I5 c9 N9 v5 L+ L0 f5 l
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
4 d& o+ n4 Y: X- f7 K& t0 |$ t* a删除压缩包中的文件
! `; d$ ?9 d. L9 f2 |( K' ]2 B, \3 V, a
" W0 [# x+ a3 p0 ]) D在不解压的情况下,可使用--delete选项删除包中的文件:
+ O; \) y& d' Y* K; G* Q$ T& otar --delete -f test.tar  test1 #从test.tar中删除test1文件
* W. P! h* v9 b3 k5 w解压5 s/ u3 w( T9 W

) W, t$ d. c8 R2 p. I解压tar.gz和tar包到当前目录& u. }+ ]' r% w3 ?! w0 I( ^

. J" X$ K* Y# ^8 e5 q# @8 v# |$ Dtar -xvf test.tar.gz
! a' @! N$ e- k/ xtar -xvf test.tar
1 ]0 [$ P" g6 w8 @/ ^解压到指定目录3 ?" Q, ~! D8 ^- P" G' b
: R, m7 M* y" d) m  g
tar -xvf test.tar.gz -C dir
3 y. S; Q( g: A3 Z1 F, k. Xtar -xvf test.tar -C dir! A, w5 F9 g# ?
解压包中指定的文件
! S5 C2 [+ y9 I3 d$ F9 U' h8 K/ k% p; S9 M: x  Z  A! O
例如test.tar.gz包中文件情况如下:7 ^+ s! y) o: Q1 V  f
1.txt9 c% L6 D& w% J* }2 |- D/ l6 l
log/# }: Y) b! d' b5 J
log/1.log
% Z3 h% T5 N* I( C6 a, Xlog/2.log3 h1 J6 H% d9 t6 G) `, @/ Y
log/2.log- E! j5 M  K' u  S
log/4.log
6 e3 [, a3 ^# U  O% clog/5.log* ^- e& b& n: {) u, [( Q: U
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:
  D4 h" w( I5 N8 Vtar -xvf test.tar.gz log/1.log# [6 x. Y9 x5 n$ B1 e& o
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录6 ]' z9 {/ P2 d3 x
解压时去掉目录结构
& s% x5 y8 ?8 t  {2 ^% I( u4 r: m
% Q4 V* a$ f8 l; D: _压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):& L1 `4 S$ A4 g5 G  M
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
- B$ g9 s6 C* W: O, u" @解压时不覆盖原文件; T3 ^# K, M! C

0 @" c$ w/ O7 p3 g  a" `+ C当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):& T) A+ w0 V3 R
tar -xvkf test.tar.gz
7 h# p- t0 k, \) T" |特别提醒
  h# L" X3 B) G3 x- J
  O" r6 @1 n0 R0 Q前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。, X. j# Y0 O$ S, \: v( _( r* Z/ A
zip/unzip
5 F. d" U' Q/ ~
3 J$ P, ^9 s5 a' A8 Ezip和unzip命令主要用于处理zip包。6 S, d2 n# w+ Y& P; o' `
压缩
8 s# g. h4 q- j4 I/ r5 C8 y% l) Q
9 {0 `9 ?- o6 y7 |涉及参数说明:
( b0 I5 o2 v+ g- T3 N, k# a-d 从压缩文件内删除指定的文件。
; ]. A, {: S  ?  p-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
  i/ t; M9 ]( F: ^# E-j 只保存文件名称及其内容,而不存放任何目录名称。
$ H3 W0 C; j6 h: V7 g-r 递归处理,将指定目录下的所有文件和子目录一并处理。
) L8 i5 j+ D* _% y-u 更换较新的文件到压缩文件内。
) G1 s# q5 k( J$ u8 [-v 显示指令执行过程或显示版本信息。. d# g3 z. ~" @+ I
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。- x( L1 @) r3 X4 s
- <压缩效率> 压缩效率是一个介于1-9的数值。% q6 i* k7 V  B4 ?2 u/ t( Y
压缩文件# G, @/ F" f$ S- ?+ H

; z3 ~# y! r! c/ h% f7 lzip -r test.zip test/ #打包test目录下的文件
' O' C& m) M+ _# B' ~/ Y5 s( F$ Czip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
0 }7 S& X, T+ b; ~" X指定压缩率打包文件' |4 K, [% y& N$ }

- s+ [0 V2 z2 `- u0 ^3 b+ z" Izip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长2 I, S- D$ |7 F& v$ Y
打包符号链接文件, {, P' z1 y; E# Z  i3 H3 y

) q! S0 u. C1 p7 {* C前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
+ d4 G  a7 o  g/ T  }$ \zip  -ry test.zip test
# U. R' }% e- n向压缩包中增加或更新文件
+ p/ \) s+ @' p
; f  w2 K4 w0 h9 a有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
) h% x6 R( k# d9 i- }8 Hzip -u test.zip test2 #向test.zip 包中增加test2文件8 e; b! |' {' U2 w
压缩时加密
; i8 O+ j& ]  Y) H' D$ C& @! c! K0 Y! I) Y
压缩时如果需要对压缩包进行加密,可使用-P参数:
7 `+ k$ _9 E- |9 E9 r7 X0 Azip -r test.zip test1 test -P 66666 #使用密码66666加密
* J! T; f1 J( k% f3 a删除压缩包的特定文件
/ O+ U# i5 b$ |1 F" n/ I( }6 j3 g
8 X) l) l) C! @/ Yzip -d test.zip test  #删除test.zip包中的test文件
) q/ L- m% j( `0 O8 z* L解压
( h# \5 i: ]: ~+ @$ N) k% Z' Q' d, D" N3 E) z3 t
涉及参数说明:
' t9 |5 g& T7 F3 U-l 显示压缩文件内所包含的文件) }( j3 H2 {) V* }
-j 只保存文件名称及其内容,而不存放任何目录名称。. ]" D# {, _9 a) N" ^7 ~( @. y
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
5 H, _7 u9 r. p) m9 e0 Z) e! G-v 显示指令执行过程或显示版本信息。2 C. ^' X7 I4 }
-d 指定解压目录,目录不存在会创建
+ S, C9 \  E- N4 H  L查看压缩包中的文件信息0 {) `! W9 H; V8 {8 O2 @$ a

$ d7 ^+ @; T% \* X( }5 [. ?" x  cunzip -l test.zip #可以看到压缩包中的文件名,日期等信息. j" M' \" I% r. s7 \
unzip -v test.zip #查看更多信息,例如crc校验信息等
. T, N6 v  C( j8 f$ O解压压缩包8 N* K, h, Z! }6 F6 T4 D6 y
& U+ @7 f# d: y
unzip -o test.zip -d dir #讲test.zip解压到dir目录) l3 o* K; Y( M
解压包中指定的文件8 h6 o( S9 ]! L4 f( }; Z5 c( C9 o
" f$ o, U/ y6 T4 z% \" s! S
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:! D8 e/ ]% {" K1 U
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录  [# `; i; F1 j: j5 O
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件8 Z, g/ m# F% s% M9 g9 ~
解压时去掉目录结构5 x  \4 m$ A0 K# k2 k: j
8 |! o8 e7 s, ]- R# _
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:! `  b3 B0 n! E0 r
zip -oj test.zip -d ./temp  
! G( }5 \* }9 C* c解压jar包* k$ u) B  B; |! ]* x4 {2 @0 T" S- l

2 Q8 g2 _& A% N+ T) R! Njar包是java归档包,但同样可用unzip解压查看里面的文件:
7 u9 D. B! p- C$ h1 |5 q; zunzip -o java.jar -d dir2 A* {( D: y+ `+ x5 z
gzip
1 [% }" _7 w) C6 Z  Q( x% X
9 W5 Q) q2 z' q: e3 D* ?2 I8 U涉及参数说明:2 u# T0 Z( x( |! S& |. A
-k 保留源文件$ K' S# a; G5 a' R
-d 解开压缩文件1 i# g- z- m' G5 g
-r 递归处理,将指定目录下的所有文件及子目录一并处理
" F- K, _& C3 b1 o, [, @1 U5 o-v 显示指令执行过程
' c# o$ x1 Z9 H* A  l) utar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:7 C0 a# a2 k7 [
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包0 g1 J3 Z- H1 V% F9 L- K' ?
gzip -rkv ./* 递归压缩) h- N1 ?, T. r6 p/ |$ ]
解压也很简单:" F$ ~# W' V5 A+ O/ ?5 K3 O
gzip -dv test.gz $ b; l2 a5 E+ M
bzip2
& w+ l  i! j1 Y. D$ f
4 |: X- a+ o8 e) z/ t; ^tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
  O( j% s& _3 X: L$ _5 o- }bzip2 -zk test  #压缩test文件
7 F. ]) K6 h" Z# s$ Pbzip2 -dk test.bz2  #解压
# z1 R, ?. @) E2 O5 u) O" d  a$ drar/unrar8 G6 }, h0 ?  N/ w& `+ u- W
  x# z0 H+ c8 J* `7 W3 b8 E9 N
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:% s' N3 |& j5 i9 }: z
rar a test.tar test  #将test文件压缩为test.tar; Z6 f6 k+ y9 M6 t4 }
rar e test.rar       #解压test.tar
" H& B& m4 \& sunrar x test.rar     #解压test.tar6 k1 T" p. Y; M
压缩率比较% w5 L: X( i5 Q' I& I

; _0 ^5 X8 j1 B. z压缩率一般来说:
! x: s6 ]3 Z& d' J2 Xtar.bz2>tar.gz>zip>tar
( d$ {) S( X* d+ w压缩率越高,压缩以及解压的时间也就越长。
$ K0 o& |% b' s/ A% A9 Y, {# S2 o总结
  o, L# w/ J4 _; L: ^& M3 \
2 |3 x& {) d* @对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。; k7 {+ l- o) ^5 w1 ~
有任何补充或建议,欢迎留言^_^。
* P% g+ i2 o: K$ q* \
* x8 f3 v) n- u7 e+ [1 i1 s- B7 p0 p  z5 K
8 Z* Y% v+ H! q9 ]1 P/ p
" w3 o  G: M& j% U! O

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 00:50 , Processed in 0.069823 second(s), 32 queries , Redis On.

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