文件系统介绍
根目录结构及其功能
系统目录结构:
目录 | 内容 |
---|---|
bin | 目录全称(binary) 存放二进制命令文件(普通用户可以使用) |
sbin | 目录存放二进制命令文件(root用户可以使用) |
etc | 目录存放软件程序或系统程序配置文件 |
lib | 目录会存放需要调取库文件信息 旧软件程序调取库文件 |
lib64 | 目录会存放需要调取库文件信息 新软件程序调取库文件 |
media | 可以存放实例视频或图片 可以用于作为默认挂载点 |
mnt | 可以用于作为默认挂载点 |
opt | 目录存放第三方软件程序数据 等价于Windows program files |
usr | 目录存放第三方软件程序数据 等价于Windows program files |
root | 用户信息存放家目录 root用户的家 ~ |
home | 用户信息存放家目录 普通用户的家~ |
boot | 目录存放系统启动相关的数据 |
dev | 目录会存放一些设备文件信息 |
var | 目录全称(variable),用于存放日志文件的 |
tmp | 目录用于临时存放文件信息 类似于Windows 回收站 |
proc | 由内核组成,目录中会存放系统内核配置信息或服务进程信息,不会占用磁盘空间,只会占用内存空间 |
系统配置信息
文件 | 路径 |
---|---|
网卡配置(centos) | /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0 |
网卡配置(kali) | /etc/systemd/networkd.conf |
主机名 | /etc/hostname |
域名配置文件 | /etc/resolv.conf |
环境变量 | /etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc |
开机自动加载命令文件 | /etc/rc.d/rc.local |
用户登录信息提示文件 | /etc/motd |
系统版本信息 | /etc/[redhat/centos/os(kali是os)]-release |
用户相关文件信息 | /etc/passwd |
cpu相关信息,包括型号、主频、内核信息等 | /proc/cpuinfo |
操作系统版本信息 | /proc/version |
系统全局 cron 配置文件 | /etc/crontab |
docker配置文件 | |
nginx配置文件 | |
nginx启动文件 | |
配置函数信息的文件 | /etc/init.d/functions |
/etc/docker/daemon.json | |
docker代理配置文件 | /etc/systemd/system/docker.service.d/http-proxy.conf |
目录 | 路径 |
---|---|
自动加载运行脚本目录 | /etc/profile.d/ |
系统安装软件目录(rpm 手动方式 yum 自动方式) | |
存放独立 cron 配置文件的目录 | /etc/cron.d/ |
每个用户的 cron 表存储目录 | /var/spool/cron/ |
日志信息
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们 需要的信息。
内核及系统日志由系统服务rsyslog统一进行管理,日志格式基本相似
用户日志记录系统用户登录及退出系统的相关信息
程序日志由相应的应用程序进行独立管理。如:web服务,ftp服务 常见日志文件
日志文件 | 作用 |
---|---|
/var/log/secure | 登录日志。记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录, 比如 SSH登录, su登录,切换用户, sudo授权,甚至添加用户和修 改用户密码都会记录在这 个日志文件中。新版的ubuntu、debian、kali已经没有这个文件了 , 换成了 /var/log/auth.log |
/var/log/message | 通用的系统活动日志。记录内核消息、系统服务(邮件、cron等)的常规信息、非关键网络错误等。 |
/var/log/cron | 每当cron进程开始一个工作时,就 会将相关信息记录在这个 文件中。 |
/var/log/syslog | 所有系统活动信息(比 messages 更全面)。包含内核、服务、应用等除认证外的所有信息。 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、 关机事件。同样这个文件也是一个二进制文件,不能直接编辑查看, 而需要使用 last命令来查看 |
/var/run/utmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不 断变化,只记录当前登录用户的信息。同样这个文件不能直接编辑查 看,而要使用 w,who,users等命令来查询 |
/var/log/btmp | 记录所有失败登录日志信息。这个文件是二进制文件,不能直接编辑 查看,使用 lastb命令或 last -f /var/log/btmp 命令可以查看btmp文件。 |
/var/log/cups | 涉及所有打印信息的日志。 |
/var/log/faillog | 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中 |
/var/log/messages | 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大 多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日 志文件。此外, mail,cron,daemon,kern和auth等内容也记录在var/log/messages |
/var/log/dmesg | 包含内核缓冲信息( kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用 dmesg命令直接查看内核自检信息 |
/var/log/auth.log | 包含系统授权信息,包括用户登录和使用的权限机制等。 |
/var/log/boot.log | 包含系统启动时的日志。 |
/var/log/daemon.log | 包含各种系统后台守护进程日志信息。 |
/var/log/dpkg.log | 包括安装或 dpkg命令清除软件包的日志。 |
/var/log/kern.log | 包含内核产生的日志,有助于在定制内核时解决问题。 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文 件,不能直接编辑查看,而要使用 lastlog命令查看 |
/var/log/user.log | 记录所有等级用户信息的日志。 |
/var/log/alternatives.log | 更新替代信息都记录在这个文件中。 |
/var/log/anaconda.log | 在安装Linux时,所有安装信息都储存在这个文件中。 |
/var/log/yum.log | 包含使用 yum安装的软件包信息。 |
/var/log/maillog /var/log/mail.log | 包含系统运行电子邮件服务器的日志信息。例如, sendmail日志信息就全部送到这个 文件中 |
比较重要的几个日志:
登录失败记录:/var/log/btmp #lastb
最后一次登录:/var/log/lastlog #lastlog
登录成功记录: /var/log/wtmp #last
登录日志记录:/var/log/secure
目前登录用户信息:/var/run/utmp #w、who、users
历史命令记录:history
仅清理当前用户:history -c
网卡配置
1 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
更改配置需要重启网卡systemctl restart network
或 service network restart
域名解析配置
1 | vim /etc/resolv.conf #域名解析配置文件 |
系统管理
环境变量
和变量 环境变量 别名相关的配置文件信息:/etc/profile
、/etc/bashrc
、~/.bash_profile
、~/.bashrc
、/etc/profile.d/
网安关注应急效应,异常占用资源、进程关闭后再次运行,有可能是 profile 被植入脚本运行命令。/etc/profile
、/etc/bashrc
、两个文件写到任意一个都会受到影响(把某个恶意跑进程的脚本放进去)。局部变量优于全局变量
如果想让变量重启后仍然有效就修改这些文件。
其他
文件时间信息分类
文件时间信息分类 | 英文全称 | 缩写 | 触发条件 |
---|---|---|---|
文件修改时间 | modified time | mtime | 文件信息内容发生变动时,会修改调整此时间信息 |
文件访问时间 | access time | atime | 文件信息内容被访问读取时,会修改调整此时间信息 |
文件改变时间 | change time | ctime | 文件属性信息发生变动时,会修改调整此时间信息 |
inode与block
文件索引-inode 数据信息索引 每创建一个文件可用的索引次数就会减少
文件大小-block 数据信息容量 文件中的信息内容不断添加,数据块就会不断减少
查看相关信息:
df -i --inode 可用数为0 表示磁盘空间不足
df block 可用数 为0 表示磁盘空间不足
inode:默认大小为128或者256字节
block:默认大小1-4kb
由于磁盘分区都比较大,所以一个磁盘中会创建出大量的inode和block
本质上有数字编号和实际存储空间对应 便于检索数据信息 —指针 库管 会议 仓库提货过程
存储的数据文件中包含数据文件属性
描述数据的数据 – 元数据
系统进程
程序(Program)是经开发编译后形成的静态可执行代码集合,是数据与指令的有序封装(如磁盘中存储的wechat.exe
或nginx
二进制文件),其生命周期独立于运行状态,可长期保存在存储介质中。
当程序被加载到内存并开始执行时,便转化为进程(Process)—— 它是程序的动态运行实例。此时,操作系统会为其分配专属的系统资源(如内存空间、CPU 时间片、文件描述符等),并记录其运行状态(如就绪、运行、阻塞等)。同时,进程会关联明确的所属用户,受系统权限管控。
简言之,程序是 “静态的代码文件”,而进程是 “动态的执行过程”。例如,双击wechat.exe
后,操作系统将其加载到内存并启动执行,此时任务管理器中显示的 “微信” 进程,便是该程序的运行实例。
进程与程序的本质区别
维度 | 程序(Program) | 进程(Process) |
---|---|---|
存在形态 | 静态:以二进制文件、脚本等形式存储于磁盘 | 动态:加载到内存中执行的指令流与数据集合 |
资源关联 | 不占用系统运行时资源(仅占用存储资源) | 占用 CPU、内存、I/O 等实时系统资源 |
生命周期 | 长期存在(除非主动删除文件) | 随执行开始而创建,随任务完成或异常终止而消亡(有明确生命周期) |
核心属性 | 仅包含代码逻辑与静态数据 | 包含运行状态、资源句柄、进程 ID(PID)、所属用户等动态元信息 |
理解进程与程序的区别,是系统运维的基础:程序是 “待执行的蓝图”,而进程是 “正在施工的现场”—— 运维的核心工作,正是通过监控、管理这些 “现场”,确保系统按预期稳定运行。
根据进程生命周期,存在两种特殊进程情况:
僵尸进程:
异常进程 任务没处理完子进程崩溃了,就会出现僵尸进程(Z) 儿子死了父亲还在 关注 木马病毒 产生大量Z 会占用大量内存资源
孤儿进程:
异常进程 任务处理完毕告知父进程时,父进程异常了,产生孤儿进程,系统会自动回收孤儿进程 了解
查看当前静态进程情况
ps -ef
|ps aux
1 | ps aux #USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND |
以下是 ps aux
和 ps -ef
命令中所有列的英文缩写及含义对照表:
英文缩写 | 含义说明 | 出现命令 |
---|---|---|
USER | 进程所属的用户名(用户标识,字符串形式) | ps aux |
PID | Process ID,进程唯一标识符(进程 ID) | ps aux、ps -ef |
%CPU | 进程占用的 CPU 资源百分比(单位:%) | ps aux |
%MEM | 进程占用的物理内存百分比(单位:%) | ps aux |
VSZ | Virtual Set Size,虚拟内存大小(单位:KB,包含物理内存和交换空间等) | ps aux |
RSS | Resident Set Size,实际占用的物理内存大小(单位:KB,不包含交换空间) | ps aux |
TTY | 进程关联的终端设备(? 表示无终端关联,通常为后台进程) | ps aux、ps -ef |
STAT | Process State,进程状态(如 R 运行、S 睡眠、Z 僵尸、T 停止等) | ps aux |
START | 进程启动的时间(格式随系统时间范围变化,如时分、月日等) | ps aux |
TIME | 进程累计占用的 CPU 时间(格式:时:分: 秒) | ps aux、ps -ef |
COMMAND | 启动进程的完整命令及参数 | ps aux |
UID | User ID,进程所属用户的 ID(用户标识,数字形式) | ps -ef |
PPID | Parent Process ID,父进程的 ID(标识当前进程的父进程) | ps -ef |
C | CPU 使用率(整数形式,反映进程近期的 CPU 占用情况,精度低于 % CPU) | ps -ef |
STIME | 进程启动的时间(格式更紧凑,通常为时分或月日,随系统时间范围变化) | ps -ef |
CMD | 启动进程的命令及参数(可能因长度限制被截断) | ps -ef |
查看当前动态进程情况
top
输出分为 系统全局状态区 与 进程详情区,两者共同构成系统实时运行快照。
在 Linux 系统运维中,top
命令是实时监控进程资源与系统性能的核心工具。它通过动态刷新的界面,提供 CPU、内存、进程状态等关键指标,帮助管理员快速定位资源瓶颈与异常进程。
top与 ps 命令的核心差异:
工具 | 特性 | 适用场景 |
---|---|---|
ps | 静态快照,捕获某一时刻的进程状态(如 ps -aux )。 | 记录历史状态、排查进程启动参数。 |
top | 动态监控,实时刷新资源占用与进程行为(默认 3 秒 / 次)。 | 实时性能分析、异常进程定位。 |
系统全局状态区
系统全局状态区为输出的上半部分,以典型输出为例:
1 | top - 09:27:45 up 5 days, 7:45, 4 users, load average: 0.00, 0.01, 0.05 |
第一行(系统基础信息)
09:27:45
:当前系统时间。up 5 days, 7:45
:系统已连续运行 5 天 7 小时 45 分钟(未重启)。4 users
:当前登录用户数(含本地终端与远程连接)。load average: 0.00, 0.01, 0.05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
:系统平均负载,分别对应过去 1 分钟、5 分钟、15 分钟的活跃进程数。
- **关键逻辑**:负载值代表处于 **可运行状态(`R`)** 或 **不可中断休眠状态(`D`)** 的进程数平均值。
- **健康指标**:若 1 分钟负载值超过 CPU 核心数(如 4 核 CPU 负载 >4),表明系统短期过载;若 15 分钟负载持续偏高,需排查长期资源瓶颈。
2. **第二行(进程总数统计)**
- `123 total`:系统总进程数。
- `1 running`:处于 `R` 状态的进程数(正在占用或等待 CPU)。
- `121 sleeping`:处于 `S`(可中断休眠)或 `D`(不可中断休眠)状态的进程数。
- `1 stopped`:处于 `T`(停止)状态的进程数(如被 `Ctrl+z` 暂停的 `ping` 进程)。
- `0 zombie`:僵尸进程(`Z` 状态)数量,若大于 0 需检查父进程是否未回收资源。
3. **第三行(CPU 资源占用)**
- **`us`:用户态进程占用 CPU 的百分比(如应用程序)**。
- `sy`:内核态进程占用 CPU 的百分比(如系统调用、进程调度)。
- `ni`:调整过优先级(`nice` 值非 0)的用户态进程占用 CPU 的百分比。
- `id`:CPU 空闲百分比(数值越高,系统越空闲)。
- **`wa`:CPU 等待 I/O 操作(如磁盘读写)的百分比,若长期高于 5% 需排查存储性能。**
- `hi`:硬中断(如硬件设备触发的中断)占用 CPU 的百分比。
- `si`:软中断(如内核定时器、网络数据包处理)占用 CPU 的百分比。
- `st`:虚拟化环境中,物理 CPU 被其他虚拟机占用的百分比(`st` 过高可能意味着宿主机资源竞争)。
4. **第四、五行(内存与交换分区)**
- `KiB Mem`(物理内存):
- `total`:总容量;`free`:完全空闲内存;`used`:进程直接占用内存;`buff/cache`:磁盘缓存(可释放供其他进程使用)。
- `KiB Swap`(虚拟内存):
- `avail Mem`:新进程可使用的总内存(含 `free` 及可释放的 `buff/cache`)。
##### 进程详情区(下半部分)
以典型输出为例:
```bash
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
53720 root 20 0 0 0 0 S 0.3 0.0 0:18.08 kworker/1:1
1 root 20 0 202396 7300 4184 S 0.0 0.4 5:01.00 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.93 kthreadd
字段说明:
字段 | 含义说明 |
---|---|
PID | 进程唯一标识,操作进程的核心索引(如 kill 53720 )。 |
USER | 进程所属用户,用于权限追溯(如 root 进程通常拥有更高权限)。 |
PR | 进程调度优先级(范围 0-39,值越低优先级越高,内核动态调整)。 |
NI | nice 值(优先级偏移量,范围 -20~19,值越低优先级越高,用户可通过 nice 命令调整)14。 |
VIRT | 进程占用的虚拟内存总量(包括物理内存、交换分区、未使用的分配内存),类似 “建筑面积”。 |
RES | 进程实际使用的物理内存(不包括交换分区),类似 “实际使用面积”。 |
SHR | 进程共享的内存量(如动态链接库),类似 “公摊面积”。 |
S | 进程状态(R 运行、S 休眠、T 停止、Z 僵尸等)。 |
%CPU | 进程占用 CPU 的百分比(过去 3 秒内的平均值)。 |
%MEM | 进程占用物理内存的百分比(相对于总物理内存)。 |
TIME+ | 进程累计占用的 CPU 时间(精确到 0.01 秒)。 |
COMMAND | 启动进程的命令(含参数时会截断显示,按 c 可显示完整路径)。 |
核心功能与快捷键
top
命令以交互式界面实时展示系统状态,支持以下核心操作:
基础交互
h
或?
:调出帮助文档,查看所有快捷键与功能说明。q
:退出监控界面。s
或d
:调整刷新间隔(单位:秒),默认 3 秒刷新一次。
资源排序
P
:按 CPU 使用率(%CPU
)降序排序,快速定位高负载进程。M
:按内存使用率(%MEM
)降序排序,排查内存占用异常。T
:按累计 CPU 时间(TIME+
)排序,识别长期占用资源的进程。
视图优化
1
:展开多核 CPU 视图,显示每个物理核心的负载详情(如%Cpu0
、%Cpu1
)。z
:启用颜色高亮,区分不同数据区域(如红色标记高负载进程)。b
:高亮显示处于R
(运行)状态的进程,直观识别活跃任务。
高级控制
k
:终止进程(输入 PID 后可指定信号,如9
强制终止)。r
:调整进程优先级(通过nice
值,范围 -20~19,值越小优先级越高)。c
:切换显示进程完整命令行(含参数),避免因名称截断导致的误判。
关键指标与异常排查
性能瓶颈定位
- CPU 过载:若
%CPU
长期高于 80%,按P
排序找出高负载进程,结合ps -fp <PID>
分析代码逻辑或考虑扩容。 - 内存泄漏:若
%MEM
持续增长且avail Mem
下降,按M
排序排查异常进程,使用pmap
或valgrind
分析内存分配。 - 磁盘 I/O 瓶颈:若
wa
长期高于 10%,使用iotop
定位高 I/O 进程,优化存储或升级硬件。
- CPU 过载:若
进程状态异常
- 僵尸进程(
Z
状态):终止父进程(kill <PPID>
)或修复程序逻辑(确保调用wait()
回收子进程资源)。 - 不可中断进程(
D
状态):可能因磁盘 I/O 阻塞,使用strace
跟踪系统调用或检查存储设备健康状态。
- 僵尸进程(
虚拟化环境监控
- 若
st
持续高于 10%,表明宿主机资源不足,需迁移虚拟机或增加物理 CPU 核心。
- 若
数据保存与高级用法
批处理模式记录日志
1
top -b -n 5 > /tmp/top_monitor.log # 记录 5 次刷新结果到文件
-b
:以批处理模式运行,适合脚本调用或离线分析。-n 5
:指定刷新次数,避免无限输出。
自定义显示字段
- 按
f
进入字段选择界面,通过方向键添加 / 删除字段(如CODE
代码内存、DATA
数据段内存)。 - 按
o
调整字段顺序(如将%CPU
列移至首位)。
- 按
多进程监控
1
top -p 1234,5678 # 同时监控多个进程(PID 1234 和 5678)
进程状态(STAT)信息
在 Linux 系统中,通过ps
、top
等命令查看进程时,状态标识(如R
、S
、Z
等)直观反映了进程的当前行为。以下是各状态及相关符号的说明:
核心状态标识
进程状态由内核根据其资源占用、调度情况动态标记,核心状态标识(Process State Codes)如下:
R
(Running / Runnable,运行状态)
进程处于 “可被 CPU 调度” 的状态:要么正在占用 CPU 执行指令,要么已就绪(等待 CPU 分配时间片)。此时进程位于内核的 “就绪队列” 中,是系统中 “活跃” 的典型代表。S
(Interruptible Sleep,可中断休眠状态)
进程因等待某事件(如 I/O 操作完成、信号触发、定时器超时等)而暂停执行,此时不占用 CPU 资源。该状态可被外部信号(如SIGINT
)中断并唤醒(例如通过kill
命令发送信号)。状态衍生符号(优先级相关):
S<
:表示进程处于高优先级可中断休眠状态(优先级高于默认值),内核会优先调度其唤醒。SN
:表示进程处于低优先级可中断休眠状态(优先级低于默认值),调度优先级较低。
T
(Stopped / Traced,停止 / 跟踪状态)
进程被主动暂停执行,通常由以下场景触发:- 收到暂停信号(如
SIGSTOP
),例如通过Ctrl+z
暂停前台进程(如ping 223.5.5.5
执行时,Ctrl+z
会将其暂停为T
状态); - 被调试器(如
gdb
)跟踪,处于断点调试状态。
该状态的进程可通过
SIGCONT
信号恢复运行(如fg
命令将后台暂停进程调至前台),适用于暂不明确进程作用时 —— 先暂停而非直接kill
,降低误操作风险。操作示例:
暂停进程:
ping 223.5.5.5
执行中按Ctrl+z
,进程进入T
状态;查看暂停任务:
jobs
命令(仅显示当前终端会话创建的任务);恢复进程:
fg %1
(将编号为 1 的暂停任务调至前台继续运行);彻底终止:
Ctrl+c
直接终止前台进程,或kill
命令发送终止信号。
- 收到暂停信号(如
D
(Uninterruptible Sleep,不可中断休眠状态)
进程因等待 “不可中断的系统资源”(如磁盘 I/O、硬件设备响应)而进入深度休眠,不响应任何外部信号(包括kill -9
)。其设计目的是确保关键资源操作的原子性(如 MySQL 执行大量数据写入时,需等待磁盘同步完成,避免数据一致性问题)。注意:
D
状态进程虽不直接占用 CPU,但会锁定相关资源,若长期存在可能暗示硬件故障(如磁盘读写超时)。Z
(Zombie,僵尸状态)
子进程已终止(退出),但父进程未调用wait()
系列系统调用回收其资源(如进程 ID、退出状态等),导致其残留于进程表中。僵尸进程不占用 CPU、内存等实际资源,但会消耗进程表项(系统进程 ID 数量有限),积累过多可能导致新进程无法创建。
状态辅助符号
除核心状态外,ps
命令还会显示以下符号,用于描述进程的附加属性:
s
:进程为会话首进程(Session Leader),通常是进程组的父进程,负责管理整个进程组的生命周期(如终端启动的命令进程多为会话首进程)。<
:进程运行在高优先级(对应S<
状态,优先级值低于默认,Linux 优先级范围为 - 20~19,值越小优先级越高)。N
:进程运行在低优先级(对应SN
状态,优先级值高于默认)。+
:进程属于前台进程组,直接接收终端输入(如当前终端执行的ls
命令进程)。l
:进程包含多个线程(Lightweight Process),多线程进程可并行处理多个任务(如微信同时运行文字聊天、视频通话等功能,分别由不同线程执行),提升 CPU 利用率与响应速度。
结合ps
、top
等工具查看进程状态变化,通过状态标识可快速判断进程是否正常运行、是否存在资源竞争、是否需要干预(如终止僵尸进程、排查 D 状态进程的资源瓶颈)。
进程控制:kill 命令
kill
命令通过向进程发送 信号(signal) 实现进程控制(终止、暂停、重启等),核心语法为:
1 | kill [参数] <进程标识符(PID)> |
核心参数说明
-l
:列出所有可用信号(共 64 种,格式如1) SIGHUP 9) SIGKILL
)。-s <信号>
:指定发送的信号(可用名称或编号,如-s SIGKILL
或-9
)。-p
:仅输出目标进程的 PID,不发送任何信号(用于验证进程存在性)。
常用信号及场景
信号名称 | 编号 | 功能说明 |
---|---|---|
SIGHUP | 1 | 通知进程重新加载配置文件(如 nginx 服务重载)。 |
SIGINT | 2 | 中断进程(通常由 Ctrl+C 触发,可被进程捕获处理)。 |
SIGKILL | 9 | 强制终止进程(不可被捕获或忽略,适用于无法正常终止的进程)。 |
SIGTERM | 15 | 优雅终止进程(默认信号,允许进程释放资源后退出,优先推荐使用)。 |
SIGSTOP | 19 | 暂停进程(不可被忽略,需配合 SIGCONT 恢复)。 |
SIGCONT | 18 | 恢复被 SIGSTOP 暂停的进程。 |
注意事项
权限要求:仅进程所有者或
root
可发送信号(普通用户无法终止其他用户的进程)。强制终止风险:
SIGKILL
(信号 9)可能导致数据丢失(如未保存的文件),尤其对存储服务(如数据库)需谨慎使用。信号重试:部分守护进程可能忽略
SIGTERM
,可先尝试SIGTERM
,无效再用SIGKILL
。
系统平均负载
平均负载定义为 单位时间内,系统中处于「可运行状态(R)」和「不可中断状态(D)」的平均进程数(即活跃进程数),与 CPU 使用率无直接关联:
可运行状态(R):正在占用 CPU,或等待 CPU 调度的进程(
ps
命令可见)。不可中断状态(D):等待硬件 I/O 响应的进程(如磁盘写入时的保护机制,中断会导致数据一致性问题,
ps
命令可见为D
状态)。
系统平均负载的合理范围
系统平均负载的合理范围与 CPU 核心数强绑定。理想状态:平均负载 ≈ CPU 核心数(每个核心恰好运行 1 个进程)。不同核心数下,相同负载的意义截然不同:
CPU 核心数 | 平均负载 = 2 的含义 |
---|---|
4 核 | CPU 使用率 50%(50% 资源空闲) |
2 核 | CPU 使用率 100%(资源刚好用满) |
1 核 | CPU 使用率 200%(50% 进程需等待 CPU) |
时间维度的解读
平均负载包含 1 分钟、5 分钟、15 分钟 三个值,需结合判断趋势:
三者接近 → 负载平稳;
1 分钟值 ≫ 15 分钟 → 近期负载突增(需紧急排查);
1 分钟值 ≪ 15 分钟 → 近期负载下降(关注历史瓶颈)。
告警建议:当平均负载超过 CPU 核心数的 70% 时,建议介入分析(需结合历史数据动态调整阈值)。
与 CPU 使用率的区别
平均负载涵盖 等待 CPU、等待 I/O、进程调度 的进程,而 CPU 使用率仅统计 CPU 繁忙程度,二者在不同场景下表现不同:
序号 | 负载升高场景 | 平均负载变化 | use% | sys% | wait% | CPU 整体使用率 | 磁盘 IO 消耗 |
---|---|---|---|---|---|---|---|
01 | CPU 密集型进程 | 升高 | 消耗多 | 消耗少 | 消耗少 | 使用率高(某个核心) | 磁盘消耗小 |
02 | IO 密集型进程 | 升高 | 消耗少 | 消耗多 | 消耗多 | 使用率低 | 磁盘消耗大 |
03 | 大量进程产生 | 升高 | 消耗多 | 消耗少 | 消耗多 | 使用率高(所有核心) | 磁盘消耗小 |
问题排查核心思路
查看负载:通过
uptime
/top
获取 1/5/15 分钟负载值,判断趋势。分析 CPU:用
mpstat
查看多核负载、iowait 等指标,定位瓶颈类型(CPU 计算 / IO 等待)。定位进程:通过
pidstat
/top
追踪高负载进程(CPU/IO 占用异常的进程)。日志溯源:结合进程所属服务的日志,分析代码逻辑或资源配置问题。
压力测试与监控工具:
stress是Linux系统压力测试工具,可以用作异常进程模拟平均负载升高的场景。
mpstat:是多核CPU性能分析工具,用来实时查看每个CPU的性能指标,以及所有CPU的平均指标;
pidstat:是常用的进程性能分析工具,用来实时查看进程的CPU、内存、1/0以及上下文切换等性能指标;
1 | yum install -y sysstat stress # sysstat含mpstat/pidstat,stress用于压力测试 |
系统管理命令
1 | # history 查看历史命令 |
文件管理
文件类型
①文件属性索引节点 --inode(唯一的)–身份证号
②文件属性信息和文件权限信息
③文件硬链接数:查看文件数据信息的多个门(类似于挂载)
④文件属主信息:文件管理者/文件创建者
⑤文件属组信息/所属用户组信息: 便于进行权限整体分配
⑥文件数据信息大小尺寸
⑦文件数据最后修改时间信息(Mtime)
文件类型:告诉系统管理者这个文件是什么类型 f(-) d c b s p l
文件类型 | 字符 | 含义 |
---|---|---|
普通文件 | - | 文本 图片等 |
目录文件 | d | 目录 |
链接字文件 | | | ==Windows 桌面快捷方式 |
块设备文件 | b | 存储数据以供系统存取的接口设备,简单而言就是硬盘。 |
字符设备文件 | c | 即串行端口的接口设备,例如键盘、鼠标等等。 |
套接字文件 | s | 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 |
管道文件 | p | FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。 |
软连接与硬链接:
软连接 l
硬链接 f
软连接:可以方便调取数据信息
复制连接的时候注意 复制的原文件的inode 是真实的文件
注意: 软链接的inode 和原文件的inode 是不一样的
硬链接的inode和原文件的inode是完全一样的
软链接是一个新的文件 删除不会有影响
删除硬链接会删除原文件(如果有多个硬链接,删除到最后一个硬链接会删除原文件)
修改硬链接 即修改原文件
文件管理命令
1 | #1 mkdir |
用户及权限管理
用户介绍
用户信息: 可以作为系统数据或者程序进程操作管理者
用户组信息:可以将多个系统用户进行整合,方便统一对多个用户的权限进行管理
用户
字符 | 含义 |
---|---|
u | 所属主 uid |
g | 所属组 gid |
o | 其他人 others |
a | 所有人 all |
用户相关文件信息配置文件:/etc/passwd
以:为分隔符 分为若干部分
1 | 用户名:密码占位符:用户ID(UID):组ID(GID):用户描述:家目录:登录Shell |
用户名:字符串(如root),用于用户登录,长度限制为 32 字符。
密码占位符:通常为x,表示密码已加密存储在/etc/shadow中。若为空则表示无需密码登录(危险)。
UID:整数,0 为 root 用户,1-999 为系统用户,1000 + 为普通用户。
GID:对应/etc/group中的主组 ID。
用户描述:可选信息(如John Doe),通常用于注释。
家目录:用户登录后的默认目录(如/home/user),root 用户为/root。
登录 Shell:用户登录后使用的 Shell 程序(如/bin/bash),/sbin/nologin表示禁止登录。
用户加密密码和密码策略:/etc/shadow
1 | 用户名:加密密码:最后修改日期:最小修改间隔:最大修改间隔:警告期:非活跃期:过期日期:保留字段 |
加密密码使用$id$salt$hash
格式存储(如 $6$...
表示 SHA-512),!
或 *
表示账户锁定。
用户组信息:/etc/group
权限介绍
字符 | 权限 |
---|---|
w—4 | 写权限 |
r----2 | 读权限 |
x----1 | 执行权限(脚本文件先赋权才能再执行) |
r 读权限 4
针对文件:利用此权限可以看到文件中的内容 cat
针对目录:可以看到目录下有什么数据 ls/目录
w 写权限 2
针对文件:利用此权限可以编辑文件中的内容 vim echo> >>
针对目录: 利用此权限可以在目录中创建 删除文件信息 修改文件名称信息
x 执行权限 1
针对文件:利用此权限 执行脚本信息
针对目录:利用此权限可以切换到目录中
另 X:针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患)
企业真实场景权限配置:
默认配置:
文件权限: 644 属主拥有读和写写权限 属组和其他用户只有读权限
目录权限: 755 属主拥有查看编辑进入权限 属组和其他用户只有查看进入权限
严格权限:
文件权限: 600 只有属主有读和写权限
目录权限: 700 只有属主有读写和进入权限
特殊权限
Linux 中的文件权限除了常见的读(r
)、写(w
)、执行(x
)权限外,还有三个特殊权限:SetUID
(SUID)、SetGID
(SGID)和Sticky Bit
。它们用于解决一些特定的场景需求,通常设置于可执行文件或目录上,提供额外的权限控制功能。
SetUID(SUID)
符号表示:
s
(出现在文件所有者的执行权限位置)八进制表示:
4
(如4755
)作用:
- 当可执行文件设置了 SUID 权限时,任何用户在执行该文件期间,会临时获得该文件所有者的权限。
- 核心目的:允许普通用户以文件所有者的身份执行特定任务(通常是需要特权才能完成的任务)。
经典例子:
/usr/bin/passwd
- 普通用户(如
user1
)需要修改自己的密码,密码最终存储在/etc/shadow
(该文件只有root
可读写)。 passwd
命令被设置了 SUID 且所有者是root
(权限-rwsr-xr-x
)。- 当
user1
执行passwd
时,进程临时获得root
权限,从而能修改/etc/shadow
。
- 普通用户(如
设置与查看:
- 设置:
chmod u+s 文件名
或chmod 4xxx 文件名
(e.g.,chmod 4755 myprogram
) - 查看:如果所有者原本有
x
权限,ls -l
中所有者执行位显示为s
,如果所有者原本没有x
权限,则执行位显示为S
。
- 设置:
重要安全提示: SUID 权限非常强大且危险性很高。不当设置(尤其是对脚本或不可信程序)会带来严重安全漏洞。应仅授予绝对必要且经过严格审查的可执行文件。
SetGID(SGID)
符号表示:
s
(出现在所属组的执行权限位置)八进制表示:
2
(如2755
)作用(取决于应用对象):
- 应用于可执行文件:
- 与 SUID 类似,但作用于组。
- 任何用户在执行设置了 SGID 的文件时,会临时获得该文件所属组的权限。
- 目的:允许用户以文件所属组的身份执行任务(通常用于共享资源访问)。
- 应用于目录:
- 这是 SGID 更常见且重要的用途。
- 在设置了 SGID 的目录中,任何用户在此目录下创建的新文件或子目录,其所属组自动继承该目录的所属组,而不是用户自己的默认主组。
- 核心目的:强制协作共享。确保在共享目录中创建的所有文件都属于同一个特定组,方便组成员共同管理,无需手动修改组权限。
- 应用于可执行文件:
经典例子(目录): 项目共享目录
/shared/projectX
- 设置所属组为
projectx-team
:chgrp projectx-team /shared/projectX
- 设置 SGID:
chmod g+s /shared/projectX
或chmod 2775 /shared/projectX
- 现在,无论
userA
(主组groupA
)还是userB
(主组groupB
)在/shared/projectX
下创建文件report.txt
,该文件的所属组都会是projectx-team
(而不是groupA
或groupB
)。
- 设置所属组为
设置与查看:
- 设置:
chmod g+s 文件名/目录名
或chmod 2xxx 文件名/目录名
(e.g.,chmod 2775 sharedir
) - 查看:如果组原本有
x
权限,ls -l
中组执行位显示为s
,如果组原本没有x
权限,则组执行位显示为S
。
- 设置:
安全提示: SGID 的风险通常低于 SUID,但仍需谨慎设置于可执行文件。在目录上的应用是安全且推荐的文件共享方式。
Sticky Bit
符号表示:
t
(出现在其他用户的执行权限位置)八进制表示:
1
(如1777
)作用:
- 仅对目录有意义。
- 在设置了 Sticky Bit 的目录中,用户只能删除或重命名自己拥有的文件或目录,即使该目录的写权限 (
w
) 对其他用户开放(如rwxrwxrwt
)。 - 核心目的:保护用户文件不被他人误删。在全局可写的目录中(如临时目录),防止用户随意删除他人的文件。
经典例子: 系统临时目录
/tmp
- 权限通常是
drwxrwxrwt
。 - 所有用户都有读、写、执行权限。
- 末尾的
t
表示 Sticky Bit 已设置。 - 用户
user1
可以在/tmp
创建文件/tmp/user1file
。 - 用户
user2
虽然对整个/tmp
有写权限,但不能删除或重命名/tmp/user1file
(除非他是root
或文件所有者user1
)。user2
可以创建自己的/tmp/user2file
。
- 权限通常是
设置与查看:
- 设置:
chmod o+t 目录名
或chmod 1xxx 目录名
(e.g.,chmod 1777 /public/tmp
) - 查看:如果其他用户原本有
x
权限,ls -l
中其他用户执行位显示为t
,如果其他用户原本没有x
权限,其他用户执行位显示为T
。
- 设置:
应用场景: 主要用于全局可写的共享临时目录(如
/tmp
)。现代 Linux 中,对用户主目录 (~
) 或普通共享目录(使用 SGID 管理组)通常不需要设置 Sticky Bit。
总结
权限名称 | 符号 | 八进制值 | 主要作用对象 | 核心功能 |
---|---|---|---|---|
SUID | s (所有者x位) | 4 | 可执行文件 | 执行时获得文件所有者权限 |
SGID | s (组x位) | 2 | 可执行文件 | 执行时获得文件所属组权限 |
目录 | 目录下新建文件继承目录的组 | |||
Sticky Bit | t (其他用户x位) | 1 | 目录 | 仅文件所有者可删除目录下的文件 |
查看系统中的特殊权限实例
SUID:
ls -l /usr/bin/passwd
(应看到-rwsr-xr-x
)SGID (目录):
ls -ld /var/mail
(很多系统设置为drwxrwsr-x
)Sticky Bit:
ls -ld /tmp
(应看到drwxrwxrwt
)
理解并正确使用这三个特殊权限对于 Linux 系统管理、权限规划和系统安全至关重要。务必谨慎设置 SUID,善用 SGID 管理共享目录,并在需要全局可写临时目录时使用 Sticky Bit。
sudoers权限分配
sudoers
文件编辑与定位
执行visudo
命令进入编辑界面后,可通过100gg
快捷键快速定位至文件第 100 行附近(具体行数需根据系统版本及配置历史调整,通常用于找到预设的用户权限配置段),在此处可添加或修改用户的sudo
权限规则。
验证sudoers
配置正确性
配置完成后,需通过visudo -c
命令验证/etc/sudoers
文件的语法合法性,确保无格式错误:
1 | [01:18:44 root@centon7 tmp]# visudo -c |
若输出 “解析正确”,则说明配置文件语法无误,可正常生效。
查看系统用户与权限配置
在/etc/sudoers
中,用户权限规则的典型配置格式为:
1 | 用户名 ALL=(ALL) /sbin/useradd,/bin/cat |
其中:
ALL=(ALL)
表示该用户可在所有主机上以所有用户身份执行命令;末尾的
/sbin/useradd,/bin/cat
为允许执行的具体命令列表(多命令用逗号分隔)。
查看用户sudo
权限
对于已配置sudo
权限的用户,可通过sudo -l
命令查看自身被授权的具体操作,便于验证权限分配是否符合预期:
1 | sudo -l |
该命令会列出当前用户可通过sudo
执行的所有命令及相关限制。
用户及权限管理命令
1 | #1 chmod |
磁盘管理
1 | #1 du |
vim使用
普通模式:
1 | yy #复制光标所在行 |
末行模式(命令模式):
1 | :/要检索的内容 #检索 |
每次进入vi就有行号编辑文件.vimc
添加set nu
1 | vi ~/.vimrc |