Linux – 高级bash脚本编程

文本处理工具

  • 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" 打印变量

● 传递参数

  • if语句

    • 单行if语句 if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi [ ] 内表示算数运算

   ● 块if语句

● while语句  

   ● 循环次数控制

    ● 无限循环

进程和网络

  • 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)

进程监控
  • 进程关闭后自动重新启动

  • 发现进程立马kill掉

参考

https://www.runoob.com/linux/