命令行-bash-4.2$故障:
用户家目录的~/.bashrc被误删,重新拷一份即可
permission denied故障分析
1.文件权限 2.目录权限
僵尸进程排查/处理
僵尸进程如何检查?如何结束僵尸进程?
top命令查看几个zobmie
ps aux | grep Z 得到僵尸进程pid号,先尝试kill -9 pid
pstree -p | grep (pid) 找到僵尸进程父进程,将其父进程结束
系统负载故障案例
系统负载高如何排查?
0.(公有云)看监控界面简单查看,是cpu/内存/io哪个负载高
1. 查看整体负载
uptime/w # 显示平均负载(1/5/15分钟)
top # 实时监控进程和资源占用(按 P 按CPU排序,按 M 按内存排序)
2. 检查CPU瓶颈
htop # 更直观的进程监控(需安装:sudo dnf install htop)
pidstat 1 # 每秒统计进程的CPU使用(需安装:sudo dnf install sysstat)
3. 检查内存/交换分区
free -h # 查看内存和 Swap 使用情况
vmstat 1 # 监控内存、Swap、I/O 和 CPU 状态
4. 检查磁盘I/O
iotop# 实时显示磁盘I/O占用进程(需安装:sudo dnf install iotop)
显示结果:DISK READ读DISK WRITE写
iotop -o只看正在写的进程
iostat -xz 1 # 查看磁盘I/O和利用率(需安装 sysstat)
5. 检查网络
nload # 实时监控网络带宽(需安装:sudo dnf install nload)
ss -tunap # 查看活动网络连接和进程
6. 快速定位异常进程
ps aux –sort=-%cpu | head # 列出CPU占用最高的前10进程
ps aux –sort=-%mem | head # 列出内存占用最高的前10进程
7.分析高负载的服务日志,找出原因/var/log/messages
8. 内核日志
dmesg | tail -20 # 检查近期内核日志是否有硬件/驱动错误
故障复现:
stress 压力测试命令:yum install -y stress
stress –cpu 4 / –vm 2 –timeout 10(s可以不加)
— io 2 -hdd 3 (磁盘) io也会导致cpu占用
root密码忘记找回(rhel9)
1.系统自带救援模式
按e进⼊图2页面,原配置如图所示。
修改原配置为红色框选部分,如图⼆所示
然后按ctrl+x,执行以下命令
# mount -o remount,rw /sysroot
# chroot /sysroot # echo redhat | passwd –stdin root
# touch /.autorelabel
# sync
# exit
# exit
2.光盘/u盘救援模式
1.插入光盘
2.重启并在弹服务器logo时按esc进入boot菜单
3.选择光盘启动
4.选troubleshooting→rescue的那行(install system)
5.coutinue→1 进入rescue mount后输入chroot/mnt/sysimage即可进入光盘目录,
(这一步的目的主动切换根目录,原系统的根是/mnt/sysimage)
1.chroot /mnt/sysimage
2.vim /etc/passwd或者echo mima | passwd –stdin root
2.U盘:可以用ventory做可启动u盘,里面支持大量镜像,主要给物理服务器用
其它系统自带救援模式(centos7/ubuntu)
centos7:
GRUB菜单按e,找到linux16的行,ro(read only)改为rw,这行最后添加init=/bin/bash(以命令解释器进入系统),ctrl+x进入救援模式,不用输入root密码,vim /etc/passwd 把root行的x删除,即可清空root密码,ctrl+d退出后进入系统修改root密码
debian/ubt系:
默认不弹grub菜单,重启迅速按一下esc,出现boot menu界面在按一下esc,进入救援模式页面操作同上
定时任务故障案例
如运行脚本的时候某几个命令报错(仔细检查脚本格式和环境变量问题)
Linux运行级别
runlevel:Linux系统的不同状态
1.关机
2.重启
3.命令行 –ssh进入执行命令
4.图形化界面/桌面模式
ll /usr/lib/systemd/system/runlevel*.target
0-6有7个运行级别–234是一样的
0–关机
1–单用户模式/救援模式(系统自带),默认关闭网络
2,3,4–多用户模式,命令行模式,文本模式,multi-user
5–图形化界面,X11,vnc连接或本地连接,graphical
6–重启 reboot
查看/修改默认运行级别
查看:systemcytl get-default
修改:systemctl set-default graphical.target 实质是改了软连接
补充:init命令(在生产环境中使用shut down命令,而不是poweroff或init)
init 0–关机
init 6–重启
poweroff/reboot/init/shutdown命令区别
命令/操作 | 功能 | 定时任务 | 用户通知 | 兼容性 | 底层逻辑 |
---|---|---|---|---|---|
poweroff | 立即关机并断电 | ❌ 不支持 | ❌ 不支持 | 所有主流系统 | 直接调用内核关机 |
reboot | 立即重启系统 | ❌ 不支持 | ❌ 不支持 | 所有主流系统 | 直接调用内核重启 |
shutdown | 灵活关机/重启,支持定时 | ✔️ 支持 | ✔️ 支持 | 所有主流系统 | 安全终止进程,支持计划任务 |
init 0 / init 6 | 按运行级别关机/重启 | ❌ 不支持 | ❌ 不支持 | 主要兼容旧系统 | 执行运行级别脚本后关机/重启 |
关键区别详解
- 功能范围:
poweroff
/reboot
:直接触发硬件操作,简单粗暴。shutdown
:支持定时、通知、取消任务,适合生产环境。init
:通过切换运行级别实现关机/重启,依赖初始化脚本的流程。
- 底层逻辑:
shutdown
和init
会按顺序终止进程和服务(更安全),而poweroff
/reboot
可能跳过部分清理步骤(除非强制使用-f
)。- 在
systemd
系统中,poweroff
/reboot
/init
最终会调用systemctl
的对应操作。
- 使用场景:
- 快速关机/重启:
poweroff
或reboot
。 - 计划任务或通知用户:
shutdown
。 - 兼容旧脚本或 SysVinit 系统:
init 0
或init 6
。
- 快速关机/重启:
示例场景
- 生产服务器维护:
sudo shutdown -r 02:00 "系统将在凌晨2点重启,请保存工作!"
- 使用
shutdown
提前通知用户,避免数据丢失。
- 使用
- 强制快速重启(跳过服务终止):
sudo reboot -f
- 强制重启(慎用!可能导致数据损坏)。
- 传统 SysVinit 系统关机:
sudo init 0
- 按运行级别脚本顺序关机。
Linux启动流程:开机–登陆界面
1.开机自检(服务器图标或vmvare的页面,检查硬件是否有问题)(BIOS/UEFI)
2.加载引导程序MBR/GPT–引导系统启动磁盘
3.GRUB菜单:选择启动的内核(多系统)/救援模式
4.加载内核 /boot/内核 加载到内存中运行
5.内核初始化启动第一个进程 systemd(rhel)/init(老系统)
6.读取运行级别 桌面/命令行模式
7.系统初始化进程 配置文件中的网络/自动挂载/主机名等等系统层面的服务
8.根据运行级别,并行启动服务
/usr/lib/systemd/system
/etc/systemd/system服务
(网络服务,ssh,crond)


无法连接公有云服务器故障排查
1.故障现象:无法连接云服务器 connection failed
2.故障排查步骤
①ping ip(公网)通了→
②telnet(检查端口是否开启,是否被防火墙/安全组拦截)telnet ip 22
去服务器本地连接检查是否开启22端口
ss -lntup | grep 22
ss -lntup | grep sshd
没有端口检查进程 ps -ef | grep sshd
systemctl status sshd
检查是否启动,有无报错信息
报错先查看配置文件,可以用vimdiff和之前的备份对比,确定没问题看journalctl -xe详细报错记录
发现问题
磁盘空间不足故障案例
(no space left on device)

1.block剩余数量(磁盘分区)不足,一般是一些较大文件导致,df -h查看整体,du -sh排查
故障复现:
原理:du -sh查看文件夹大小一层层查看
1.cd /var/log
2.for n in {1..30}
do
dd if=/dev/zero of=lg-$n bs=1M count=1024
done
不能存太多,存98%左右,太满影响命令执行
3.du -sh /* | sort -rh(此处的h是以GB,MB,KB排序,人类可读排序)
4.结果显示/下的var最大,继续排查
du -sh /var/* | sort -rh | head
5.发现/var/log最大,进去找到没用的文件删除即可
2.inode剩余数量不足,df -i查看
文件足够大,优先占block,一般inode不会满,所以大部分情况都是block不足
故障复现:创建一个小的磁盘分区。挂载使用
dd命令来做这个空间用于测试
1.dd if=/dev/zero of=/tmp/30mb bs=1M count=30
2.file /tmp/30mb
3.mkfs.xfs /tmp/30mb
4.mkdir -p /inode
5.mount /tmp/30mb /inode
df -h查看,此时/tmp/30mb名字叫做/dev/loop0
(文件作为分区导致)
6.df -i查看inode剩余
7.cd /inode && touch {1..200000}(这里的数字范围大概在inode上限)
8.此时发现占用已达100%
df -h查看block足够表示inode用完
df -i查看inode,发现某个目录占用inode多
找到系统中占用inode多的文件夹:
find / -type -d -size +1M 找到文件目录中文件名大于1M的文件夹
#ll -h看的是目录中文件名的空间大小
ls /test/inode | head 查看刚才find找到的文件夹
ls | xargs rm
#xargs 把前一个命令的结果转化为后面命令的参数
文件删除原理
想彻底删除一个文件a.txt,必须满足两个条件:
1.rm命令删除使得这个文件硬链接数为0
2.删除的时候没有被进程/服务/命令所占用
#如日志文件一直写入,脚本或人工执行删除后没有彻底被删除
3.block被占用 文件未彻底删除导致
故障复现:
窗口1: dd if=/dev/zero of=/var/log/big bs=1M count=5000
tail -f /var/log/big 持续占用此文件
窗口2:rm -rf /var/log/big 尝试删除
排查:df -h查看根占用大小,再次rm删除,看视否有变化
du -sh / 看根占用大小,显示比df -h里面显示的文件大小要小很多
原因:du -sh 按照文件名查看大小,文件名被rm删除后,无法统计未被彻底删除但是没有文件名的文件—用lsof找这类文件
yum install -y lsof
lsof | grep delete查看未被彻底删除的文件
重启或结束对应进程释放文件
kill 占用文件的pid再删除文件即可