压缩、解压缩
压缩格式:gz,bz2,xz,zip,z
compress
FILENAME.Z【这是中比较古来的压缩方式,现在不常用】,uncompress:解压.Z压缩文件
gzip
.gz,使用方法:gzip /PATH/FILENAME,压缩后会删除原文件,它对应的gunzip是解压.gz文件的,解压后也会删除原文件,不能压缩目录,如果指定的是目录它会把目录里的文件都压缩;gzip的选项:
-d:相当于gunzip,对文件解压缩
-#:1-9,指定压缩比,默认是6,压缩比越大就越慢,压缩出来的文件是最小的
gunzip
解压缩.gz压缩的文件
zcat
压缩文件查看不是用cat,而是用zcat;使用方法:zcat /PATH/FILENAME.gz,不解压的情况下查看文件的内容
bzip2
.bz2结尾,它比gzip有着更大的压缩比,使用格式与gzip近似,使用方式:bzip2 /PATH/FILENAME,压缩后也会删除原文件
-d:解压缩
-#:1-9,默认是6
-k:压缩时保留原文件【这个选项gzip没有】
bunzip2
解压缩.bz2结尾的压缩文件,bunzip2 /PATH/FILENAME
bcat
查看.bz2压缩的文件,bcat /PATH/FILENAME
xz
.xz,压缩比更大,使用方法与bzip2近似,xz /PATH/FILENAME
-d:解压缩
-#:1-9,默认6
-k:压缩保留原文件
unxz
解压缩.xz压缩文件
xzdec
也是解压缩,xzdec -dk /PATH/FILENAME > FILENAME,解压缩时保留原文件【xz -d和unxz都可以解压缩,但是xzdec解压缩会输出到屏幕,我们需要解压缩时重定向到文件就可以了。】
-d:默认就是该选项,解压缩
-c:解压缩输出到屏幕
-k:解压缩保留原文件
xzcat
zip
既归档又压缩的工具,可以压缩目录,压缩后不删除原文件,但是压缩比很小,压缩算法是deflated
使用方法:zip FILENAME.zip FILENAME1,FILENAME2…
unzip
archive:归档
把一些文件放到一块,打包一下叫做归档,归档不一定压缩,上面的zip是既压缩又归档
tar归档
-c:指定要归档的文件
-f FILE.tar:指定归档后的文件名
-x:展开归档
–xattrs:归档时,保留文件的扩展属性信息【如:默认归档不会保留acl,可以使用该选项保留acl】
-t:不展开归档直接查看归档了哪些文件
-zcf:归档并调用gzip压缩
-zxf:调用gzip解压缩,并展开归档,-z可省略
-jcf:归档并调用bzip2压缩
-jxf:bzip2解压并展开归档,-j可省略
-Jcf:归档并调用xz压缩【有的版本可能不支持】
-Jxf:xz解压缩,并展开归档
另外,上面的解压缩有多种,我们还需要去判断该用那种类型去解压缩,其实当使用tar -xf 展开归档时,它会智能判断用那种解压方式去解压,注意它不适用xz压缩的
它们都对应-ztf,-jtf,-Jtf,不解压查看归档文件内容
[root@localhost ~]# tar -c *.txt -f gui.tar【归档】
[root@localhost ~]# ls
anaconda-ks.cfg b.txt gui.tar install.log.syslog
a.txt c.txt install.log
[root@localhost ~]# rm -rf *.txt【删除原文件】
[root@localhost ~]# tar -xf gui.tar【展开归档】
[root@localhost ~]# ls
anaconda-ks.cfg b.txt gui.tar install.log.syslog
a.txt c.txt install.log
[root@localhost ~]# tar -tf gui.tar 【不展开归档查看】
a.txt
b.txt
c.txt
[root@localhost ~]# tar -xf gui.tar.bz2【bz2压缩的可以智能判断用bzip2解压,并展开归档】
[root@localhost ~]# ls
anaconda-ks.cfg b.txt gui.tar.bz2 install.log.syslog
a.txt c.txt install.log
[root@localhost ~]# tar -xf gui.tar.xz【xz压缩不会智能判断】
tar: 它似乎不像是一个 tar 归档文件
tar: 由于前次错误,将以上次的错误状态退出
[root@localhost ~]# tar -Jxf gui.tar.xz
cpio归档
read
read让用户键盘输入(C语言scanf)
[root@localhost ~]# read NAME【一个变量一个值】
jiakang
[root@localhost ~]# echo $NAME
jiakang
[root@localhost ~]# read NAME【一个变量,两个值】
jiakang zhangsan
[root@localhost ~]# echo $NAME
jiakang zhangsan
[root@localhost ~]# read NAME SEX【两个变量两个值】
jiakang man
[root@localhost ~]# echo $NAME
jiakang
[root@localhost ~]# echo $SEX
man
[root@localhost ~]# read NAME SEX【两个变量三个值】
jiakang man woman
[root@localhost ~]# echo $NAME
jiakang
[root@localhost ~]# echo $SEX
man woman
[root@localhost ~]# read NAME SEX【两个变量一个值】
jiakang
[root@localhost ~]# echo $NAME
jiakang
[root@localhost ~]# echo $SEX【空值】
[root@localhost ~]#
通过上面的代码,结论就是:值比变量多,多余的值最后被赋给一个变量;值比变量少,最后的变量赋空值
-p “提示”:给出输入提示
-t 时间 :多少秒没有输入,脚本自动往下执行
[root@localhost ~]# vi read.sh
[root@localhost ~]# chmod +x read.sh
[root@localhost ~]# cat read.sh
#!/bin/bash
#
echo "请输入两个值:"
read A B
echo $[$A+$B]
[root@localhost ~]# ./read.sh
请输入两个值:
2 3
5
[root@localhost ~]# ./read.sh
输入两个值2 5
计算结果是:7
[root@localhost ~]# cat read.sh
#!/bin/bash
#
#echo -n "请输入两个值:"
read -p "输入两个值" A B
echo "计算结果是:$[$A+$B]"