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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

[复制链接]
admin 发表于 2020-6-28 13:08:57 | 显示全部楼层 |阅读模式
2 F+ y' }# U* y* b* x. o- Z

4 `: Z' U7 T2 I4 K2 \0 g  i+ Q

: O& U& C$ L% j6 F' X. D前言- M; N* P  d; \: \# J& G
4 T) N( g0 H4 w
Linux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。
9 m  \. \) v, W! v- ~2 [: itar
* P6 N* z1 Z$ a  b8 ]
* H, m8 @3 J* [- C+ b; ttar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
$ N$ X5 F5 Z# F9 ?1 k涉及参数说明:

) B4 J5 ~, h* O' n. p1 s-c 建立新的压缩文件
" A* u$ G9 h2 ]4 d/ E-r 添加文件到已经压缩的文件
: @, s; M/ Z" M$ S. p" C' m-u 添加改变了和现有的文件到已经存在的压缩文件! C$ W) u- Y9 z0 U
-x 从压缩的文件中提取文件
3 O, s8 S, ]; ~7 Z: Z7 j# W: _-t 显示压缩文件的内容
7 K& v1 t5 w: b+ \& S$ p-z 支持gzip解压文件
9 D* Y: |5 m# E9 k, I-j 支持bzip2解压文件
0 z, n* \7 z9 r* W8 k& l-v 显示操作过程
+ a. M0 F# {+ R7 g  A, m7 h-k 保留源有文件不覆盖6 l4 Y7 W, G: E# O7 m$ \) L' }
-C 切换到指定目录
, I8 X1 c$ k6 `1 }. [-f 指定压缩文件
- e& A) E# u; C: d
# f. |) R9 ^, q3 a--delete            删除包中文件, f- j% N6 ]& d+ i7 {) n6 \8 c
--strip-components  去除目录
9 o6 e, ?6 D0 ~8 `) ]--add-file          向包中添加文件$ h, X% b: B3 U3 t) r" f
压缩- }) x9 C* E4 U' ?
* |% W, v( ^# q" d. I6 D
归档tar包,不压缩: o$ r' G! o1 G$ B8 }) U- y0 W2 r
' t7 N$ I5 p: Q0 ]1 ~( s: M. S
tar -cvf test.tar test1.log test2.log #归档多个文件
7 q+ l  U3 A' b0 o+ H& Ntar -cvf test.tar test/*  #归档test目录下所有文件
% H( }) h1 r+ f/ ^3 Ltar -cvf test.tar *.log  #归档所有以.log结尾的文件
% E* X, f. x+ H/ V由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。9 d' x4 w4 Z8 m) Q! N
归档并压缩为tar.gz或tar.bz2
% H1 T: [( X; P) M" \  a8 }+ Z
3 }3 f3 d0 s" n7 _* ?% ^* ^这种方式打包对文件进行了压缩:
8 e' K1 Z7 v3 G2 k# vtar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩6 r" k3 s2 V. k! C
tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩6 C2 F; `/ l% t3 V5 g2 A6 f
查看压缩包中的文件2 C0 S# n: R' M& f

: q2 z( n7 m# m% o, b如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:
- E4 f/ P& `! O) f+ ~1 ktar -tvf test.tar #可查看test包中有哪些文件
- s  y7 W7 W4 ]: i+ Q5 ?0 C打包后删除源文件7 C- u. \3 a6 R7 x) u3 b! a
4 U' c( h; Z* u' p& m
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:
$ u9 o. w: c2 Etar -zcvf test.tar.gz test.log --remove-files 1 j2 k+ g& J9 V5 L) s8 I, L: G
打包除指定目录或文件以外的文件
: v0 s" w5 u8 v9 p4 [6 @2 ]3 c9 y2 [. T/ O
对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:4 ~! F8 b/ v1 u6 d5 U) h
tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件4 M5 ]3 A7 \; H9 `. V
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
$ R% F6 q9 ~9 t! d. J向压缩包中更新文件  E" o; ~. }! s/ T9 A6 K8 i

" b$ y0 `" Q+ A3 N+ X例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:
9 }0 E- }# I, ^# }- U' mtar -tf test.tar --add-file=test #只针对tar包
; p: K& O8 n& m) o5 C5 v向tar包中增加文件, z6 @  ]7 o: K' Q: C$ K9 R
( n( H: \. k8 X, B7 B* \
向tar包中增加文件可使用-r参数:
% ?( ~) R  N+ K5 r0 @tar -rf test.tar testfile #在test.tar包中增加文件,只针对tar& r, x9 U5 a8 m
删除压缩包中的文件6 S, b/ A/ Q6 m, S' l2 C/ A! i: f6 m
9 w2 I+ e. o/ O( J  v& A3 q
在不解压的情况下,可使用--delete选项删除包中的文件:
$ u  y( ~4 Q' Z- Z( R! mtar --delete -f test.tar  test1 #从test.tar中删除test1文件1 b" T' u+ @% m7 k5 Q7 I9 o; X
解压
8 U6 U. x! [0 v/ m2 p" x
5 o4 d3 K4 J! d  n+ a解压tar.gz和tar包到当前目录0 ^3 b7 ?6 a9 l! G4 u1 j7 [) }
# i3 T( @" ]6 m  A5 B( D
tar -xvf test.tar.gz" J- L. v4 V0 M
tar -xvf test.tar 1 W# @9 b- d7 a! f& v" G
解压到指定目录( V9 e  N: H8 H' A  J% A

& J6 E7 H* i8 Ptar -xvf test.tar.gz -C dir
2 g2 X" R0 Z" l* R7 I3 K, `tar -xvf test.tar -C dir
; _; e* h4 l  C3 f解压包中指定的文件
1 d$ j: u; Y' `  [; L% v) |
* O7 B1 L3 K* `例如test.tar.gz包中文件情况如下:
* e: U: E4 L5 r1.txt4 @8 Z" q4 L$ ]! M0 {3 T$ d
log/4 `4 r2 c, c% T7 E7 ~0 U: A
log/1.log
4 d0 e, ?. i2 ilog/2.log
# q* @1 \( @/ k5 W0 M) E& k) |log/2.log* `" k$ k2 ^% k* Q
log/4.log; w! t+ L: L7 Y& v' v
log/5.log, A# V, O& r0 o6 u+ B4 y* E  Z" X$ g
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:+ \' b) w+ y: ~8 V/ |0 L6 U7 y
tar -xvf test.tar.gz log/1.log
. P. H% D2 B: m. V, [tar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
* G9 d; r0 [7 w8 K- K" W/ E解压时去掉目录结构
7 y) q( V! j1 h) R( U% {
* ^! d7 s4 I+ w8 U- D$ `7 L* s压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
# Q# O4 O1 o' g" ^0 }6 wtar -xvf test.tar.gz --strip-components=1 #去掉一层目录
( p  {3 j' l/ Y解压时不覆盖原文件. _+ l: G- G4 A- ?+ x( |3 b& z
5 d* Z1 h5 e8 `; s1 X  v* E
当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):. J9 L0 c2 M) r9 ?
tar -xvkf test.tar.gz
5 ]! y/ Z! J0 J6 _# W特别提醒6 C! O) f2 [; V7 g9 e& D8 O

: s% a, v8 F( ^0 i前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
5 o6 ]7 o7 A0 k" W$ H7 yzip/unzip% _1 L* n. Q$ y0 {) U. e4 @
4 Q8 w( T! n" c) y' x
zip和unzip命令主要用于处理zip包。  F- L" c* K. ?4 d8 i# u
压缩
# @) }" X  t4 Y" k& A8 S7 T" n+ @8 T7 h" O  o7 n% `* `
涉及参数说明:2 D. ]/ I8 l. q, I
-d 从压缩文件内删除指定的文件。
4 n+ }2 L& n2 L" E* Y-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。9 y, G  g0 F$ i
-j 只保存文件名称及其内容,而不存放任何目录名称。5 P5 z5 h5 I  C; I
-r 递归处理,将指定目录下的所有文件和子目录一并处理。# G  R* p0 l+ P% x2 k
-u 更换较新的文件到压缩文件内。0 u) o2 i+ l" q- H9 i0 U! P* T' U
-v 显示指令执行过程或显示版本信息。
2 g* S. m8 g; O* Y/ r# `-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。: _$ N$ h8 o3 X
- <压缩效率> 压缩效率是一个介于1-9的数值。
2 T0 Q; a) O& _+ D* e) h+ A; M$ A压缩文件; _) n) S. T" U2 o

- P9 ?$ j5 V/ @zip -r test.zip test/ #打包test目录下的文件/ T2 @3 Y  `  n
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
- u/ Q& o0 [- m0 `2 e  x) G: W指定压缩率打包文件1 T, s3 J0 L8 [2 J' \' ~4 q! J: u
! w9 U( e. B' P; d# ?' c3 z
zip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长
3 f) ]# I) k5 n' V! h+ E打包符号链接文件) P6 p& h% B( ^% g5 }- v
5 O$ K  t& A( F/ O8 [1 R/ w
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:4 H; X" D0 q. k3 u* ]( s$ E
zip  -ry test.zip test
+ E* I' A, o) Z( L3 {向压缩包中增加或更新文件
9 n( V( N1 _. K% O/ t8 a
' {9 J- u8 r( P* {) U有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:8 b  c  r" G7 Z5 W0 `
zip -u test.zip test2 #向test.zip 包中增加test2文件: J. u" M1 v$ Q$ Q
压缩时加密8 C6 }5 ?: F" e5 Y
2 C  g" U$ Y, n; c3 g
压缩时如果需要对压缩包进行加密,可使用-P参数:3 `% {$ M; z- m, |* H7 m% X$ |3 Z
zip -r test.zip test1 test -P 66666 #使用密码66666加密
% t& j( W' [$ i删除压缩包的特定文件
4 u- U( Z% w: Y) M3 c) C0 w7 p* }6 S1 A2 R$ o8 M7 D2 F; X- `! J
zip -d test.zip test  #删除test.zip包中的test文件# H" o9 U: _) s* `7 d
解压2 v) ^# @5 m* H

4 s8 A, W, d/ G. s涉及参数说明:
& @  @+ ^/ {( S' M3 B* R* l8 w-l 显示压缩文件内所包含的文件
9 Z" _$ P. G* P( l5 _# @-j 只保存文件名称及其内容,而不存放任何目录名称。
! |4 d: k: j& n- O, y& c-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该
- j/ W0 U" n" V4 k3 Y9 t" x8 n6 ~-v 显示指令执行过程或显示版本信息。
0 b: N$ r& u2 V2 F; m-d 指定解压目录,目录不存在会创建
4 {. h2 @% X0 }* f; s( X3 N查看压缩包中的文件信息
: ~( g3 A4 p6 t7 Z4 X) M( y  L3 H! O$ F
unzip -l test.zip #可以看到压缩包中的文件名,日期等信息
) U& c/ F2 I* S* q/ x6 |2 Funzip -v test.zip #查看更多信息,例如crc校验信息等$ F* Z, l; k0 }9 Q
解压压缩包, j+ ]9 Y$ ]- L/ P7 m( Z2 c- @
. A% M, ?% p  e! X3 q" e: w
unzip -o test.zip -d dir #讲test.zip解压到dir目录, N: E9 z$ f9 i/ k
解压包中指定的文件) b5 g( h1 O. t2 \
; I5 D) ?1 Q* |
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
3 N+ Y, a& s/ v' V) M1 V2 m% Eunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录
1 {9 E7 r6 V/ k* h% ^unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
2 t. }& q$ F& P/ u) Z解压时去掉目录结构
& Y4 r. w% r- V1 f1 b8 I. b! u- H& {/ ~$ t6 K
压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:
% E9 ], @5 I) dzip -oj test.zip -d ./temp  
  w8 `. T$ l9 I) V2 p* l解压jar包/ N# Z+ k) ?$ y2 O. K9 {1 m
7 P5 _( u1 w5 h8 |; s2 }9 h
jar包是java归档包,但同样可用unzip解压查看里面的文件:
  Y9 M. T9 P* k8 t' `% c5 xunzip -o java.jar -d dir
+ F1 F& P" ~6 q7 d3 T. f2 Jgzip
4 i9 y  a! Z5 ]: L; ?$ O7 b, Q) y2 L1 y
涉及参数说明:$ Y' j7 Z" |$ l6 h7 J
-k 保留源文件
& M6 V& z. ]0 @3 p% l: [$ P8 `  \-d 解开压缩文件
- s% p; v0 u2 T% Z8 T+ {-r 递归处理,将指定目录下的所有文件及子目录一并处理
$ |7 q: c% v8 r0 v; J. l" E-v 显示指令执行过程
+ Q. B3 Y4 W  Ctar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:, `# E4 C5 k- p8 q: ^& M
gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包* e& x. Y& F: P) u- h) |! K! F
gzip -rkv ./* 递归压缩$ O, e8 q! C- D3 z3 \6 J
解压也很简单:
3 B3 o7 P% b, \1 A3 V& Egzip -dv test.gz . n5 q( _% ^- @- R, `
bzip2
- X6 ~( U9 F' p8 M
6 m! C, [" o3 k# L4 a% ^  rtar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:! @2 ^; g) o: W: J
bzip2 -zk test  #压缩test文件6 \6 Y- K; w* Q3 T+ Y( q
bzip2 -dk test.bz2  #解压) X2 w* J8 u% B
rar/unrar, @0 o7 B8 r+ Z$ c) w
% [' M2 B; l" N: e9 A
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:1 |, C' O8 j& \$ p( Z/ \7 b. i2 q
rar a test.tar test  #将test文件压缩为test.tar6 F3 m- Y' @( I8 z- b* l+ U
rar e test.rar       #解压test.tar" S* A+ o( `9 B
unrar x test.rar     #解压test.tar
& M& y! ?9 |# @压缩率比较
2 ~! E+ _' H+ D, e5 Q+ ]' o; a$ F. {2 c! m0 R* A! V4 }9 _4 L( P( _
压缩率一般来说:. Y. R0 A- V' g9 q% V/ x; ?
tar.bz2>tar.gz>zip>tar) _) R. p, d' s+ n+ @6 z9 }/ F
压缩率越高,压缩以及解压的时间也就越长。
7 @/ E2 Z5 U  ^" B, y/ u0 p$ J) C) r总结$ Y8 M. |$ ^, f( S, a$ r
7 l$ Y3 `7 P& @5 S1 Z
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。. K" l6 c, [4 R' c+ d
有任何补充或建议,欢迎留言^_^。
" ]; j* S' P& v! h8 H* ^2 c9 X- J. D& r8 c" G
+ g" ~9 }6 U+ W7 P3 h. b; B
! p# [7 L7 E$ H# m* }- ~! @
" A1 w' N  e$ b' E& I% S; \

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 11:11 , Processed in 0.067809 second(s), 32 queries , Redis On.

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