
文本处理工具
- grep 查找文本里符合条件的字符串
- cat a.py | grep "ipdb"查找指定内容
- grep -n显示行号
- grep -v反向查找,查找所有不包含指定内容的字符串
- grep -E将样式为延伸的正则表达式来使用
- grep --color显示颜色
 
- head tail 显示文件的开头/结尾
- head a.txt显示文件的开头几行
- head -n 5显示前5行
- tail a.txt显示文件的最后几行
- tail -n +2显示从第2行一直到末尾(也就是只有第一行不显示)
 
- split 将一个文件分割成多个
- split -b 10G a.zip将a.zip每10G切割成一个文件
 
- cat 连接文件,可用于显示文件内容
- cat a.txt显示文件内容
- cat -n显示行号
- cat a_1.zip a_2.zip a_3.zip > a.zip将多个文件连接为一个文件(通常是split分割的文件)
 
- wc 统计行数或字数
- wc -l统计行数
- wc -w统计单词数
- wc -m统计字符数
 
- awk 通常用于将字符串按照空格分开
- awk '{ print $1}'用于输出按空格分开后的第一个字符串,$0为整行
- docker ps -a | awk '{ print $1}'用于输出所有docker容器的id
 
- sort 对文本内容排序
- sort -r反向(降序) 排序
 
- uniq 对文本内容中重复的只保留一个
shell编程
- 
变量 - a=1变量赋值
- b='hello'字符串赋值
- echo $a打印变量
- echo "I am good at ${b}Script"打印变量
 
● 传递参数
| 1 2 3 4 5 6 | #! a.sh echo "执行的文件名:$0"; echo "第一个参数为:$1"; echo "第二个参数为:$2"; echo "第三个参数为:$3"; | 
- 
if语句 - 单行if语句 if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi[ ] 内表示算数运算
 
- 单行if语句 
● 块if语句
| 1 2 3 4 5 6 7 8 9 | num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] then     echo '两个数字相等!' else     echo '两个数字不相等!' fi | 
● while语句
● 循环次数控制
| 1 2 3 4 5 6 7 8 | #!/bin/bash int=1 while(( $int<=5 )) do     echo $int     let "int++" done | 
● 无限循环
| 1 2 3 4 | while true; do     command done | 
进程和网络
- 
ps 显示进程 - ps aux统计所有进程信息
 
- 
netstat 一般用来查看打开的网络端口 - netstat -antp查看打开的网络端口以及对应的应用程序
 
- 
tcpdump 网络抓包 - tcpdump -i eth1指定抓包的设备
- tcpdump tcp只抓tcp包, 协议包括ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp和udp等
- tcpdump port 80只抓80端口的包
- tcpdump -w a.pcap抓包数据,保存到文件
- tcpdump host 192.168.168.18 and tcp port 8081过滤条件可以使用逻辑运算and和or。
 
综合应用
网络应用
- 
获取ip地址 
 ifconfig | grep '172.20' | awk '{print $2}'
- 
查看所有打开的端口以及进程 
 netstat -antp | grep 'LIS' | grep -v 'tcp6' | awk '{ print $4 ", pid:" $7}'
docker中的应用
- 
关闭所有打开的容器 
 docker stop $(docker ps -a | grep Up |awk '{ print $1}')
- 
删除所有容器 
 docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)
进程监控
- 进程关闭后自动重新启动
| 1 2 3 4 5 6 7 8 9 | while true; do   count=`ps -ef | grep 'start' | grep -v grep | wc -l`   echo $count   if [ $count -eq 0 ]; then     ./start.sh   fi   sleep 3s done | 
- 发现进程立马kill掉
| 1 2 3 4 5 6 7 8 9 | while true; do   count=`ps -ef | grep 'start' | grep -v grep | wc -l`   echo $count   if [ $count -ne 0 ]; then     kill -9 `ps -ef | grep 'start' | grep -v grep | awk '{print $2}' | head -n 1`   fi   sleep 3s done | 
