一、根据 PID 过滤进程所有信息

#!/bin/bash
# Function: 根据用户输入的 PID,过滤出该 PID 所有的信息
read -p "请输入要查询的 PID: " P

# 获取进程行数
N=$(ps -aux | awk '$2 ~ /^'$P'$/ { print $11 }' | wc -l)

# 判断进程是否存在
if [ $N -eq 0 ]; then
    echo "该 PID 不存在!!"
    exit
fi

echo "--------------------------------"
echo "进程 PID: $P"
echo "进程命令:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $11 }')"
echo "进程所属用户: $(ps -aux | awk '$2 ~ /^'$P'$/ { print $1 }')"
echo "CPU 占用率:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $3 }' | cut -d'%' -f1)%"
echo "内存占用率:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $4 }' | cut -d'%' -f1)%"
echo "进程开始运行的时刻:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $9 }')"
echo "进程运行的时间:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $10 }')"
echo "进程状态:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $8 }')"
echo "进程虚拟内存:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $5 }')"
echo "进程共享内存:$(ps -aux | awk '$2 ~ /^'$P'$/ { print $6 }')"
echo "--------------------------------"

二、根据进程名过滤进程信息(会显示出该进程名包含的所有线程)

#!/bin/bash
# Function: 根据输入的程序的名字过滤出所对应的 PID,并显示出详细信息,如果有几个 PID,则全部显示
read -p "请输入要查询的进程名:" NAME

# 获取进程行数
N=$(ps -aux | grep "$NAME" | grep -v grep | wc -l)

# 判断进程是否存在
if [ $N -le 0 ]; then
    echo "该进程名没有运行!"
fi

i=1
# 遍历每个进程
while [ $N -gt 0 ]; do
    echo "进程 PID: $(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$2 }")"
    echo "进程命令:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$11 }")"
    echo "进程所属用户: $(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$1 }")"
    echo "CPU 占用率:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$3 }" | cut -d'%' -f1)%"
    echo "内存占用率:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$4 }" | cut -d'%' -f1)%"
    echo "进程开始运行的时刻:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$9 }")"
    echo "进程运行的时间:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$10 }")"
    echo "进程状态:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$8 }")"
    echo "进程虚拟内存:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$5 }")"
    echo "进程共享内存:$(ps -aux | grep "$NAME" | grep -v grep | awk "NR == $i { print \$6 }")"
    echo "***************************************************************"
    let N--
    i  
done

三、根据用户名查询该用户的相关信息

优秀的 Shell 运维脚本

优秀的 Shell 运维脚本

#!/bin/bash
# Function: 根据用户名查询该用户的相关信息
read -p "请输入要查询的用户名:" USERNAME

# 获取用户进程信息
PROCESSES=$(ps -u $USERNAME)

# 输出用户相关信息
echo "用户名: $USERNAME"
echo "用户ID: $(id -u $USERNAME)"
echo "用户组ID: $(id -g $USERNAME)"
echo "用户全名: $(id -un $USERNAME)"
echo "用户初始目录: $(eval echo ~$USERNAME)"
echo "用户登录终端: $(lastlog -u $USERNAME | cut -d. -f1 | cut -d' ' -f10)"<365>
echo "用户最后一次登录时间: $(lastlog -u $USERNAME | cut -d. -f1 | cut -d' ' -f6,7)"
echo "用户运行的进程:"
echo "$PROCESSES"
本文主题词:

常用shell运维脚本,运维shell脚本编程100例,运维shell脚本经典实例,运行shell脚本,跟老男孩学linux运维:shell编程实战,shell自动化运维,shell脚本运行环境,linux运维常用脚本,简述运行shell脚本的四种方法,shell脚本vi

点赞(12) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部