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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

, B8 m/ W# j2 e; u1 v! [$ e+ b3 A) v2 [; U
9 ~. x9 {! w4 y
前言8 W2 ^) ]$ i/ L& V7 D/ c( P% R' n

& d# g" Z: |1 U0 i: H8 NLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
. s% S0 k, H( v8 ]tar# g4 r) U  t# X

; n# ?7 B* J% {+ B; vtar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
' b' \7 E9 |- F( j涉及参数说明:
6 G- b6 |( x2 D/ E" g. d
-c 建立新的压缩文件0 E; G% ~+ Y5 ^+ \, _
-r 添加文件到已经压缩的文件( s1 s- z( }$ L8 ^  B' L' d
-u 添加改变了和现有的文件到已经存在的压缩文件
% X$ I( Q7 l1 d. q4 C-x 从压缩的文件中提取文件8 }$ @1 g+ u5 ]/ E
-t 显示压缩文件的内容8 T' d) {: R: V5 r" c
-z 支持gzip解压文件
  R6 Y) }9 Y% M/ m5 `-j 支持bzip2解压文件
1 V8 G% b/ b! V7 m+ P* R8 e+ J-v 显示操作过程, J1 [/ e; E2 o& Q+ _0 t# [
-k 保留源有文件不覆盖
0 N1 r) D$ t. d4 v# I7 L- N-C 切换到指定目录8 w1 z6 w: O' j! o* h6 h
-f 指定压缩文件3 c: L1 e, B0 P0 p- Y4 M, [& e

3 i5 F  B9 ]' i; U1 a8 J--delete            删除包中文件
  a) D; ?3 U: U+ L--strip-components  去除目录) M( d1 ~) X2 ?
--add-file          向包中添加文件
8 i( k, ^1 p$ E) H0 F) K压缩
# l, {+ W  |+ G1 z& L- C
1 g) ~3 Y3 E9 \; k# I0 v8 V) L归档tar包,不压缩
' M% S1 D  R0 n! T: M' B) k
8 i0 J- h* t9 N1 p3 l4 B2 ^/ h7 i; Ytar -cvf test.tar test1.log test2.log #归档多个文件0 w! {$ _. ?% r# j; e% @
tar -cvf test.tar test/*  #归档test目录下所有文件9 m7 J* J( e' c+ u& {3 `, E
tar -cvf test.tar *.log  #归档所有以.log结尾的文件
6 R! M4 x* A! m: ]- n由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。- `, B9 h9 t% B
归档并压缩为tar.gz或tar.bz2
# M0 k& T2 o& ?9 C% @3 E. R" Y  G2 Q$ B% G; {
这种方式打包对文件进行了压缩:* n1 z. I% G* C2 ?2 I: ?- @
tar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
3 J" T, H' r, M1 o+ f* g; Atar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩( `& n: j! F( o% t: B0 Z/ y
查看压缩包中的文件
0 }" M" p" _' U7 ?. G1 c( O2 o8 q0 M4 s& g$ G
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
3 t) d' P5 C; }+ F+ K$ F& Star -tvf test.tar #可查看test包中有哪些文件
- s/ c# {" D; T打包后删除源文件, z4 l, P: u4 g$ c2 |# @
, {0 v: E# G8 s' W0 U* H3 [
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
% m1 b3 M3 x4 ?2 F/ Y; ltar -zcvf test.tar.gz test.log --remove-files
6 c+ d/ h; X& @( B, T! \4 B打包除指定目录或文件以外的文件7 j' G& p' t  d; H

' [  a( [, ~3 {% c$ L- ]+ F: I对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:# o3 t! q8 X& p8 D: `) n; `' A1 d
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件+ I% P* [) S; w) X0 i! p' y" O$ @! c
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
! E3 {* b* m3 s: Z* H( b! ?& n向压缩包中更新文件
% c* J% }5 O$ Z: M7 s' N+ d* f
5 h' i( B; `; E" O7 d2 c例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:/ Q4 O3 c; j9 Y( t' R
tar -tf test.tar --add-file=test #只针对tar包: b% M' _! V0 T; n" [6 C+ |. ]" [
向tar包中增加文件* |, [& G  M+ A8 Z& Z

( a3 D* D* x& x) O向tar包中增加文件可使用-r参数:$ N' K  o( p$ L7 R* {4 }! S: T
tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
+ {* w/ k- C" t5 X3 R1 d8 J3 X: u删除压缩包中的文件) L5 a+ I6 T: k, I
) u5 x" C4 M: o4 `6 L$ w+ Z6 k& X
在不解压的情况下,可使用--delete选项删除包中的文件:
1 V: y4 W3 C- G& V0 f! jtar --delete -f test.tar  test1 #从test.tar中删除test1文件
! r8 K# `1 y: K解压
2 F: U, [4 m; ~
) W2 r& Y- {2 F7 `解压tar.gz和tar包到当前目录
" c$ l+ ~2 G' o5 m- V/ H5 w6 U( a8 |
3 x/ ?% T# _& B" |" p% atar -xvf test.tar.gz1 Y( ~" l6 e( v; ]* f2 M
tar -xvf test.tar / t! W" V% L( F" ]
解压到指定目录
% X. t7 T- Y" x: x/ P! a6 r8 v7 a8 ]7 S4 [; a6 {" `, y4 S# v
tar -xvf test.tar.gz -C dir
1 j$ u- z4 z+ p  L; h1 f5 B+ utar -xvf test.tar -C dir
# r, c. v$ P# ?解压包中指定的文件
6 e5 n4 Q4 w. B( ^
0 |3 ?- J  H) z4 A例如test.tar.gz包中文件情况如下:
. N8 T0 E+ i% H$ `1.txt# a8 E6 }3 p4 G( m7 l9 S
log/3 D8 w, Q1 U4 z  B8 C% K( P
log/1.log6 Y; J; c; ~' Z' I
log/2.log
: v/ b3 b! O3 K  j" [7 |2 x5 p% ilog/2.log
, S7 N6 ?9 ~% s& S/ clog/4.log
: B& U# `  k1 @$ U9 @# d# klog/5.log$ D! ]' F: x$ I6 Y; S
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:* `5 x6 M$ W" R- j( _; U
tar -xvf test.tar.gz log/1.log
, M! V* j' Z) [+ R5 ktar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录- h0 R2 b  z" G4 c* m% @
解压时去掉目录结构
' w. _4 r. _! I% V9 C: c+ H, L. d/ M2 I$ l1 [: E8 L
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):# e. h7 w6 B5 }' w6 h! ~
tar -xvf test.tar.gz --strip-components=1 #去掉一层目录
! T% \$ c- C. z) L. t) r: t解压时不覆盖原文件! s4 ^+ a* }/ Q

% C: {3 v" \) h* H" k+ w当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
  N6 a8 _; t% q: Q4 [6 l, b, otar -xvkf test.tar.gz. _6 c+ \" n! w0 Y2 k6 X
特别提醒, _, |. i5 b# y8 ]2 ~
7 h  u9 _; d7 D9 h. P
前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
2 p! U2 c: y9 f4 czip/unzip
: H3 E- U( S4 ^. R+ Y( l% ^* K) K2 y& U1 D; U. [' {3 s  x+ B. S# o3 g
zip和unzip命令主要用于处理zip包。3 Q4 G: _5 R' S' L, f9 H9 e3 j' N
压缩
# i7 ~8 `7 n* q4 J% _- H# ~1 w
涉及参数说明:
- Y$ \  f; g- U$ m4 n: O& x-d 从压缩文件内删除指定的文件。
. F. ?% D; l* R! _-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。8 ~* G; R* w, J# j  R
-j 只保存文件名称及其内容,而不存放任何目录名称。
- ^2 [8 C2 O- q! {-r 递归处理,将指定目录下的所有文件和子目录一并处理。
' s& _, L' d. y# R8 C, @-u 更换较新的文件到压缩文件内。
8 G6 E4 w# {) E9 g4 W" |-v 显示指令执行过程或显示版本信息。
3 x, q7 Z) D7 S2 h0 H-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。: g* P( K# g  _4 k' c  \
- <压缩效率> 压缩效率是一个介于1-9的数值。
$ C6 ^' b+ L1 k0 R压缩文件. E/ F/ W' a' x& r0 [' O
" ]& b8 `: v* s, q; v
zip -r test.zip test/ #打包test目录下的文件
3 _5 b% f/ w0 x7 |0 }$ lzip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
5 n, C8 @2 y1 P9 K7 |1 j# ]* ~指定压缩率打包文件% R, Z$ ?0 Y% z8 p% S* z, q

. h6 ?; x" a, n, t8 U, ?+ Ezip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
# ]& C: U. Y( U3 o) Q3 d0 Z; _打包符号链接文件
7 A- I# m2 n& o( n8 q
% ~" A- e! C; [- H* h前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
5 o6 f) P) Y: v: q6 f3 ozip  -ry test.zip test
3 s7 t- V$ k& \, w6 H& c& e7 ^3 ~向压缩包中增加或更新文件
3 q! `2 q& k- X; J! a
9 _/ G. d7 [( F; V) i3 Q有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:+ X  I4 I0 o- T6 e7 s( q) ?
zip -u test.zip test2 #向test.zip 包中增加test2文件, T2 q0 |( u. m& f5 K. O  g2 `
压缩时加密/ P- V' A- l& O$ F% f2 }4 j' Q

  _1 X* V& q1 r3 }. V" M压缩时如果需要对压缩包进行加密,可使用-P参数:
& N' P/ V, V6 [% O$ f5 i! A3 M9 \zip -r test.zip test1 test -P 66666 #使用密码66666加密0 H9 t4 F0 j; g( K7 G
删除压缩包的特定文件/ B' F6 c* D! h0 P4 H# i* d

. t4 T  T; g! kzip -d test.zip test  #删除test.zip包中的test文件
) }- s; E+ Q  \8 O- S解压
. X0 [4 g1 }9 p0 R7 |$ x2 _7 b' S6 I* ]5 o$ ~: \) p1 v. z$ A+ q
涉及参数说明:. f% N/ ]) Q3 v" _7 A& m$ x
-l 显示压缩文件内所包含的文件
/ j7 {3 N' }1 f2 E4 @-j 只保存文件名称及其内容,而不存放任何目录名称。
5 y) k6 D/ A6 l) A6 m$ r7 R-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该$ {$ P7 i2 H3 p! Q
-v 显示指令执行过程或显示版本信息。/ h0 x' M) U/ }% ^# v# A  p% Q7 t
-d 指定解压目录,目录不存在会创建
6 g% ^6 u7 l$ `- E4 o/ t! Z& c查看压缩包中的文件信息  N0 v) e( P; E2 k/ y! ]4 `" e
9 y- }* ]. ^  _$ D2 ~* _
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息8 a7 q% X2 C! V  j% Q4 ]- G. o
unzip -v test.zip #查看更多信息,例如crc校验信息等
! t" t9 y1 ]8 G/ d  F解压压缩包( m4 R% ^( a& M1 `! U
$ C0 b* b2 I% W& e0 j
unzip -o test.zip -d dir #讲test.zip解压到dir目录
$ _% t. l# p9 F' b. I! w& \9 Y( Z' b解压包中指定的文件
5 |5 Z$ k6 w9 e9 r$ N) Y3 {: p
* Q) i! s0 a% n' E如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
) X; G, z* U/ D9 ]$ N0 S) kunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
+ C2 n+ U( ]. P# a+ |+ a4 m7 x6 l, qunzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
; M! u; k7 r* F' s. {- j* B解压时去掉目录结构
# u4 @/ S" F+ l* _0 X
  [; f. O9 G6 j! q+ ?压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:. l9 k6 Q4 y9 B7 s& @8 I
zip -oj test.zip -d ./temp  
! O+ w! _% ]$ N5 o7 {解压jar包$ D9 [7 j5 ~' L; t" U
: q6 V) t0 B  E; V
jar包是java归档包,但同样可用unzip解压查看里面的文件:1 B5 |5 M: k: h0 B; p8 o
unzip -o java.jar -d dir
+ `. g$ k3 f* ?! Z" u0 ^5 s" X. v! zgzip+ ~/ c: L" X+ f/ V$ K, F0 s, }

# r4 e' M% }4 z9 L涉及参数说明:) c) a+ ^! F% p& u6 W, K
-k 保留源文件
; `& a( G4 V3 O! j-d 解开压缩文件- x3 e  i" @2 G) G' V
-r 递归处理,将指定目录下的所有文件及子目录一并处理
9 I" y1 B9 h+ v* \4 {0 J-v 显示指令执行过程
: Q- {0 q' O+ @6 ctar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:9 `9 E7 Z8 N9 Y  n8 g3 Y: ~$ \
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包# k+ e! L) |5 h9 w" `3 x
gzip -rkv ./* 递归压缩+ M, D' _4 c6 }. t$ Q
解压也很简单:
' \- w% K0 P$ ?) W# Y) K1 Xgzip -dv test.gz
0 L+ l0 b: k( }0 {$ c7 F  dbzip2
) J4 \% Y5 D3 b8 o+ T" ?" J' ]" r
7 Z: r. C5 W1 T9 G" ]  n9 Mtar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:( J& y8 Y- @2 {3 h' M4 i
bzip2 -zk test  #压缩test文件
7 u5 n6 |/ Q& N* `* b( _bzip2 -dk test.bz2  #解压
; A6 u5 d8 W7 _5 J6 Y3 @! J. F4 prar/unrar
& p  [# X7 A# t( C0 z7 h' Q+ E) b3 V; h. C8 p) p
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:, d* l! q( L8 U) {1 a- u2 V
rar a test.tar test  #将test文件压缩为test.tar0 o0 w/ x8 o( G$ u# h! L/ s3 r
rar e test.rar       #解压test.tar4 w# B# V8 X0 P1 H" V" C' [7 N# b
unrar x test.rar     #解压test.tar0 `' s; O9 g% }/ V6 r+ v7 k2 Z3 [- z
压缩率比较
. c: z' D3 W! T+ t+ Z. f5 k) e5 z6 ?: e# U" I7 x! w7 c* R
压缩率一般来说:
& B6 u0 U' S7 B- gtar.bz2>tar.gz>zip>tar
1 z) P- i  l" r$ I压缩率越高,压缩以及解压的时间也就越长。! o1 M% C1 \3 H
总结  _0 C- B$ x# g* o. b2 T1 x
: f; s- r! Z  T0 C! f% u) y, s
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。! R5 R8 C4 v5 K& ]
有任何补充或建议,欢迎留言^_^。
; K& \" }. P$ q3 M: M3 K' @  r8 `. U# v! t  L- A  w$ A2 ?+ ^$ T

. L  {2 |. Q, F$ o- D
" P3 O- k' Q' E

' h5 j, O$ i& F3 \: A

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 21:22 , Processed in 0.065468 second(s), 32 queries , Redis On.

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