目录
Toggle面试题注意事项:尤其三剑客和脚本的题,尽量用多种方法回答
find/grep案例
1.找出/etc中以.conf结尾大于10kb修改时间是7天前的文件
find /etc -type f -name ‘*.conf’ -size +10k -mtime +7
2.查找文件时指定最多找多少层目录: -maxdepth 指定最大深度,不加就是所有层
find / -maxdepth 2 -type f -name ‘*.conf’
3.查找时不区分大小写
find / -type f -iname ‘*.conf’
4.排除 /etc/ssh/sshd_config文件中的空行,排除以#开头的行(可以使用管道)
grep -v ‘^$’ /etc/ssh/sshd_config | grep -nv ‘^#’
egrep -v ‘^$|^#’ /etc/ssh/sshd_config
grep -v ‘^[a-Z]’ /etc/ssh/sshd_config
sed -r ‘/^$|^#/d’
sed -nr ‘/^$|^#/!p’ 慎用!表示取反
egrep -n ‘^[a-Z]+’ /etc/ssh/sshd_config #显示以1个或1个以上字母开头的行(不包括空行#行)
5.统计re.txt中字母组成的单词的出现次数
egrep -o ‘[a-z]+’ re.txt | sort | uniq -c | sort -rn
sort排序,uniq -c统计出现次数 sort -rn -r逆序(从大到小排序)-n根据uniq统计的数值大小,'[a-z]+’匹配任意长度的由这些字符组成的字符串
6.在/etc/services 过滤出包含ssh或httph或smtp的行
egrep ‘ssh|httph|smtp’ /etc/services
7.匹配身份证的正则(粗略匹配)
规律;18位,由数字和X组成,X在最后一位
egrep ‘[0-9]{17}[0-9X]$’ id.txt
sed案例
1.取出/etc/passwd的第三行
sed -n ‘3p’ /etc/passwd
取出2-5行 sed -n ‘2,5p’ /etc/passwd(用的不多)
取出第3行和第5行 sed -n ‘3p;5p’ /etc/passwd
2.过滤出/etc/passwd中包含root的行
grep ‘root’ /etc/passwd
sed -n ‘/root/p’ /etc/passwd
3.获取十点到十一点每秒级的日志
sed -n ‘/10:00:00/ , /11:00:00/p’ sed.txt
4.表示有规律的查找 seq 10 | sed -n ‘1-2p’ #从第一行开始每次加2(结果13579五行,每行一个)
5.把文件里的lidao修改成oldboy(修改文件内容),不加-i表示只修改输出
sed -i ‘s#lidao#oldboy#g’ sed.txt
6.输出1<234567>8(对于12345678这一行进行处理)
echo ‘12345678’ | sed ‘s#(1)(.*)(8)#\1#g’ #加上-r 即可使用()
7.调换/etc/passwd 第一列和最后一列内容
sed -r ‘s#^(.*)(:x.*:)(.*)$#\3\2\1#g’ /etc/passwd
sed -r ‘s#^([a-zA-Z0-9_-]+)(:.*:)(.*)$#\3\2\1#g’ /etc/passwd
8.取出网卡ip地址 ip address show eth0 取出第五行里的ip地址
ip a s eth0 | sed -n ‘5p’ | sed -r ‘s#^.*inet (.*)/.*$#\1#g’
9.取出stat /etc/hosts 中的0644或644
stat /etc/hosts | sed -n ‘4p’ | sed -r ‘s#^[a-zA-Z: ]+\(([0-9]+)/.*$#\1#g’
sed -r ‘s#^.*\(([0-9]+)/.*$#\1#g’
0644
sed -r ‘s#^[a-zA-Z: ]+\(0([0-9]+)/.*$#\1#g’
644
awk案例
1.取出/etc/passwd的第一行
awk ‘NR==1{print $0}’ /etc/passwd
#{print $0}输出整行内容,单独取行的时候可以省略,$0表示当前行的内容
2.取出/etc/passwd的2-5行
awk ‘NR>=2 && NR<=5’ /etc/passwd
3.过滤出/etc/passwd中包含root或nobody的行
awk ‘/root|nobody/’ /etc/passwd
4.从包含root的行到包含nobody的行
awk ‘/root/,/nobody/’ /etc/passwd
5.取出/etc/passwd的第1,3,最后一列
awk -F: ‘{print $1,$3,$NF}’ /etc/passwd | column -t
6.指定复杂分隔符取出IP地址 提示:inet 前有4个空格(经典功能:利用正则指定多个分隔符)
ip a s eth0 | awk ‘NR==3’ | awk ‘{print $2}’ | awk -F/ ‘{print $1}’
ip a s eth0 | awk -F ‘[ /]+’ ‘NR==5{print $3}’
7.如果系统swap使用超过0,则输出“异常系统开始使用swap”
条件:1.过滤出swap(第三行)2.第三列大于0
free | awk ‘NR==3 && $3>0{print “”}’
或用/swap/过滤出swap的行替换NR==3
8.过滤出/etc/passwd第4列的数字是以0或1开头的行,输出第1列,第3列,第4列
awk -F: ‘$4~/^[01]/’ /etc/passwd #表示找出符合条件的行
awk -F: ‘$4~/^[01]/{print $1,$3}’ /etc/passwd
9.统计/etc/passwd一共有多少行
awk ‘{i=i+1} END {print i}’ /etc/passwd
累加
10.seq 10 > num.txt 计算这一列数字和
awk ‘{i=i+$1} END {print i}’
时间怎么还是12.30