Linux/Windows脚本汇总
概述
工作中常用的,短小精悍的脚本。
统计Nginx日志里访问次数最多的前十个IP
进入到log文件所在目录:
cat access_log | awk '{print $1}' | uniq -c | sort -rn -k1 | head -n 10
命令行解释:
awk '{print $1}'
:取数据的低1域(第1列)
sort
:对IP部分进行排序
uniq -c
:打印每一重复行出现的次数,并去掉重复行
sort -nr -k1
:按照重复行出现的次序倒序排列,-k1以第一列为标准排序
head -n 10
:取排在前n位的IP
统计Apache日志里访问次数最多的前十个IP
进入到log所在目录:
awk '{print $1}' access.log | sort | uniq -c | sort -nr -k1 | head -n 10
删除空文件夹
Windows脚本delete-empty-folder.bat
:
:: https://vcan.app/notes/193.html
:: 第一行为删除"指定目录"(加 /s 子目录下也删除)下 -d 指定多少天以前的所有文件(指定格式则改为如 *.bak)
:: 第二行为删除当前目录下所有空目录。(本脚本要放在删除文件夹的目录下) /q 表示交互式提醒
forfiles /p "C:\Users\johnn\.m2\repository" /s /m *.* /d -100 /c "cmd /c del @path"
for /f "delims=" %%a in ('dir . /b /ad /s ^|sort /r' ) do rd "%%a" 2>nul
删除指定后缀名文件
Windows脚本del-lastUpdated.bat
删除maven下载失败的jar包:
@echo off
rem 这里写你的仓库路径
set REPOSITORY_PATH=C:\Users\johnn\.m2\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
echo %%i
del /s /q "%%i"
)
rem 搜索完毕
pause
检测最耗CPU的Java线程的脚本
局限于Java应用和Linux服务器,给出CPU的占用率和当前堆栈信息,新建文件busythread.sh
:
#!/bin/bash
if [ $# -eq 0 ];then
echo "please enter java pid"
exit -1
fi
pid=$1
jstack_cmd=""
if [[ $JAVA_HOME != "" ]]; then
jstack_cmd="$JAVA_HOME/bin/jstack"
else
r=`which jstack 2>/dev/null`
if [[ $r != "" ]]; then
jstack_cmd=$r
else
echo "can not find jstack"
exit -2
fi
fi
# 如果procps版本不是太老,top支持-o参数
# line=`top -H -o %CPU -b -n 1 -p $pid | sed '1,/^$/d' | grep -v $pid | awk 'NR==2'`
line=`top -H -b -n 1 -p $pid | sed '1,/^$/d' | sed '1d;/^$/d' | grep -v $pid | sort -nrk9 | head -1`
echo "$line" | awk '{print "tid: "$1," cpu: %"$9}'
tid_0x=`printf "%0x" $(echo "$line" | awk '{print $1}')`
$jstack_cmd $pid | grep $tid_0x -A20 | sed -n '1,/^$/p'
使用:./busythread.sh 'pidof java'
统计Linux系统上所有文件大小的分布情况
如分组:小于1K,1K - 4K,4K - 1M,1M - 10M,10M - 1G,1G以上
ls -Rla | awk '{print $9, $5}' | awk '
BEGIN{
size[0] = " 0K-1K"
size[1] = " 1K-4K"
size[2] = " 4K-1M"
size[3] = " 1M-10M"
size[4] = " 10M-1G"
size[5] = " 1G+"
total = 0
}
($2 <= 1024) {a[0]++}
(1024 < $2 && $2 <= 4096) {a[1]++}
(4096 < $2 && $2 <= 1048576) {a[2]++}
(1048576 < $2 && $2 <= 10485760) {a[3]++}
(10485760 < $2 && $2 <= 1073741824) {a[4]++}
(1073741824 < $2 ) {a[5]++}
{total++}
END {
for(i=0;i<length(a);++i)
print size[i], "文件个数:", a[i], "百分比:", (a[i]/total)*100,"%"
}'