文本处理工具
- 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 |