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

文章目录


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

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

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

常见解压/压缩命令
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
(三)、注意事项:
  1. compress该命令, 当文件被压缩解压缩之后,文件权限将不会保留
  2. 压缩或者解压缩,如果不带参数,不会留下原文件或者压缩文件。
  3. 1.sh.Z中的Z不是后缀名,是自己定义的,代表是compress压缩的文件
(四)、语法:
compress (参数)(文件)
(五)、参数:
参数说明
d解压缩,相当于uncompress(解压缩)
c结果输出到标准输出(输出到终端上)不会删除原文件
v将程序执行的信息输出到终端上
f强迫写入档案,若目的档已经存在,则会被覆盖 (force)
V列出版本信息
- r递归。如果文件名是一个目录,则使用下行命令,把所有东西都压缩进去。
[root@ecs-c2c9 ]# ls
123
[root@ecs-c2c9 ]# compress -f  123 	#压缩文件:不会留下原文件
[root@ecs-c2c9 ]# ls
123.Z
(六)、uncompress 解压缩

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

[root@ecs-c2c9 ~]# zcat  anaconda-ks.cfg.Z 	//查看压缩文件内容
#version=RHEL7
# System authorization information
auth --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不带参数,不会保留原文件,当文件被压缩解压缩之后,文件权限将不会保留

参数说明
-c将压缩或解压缩的结果输出至标准输出
-d解压.gz文件,相当于gunzip
-v打印操作详细信息
-l列出压缩文件详细信息
-h在线帮助
-#:1-9,指定压缩比,值越大,压缩比越大,默认为6

示例:

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

(三)、 gunzip:解压
命令说明
gunzip解压
zcat解压缩,同gzip –d 用法一样,效果一样
[root@ecs-c2c9 ~]# zcat  anaconda-ks.cfg.gz		//查看压缩文件内容
#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512
....
[root@rhel~]#gzip -d anaconda-ks.cfg.gz		//不保留源文件
[root@ecs-c2c9 ~]# gunzip  anaconda-ks.cfg.gz	  	//不保留源文件
(四)、常用指令
命令说明
gzip 文件压缩
gzip -dv 压缩文件解压并打印执行过程
gzip -c 待压缩文件 > 带压缩文件.gz压缩文件并保留源文件
gzip *批量压缩
gzip -dv *批量解压

示例:

实例

压缩文件
[root@runoob.com a]# ls //显示当前目录文件
a.c b.h d.cpp
[root@runoob.com a]# gzip * //压缩目录下的所有文件
[root@runoob.com a]# ls //显示当前目录文件
a.c.gz    b.h.gz    d.cpp.gz
[root@runoob.com a]# 

接范例1, 列出详细的信息
[root@runoob.com a]# gzip -dv * //解压文件,并列出详细信息
a.c.gz:     0.0% -- replaced with a.c
b.h.gz:     0.0% -- replaced with b.h
d.cpp.gz:     0.0% -- replaced with d.cpp
[root@runoob.com a]# 

接范例1,显示压缩文件的信息
[root@runoob.com a]# gzip -l *
     compressed    uncompressed ratio uncompressed_name
         24          0  0.0% a.c
         24          0  0.0% b.h
         26          0  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不带参数,将不会保留原文件。

参数说明
-k保留原文件的权限
-d解压缩, 同bunzip2
-c将压缩或者解压缩的结果写到标准输出
-q抑制警告信息,但显示关键信息
-t验证压缩文件的完整性,如果文件完整,则不显示任何信息
-v显示压缩或解压缩时的过程信息
-f强制压缩,覆盖已经存在的文件
-#1-9,压缩比,默认为9

示例:

[root@ecs-c2c9 ~]# ls
anaconda-ks.cfg
[root@ecs-c2c9 ~]# bzip2 anaconda-ks.cfg   //不保留源文件
[root@ecs-c2c9 ~]# ls
anaconda-ks.cfg.bz2
(四)、 bunzip2:解压
命令说明
bunzip2解压
bzcat解压缩,同gzip –d 用法一样,效果一样

示例:

[root@ecs-c2c9 ~]# bzcat  anaconda-ks.cfg.bz2	//查看压缩文件内容
#version=RHEL7
# System authorization information
auth --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 abzip2压缩
bzcat a.bz2bzcat显示压缩文件的内容
bunzip2 a.bz2bunzip2 解压文件
bunzip2 -k b.bz2bunzip2 -k解压文件 -k保留源文件

示例:

bzip2压缩

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

bzcat显示压缩文件的内容

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

bunzip2 解压文件

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

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

[root@ecs-c2c9 ~]#  bunzip2 -k b.bz2 
[root@ecs-c2c9 ~]# ls
a  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 不带参数,将不保存原文件。

参数说明
-z强制执行压缩
-d强制执行解压缩
-l列出压缩文件的信息
-t测试压缩文件的完整性
-k保留原文件
-f强制覆盖输出文件和压缩链接
-c写入到标准输出,输入文件不要删除
-0…-9压缩比例,默认为6
-v显示更详细的信息

示例:

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 information
auth --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 B      1,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压缩包

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

参数:
参数说明
A调整可执行的自动解压缩文件;
bb<工作目录> 指定暂时存放文件的目录。
c替每个被压缩的文件加上注释;
d从压缩文件内删除指定的文件;
D压缩文件内不建立目录名称;
f此参数的效果和指定“-u”参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中;
F尝试修复已损坏的压缩文件;
g将文件压缩后附加在已有的压缩文件之后,而非另行建立新的压缩文件;
h在线帮助;
ii<范本样式> 只压缩符合条件的文件。
j只保存文件名称及其内容,而不存放任何目录名称;
J删除压缩文件前面不必要的数据;
k使用MS-DOS兼容格式的文件名称;
l压缩文件时,把LF字符置换成LF+CR字符;
ll压缩文件时,把LF+cp字符置换成LF字符;
L显示版权信息;
m将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中;
nn<字尾字符串> 不压缩具有特定字尾字符串的文件。
o以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同;
q不显示指令执行过程;
r递归处理,将指定目录下的所有文件和子目录一并处理;
S包含系统和隐藏文件;
tt<日期时间> 把压缩文件的日期设成指定的日期。
T检查备份文件内的每个文件是否正确无误;
u更换较新的文件到压缩文件内;
v显示指令执行过程或显示版本信息;
V保存VMS操作系统的文件属性;
w在文件名称里假如版本编号,本参数仅在VMS操作系统下有效;
x-x<范本样式> 压缩时排除符合条件的文件。
X不保存额外的文件属性;
y直接保存符号连接,而非该链接所指向的文件,本参数仅在UNIX之类的系统下有效;
z替压缩文件加上注释;
-$保存第一个被压缩文件所在磁盘的卷册名称;
<压缩效率><压缩效率> 压缩效率是一个介于1-9的数值。

示例:

打包压缩

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-roller
reboot
重启进入界面右键下就有了compress一栏。

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

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

信息来源地址:

https://www.it610.com/article/5246149.htm

https://www.xuebuyuan.com/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:能够实现归档的工具,只归档,不压缩。

必要参数如下:

参数参数说明
-c新建打包文件,同 -v 一起使用 查看过程中打包文件名
-x展开归档文件,原归档文件不删除
–xattrs表示在归档的同时,保留文件的扩展属性信息
-t不展开归档,查看归档了哪些文件
-j通过bzip2方式压缩或解压,最后以.tar.br2 为后缀。压缩后大小小于.tar.gz
-z通过gzip方式压缩或解压,最后以.tar.gz 为后缀
-J调用xz方式压缩或解压文件
-Z调用compress方式压缩或解压文件
-v压缩或解压过程中,显示出来过程
-u更新压缩文件中的内容。
-p保留绝对路径,即允许备份数据中含有根目录
-P保留数据原来权限及属性。
-B设置区块大小
-d记录文件的差别
-r添加文件到已经压缩的文件
-l文件系统边界设置
-k保留原有文件不覆盖
-m保留文件不被覆盖
-W确认压缩文件的正确性

选择参数如下:

参数参数说明
-f-f file.tar 操作的归档文件,所以-f后面必须跟参数,后跟.tar
-b设置区块数目
-C切换到指定目录
–help显示帮助信息
–version显示版本信息
–exclude =FILE压缩过程中,不要讲FILE打包
man tar查看更多参数
(四)、常用的命令
1、 归档压缩/解压
命令说明
tar -zcf归档并调用gzip 压缩,压缩文件名称.tar.gz
tar -zxf调用gzip 解压缩并展开归档,-z选项可以省略,压缩文件名称.tar.gz
tar -jcf调用bzip2 并归档,压缩文件名称,压缩文件名称.tar.br2
tar -jxf调用bzip2 并展开归档 ,压缩文件名称,压缩文件名称.tar.br2
tar -Jcf调用xz 并归档,压缩文件名称,压缩文件名称.tar.xz
tar -JXF调用xz 并展开归档 ,压缩文件名称,压缩文件名称.tar.xz
2、查询
命令说明
tar -tf 压缩文件名查看文件名
tar -tvf 压缩文件查看文件:所属权限、用户名用户组、日期等

【实例】

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。下载地址:http://www.rarsoft.com/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/111cn.net 文件夹

tar -czvf YingMu.tar /home/YingMu/ --exclude /home/YingMu/111cn.net

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

tar -czvf YingMu.tar /home/YingMu/ --exclude /home/YingMu/111cn.net --exclude /home/YingMu/QQ

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

————————————————
参考博客:
https://blog.csdn.net/kkw1992/java/article/details/80000653

https://www.runoob.com/w3cnote/linux-tar-gz.html

https://blog.csdn.net/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 命令备份或恢复数据,需注意以下几点:
  1. 使用 cpio 备份数据时如果使用的是绝对路径,那么还原数据时会自动恢复到绝对路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。
  2. cpio 命令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此命令常与 find 命令配合使用。
  3. 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.txt
cpio: 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.img
boot/initrd-2.6.30.9.img: gzip compressed data, from Unix, last modified: Fri Nov 13 22:12:38 2009, 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.img
initrd.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.cpio
init.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 种方式修复:

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

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

 [root@localhost ~]# rpm -qf /bin/ls
coreutils-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 ~]#ls
anaconda-ks.cfg bin inittab install.log install.log.syslog ls
#可以看到,ls命令又可以正常使用了

参考博客:

http://c.biancheng.net/view/822.html

http://www.51testing.com/html/32/498132-816949.html

https://www.wyxxw.cn/blog-detail-22-25-650.html#

回到Linux系列文章大纲:http://www.wyxxw.cn/blog-detail-22-25-555
回到网站架构系列文章大纲:http://www.wyxxw.cn/blog-detail-22-25-671
回到数据库系列文章大纲:http://www.wyxxw.cn/blog-detail-22-25-670

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值