grep实例
- 查询/var/log/secure 日志排查是否有非法登录的IP,并按数值倒序统计排序并显示前五个:
grep 'Failed' /var/log/secure|awk '{print $13}'| sort |uniq -c |sort -k1 -nr |head -5
grep 'Failed' /var/log/secure|awk '{print $(NF -3)}' 打印倒数第四列 NF是倒数第三列
- 过滤文件夹里的目录:ls -p 只给目录添加标识符后面加/ ls -F给不同类型的文件加标识符
ll |grep "^d" 或 ls-l |sed -n '/^d/p' 或 ls -l |awk '/^d/'
ls -p |grep "/$" 或者 ls -F |grep "/$"
find ./* -maxdepth 0 -type d
find ./ -maxdepth 1 -type d 会多一个当前目录
ll |awk '{if($2>1) print $0}' 如果没有硬链接的情况下可使用
sed实例
- 取ifconfig eth0本机IP地址:
[root@tang ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:EC:67:23
inet addr:192.168.10.6 Bcast:192.168.10.255 Mask:255.255.255.0
ifconfig eth0|sed -n '2p'|sed 's/.*r://g'|sed 's/ B.*$//g'
ifconfig eth0|sed -n '2s/^.*dr://gp'|sed -n 's/ B.*$//gp'
ifconfig eth0|sed -nr 's/^.*r:(.*) B.*$/\1/gp'
ifconfig eth0 |sed -nr '2s/^.*r://gp'|awk '{print $1}'
ifconfig eth0|sed -n '2p'|cat -A|cut -d ':' -f 2|cut -c 1-13
ifconfig eth0|sed -n '2p'|cut -c 21-33
ifconfig eth0|awk 'NR==2'|cut -c 21-33
- stat /etc/hosts 取出64
File: `/etc/hosts'
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 131101 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
stat /etc/hosts|sed -nr 's/^.*\(0(.*)4\/.*$/\1/gp'
stat /etc/hosts |sed -nr ' s#^.*\(0(.*)4/-.*$#\1#gp'
- cat passwd :调换用户名和用户shell
cat passwd |sed -nr 's/([^:]+)(:.*:)([^:]+)/\3\2\1/gp'
- 改变行尾的日期MM/DD/YYYY 格式为 YYYY-MM-DD
sed 's/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/' time.txt
awk实例
- 取出passwd文件里的用户和用户目录和用户所用的shell:
awk -F ":" 'NR==1 {print $NF,$6,$1}' passwd $NF表示最后一列 $0表示一行
- -rw-r--r-- 1 root root 1991 9月 28 21:11 list.txt中的-rw-r--r--打印为644
ll list.txt |cut -c 2-10|tr 'rwx-' '4210'|awk -F "" '{print $1+$2+$3""$4+$5+$6""$7+$8+$9}'
stat list.txt |sed -nr ' s#^.*\(0(.*)/-.*$#\1#gp'
stat list.txt |sed -nr ' s/^.*\(0(.*)\/-.*$/\1/gp'
stat list.txt |awk -F "[0/]" 'NR==4 {print $2}'
stat -c %a list.txt
查看文件第20-30行内容的N种方法及命令介绍
seq 100 > /tmp/seq.txt
命令介绍:seq 用于产生从某个数到另外一个数之间的所有整数。
seq [选项]… 尾数 (从1到尾数 增量为1)
seq [选项]… 首数 尾数 (从首数到尾数 增量为1)
seq [选项]… 首数 增量 尾数
方法1: (head 和 tail通过管道组合)
# head -30 ett.txt | tail -11
命令解释:head -n 30 xxx.txt == head -30 xxx.txt 取文件前30行内容
tail -11 xxx.txt 取文件后11行内容
| 管道命令连接 将head取出的30行内容作为tail的输入
方法2: awk命令
# awk 'NR==20,NR==30' ett.txt
awk命令中 NR表示行号,直译 取20-30行的内容
awk ‘NR==35’ ett.txt 取第35行内容
方法3:sed命令
# sed -n '20,30p' ett.txt
sed命令 中-n 参数搭配p 一起来使用
1.打印文件的第二行
sed -n ‘2p’ file
2.打印1到3行
sed -n ‘1,3p’ file
3.品配单词用/patten/模式,eg,/Hello/
sed -n ‘/Hello/’p file
4.使用模式和行号进行品配,在第4行查询Hello
sed -n ‘4,/Hello/’ file
5.配原字符(显示原字符$之前,必须使用\屏蔽其特殊含义)
sed -n ‘/$/’p file
上述命令将把file中含有$的行打印出来
6.显示整个文件(只需将范围设置为1到最后于一行)
$代表最后一行
sed -n ‘1,$p’ file
7.任意字符 ,模式/.*/,如/.*ing/匹配任意以ing结尾的单词
sed -n ‘/.*ing/’p file
8.打印首行
sed -n ‘1p’ file
9.打印尾行
sed -n ‘$p’ file
常用文件处理实例
- 查询/var/log/secure 日志排查是否有非法登录的IP,并按数值倒序统计排序并显示前五个:
grep 'Failed' /var/log/secure|awk '{print $13}'| sort |uniq -c |sort -k1 -nr |head -5
grep 'Failed' /var/log/secure|awk '{print $(NF -3)}' 打印倒数第四列 NF是倒数第三列
- 监控系统某一个端口的数据流,须打开防火墙端口。
tcpdump -i eth0 -nn port 514 监控eth0网卡的514端口
firewalld -cmd --permanent --add-port=514/udp
firewalld -cmd --reload
- 找出系统中默认带有SUID的程序
# find /usr/bin /usr/sbin -perm -4000 -ls //包含set uid
- linux删除录下的所有文件仅仅保留一个指定文件
方法一:find
[root@oldboy xx]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
[root@oldboy xx]# find /xx -type f ! -name "file10"|xargs rm -f
[root@oldboy xx]# ls
file10
[root@oldboy xx]# find /xx -type f ! -name "file10" -exec rm -f {} \;
[root@oldboy xx]# ls
file10
方法二:rsync
[root@oldboy xx]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
[root@oldboy xx]# rsync -az --delete --exclude "file10" /null/ /xx/
[root@oldboy xx]# ls
file10
方法三:开启bash的extglob功能(此功能的作用就是用rm !(*jpg)这样的方式来删除不包括号内文件的文件)
[root@oldboy xx]# shopt -s extglob
[root@oldboy xx]# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
[root@oldboy xx]# rm -f !(file10)
[root@oldboy xx]# ls
file10
方法四:
find ./ -type f|grep -v "\boldboy1\b"|xargs rm -f
方法五:
rm -f `ls|grep -v "\boldboy1\b"`
- 过滤文件夹里的目录:ls -p 只给目录添加标识符后面加/ ls -F给不同类型的文件加标识符
ll |grep "^d" 或 ls-l |sed -n '/^d/p' 或 ls -l |awk '/^d/'
ls -p |grep "/$" 或者 ls -F |grep "/$"
find ./* -maxdepth 0 -type d
find ./ -maxdepth 1 -type d 会多一个当前目录
ll |awk '{if($2>1) print $0}' 如果没有硬链接的情况下可使用
- 取出passwd文件里的用户和用户目录和用户所用的shell:
awk -F ":" 'NR==1 {print $NF,$6,$1}' passwd $NF表示最后一列 $0表示一行
- 批量创建指定时间的脚本文件:
for n in `seq 14` ; do date -s "2018/06/$n" ;touch access_www_$(date +%F).log; done
- 查看文件,不显示注释行与空白行:
cat /etc/inittab |awk '{if($0 !~ /^$/ && $0 !~ /^#/) print $0}'
- 显示文件内容行号的N种方法:
cat -n 123.txt
nl 123.txt 不显示空行
grep -n ".*" 123.txt
awk '{print NR,$0}' 123.txt
less -N 123.txt
sed '=' 123.txt |sed 'N;s#\n# #g'
vim 123.txt :set nu