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 秒,如:top -d 5 |
-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地址