Linux复习与机器人排障实操笔记
用途:复习机器人测试中最常用的 Linux 命令和排障思路。
本笔记来自实际练习,环境为 Windows + WSL2 + Ubuntu 24.04 LTS。
一、学习目标
机器人测试不要求一开始掌握完整 Linux,而是先能定位以下问题:
程序是否启动? 日志有没有报错? CPU、内存、磁盘是否正常? 网络和端口是否正常? USB、串口、CAN 设备是否被识别? 测试脚本是否有执行权限?核心排障链:
程序启动状态 -> 日志错误 -> 系统资源 -> 网络端口 -> 设备和驱动 -> 权限和配置 -> 判断软件、硬件还是环境问题二、当前环境
系统:Ubuntu 24.04 LTS 运行方式:WSL2 用户:yjw 用户主目录:/home/yjw 练习目录:~/robot_test验证环境:
whoamicat/etc/os-releaseuname-rpwd注意:WSL 适合学习 Linux 命令、ROS2 基础和仿真。真实机器人 USB、串口、CAN 设备需要额外映射,不能默认认为 WSL 已经连接了真实设备。
三、文件和目录
3.1 常用命令
| 命令 | 作用 |
|---|---|
| pwd | 查看当前所在目录 |
| ls | 查看目录内容 |
| ls -lah | 查看详细信息、文件大小和隐藏文件 |
| cd 目录 | 进入目录 |
| mkdir -p 目录 | 创建目录,包括不存在的父目录 |
| touch 文件 | 创建空文件 |
| cp 源 目标 | 复制文件或目录 |
| mv 源 目标 | 移动或重命名 |
| rm 文件 | 删除文件,操作前确认路径 |
3.2 实操记录
mkdir-p~/robot_test/logscd~/robot_testpwdls-lah预期当前目录:
/home/yjw/robot_test四、日志查看和筛选
4.1 常用命令
| 命令 | 作用 |
|---|---|
| cat 文件 | 一次性查看文件 |
| less 文件 | 分页查看大文件,按 q 退出 |
| head 文件 | 查看文件开头 |
| tail 文件 | 查看文件结尾 |
| tail -n 2 文件 | 查看最后 2 行 |
| tail -f 文件 | 持续查看新增日志 |
| grep 关键词 文件 | 按关键词筛选 |
| grep -n 关键词 文件 | 筛选并显示行号 |
| grep -i | 忽略大小写 |
| grep -E "A | B" |
4.2 创建模拟机器人日志
cd~/robot_testprintf"INFO robot started\nWARN lidar delay 120ms\nERROR navigation timeout\nINFO robot stopped\n">logs/robot.log查看日志:
catlogs/robot.loggrep-nE"WARN|ERROR|timeout"logs/robot.logtail-n2logs/robot.log预期筛选结果包括:
WARN lidar delay 120ms ERROR navigation timeout4.3 实时监控日志
终端 1:
cd~/robot_testtail-flogs/robot.log终端 2:
cd~/robot_testecho"WARN lidar delay 300ms">>logs/robot.logecho"ERROR obstacle detection timeout">>logs/robot.log终端 1 会立即显示新增内容。按以下组合键停止:
Ctrl + C4.4 本次遇到的路径错误
错误命令:
grep-nE"ERROR|WARN|timeout|failed"robot.log错误原因:当前目录是 ~/robot_test,实际文件位于 ~/robot_test/logs/robot.log。
正确命令:
grep-nE"ERROR|WARN|timeout|failed"logs/robot.log也可以使用绝对路径:
grep-nE"ERROR|WARN|timeout|failed"/home/yjw/robot_test/logs/robot.log排障记忆:看到 No such file or directory,先检查当前目录和文件路径,不要马上判断程序故障。
五、进程和系统资源
5.1 常用命令
| 命令 | 作用 |
|---|---|
| ps aux | 查看所有进程 |
| ps aux | head | 查看进程列表开头 |
| pgrep -af python | 查找 Python 进程及启动命令 |
| top | 实时查看 CPU、内存和进程 |
| free -h | 查看内存和 Swap |
| df -h | 查看磁盘空间 |
| pkill -f “关键词” | 按命令行关键词停止进程 |
退出 top:
q5.2 机器人测试中的判断
程序没启动 -> ps aux / pgrep 程序卡死或CPU占用过高 -> top 内存不足 -> free -h 磁盘满,日志无法写入 -> df -h本次练习结果:
内存可用约 6.9 GiB Ubuntu 根目录使用约 1% 未发现明显 CPU、内存或磁盘瓶颈注意:/mnt/c、/mnt/d 是 Windows 盘挂载目录,不是 Ubuntu 根目录。查看磁盘时要区分 / 和 /mnt/d。
六、网络和端口
6.1 常用命令
| 命令 | 作用 |
|---|---|
| ip addr | 查看网卡和 IP 地址 |
| ping -c 4 127.0.0.1 | 测试本机网络协议栈 |
| ss -lntp | 查看 TCP 监听端口和进程 |
| curl URL | 请求并验证服务 |
| pkill -f “关键词” | 停止测试服务 |
6.2 模拟端口服务
启动服务:
python3-mhttp.server8080>/tmp/robot-server.log2>&1&确认端口:
ss-lntp|grep8080预期能看到 LISTEN、8080 和 python3。
访问服务:
curlhttp://127.0.0.1:8080停止服务:
pkill-f"http.server 8080"6.3 机器人测试中的判断
节点启动但通信失败 -> 检查 IP、端口、进程和日志 端口连接失败 -> ss -lntp 看是否监听 端口已监听但访问失败 -> curl 验证服务,再检查防火墙和配置本次练习结果:本机 ping 为 0% packet loss,Python 成功监听 8080,curl 成功返回网页内容。
七、USB、串口和内核日志
7.1 安装工具
如果执行 lsusb 提示命令不存在:
sudoaptupdatesudoaptinstall-yusbutils7.2 常用命令
lsusbdmesg-T|tail-n20dmesg-T|grep-iE"usb|tty|serial|can|error|fail"ls-l/dev/ttyUSB* /dev/ttyACM*2>/dev/null||echo"当前没有USB串口设备"| 命令 | 作用 |
|---|---|
| lsusb | 查看 USB 设备 |
| dmesg -T | 查看带时间的内核和设备日志 |
| ls /dev/ttyUSB* | 查看 USB 转串口设备 |
| ls /dev/ttyACM* | 查看 USB CDC/ACM 串口设备 |
7.3 本次结果如何判断
lsusb 没找到 -> 先安装 usbutils lsusb 没有机器人设备 -> 当前没有USB设备或WSL未映射 没有 ttyUSB/ttyACM -> 当前没有USB串口设备 dmesg 有 WSL/KVM 日志 -> 多数是运行环境信息,不等于机器人故障WSL 中没有真实 USB 设备是正常现象。真实机器人测试还要关注:
USB 设备映射 串口权限 设备驱动 CAN 适配器和 can0 设备波特率与协议配置八、权限和脚本
8.1 创建脚本
cd~/robot_testprintf'#!/bin/bash\necho "robot test started"\ndate\necho "robot test finished"\n'>check_robot.sh第一次执行:
./check_robot.sh如果出现:
Permission denied查看权限:
ls-lcheck_robot.sh添加执行权限:
chmod+x check_robot.sh ./check_robot.sh8.2 权限含义
例如:
-rwxr-xr-x其中 x 表示执行权限。
排障记忆:
脚本无法启动 -> ls -l 看权限 -> chmod +x 添加执行权限 -> 再次执行机器人测试脚本还可能因为以下原因无法运行:
Python 环境不对 依赖未安装 路径写错 设备权限不足 配置文件不存在九、机器人测试排障速查表
| 现象 | 第一批检查 | 进一步判断 |
|---|---|---|
| 程序没启动 | ps aux、pgrep | 看启动命令和启动日志 |
| 日志没有新增 | tail -f、ps aux | 查进程是否存活、日志路径是否正确 |
| 日志报 timeout | grep、ss、ping | 区分网络、服务、设备响应超时 |
| 端口连接失败 | ss -lntp | 判断服务是否监听、配置端口是否一致 |
| CPU 很高 | top | 定位具体 PID 和命令 |
| 内存不足 | free -h | 看进程是否持续增长、是否需要重启 |
| 磁盘写满 | df -h | 检查日志、临时文件和历史报告 |
| USB 设备不见 | lsusb、dmesg | 检查映射、驱动、线缆和权限 |
| 串口打不开 | ls -l /dev/tty* | 检查用户组、设备占用和波特率 |
| 脚本不能执行 | ls -l、chmod +x | 检查解释器、依赖和配置 |
十、证据链意识
机器人问题不能只写“运行失败”,需要保存能互相对齐的证据:
视频:记录机器人实际动作 终端日志:记录程序状态和错误 传感器数据:记录雷达、IMU、编码器等输出 rosbag:记录 ROS2 话题数据 网络/CAN 报文:记录通信过程 时间轴:把视频、日志、传感器和报文对齐建议记录:
测试开始时间 软件版本和配置 硬件、传感器和固件版本 环境条件 复现步骤 异常发生的准确时间 日志文件路径 测试结果和结论十一、复习题
基础题
- pwd 和 ls -lah 分别查看什么?
- 日志文件位于 logs/robot.log,当前目录是 ~/robot_test,如何筛选 ERROR?
- 如何实时查看机器人日志?如何退出?
- Permission denied 的第一步检查什么?
- 如何查看 8080 端口是否被监听?
- 如何查看当前运行的 Python 进程?
- 如何查看内存和磁盘空间?
- lsusb 没有命令时怎么处理?
面试表达
我在机器人测试中会先确认进程是否正常,再查看日志中的 ERROR、WARN 和 timeout;随后检查 CPU、内存、磁盘、网络端口以及 USB/串口设备。对于 WSL 环境,我会特别区分系统环境日志和真实设备日志。最终结合视频、日志、传感器数据、rosbag 和 CAN 报文按时间轴对齐,判断问题属于软件、硬件、通信还是环境。
十二、下一步
Linux 复习完成后,进入主线:
ROS2 通信模型 -> ROS2 命令与调试工具 -> TurtleBot3/Gazebo -> AGV 导航测试 -> 故障注入 -> pytest 自动化与报告