Shell的奇淫巧技集合

in 互联网技术 with 0 comment  访问: 96 次

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."

方法二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

未完待续......

WeZan
Responses