1.diff
用法;
diff xxx yyy
输出信息:
[num1,num2][a|c|d][num3.num4]
num1,num2 #第一个文件的行
a #添加
c #更改
d #删除
< #第一个文件中的内容
> #第二个文件中的内容
num3,num4 #第二个文件中的行
常用参数:
-b #忽略空格
-B #忽略空行
-i #忽略大小写
-c #显示文件所有内容并标示不同
-r #对比目录
-u #合并输出
2.patch
patch 原文件 补丁文件
-b #备份原文件
测试:
diff -u westos westos1 > westos.path
patch -b westos westos.path
diff westos westos1
3.cut
-d : #指定:为分割符
-f #指定显示的列
5 第五列
3,5 3和5列
3-5 3到5列
5- 第五列以后
-5 到第五列
-c #指定截取的字符(数字用法同-f)
测试:
cp /etc/passwd .
cut -d : -f 1 passwd
cut -d : -f 1,4 passwd
cut -d : -f 1-4 passwd
cut -d : -f -4 passwd
cut -d : -f 4- passwd
cut -c 1-4 passwd
练习筛选出不能登陆的用户名:
grep bash -v /etc/passwd | cut -d : -f 1
4.sort
-n #纯数字排序
-r #倒叙
-u #去掉重复
-o #输出到指定文件
-t #指定分割符
-k #指定排序的列
练习:
vim rrr
cat rrr
sort -n rrr
sort -nr rrr
sort -t : -k 2 rrr
sort -n -t : -k 2 rrr
5.uniq
-c #合并重复并统计重复个数
-d #显示重复的行
-u #显示唯一的行
练习:找到重复最多的数并显示
sort -n rrr | uniq -c | tail -n 1 | cut -d " " -f 8
习题:
1.显示出网卡ip
ifconfig ens3 | head -n 2 | tail -n 1 | cut -d " " -f 10
2.找出能登陆的系统用户中UID最大的用户,并显示其名称
grep bash /etc/passwd | sort -n -t : -k 3 | tail -n 1 | cut -d : -f -1
3.当前主机为web服务器,请抓取访问web服务器次数排在前5的ip地址
cut -d " " -f 1 /etc/httpd/logs/access_log | sort -n |uniq -c | sort -nr | head -n 5| sed 's/^ *//g'| cut -d " " -f 2
6.tr
tr " " ‘1’ #空格转1
tr ‘a-z’ ‘A-Z’ #小写转大写
tr ‘A-Z’ ‘a-z’ #大写转小写
7.test
a=1
b=2
test "$a" = "$b" && echo yes || echo no
[ "$a" != "$b" ] && echo yes || echo no
[ "$a" -eq "$b" ] && echo yes || echo no
[ "$a" -ne "$b" ] && echo yes || echo no
[ "$a" -le "$b" ] && echo yes || echo no
[ "$a" -ge "$b" ] && echo yes || echo no
[ "$a" -lt "$b" ] && echo yes || echo no
[ "$a" -gt "$b" ] && echo yes || echo no
[ "$a" -gt "0" -a "$a" -lt "10" ] && echo yes || echo no
[ "$a" -le "0" -o "$a" -ge "10" ] && echo yes || echo no
[ "$a" -le "0" ] || [ "$a" -ge "10" ] && echo yes || echo no
[ "$a" -gt "0" ] && [ "$a" -lt "10" ] && echo yes || echo no
test对空的判定
[ -z "$a" ] && echo yes || echo no
[ -z "$c" ] && echo yes || echo no
[ -n "$c" ] && echo yes || echo no
[ -n "$a" ] && echo yes || echo no
test对于文件的判定
touch aaa
touch bbb
[ "/mnt/aaa" -ef "/mnt/bbb" ] && echo yes || echo no
ls -i
ln /mnt/aaa /mnt/ccc
ls -i
[ "/mnt/aaa" -ef "/mnt/ccc" ] && echo yes || echo no
[ "/mnt/aaa" -nt "/mnt/bbb" ] && echo yes || echo no
touch ddd
[ "/mnt/aaa" -nt "/mnt/ddd" ] && echo yes || echo no
ll
[ "/mnt/ddd" -nt "/mnt/aaa" ] && echo yes || echo no
[ -L "/mnt/ccc" ] && echo yes || echo no
ln -s /mnt/aaa eee
[ -L "/mnt/eee" ] && echo yes || echo no
[ -d "/mnt" ] && echo yes || echo no
[ -S "/mnt/aaa" ] && echo yes || echo no
[ -e "/mnt/aaa" ] && echo yes || echo no
[ -b "/dev/vda" ] && echo yes || echo no
[ -b "/dev/sda" ] && echo yes || echo no
[ -c "/dev/pts/0" ] && echo yes || echo no
测试
#!/bin/bash
[ -z "$1" ] && {
echo "未指定检测文件,请指定"
exit
}
[ -e "$1" ] || {
echo "此文件不存在"
exit
}
TYPE=$(ls -l $1 | cut -c 1)
[ "$TYPE" = "l" ] && echo $1 is link file
[ "$TYPE" = "-" ] && echo $1 is common file
[ "$TYPE" = "s" ] && echo $1 is socket
[ "$TYPE" = "c" ] && echo $1 is char
[ "$TYPE" = "b" ] && echo $1 is block
编写脚本判断用户类型