一、diff命令
1、概念知识
diff用来比较两个文件。diff分析两个文件,并输出两个文件的不同的行。diff的输出结果表明需要对一个文件做怎样的操作之后才能与第二个文件相匹配。diff并不会改变文件的内容,但是diff可以输出一个ed脚本来应用这些改变。
2、diff中常用参数
-b或–ignore-space-change | 不检查空格字符 |
---|---|
-B或–ignore-blank-lines | 不检查空白行 |
-c | 显示内容全部,并标出不同之处 |
-i或 --ignore-case | 不检查大小写的不同 |
-p | 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称 |
-q或–brief | 仅显示有无差异,不显示详细信息 |
-r或 --recursive | 比较子目录中的文件 |
-u | 以合并的方式来显示文件内容的不同 |
3、diff在比较文件过程中结果读取方式
[num1,num2][a|c|d][num3,num4]
num1,num2表示在第一个文件中的行数
a 表示添加 --add
c表示更改 --change
d表示删除 --delete
< 第一个文件中需要修改行的内容
> 第二个文件中需要修改行的内容
num3,num4表示在第二个文件中的行数
例:2,4c2,4表示改变第一个文件中的第二行和第四行才能匹配第二个文件中的第二行和第四行
4、diff命令的使用
【1】
vim ly1
hello ly
vim ly2
hello ly haha
diff ly1 ly2 #显示要更改添加的内容
【2】
diff -c ly1 ly2 #比较两个文件中全部内容,标出不同行
【3】
vim ly2
hello ly
Hi
vim ly1
hello ly
hi
diff -c ly1 ly2 #显示所有内容,标出不同行
diff -ci ly1 ly2 #忽略大小写
【4】
diff -cb ly1 ly2 #对比全文内容忽略空格,显示所有内容,标出不同行
【5】
diff -q ly1 ly2 #对比两个文件内容,仅显示不同,不显示具体内容
mkdir text1 text2
diff -r /mnt/text1 /mnt/text2 #比较子目录文件
【6】
diff -u ly1 ly2 > ly.path #以合并的方式来显示文件内容的不同,将内容导入ly.path文件
cat text.path
去掉第二个文件空格后在执行一次:
二、patch命令
用于文件不同时打布丁,进行修改
patch[options]file.old file.path
yum install patch -y
patch --help
patch -b file.path file
三、cut命令
多用与字符截取
cut -d 指定分隔符
cut -f 1,7|1-7 指定截取的列,两个分隔符之间算一列 172.25.254.119:ly: 指分隔符为 :的两列内容
cut -c 1,4|1-4 指定截取的字符位置
例:使用cut命令截取eth0查询到的IP
ifconfig eth0 | cut -c 14-27|head -n 2| tail -n
ifconfig eth0 | cut -f 10 -d " " |head -n 2 | tail -n 1 #" "表示空格
四、sort命令
多用于字符排列
sort -n | 纯数字排序 |
---|---|
sort -r | 倒叙 |
sort -u | 去掉重复数字 |
sort -o | 输出到指定文件中 |
sort -t | 指定分隔符 |
sort -k | 指定要排序的列 |
五、uniq命令
对重复字符做出相应的处理
uniq -u | 显示唯一的行 |
---|---|
uniq -d | 显示重复的行 |
uniq -c | 每行显示一次并统计重复行数 |
awk 报告生成器,抓取
awk ‘{print $5}’ #抓取第五个字符串
例:统计/etc/*.conf文件中最小的前五个文件名称
ll /etc/*.conf |cut -c 26-70 |sort -nr -t " " -k 1|cut -c 18-60| head -n 5 #查看/etc所有.conf结尾的文件属性,截取第26-70列,将里边的第一列纯数字列倒叙排序,分隔符为空格,截取第18到60列,将前五行展示出来
ls -l /etc/*.conf | sort -t " " -k 5 -nr | head -n 5 | cut -c 43-
ls -S /etc/*.conf | head -n 5 #-S将文件由大到小排列查看
六、test命令
1、test比较命令
-eq | 等于 |
---|---|
-ne | 不等于 |
-le | 小于等于 |
-lt | 小于 |
-ge | 大与等于 |
-gt | 大于 |
-a | 两条件都要满足 |
-o | 两条件最少满足一个 |
-z | 为空 |
-n | 不为空 |
-ef | 判断节点区是否一致 #ls -i 查看节点号,节点号一致节点区不一致 |
-nt | A比B建立时间晚 |
-ot | A比B建立时间早 |
[ "$A" -ge "$B" ] #变量A的值等于B
[ "$A" -gt "$B" ]
[ "$A" -ne "$B" -a "$A" -gt "$B" ]
[ "$A" -ne "$B" -o "$A" -gt "$B" ]
[ -z "$A" ]
[ -n "$A" ]
[ "file1" -ef "file2" ]
[ "file1" -nt "file2" ]
测试:
[ "ping.sh" -ef "check_file.sh" ] && echo yes || echo no
ls -i
例:监控挂载在根的使用大小,超过30%发出报警命令
vim /mnt/check_root.sh
#!/bin/bash
[`df / | tail -n 1 | awk '{print $5}' | cut -d % -f 1` -ge "30" ]&&{
echo "`date +%b\ %d\ %T` Waring: System root is full !!" >> /var/log/messages
}
at now+1min <<EOF #定时任务
/mnt/check_root.sh #执行脚本内容
EOF
chmod +x /mnt/check_root.sh #给文件加执行权限
sh -x /mnt/check_root.sh #检查执行
cat /var/log/messages
或:
vim /mnt/check_root.sh
#!/bin/bash
[`df / | tail -n 1 | awk '{print $5}' | cut -d % -f 1` -ge "30" ]&&{
logger Waring: System root is full !! #日志编写语句
}
at now+1min <<EOF
/mnt/check_root.sh
EOF
2、test判断命令
-e | 存在 |
---|---|
-f | 文件 |
-L | 软链接(快捷方式) |
-S | 套接字 |
-b | 块设备(硬盘/dev/vdb,u盘) |
-d | 目录设备 |
-c | 字符设备 |
生成/mnt/westos的软链接/mnt/test
ln -s /mnt/westos /mnt/test
例:写脚本检测文件、目录或其他类型
vim /mnt/check_file.sh
[ -z "$1" ] &&{
echo please input filename following scripts!!
exit
}
[ -e "$1" ] ||{
echo $1 is not exit
exit
}
[ -L "$1" ] && {
echo $1 is softlink file
exit
}
[ -f "$1" ] && {
echo $1 is common file
exit
}
[ -d "$1" ] && {
echo $1 is a directory
exit
}
[ -b "$1" ] && {
echo $1 is a block
exit
}
[ -c "$1" ] && {
echo $1 is acharacter device
exit
}
测试:
3、tr大小写转换命令
echo hello HELLO
echo hello HELLO | tr 'a-z' 'A-Z'
echo hello HELLO | tr 'A-Z' 'a-z'
4、&&(表示true条件为真)命令和||(表示false条件为假)命令
&&命令:用来执行条件成立后执行的命令
||命令: 用来执行条件不成立后执行的命令