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

 找回密码
 立即注册

手机扫一扫,访问本页面

开启左侧

Linux常用命令-解压缩篇

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

. l: L: L5 q$ i8 n7 X! K" J9 i: t: q1 O8 @
+ o" @; H; [* d& h3 j- V; T
前言6 L* Y' ]; {) Q" ?! z7 X

: h# m/ t; j+ V) y$ e0 j* uLinux常用命令中,有很多用于对文件的压缩或解压,本文将介绍这些解压缩命令中不常见却非常实用的用法。* c( ^, F9 R# I) {% O: b& V
tar
+ E( J1 J# r4 C3 C- C
, e6 X) I' Q& p6 l; P) i$ Ftar是linux中最常用的解压缩命令。tar命令可用于处理后缀名为tar,tar.gz,tgz,.tar.Z,tar.bz2的文件。
/ v% w. r7 {; b2 x+ b' c涉及参数说明:
3 H- F6 n3 O- ^* U8 r
-c 建立新的压缩文件1 H7 ]4 q! D/ H+ A% e
-r 添加文件到已经压缩的文件" a* ~- {2 d, `
-u 添加改变了和现有的文件到已经存在的压缩文件% e. m+ @3 N2 y" o! ^0 [
-x 从压缩的文件中提取文件
! Y0 r9 J6 d  G, c/ R-t 显示压缩文件的内容
# a2 ]* w$ B. V' E-z 支持gzip解压文件4 V" L) N- n: U% `% p( y* ]
-j 支持bzip2解压文件$ F2 l8 K* L) S5 P& A
-v 显示操作过程
7 {0 Z# g1 R+ b5 Q  m0 ?( H-k 保留源有文件不覆盖
0 r/ \1 f, N+ J, h-C 切换到指定目录
+ ^  \: d& b, w% M-f 指定压缩文件
4 n- e7 a/ ^" ^4 d/ V3 r/ J+ U! C6 F& C9 g3 y( `7 U8 T( ^. [
--delete            删除包中文件) O, u0 C" Q$ {" W0 v, z2 H
--strip-components  去除目录
# o  e0 e3 s5 G( r2 [3 r# b5 d; T--add-file          向包中添加文件
' I! c0 j+ `4 m! c$ M- P. A压缩
% ]$ ]) ?1 }# n) [
! w/ {  X! ?  U归档tar包,不压缩
* ?+ _& _. a0 C2 R. t. E0 h, H3 F- ]8 Y& P8 \7 M, W
tar -cvf test.tar test1.log test2.log #归档多个文件
& ~8 \: T! H6 u1 g- |+ Dtar -cvf test.tar test/*  #归档test目录下所有文件
  t3 E) I; _5 Q3 ?: r  H  z/ Ptar -cvf test.tar *.log  #归档所有以.log结尾的文件 . x/ v  K1 @# n1 l9 |4 M: l  K/ M
由于这种方式不会进行压缩,仅做了归档,因此速度极快,同时占用空间也较大。( f+ q4 h. [7 K* j8 _% A
归档并压缩为tar.gz或tar.bz21 A& y" o, [% r. x& Q  K

# P; e. q9 f) g这种方式打包对文件进行了压缩:
( H2 Y5 H# t9 Q  E& Ltar -zcvf test.tar.gz file1 file2 #打包,并以gzip压缩
/ a( }: a' Z# H0 ^tar -jcvf test.tar.bz2 file1 file2 #打包,并以bzip2压缩; m; B1 {7 g8 @. }4 ?0 j% b
查看压缩包中的文件* r& `/ ?* J1 J! g% v, X0 ?
7 ]8 R, [2 l( s; Z
如果不想解压,只是想查看压缩包中的文件内容,可以使用-t参数:: Y9 ?9 x2 l% o
tar -tvf test.tar #可查看test包中有哪些文件
) f5 n2 F! ^$ ]7 B- G- S4 w3 w打包后删除源文件
( x( i' h% I" _( g+ d. f5 o+ U; i; m$ V. Q2 `8 _
有时候再打包后可能需要删除源文件,但一个个删除显得麻烦,我们可以使用--remove-files 选项:) b9 M; [+ E/ E2 O
tar -zcvf test.tar.gz test.log --remove-files % ^% U2 ~- [) Z9 M1 @
打包除指定目录或文件以外的文件
. @) U- r) U+ V+ j- V
  n5 m- k* b" H$ E对于某些目录下的文件,可能只需要打包部分文件,因此可以使用--exclude选项排除一些不需要打包的文件:
7 w7 g- X- b- ]. ^tar -zcvf test.tar.gz --exclude=test/*.log test/* #打包test目录下所有文件,排除以.log结尾的文件. z6 V  f: B) b: q+ [
这里用到了--exclude选项,支持通配符和正则表达式,因此也非常强大。
! Y2 _" f' E% S# f3 Y2 A向压缩包中更新文件
' o/ z3 ?! [+ g) N$ ?5 ]8 a% q. ~/ d. B% B
例如,压缩包中已经打入了test以及其他文件,现在你只想更新压缩包中的test文件,那么你可以使用--add-file选项:# ]. W4 c$ u$ i" J: ?' c' l# P
tar -tf test.tar --add-file=test #只针对tar包
) U3 w" c5 y1 U8 o+ v( n/ q向tar包中增加文件
. Q, a" w1 m$ O3 ~7 ~& K9 M8 h/ s  N8 p
向tar包中增加文件可使用-r参数:
* J! m% }2 k, I! qtar -rf test.tar testfile #在test.tar包中增加文件,只针对tar
6 m( B# O, }! _9 H' h* Q0 q删除压缩包中的文件- y6 a9 V+ u7 m+ Z
* i$ F7 X* U: d( z5 ~1 r+ i6 ~
在不解压的情况下,可使用--delete选项删除包中的文件:
7 V9 w" ?4 t$ _; p1 P. k% \. `+ ptar --delete -f test.tar  test1 #从test.tar中删除test1文件
. q! H# G% {9 y9 u2 f6 D/ a解压
$ ?" G7 I+ r3 E! [# d1 F5 X! `' t: F' }6 J) m5 i: Z
解压tar.gz和tar包到当前目录0 t. M) S8 r; \" ]/ _$ Z2 }
6 V( A. g" z( Q
tar -xvf test.tar.gz
  S0 y* Y8 i/ ]6 [, ?tar -xvf test.tar
' J- v: p# X) D0 y解压到指定目录* \- N) L0 h4 p! [

0 U+ G  q+ G3 @5 Q$ Star -xvf test.tar.gz -C dir4 {+ U$ H- G- w! y
tar -xvf test.tar -C dir
: [. u$ }* K9 ?* R, E8 T; @解压包中指定的文件  T& X" S- M8 U1 T. x* {
2 C' [3 f8 [+ I2 p; U1 ]) q6 A
例如test.tar.gz包中文件情况如下:' C0 q" C  \# {; Z8 X
1.txt$ K9 E% [: L, U" a
log/
0 P) m9 q: Z! u; N, alog/1.log
! N/ ^6 i& g/ Klog/2.log
2 ]* M7 K$ u7 A, ~# l. mlog/2.log4 a' X/ t3 h$ q
log/4.log; R1 l7 [) D7 M# V# [
log/5.log5 Z: _6 y3 @+ f' h- c) R: G$ S
如果我们只需要解压出log目录下的1.log,只需要执行下面的命令:5 H( c7 V4 h0 ^2 D2 d
tar -xvf test.tar.gz log/1.log
9 h) R9 p1 F8 X& c  s. M5 ztar -xvf test.tar.gz log/1.log -C test #将1.log解压到test目录
2 c) r6 s+ J$ q& p& ]  t! F2 M1 q解压时去掉目录结构# u! g' F. v# f' c1 H
9 N" M6 u& ~* d5 I; K( y) X4 A
压缩包中的文件可能存在多级目录,常规方式解压出来后,对应目录也会存在。如果只想要压缩包的文件,可以去掉目录结构(注意:同一文件夹下文件名不能重):
& F1 `5 h% l9 }: Ttar -xvf test.tar.gz --strip-components=1 #去掉一层目录# \6 p- k7 H; J, h
解压时不覆盖原文件) |; d; o% S- A6 e

" q* k' L7 d0 ^% @# Q) V当前目录可能已经存在包中的文件,如果不想解压出来的文件覆盖当前已存在的文件,可使用-k参数(会抛出错误信息):
. B3 W0 p5 q3 O/ s7 S% K, }+ ktar -xvkf test.tar.gz
5 h# g2 B/ ~  ?' L* a特别提醒! h. R$ y4 E, N  I; H4 u/ _5 z

& u" d& v& U0 ?5 W& Y前面所提到的解压或者压缩带的f参数需要放在最后,因为它指定了压缩包名字,否则会出现解压或压缩失败。
; @- g3 v9 l- |* U* Z  }8 uzip/unzip: |7 J; t/ h* i* r. a
' u7 @# \' U6 @0 \! O1 _; \
zip和unzip命令主要用于处理zip包。
5 T$ ^/ w" ?5 J7 u& \0 L$ d2 G压缩# x7 \. ^+ u! j$ c

; q+ O% b7 ~/ @8 H* U& Z! i涉及参数说明:. o: x9 D& ~# A- A* T
-d 从压缩文件内删除指定的文件。) U# ^! ]$ s" A8 Y: j
-f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
6 F0 O6 e0 m. d; o9 y' y# ~7 ]-j 只保存文件名称及其内容,而不存放任何目录名称。8 ?6 Y  t) k; k
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
- C& M: c5 |& e- A-u 更换较新的文件到压缩文件内。
# T* V$ n. o5 S9 P0 O-v 显示指令执行过程或显示版本信息。; K( g# h* C# `3 T
-y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。* @: {! p# Y" x9 L( c
- <压缩效率> 压缩效率是一个介于1-9的数值。% i6 n7 h  A; K, a+ @" {: h, ?9 v
压缩文件
3 A& L5 M2 L7 ?; M+ ?6 S
. n9 p8 J5 s$ }4 y6 z- s  \zip -r test.zip test/ #打包test目录下的文件/ G8 ]6 t% f  z
zip -rj test.zip test/ #打包test目录下文件,且压缩包不带test目录
, w3 U: x& z: Y' ^指定压缩率打包文件* e$ h% a! \$ M& [& ]# d0 R1 u3 ]

. c! U1 w! j1 g' Gzip -r8 test.zip test/* #数值(1-9)越大,压缩率越高,耗时越长! }0 r) X4 `1 t* l8 X. F. ~5 J5 W5 k
打包符号链接文件
: ?. f" R; j: q& f4 G$ o/ d; h" M3 u- ~
前面的命令只能打包普通文件,如果想要打包符号链接文件,则需要使用参数-y:
" e! \9 s1 z6 {6 Z  |0 |zip  -ry test.zip test" f5 Z2 N( r  x0 @' R" }
向压缩包中增加或更新文件
1 D9 V+ A0 `- h( i( a/ s
3 ~+ g! |4 X$ s4 O有时候需要向压缩包中增加文件,但又不想重新解压打包,可以使用参数-u:
0 }2 z$ S  [7 T! D, hzip -u test.zip test2 #向test.zip 包中增加test2文件; L5 |8 r/ P/ @4 ]
压缩时加密
. t! ?" Q3 M" N: p& T/ O, c
7 U+ r, S; W' k压缩时如果需要对压缩包进行加密,可使用-P参数:; _2 Z& P$ f7 i
zip -r test.zip test1 test -P 66666 #使用密码66666加密
; e& d! T& i' C  \9 w# _' c删除压缩包的特定文件
4 N' }) d% J% j' g+ a# n9 X" V8 Z9 A- [
zip -d test.zip test  #删除test.zip包中的test文件# R! r9 e* K6 Q8 N" @& C
解压, Y% O. f* W7 [9 o% h: d% \* A( C9 ~

$ r* `) Q0 J8 I- i涉及参数说明:
+ g8 |# h( Q$ `0 w-l 显示压缩文件内所包含的文件
3 L! L& R" g! G+ O-j 只保存文件名称及其内容,而不存放任何目录名称。
1 k' [2 s5 t3 n4 K+ u-o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该! O9 |# y/ B5 i: t% i1 V5 a
-v 显示指令执行过程或显示版本信息。1 P8 }4 U. T' b8 M. T9 ?3 b1 G7 Q
-d 指定解压目录,目录不存在会创建
% b" Q1 _& k' n0 `查看压缩包中的文件信息& {1 u% H( N- {7 X  n9 N

2 Q" ]% w7 a( c5 B6 m+ \% R' G  Tunzip -l test.zip #可以看到压缩包中的文件名,日期等信息
# C) P  K/ p/ gunzip -v test.zip #查看更多信息,例如crc校验信息等
. D; F! D: N) [, X. @, e解压压缩包
( k9 D: `. B$ s0 E8 W# C8 `/ `3 t( Q* j3 ~
unzip -o test.zip -d dir #讲test.zip解压到dir目录* c# l; r% i9 x( b4 M
解压包中指定的文件8 h* p2 {8 I( y8 g( M5 ?
. l$ Z" a$ l$ H' w) X6 `
如果不知道需要解压的文件名,可先查看包中的文件,然后使用下面的方法:
  V- B! g. d) d( Kunzip -o test.zip "1.log" -d dir #解压包中的1.log文件到dir目录% X8 q7 B  y# H/ Z. t  e
unzip -o tet.zip "*.log" -d dir  #解压包中所有的log文件
4 u- t) v1 o3 h# n& r( C8 k解压时去掉目录结构0 q5 V, v) X( q& h6 T" Q2 x6 N

3 }" D3 x* ?) U! [  I0 B压缩包中有多层目录结构,普通解压仍然会保留目录结构,如果只想要压缩包中的文件,可以使用-j参数:  U2 c! D# n) z% ~8 t& q
zip -oj test.zip -d ./temp  
6 V+ q  x0 N. F+ W解压jar包7 M( K; w3 w( e) F( k) z( _
$ v; B& u" G: z
jar包是java归档包,但同样可用unzip解压查看里面的文件:! R; Y- v* ^- ~- G$ F9 J0 ~
unzip -o java.jar -d dir4 F* a3 Y- _9 b6 s. F  x$ G6 D3 @
gzip2 @+ Q8 S# I$ C* S1 C

4 w8 U" |0 J. ~$ A9 {7 ?' @涉及参数说明:
; l# R( K5 [1 k. s& A& \-k 保留源文件
0 O$ G3 F, q* ~9 m1 d: o-d 解开压缩文件- V1 Z: s; k8 ]( o
-r 递归处理,将指定目录下的所有文件及子目录一并处理  @: e. f% Y5 t0 F7 D
-v 显示指令执行过程* m% G: D! E* d  \  H  Z8 a
tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。gzip对文本的压缩率约有60%~70%,压缩包文件常以gz为后缀。使用-k参数保留源文件:
, e+ w7 {6 P9 ]gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包$ z# h: e8 j. V& n
gzip -rkv ./* 递归压缩
# B6 Z  Y. t* Y+ i3 h解压也很简单:% {& X: P/ ]# X6 W. f
gzip -dv test.gz 1 V  `+ ^$ M+ a; P+ q; A
bzip2- z3 u. i7 |+ A4 M) ?' o$ x
1 E) n  m( {) |  L6 P+ D
tar命令使用-j参数将文件打包为tar.bz2时,便调用了bzip2进行压缩。bzip2压缩或解压后,会将源文件删除。如果需要保留源文件,可使用-k参数:2 \2 S( s: u  j/ w9 }
bzip2 -zk test  #压缩test文件: M. f6 C, G: ^: j
bzip2 -dk test.bz2  #解压
' o. n% B; Q$ S* d8 Y' Lrar/unrar& R6 V1 H1 L5 b$ F! v
9 A: {0 Q/ N) e7 t9 v( h/ W
rar和unrar命令并非linux发行版自带命令,需要另外安装。常见用法如下:% Q5 k3 I; Y6 Q: E0 Z
rar a test.tar test  #将test文件压缩为test.tar
" U2 n( T' a0 C7 }* l* Krar e test.rar       #解压test.tar+ N- R! g0 {) W0 x
unrar x test.rar     #解压test.tar2 i9 G- O" ?1 Z$ z
压缩率比较! Y- q( c) @2 t0 G2 t" _, a

& e* j  a- z- Z0 T* a/ `5 f压缩率一般来说:. q# y+ A4 G3 N2 N
tar.bz2>tar.gz>zip>tar! a1 ]' N1 u) V7 B7 O! v0 t2 t, B
压缩率越高,压缩以及解压的时间也就越长。
/ K% ?6 g, O1 C, H# m7 c0 D3 [总结! Z4 S" l& z, ~% X! t4 e
8 Y5 `) \: h0 Q
对文件进行压缩能够节省磁盘空间,进行网络传输时,也能节省带宽,但是需要注意的是,空间和时间是需要根据实际应用进行权衡的。解压缩命令较多,为避免在其他平台使用不便,可选择常用命令进行压缩文件。
* c# H4 Y& X& y& @) v有任何补充或建议,欢迎留言^_^。" w% m# h2 g. e% f' D7 a/ H+ d, j

* J) y, |5 m  B. o0 M3 E5 t$ a; A5 @7 H. t+ S+ ^' L) l
: @! M4 E, }2 M) K! n0 @( T
4 o7 ?8 F( ^4 x; K- ?; {

微信扫一扫,分享更方便

帖子地址: 

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-15 10:01 , Processed in 0.064679 second(s), 33 queries , Redis On.

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