Shell的奇淫巧技集合

in 互联网技术 with 0 comment  访问: 3,600 次

No.1 查找某目录下超过固定大小的文件,并清空其文件内容

比如查找/data/logs/apache目录下文件大小超过1G的文件,查找到后,并将其大小重置清空,命令如下:

find /data/logs/apache/ -type f -size +1G -exec sh -c "> {}" \;

No.2 给你脚本加一个标准演示的横幅

主要是利用了printf命令的格式化功能,脚本示例如下:

#!/bin/bash

banner()
{
  echo "+------------------------------------------+"
  printf "| %-46s |\n" "`date`"
  echo "|                                          |"
  printf "|`tput bold` %-40s `tput sgr0`|\n" "$@"
  echo "+------------------------------------------+"
}

banner "Starting the Job"
sleep 3

banner "Copying files"
cp -v /etc/hosts /tmp
cp -v /etc/passwd /tmp
sleep 4

banner "Downloading :png file"
curl https://fashengba.com/usr/themes/pinghsu/images/thumbs/55.jpg -o /tmp/55.jpg
sleep 5

banner "Finished."

效果如下:
banner.png

No.3 shell探测远程主机端口开放

方法一nmap命令:

#!/bin/bash
# nmap ip/hostname/domain -p RemotePort
ip_add="www.baidu.com"
port=80

PORT_COUNT=`nmap $ip_add  -p $port|grep open|wc -l`
[[ $PORT_COUNT -ge 1 ]] && echo "$ip_add $port is ok." || echo "$ip_add $port is unknown."
# Tcp
nmap -sT baidu.com -p 80

# UDP
nmap -sU baidu.com -p 161

方法二nc命令:

# -v: 显示详情 -z: 参数告诉netcat使用0 IO,连接成功后立即关闭连接,不进行数据交换 -w: <超时秒数> 设置等待连线的时间
nc -v -z fashengba.com 80
nc -w 1 fashengba.com 80 && echo OK|| echo NO

# Centos7 nc 
nc -w 5 $Host $Port < /dev/null

方法三telnet命令

# 能够过滤到Connected 则代表连通OK
echo -e "\n"|telnet baidu.com 80|grep --color Connected

方法四:

echo >/dev/tcp/8.8.8.8/53 && echo "open"

这个方法失败的时候会等待建立socket,退出不了,所以只能测试连接成功,参考:http://suo.im/4T0PS9

以个人经验,写脚本探测端口的可用性,还是利用nc命令较好。

No.4 Shell下判断命令是否存在最佳实践

if ! [ -x "$(command -v git)" ]; then
  echo 'Error: git is not installed.' >&2
  exit 1
fi

No.5 Awk统计命令 求和 求平均 最大值 最小值

awk求和:

cat test.txt | awk '{sum+=$1} END {print "Sum =", sum}'

awk求平均:

cat test.txt |awk '{sum+=$1} END {print "Average =", sum/NR}'

awk求最大值:

cat test.txt |awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'

awk求最小值:

cat test.txt | awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'

No.6 查看Linux非系统进程

ps --ppid 2 -p 2 -N

ps -f --ppid 2 -p 2 -N

No.7 查看linux系统资源性能信息

dstat -cdlmnpsyt 5

No.8 Yum安装指定版本软件包

先搜索:

yum --showduplicates list PACKAGE | expand

然后安装:

yum install <package name>-<version info>

未完待续......

WeZan