###########Shell##################
diff #比较
常用参数:
-b 不检查空格字符
-B 不检查空行
-c 显示全部内容并且标出不同
-i 检查大小写不同
-q 仅仅显示有无差异,不显示详细信息
-r 比较子目录中的文件
-u 以合并的方式来显示文件内容的不同
vim file1
{
白茶清欢无别事
我的名字
}
vim file2
{
白茶清欢无别事
}
diff file1 file2
diff file2 file1
vim file2
{
白茶清欢无别事
我得名字
}
diff file1 file2
vim file2
{
白茶清欢无别事(空格字符)
我得名字
}
#在比较文件过程中结果读取方式:
a 添加
c 更改
d 删除
diff -b file1 file2 #不检测空格字符
vim file2
{
白茶清欢无别事
我得名字
}
diff -B file1 file2 #不检测空行
diff -c file1 file2 #显示所有内容并,标出不同之处
mkdir westos1 westos2
mkdir /westos1/westos3
diff -r westos1 westos2
diff -u file1 file2
diff -u file1 file2 > file.path
cat file.path
patch -b file1 file.path #加上-b不会删除源文件,并且会生成file1.orig文件
cat file1 file2
########################################
cut #截取
常用参数:
-d 指定分割符
-f 截取的列
-c 截取字符的位置
截取 172.25.254.251
ifconfig eth0
{
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.254.251 netmask 255.255.255.0 broadcast 172.25.254.255
inet6 fe80::5054:ff:fe00:30a prefixlen 64 scopeid 0x20<link>
ether 52:54:00:00:03:0a txqueuelen 1000 (Ethernet)
RX packets 168357 bytes 15229316 (14.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6098 bytes 883367 (862.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
}
ifconfig eth0 | cut -d " " -f 10 | head -n 2 | tail -n 1
ifconfig eth0 | awk ‘/inet>/{print $2}’ #截取ifconfig eth0信息中 172.25.254.251
#################################################
sort #排序
常用参数:
-n 纯数字排序
-r 倒序
-u 去掉重复数字
-o 输出到指定文件中
-t 指定分割符
-k 指定排序的列
cp /etc/*.conf /mnt
ls -l | sort -t " " -k 5 -nr | head -n 5 | cut -c 43-
ls -S | head -n 5 #按第5列排序并且输出最大的文件名称
###################################################
uniq #对重复的字符作相应处理
常用参数:
-u 显示唯一的行
-d 显示重复的行
-c 每行显示一次并统计重复次数
############################
&& 用来执行条件成立执行的命令
|| 用来执行条件成立执行的命令
vim ping.sh
{
#!/bin/bash
ping -c1 -w1 172.25.254.111 &> /dev/null &&{
echo 172.25.254.111 is up
}||{
echo 172.25.254.111 is down
}
}
sh ping.sh 172.25.254.111 #拔掉网线测试
172.25.254.111 is down
sh ping.sh 172.25.254.111
172.25.254.111 is up
############################
tr #大小写转化
###########################
test
test和[]等同 使用[]注意内容前后必须加上空格 [空格 内容 空格]
常用参数:
-z #为空
-n #不为空
-ef #节点号是否相同
-nt #file1是否比file2建立的晚
-ot #file1是否比file2建立的早
-e #文件存在
-f #文件存在并且是正规文件
-L ##软链接 ln -s file westos ll westos
-s ##socket 套接字 yum install -y mariadb-server ll /var/lib/mysql/
-b ##block 块设备 ll /dev/sda
-d ##目录
-c ##字符设备 ls /dev/pts date > /dev/pts/5
= #等于
-lt #小于
-le #小于等于
-ge #大于等于
-gt #大于
a=1;b=2
[ "$a" = "$b" ] && echo yes || echo no
[ "$a" -lt "$b" ] && echo yes || echo no
[ "$a" -le "$b" ] && echo yes || echo no
[ "$a" -ge "$b" ] && echo yes || echo no
[ "$a" -gt "$b" ] && echo yes || echo no
a=2;b=2
[ "$a" -ge "$b" ] && echo yes || echo no
vim test.sh
{
#!/bin/bash
[ “$1” -gt “0” -a “$1” -le “10” ]&& echo yes || echo no #判断一个数是否属于0-10
}
sh test.sh 5
yes
sh test.sh 11
no
#判断/的内存使用率,当超过30%时在/var/log/messages下发出报警
vim mnt.sh
{
#!/bin/bash
[ df / | tail -n 1 | awk '/\/$/{print $5}' | cut -d % -f 1
-ge “30” ]&&{
echo " Waring: System root is full !!" >> /var/log/messages
}
}
sh mnt.sh
#判断文件属性
vim liu.sh
{
#!/bin/base
[ -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 directory
exit
}
[ -b “$1” ] &&{ #判断是否是个块设备
echo $1 is block
exit
}
[ -c “$1” ] &&{ #判断是否是字符设备
echo is acharacter device
exit
}
}
###########################
grep #文本过滤命令
#贪婪模式 把所有东西都会显示
< 防止前面贪婪 > 防止后面贪婪
-E egrep #识别扩展的正则表达式子
-i #忽略大小写
-v #除了
-n #行号
-n2 #显示上两行下两行行号
grep root passwd #显示所有含有root的行
grep -Ei “root” passwd #不区分大小写,显示所有root行
grep -Ei “^root” passwd #显示所有root在前面的行
grep -Ei “root$” passwd #显示所有root在后面的行
grep -Ei “^root|rootKaTeX parse error: Expected 'EOF', got '#' at position 11: " passwd #̲显示所有root在前面和后面的…” passwd -v | grep root #显示root在中间的行
grep -Ei “^root|root$” passwd -n #显示行号
grep ROOT passwd -n2 #显示ROOT行号及其上两行下两
grep ROOT passwd -A1 #显示ROOT行和其下一行
grep ROOT passwd -B1 #显示ROOT行和其上一行
grep xy file #显示所有xy的行
grep x.y file #显示xy中间有一个字符的行
x…y 两个
x…y 三个
grep x*y file #显示字符出现0-任意次
grep -E x?y file #显示字符出现0-1次
grep -E x+y file #显示字符出现1-任意次
grep -E x1y file #显示字符出现1次
grep -E x{3}y file
grep -E “x{3,}y” file #显示字符出现的次数
grep -E “(xy){3,}” file #显示(xy)整体出现的次数
grep -E ^xy file #显示xy在前面的行
grep -E xy$ file #显示xy在后面的行
grep -E “<xy” file #显示xy前面没有信息的行
grep -E “xy>” file #显示xy后面没有信息的行
grep -E “<xy>” file #显示xy的信息
####################################################
sed #行编辑器
#不改变源文件内容,仅仅是操作模式空间的内容
-p #显示
-d #删除
-a #添加
-i #插入
-c
-w
#-p #显示
vim flie
cat flie
sed -n ‘/#/p’ flie #
vim flie
cat flie
sed -n ‘/#/p’ flie
sed -n ‘/#/!p’ flie
sed -n ‘/liu/p’ flie
sed -n ‘2p’ flie
sed -n ‘2,6p’ flie
sed -n ‘2p;6p’ flie
#-d #删除
cat flie
sed ‘/#/d’ flie #删除含有#的行
sed ‘/^#/d’ flie #删除#在前面的行
sed ‘/^#/!d’ flie #不删除#在前面的行
sed ‘1,4d’ flie #删除1-4行
sed ‘1d;4d’ flie #删除1和4行
sed ‘/liu/d’ flie #删除liu行
sed ‘/liu/!d’ flie #不删除liu行
#-a #添加
sed ‘/liu/ahello’ flie #在liu行后加上hello
sed ‘/liu/ahello\nwestos’ flie #在liu行后加上hello并且换行加上westos
#-i #插入
sed ‘/ajdiajdajdlajdlak/ihello’ flie #在次行前加上hello
sed ‘/ajdiajdajdlajdlak/ihello\nwestos’ flie #在次行前加上hello并且换行加上westos
#-c #替换
sed ‘/#/chello everyone’ flie
#-w #写入到其他文件里面
sed ‘/liu/w /mnt/file1’ flie #将liu行写到file1里面
cat file1
sed -n ‘/liu/w /mnt/file2’ flie #显示
cat file2
sed ‘/#/=’ flie #在每行前加上行号
sed ‘/#/=’ flie > file1 #将内容写到file1中
cat file1
sed ‘/#/=’ flie -i #在每行前加上行号,会修改源文件
cat flie
################################
sed的其他用法
cat flie
sed ‘s/#//g’ flie #将全文中的#替换成空格
sed ‘1,5s/#//g’ flie #将1-5行的#替换成空格
sed ‘s///$/g’ flie #将全文的 / 替换成 $ (此处,不能识别/,需要加入 \ 转意字符)
sed ‘s@/@$@g’ flie #@等同于 /
cat flie
sed ‘s/a/L/g’ flie #将全文的a替换成L
sed ‘s/a/L/g;s/j/G/g’ flie #将全文的a替换成L,j替换成G
sed ‘/1/,/5/s/a/L/g’ flie #将1-5行的a替换成L
#############################
N 提前预加在你下一行的内容
cat flie
sed ‘G’ flie #给每一行后都加上空行
sed '$!G' flie #给每一行后都加上空行,最后一行不加
sed '=' flie #给每一行的上一行加上行号
vim flie
cat flie
sed '=' flie | sed 'N;s/\n//g' #给每一行的上一行加上行号后去掉换行的空格键( N 提前预加在你下一行的内容)
sed -n '$p' flie # 显示最后一行内容 等价于 tail -n 1 flie
###############################
awk
cp /etc/passwd passwd
ls
vim passwd
cat -b passwd #查看文件内容并标出行号
awk ‘{print FILENAME}’ passwd #每执行一行输出一次passwd
awk -F : ‘{print NF}’ passwd #输出一共多少列
awk -F : ‘{print NR}’ passwd #输出一共多少行
awk -F : ‘BEGIN{print “NAME”}{print NR}’ passwd #在开始加上NAME
awk -F: ‘BEGIN{print “NAME”}{print NR}END{print “END”}’ passwd #在末尾加上END
awk -F : ‘BEGIN{print “NAME”}{print $1}END{print “END”}’ passwd #输出第一列内容
awk -F : ‘BEGIN{print “NAME”}{print $1,$7}END{print “END”}’ passwd #输出第一列和第七列
awk -F : ‘BEGIN{print “NAME”}{print $0}END{print “END”}’ passwd #输出全部信息
awk -F : ‘BEGIN{print “NAME”}{print $1=""}END{print “END”}’ passwd #输出第一列信息为空
awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print “END”}’ passwd #输出全部信息除了第一列
awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print “END”}’ passwd | sed ‘s/ /:/g’ #输出全部信息除了第一列,加上特定字符
##########################################################################
awk '/bash$/{print}' passwd #输出结尾是bash的信息
awk '!/bash$/{print}' passwd #输出结尾不是bash的信息
awk '!/bash$/&&!/nologin/{print}' passwd #输出结尾不是bash和nologin的信息
awk '/bash$/||/nologin/{print}' passwd #输出结尾是bash和nologin的信息
awk -F : '/bash$/{print $1}' /etc/passwd #输出结尾是bash的第一列信息
awk -F : '/bash$/||/sh$/{print $1}' /etc/passwd #输出结尾是bash和sh的第一列信息
cat /etc/shells
awk -F : '/bash$/||/sh$/||/csh$/{print $1}' /etc/passwd
awk -F : '/bash$/||/sh$/||/csh$/||/tcsh$/{print $1}' /etc/passwd
awk 'BEGIN{n=0}/bash$/{n++}END{print n}' /etc/passwd #输出结尾是bash的信息的总数和
awk '/^[a-c]/{print}' passwd #输出以a-c开头的信息
awk -F : '$6~/bin/{print}' passwd #输出第6列含有bin的信息
awk -F : '$6~/\<bin/{print}' passwd #输出第6列是bin的信息
awk -F : '$6!~/\<bin/{print}' passwd #输出第6列不是bin的信息
awk -F : 'BEGIN{n=0}/bash$/{n++}END{print n}' /etc/passwd #输出结尾是bash的信息的总数和
awk -F : 'BEGIN{n=0}/bash$/&&$6!~/^\(转意字符)/home/{n++}END{print n}' /etc/passwd #输出结尾是bash并且第6列不是/home的信息的总数和
awk -F : 'BEGIN{n=0}/bash$/&&$6!~/^\/home/{print;n++}END{print n}' /etc/passwd #输出结尾是bash并且第6列不是/home的信息及总数和
ifconfig eth0 | awk '/inet\>/{print $2}' #截取ifconfig eth0信息中 172.25.254.251