[命令] Linux 进程查看命令 ps 的使用

内容一:ps 命令的作用
1.1 查看目前正在运行的进程
1.2 查看一些进程是否结束
1.3 查看是否有僵尸进程
1.4 查看哪些进程占用资源过多

内容二:查看所有 ps 命令的方法
# ps --help #查看 ps 的所有命令

内容三:ps 命令的常用参数
# ps -A #显示所有的进程,与 # ps -e 效果一样
# ps -a #只显示此用户的进程
# ps -u #以用户为主显示出进程的状态
# ps -x #一般与 a 参数一起使用,可列出较完整信息

内容四:ps 命令输出信息简介
显示案例一:将目前属于这次用户登入的PID与相关信息列示出来
# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   7168   7166  0  80   0 - 28860 do_wai pts/0    00:00:00 bash
0 R     0   7185   7168  0  80   0 - 38309 -      pts/0    00:00:00 ps

以上相关信息的意义为:
F 代表这个程序的旗标 (flag),4 代表使用者为 superuser
S 代表这个程序的状态 (STAT)
UID 代表执行者身份
PID 进程的 ID 号
PPID 父进程的 ID
C CPU 使用的资源百分比
PRI 指进程的执行优先权( Priority 的简写),其值越小越早被执行
NI 这个进程的nice值,其表示进程可被执行的优先级的修正数值
ADDR 这个是内核函数,指出该程序在内存的那个部分。如果是个执行 的程序,一般就是 『 - 』
SZ 使用掉的内存大小
WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间
CMD 所下达的指令名称

显示案例二:列出目前所有的正在内存当中的程序
# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 125284  3772 ?        Ss   05:55   0:01 /usr/lib/syste
root          2  0.0  0.0      0     0 ?        S    05:55   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    05:55   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   05:55   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    05:55   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    05:55   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        R    05:55   0:00 [rcu_sched]

以上相关信息的意义为:
USER 该进程属于那个使用者账号
PID 该进程的进程 ID 号
%CPU 该进程使用掉的CPU资源百分比
%MEM 该进程所占用的物理内存百分比
VSZ 该进程使用掉的虚拟内存量 (Kbytes)
RSS 该进程占用的固定的内存量 (Kbytes)
TTY 该进程是在那个终端机上面运作,若与终端机无关,则显示 ?。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
STAT 该程序目前的状态,主要的状态有
R 该程序目前正在运作,或者是可被运作
S 该程序目前正在睡眠当中,但可被某些讯号 (signal) 唤醒
T 该程序目前正在侦测或者是停止了
Z 该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 进程的状态
START 该进程被触发启动的时间
TIME 该进程实际使用 CPU 运作的时间
COMMAND 该程序的实际指令

内容五:ps 的使用案例
案例一:获取占用 CPU 资源最多的 10 个进程
# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

案例二:获取占用内存资源最多的 10 个进程
# ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

案例说明:可以使用以下命令查使用内存最多的 K 个进程
# ps -aux | sort -k4nr | head -K 

解释:
head -K 中,如果是显示 10 个进程,K=10,如果是显示3个进程,则 K=3
ps -aux 中,a 指代 all 所有的进程,u 指代 userid 执行该进程的用户 id,x 指代显示所有程序,不以开启的终端来区分
sort -k4nr 中,k 代表从第几个位置开始,后面的数字 4 即是其开始位置,结束位置如果没有,则默认到最后;n 指代 numberic sort,根据其数值排序;r 指代 reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。本例中,可以看到 %MEM 在第 4 个位置,根据%MEM的数值进行由大到小的排序
| 为管道符号,将查询出的结果导到下面的命令中进行下一步的操作

[知识] 常用的正则表达式

符号  解释
.     代表一个任意字符,除了换行符
*     代表任意多个字符(注意:它无法单独使用,要么和一个字符连用,要么和 "." 连用)
^     代表以它后面的那一个字符开头
$     代表以它前面的那一个字符结尾
+     代表前面的字符出现一次或者多次
?     代表前面的字符出现零次或者多次
{}    代表指定前一个字符出现的次数(例:{n,m} 则是指定出现 n 到 m 次,{n} 则是指定 n 次,{n,} 则是指定 n 到无限次)
[]    代表里面的东西是一个整体,相当于一个字符(例:[0-9] 则是指 [0-9] 中任意一个数,[a-z] 则是指 26 个小写字母中的一个)
[^]   代表里面的东西是一个整体且取反(例:[^0-9] 则是指不包含 [0-9] 中任意一个数字)
|     代表或(例:'a|b' 则是指包含 a 或 b)
\b   代表指定一个字符边界,即字与空格间的位置

常用的正则表达式用法
用法     解释 
[a-z]  匹配小写字母字符从 a 到 z
[^a-z] 匹配小写字母字符没有从 a 到 z
\d     匹配一个数字字符。等价于 [0-9]。grep 命令要加上 -P 才能使用这个正则
\D     匹配一个非数字字符。等价于 [^0-9]。grep 命令要加上 -P 才能使用这个正则
\s     匹配任何不可见字符,包括空格、制表符、换页符等。等价于 [ \f\n\r\t\v]
\S    匹配任何可见字符。等价于 [^ \f\n\r\t\v]
\w    匹配包括下划线的任何单词字符。类似但不等价于 “[A-Za-z0-9_]”,这里的”单词”字符使用 Unicode 字符集
\W    匹配任何非单词字符。等价于 “[^A-Za-z0-9_]”

[命令] Linux 时间管理命令 date 的使用

显示当前时间
# date +%Y #显示系统当前年份
# date +%m #显示系统当前月份
# date +%d #显示系统当前日期
# date +%H #显示系统当前小时
# date +%M #显示系统当前分钟
# date +%S #显示系统当前秒钟
# date +%w #显示系统当前处于每周的第几天
# date +%s #显示从 1970 年 1 月 1 日 0 点 0 分到目前为止的秒数,作用相当于 time 函数
这些选项可以组合使用,举例:
# date +%Y-%m-%d-%H
2019-02-08-06

显示过去时间
# date +%Y-%m-%d-%H -d "-n day" #显示系统 n 天前的日期
# date +%Y-%m-%d-%H -d "-n month" #显示系统 n 月前的日期
# date +%Y-%m-%d-%H -d "-n year" #显示系统 n 年前的日期
举例:
# date +%Y-%m-%d-%H -d "-1 day" #显示系统昨天的日期
# date +%Y-%m-%d-%H -d "-2 month" #显示系统两月前的日期
# date +%Y-%m-%d-%H -d "-3 year" #显示系统三年前的日期

显示未来时间
# date +%Y-%m-%d-%H -d "+n day" #显示系统 n 天后的日期
# date +%Y-%m-%d-%H -d "+n month" #显示系统 n 月后的日期
# date +%Y-%m-%d-%H -d "+n year" #显示系统 n 年后的日期
举例:
# date +%Y-%m-%d-%H -d "+1 day" #显示系统明天的日期
# date +%Y-%m-%d-%H -d "+2 month" #显示系统两月后的日期
# date +%Y-%m-%d-%H -d "+3 year" #显示系统三年后的日期

修改系统时间
以下格式都是修改系统的时间
# date -s “20101010 10:10:10”
# date -s "2010-10-10 10:10:10"
# date -s "2010/10/10 10:10:10"
# date -s "10/10/2010 10:10:10"
# date -s "10:10:10 20101010"

[工具] Shell 监控当前服务器的重要指标状况(例如:剩余硬盘空间、内存空间等)

#!/bin/bash
#名称:监控当前服务器的重要指标状况(例如:剩余硬盘空间、内存空间等)
#作用:监控当前服务器的重要指标状况(例如:剩余硬盘空间、内存空间等)
#使用方法:
#1.给此脚本增加执行权限
#2.执行此脚本

ip=`ip a s | awk '/noprefixroute ens33/{print $2}'` #ip
host=`hostname` #被监控服务器的服务器名
disk=`df -h | awk '/\/$/{print $5}'` #被监控服务器的剩余硬盘空间
mem=`free -m | awk '/Mem/{print $4}'` #被监控服务器的剩余内存空间
cpu=`top -bn 1 | awk -F',' '/^%Cpu/{print $4 }' | awk '{print $1}'` #被监控服务器的处理器剩余率
soft=`rpm -qa | wc -l` #被监控服务器所安装的软件数量
port=`ss -ntulap | wc -l` #被监控服务器所开启的端口号


echo "$ip $host disk $disk"
echo "$ip $host mem $mem"
echo "$ip $host cpu $cpu"
echo "$ip $host soft $soft"
echo "$ip $host port $port"
echo

[步骤] Linux 端口检查工具 telnet 的开启(使用)和关闭

步骤目录:
步骤一:开启 telnet 服务
1.1 使用命令安装或查看已经安装的 telnet 包
1.1.1 安装 telnet 包
1.1.1.1 安装 telnet 的方法一:安装 rpm 包
1.1.1.2 安装 telnet 的方法一:使用 yum 安装
1.1.2 验证是否安装了 telnet
1.2 启动 telnet
1.2.1 设置 telnet 可以启动
1.2.1.1 设置 telnet 可以启动的方法一:修改 telnet 的配置文件
1.2.1.2 设置 telnet 可以启动的方法二:通过 chkconfig 命令实现
1.2.2 手动启动 telnet 服务
1.2.2.1 启动 telnet 的方法一:使用 service 服务管理软件
1.2.2.2 启动 telnet 的方法二:使用 telnet 软件自代的启动器
1.3 测试(使用) telnet 服务是否可用

步骤二:关闭 telnet 服务
2.1 设置 telnet 服务不能被启动
2.1.1 设置 telnet 服务不能被启动的方法一:修改 telnet 的配置文件
2.1.2 设置 telnet 服务不能被启动的方法二:通过 chkconfig 命令实现
2.2 手动关闭 telnet 服务
2.2.2.1 关闭 telnet 的方法一:使用 service 服务管理软件
2.2.2.2 关闭 telnet 的方法二:使用 telnet 软件自代的启动器
2.3 删除 telnet-server 包
2.3.1 删除 telnet 的方法一:使用 rpm 包管理工具删除
2.3.2 删除 telnet 的方法二:使用 yum 删除

具体的操作步骤:
步骤一:开启 telnet 服务
1.1 使用命令安装或查看已经安装的 telnet 包
(注意:通常 telnet 包是系统默认安装的,做为客户端; telnet-server 包需要自行安装,做为服务端)
1.1.1 安装 telnet 包
(如果 telnet 已经安装,则可以跳过此步骤,验证方法如下 # rpm –qa | grep telnet-server)
1.1.1.1 安装 telnet 的方法一:安装 rpm 包
下载或者从安装光盘里复制相同版本的 telnet-server-1.2-14.4.i586.rpm 包。
# rpm –ivh telnet-server-1.2-14.4.i586.rpm

1.1.1.2 安装 telnet 的方法一:使用 yum 安装
# yum -y install telnet-server
(注意:做这一步前要提前搭建好 yum )

1.1.2 验证是否安装了 telnet
# rpm –qa | grep telnet-server

1.2 启动 telnet
1.2.1 设置 telnet 可以启动
1.2.1.1 设置 telnet 可以启动的方法一:修改 telnet 的配置文件
# vi /etc/xinetd.d/telnet
(内容补充: 将里面的 disable=yes 改成 disable=no)

1.2.1.2 设置 telnet 可以启动的方法二:通过 chkconfig 命令实现
# chkconfig --add telnet

1.2.2 手动启动 telnet 服务
1.2.2.1 启动 telnet 的方法一:使用 service 服务管理软件
# service xinet restart

1.2.2.2 启动 telnet 的方法二:使用 telnet 软件自代的启动器
# /etc/init.d/xinetd restart

1.3 测试(使用) telnet 服务是否可用
# telnet 127.0.0.1 80
(补充,这里的 127.0.0.1 指的是要测试的 ip 地址,这里的 80 指的是要测试的端口号)

步骤二:关闭 telnet 服务
2.1 设置 telnet 服务不能被启动
2.1.1 设置 telnet 服务不能被启动的方法一:修改 telnet 的配置文件
# vi /etc/xinetd.d/telnet
(内容补充: 将里面的 disable=no 改成 disable=yes)

2.1.2 设置 telnet 服务不能被启动的方法二:通过 chkconfig 命令实现
# chkconfig --del telnet

2.2 手动关闭 telnet 服务
2.2.2.1 关闭 telnet 的方法一:使用 service 服务管理软件
# service xinetd restart

2.2.2.2 关闭 telnet 的方法二:使用 telnet 软件自代的启动器
# /etc/init.d/xinetd restart

2.3 删除 telnet-server 包
2.3.1 删除 telnet 的方法一:使用 rpm 包管理工具删除
# rpm -e telnet-server--nodeps

2.3.2 删除 telnet 的方法二:使用 yum 删除
# yum -y remove telnet-server
(注意:做这一步前要提前搭建好 yum )