Shell实战——系统巡检

目录

一、获取系统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 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:

vm.swappiness=10

如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料,这里笔者不再赘述。

三、获取系统网络信息

脚本示例:

#!/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_net_info(){
        pri_ipadd=$(ip addr show ens33|grep -w inet|awk '{print $2}'|awk -F'/' '{print $1}')
        pub_ipadd=$(curl ifconfig.me -s)
        gateway=$(ip route|grep default|awk '{print $3}')
        mac_info=$(ip link|egrep -v "lo"|grep link|awk '{print $2}')
        dns_config=$(egrep -v "^$|^#" /etc/resolv.conf)
        route_info=$(route -n)
cat <<EOF | column -t
IP信息:
${line}
系统私网地址:${pri_ipadd}
系统公网地址:${pub_ipadd}
网关地址:${gateway}
MAC地址:${mac_info}
${line}
路由信息:
${route_info}
${line}
DNS信息:
${dns_config}
EOF
}

get_net_info  > ${sys_check_file}

执行结果:

1、curl命令

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。

常见参数:

-A/--user-agent <string>      设置用户代理发送给服务器
-b/--cookie <name=string/file>    cookie字符串或文件读取位置
-c/--cookie-jar <file>            操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>         断点续转
-D/--dump-header <file>           把header信息写入到该文件中
-e/--referer                      来源网址
-f/--fail                         连接失败时不显示http错误
-o/--output                       把输出写到该文件中
-O/--remote-name                  把输出写到该文件中,保留远程文件的文件名
-r/--range <range>                检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent                       静音模式。不输出任何东西
-T/--upload-file <file>           上传文件
-u/--user <user[:password]>       设置服务器的用户和密码
-w/--write-out [format]           什么输出完成后
-x/--proxy <host[:port]>          在给定的端口上使用HTTP代理
-#/--progress-bar                 进度条显示当前的传送状态

实例:

// 获取当前Linux的外网地址 
curl ifconfig.me
// 保存访问的网页
curl http://www.linux.com >> linux.html

2、route -n 查看路由信息

route -n 查看路由信息

备注:route -n (-n 表示不解析名字,列出速度会比route 快)

[root@localhost root123]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.43.2    0.0.0.0         UG    0      0        0 ens33
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

参数说明:

0.0.0.0         192.168.43.2    0.0.0.0         UG    0      0        0 ens33

表示去往所有目标地址数据包由网关192.168.43.2 通过网卡ens33来转发

169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
192.168.43.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

后两条是自动生成的,在每块网卡上每配置一个IP就会生成一条记录(一个网卡上可以配置多个IP)。表示去往这两个网段的数据包,直接由网卡接口ens33发送出去。

这两条记录中的gateway并没有意义,Flags那一列中有G时才会使用Gateway。这两条路由并没有这样的标志,由于它们是本地的,匹配这些条目的数据包会直接通过Iface列中的网卡发送出去。

字段含义
Destination目标网络/主机
Gateway网关地址,*表示目标和本机在同一网络,不需要路由
Genmask网络掩码
Flags
  • U Up表示此路由当前为启动状态
  • H Host,表示此网关为一主机
  • G Gateway,表示此网关为一路由器
  • R Reinstate Route,使用动态路由重新初始化的路由
  • D Dynamically,此路由是动态性地写入
  • M Modified,此路由是由路由守护程序或导向器动态修改
  • ! 表示此路由当前为关闭状态
Metric路由距离,即到达指定网络所需的中转数
Ref路由项被引用的次数(Linux未使用)
Use该路由项被使用的次数
Iface该路由项对应的输出网卡接口

四、获取系统磁盘信息

脚本示例:

#!/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_disk_info(){
        disk_info=$(fdisk -l|grep "/dev"|cut -d, -f1)
        disk_use=$(df -hTP|awk '$2!="tmpfs"{print}')
        disk_inode=$(df -hiP|awk '$1!="tmpfs"{print}')
cat <<EOF
磁盘信息:
${disk_info}
${line}
磁盘使用:
${disk_use}
${line}
inode信息:
${disk_inode}
EOF
}

get_disk_info > ${sys_check_file}

执行结果:

五、获取系统信息

脚本示例:

#!/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_systatus_info(){
        sys_os=$(uname -o)
        sys_release=$(cat /etc/redhat-release)
        sys_kernel=$(uname -r)
        sys_hostname=$(hostname)
        sys_selinux=$(getenforce)
        sys_lang=$(echo $LANG)
        sys_lastreboot=$(who -b|awk '{print $3,$4}')
        sys_runtime=$(uptime|awk '{print $3,$4}'|cut -d, -f1)
        sys_time=$(date)
        sys_load=$(uptime|cut -d: -f5)
cat <<EOF | column -t
系统信息:
${line}
系统:${sys_os}
发行版本:${sys_release}
系统内核:${sys_kernel}
主机名:${sys_hostname}
selinux状态:${sys_selinux}
系统语言:${sys_lang}
系统当前时间:${sys_lastreboot}
系统最后重启时间:${sys_runtime}
系统运行时间:${sys_time}
系统负载:${sys_load}
EOF
}

get_systatus_info > ${sys_check_file}

执行结果:

1、uname命令

Linux uname命令用于显示系统信息,uname可显示电脑以及操作系统的相关信息。

相关参数

-a 显示全部信息
-s 显示内核名称
-n 显示主机名
-r 显示当前系统的内核版本
-m 显示主机的硬件名称
-p 显示处理器的类型
-i 显示主机的硬件平台
-o  显示所使用的操作系统的名称

2、who命令

Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。

who am i  输出的第一列表示打开当前伪终端的用户的用户名。
who -a 打印出系统启动时间,当前用户,用户运行级别。
who -d 打印出死掉的进程,如果没有死掉的进程就不会输出。
who -q 打印当前用户名及登录用户数。
who -u 打印当前登录用户登录信息。
who -r 打印系统运行等级。

3、其他涉及命令

(1)getenforce命令           

使用getenforce命令可以显示当前SELinux的应用模式,是强制、执行还是停用。

(2)hostname命令

通过hostname命令来查看本机的hostname。

(3)uptime命令

uptime命令详解:

uptime
  08:21:34 up 36 min,  2 users,  load average: 0.00, 0.00, 0.00
 
#当前服务器时间:    08:21:34
#当前服务器运行时长  36 min
#当前用户数          2 users
#当前的负载均衡      load average  0.00, 0.00, 0.00,分别取1min,5min,15min的均值

平均负载

平均负载指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。

最理想的平均活跃进程数

刚好每个CPU上都刚好运行着一个进程,这样每个CPU都得到了充分的利用。比如平均负载为4时:

  • 在只有4个CPU的系统上,意味着所有的CPU都刚好被完全占用。
  • 在8个CPU的系统上,意味着CPU有50%的空闲。
  • 而在有2个CPU系统上,意味着有一半的进程竞争不到CPU。

平均负载为多少时合理?

平均负载比CPU个数大的时候,系统就已经出现了过载。

  • 如果1分钟,5分钟,15分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
  • 如果1分钟的值远小于15分钟的值,就说明系统最近1分钟负载在减少,而过去15分钟内却有很大负载。
  • 反之则相反,如果1分钟的值远大于15分钟的值,说明近1分钟负载在增加,这种情况可能是临时性的,也可能还会持续,要持续观察,一旦1分钟的平均负载超过了CPU的数量,意味着系统正在发生过载的问题。

例如:一个单核系统上,平均负载为1.78,0.60,6.56,说明1分钟内,系统有78%的超载,而在15分钟内有656%的超载。

六、获取服务信息

脚本示例:

#!/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_service_info(){
        port_listen=$(netstat -lutup|grep -v "Active Internet")
        Kernel_config=$(sysctl -p 2>/dev/null)
        if [ ${sysversion} -gt 6 ];then
                service_config=$(systemctl list-unit-files --type=service --state=enabled|grep "enabled")
                run_service=$(systemctl list-units --type=service --state=running|grep ".service")
        else
                service_config=$(/sbin/chkconfig|grep -E ":on|:启用"|cloumn -t)
                run_service=$(/sbin/service --status-all|grep -E "running")
        fi
cat <<EOF
启动服务配置:
${service_config}
${line}
运行的服务:
${run_service}
${line}
监听端口:
${port_listen}
${line}
内核参考配置:
${Kernel_config}
EOF
}

get_service_info > ${sys_check_file}

执行结果:

[root@localhost logs]# cat 192.168.43.130-20200824.txt 
启动服务配置:
auditd.service                              enabled
autovt@.service                             enabled
crond.service                               enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service  enabled
getty@.service                              enabled
irqbalance.service                          enabled
kdump.service                               enabled
lvm2-monitor.service                        enabled
microcode.service                           enabled
NetworkManager-dispatcher.service           enabled
NetworkManager-wait-online.service          enabled
NetworkManager.service                      enabled
postfix.service                             enabled
rhel-autorelabel.service                    enabled
rhel-configure.service                      enabled
rhel-dmesg.service                          enabled
rhel-domainname.service                     enabled
rhel-import-state.service                   enabled
rhel-loadmodules.service                    enabled
rhel-readonly.service                       enabled
rsyslog.service                             enabled
sshd.service                                enabled
systemd-readahead-collect.service           enabled
systemd-readahead-drop.service              enabled
systemd-readahead-replay.service            enabled
tuned.service                               enabled
vgauthd.service                             enabled
vmtoolsd.service                            enabled
---------------------------------------------------------
运行的服务:
auditd.service           loaded active running Security Auditing Service
crond.service            loaded active running Command Scheduler
dbus.service             loaded active running D-Bus System Message Bus
getty@tty1.service       loaded active running Getty on tty1
irqbalance.service       loaded active running irqbalance daemon
lvm2-lvmetad.service     loaded active running LVM2 metadata daemon
NetworkManager.service   loaded active running Network Manager
polkit.service           loaded active running Authorization Manager
postfix.service          loaded active running Postfix Mail Transport Agent
rsyslog.service          loaded active running System Logging Service
sshd.service             loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service   loaded active running Login Service
systemd-udevd.service    loaded active running udev Kernel Device Manager
tuned.service            loaded active running Dynamic System Tuning Daemon
vgauthd.service          loaded active running VGAuth Service for open-vm-tools
vmtoolsd.service         loaded active running Service for virtual machines hosted on VMware
---------------------------------------------------------
监听端口:
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      986/sshd            
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      1140/master         
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      986/sshd            
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      1140/master         
---------------------------------------------------------
内核参考配置:

1、netstat命令

netstat是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的TCP网络连接,TCP和UDP监听,进程内存管理以及每一个网络接口设备的状态信息。netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况,让用户得知有哪些网络连接正在运作。

常见参数:

-a (all)显示所有选项,默认不显示LISTEN相关      
-p 显示建立相关链接的程序名
-t (tcp)仅显示tcp相关选项                  
-r 显示路由信息,路由表
-u (udp)仅显示udp相关选项                  
-e 显示扩展信息,例如uid等
-n 拒绝显示别名,能显示数字的全部转化成数字。     
-s 按各个协议进行统计
-l 仅列出有在 Listen (监听) 的服務状态        
-c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

常用命令:

(1) 列出所有端口 (包括监听和未监听的)
列出所有端口 netstat -a
列出所有 tcp 端口 netstat -at
列出所有 udp 端口 netstat -au

(2)列出所有处于监听状态的 Sockets
只显示监听端口 netstat -l
只列出所有监听 tcp 端口 netstat -lt
只列出所有监听 udp 端口 netstat -lu
只列出所有监听 UNIX 端口 netstat -lx

(3)显示每个协议的统计信息
显示所有端口的统计信息 netstat -s
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

(4)在 netstat 输出中显示 PID 和进程名称 
netstat -p

(5)在 netstat 输出中不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。

(6)显示核心路由信息 netstat -r
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

(7)找出运行在指定端口的进程
netstat -an | grep "80"

2、sysctl命令

sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。

常用参数的意义:

  • -w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1
  • -a 显示所有的系统参数
  • -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:

1) #echo 1 > /proc/sys/net/ipv4/ip_forward
2) #sysctl -w net.ipv4.ip_forward=1

以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了 service network restart命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件。

将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1  
#重新加载系统参数
sysctl -p  

3、systemctl命令

systemctl命令是系统服务管理器指令,主要负责控制systemd系统和服务管理器,它实际上将 service 和 chkconfig 这两个命令组合到一起。CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替。Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在Linux生态系统中,Systemd被部署到了大多数的标准Linux发行版中,只有为数不多的几个发行版尚未部署。Systemd通常是所有其它守护进程的父进程,但并非全是如此。

查看系统上上所有的服务

命令格式:systemctl [command] [–type=TYPE] [–all]

参数详解:

command -list-units:依据unit列出所有启动的unit。加上 –all 才会列出没启动的unit;

-list-unit-files:依据/usr/lib/systemd/system/ 内的启动文件,列出启动文件列表

- type=TYPE -为unit type, 主要有service, socket, target

应用举例:

systemctl命令说明
systemctl列出所有的系统服务
systemctl list-units列出所有启动unit
systemctl list-unit-files列出所有启动文件
systemctl list-units –type=service –all列出所有service类型的unit
systemctl list-units –type=service –all grep cpu列出 cpu电源管理机制的服务
systemctl list-units –type=target –all列出所有target

更多systemctl命令

七、获取用户信息

脚本示例:

#!/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_sys_user(){
        login_user=$(awk -F: '{if($NF=="/bin/bash") print $0}' /etc/passwd)
        ssh_config=$(egrep -v "^#|^$" /etc/ssh/ssh_config)
        sudo_config=$(egrep -v "^#|^$" /etc/sudoers|grep -v "^Defaults")
        host_config=$(egrep -v "^#|^$" /etc/hosts)
        crond_config=$(
                for cronuser in /var/spool/cron/*
                do
                        ls ${cronuser} 2>/dev/null|cut -d/ -f5
                        egrep -v "^$|^#" ${cronuser} 2>/dev/null
                        echo ""
                done
        )
cat <<EOF
系统登录用户:
${login_user}
${line}
ssh 配置信息:
${ssh_config}
${line}
sudo 配置用户:
${sudo_config}
${line}
定时任务配置:
${crond_config}
${line}
hosts 信息:
${host_config}
EOF
}

get_sys_user > ${sys_check_file}

执行结果:

[root@localhost logs]# cat 192.168.43.130-20200825.txt 
系统登录用户:
root:x:0:0:root:/root:/bin/bash
root123:x:1000:1000:root123:/home/root123:/bin/bash
test_user:x:1002:1002::/home/test_user:/bin/bash
study_linux:x:1003:1003::/home/study_linux:/bin/bash
---------------------------------------------------------
ssh 配置信息:
Host *
        GSSAPIAuthentication yes
        ForwardX11Trusted yes
        SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
        SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
        SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
        SendEnv XMODIFIERS
---------------------------------------------------------
sudo 配置用户:
root    ALL=(ALL)       ALL
test_user ALL=(ALL)     ALL
%wheel  ALL=(ALL)       ALL
---------------------------------------------------------
定时任务配置:

---------------------------------------------------------
hosts 信息:
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

八、获取进程信息

脚本示例:

#!/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 process_top_info(){
        top_title=$(top -b n1|head -7|tail -1)
        cpu_top10=$(top b -n1|head -17|tail -10)
        mem_top10=$(top -b n1|head -17|tail -10|sort -k10 -r)
cat <<EOF
CPU占用top10:
${top_title}
${cpu_top10}
${line}
内存占用top10:
${top_title}
${mem_top10}
EOF
}

process_top_info > ${sys_check_file}

执行结果:

[root@localhost logs]# cat 192.168.43.130-20200825.txt 
CPU占用top10:
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0  125484   3864   2564 S   0.0  0.2   0:01.32 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.03 ksoftirqd/0
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.52 rcu_sched
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 watchdog/0
---------------------------------------------------------
内存占用top10:
   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0  125484   3864   2564 S   0.0  0.2   0:01.32 systemd
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.52 rcu_sched
   420 root      20   0       0      0      0 S   6.7  0.0   0:00.17 xfsaild/dm-0
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/0
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.03 ksoftirqd/0
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd

1、top命令

top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。

top的使用方式 top [-d number] | top [-bnp]

参数解释:

-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。 
-b:以批次的方式执行top。 
-n:与-b配合使用,表示需要进行几次top命令的输出结果。 
-p:指定特定的pid进程号进行观察。

在top命令显示的页面还可以输入以下按键执行相应的功能(注意大小写区分的):

?:显示在top当中可以输入的命令 
P:以CPU的使用资源排序显示 
M:以内存的使用资源排序显示 
N:以pid排序显示 
T:由进程使用的时间累计排序显示 
k:给某一个pid一个信号。可以用来杀死进程 
r:给某个pid重新定制一个nice值(即优先级) 
q:退出top(用ctrl+c也可以退出top)

2、head命令

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。

命令格式:head [参数] [文件]

参数:

-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。

示例:

// 显示 runoob_notes.log 文件的开头 10 行
head runoob_notes.log

// 显示 notes.log 文件的开头 5 行
head -n 5 runoob_notes.log

// 显示除最后5行外的所有内容
head -n -5 runoob_notes.log

3、tail命令

linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容。

tail命令语法:

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

参数解释

-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。
File 指定操作的目标文件名称

上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部開始计算。

示例:

1、tail -f filename
说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。

2、tail -n 20 filename
说明:显示filename最后20行。

3、tail -r -n 10 filename
说明:逆序显示filename最后10行。
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

swadian2008

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

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

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

打赏作者

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

抵扣说明:

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

余额充值