ps
Linux ps命令用于显示当前进程 (process) 的状态。
语法
ps [options] [--help]
参数:
- ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
- -A 列出所有的进程
- -w 显示加宽可以显示较多的资讯
- -au 显示较详细的资讯
- -aux 显示所有包含其他使用者的行程
- -o 显示指定字段信息
- -e 显示所有进程,相当于-A
- -x 显示包括未在终端内的进程,即脱离了终端进程
- au(x) 输出格式 :
- USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER: 行程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的记忆体使用率
- VSZ: 占用的虚拟记忆体大小
- RSS: 占用的记忆体大小
- TTY: 终端的次要装置号码 (minor device number of tty)
- STAT: 该行程的状态:
- D: 无法中断的休眠状态 (通常 IO 的进程)
- R: 正在执行中
- S: 静止状态
- T: 暂停执行
- Z: 不存在但暂时无法消除
- W: 没有足够的记忆体分页可分配
- <: 高优先序的行程
- N: 低优先序的行程
- L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
ping
Linux ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
参数说明:
- -d 使用Socket的SO_DEBUG功能。
- -c # 发送ping包的个数,#表示数值。
- -f 极限检测。
- -i<间隔秒数> 指定收发信息的间隔时间。
- -I<网络界面> 使用指定的网络接口送出数据包。
- -l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
- -n 只输出数值。
- -p<范本样式> 设置填满数据包的范本样式。
- -q 不显示指令执行过程,开头和结尾的相关信息除外。
- -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
- -R 记录路由过程。
- -s<数据包大小> 设置数据包的大小。
- -t<存活数值> 设置存活数值TTL的大小。
- -v 详细显示指令的执行过程。
crontab
Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
而 linux 任务调度的工作主要分为以下两类:
- 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
- 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
语法
crontab [ -u user ] file
或
crontab [ -u user ] { -l | -r | -e }
说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明:
- -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
- -r : 删除目前的时程表
- -l : 列出目前的时程表
时间格式如下:
f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
df
Linux df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。
语法
df [选项]... [FILE]...
- 文件-a, --all 包含所有的具有 0 Blocks 的文件系统
- 文件–block-size={SIZE} 使用 {SIZE} 大小的 Blocks
- 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的…)
- 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
- 文件-i, --inodes 列出 inode 资讯,不列出已使用 block
- 文件-k, --kilobytes 就像是 --block-size=1024
- 文件-l, --local 限制列出的文件结构
- 文件-m, --megabytes 就像 --block-size=1048576
- 文件–no-sync 取得资讯前不 sync (预设值)
- 文件-P, --portability 使用 POSIX 输出格式
- 文件–sync 在取得资讯前 sync
- 文件-t, --type=TYPE 限制列出文件系统的 TYPE
- 文件-T, --print-type 显示文件系统的形式
- 文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
- 文件-v (忽略)
- 文件–help 显示这个帮手并且离开
- 文件–version 输出版本资讯并且离开
mail
mail 是 Linux 的邮件客户端命令,可以利用这个命令给其他用户发送邮件。
mail 命令的基本信息如下。
- 命令名称:mail。
- 英文原意:send and receive Internet mail。
- 所在路径:/bin/mail。
- 执行权限:所有用户。
- 功能描述:发送和接收电子邮件。
mail -s "标题" 邮件地址 < 要发送的文件
简单练习
1、显示统计占用系统内存最多的进程,并排序。
# 知识点 ps
[root@localhost ~]#ps -eo pid,%mem --sort=-%mem
PID %MEM
9832 11.2
10252 3.7
1853 3.2
10120 1.5
924 1.5
11074 1.4
10188 1.2
798 0.9
10246 0.9
10063 0.9
...
# 显示pid 和内存占用,并按内存占用最多的排序
2、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
for版
# 知识点:for、ping
# 思路:1.首先192.168.0.0/24网段指的是192.168.0.{0..254}
# 2.我们只要用for循环分别ping每一个ip,如果取得返回值说明ping通
#!/bin/bash
for j in {0..255};do
ip=192.168.0.$[j]/24;
if ping -c1 $ip &> /dev/null;then
echo "$ip success!"
else
echo "$ip fail!"
fi
done
# 疑问:有办法让该脚本运行更快速吗?
# 有!
# 用并发
#!/bin/bash
for j in {0..254};do
ip=192.168.0.$[j]/24;
{
if ping -c1 $ip &>/dev/null;then
echo "$ip success!"
else
echo "$ip fail!"
fi
} &
done
wait
echo "并发检测完成"
# 不信你试试啊
while版
#!/bin/bash
i=0
while [ $i -le 255 ]
do
if ping 192.168.0.$[i]/24 &>/dev/null;then
echo "192.168.0.$[i] success!"
else
echo "192.168.0.$[i] fail!"
fi
let i++
done
echo Done
3、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
# 分析
# 这个任务可以分解一下:一部分是备份任务。另一部分是计划执行
# 知识点:crontab、tar
[root@localhost bak]#crontab -e
30 01 * * 1-5 tar cJf /root/backup/etcbak-`date -d "1 day ago" +"%Y-%m-%d-%H"`.tar.xz /etc
4、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高 于80%,就发送邮件报警
# 分析
# 分解任务:1.查询磁盘利用率。2.设定阈值。3.判断。4.发送邮件。5.计划任务
# 知识点:df、crontab、mail
# 获得 最大的磁盘占用率值:df -h|grep /dev/s.*|tr -s " "|cut -d " " -f5|tr -d %|sort -n|tail -1
# 设置阈值80
#!/bin/bash
alarm_threshold=80
mail=`whoami`@`hostname`
max_disk_use=`df -h|grep /dev/s.*|tr -s " "|cut -d " " -f5|tr -d %|sort -n|tail -1`
if [ $max_disk_use -gt $alarm_threshold ];then
echo "磁盘空间利用率超过80%" |mail -s "Warning alert" $mail
fi
# 测试一下
[root@localhost bak]#. diskCheck.sh
[root@localhost bak]#mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Fri Apr 17 05:40 18/657 "Warning alert"
&
Message 1:
From [email protected] Fri Apr 17 05:40:53 2020
Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Date: Fri, 17 Apr 2020 05:40:53 +0800
To: [email protected]
Subject: Warning alert
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=utf-8
From: [email protected] (root)
Status: R
磁盘空间利用率超过80%
# 设置计划任务
[root@localhost bak]#crontab -e
*/10 * * * 1-5 /bin/bash /root/bak/diskCheck.sh