Shell实战——系统巡检

本文介绍了一套全面的Linux系统信息查询脚本,涵盖了CPU、内存、网络、磁盘、服务、用户和进程等关键领域的信息获取。脚本不仅展示了如何使用各种Linux命令来收集系统状态数据,还提供了详细的命令解释和示例输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、获取系统CPU信息

1、id命令

2、rpm命令

3、cut命令

4、IP命令

5、sort命令

6、uniq命令

7、wc命令

8、column命令

二、获取系统内存信息

free命令

三、获取系统网络信息

1、curl命令

2、route -n 查看路由信息

四、获取系统磁盘信息

五、获取系统信息

1、uname命令

2、who命令

3、其他涉及命令

(1)getenforce命令           

(2)hostname命令

(3)uptime命令

六、获取服务信息

1、netstat命令

2、sysctl命令

3、systemctl命令

七、获取用户信息

八、获取进程信息

1、top命令

2、head命令

3、tail命令


一、获取系统CPU信息

相关脚本:

#!/bin/bash
#

# 判断用户是否为root用户,如果非root用户需要root用户执行脚本
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本" && exit 1
sysversion=$(rpm -q centos-release|cut -d- -f3)
line="--------------------------------------------------------------"

# 创建日志目录
logs=/home/root123/logs
[ -d $logs ] || mkdir $logs

# 定义日志文件
sys_check_file="$logs/$(ip addr show ens33|grep -w inet|awk '{print $2}'|awk -F '/' '{print $1}')-`date +%Y%m%d`.txt"

# 获取系统cpu信息
function get_cpu_info(){
        Physical_CPUs=$(grep "physical id" /proc/cpuinfo|sort|uniq|wc -l)
        Virt_CPUs=$(grep "processor" /proc/cpuinfo|wc -l)
        CPU_Kernels=$(grep "cores" /proc/cpuinfo|uniq|awk -F':' '{print $2}')
        CPU_Type=$(grep "model name" /proc/cpuinfo|awk -F ':' '{print $2}'|sort|uniq)
        CPU_Arch=$(uname -m)
cat <<EOF | column -t
CPU信息:

物理CPU个数:$Physical_CPUs
逻辑CPU个数:$Virt_CPUs
每CPU核心数:$CPU_Kernels
CPU型号:$CPU_Type
CPU架构:$CPU_Arch
EOF
}

get_cpu_info > ${sys_check_file}

执行后输出:

1、id命令

Linux id命令用于显示用户的ID,以及所属群组的ID。

id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。

  • -g或--group  显示用户所属群组的ID。
  • -G或--groups  显示用户所属附加群组的ID。
  • -n或--name  显示用户,所属群组或附加群组的名称。
  • -r或--real  显示实际ID。
  • -u或--user  显示用户ID。
  • -version  显示版本信息。

2、rpm命令

RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”。

(1)rpm 执行安装包

二进制包(Binary)以及源代码包(Source)两种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。

(2)常用命令组合:

  • -ivh:安装显示安装进度--install--verbose--hash
  • -Uvh:升级软件包--Update;
  • -qpl:列出RPM软件包内的文件信息[Query Package list];
  • -qpi:列出RPM软件包的描述信息[Query Package install package(s)];
  • -qf:查找指定文件属于哪个RPM软件包[Query File];
  • -Va:校验所有的RPM软件包,查找丢失的文件[View Lost];
  • -e:删除包
查询指定软件是否已安装:   rpm -q  <软件名>

3、cut命令

cut用来从标准输入或文本文件中剪切列或域。

  • -c list  指定剪切字符数。
  • -f field  指定剪切域数。
  • -d  指定与空格和t a b键不同的域分隔符。

(1)-c用来指定剪切范围,如下所示:
-c 1,5-7  剪切第1个字符,然后是第5到第7个字符。
-c 1-50  剪切前50个字符。
(2)-f  格式与-c 相同:
-f 1,5 剪切 第1域,第5域。
-f 1,10-12 剪切第1域,第10域到第12域。

用法链接

4、IP命令

linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。

ip命令常见使用方式

// 查看指定网卡信息
ip addr show ens33

// 激活和停止网口
ip link set ppp0 up
ip link set ppp0 down

// 设置IP地址
ip addr add 192.168.0.193/24 dev ens33

// 列出路由条目
ip route (show)

// 显示IP地址信息,偏向于上层。
ip address (show)

// 显示链路层的信息,更底层,偏向于物理层
ip link (show) 

5、sort命令

sort -u 去重 ,默认安装ASCII码升序排列

## sort -u 去重
cat test_sort.txt |sort -u

sort -r ,降序排序,sort默认升序

## sort 默认升序
cat test_sort.txt |sort
 
## sort -r 降序
cat test_sort.txt |sort -r

 -g 、-n ,按照数值排序

## sort 默认升序,但默认按照字符串比较,会出现2 大于10的情况
cat test_sort.txt |sort
 
## 按照常规数值排序
cat test_sort.txt |sort -g
 
## 按照字符串数值排序
cat test_sort.txt |sort -n

-t (设置分隔符)和-k (指定某列)

## sort -t -k
cat test_sort.txt |sort -n -t "|" -k 3

6、uniq命令

uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

uniq 可检查文本文件中重复出现的行列。

-c: 在每列旁边显示该行重复出现的次数。 
-d: 仅显示重复出现的行列,显示一行。 
-D: 显示所有重复出现的行列,有几行显示几行。 
-u: 仅显示出一次的行列 
-i: 忽略大小写字符的不同 
-f Fields: 忽略比较指定的列数。 
-s N: 忽略比较前面的N个字符。 
-w N: 对每行第N个字符以后的内容不作比较。

重复的行不相邻时,uniq 命令是不起作用的。所以,经常需要跟 sort 命令一起使用。

7、wc命令

wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。

该命令各选项含义如下:  

  • - c 统计字节数。  
  • - l 统计行数。  
  • - w 统计字数。

8、column命令

将文本结果转换为整齐的表格,上下对齐。

默认的分隔符是空格,可以使用-s指定分隔符,参数-t用于根据-s指定的分隔符(默认为空格)将一行创建出几列。

$ cat abc.txt
a:b:c:d:e
$ column -t -s: abc.txt
a  b  c  d  e

二、获取系统内存信息

脚本示例:

#!/bin/bash
#

# 判断用户是否为root用户,如果非root用户需要root用户执行脚本
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本" && exit 1
sysversion=$(rpm -q centos-release|cut -d- -f3)
line="--------------------------------------------------------------"

# 创建日志目录
logs=/home/root123/logs
[ -d $logs ] || mkdir $logs

# 定义日志文件
sys_check_file="$logs/$(ip addr show ens33|grep -w inet|awk '{print $2}'|awk -F '/' '{print $1}')-`date +%Y%m%d`.txt"

# 获取系统内存信息
function get_mem_info(){
        check_mem=$(free -m)
        MemTotal=$(grep MemTotal /proc/meminfo|awk '{print $2}') #KB
        MemFree=$(grep MemFree /proc/meminfo|awk '{print $2}')
        let MemUsed=$MemTotal-$MemFree
        report_MemUsedPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")"%"
        report_MemTotal=$(($MemTotal/1024))"MB"
        report_MemFree=$(($MemFree/1024))"MB"
cat <<EOF
系统内存信息:
${check_mem}
${line}
总共内存:$report_MemTotal
空闲内存:$report_MemFree
内存使用率:$report_MemUsedPercent
EOF
}

get_mem_info > ${sys_check_file}

执行结果:

free命令

Linux free命令用于显示内存状态。

free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

参数说明

  • -b  以Byte为单位显示内存使用情况。
  • -k  以KB为单位显示内存使用情况。
  • -m  以MB为单位显示内存使用情况。
  • -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。
  • -o  不显示缓冲区调节列。
  • -s     <间隔秒数>  持续观察内存使用状况。
  • -t   显示内存总和列。
  • -V    显示版本信息。
[root@localhost logs]# free -h 
              total        used        free      shared  buff/cache   available
Mem:           1.8G        148M        1.5G        9.5M        156M        1.5G
Swap:          2.0G          0B        2.0G

Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还可以被应用程序使用的物理内存大小。

swap:

当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

swadian2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值