Linux复习与机器人排障实操笔记

用途:复习机器人测试中最常用的 Linux 命令和排障思路。

本笔记来自实际练习,环境为 Windows + WSL2 + Ubuntu 24.04 LTS。

一、学习目标

机器人测试不要求一开始掌握完整 Linux,而是先能定位以下问题:

程序是否启动?
日志有没有报错?
CPU、内存、磁盘是否正常?
网络和端口是否正常?
USB、串口、CAN 设备是否被识别?
测试脚本是否有执行权限?

核心排障链:

程序启动状态
    -> 日志错误
    -> 系统资源
    -> 网络端口
    -> 设备和驱动
    -> 权限和配置
    -> 判断软件、硬件还是环境问题

二、当前环境

系统:Ubuntu 24.04 LTS
运行方式:WSL2
用户:yjw
用户主目录:/home/yjw
练习目录:~/robot_test

验证环境:

whoami
cat /etc/os-release
uname -r
pwd

注意: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/logs
cd ~/robot_test
pwd
ls -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 "AB"

4.2 创建模拟机器人日志

cd ~/robot_test

printf "INFO robot started\nWARN lidar delay 120ms\nERROR navigation timeout\nINFO robot stopped\n" > logs/robot.log

查看日志:

cat logs/robot.log
grep -nE "WARN|ERROR|timeout" logs/robot.log
tail -n 2 logs/robot.log

预期筛选结果包括:

WARN lidar delay 120ms
ERROR navigation timeout

4.3 实时监控日志

终端 1:

cd ~/robot_test
tail -f logs/robot.log

终端 2:

cd ~/robot_test
echo "WARN lidar delay 300ms" >> logs/robot.log
echo "ERROR obstacle detection timeout" >> logs/robot.log

终端 1 会立即显示新增内容。按以下组合键停止:

Ctrl + C

4.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:

q

5.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 -m http.server 8080 > /tmp/robot-server.log 2>&1 &

确认端口:

ss -lntp | grep 8080

预期能看到 LISTEN、8080 和 python3。

访问服务:

curl http://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 提示命令不存在:

sudo apt update
sudo apt install -y usbutils

7.2 常用命令

lsusb
dmesg -T | tail -n 20
dmesg -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_test

printf '#!/bin/bash\necho "robot test started"\ndate\necho "robot test finished"\n' > check_robot.sh

第一次执行:

./check_robot.sh

如果出现:

Permission denied

查看权限:

ls -l check_robot.sh

添加执行权限:

chmod +x check_robot.sh
./check_robot.sh

8.2 权限含义

例如:

-rwxr-xr-x

其中 x 表示执行权限。

排障记忆:

脚本无法启动
    -> ls -l 看权限
    -> chmod +x 添加执行权限
    -> 再次执行

机器人测试脚本还可能因为以下原因无法运行:

Python 环境不对
依赖未安装
路径写错
设备权限不足
配置文件不存在

九、机器人测试排障速查表

现象第一批检查进一步判断
程序没启动ps aux、pgrep看启动命令和启动日志
日志没有新增tail -f、ps aux查进程是否存活、日志路径是否正确
日志报 timeoutgrep、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 报文:记录通信过程
时间轴:把视频、日志、传感器和报文对齐

建议记录:

测试开始时间
软件版本和配置
硬件、传感器和固件版本
环境条件
复现步骤
异常发生的准确时间
日志文件路径
测试结果和结论

十一、复习题

基础题

  1. pwd 和 ls -lah 分别查看什么?
  2. 日志文件位于 logs/robot.log,当前目录是 ~/robot_test,如何筛选 ERROR?
  3. 如何实时查看机器人日志?如何退出?
  4. Permission denied 的第一步检查什么?
  5. 如何查看 8080 端口是否被监听?
  6. 如何查看当前运行的 Python 进程?
  7. 如何查看内存和磁盘空间?
  8. lsusb 没有命令时怎么处理?

面试表达

我在机器人测试中会先确认进程是否正常,再查看日志中的 ERROR、WARN 和 timeout;随后检查 CPU、内存、磁盘、网络端口以及 USB/串口设备。对于 WSL 环境,我会特别区分系统环境日志和真实设备日志。最终结合视频、日志、传感器数据、rosbag 和 CAN 报文按时间轴对齐,判断问题属于软件、硬件、通信还是环境。

十二、下一步

Linux 复习完成后,进入主线:

ROS2 通信模型
    -> ROS2 命令与调试工具
    -> TurtleBot3/Gazebo
    -> AGV 导航测试
    -> 故障注入
    -> pytest 自动化与报告
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐