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,"%"
}'
posted @ 2021-03-30 23:23  johnny233  阅读(16)  评论(0编辑  收藏  举报  来源