0527 第九节课
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0527 第九节课相关的知识,希望对你有一定的参考价值。
一.文件的打包和压缩
1.compress/uncompress
compress [options] file *.Z
-d:解压缩,等同于uncompress
-c:输出到屏幕
-r:压缩目录
zcat file.Z > file
2.gzip/gunzip
gzip [options] file *.gz
-c:输出到屏幕
-d:解压缩
-k:保留源文件
-#:确定压缩比,1-9,1是最差9是最好,默认是6
gzcat:不解压预览压缩文件内容
gzip可以解压Z压缩文件
3.bzip2
bzip2 [options] file *.bz2
-c:输出到屏幕
-d:解压缩
-k:保留源文件
-#:压缩比,同gz
bzcat:同gzcat
4.xzip
xzip [options] file *.xz
-c
-d
-k
-#:同上
xzcat:同上
应为是最新的压缩解压缩程序,所有压缩后的大小是最小的
5.zip
zip[options] file压缩后name file
-r:压缩目录
支持重定向,支持管道
cat /PATH/TO/FILE | zip name - | cat /PATH/TO/FILE
-的意思是指代前边的内容
unzip file 解压缩
以上集中压缩程序,最多的是gz,用的最多的是bzip2,最新的是xzip,compress基本上已经不适用,即便有,也可以用其他几个解压缩
二.打包压缩文件
1.tar:打包压缩程序,重点程序
tar [options] file/dir
有种多选项和众多共用,但基本上适用来打包压缩解压缩的,因为以上的压缩程序默认都不支持目录
所以需要用tar程序将众多文件打包成一个大文件在进行压缩
主要记住以下用法
tar -cvf files/dir :文件打包
tar -gcvf :打包压缩成gz格式
tar -jcvf :打包压缩成bz2格式
tar -Jcvf :打包压缩成xz格式
tar -tvf :预览压缩文件内容
tar -xvf :解压缩 后面加-C指定解压地点
tar -zpvf :备份
有的时候一个压缩文件,我们只需要其中的一部分,tar也可以完成
首先,查看文件内容,搜索自己需要的文件,支持管道
tar -tvf file | grep ”xxx”
找出文件名后
tar -xvf file 目标file
2.cpio程序:同样是打包压缩程序,cpio支持重定向,并且同样支持只解压部分文件
cpio xxxx > 设备或文件
cpio xxxx < 设备或文件
基本上用法如下
cpio -iov file > 设备或文件 备份文件
-iv/idv 解压文件
-tv 预览文件
主要就是支持重定向
二.状态回执
echo $? 每执行一个命令都会有一个状态回执,来表示上一个命令是否执行成功
回执的数值有2中情况
0 :上一条命令执行成功
1-255 :上条命令执行不成功
很多时候,我们并不关心命令本身的执行结果,只是想知道命令是不是成功的
执行了,这个时候就可以使用重定向将结果输出到/dev/null然后查看变量$?
的回执的数值来看是不是成功执行,并以此来做出判断,脚本中常用
自定义回执数值
exit # 在脚本中的时候,经常用到这些来决定下一步的走向,而且这个数值也是可以自定义的,
在exit后边加上一个数字,那么那个数字将会成为成功回执的数值
三.条件判断(单项)
ture:0
false:1
判断格式
test 表达式
[ 表达式 ] 两头空格
[[ 表达式 ]] 两头空格
1.数值判断 判断两边的数值的大小关系
-eq:两边的数值相等
-ne:两边的数值不等
-lt:左边小于右边
-le:左边小于等于右边
-gt:左边大与右边
-ge:左边大与等于右边
2.字符串判断 判断字符串的关系
[ n “变量” ] :判断变量是不是空的,是空的为真
[ z “变量” ] :判断变量是不是非空的,是非空的为真
==:判断两边的字符串是不是想等
!=:判断两边的字符串是不是不相等
<:判断左边的字符串的ascii码的是不是小于右边,小于为真
>:判断左边的字符串的ascii码的是不是大于右边,大于为真
~=:判断左边的字符串是不是能被右边的pattern匹配到
3.文件类型,存在判断
-a/-e:判断文件是不是存在,存在为真
-[fdbclpS] :判断文件是不是什么类型,是为真
4.权限判断
-r:判断文件是不是有读权限,有为真
-w: 写
-x: 执行
5.特殊权限判断
-u:判断文件是不是有suid的特殊权限,有为真
-g:判断文件或目录是不是有sgid的特殊权限
-k:判断目录是不是有sickty的特殊权限
6.属主属组判断
-N:判断文件在上一次读取过后有没有做过修改,有为真
-O:判断当前用户是不是文件的属主,是为真
-G:判断当前用户的用户组是不是文件的属组
7.文件时间判断
-ef:判断左右两个文件是否是同一个文件,即相同分区的相同节点的文件
-ot:判断左边文件的时间是不是右边文件早,修改时间mtime
-nt:判断左边文件的时间是不是比右边的晚,修改时间mtime
四.条件判断(复数向)
1.&&与 ||或 !非
格式 command1 && command2
command1 || command2
!command
关于&& || !加上异或^的关系前边提到过
&&:
1&&1 真
1&&0 假
0&&1 假
0&&0 假 可以看出,当前边的命令是假的时候,后边的命令并不需要运行,因为结果一定是假的,所以后边的命令
的运行条件是,保证前边的命令是真的
||:
1||1 真
1||0 真
0||1 真
0||0 假 可以看出,当前边的命令是假的时候,想要得知最后的结果是不是真的,需要需要运行后边的命令,但前
边的命令如果是真的,则不需要运行后边的命令,所以后边命令想要运行,必须的保证前边的而命令是假
以上两个关系经常用在命令或者脚本真来判断执行那个后续命令,例如下边的脚本
#!/bin/bash
#author
#version
#description
[ -e /etc/nologin ] && rm -f /etc/nologin || touch /etc/nologin
上述脚本的内容意思是
[ -e /etc/nologin ]查看/etc/nologin这个文件是不是存在
&& rm -f /etc/nologin 如果,存在,即前边的[ -e /etc/nologin ] 为真,那么必须运行&&后边的命令删去nologin
如果,不存在,就是前边的[ -e /etc/nologin ]为假,那么后边的rm命令就不会运行
|| touch /etc/nologin 如果nologin存在,那就是说[ -e /etc/nologin ]为真,就会运行rm,那么||前边的命令为真,
touch命令不管真假,最后都会是真,所以touch命令没必要也不会运行
如果nologin不存在,[ -e /etc/nologin ]为假,那么rm就不会运行,那么,||前边的所有都为假
那么久需要运行touch命令来创建一个nologin
!:就是非的意思
异或:异或的符号是^,意思是^两边的内容命令都是真的的时候,那么最终的结果会是假的,当两边的内容有一个为假,那么最后
的结果就是真的,就说要要求两边不相同就行
例如 [ -w file2 ] && [ -r file2 ] file2具有读且写权限,都有为真,有一个没有为假
[ -w file2 ] || [ -r file2 ] file2具有读或写权限,都没有为假,其余为真
[ !-r file2 ] file2不具有读权限,有为假,没有为真
2. -a -o !
这几个字符在find命令中提到过,用法也基本等同,-a是且的意思,-o是或的意思,!是非的意思(!表达非的意思的地方到现在为止学了很多,但是
只有在sed命令中,!才写在地址的后边来表示非的意思,其余的都写在了前边)
格式 [ 表达式 -a 表达式 ]
[ 表达式 -o 表达式 ]
! [ 表达式 -a/-o 表达式 ] 注意几乎所有的地方都有一个空格
意思大致上没有什么变化,只是将两个[]部分写成了一个,!也放在了[]外边,值得注意的是!对于[]内的-a和-o的影响
要考虑摩根定律
五.尚未讲完rpm
rpm简单理解成安装程序的安装包的程序就行,类似window上少了下载功能的一种软件管家
基本上记住以下用法就成
rpm -ivh
i:是互动模式
v:是verbose,显示具体过程
h:是用#号来制作显示一个进度条
这样的###########################################>100%
剩下的和yum写在一起
六.read命令
read命令是用来批量给变量赋值的
当输入read xx1 xx2 xx3后会进入交互模式
----------屏幕上显示这玩意让你输入内容,输入的内容会对应的成XX的变量内容,回车结束,多个变量空格隔开
但是有一个问题就是,read在批量给变量赋值时多个变量内容使用空格隔开的,因此很容易读取错误,例如
read xx1 xx2 xx3 xx4
a b c d f
echo $xx1
a
echo $xx2
b
echo $xx3
c
echo $xx4
d f
会默认的将剩下的内容赋值到最后一个变量中,所以,必须要对应一个变量一个内容,不能多
-p “内容” :显示制定要出现的提示
-t:给一个截止时间,多长时间不输入就取消赋值,默认是秒为单位。。似乎也不能改单位。。
本文出自 “博客作业初版” 博客,谢绝转载!
以上是关于0527 第九节课的主要内容,如果未能解决你的问题,请参考以下文章