文章目录
第N日
Linux进程控制与检测
查看系统中运行的程序和进程
判断服务器的健康状态
停止不需要的进程
什么是进程和程序?
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,并占用一定的系统资源。程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。
简单来说,程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合。进程是正在执行中的程序。
举例:谷歌浏览器是一个程序,当我们打开谷歌浏览器,就会在系统中看到一个浏览器的进程,当程序被执行时,程序的代码都会被加载入内存,操作系统给这个进程分配一个 ID,称为 PID(进程 ID)。我们打开多个谷歌浏览器,就有多个浏览器子进程,但是这些进程使用的程序,都是chrome
top查看 CPU使用情况
命令:top
作用:查看服务器的进程占的资源(100%使用)
语法: top (动态显示)
交换操作快捷键:
M(大写):表示将结果按照内存(MEM)从高到低进行降序排列;
P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列;
1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息;
q:退出
用法一:top
示例代码:
#top
含义:查看CPU使用情况
系统整体信息
第一行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1I6RM2ua-1689750869836)(E:\渗透测试\7.19\7.19.assets\image-20230719090105681.png)]
09:01:05 系统时间
up 6 min, 系统运行之间
3 users, 当前登录的用户
load average: 0.02, 0.21, 0.14 系统在之前的 1分钟 5分钟 15分钟 的平均负载 如果cpu是单核 那么这个数值超过1 就是高负载 双核就是超过2为高负载
第二行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W335RF56-1689750869836)(E:\渗透测试\7.19\7.19.assets\image-20230719090355433.png)]
Tasks: 212 total 系统总进程数
1 running 当前正在运行的进程
211 sleeping 已经休眠的进程
0 stopped 正在停止的进程
0 zombie 代表僵尸进程
第三行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5f5qArho-1689750869836)(E:\渗透测试\7.19\7.19.assets\image-20230719090830298.png)]
%Cpu(s): 3.5 us 用户模式占用的cpu百分比
0.5 sy 系统占用
0.0 ni 改变过优先级的用户进程占用
98.3 id 空闲
0.2 wa, 等待输入/输出进程占用
0.0 hi 硬中断请求服务 占用
0.0 si 软中断请求服务 占用
0.0 st 虚拟时间百分比
第四行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6OZkbiW1-1689750869837)(E:\渗透测试\7.19\7.19.assets\image-20230719091350252.png)]
KiB Mem : 997976 total, 物理内存的总量 单位kb
666264 used, 已经使用的物理内存总量
79656 free 空闲内存
244012 buff/cache 作为缓冲的内存数量
第五行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SLK2yUu-1689750869837)(E:\渗透测试\7.19\7.19.assets\image-20230719091616896.png)]
KiB Swap: 2097148 total 虚拟内存总大小
192512 used. 已经使用的交换分区大小
1904636 free 空闲
125120 avail Mem 可用内存
进程信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrEf6lM1-1689750869837)(E:\渗透测试\7.19\7.19.assets\image-20230719091938966.png)]
PID | 进程ID |
---|---|
USER | 进程所属用户 |
PR | 优先级 数值越小 优先级越高 |
NI | 优先级 数值越小 优先级越高 |
VIRT | 进程所使用虚拟内存大小 单位是kb |
RES | 进程所使用物理内存大小 单位是kb |
SHR | 共享内存大小 实际使用内存=常驻内存RES - 共享内存SHR |
S | 当前进程的状态 S代表睡眠 R代表运行 |
%CPU | 该进程占用的cpu百分比 |
%MEM | 进程占用内存的百分比 |
TIME+ | 进程占用的cpu时间 |
COMMAND | 进程名 |
问题:如何查看占用CPU最多的进程?
答:交互操作快捷键P,P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列
问题:如果我们发现内存可用量很小,接下来怎么办?
答:查看占用内存最多的进程,使用交互快捷键M(大写):表示将结果按照内存(MEM)从高到低进行降序排列
问题:当我们查看完系统状态,需要做什么?
答:退出,使用q,按键盘上的q,就会回到#提示符的状态。
free查看内存使用情况
命令:free
作用:查看内存使用情况
语法:free -m
选项:-m 表示以mb为单位查看(1g = 1024mb,1mb = 1024kb)
用法一:free -m
示例代码:
#free -m
含义:查看内存使用情况
关于此available,即系统可用内存,用户不需要去计算buffer/cache,即可以看到还有多少内存可用,更加简单直观
第1行Mem数据:
total 内存总数: 1819
used 已经使用的内存数: 774
free 空闲的内存数: 152
shared 共享内存数: 77
buff/Cache块设备缓存区内存数: 892
available可用内存: 746
swap 代表虚拟内存 在物理内存不够时使用
第2行数据是Swap交换分区,也就是我们通常所说的虚拟内存。可以在内存不够使用的情况下当临时内存来使用,交换分
df查看磁盘
命令:df
作用:查看磁盘的空间(disk free)
语法:df [-h]
选项:-h表示可读性较高的形式展示大小
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N6mW8Z4v-1689750869838)(E:\渗透测试\7.19\7.19.assets\image-20230719093448589.png)]
这几列依次是:
ps查看进程命令
命令:ps(process show进程显示)
语法:ps [参数选项]
作用:主要是查看服务器的进程信息
选项含义:
-e:等价于“-A”,表示列出全部(all)的进程
-f : 表示full,显示全部的列(显示全字段)
UID | 该程序正在执行的用户 |
---|---|
PID | 进程ID |
PPID | 该进程的父进程ID 如果找不到 该进程为僵尸进程 |
C | CPU占用率 |
STIME | 进程启动时间 |
TTY | 终端设备 发起该进程的设备识别符号,?表示该进程不由终端发起 |
TIME | 使用CPU时间 |
CMD | 该进程名称或者对应的路径 |
ps -ef | grep crond
查看某个进程的详细信息
场景
小黑用学到的命令,发现某个进程占用CPU很高,希望进一步查看这个简称的信息。
ps -ef 会列出全部进程,但是我们发现进程非常多,我们很难找到自己想要看的进程。这里需要使用过滤命令grep,来过滤掉我们不需要的信息。
用法:ps -ef |grep 想要看到的进程名
示例代码:
#ps -ef |grep crond
含义:查看crond进程的详细情况
注意:查询结果中,如果只有一条则表示没查到对应的进程(这1 条表示刚才ps 指令的自身)。只有查到的结果多余1 条,才表示有对应的进程。
补充:针对上述情况的优化:如果没有对应的进程,则什么都不显示。
思路:在现有的基础之上再次使用管道去处理下(-v 选项表示“排除”)。
netstat查看进程网络访问
命令:netstat
作用:查看网络连接状态
语法:netstat -tnlp
选项:-t:表示只列出tcp 协议的连接;
-n:表示将地址从字母组合转化成ip 地址,将协议转化成端口号来显示;
-l :表示过滤出"state(状态)"列中其值为LISTEN(监听)的连接;
-p:表示显示发起连接的进程pid 和进程名称;
Proto:协议(tcp、upd、http、https、icmp、ssh…)
Recv-Q:接收
Send-Q:发送
Local Address:本地地址
Foreign Address:远程地址
State:状态,listen表示侦听来自远方的TCP端口的连接请求
PID/Program name:进程ID和程序名
kill关闭进程
命令:kill
语法:kill [信号] PID
作用:kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作
信号种类:
用法一:kill [信号编号] PID
示例代码:
#ps -ef |grep crond
查询crond进程信息,想知道它的PID,以便使用kill终止进程
#kill 6925
结束6925的进程,这里使用默认信号,正常结束,如果强制结束,就是kill -9 6925
#ps -ef |grep crond
查询crond进程信息,这次查询是为了确认crond进程是否被终止了,我们发现6925进程已经没有了
#systemctl start crond
使用前面学过的systemctl命令,重启crond服务
#ps -ef |grep crond
查询crond进程信息,这次查询是为了确认crond进程已经重新启动了,我们看到多了一个32934的进程,表明crond已经启动,并且进程ID变化了,这是一个新的进程
备注:在互联网中,经常看到kill -9 进程PID,强制杀死某个进程,kill -l
killall
通过程序的进程名 来杀死一类进程
进程优先级
1、什么是进程优先级?
Linux是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。哪些进程先运行,哪些进程后运行,就由进程优先级来控制
2、查看进程优先级
PR 优先级,数值越小优先级越高。
NI 优先级,数值越小优先级越高。
使用top按"r"来调整
如果要改变某个进程的优先级,就要利用 “r” 交互命令。
改变NICE--->PR
优先级的范围:
-20——19 数字越低,优先级越高,系统会按照更多的cpu时间给该进程
注意:我们能够修改的只有 Ni 的优先级,而不能修改 Pr 的优先级。
步骤1:运行top命令,按r,会提示输入希望修改优先级的进程的PID,这里输入6451,表示想修改firewalld进程的优先级
步骤2:输入6451后回车,提示希望修改的具体数字,这个数字是从-20到19,这里输入5,数字越大,优先级别越低,所以,这里是降低了firewalld的优先级
步骤3:输入5后,按回车,会发现6451进程的NI, 从0变成了5,PR从20变成了25
2)命令行使用renice调整
命令:renice
语法:renice [NI优先级设置的数字] 想调整的进程ID
[root@localhost ~]# renice -5 6451
含义:将6451进程的NI优先级设置为-5,实际效果是提高了6451进程的优先级
注意:这里的-5代表设置成-5,不是所谓加减的关系,如果当前NI的值是10,当设置成-5后,NI的值会变为-5.
② 程序启动时指定优先级(nice),只能调整不在运行的程序。
步骤1:将程序停止
步骤2:启动并制定优先级
步骤3:确认优先级(查看优先级)
命令:nice
语法:nice [NI优先级设置的数字] 想调整的进程名
启动进程时,通常会继承父进程的 nice级别,默认为0
#ps -ef |grep crond
含义:查看crond的进程信息
目的:找出crond的PID,用于结束进程
#kill -9 crond的进程ID
含义:结束crond的进程
目的:nice只能修改不在运行的进程的优先级
#ps -ef |grep crond
含义:查看crond的进程信息
目的:确认crond进程是不是已经停止了
#nice -n -5 crond
含义:启动crond进程,将NI设置成-5
#ps -ef |grep crond
含义:查看crond的进程信息
目的:找出crond的PID,用于查看此进程的优先级
#top -p crond的进程ID
含义:使用TOP命令,只查看和crond进程相关的信息
dpkg
软件安装 更新 移除
.deb
dpkg 是 Debian Linux 系统中的一个核心工具,用于管理软件包的安装、配置和卸载。下面是对 dpkg 的详细介绍:
- 功能:dpkg 可以对 Debian 系统中的软件包进行以下操作:
- 安装软件包:从本地文件或远程仓库安装软件包。
- 卸载软件包:彻底删除已安装的软件包及其相关文件。
- 配置软件包:自动或手动配置软件包的设置,包括配置文件等。
- 更新软件包:更新软件包的版本。
- 查询软件包:查看已安装软件包的信息,如版本号、依赖关系等。
- 使用方法:dpkg 命令的常见使用方法包括:
- 安装软件包:使用
dpkg -i <package-file>
命令安装指定的软件包文件。 - 卸载软件包:使用
dpkg -r <package-name>
命令卸载指定的软件包。 - 更新软件包:使用
dpkg -i <package-file>
命令安装新版本的软件包文件来更新软件包。 - 查询软件包:使用
dpkg -l <package-name>
命令查询指定软件包的信息。 - 列出deb包的内容 dpkg -c
- 查找已安装的软件 在系统中都有哪些文件 dpkg -L
- 安装软件包:使用
- 高级功能:
- 依赖关系管理:dpkg 可以处理软件包之间的依赖关系,确保安装或升级软件包时满足必要的依赖条件。
- 预/后安装/卸载脚本:dpkg 支持在安装或卸载软件包前后运行相应的脚本,以执行特定的配置或清理操作。
- 包状态管理:dpkg 跟踪每个软件包的状态,可以通过 dpkg 的命令和选项来查询已安装软件包的状态。
总结:dpkg 是 Debian Linux 系统中一个重要的软件包管理工具,它提供了管理软件包的基本功能,如安装、卸载、配置和更新等。通过 dpkg,用户可以轻松地管理软件包,并确保其系统处于最新和稳定的状态。
apt
在debian中的shell前端软件包管理器
需要超级管理员权限 root
下面是一些常见的 apt
命令及其用法:
-
更新软件包列表:
sudo apt update
这会从软件源中获取最新的软件包信息,以确保您使用的是最新的软件包版本。
-
安装软件包:
sudo apt install package_name
将根据软件包名称安装指定的软件包及其所有依赖项。
-
升级已安装的软件包:
sudo apt upgrade
该命令将升级系统上所有可用的软件包到最新版本。
-
删除软件包:
sudo apt remove package_name
移除指定的软件包,但保留其相关的配置文件。
-
完全删除软件包:
sudo apt purge package_name
该命令将卸载指定的软件包,并删除其相关的配置文件。
-
搜索软件包:
apt search search_term
根据提供的搜索项搜索可用的软件包。
-
显示软件包信息:
apt show package_name
显示指定软件包的详细信息,包括版本、描述、大小等。
apt
命令提供了对软件包的快速管理和操作功能。使用 apt
可以轻松地安装、更新和删除软件包,方便系统管理员和用户管理他们的系统中的软件。