diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上对比上,能够借由 diff 创建的分析档,以处理补丁(patch)功能的文件。
diff [options] target1 target2
diff file1 file2
diff direcory1 directory2
diff 在比较文件过程中结果读取方式
[num1 , num2][a|c|d][num3,num4]
num1,num2 表示在第一个文件中的行数
a 表示添加 ----add
c 表示更改 ----change
d 表示删除 ----delete
< 表示第一个文件中的内容, > 表示第二个文件中的内容, --- 分割线
num3,num4 表示在第二个文件中的行数
2,4c2,4 表示改变第一个文件中的第二行和第四行才能匹配第二个文件中
的第二行和第四行
Only in directroy/: filename
directory 表示在那个目录中
filename 表示在这个目录
diff 中常用的参数
可用man diff查询具体用法
-b 或 --ignore-space-change 不检查空格字符的不同
-B 或 --ignore-blank-lines 不检查空白行
-c 显示全部内文,并标出不同之处
-i 或 --ignore-case 不检查大小写的不同
-p :若比较的文件为 C 语言的程序码文件时,显示差异所在的
函数名称;
-q 或 --brief :仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同pacth
-b 不检查空格字符的不同
test与test不同之处在于多了空格,使用-b则发现没有不同。
-B 不检查空白行
-c 显示全部内文,并标出不同之处
-i 不检查大小写的不同
-q 仅显示有无差异,不显示详细的信息
-r 或 --recursive :比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
patch 命令读取如何更改文件的源文件指示信息,然后应用这些更改。源文件包含由 diff 命令产生的差别列表(或者 diff 列表)。差异列表是比较两个文件和构建关于如何纠正差别的指示信息的结果。缺省情况下,patch 命令使用从标准输入读入的源文件,但是使用 -i 标志和 PatchFile 变量可以覆盖此设置。
-b或–backup 备份每一个原始文件。在修补文件时,重命名或复制原始文件,而不是删除它
-p 后面可以接“取消几层目录”的意思。
-R :代表还原,将新的文件还原成原来旧的版本
patch [options] file.old file.path
首先要安装patch服务
yum install patch -y
diff -u test test1 > test.patch ##以合并方式生成文件内容不同并导入test.patch
patch test test.patch ##给test打补丁
cut 命令多用与字符截取
cut -d | 指定分隔符 |
---|---|
cut -f | 指定截取的列 |
cut -c | 指定截取的字符位置 |
以:为分隔符截取文件passwd第一列
以:为分隔符截取文件passwd第一,三列
截取passwd文件位置第二个字符
截取passwd文件位置第二,三字符
截取passwd文件位置第二到四中的所有字符
多用于字符排序
sort -n | 纯数字排序 |
---|---|
sort -r | 倒序 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
创建文件file写入数字
sort -n纯数字排列
sort -nr file 纯数字倒序排列
sort -nu file去掉重复数字纯数字排列
sort -nu file -o westos 将上一个排列好的文件导入westos
vim file 创建新的file
以:为分隔符并以第二列按纯数字排列
对重复字符做相应的处理
uniq -u | 显示唯一的行 |
---|---|
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复次数 |
last -i | grep 0.0.0.0 -v | cut -d " " -f 14 | uniq -c | sort -nr | head -n 1
含义:显示ip,过滤0.0.0.0的行,取第14个字符开始的ip列,统计每个ip出现的次数,反向排序,取最高的值也就是第一行
或者
last -i | grep -E "0.0.0.0|wtmp " -v | awk '{print $3}' | uniq -c |sort -nr | head -n 1
&& 用来执行条件成立后执行的命令
|| 用来执行条件不成立后执行的命令
测试:
编写一个脚本,测试网络的通畅
-w wait 等待时间 不通的话时间会很长
-c count 次数
-e 颜色的设定
0m 关掉颜色的设定属性
tr,translate的简写,意思是转化,转变,转换。用来从标准输入中通过替换或删除操作进行字符转换。
编写脚本将小写转化成大写
vim upper.sh
#!/bin/bash
echo $1 | tr 'a-z' 'A-Z'
功能:检查文件类型和比较值。
lt 小于,le小于等于,ge 大于等于,gt 大于
在shell中,test命令 = [ ],=和==效果一样。
a=1
b=1 ##先赋值
test "$a" = "$b" && echo yes || echo no ##判断a=b
[ "$a" = "$b" ] && echo yes || echo no ##判断a=b
[ ! "$a" = "$b" ] && echo yes || echo no ##判断a=b不成立是真还是假
[ "$a" != "$b" ] && echo yes || echo no ##判断a不等于b
[ "$a" -eq "$b" ] && echo yes || echo no ##相等
[ "$a" -ne "$b" ] && echo yes || echo no ##不相等
[ "$a" -lt "$b" ] && echo yes || echo no ##小于
[ "$a" -le "$b" ] && echo yes || echo no ##小于等于
[ "$a" -gt "$b" ] && echo yes || echo no ##大于
[ "$a" -ge "$b" ] && echo yes || echo no ##小于等于
[ "$a" -lt "1" -a "$b" -gt "5" ] && echo yes || echo no ##a小于1,且b大于5,两个都成立才输出yes
[ "$a" -lt "1" -o "$b" -gt "5" ] && echo yes || echo no ##a小于1或b大于5,有一个成立则输出yes
测试:
要求:当根分区使用量大于80%报警,并监控脚本执行情况将结果输出到日志文件/var/log/messages中。
vim checkstorage.sh
#!/bin/bash
[ "`df -h / | tail -n 1 | cut -d " " -f 15 | cut -d "%" -f 1 `" -ge "30" ] && { ##为了实验效果明显写的30
echo "Warning: /is full!" >> /var/log/messages
}
at now+1min <<-EOF 设置定时任务
checkstorage.sh
EOF
chmod +x checkstorage.sh 给脚本添加执行权限
ls -l checkstorage.sh
at -l 查看定时任务列表
at -c +num 查看任务内容