# Ubuntu 18.04 ps命令丢失修复方案

  
报错 `Command 'ps' not found` 说明 \*\*procps 软件包被病毒删除/损坏\*\*，ps、top、vmstat 等进程查看工具都在这个包里，分两种场景修复。

\## 一、能正常联网（直接安装修复）  
\### 1. 执行安装恢复procps  
```bash  
apt update  
apt install -y procps  
```  
安装完成后直接测试：  
```bash  
ps -ef  
```

\### 2. 如果apt被篡改、无法执行  
病毒经常篡改apt、替换源、删除依赖，先修复apt：  
```bash  
\# 修复apt基础组件  
apt --fix-broken install -y  
apt install --reinstall apt  
\# 再重装procps  
apt install --reinstall procps  
```

\## 二、服务器断网/外网不通（离线修复）  
\### 方案1：本地缓存包安装  
1\. 查看本机是否还有缓存安装包  
```bash  
ls /var/cache/apt/archives/procps\*  
```  
如果存在文件，直接本地安装：  
```bash  
dpkg -i /var/cache/apt/archives/procps\_\*.deb  
```

\### 方案2：另一台同版本Ubuntu下载离线包上传  
1\. 干净Ubuntu18.04机器下载包  
```bash  
apt update &amp;&amp; apt install --download-only procps  
\# 包路径 /var/cache/apt/archives/procps\_xxx\_amd64.deb  
```  
2\. scp上传到故障服务器，执行安装  
```bash  
dpkg -i procps\_\*.deb  
\# 缺依赖就修复依赖  
apt -f install -y  
```

\## 三、病毒篡改PATH导致命令找不到（关键排查）  
部分恶意程序会修改环境变量`PATH`，即使程序存在也提示not found：  
1\. 先确认ps二进制文件是否存在  
```bash  
which ps  
\# 或直接查看真实路径  
ls /bin/ps /usr/bin/ps  
```  
\- 若文件不存在：按上面重装procps  
\- 若文件存在但无法执行：修复PATH  
```bash  
\# 临时恢复完整PATH  
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  
\# 再次测试ps  
ps -ef  
```  
2\. 永久修复PATH（病毒大概率改了/etc/profile /root/.bashrc）  
```bash  
\# 检查恶意PATH篡改  
grep -r "PATH" /root/.bashrc /etc/profile /etc/environment  
\# 删除里面恶意覆盖PATH的行，恢复默认PATH  
echo 'export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' &gt;&gt; /etc/profile  
source /etc/profile  
```

\## 四、修复后深度查杀（防止病毒再次删除工具）  
\### 1. 全盘查杀病毒  
```bash  
\# 安装云安全中心Agent全盘扫描（阿里云主机）  
\# 或安装clamav开源杀毒  
apt install -y clamav  
freshclam  
clamscan -r / --remove=yes  
```  
\### 2. 锁定procps防止被删除  
```bash  
\# 锁定软件包，病毒无法卸载  
apt-mark hold procps  
\# 锁定ps二进制文件不可删  
chattr +i /usr/bin/ps /bin/ps  
```

\### 3. 复盘之前的进程隐藏后门  
之前告警是通过`mount --bind /proc/$PID /tmp`隐藏进程，病毒会持续删除系统工具规避排查：  
1\. 再次检查恶意挂载  
```bash  
mount | grep /tmp  
umount -l /tmp  
```  
2\. 清理定时任务、开机自启木马  
```bash  
crontab -l  
ls /etc/cron.\*  
systemctl list-unit-files  
```  
3\. 加固/tmp目录禁止执行二进制  
```bash  
mount -o remount,noexec,nosuid /tmp  
echo "tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0" &gt;&gt; /etc/fstab  
```

\## 快速一键修复脚本（复制直接运行）  
```bash  
\#!/bin/bash  
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  
apt update  
apt --fix-broken install -y  
apt install --reinstall -y procps  
apt-mark hold procps  
chattr +i /usr/bin/ps /bin/ps  
echo "=== 修复完成，测试ps ==="  
ps -ef  
```