查看有多少远程的 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"