一、需要的知识点:
(1)基础命令:
tr -s :删除多余重复的字串。
echo "a b c" | tr -s " " #删除多余的空格。
cut :过滤数据。
cut -d:-f1 /etc/passwd #以冒号为分隔,过滤第一列。
(2)date命令:
date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间。
如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式。
date "+今天是%Y-%d-%m,现在是%H:%M:%S"
[root@localhost fuxi]# date "+今天是%Y-%d-%m,现在是%H:%M:%S"
今天是2023-25-07,现在是17:34:09
(3)ifconfig命令:
在 实体机上 ifconfig 命令用于 显示或配置网络设备(网络接口卡) 或修改。
(4)cat /proc/meminfo命令:
【cat /proc/meminfo】可以读出内核系统信息。
/ $ cat /proc/meminfo
MemTotal: 877368 kB :所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)(HighTotal + LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
MemFree: 22516 kB :LowFree与HighFree的总和,被系统留着未使用的内存,MemFree是说的系统层面
MemAvailable: 470244 kB :应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计,MemAvailable是说的应用程序层面
Buffers: 1772 kB :用来给文件做缓冲大小
Cached: 459224 kB :被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache )
SwapCached: 16 kB :被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口
Active: 333148 kB :在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用. (Active(anon) + Active(file))
Inactive: 330384 kB :在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径. (Inactive(anon) + Inactive(file))
Active(anon): 104368 kB :活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存)(anonymous pages),anonymous pages在发生换页时,是对交换区进行读/写操作
Inactive(anon): 104508 kB :非活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存)
Active(file): 228780 kB :活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页)(file-backed pages) File-backed pages在发生换页(page-in或page-out)时,是从它对应的文件读入或写出
Inactive(file): 225876 kB :非活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页)
Unevictable: 6708 kB :
Mlocked: 1428 kB :
HighTotal: 261888 kB :高位内存总大小(Highmem是指所有内存高于860MB的物理内存,Highmem区域供用户程序使用,或用于页面缓存。该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存)
HighFree: 5680 kB :未被使用的高位内存大小
LowTotal: 615480 kB :低位内存总大小,低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构
LowFree: 16836 kB :未被使用的低位大小
SwapTotal: 614396 kB :交换空间的总大小
SwapFree: 611044 kB :未被使用交换空间的大小
Dirty: 40 kB :等待被写回到磁盘的内存大小
Writeback: 0 kB :正在被写回到磁盘的内存大小
AnonPages: 209224 kB :未映射页的内存大小
Mapped: 280668 kB :设备和文件等映射的大小
Shmem: 1084 kB :
Slab: 59840 kB :内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗
SReclaimable: 34196 kB :可收回Slab的大小
SUnreclaim: 25644 kB :不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack: 7504 kB :常驻内存,每一个用户线程都会分配一个kernel stack(内核栈)
PageTables: 15508 kB :管理内存分页页面的索引表的大小
NFS_Unstable: 0 kB :不稳定页表的大小
Bounce: 0 kB :
WritebackTmp: 0 kB :
CommitLimit: 1053080 kB :根据超额分配比率('vm.overcommit_ratio'),这是当前在系统上分配可用的内存总量,这个限制只是在模式2('vm.overcommit_memory')时启用。CommitLimit用以下公式计算:CommitLimit =('vm.overcommit_ratio'*物理内存)+交换例如,在具有1G物理RAM和7G swap的系统上,当`vm.overcommit_ratio` = 30时 CommitLimit =7.3G
Committed_AS: 16368536 kB :目前在系统上分配的内存量。是所有进程申请的内存的总和,即时所有申请的内存没有被完全使用,例如一个进程申请了1G内存,仅仅使用了300M,但是这1G内存的申请已经被 "committed"给了VM虚拟机,进程可以在任何时间使用。如果限制在模式2('vm.overcommit_memory')时启用,分配超出CommitLimit内存将不被允许
VmallocTotal: 245760 kB :可以vmalloc虚拟内存大小
VmallocUsed: 0 kB :vmalloc已使用的虚拟内存大小
VmallocChunk: 0 kB :最大的连续未被使用的vmalloc区域
(5)df命令:
df
命令作用是列出文件系统的整体磁盘空间使用情况。可以用来查看磁盘已被使用多少空间和还剩余多少空间。
df命令语法
df [选项] [文件名]
参数:
-a:--all,显示所有的文件系统,包括虚拟文件系统,参考示例2。
-B:--block-size,指定单位大小。比如1k,1m等,参考示例3。
-h:--human-readable,以人们易读的GB、MB、KB等格式显示,参考示例4。
-H:--si,和-h参数一样,但是不是以1024,而是1000,即1k=1000,而不是1k=1024。
-i:--inodes,不用硬盘容量,而是以inode的数量来显示,参考示例5。
-k:以KB的容量显示各文件系统,相当于--block-size=1k。
-m:以KB的容量显示各文件系统,相当于--block-size=1m。
-l:--local,只显示本地文件系统。
--no-sync:在统计使用信息之前不调用sync命令(默认)。
-sync:在统计使用信息之前调用sync命令。
-P:--portability,使用POSIX格式显示,参考示例6。
-t:--type=TYPE,只显示指定类型的文件系统,参考示例7。
-T:--print-type,显示文件系统类型,参考示例8。
-x:--exclude-type=TYPE,不显示指定类型的文件系统。
--help:显示帮助信息。
--version:显示版本信息。
————————————————
版权声明:本文为优快云博主「gnail_oug」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/gnail_oug/article/details/70217446
(6)cat /proc/loadavg命令:
cat /proc/loadavg是查看系统平均负载的命令,输出结果:
前三个数字是1、5、15分钟内的平均进程数,第四个值的分子是正在运行的进程数,分母是进程总数,最后一个是最近运行的进程ID号。
查看系统平均负载的常用命令
1、cat /proc/loadavg
2、uptime
3、w
4、top
5、tload
(7)who命令:
Linux who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。
使用权限:所有使用者都可使用。
(8)wc命令:
在 Linux 中,wc (word count)命令常用于计算文件的行数、字数和字节数,日常操作以及脚本编程中经常使用到。
语法格式:
wc [OPTION]... [FILE]...
FILE 可以包含多个,每个文件对应输出一行,如果没有文件或文件为 “-” 时,从标准输入读取数据
-l , --lines : 显示行数;
-w , --words : 显示字数;
-m , --chars : 显示字符数;
-c , --bytes : 显示字节数;
-L , --max-line-length : 显示最长行的长度;
(9)ps aux 命令:
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有程序。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t <终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。
14)ps -l 較長,較詳細的顯示該PID的信息
(10)mail命令:
Linux服务器mail程序本身就是调用sendmail来进行邮件发送的,sendmail服务器提供对外的邮件发送功能。CentOS默认不能发送邮件,需要发送邮件的童鞋可以安装一个sendmail程序。
yum -y install sendmail
systemctl start sendmail
yum install mailx
系统收到的mail会保存在/var/spool/mail/用户名 这个文件夹中。
使用mail命令发送邮件,有如下三种方式:
1、直接使用shell当编辑器
-
mail -s "Hello from mzone.cc by shell" admin@mzone.cc
-
hello,this is the content of mail.
-
welcome to www.mzone.cc
第一行是输入的命令,-s表示邮件的主题,后面的admin@mzone.cc则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字,比如上面的两行。当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。
2、使用管道进行邮件发送
-
echo "hello,this is the content of mail.welcome to www.mzone.cc" | mail -s "Hello from mzone.cc by pipe" admin@mzone.cc
使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。
3、使用文件进行邮件发送
-
mail -s "Hello from mzone.cc by file" admin@mzone.cc < mail.txt
使用上面的命令后,我们就可以把mail.txt文件的内容作为邮件的内容发送给admin@mzone.cc了。
二、脚本编写:
#!/bin/bash
#这个脚本可以获取各项性能参数指标,并与预设阈值进行比较。
#local_time:时间,local_ip:网卡ip,free_mem:剩余内存大小,free_disk:剩余磁盘大小
#cpu_load:15min平均负载,login_user:登录系统的用户,procs:当前进程数量。
local_time=$(date +"%Y年%m月%d日 %H:%M:%S")
local_ip=$(ifconfig ens160 | grep netmask | tr -s " " | cut -d" " -f3)
free_mem=$(cat /proc/meminfo | grep MemAvailable |tr -s " " | cut -d" " -f2)
free_disk=$(df | grep "/$" | tr -s " " | cut -d" " -f4 )
cpu_load=$(cat /proc/loadavg | cut -d" " -f3)
login_user=$(who | wc -l)
procs=$(ps aux | wc -l)
#当剩余内存不足1G时发送邮件给root进行报警。
[ $free_mem -lt 10485760 ] && echo "$local_time 剩余内存空间不足。 Free_mem:$free_mem KB on $local_ip" | mail -s Warning root@localhost
#当剩余磁盘不足10GB时,发送邮件给root进行报警
[ $free_disk -lt 104857600 ] && echo "$local_time 剩余磁盘空间不足。 root_free_disk:$free_disk KB on $local_ip" | mail -s Warning root@localhost
#当CPU的15min平均负载超过4时发送邮件给root进行警报
result=$(echo "$cpu_load > 4" | bc)
[ $result -eq 1 ] && echo "$local_time CPU的负载过高。CPU 15 averageload:$cpu_load on $local_ip" | mail -s Warning root@localhost
#当系统实时在线人数超过3人时发送邮件给root报警
[ $login_user -gt 3 ] && echo "$local_time 同时在线人数较多。 $login_user users login to $local_ip" | mail -s Warning root@localhost
#当实时进程数量大于500时发送邮件给root进行报警
[ $procs -gt 500 ] && echo "local_time 进程数量太多。$procs proc areruning on $local_ip" | mail -s Warning root@localhost
~