查看有多少远程的 IP 在连接本机
#!/bin/bash
#!/bin/bash
# 查看有多少远程的 IP 在连接本机(不管是通过 ssh 还是 web 还是 ftp 都统计)
# 使⽤ netstat ‐atn 可以查看本机所有连接的状态,‐a 查看所有,
# -t仅显示 tcp 连接的信息,‐n 数字格式显示
# Local Address(第四列是本机的 IP 和端⼝信息)
# Foreign Address(第五列是远程主机的 IP 和端⼝信息)
# 使⽤ awk 命令仅显示第 5 列数据,再显示第 1 列 IP 地址的信息
# sort 可以按数字⼤⼩排序,最后使⽤ uniq 将多余重复的删除,并统计重复的次数
netstat -atn | awk '{print $5}'| awk '{print $1}'| sort -nr | uniq -c测试整个⽹段中哪些主机处于开机状态
#!/bin/bash
# 编写脚本测试 172.18.211.0/24 整个⽹段中哪些主机处于开机状态,哪些主机处于关机
# 状态(for 版本)
#!/bin/bash
# 编写脚本测试 172.18.211.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)
for i in {1..254}
do
# 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
ping -c 2 -i 0.3 -W 1 172.18.211.$i &>/dev/null
if [ $? -eq 0 ]; then
echo "172.18.211.$i is up"
else
echo "172.18.211.$i is down"
fi
done检测⽹卡流量,并按规定格式记录在⽇志中
迁移条件安装yum install sysstat -y
#!/bin/bash
while :
do
# 设置语言为英文,保障输出结果是英文,否则会出现bug
LANG=en
logfile=/tmp/`date +%d`.log
# 将下面执行的命令结果输出重定向到logfile日志中
exec >> $logfile
# 记录当前时间
date +"%F %H:%M"
# sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
# 统计59秒内的平均流量(因为sleep 1总共60秒)
sar -n DEV 1 59 | grep Average | grep eth0 | awk '{
print $2, "\t", "input:", "\t", $5*1000*8, "bps";
print $2, "\t", "output:", "\t", $6*1000*8, "bps"
}'
echo "####################"
# 因为执行sar命令需要59秒,因此只需要sleep 1秒即可达到60秒间隔
sleep 1
done判断⽂件或⽬录是否存在
#!/bin/bash
# 判断文件或目录是否存在
if [ $# -eq 0 ]; then
echo "未输入任何参数,请输入参数"
echo "用法: $0 [文件名|目录名]"
exit 1
fi
if [ -f "$1" ]; then
echo "该文件存在"
ls -l "$1"
else
echo "没有该文件: $1"
fi
if [ -d "$1" ]; then
echo "该目录存在"
ls -ld "$1" # 修正了这里原来是$2的错误
else
echo "没有该目录: $1"
fi统计 Linux 进程相关数量信息
# 统计 Linux 进程相关数量信息
running=0
sleeping=0
stoped=0
zombie=0
# 在 proc ⽬录下所有以数字开始的都是当前计算机正在运⾏的进程的进程 PID
# 每个 PID 编号的⽬录下记录有该进程相关的信息
for pid in /proc/[1‐9]*
do
procs=$[procs+1]
stat=$(awk '{print $3}' $pid/stat)
# 每个 pid ⽬录下都有⼀个 stat ⽂件,该⽂件的第 3 列是该进程的状态信息
case $stat in
R)
running=$[running+1]
;;
T)
stoped=$[stoped+1]
;;
S)
sleeping=$[sleeping+1]
;;
Z)
zombie=$[zombie+1]
;;
esac
done
echo "进程统计信息如下"
echo "总进程数量为:$procs"
echo "Running 进程数为:$running"
echo "Stoped 进程数为:$stoped"
echo "Sleeping 进程数为:$sleeping"
echo "Zombie 进程数为:$zombie"获取本机 MAC 地址
#!/bin/bash
# 获取本机 MAC 地址信息
echo "本机 MAC 地址信息如下:"
ip a | awk '
BEGIN {
print "网卡名称\tMAC地址"
print "---------------------"
}
/^[0-9]:/ {
iface = $2
getline
if ($0 ~ /link\/ether/) {
print iface "\t" $2
}
}' | grep -v lo: #!/bin/bash
# 获取本机 MAC 地址信息
echo "本机 MAC 地址信息如下:"
ip -o link show | awk '!/lo:/ && /ether/ {print $2, $17}'监控网络接口流量(输入/输出)
#!/bin/bash
# Description: Network traffic monitor for CentOS 6/7/8
# 单位转换函数
traffic_unit_conv() {
local traffic=$1
if [ $traffic -ge 1048576 ]; then # 1 MB = 1024*1024
printf "%.1f%s" "$(echo "scale=1; $traffic/1024/1024" | bc)" "MB/s"
elif [ $traffic -ge 1024 ]; then
printf "%.1f%s" "$(echo "scale=1; $traffic/1024" | bc)" "KB/s"
else
printf "%d%s" "$traffic" "B/s"
fi
}
# 检查参数
if [ -z "$1" ]; then
echo "Usage: $0 <network-interface>"
echo "Available interfaces:"
awk -F: '/: /{print $1}' /proc/net/dev | grep -v lo
exit 1
fi
NIC=$1
# 检查接口是否存在
if ! grep -q "$NIC:" /proc/net/dev; then
echo "Error: Interface $NIC not found!"
exit 1
fi
echo -e "Input ------ Output"
while true; do
# 获取当前流量统计
OLD_IN=$(awk -F'[: ]+' '$0~"'$NIC'"{print $3}' /proc/net/dev)
OLD_OUT=$(awk -F'[: ]+' '$0~"'$NIC'"{print $11}' /proc/net/dev)
sleep 1
# 获取新的流量统计
NEW_IN=$(awk -F'[: ]+' '$0~"'$NIC'"{print $3}' /proc/net/dev)
NEW_OUT=$(awk -F'[: ]+' '$0~"'$NIC'"{print $11}' /proc/net/dev)
# 计算差值
IN=$((NEW_IN-OLD_IN))
OUT=$((NEW_OUT-OLD_OUT))
# 显示结果
echo "$(traffic_unit_conv $IN) $(traffic_unit_conv $OUT)"
done查看centos系统中资源占用率最高的几个进程
# 查看前10个CPU密集型进程
ps -eo pid,user,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 11
# 查看前10个内存消耗型进程
ps -eo pid,user,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 11
# 持续监控(每2秒刷新)
watch -n 2 "ps -eo pid,user,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 11"
评论