700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Linux打包压缩:zcat compress gzip bzip xz zip tar cpio

Linux打包压缩:zcat compress gzip bzip xz zip tar cpio

时间:2023-01-29 22:00:21

相关推荐

Linux打包压缩:zcat compress gzip bzip xz zip tar cpio

文章目录

常见解压/压缩命令压缩、解压缩工具一、zcat 显示压缩包中文件的内容(一)、语法(二)、参数(三)、常用命令查看压缩包内容命令:二、compress/uncompress压缩工具`.Z`后缀(一)、compress介绍:(二)、compress安装:(三)、注意事项:(四)、语法:(五)、参数:(六)、uncompress 解压缩三、 gzip/gunzip压缩工具 `.gz`后缀(一)、语法(二)、参数(三)、 gunzip:解压(四)、常用指令四、bzip2/bunzip2/bzcat解压缩`.bz2`后缀(一)、介绍:(二)、语法(三)、参数:(四)、 bunzip2:解压(五)、常用指令五、xz/unxz/xzcat压缩工具`.xz`后缀(一)、介绍(二)、语法(三)、参数(四)、unxz 解压缩六、zip/unzip打包压缩工具`.zip`后缀语法:参数:其他压缩解压工具:.rarfile-roller压缩解压(图形不常用)归档(备份)工具一、tar 打包归档工具`.tar` 结尾介绍tar命令详解(一)、命令格式:(二)、命令功能:(三)、参数说明(四)、常用的命令1、 归档压缩/解压2、查询tar 的最基本的用法示例:tar调用(一)、tar调用gzip(二)、tar 调用 bzip2(三)、tar 调用 compress(四)、tar 系列的压缩文件小结:1) 对于.tar结尾的文件2) 对于 .gz 结尾的文件3)对于 .tgz 或 .tar.gz 结尾的文件4) 对于 .bz2 结尾的文件5) 对于 tar.bz2 结尾的文6) 对于 .Z 结尾的文件7) 对于 .tar.Z 结尾的文件8) 对于.bz 结尾的文件9) 对于.tar.bz 结尾的文件10)对于.zip 结尾的文件11)对于.rar 结尾的文件扩展内容压缩解压总结二、cpio:制作归档或展开归档文件cpio基本介绍功能:使用 cpio 命令备份或恢复数据,需注意以下几点:语法:选项常用操作模式cpio 命令主要有以下 3 种基本模式:1、备份:cpio -o[vcB] > [ file | device ] "-o" 模式:指的是 copy-out 模式2、 还原:cpio -i[vcdu] > file | device ] "-i" 模式:指的是 copy-in 模式3、 复制:cpio -p >[ file | device ] "-p" 模式:指的是 cpio- pass 模式 模式cpio示例rpm2cpio和cpio关系使用 cpio命令提取 RPM 包中指定文件

首先要弄清两个概念:打包和压缩。

打包:是指将一大堆文件或目录变成一个总的文件;

压缩:是将一个大的文件通过一些压缩算法变成一个小文件。

常见解压/压缩命令

tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!).gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName.bz2解压1:bzip2 -d FileName.bz2解压2:bunzip2 FileName.bz2压缩: bzip2 -z FileName.tar.bz2解压:tar jxvf FileName.tar.bz2压缩:tar jcvf FileName.tar.bz2 DirName.bz解压1:bzip2 -d FileName.bz解压2:bunzip2 FileName.bz压缩:未知.tar.bz解压:tar jxvf FileName.tar.bz压缩:未知.Z解压:uncompress FileName.Z压缩:compress FileName.tar.Z解压:tar Zxvf FileName.tar.Z压缩:tar Zcvf FileName.tar.Z DirName.zip解压:unzip FileName.zip压缩:zip FileName.zip DirName.rar解压:rar x FileName.rar压缩:rar a FileName.rar DirName

压缩、解压缩及归档工具

gzip/gunzip: .gz

bzip2/bunzip2: .bz2

xz/unxz: .xz

zip/unzip

tar • cpio

压缩、解压缩工具

一、zcat 显示压缩包中文件的内容

补充说明

zcat命令用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。

(一)、语法

zcat(参数)(文件)

(二)、参数

-S:指定gzip格式的压缩包的后缀。当后缀不是标准压缩包后缀时使用此选项;-c:将文件内容写到标注输出;-d:执行解压缩操作;-l:显示压缩包中文件的列表;-L:显示软件许可信息;-q:禁用警告信息;-r:在目录上执行递归操作;-t:测试压缩文件的完整性;-V:显示指令的版本信息;-l:更快的压缩速度;-9:更高的压缩比。

(三)、常用命令查看压缩包内容命令:

[root@ecs-c2c9 ~]# zcat anaconda-ks.cfg.Z //查看压缩文件内容[root@ecs-c2c9 ~]# zcat anaconda-ks.cfg.gz//查看压缩文件内容[root@ecs-c2c9 ~]# bzcat anaconda-ks.cfg.bz2//查看压缩文件内容[root@ecs-c2c9 ~]# xzcat anaconda-ks.cfg.xz //查看压缩文件内容

二、compress/uncompress压缩工具.Z后缀

(一)、compress介绍:

​ Linux compress命令是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个.Z延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,一般人多已改用 gzip 为档案压缩工具

(二)、compress安装:

目前最近的centos已经默认不安装compress;

检查是否已安装

yum install ncompress

yum安装compress

rpm -ql ncompress

(三)、注意事项:

compress该命令, 当文件被压缩解压缩之后,文件权限将不会保留压缩或者解压缩,如果不带参数,不会留下原文件或者压缩文件。1.sh.Z中的Z不是后缀名,是自己定义的,代表是compress压缩的文件

(四)、语法:

compress (参数)(文件)

(五)、参数:

[root@ecs-c2c9 ]# ls123[root@ecs-c2c9 ]# compress -f 123 #压缩文件:不会留下原文件[root@ecs-c2c9 ]# ls123.Z

(六)、uncompress 解压缩

zcat file.Z > file 与compress -d一样

[root@ecs-c2c9 ~]# zcat anaconda-ks.cfg.Z //查看压缩文件内容#version=RHEL7# System authorization informationauth --enableshadow --passalgo=sha512....[root@rhel~]#compress -d anaconda-ks.cfg.Z//不保留源文件[root@ecs-c2c9 ~]# uncompress anaconda-ks.cfg.Z //不保留源文件

三、 gzip/gunzip压缩工具.gz后缀

文件经过gzip压缩后,文件会多出一个.gz后缀。gzip命令对文本文件有60%~70%的压缩率。

gzip不带参数,将不会保留原文件和压缩文件,当文件被压缩解压缩之后,文件权限将不会保留

(一)、语法

gzip (参数)(文件)

(二)、参数

gzip不带参数,不会保留原文件,当文件被压缩解压缩之后,文件权限将不会保留

示例:

[root@centos7 bin]# gzip -cd 1.sh.zp > 1.sh à解压缩[root@ecs-c2c9 ~]# gzip anaconda-ks.cfg

(三)、 gunzip:解压

[root@ecs-c2c9 ~]# zcat anaconda-ks.cfg.gz//查看压缩文件内容#version=RHEL7# System authorization informationauth --enableshadow --passalgo=sha512....[root@rhel~]#gzip -d anaconda-ks.cfg.gz//不保留源文件[root@ecs-c2c9 ~]# gunzip anaconda-ks.cfg.gz //不保留源文件

(四)、常用指令

示例:

实例压缩文件[root@ a]# ls //显示当前目录文件a.c b.h d.cpp[root@ a]# gzip * //压缩目录下的所有文件[root@ a]# ls //显示当前目录文件a.c.gz b.h.gz d.cpp.gz[root@ a]# 接范例1, 列出详细的信息[root@ a]# gzip -dv * //解压文件,并列出详细信息a.c.gz:0.0% -- replaced with a.cb.h.gz:0.0% -- replaced with b.hd.cpp.gz:0.0% -- replaced with d.cpp[root@ a]# 接范例1,显示压缩文件的信息[root@ a]# gzip -l *compressed uncompressed ratio uncompressed_name240 0.0% a.c240 0.0% b.h260 0.0% d.cpp

四、bzip2/bunzip2/bzcat解压缩.bz2后缀

(一)、介绍:

Linux bzip2命令是.bz2文件的压缩程序。

bzip2采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。

bzip2程序用来压缩文件,bunzip2用来还原bzip2压缩的文件,bzcat用于显示bzip2压缩文件,bzip2recover用于修复bzip2压缩时损坏的文件

bzip2程序的压缩效率比gzip要好

(二)、语法

bzip2 (参数)(文件)

(三)、参数:

bzip2不带参数,将不会保留原文件。

示例:

[root@ecs-c2c9 ~]# lsanaconda-ks.cfg[root@ecs-c2c9 ~]# bzip2 anaconda-ks.cfg //不保留源文件[root@ecs-c2c9 ~]# lsanaconda-ks.cfg.bz2

(四)、 bunzip2:解压

示例:

[root@ecs-c2c9 ~]# bzcat anaconda-ks.cfg.bz2//查看压缩文件内容#version=RHEL7# System authorization informationauth --enableshadow --passalgo=sha512....[root@rhel~]#bzip2 -d anaconda-ks.cfg.bz2//不保留源文件[root@rhel~]#bzip2 -dk anaconda-ks.cfg.bz2//保留源文件[root@ecs-c2c9 ~]# bunzip2 anaconda-ks.cfg.bz2 //不保留源文件[root@ecs-c2c9 ~]# bunzip2 -k anaconda-ks.cfg.bz2 //保留源文件

(五)、常用指令

示例:

bzip2压缩

[root@ecs-c2c9 ~]# lsa b c dir[root@ecs-c2c9 ~]# bzip2 a[root@ecs-c2c9 ~]# lsa.bz2 b c dir

bzcat显示压缩文件的内容

[root@ecs-c2c9 ~]# bzcat a.bz2 Picture perfect memories scattered all around the floorReaching for the phone 'cause I can't fight it anymoreAnd I wonder if I ever cross your mindFor me it happens all the time

bunzip2 解压文件

[root@ecs-c2c9 ~]# bunzip2 a.bz2 [root@ecs-c2c9 ~]# lsa b.bz2 c dir

bunzip2 -k解压文件,并保留原文件

[root@ecs-c2c9 ~]# bunzip2 -k b.bz2 [root@ecs-c2c9 ~]# lsa b b.bz2 c dir

五、xz/unxz/xzcat压缩工具.xz后缀

(一)、介绍

xz命令XZ Utils 是为 POSIX 平台开发具有高压缩率的工具.xz后缀。它使用 LZMA2 压缩算法,生成的压缩文件比 POSIX 平台传统使用的 gzip、bzip2 生成的压缩文件更小,而且解压缩速度也很快。最初 XZ Utils 的是基于 LZMA-SDK 开发,但是 LZMA-SDK 包含了一些 WINDOWS 平台的特性,所以 XZ Utils 为以适应 POSIX 平台作了大幅的修改。XZ Utils 的出现也是为了取代 POSIX 系统中旧的 LZMA Utils。

(二)、语法

xz(参数)(文件)

(三)、参数

xz 不带参数,将不保存原文件。

示例:

xz 不带参数,原文件会被删除。

$ xz test.txt$ ls test.txt*test.txt.xz

解压 test.txt.xz 文件,并使用参数 -k 保持原文件不被删除

$ xz -d -k test.txt.xz$ ls test.txt*test.txt.xz test.txt

测试压缩文件/root/tt.xz的完整性

[root@rhel~]#xz -t /root/tt.xz

解压缩/root/tt.xz文件

[root@rhel~]#xz -d /root/tt.

(四)、unxz 解压缩

xzcat 解压缩 xzcat > file.sh.xz

示例:

[root@ecs-c2c9 ~]# xzcat anaconda-ks.cfg.xz //查看压缩文件内容#version=RHEL7# System authorization informationauth --enableshadow --passalgo=sha512....[root@rhel~]#xz -d anaconda-ks.cfg.xz//不保留源文件[root@rhel~]#xz -dk anaconda-ks.cfg.xz//保留源文件[root@ecs-c2c9 ~]# unxz anaconda-ks.cfg.xz //不保留源文件[root@ecs-c2c9 ~]# unxz -k anaconda-ks.cfg.xz //保留源文件

常用命令示例:

使用参数 -l 显示 .xz 文件的基本信息。基本信息包括压缩率、数据完整性验证方式等。也可以和参数 -v 或 -vv 配合显示更详尽的信息。

xz -l index.txt.xz# Strms Blocks Compressed Uncompressed Ratio Check Filename# 1 1 768 B1,240 B 0.619 CRC64 index.txt.

使用参数 -0, -1, -2, … -6, … -9 或参数 --fast, --best 设定压缩率。xz 命令的默认为 -6 ,对于大多数系统来说,甚至是一些较旧的系统,-4 … -6 压缩率预设值都不错的表现。

$ xz -k7 xz_pipe_decomp_mini.c$ xz -k --fast xz_pipe_decomp_mini.c

使用参数 -H 显示 xz 命令所有 options. 参数 -H 比使用参数 --help 显示的内容更详细。

$ xz -H | more

借助 xargs 命令并行压缩多文件。下面的命令行可以将 /var/log 目录下所有的扩展名为 .log 的文件压缩。通过 xargs 命令同时运行多个 xz 进行压缩。

# 运行此命令须有 root 权限。find /var/log -type f -iname "*.log" -print0 | xargs -P4 -n16 xz -T1

六、zip/unzip打包压缩工具.zip后缀

zip 是个使用广泛的压缩程序,压缩后的文件后缀名为.zip扩展名的压缩文件。

zip可以实现把多个文件压缩成一个文件,也可以理解未打包压缩。

zip –r 压缩所放的目录 需要压缩文件1 文件2 文件3

语法:

zip(参数)(zip压缩包)(文件列表)

zip压缩包:指定要创建的zip压缩包

文件列表:指定要压缩的文件列表。

参数:

示例:

打包压缩

zip –r /testdir/sysconfig /etc/sysconfig/

解压 unzip file.zip

unzip p file.zip //解压到当前目录下,保留源文件unzip –p file.zip > file

从压缩文件 cp.zip 中删除文件 a.c

zip -dv cp.zip a.c

/home/Blinux/html/这个目录下所有文件和文件夹打包为当前目录下的html.zip:

zip -q -r html.zip /home/Blinux/html

上面的命令操作是将绝对地址的文件及文件夹进行压缩,以下给出压缩相对路径目录,比如目前在Bliux这个目录下,执行以下操作可以达到以上同样的效果:

zip -q -r html.zip html

比如现在我的html目录下,我操作的zip压缩命令是:

zip -q -r html.zip *

压缩效率选择:

zip -9 # 1-9 faster->better

问题解决

CentOS7中命令找不到

-Bash: Unzip: Command Not Found

解决方法

yum install -y unzip zip

其他压缩解压工具:

.rar

解压:rar x FileName.rar

压缩:rar a FileName.rar DirName

file-roller压缩解压(图形不常用)

百度:FileRoller文件管理器是一款专为苹果mac用户提供的文件管理软件,可以帮助用户快速的对电脑中的文件进行分类管理,而且支持文件压缩解压功能,非常的方便实用。

百度:file-roller 同时也是Linux下的图形界面压缩解压工具

sudo apt-get install file-roller#centos系统请输入: sudo yum install file-roller#使用方法:file-roller -h yourFile.rar#便会生成yourFile的文件夹,更多使用技巧请man file-roller使用yum 即可以按照yum install file-rollerreboot重启进入界面右键下就有了compress一栏。

不确定这个软件是否依赖gnome的,如果你的桌面环境不是gnome,可能会下载gnome 的一些依赖库,甚至需要安装gnome桌面。

有了这个软件,以后解压真的是超级方便,再也不需要安装unzip, unrar,而且会自己创建目录,有木有遇到过用unrar解压时一堆文件散乱在当前目录,是不是好郁闷的感觉。file-roller 就不会有这个问题啦!

信息来源地址:

/article/5246149.htm

/1041548.html

归档(备份)工具

一、tar 打包归档工具.tar结尾

tar 打包工具,将多个文件打包成一个文件,将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。

介绍

tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。

**首先要弄清两个概念:打包和压缩:**打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

tar命令详解

tar支持将多个文件包成一个文件,同时还可通过gzip/bzip将该文件压缩。目前window的winRAR也支持.tar.gz文件解压。

(一)、命令格式:

tar[必要参数][选择参数][文件]

(二)、命令功能:

用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

(三)、参数说明

tar:能够实现归档的工具,只归档,不压缩。

必要参数如下:

选择参数如下:

(四)、常用的命令
1、 归档压缩/解压
2、查询

【实例】

1.将文件解压到指定目录下

命令:tar zxvf test.tgz -C 指定目录

如:tar zxvf /usr/local/jdk-8u161-linux-x64.tar.gz -C /usr/local/jdk1.8

将压缩文件jdk-8u161-linux-x64.tar.gz解压到/usr/local/jdk1.8目录下

tar 的最基本的用法示例:

以下就是 tar 的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar 提供了一种特殊的功能。这就是 tar 可以在打包或解包的同时调用其它的压缩程序,比如调用 gzip、bzip2 等。

tar 命令的选项有很多(用 man tar 可以查看到),但常用的就那么几个选项,下面来举例说明一下:

# tar -cf all.tar *.jpg

这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

# tar -rf all.tar *.gif

这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去,-r 是表示增加文件的意思。

# tar -uf all.tar logo.gif

这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

# tar -tf all.tar

这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

# tar -xf all.tar

这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

tar调用

(一)、tar调用gzip

gzip 是 GNU 组织开发的一个压缩程序,.gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。tar 中使用 -z 这个参数来调用gzip。下面来举例说明一下:

# tar -czf all.tar.gz *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,包名为 all.tar.gz。

# tar -xzf all.tar.gz

这条命令是将上面产生的包解开。

(二)、tar 调用 bzip2

bzip2 是一个压缩能力更强的压缩程序,.bz2 结尾的文件就是 bzip2 压缩的结果。

与 bzip2 相对的解压程序是 bunzip2。tar 中使用 -j 这个参数来调用 gzip。下面来举例说明一下:

# tar -cjf all.tar.bz2 *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,包名为 all.tar.bz2

# tar -xjf all.tar.bz2

这条命令是将上面产生的包解开。

(三)、tar 调用 compress

compress 也是一个压缩程序,但是好象使用 compress 的人不如 gzip 和 bzip2 的人多。.Z 结尾的文件就是 bzip2 压缩的结果。与 compress 相对的解压程序是 uncompress。tar 中使用 -Z 这个参数来调用 compress。下面来举例说明一下:

# tar -cZf all.tar.Z *.jpg

这条命令是将所有 .jpg 的文件打成一个 tar 包,并且将其用 compress 压缩,生成一个 uncompress 压缩过的包,包名为 all.tar.Z。

# tar -xZf all.tar.Z

这条命令是将上面产生的包解开。

有了上面的知识,你应该可以解开多种压缩文件了,下面对于 tar 系列的压缩文件作一个小结:

(四)、tar 系列的压缩文件小结:
1) 对于.tar结尾的文件

解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)

2) 对于 .gz 结尾的文件

解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName

3)对于 .tgz 或 .tar.gz 结尾的文件

解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName

4) 对于 .bz2 结尾的文件

解压1:bzip2 -d FileName.bz2解压2:bunzip2 FileName.bz2压缩: bzip2 -z FileName

5) 对于 tar.bz2 结尾的文

解压:tar jxvf FileName.tar.bz2压缩:tar jcvf FileName.tar.bz2 DirName

6) 对于 .Z 结尾的文件

解压:uncompress FileName.Z压缩:compress FileName

7) 对于 .tar.Z 结尾的文件

解压:tar Zxvf FileName.tar.Z压缩:tar Zcvf FileName.tar.Z DirName

8) 对于.bz 结尾的文件

解压1:bzip2 -d FileName.bz解压2:bunzip2 FileName.bz压缩:未知

9) 对于.tar.bz 结尾的文件

解压:tar jxvf FileName.tar.bz压缩:未知

10)对于.zip 结尾的文件

Windows 下的常见压缩文件 .zip ,Linux 也有相应的方法来解压它们

解压:unzip FileName.zip压缩:zip FileName.zip DirName

linux 下提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

# zip all.zip *.jpg

这条命令是将所有 .jpg 的文件压缩成一个 zip 包:

# unzip all.zip

这条命令是将 all.zip 中的所有文件解压出来。

11)对于.rar 结尾的文件

Windows 下的常见压缩文件 .rar,Linux 也有相应的方法来解压它们

解压:rar x FileName.rar压缩:rar a FileName.rar DirName

要在 linux 下处理 .rar 文件,需要安装 RAR for Linux。下载地址:/download.htm,下载后安装即可。

# tar -xzpvf rarlinux-x64-5.6.b5.tar.gz# cd rar # make

这样就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:

# rar a all *.jpg

这条命令是将所有 .jpg 的文件压缩成一个 rar 包,名为 all.rar,该程序会将 .rar 扩展名将自动附加到包名后。

# unrar e all.rar

这条命令是将 all.rar 中的所有文件解压出来:

扩展内容

tar

-c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出

下面的参数 -f 是必须的:

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

# tar -cf all.tar *.jpg

这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f 指定包的文件名。

# tar -rf all.tar *.gif

这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。

# tar -uf all.tar logo.gif

这条命令是更新原来 tar 包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。

# tar -tf all.tar

这条命令是列出 all.tar 包中所有文件,-t 是列出文件的意思。

# tar -xf all.tar

这条命令是解出 all.tar 包中所有文件,-x 是解开的意思。

压缩

tar –cvf jpg.tar *.jpg // 将目录里所有jpg文件打包成 tar.jpg tar –czf jpg.tar.gz *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 gzip 压缩,生成一个 gzip 压缩过的包,命名为 jpg.tar.gz tar –cjf jpg.tar.bz2 *.jpg // 将目录里所有jpg文件打包成 jpg.tar 后,并且将其用 bzip2 压缩,生成一个 bzip2 压缩过的包,命名为jpg.tar.bz2 tar –cZf jpg.tar.Z *.jpg// 将目录里所有 jpg 文件打包成 jpg.tar 后,并且将其用 compress 压缩,生成一个 umcompress 压缩过的包,命名为jpg.tar.Z rar a jpg.rar *.jpg// rar格式的压缩,需要先下载 rar for linux zip jpg.zip *.jpg // zip格式的压缩,需要先下载 zip for linux

解压

tar –xvf file.tar // 解压 tar 包 tar -xzvf file.tar.gz// 解压 tar.gz tar -xjvf file.tar.bz2 // 解压 tar.bz2 tar –xZvf file.tar.Z// 解压 tar.Z unrar e file.rar// 解压 rar unzip file.zip // 解压 zip

总结

1、*.tar 用 tar –xvf 解压 2、*.gz 用 gzip -d或者gunzip 解压 3、*.tar.gz和*.tgz 用 tar –xzf 解压 4、*.bz2 用 bzip2 -d或者用bunzip2 解压 5、*.tar.bz2用tar –xjf 解压 6、*.Z 用 uncompress 解压 7、*.tar.Z 用tar –xZf 解压 8、*.rar 用 unrar e解压 9、*.zip 用 unzip 解压

实例:

要打包 /home/YingMu/ 文件夹且排除 /home/YingMu/ 文件夹

tar -czvf YingMu.tar /home/YingMu/ --exclude /home/YingMu/

排除多个文件夹则在命令中添加多个目录 --exclude 目录名,例如:

tar -czvf YingMu.tar /home/YingMu/ --exclude /home/YingMu/ --exclude /home/YingMu/QQ

排除文件的话把上面的目录名改为类似 *.gif 的排除规则即可。

————————————————

参考博客:

/kkw1992/java/article/details/80000653

/w3cnote/linux-tar-gz.html

/lwjdear/article/details/72780081

二、cpio:制作归档或展开归档文件

cpio基本介绍

cpio是一个非常古老的归档工具。已逐渐被tar替代,但是有些功能是tar不存在的,所以还是分享下它的用法。

cpio - copy files to and from archives

cpio用于创建、解压归档文件,也可以对归档文件执行拷入拷出的动作,即向归档文件中追加文件,或从归档文件中提取文件。它也支持tar格式的归档文件,但是对压缩后的tar(如.tar.gz格式)就没法支持了,cpio毕竟不会调用对应的(解)压缩工具。

cpio一般从标准输入获取数据,写入到标准输出,所以一般会结合管道、输入重定向、输出重定向使用。

cpio有三种运行模式:

Copy-out模式:此模式下,cpio将向归档文件中拷入文件,即进行归档操作,所以成为归档模式。它会从标准输入中读取待归档的文件,将它们归档到目标目标中,若未指定归档的目标,将归档到标准输出中。在copy-out模式下,最典型的是使用find来指定待归档文件,在使用find时,最好加上"-depth"以尽可能减少可能出现的问题,例如目录的权限问题

Copy-in模式:此模式下,cpio将从归档文件中提取文件,或者列出归档文件中的文件列表。它将从标准输入中读取归档文件。任意cpio的非选项参数都将认为是shell的glob通配pattern,只有文件名匹配了指定模式时才会从中提取出来或list出来。在cpio中,通配符不能匹配到".“或”/",所以如有需要,必须显式指定".“或”/"。如果没有指定匹配模式,则解压或列出所有文件。

Copy-pass模式:此模式下,cpio拷贝一个目录树(即目录中所有文件)到另一个目录下,并在目标目录下以同名的子目录存在。copy-pass模式是copy-in模式再copy-out模式的结合,它中途没有涉及到任何归档行为。这是cpio的一个特殊用法。它从标准输入中读取待拷贝内容,然后将它们复制到目标路径下。

功能:

复制文件从或到归档

cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或 者“.tar”结尾的文件

cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。

归档包,也可称为文件库,其实就是 cpio 或 tar 格式的文件,该文件中包含其他文件以及一些相关信息(文件名、访问权限等)。归档包既可以是磁盘中的文件,也可以是磁带或管道。

使用 cpio 命令备份或恢复数据,需注意以下几点:

使用 cpio 备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与 find 命令配合使用。cpio 命令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。

语法:

cpio [选项] > 文件名或者设备名cpio [选项] < 文件名或者设备名

选项

-o:(–create)指定运行为copy-out模式,即归档模式-i:(–extract)指定运行为copy-in模式,即提取模式 (解压/还原)-p:(–pass-through)指定运行为copy-pass模式,即目录拷贝模式-t:(–list)列出归档文件中的文件列表-v 显示打包过程中的文件名称。-d 解包生成目录,在cpio还原时,自动的建立目录-c 一种较新的存储方式

示例将etc目录备份: find ./etc -print |cpio -ov >etc.cpio 内容预览 cpio –tv < etc.cpio 解包文件 cpio –idv < etc.cpio

常用操作模式

(1)备份:cpio -ocvB > [ file | device ] “-o” 模式:指的是 copy-out 模式

(2)还原:cpio -ivcdu > file | device ] “-i” 模式:指的是 copy-in 模式

(3)复制:cpio -p >[ file | device ] “-p” 模式:指的是copy-pass模式

(4)查看:cpio -ivct >[ file | device ]

cpio 命令主要有以下 3 种基本模式:

1、备份:cpio -o[vcB] > [ file | device ] “-o” 模式:指的是 copy-out 模式

“-o” 模式:指的是 copy-out 模式,就是把数据备份到文件库中,命令格式如下:

[root@localhost ~]# cpio -o[vcB] > [文件丨设备]

各选项含义如下:

-o:copy-out模式,备份;-v:显示备份过程;-c:使用较新的portable format存储方式;-B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;

比如,使用 cpio 备份数据的命令如下:

[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio#利用find命令指定要备份/etc/目录,使用>导出到etc.cpio文件[root@localhost ~]# II -h etc.cpio-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio#etc.cpio文件生成

示例:(1)找出当前目录下的所有文件,然后将它们打包进一个cpio压缩包文件find . -depth | cpio -ocvB > backup.cpio 或 find .-depth-print | cpio -ocvB > backup.cpio注意:cpio 建立起来的归档文件包括文件头和文件数据两部分。文件头包含了对应文件的信息。如文件的 UID,GID,连接数以及文件大小等。其好处是可以保留硬连接,在恢复时默认情况下保留时间戳,无文件名称长度的限制(2)将当前目录下名为inittab文件加入initrd.cpio包中命令1:find . -name inittab -depth | cpio -ovcB -A -F initrd.cpio 命令2:find . ename inittab -depth | cpio -ovcB -A -O initrd.cpio命令3:find . -name inittab -depth | cpio -ovcB -A --quiet -O initrd.cpio(--quit:表示不显示复制块) cpio --absolute-filenames -vtc < boot.cpio(不忽略文件列表清单的文件名最前面的“/")cpio --no-absolute-filenames -vtc < boot.cpio(默认是忽略文件列表清单的文件中最前面的

2、 还原:cpio -i[vcdu] > file | device ] “-i” 模式:指的是 copy-in 模式

“-i” 模式:指的是 copy-in 模式,就是把数据从文件库中恢复,命令格式如下:

[root@localhost ~]# cpio -i[vcdu] < [文件|设备]

各选项的含义为:

-i:copy-in 模式,还原;-v:显示还原过程;-c:较新的 portable format 存储方式;-d:还原时自动新建目录;-u:自动使用较新的文件覆盖较旧的文件;

比如,使用 cpio 恢复之前备份的数据,命令如下:

[root@localhost ~]# cpio -idvcu < /root/etc.cpio#还原etc的备份#如果大家査看一下当前目录/root/,就会发现没有生成/etc/目录。这是因为备份时/etc/目录使用的是绝对路径,所以数据直接恢复到/etc/系统目录中,而没有生成在/root/etc/目录中

示例:(1)从cpio压缩包中的解压出文件cpio --absolute-filenames -icvu < test.cpio(解压到原始位置,解压出来的每个文件的时间属性改为当前时间)cpio --absolute-filenames -icvum < test.cpio(解压到原始位置,同时不改变解压出来的每个文件的时间属性)cpio -icvu < test.cpio(解压到当前目录下)或者cpio -icvum < test.cpio(2)在解包cpio时,对解包出来的文件进行交互的更名cpio -icvdu -r < grub.cpio(3)将cpio包中的文件解压并输入标准输出cpio -icvu --to-stdout < grub.cpio注意:既然解压到标准输出,所以就不能使用-d参数了

3、 复制:cpio -p >[ file | device ] “-p” 模式:指的是 cpio- pass 模式 模式

“-p” 模式:指的是复制模式,使用 -p 模式可以从某个目录读取所有文件,但并不将其备份到 cpio 库中,而是直接复制为其他文件。

例如,使用 -p 将 /boot/ 复制到 /test/boot 目录中可以执行如下命令:

[root@localhost ~]# cd /tmp/#进入/tmp/目录[root@localhost tmp]#rm -rf*#删除/tmp/目录中的所有数据[root@localhost tmp]# mkdir test#建立备份目录[root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test#备份/boot/目录到/tmp/test/目录中[root@localhost tmp]# ls test/boot#在/tmp/test/目录中备份出了/boot/目录

示例:复制文件并更改文件的属主与属组find . -depth| cpio -R ruanxi:ruanxi -pL /backup/

cpio示例

(1).将家目录下的所有文件都归档到tree.cpio中。

[root@server2 ~]# find ~ -depth | cpio -ov > tree.cpio 或 [root@server2 ~]# find ~ -depth | cpio -ov -F tree.cpio

但要非常注意一点,如果使用find搜索,且归档文件和搜索目录是同一路径时,它会将归档文件本身也归档到归档文件中,即进行了迭代归档。

例如上面的例子中,将find家目录的所有文件都归档到tree.cpio,但tree.cpio也将是放在家目录下的,它也会被find搜素到,所以也会被归档到其自身中去。可能这里会有所疑惑了,不是应该find处理完之后才处理cpio吗?非也,管道的作用只是进程间数据传递的作用,但不是一定要等管道左边的处理完成之后才传递,而是左边边处理边传递到右边的,如果左边处理的太快,导致管道拥堵,那么管道左边的程序将等待管道有空闲空间。

要解决迭代归档的问题,只要让归档文件不被find搜索到即可。可以在find中排除、在cpio中排除或归档文件放到其他目录下去。

[root@server2 ~]# find ~ -depth | cpio -ov -F /tmp/tree.cpio

一般出于准确性考虑,会在find上使用"-print0",然后在cpio上使用"–null"解析空字符。

[root@server2 ~]# find ~ -depth -print0 | cpio --null -ov -F /tmp/tree.cpio

(2).列出归档文件中的文件列表。

[root@server2 tmp]# cpio -t -F tree.cpio 或 [root@server2 tmp]# cpio -t < tree.cpio

这将会递归列出tree.cpio中的所有文件,所以这不会是你想要的,应该对其指定一个匹配模式。

[root@server2 tmp]# cpio -t -F tree.cpio /root/* 或 [root@server2 tmp]# cpio -t /root/* < tree.cpio

这将列出tree.cpio中所有/root/目录下的内容,但是很显然,"*"号没法匹配点开头的隐藏文件,所以不会显示出隐藏文件。

[root@server2 tmp]# cpio -t -F tree.cpio /root/.*

但这样又只会列出隐藏文件。如何既列出隐藏文件,也列出普通文件?在cpio中好像不直接支持这样的通配,以下是我想到的一个办法。

[root@server2 tmp]# cpio -t -F tree.cpio /root/{.*,*}

注意,cpio命令行中任意非选项参数都会被当成pattern。

(3).向归档文件中追加文件。

注意,不要使用重定向符号">>“进行追加,虽然从归档文件最后的打下上看是追加成功了,但是实际上你却不知道它追加到哪里去了,根本就找不到追加的内容。所以,还是用”-A"选项。

[root@server2 tmp]# ls /root/new.txt | cpio -oA -F tree.cpio

这将会把/root/new.txt下的文件追加到tree.cpio中,由于tree.cpio中已经有了/root目录,所以追加后路径为tree.cpio中的/root/new.txt。

而如果tree.cpio中没有待追加文件所在的目录,则会新建一个目录。

[root@server2 tmp]# find /boot -depth -print0 | cpio -oA -F tree.cpio

这将会在tree.cpio中追加一个/boot目录,它和/root目录是同级别的。

好像没有办法直接指定追加的目标路径。

(4).提取文件。

注意:cpio只能提取文件时只能提取到当前目录下。

[root@server2 tmp]# cpio -idv -F tree.cpio /root/new.txtcpio: new.txt not created: newer or same age version exists

这就会提取/root/下的new.txt到当前目录,显然,这里报了一个错,提示当前目录下已经存在较待提取文件更新的同名文件,所以并没有进行提取。如果要强行提取,使用功能"-u"选项,这将覆盖已存在动作。

[root@server2 tmp]# cpio -idvu -F tree.cpio new.txt

其实,只要是同名文件,不管它的时间戳是否比待提取更新,都不会提取,除非强制提取。

这里"-d"选项的作用是提取时如果前导目录不存在,则自动创建。反正不会影响已存在目录,所以"-i"一般都会加上个"-d"。

(5).目录文件复制,即copy-pass模式。

注意,该模式下复制的目录在目标位置上是以子目录形式存在的。例如,例如复制/root目录到/tmp/abc下,则在/tmp/abc下会有root子目录,在/tmp/abc/root下才是源/root中的文件。

[root@server2 tmp]# find ~ -depth -print0 | cpio --null -pvd /tmp/abc [root@server2 tmp]# ll /tmp/abc dr-xr-x--- 6 root root 4096 Jun 13 09:45 root

**(6) .分析系统目录/boot下的initrd-2.6.30.9.img文件

[root@Server tmp]# file /boot/initrd-2.6.30.9.imgboot/initrd-2.6.30.9.img: gzip compressed data, from Unix, last modified: Fri Nov 13 22:12:38 , max compression#由上面可知道,initrd-2.6.30.9.img它是一个gzip文件-------------------------------------------------------------------[root@Server tmp]# cp /boot/initrd-2.6.30.9.img ./initrd.img.gz[root@Server tmp]# gzip -d initrd.img.gz#通过gzip指令解压出文件-------------------------------------------------------------------[root@Server tmp]# file initrd.imginitrd.img: ASCII cpio archive (SVR4 with no CRC)#可知解压出的文件是一个cpio压缩包[root@Server tmp]# cpio -ivcdu < initrd.img#最后再使用cpio指令解包

rpm2cpio和cpio关系

pm2cpio命令:将rpm格式的文件转为cpio格式的文件。

rpm是linux中常用的文件格式,方便了用户的安装,但没有cpio格式灵活,最典型的例子就是安装一个在rpm中.so文件时,如果直接使用rpm安装,那么需要处理复杂的依赖关系,将rpm转为cpio,则可以方便地提取.so文件,做过软连接。比如:

# rpm2cpio ../libstdc++-4.3.0-8.i386.rpm | cpio -idv# file init.cpioinit.cpio: ASCII cpio archive (SVR4 with no CRC)

rpm2cpio言下之意就是把RPM包转化成CPIO归档档案!

最简单的例子如下,该命令功能同rpm -qpl package.rpm,为查看RPM中的文件内容,rpm2cpio package.rpm | cpio -t把RPM包转化为cpio包,cpio包的使用范围和可用性会比RPM更广!rpm2cpio package.rpm > package.cpio

使用 cpio命令提取 RPM 包中指定文件

在服务器使用过程,如果系统文件被误修改或误删除,可以考虑使用 cpio 命令提取出原 RPM 包中所需的系统文件,从而修复被误操作的源文件。

RPM 包允许逐个提取包中文件,使用的命令格式如下:

[root@localhost ~]# rpm2cpio 包全名|cpio -idv .文件绝对路径

该命令中,rpm2cpio 就是将 RPM 包转换为 cpio 格式的命令,通过 cpio 命令即可从 cpio 文件库中提取出指定文件。

举个例子,假设我们不小心把 /bin/ls 命令删除了,通常有以下 2 种方式修复:

将 coreutils-8.4-19.el6.i686 包(包含 ls 命令的 RPM 包)通过 -force 选项再安装一遍;使用 cpio 命令从 coreutils-8.4-19.el6.i686 包中提取出 /bin/ls 文件,然后将其复制到相应位置;

这里我们选择第 2 种方式。有读者可能会问,如何知道 ls 命令隶属于那个 RPM 包呢?很简单,使用rpm -qf命令即可,如下所示:

[root@localhost ~]# rpm -qf /bin/lscoreutils-8.4-19.el6.i686#查看ls文件属于哪个软件包

#查看ls文件属于哪个软件包在此基础上,我们只需从此 RPM 包使用 cpio 命令提取出 ls 命令文件,然后将其复制到对应位置即可,实现命令如下:

[root@localhost ~]# mv /bin/ls /root/#把/bin/ls命令移动到/root/目录下,造成误删除的假象[root@localhost ~]# ls-bash: ls: command not found#这时执行ls命令,系统会报"命令没有找到"错误[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm|cpio -idv ./bin/ls#提取ls命令文件到当前目录下[root@localhost ~]# cp /root/bin/ls /bin/#把提取出来的ls命令文件复制到/bin/目录下[root@localhost ~]#lsanaconda-ks.cfg bin inittab install.log install.log.syslog ls#可以看到,ls命令又可以正常使用了

参考博客:

/view/822.html

/html/32/498132-816949.html

/blog-detail-22-25-650.html#

回到Linux系列文章大纲:/blog-detail-22-25-555

回到网站架构系列文章大纲:/blog-detail-22-25-671

回到数据库系列文章大纲:/blog-detail-22-25-670

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。