1 进程的基本介绍
==>
视频链接
-
在 Linux 中,每个
执行的程序
都成为一个进程,每一个进程都分配一个 ID 号 (pid ,进程号) -
每个进程都可能以两种方式存在的。
前台
与
后台
,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行 - 一般系统的服务器都是以后台进程方式存在,而且都会常驻在系统中。直到关机才结束
- 示意图
2 显示系统执行的进程
2.1 基本介绍
-
ps
命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数
-
ps
显示的信息选项:
字段 | 说明 |
---|---|
PID | 进程识别号 |
TTY | 终端机号 |
TIME | 此进程所消 CPU 时间 |
CMD | 正在执行的命令或进程名 |
-
ps -a
:显示当前终端的所有进程信息 -
ps -u
:以用户的格式显示进程信息 -
ps -x
:显示后台进程运行的参数
通常是将上述三个参数联合使用,即:
ps -aux
,也可以使用分页来方便查看 =>
ps -axu | more
2.2 ps 详解
-
指令:
ps –aux | grep xxx
— 过滤查看指定的进程信息,比如:看看有没有 sshd 服务 =>
ps –aux | grep sshd
-
指令说明:
- System V展示风格
- USER:用户名称
- PID:进程号
-
%CPU:进程占用CPU的百分比
-
%MEM:进程占用物理内存的百分比
-
VSZ:进程占用的虚拟内存大小(单位:KB)
-
RSS:进程占用的物理内存大小(单位:KB)
- TTY:终端名称,缩写
-
STAT:进程状态,其中:
- S-睡眠
- s-表示该进程是会话的先导进程
- N-表示进程拥有比普通 优先级更低 的优先级
- R-正在运行
- D-短期等待
- Z-僵死进程
- T-被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
2.3 应用实例
要求:以全格式显示当前所有的进程,查看进程的
父进程
,比如查看 sshd 的 父进程 信息
-
ps -ef
:是以全格式显示当前所有的进程,其中:
-e
显示所有进程,
-f
全格式
-
对上图参数说明:
- 是BSD风格
- UID:用户ID
- PID:进程ID
- PPID:父进程ID
- C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运 算, 执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
- STIME:进程启动的时间
- TTY:完整的终端名称
- TIME:CPU时间
- CMD:启动进程所用的命令和参数
-
查看 sshd 的 父进程 信息 指令:
ps -ef | grep sshd
3 终止线程 kill 和 killall
3.1 介绍
- 若是某个进程执行一半需要停止时,或是已消耗了很大的系统资源时,此时可以考虑停止该进程
-
使用
kill
命令完成 终止进程 任务
3.2 基本语法
-
kill [] 进程号
:通过进程号杀死/终止进程 -
killall 进程名称
:通过进程名称杀死进程,也支持通配符,该指令 在系统因负载过大而变得很慢时很有用
3.3 常用选项
-
-9
:表示强迫进程立即停止
3.4 最佳实践
-
案例1:踢掉某个非法登录用户
kill 进程号
,比如:
kill 1967
- 案例2:终止远程登录服务 sshd ,在适当的时候再次重启 sshd 服务
(1) kill sshd对应的进程号; #终止远程登录服务
(2) /bin/systemctl start sshd.service #重启 sshd 服务
-
案例3:终止多个 gedit ,指令 =>
killall gedit
-
案例4:强制杀掉一个终端,指令 =>
kill -9 bash对应的进程号
4 查看进程树 pstree
4.1 基本语法
-
pstree [选项]
:可以更加直观的来看进程信息
4.2 常用选项
-
-p
:显示进程的 PID -
-u
:显示进程的所属用户
4.3 应用实例
-
请以树状的形式显示进程的 pid ,指令:
pstree -p
-
请以树状的形式显示进程的所属用户 ,指令:
pstree -u
5 服务管理
5.1 基本介绍
- 服务 (service) 本质就是进程,但是 是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如:mysqld ,sshd ,防火墙 等 ,因此我们又称为守护进程,是 Linux 中非常重要的知识点
- 原理图
5.2 service 管理指令
-
service 服务名 [start | stop | restart | reload | status]
-
在 CentOS7.0 后,
很多服务不再使用 service
,而是
systemctl
-
service 指令管理的服务在
/etc/init.d
查看
5.3 service 管理指令案例
- 请使用 service 指令,查看,关闭,启动 network ,注意:在虚拟系统演示,因为网络连接会关闭
service network status #查看状态
service network stop #关闭
service network start #开启
5.4 查看服务名
-
方式一:使用
setup
=> 选择系统服务 就可以看到
全部
-
方式二:
/etc/init.d
看到 service 指令管理的服务 ,指令:
li -l /etc/init.d/
5.5 服务的运行级别 (runlevel)
-
Linux 系统有 7 种运行级别 (runlevel) :
常用的是
级别3
和
级别5
运行级别0 :系统停机状态,系统默认运行级别不能设为 0 ,否则不能正常启动
运行级别1 :单用户工作状态,root 权限,用于系统维护,禁止远程登录
运行级别2 :多用户工作状态 (没有 NFS) ,不支持网络
运行级别3
:完全的多用户状态 (有 NFS) ,无界面,登录后进入控制台命令行默认
运行级别4 :系统为使用,保留
运行级别5
:X11 控制台,登录后进入图形 GUI 模式
运行级别6 :系统正常关闭并重启,默认运行级别不能设为 6 ,否则不能正常启动 -
开机的流程说明:
5.6 CentOS7 后运行级别说明
在 CentOS7 以前,在
/etc/inittab
文件中进行设置默认的运行级别, CentOS7 以后进行了简化,如下:
-
简化指令如下:
multi-user.target
: analogous to runlevel 3
graphical.target
: analogous to runlevel 5 -
查看当前运行级别:
systemctl get-default
-
设置默认运行级别:
systemctl set-default TARGET.target
- 如设置默认运行级别为:multi-user.target 运行级别3
-
指令 =>
systemctl set-default multi-user.target
5.7 chkconfig 指令
-
基本介绍
- 通过 chkconfig 命令可以给服务的各个运行级别设置 自启动/关闭
- chkconfig 指令管理的服务在 /etc/init.d 查看
-
注意:CentOS7.0 后,很多服务
使用 systemctl 管理
-
chkconfig 基本语法
-
查看服务
chkconfig --list [ | grep xxx]
-
chkconfig 服务名 --list
-
chkconfig --level 5 服务名 on/off
表示在 运行级别5 下设置某服务是否自启动
-
-
案例演示
:对 network 服务 进行各种操作,比如:把 network 在 运行级别3 ,关闭自启动
chkconfig --level 3 network off #关闭自启动
chkconfig --level 3 network on #开启自启动
-
使用细节
:chkconfig 重新设置服务后自动启动或关闭,需要重启机器 (reboot) 生效
5.8 systemctl 管理指令
==>
视频链接
-
基本语法:
systemctl [start | stop | restart | status] 服务名
-
systemctl 指令管理的服务在
/usr/lib/systemd/system
查看 ,指令:
ls -l /usr/lib/systemd/system
5.9 systemctl 设置服务的自启动状态
-
systemctl list-unit-files [ | grep 服务名]
:查看服务开机启动状态,grep 可以进行过滤 -
systemctl enable 服务名
:设置服务开机启动 (对 运行级别3和5 同时生效) -
systemctl disable 服务名
:关闭服务开机启动 (对 运行级别3和5 同时生效) -
systemctl is-enabled 服务名
:查询某个服务是否是自启动的
5.10 应用案例
- 查看当前防火墙的状况,关闭防火墙和重启防火墙 (firewalld.service)
systemctl status firewalld #查看当前防火墙的状况
systemctl stop firewalld #关闭防火墙
systemctl start firewalld #开启防火墙
5.11 细节讨论
-
关闭或启用防火墙后,立即生效【telnet 测试 某个端口即可】,温馨提示,如果 telnet 指令用不了 => 解决方案:
参考文章
- 这种方式只是临时生效,当重启系统后,还是回归到以前对服务的设置
-
如果希望设置某个服务自启动或关闭 永久生效,要使用
systemctl [enable | disable] 服务名
5.12 打开或关闭指定端口
- 在真正的生成环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开了,那么外部请求数据包就不能跟服务监听端口通讯
- 这时需要打开指定的端口,比如:80,22,8080 等,这个又怎么做呢?
5.13 firewall 指令
-
打开端口:
firewall-cmd --permanent --add-port=端口号/协议
-
关闭端口:
firewall-cmd --permanent --remove-port=端口号/协议
-
重新载入,才能生效:
firewall-cmd --reload
-
查询端口是否开放:
firewall-cmd --query-port=端口/协议
-
查询所有开放的端口:
firewall-cmd --list-all
5.14 应用案例
- 启用防火墙,测试 111 端口是否能 telnet ,答案:目前不行
- 开放 111 端口
firewall-cmd --permanent --add-port=111/tcp #(1)打开端口
firewall-cmd --reload #(2)重新载入 , 才能生效
- 再次关闭 111 端口
firewall-cmd --permanent --remove-port=111/tcp #(1)关闭端口
firewall-cmd --reload #(2)重新载入 , 才能生效
6 动态监控进程
6.1 介绍
- top 与 ps 命令很相似,它们都是用来显示正在运行的进程
- top 与 ps 最大的不同之处,在于 top 在执行一段时间可以更新正在运行的进程
6.2 基本语法
- top [选项]
6.3 选项说明
选项 | 功能 |
---|---|
-d 秒数 |
指定 top 命令每隔几秒更新,默认是 3 秒,如:
|
-i | 使 top 不显示任何闲置或者僵死进程 |
-p | 通过指定监控进程ID来仅仅监控某个进程的状态 |
6.4 交互操作说明
操作 | 功能 |
---|---|
P | 以CPU使用率排序,默认就是此项 |
M | 以内存的使用率排序 |
N | 以 PID 排序 |
q | 退出 top |
6.5 应用实例
-
案例1 :监视特定用户,比如监控 tom 用户
- 输入 top 命令,按回车,查看执行的进程
- 然后输入 “u” 回车 ,再输入用户名,即可
-
案例2 :终止指定的进程,比如 结束 tom 登录
- 输入 top 命令,按回车,查看执行的进程
- 然后输入 “k” 回车 ,再输入要结束的进程 ID 号
-
案例3 :指定系统状态更新的时间 (每隔 10 秒自动更新) ,默认是 3 秒,指令:
top -d 10
7 监控网络状态
7.1 查看系统网络情况 netstat
-
基本语法:
netstat [选项]
-
选项说明:
-an
:按一定顺序排列输出
-p
:显示哪个进程在调用
-
应用案例:
请查看服务名为 sshd 的服务的信息 指令 =>
netstat -anp | grep sshd
7.2 检测主机连接命令 ping
- 是一种网络检测工具,它主要是用来检测远程主机是否正常,或是两部主机间的网线或网卡是否故障
-
如:
ping 对方ip地址