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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

# [% ]6 f' p. i5 e$ c. b8 w' P' |3 n" I3 M
2 h: R# K% U9 l, U' g

$ w$ W: c5 t: B前言, M6 d2 |: \# S7 c: l

& n4 M" {4 }; e+ \0 \/ w8 fLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。/ U. X& S1 z7 L% M
tar
: w- ?6 V; _6 m, U* L/ {8 V5 p/ G4 a; x2 Q
tar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。, C1 {9 C2 t6 N! E- G. E1 |
涉及参数说明:

. O( U. ?, N4 D* \' T-c 建立新的压缩文件
+ o* n7 ]1 F( @! ~) v-r 添加文件到已经压缩的文件
2 o$ l( `$ B, H. ~) A* e-u 添加改变了和现有的文件到已经存在的压缩文件
# {! c: \. \% T1 v6 L; [$ g-x 从压缩的文件中提取文件
( t4 D3 r& K2 P5 y-t 显示压缩文件的内容9 }4 i) U7 m% P% E
-z 支持gzip解压文件; f& @4 R4 {" k5 c" @
-j 支持bzip2解压文件
' ?6 U/ W' S( G' W; S9 H8 l-v 显示操作过程
1 p1 v  B& K6 u& M* v-k 保留源有文件不覆盖" D4 {; U1 c5 x4 N9 S, R/ F! Z
-C 切换到指定目录
# J* U* a# R. H-f 指定压缩文件
) }! c& S' T) v2 e& W. W  G& P2 L6 p+ Y* C$ `6 m
--delete            删除包中文件
- R1 ]* H9 b6 X- `) H--strip-components  去除目录6 p* |' d. p" H: _
--add-file          向包中添加文件; p. f7 A6 ?' h, ~6 _8 G
压缩
4 o! _6 g' s, k! N. K( j( L2 t+ ?
归档tar包,不压缩
5 a) L2 j1 L8 N
+ d; j) |+ V" T/ ^; n7 ^tar -cvf test.tar test1.log test2.log #归档多个文件
$ j1 a3 r1 Q/ S7 u6 Star -cvf test.tar test/*  #归档test目录下所有文件
. e" \6 p, ]* \$ Ztar -cvf test.tar *.log  #归档所有以.log结尾的文件 1 |4 {$ Q) D2 f( b6 }% V
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。
! t0 l5 Y: Z$ J# x! _. @归档并压缩为tar.gz或tar.bz2
3 P) U0 r  X$ \; ?& f' \1 R+ Q/ F9 B9 |8 x
这种方式打包对文件进行了压缩:
2 u8 u- v" J) N8 O7 Z; _0 k7 Mtar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩) v) }  G- l/ }3 W1 e- M6 |
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩
! F9 j- I2 }- f& M1 e; \查看压缩包中的文件, T4 x- |  F5 I) T# v
. V  J! k, S% P8 _0 V8 h- ^$ `" X
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:9 Q7 V& c) [- w0 T
tar -tvf test.tar #可查看test包中有哪些文件
& L1 x* `1 f* g* `2 ]. n5 T# K$ B/ F) M打包后删除源文件$ _* M! O" @; F. D1 _

# E+ a" J% j/ i/ `有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:( v$ R) ^2 N9 i& y- A
tar -zcvf test.tar.gz test.log --remove-files
& U& {. p+ `* w8 U% [, }打包除指定目录或文件以外的文件
# R, [' F' c6 S9 Q
, R, U0 i: C' G) l对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
/ U: n6 e- t- |# H2 W7 s2 [: qtar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件
5 D! O+ l7 w- n% d这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
$ h8 s3 m, P3 c( @向压缩包中更新文件  O2 }$ v0 r7 A& Q; P; J
1 i5 Z9 t' z0 p7 ^0 ~1 j
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:( j4 _4 |2 Z* E7 X5 s  s" k; M
tar -tf test.tar --add-file=test #只针对tar包
* h. c/ J4 J4 g向tar包中增加文件  S! g# R# W6 I" N& P

! f+ Y3 N! e; |1 M! [. X; g; I向tar包中增加文件可使用-r参数:
4 ?4 k3 N" F* T# z! d8 x$ btar -rf test.tar testfile #在test.tar包中增加文件,只针对tar) ~# g! A( g4 `) Z8 r# T6 w6 i
删除压缩包中的文件
' x6 K7 R/ d5 `3 m
% m- v3 E% C- k1 n) W* l3 g在不解压的情况下,可使用--delete选项删除包中的文件:
8 X6 a/ k2 b) jtar --delete -f test.tar  test1 #从test.tar中删除test1文件
7 [% @4 \8 i; O) d" W! S解压7 K( E1 J9 @5 m- K4 O

9 v0 s2 M  q1 U8 R, g解压tar.gz和tar包到当前目录3 x- ~1 d. S+ A, x' O
1 {  s8 K0 F+ B" ~+ j2 S5 ^
tar -xvf test.tar.gz/ G, E0 [% Z& x- c- |4 _/ m& s
tar -xvf test.tar
0 X/ m% V+ i( l3 q1 R8 f/ r- @解压到指定目录
/ X( E+ `- z& f
# c1 z! f3 ^6 k& H8 Btar -xvf test.tar.gz -C dir/ c/ B3 h2 E& T1 [; }0 I
tar -xvf test.tar -C dir
/ T/ E5 [! G4 }  Y- N( T: @* C4 B解压包中指定的文件
' P4 |8 S4 Z: R  y$ y+ P3 F2 z8 ^$ q1 F; T
例如test.tar.gz包中文件情况如下:
, M2 u" e" P8 ?4 U8 x9 X: i* u1.txt
2 D- ^7 _- R. z* Glog/5 R/ E6 O( J. @# ]( p
log/1.log; U  |4 w( Y+ D) M3 `6 n
log/2.log& Z2 n3 \/ I# w' X) \! c; |
log/2.log
7 l9 A  l" H! o# W% T4 ulog/4.log
3 I; p' j8 t2 ?9 }  A$ E7 l( rlog/5.log
9 ]5 {( J4 N  n& y# [1 u* }$ d如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:9 Z0 |% M7 A0 f$ H' Q4 y
tar -xvf test.tar.gz log/1.log, `; k" h  J1 R/ U3 }5 R% r
tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录9 d3 Q* l, ~3 b7 C. X
解压时去掉目录结构
: Q3 Z0 X) a; e9 v0 P6 i
6 j( a6 |! }! g/ i压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
1 R0 [7 R* h" k$ D& A- a% |1 ]tar -xvf test.tar.gz --strip-components=1 #去掉一层目录$ _: f' ]) `4 V9 ^( \/ a
解压时不覆盖原文件
' {0 g9 z' Z8 h: C1 g5 g3 f2 i4 r7 l* N9 e6 w6 A
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):/ d. Z! b" u2 G
tar -xvkf test.tar.gz% w4 ~) I: B" m
特别提醒
+ |- ?! z* n3 V. x7 ]
5 E, Z$ Q- S6 k2 p- z9 ^前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。2 K7 z8 z3 J- X. `# G
zip/unzip
6 a0 v% K6 L4 c, w/ M! U) e. o0 m$ ~1 a4 H3 H
zip和unzip命令主要用于处理zip包。( T) p$ _2 Z7 c& J& r( w
压缩
3 k$ D3 H% N1 M& v
* {* z; _+ z4 g: Q1 ?* `  t涉及参数说明:
) ~* d8 I( c/ T$ Z' K2 {-d 从压缩文件内删除指定的文件。
! `# O/ k3 j. w6 Q$ a! w, K-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
! c+ _! j" \" r6 _' k-j 只保存文件名称及其内容,而不存放任何目录名称。1 ?3 C7 C+ |& j" U1 }
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
4 v; O1 ~9 p4 T' [, |-u 更换较新的文件到压缩文件内。
3 {5 O1 N8 r% E8 d9 y-v 显示指令执行过程或显示版本信息。
! v8 G5 J" v# o9 n' h9 V1 x-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。5 E; _1 F; F  }+ _* l  h' V
- <压缩效率> 压缩效率是一个介于1-9的数值。
" q9 Z7 z  d2 o- D压缩文件
- V% S( B* Z- b8 @3 D7 ?
4 b; e6 E! g' R. g7 hzip -r test.zip test/ #打包test目录下的文件2 N* h: a3 r% U4 l( C
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录- D% F9 o0 N3 K+ E& W" f$ V
指定压缩率打包文件
8 |8 k9 \2 H2 L. m; V( _% O' p* y' S0 L4 E0 ~
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长, ?/ |8 W- s! ^2 h
打包符号链接文件
: D: M6 Q5 Q7 W* n& _# k% K2 `/ q3 S' n
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
- D' O" q2 N- V7 n! p6 i5 k' Wzip  -ry test.zip test2 `" m) C$ M" y8 F: s
向压缩包中增加或更新文件
0 t# L3 m4 A5 v( W! s' q. k
$ I# Y4 x- ?! Y+ G1 ?3 T有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:( U) t3 N# A6 B  K* v
zip -u test.zip test2 #向test.zip 包中增加test2文件
  Z, e; k, J* E5 _8 v' U压缩时加密0 t4 [7 k: y7 u! D: U  o
3 j8 s7 N3 c& I3 l0 u, w, p
压缩时如果需要对压缩包进行加密,可使用-P参数:
* k% a# C5 A" e: Czip -r test.zip test1 test -P 66666 #使用密码66666加密
8 Z( l/ J1 b" }% Y删除压缩包的特定文件
7 x& ^4 o% F  A- h+ |. D
2 e; T2 f$ g* `$ g9 x+ ~" ^zip -d test.zip test  #删除test.zip包中的test文件
. G+ x+ D- K; H( w- k解压
- e* M4 _' ~7 ^" i0 ~, G
7 J5 X$ R8 _: ]2 x8 v5 o涉及参数说明:
  U5 {- W! M; V. D% G3 s-l 显示压缩文件内所包含的文件
* Q* X5 e& A# {- R" U# |! J-j 只保存文件名称及其内容,而不存放任何目录名称。1 h* m& ^, w  ?$ T1 R2 Y
-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该$ B3 j3 W+ r2 I* Q. O
-v 显示指令执行过程或显示版本信息。
- I! ]# _' T8 h, E$ S( l, \8 t-d 指定解压目录,目录不存在会创建" |. ~: @5 l: R$ Y" z: z
查看压缩包中的文件信息% t( ^, V( P% o/ p

- N4 ?" \  A9 I3 w& W2 Junzip -l test.zip #可以看到压缩包中的文件名,日期等信息3 c7 \% O# `5 h3 n
unzip -v test.zip #查看更多信息,例如crc校验信息等% a; f2 o5 U- J  F# x1 b, q3 |
解压压缩包6 f0 g6 G- ]4 p2 P9 T$ i+ u. p0 T

' U% y' ]; u! q& h) o' H6 |' punzip -o test.zip -d dir #讲test.zip解压到dir目录
7 J( E$ d; d( q% y  q5 i$ b: n+ O解压包中指定的文件9 C, u8 y+ e7 B; K6 u
2 [& A: J5 O0 K' g) h0 W& R. U! d8 a/ j9 k
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:3 l, n! Y% l7 u" }$ i4 C. F9 x
unzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
- \1 ~/ H# t+ k4 Funzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件. X2 H( u0 l3 l! `: @5 {
解压时去掉目录结构
3 U" v9 Y: @; P* o: Z; D5 K! A$ A# O5 f1 e/ B
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
& X8 x, i  M$ n. T- `  s9 [3 G$ tzip -oj test.zip -d ./temp  ; P. x% c- W7 u& k( t* Q) F
解压jar包
# W3 z  Z- ?& i7 F
8 \/ R$ w3 R6 y8 U- djar包是java归档包,但同样可用unzip解压查看里面的文件:
% }; t+ k2 n# G& t$ p& lunzip -o java.jar -d dir* l5 Q0 {/ T, M! s! ]( [
gzip
' t  D. B: ?/ d* _  y* W& M" G$ _+ ~
) x  Y' t; _* K# f) A涉及参数说明:
! B1 |7 s/ e$ e2 `3 G. N-k 保留源文件& F. ~8 t$ L# K- X. v7 L- G
-d 解开压缩文件5 a2 _# ^! `% e# r7 P5 ~% I
-r 递归处理,将指定目录下的所有文件及子目录一并处理
# a) ~. I9 R2 ^* l$ K6 x; z: }- t-v 显示指令执行过程% ~1 @2 M! p1 D0 k& x( P$ U
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:& C* y+ H- f- h4 i+ i
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包2 ^' u5 |. O& x+ g; W
gzip -rkv ./* 递归压缩
# t0 i; P& Y5 H解压也很简单:2 f4 |- H0 D' [; L( r2 T1 `3 V1 U
gzip -dv test.gz
3 p! s3 @3 h5 Ybzip2& F" w4 u- ^& N, v( [  H* i

+ Z2 r; p3 k% [+ a# c2 D3 utar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:
. f  q7 J3 K" D; tbzip2 -zk test  #压缩test文件/ s! [4 v9 d5 ?) K  Q2 u& J5 T, o
bzip2 -dk test.bz2  #解压6 x- O4 k0 A2 e/ Q5 m" Q& k
rar/unrar0 v+ A  v7 c4 P# v! F# O7 L
8 H8 `( X! E0 Y9 h. U- X* c1 X
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:8 ?2 }8 A  F  U; ?$ x, _
rar a test.tar test  #将test文件压缩为test.tar
( r6 D! h9 M6 _  i2 b, N! crar e test.rar       #解压test.tar
% D9 n0 h" i8 {unrar x test.rar     #解压test.tar, B% A* @3 I# S% {3 Z* G% T
压缩率比较
+ y; A, {# G* v; M. r* ]* U8 I( q
压缩率一般来说:
" K& [5 q+ e! C1 A/ ~tar.bz2>tar.gz>zip>tar1 R. U: h4 N' f7 F, p0 ]
压缩率越高,压缩以及解压的时间也就越长。7 g: ?+ U* j* g! t+ R
总结6 B- ^1 \% Y& O, @

% B* ?5 S+ D+ \对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
3 n2 N. r* z2 e3 e& b6 f2 y有任何补充或建议,欢迎留言^_^。' H0 C1 C- Z1 z' [* U+ F7 n9 v9 d. x
- L. b1 T1 ?- Z/ `; `
6 h5 _' A4 Q* K
6 r/ w* h" i7 k8 V8 {% }# t

( E, i4 i6 P, n) g) l- d

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-27 07:27 , Processed in 0.073333 second(s), 35 queries , Redis On.

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