Linux 基础与开发环境搭建

说实话,我见过太多机器人项目的同学,代码写得挺溜,一碰到 Linux 环境就卡壳。尤其是刚接触 Ubuntu 的时候,连个文件权限都能折腾半天。这一章,咱们就把这些基础打扎实。

我个人习惯把 Linux 环境比作机器人的「操作系统骨架」。你想想看,ROS 跑在 Ubuntu 上,驱动、通信、编译全得靠它。底子不牢,后面联调时各种莫名其妙的问题就来了。

本章核心目标:从零搭建一个可用的 Ubuntu 开发环境,掌握日常开发必备的 Linux 命令、Vim 编辑技巧、Shell 脚本基础以及 SSH 远程连接。学完这一章,你就能在终端里「走路」了。

2.1 Ubuntu 系统安装:选对版本,少走弯路

Ubuntu 版本很多,我建议机器人开发直接用 Ubuntu 20.04 LTS。为什么?ROS 1 的 Noetic 版本官方支持的就是 20.04,ROS 2 的 Foxy 也是。我踩过坑,用 22.04 装 ROS 1,折腾了一整天依赖问题,最后老老实实换回 20.04。

安装方式主要有三种:

方式 适用场景 我的建议
物理机双系统 主力开发机,性能要求高 如果你只有一台电脑,这是首选
虚拟机(VMware/VirtualBox) 学习、测试、不想影响主系统 适合初学者,随时可以快照回滚
WSL2(Windows Subsystem for Linux) Windows 用户,轻度开发 性能不错,但 GUI 和硬件直通有限制

我的小技巧:安装时分区别太复杂。给根目录 / 分 30-50GB,/home 分 20-30GB,再留个 swap 分区(大小等于内存即可)。别学网上那些花里胡哨的分区方案,简单够用就行。

2.2 Linux 常用命令:文件操作、权限管理、进程管理

命令这东西,不用刻意背。用得多了自然就记住了。我刚开始也记不住 chmod 的数字权限,后来发现一个规律:r=4, w=2, x=1,加起来就行。

2.2.1 文件操作命令

这些是每天都要敲的,必须形成肌肉记忆:

  • ls -la:列出所有文件(包括隐藏文件)和详细信息。我每次进一个新目录,第一件事就是敲这个。
  • cd ~:回到用户主目录。别问为什么,问就是方便。
  • cp -r source_dir/ target_dir/:递归复制目录。少写 -r 会报错,我犯过这毛病。
  • mv file1 file2:移动或重命名。注意,如果目标已存在,会直接覆盖,没有提示。
  • rm -rf dir/:删除目录。这个命令要小心,-rf 下去,回收站都救不了你。

我曾经犯过的错:有一次在服务器上想删除一个临时目录,结果路径写错了,rm -rf / tmp/(注意那个空格),直接把根目录删了……嗯,从那以后我每次敲 rm -rf 之前都会先 ls 确认一遍路径。

2.2.2 权限管理

Linux 的权限模型其实很简单:用户、组、其他人,每个角色有 读、写、执行 三种权限。

举个例子:

# 查看文件权限
ls -l my_robot_script.sh
# 输出:-rwxr--r-- 1 alice robot_dev 1024 Mar 15 10:30 my_robot_script.sh

# 解释:
# -rwxr--r-- 表示:文件所有者有读写执行权限,组用户有读权限,其他人只有读权限

# 修改权限:给所有用户添加执行权限
chmod +x my_robot_script.sh

# 数字法:设置权限为 755(所有者全部,组和其他人读+执行)
chmod 755 my_robot_script.sh

数字法怎么算?rwx 对应 421,加起来就是权限值。比如 rwx = 4+2+1 = 7,r-x = 4+0+1 = 5。

2.2.3 进程管理

机器人开发中,经常要启动多个节点,进程管理是基本功:

  • ps aux:查看所有进程。我习惯用 ps aux | grep ros 来过滤 ROS 相关进程。
  • top 或 htop:实时查看系统资源占用。如果机器人卡顿了,先看看 CPU 和内存。
  • kill -9 PID:强制杀死进程。注意,-9 是最后手段,正常应该先试试 kill PID。
  • nohup command &:让命令在后台运行,即使关闭终端也不会停。我经常用这个来跑长时间的数据采集。

避坑指南:用 kill -9 杀 ROS 节点时,有时候会留下共享内存没清理。下次启动就会报错。我建议先 rosnode kill 或者 Ctrl+C 正常退出,实在不行再用 -9。

2.3 Vim 编辑器:从入门到「够用」

Vim 的学习曲线确实陡,但一旦上手,效率极高。我刚开始用 Vim 时,连退出都不会,只能关终端。后来发现一个真理:Vim 不是用来写代码的,是用来快速编辑配置文件的。

你不需要成为 Vim 高手,掌握这几个模式就够了:

模式 进入方式 主要操作
普通模式 默认进入,或按 Esc 移动光标、复制粘贴、删除
插入模式 按 i 输入文本
可视模式 按 v 选择文本块
命令行模式 按 : 保存、退出、搜索、替换

常用的操作命令:

  • dd:删除当前行。我经常用 5dd 删除连续 5 行。
  • yy:复制当前行。p 粘贴。
  • /keyword:搜索关键字。按 n 跳到下一个。
  • :wq:保存并退出。:q! 强制退出不保存。
  • u:撤销。这个键救过我无数次。

我的个人习惯:在 ~/.vimrc 里加上这几行,能让 Vim 好用很多:

set number          " 显示行号
set tabstop=4       " Tab 宽度为 4
set shiftwidth=4    " 缩进宽度为 4
set expandtab       " 用空格代替 Tab
syntax on           " 语法高亮

2.4 Shell 脚本基础:让重复工作自动化

机器人开发中,经常要启动多个终端、运行多个节点。手动敲命令太累了。写个 Shell 脚本,一键搞定。

一个简单的启动脚本示例:

#!/bin/bash
# 文件名:start_robot.sh

echo "正在启动机器人系统..."

# 设置 ROS 环境
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash

# 启动 ROS Master
roscore &
sleep 2  # 等待 roscore 启动

# 启动机器人驱动节点
rosrun robot_base robot_driver_node &

# 启动激光雷达
rosrun rplidar_ros rplidar_node &

echo "所有节点已启动!"
wait

写脚本时要注意几点:

  • 第一行 #!/bin/bash 是 shebang,告诉系统用哪个解释器。
  • 变量赋值等号两边不能有空格:name="value",不是 name = "value"。
  • 用 $? 获取上一条命令的退出状态,0 表示成功。
  • 脚本写完后记得 chmod +x script.sh 添加执行权限。

我曾经踩过的坑:在 Windows 下用记事本写 Shell 脚本,然后传到 Ubuntu 上运行,结果报错 ^M 字符问题。因为 Windows 换行符是 \r\n,Linux 是 \n。解决方案:用 dos2unix script.sh 转换一下。

2.5 SSH 远程连接:远程开发与调试

机器人通常部署在实体硬件上,你不可能每次都抱着显示器去连它。SSH 就是你的远程遥控器。

基本用法:

# 连接远程机器人
ssh username@192.168.1.100

# 指定端口(默认是 22)
ssh -p 2222 username@192.168.1.100

# 执行远程命令
ssh username@192.168.1.100 "ls -la /home/robot"

# 复制文件到远程
scp local_file.txt username@192.168.1.100:/home/robot/

# 从远程复制文件到本地
scp username@192.168.1.100:/home/robot/data.log ./

为了提高效率,我建议配置 SSH 密钥登录,省去每次输密码的麻烦:

# 在本地生成密钥对
ssh-keygen -t rsa -b 4096

# 将公钥复制到远程机器人
ssh-copy-id username@192.168.1.100

# 之后就可以直接 ssh 登录,不需要密码了

我的经验:在 ~/.ssh/config 里配置主机别名,可以省很多事:

Host myrobot
    HostName 192.168.1.100
    User robot
    Port 22
    IdentityFile ~/.ssh/id_rsa

配置完后,直接 ssh myrobot 就能连上,不用记 IP 和用户名。

2.6 本章知识体系总览

下面这张图把本章的核心知识点串起来了。你可以把它当作一个「地图」,学完后再回来看,应该会有更清晰的认识。

Linux 基础与开发环境搭建 · 知识体系 Ubuntu 开发环境 系统安装 Linux 常用命令 Vim 编辑器 Shell 脚本 SSH 远程连接 文件操作 权限管理 进程管理 💡 核心思路:先装系统 → 掌握命令 → 学会编辑 → 自动化脚本 → 远程开发

嗯,这一章的内容就到这里。记住,Linux 环境是机器人开发的基石,别急着跳过。把每个命令都敲一遍,把 Vim 的常用操作练熟,写几个 Shell 脚本试试。后面联调的时候,你会感谢现在认真打基础的自己。