
上篇聊了Ubuntu安装。今天说一个每天都在用但很少深想的东西——Linux的文件系统结构。说个面试经历。面试官问你的ROS2工作空间放在~/robot_ws下这个~是什么意思/home和/etc有什么区别/dev又是干什么的我当时大概说了句~是用户目录/etc是配置文件然后就开始含糊其辞。面试官又追问了句/dev下面的设备文件是怎么创建的——我完全答不上来。后来回去补了一遍Linux文件系统才发现这些东西并没有想象中那么枯燥。搞明白了之后每次在终端里敲命令都觉得心里有底。Linux的目录树一切从/开始和Windows不同Linux没有C盘D盘的概念。所有东西都在一棵目录树下根目录是/。几个最重要的目录/home——用户的主目录。你登录的用户名叫robot那你的主目录就是/home/robot。~符号是它的简写~/robot_ws就是/home/robot/robot_ws。你的代码、文档、下载的文件都放在这里。/etc——系统配置文件。几乎所有服务的配置都在这个目录下。ROS2的环境变量配置在/opt/ros/humble/setup.bash里系统的DNS配置在/etc/resolv.conf里apt的软件源在/etc/apt/sources.list里。记住一个规律/etc下面的文件大多是纯文本可以直接用编辑器修改。/dev——设备文件。Linux把硬件设备抽象成文件。激光雷达接在USB口上就会在/dev下生成一个/dev/ttyUSB0之类的文件。你的程序读写这个文件就等于在和硬件通信。这就是Linux下一切皆文件的含义。/proc——进程信息。这个目录比较特殊它不占硬盘空间而是实时反映系统状态。/proc/cpuinfo是CPU信息/proc/meminfo是内存信息/proc/1234/是PID为1234的进程的详细信息。你跑top或ps命令底层就是读/proc。/var——可变数据。日志文件在/var/log下软件包缓存在/var/cache下。ROS2的日志默认也在~/.ros/log下但系统的日志都在/var/log。/tmp——临时文件。系统重启后通常会被清空。跑一些临时脚本的中间结果可以放这里。/opt——可选软件。ROS2就装在这里——/opt/ros/humble/。第三方软件如果不想和系统包混在一起也可以装在/opt下。/usr——用户程序和数据。/usr/bin存放用户命令比如python3、git/usr/lib存放库文件/usr/include存放C/C头文件。你用apt install装的软件大部分文件都在/usr下面。/bin和/sbin——基本命令。ls、cp、mv这些最基础的命令在/bin下fdisk、reboot这些需要root权限的命令在/sbin下。现代Ubuntu中/bin是指向/usr/bin的符号链接。/lib——系统库文件。/bin和/sbin下的命令依赖的共享库在这里。/lib/modules下是内核模块驱动程序。路径绝对路径和相对路径这个概念很简单但面试会考。绝对路径从根目录开始/home/robot/robot_ws/src。相对路径从当前目录开始如果你在/home/robot下robot_ws/src就是相对路径。两个特殊符号.代表当前目录..代表上级目录。所以/home/robot/./robot_ws/../robot_ws/src虽然很蠢但等价于/home/robot/robot_ws/src。面试中常见的考题cd -是什么意思答案是回到上一个所在目录。cd ~或单独cd是回到主目录。和机器人开发的关系理解了文件系统很多机器人开发中的操作就说得通了。为什么ROS2的环境变量要source因为/opt/ros/humble/setup.bash里定义了AMENT_PREFIX_PATH、PATH等变量告诉系统去哪里找ROS2的可执行文件和库。为什么USB设备的权限经常出问题因为/dev/ttyUSB0这个文件有权限设置默认只有root能读写。你需要把当前用户加到dialout组sudo usermod -aG dialout $USER。为什么编译后的文件在install/目录下因为colcon按照约定把编译产物放在工作空间的install/目录里然后通过source install/setup.bash把这些路径加到环境变量中。为什么CMake能找到Eigen的头文件因为Eigen装在/usr/include/eigen3下CMake默认会搜索/usr/include。而如果你自己编译安装了一个库到/usr/local就需要手动指定路径或者配置CMAKE_PREFIX_PATH。还有一个实用技巧用which命令查看一个命令在哪个目录下。比如which python3会告诉你Python装在哪里which ros2会告诉你ROS2的可执行文件路径。排查命令找不到的问题时特别有用。符号链接/bin为什么指向/usr/bin前面提到/bin是指向/usr/bin的符号链接。符号链接symlink在Linux里非常重要相当于Windows的快捷方式。用ln -s创建ln -s /opt/ros/humble/setup.bash ~/robot_ws/ros_setup.bash在机器人开发中符号链接常用于把不同版本的库统一到一个路径、让程序找到正确版本的配置文件、或者在多个工作空间之间共享依赖。用ls -l看到以l开头的文件就是符号链接readlink -f可以查看链接最终指向的真实路径。面试中怎么聊面试官问文件系统通常不会让你背目录列表而是通过具体问题考察你的理解。比如你的程序找不到共享库怎么排查——这涉及到/usr/lib、LD_LIBRARY_PATH等概念。串口设备打不开——这涉及到/dev和权限。还有一种问法你的项目依赖了三个第三方库分别装在不同目录下CMake怎么找到它们——这就需要你理解/usr/include、/usr/local/include和自定义路径的区别以及CMAKE_PREFIX_PATH的作用。一个好的回答能结合自己的项目经验说清楚文件路径背后的逻辑而不是死记硬背。比如我的激光雷达驱动读/dev/ttyUSB0需要配置udev规则让它每次插入时都生成固定的设备名——这种回答比背目录结构强太多。文件系统结构与机器人开发理解Linux文件系统结构对机器人开发很重要。比如/dev下面有所有设备文件串口设备通常是/dev/ttyUSB0或/dev/ttyACM0/etc下面放配置文件ROS的setup.bash就在/opt/ros/下面/tmp是临时文件目录调试时产生的大量日志可以放这里重启后自动清理。面试时如果能说出这些细节说明你确实有实际使用Linux的经验。给正在准备面试的你花十分钟在终端里跑一遍ls /看看每个目录下有什么。再跑ls /etc、ls /dev、ls /proc看看里面都有什么文件。动手看一遍比读十遍文章都管用。另外建议跑一下df -h看磁盘使用情况du -sh ~/robot_ws/*看工作空间各目录的大小。这些命令在日常开发中很常用面试时也可能被问到。下篇聊Linux权限管理——chmod/chown和机器人设备的权限配置。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第81篇 Ubuntu安装与配置——你的第一个ROS开发环境 下一篇预告第83篇 Linux权限管理——chmod/chown和机器人设备的权限配置有任何问题欢迎评论区留言我会尽量回复。