1. 为什么值得花时间系统学一遍 Ubuntu很多人第一次接触 Ubuntu 都是从装个虚拟机玩玩开始的然后在某个深夜被显卡驱动或者中文输入法按在地上摩擦最后默默关掉虚拟机回到原来的系统。我自己也走过这条路前后折腾过七八台机器从 14.04 一路用到 24.04 LTS虚拟机、双系统、WSL、物理机单系统全试过一遍。回头看Ubuntu 这套东西真正难的不是命令本身而是没人告诉你哪些坑是必经的、哪些坑是可以绕开的。Ubuntu 是一个基于 Linux 内核的开源操作系统由 Canonical 公司维护每两年发布一个 LTS长期支持版本。它能做什么直白点说绝大多数服务器跑的是它绝大多数开源项目的官方文档默认环境是它Docker、Kubernetes、CI/CD 流水线里的基础镜像也大多以它或者它的近亲为底。所以学 Ubuntu 不是为了用 Linux 显得厉害而是为了让你在碰到部署、编译、容器、嵌入式这些具体活儿的时候不至于连第一步都迈不出去。这篇文章适合三类人一是完全没碰过 Linux、想找一条不绕弯的入门路线的新手二是已经会敲几个命令、但每次装环境都要搜半天的开发者三是需要给团队做环境标准化、想把安装和配置流程固化成文档的人。我下面讲的每一步都是自己实际跑通过的参数、命令、报错和处理方式都尽量给全你能直接抄也能理解为什么这么抄。1.1 学 Ubuntu 到底在学什么很多人把学 Linux理解成背命令这是个挺大的误区。命令是可以查的真正需要建立起来的是三样东西文件系统的心智模型、权限与包管理的运作方式、出问题时的排查路径。举个例子为什么配置文件大多在/etc、程序装在/usr/bin、用户数据放/home搞清楚这套目录约定FHS 标准你在任何一台 Linux 机器上都能快速找到想看的东西而不是靠find / -name *.conf硬扫。包管理是最能体现 Ubuntu 特色的部分。apt背后是一整套依赖解析机制它解决的是我装 AA 依赖 BB 又依赖 C 的某个版本这种地狱级问题。理解apt update更新软件源索引和apt upgrade升级已装软件的区别理解dpkg和apt的关系你就能明白为什么有时候apt install报依赖冲突为什么加了 PPA 之后系统会变得脆弱。还有一层是服务与进程管理。现在的 Ubuntu 用 systemdsystemctl是绕不开的。服务开机自启、崩溃自动重启、查看日志这一套东西在服务器运维里是日常操作。你在本地学会用systemctl status和journalctl -u将来上云服务器就是无缝迁移。提示不要一上来就去看那种Linux 命令大全 1000 条的清单那个东西的记忆效率极低。更有效的做法是先给自己定一个具体目标比如我要在这台机器上跑起一个 Python Web 服务然后沿着这个目标把需要的命令一个个啃下来。1.2 三类人的不同学习路径新手最容易犯的错是照搬别人的教程。网上有大量Ubuntu 美化教程Ubuntu 开发环境一条龙但那些作者的目标和你的目标往往不是一回事。我给一个比较实用的分类纯新手 / 学生目标是熟悉命令行和基本操作。建议虚拟机起步重点放在文件操作、权限、apt、编辑器vim 或 nano上别急着折腾桌面美化那是最容易消耗时间又不涨功力的部分。开发者目标是让开发环境跑起来。重点在语言运行时安装、环境变量、版本管理工具如 Miniconda、nvm、Docker、IDE 配置。路径是 WSL 或虚拟机 → 熟悉 apt 与 pip/conda → 上 Docker。运维 / 嵌入式方向目标是系统层能力。需要碰分区、网络配置、SSH、串口驱动、内核模块、交叉编译。路径建议直接物理机或双系统因为虚拟机会屏蔽掉很多硬件层面的真实问题。这三条路的重合部分是命令行基础 包管理 权限差异部分在后面。你如果目标明确就别在无关部分耗时间。1.3 版本怎么选LTS 还是非 LTSCanonical 的发行节奏是每年 4 月和 10 月各发一版版本号就是年月比如 24.04 是 2024 年 4 月。每两年一次的 4 月版本是 LTS桌面版支持 3 年服务器版支持 5 年可以付费延长。非 LTS 只有 9 个月支持期。我的建议很直接除非你有明确的硬件兼容需求否则一律选 LTS。原因有三点。第一第三方软件显卡驱动、Docker、各种 PPA对 LTS 的适配最完整非 LTS 上踩坑概率大得多。第二遇到问题时你能搜到的答案八成是针对某个 LTS 版本的非 LTS 的搜索结果往往是空白。第三LTS 的软件版本偏保守但这恰恰意味着稳定你不会因为一个上游库的小版本更新导致整个环境崩掉。目前主流选择是 22.04 LTS 和 24.04 LTS。22.04 生态最成熟各种教程、驱动、闭源软件支持最好24.04 内核更新对新一代硬件尤其是较新的笔记本网卡、显卡支持更好。如果你机器是 2022 年以后买的直接上 24.04如果是老机器或者要用一些比较老的闭源工具22.04 更省心。2. 安装方式选型四条上手路线怎么挑确定版本之后接下来的问题是装在哪。这个问题看似简单实际上决定了你后面 80% 的折腾方向。我把常见的四种方式列出来各自讲清楚适用场景和代价。先说结论想快速上手选 WSL想练完整系统选虚拟机想长期当主力开发机选双系统或物理机想搞硬件和驱动只能物理机。下面展开。2.1 虚拟机最安全的练手场VMware Workstation 和 VirtualBox 是两个最常见的选择。虚拟机的核心优势是快照——你可以在装完系统、配好环境之后打一个快照之后无论怎么折腾崩了一键回滚几分钟恢复。这个功能对新手来说是救命级别的我曾经在一次配置显卡驱动时把图形界面搞崩靠快照五分钟救回来。VMware 在图形性能、拖拽文件、共享文件夹这些体验上比 VirtualBox 好一些商业版需要授权个人使用有免费版本。VirtualBox 完全免费开源功能上稍弱但够用而且跨平台支持好。如果只是学习命令和环境配置VirtualBox 完全够如果要跑图形界面软件、做界面开发VMware 的 3D 加速体验更顺。虚拟机有个常被忽略的坑默认网络模式是 NAT也就是说虚拟机在局域网里没有独立 IP外部机器包括你的宿主机上的某些工具要连它需要做端口转发。很多人卡在Xshell 连不上虚拟机就是死在这个点上。后面我会单独讲网络配置。2.2 WSLWindows 用户最省事的起步方式如果你的宿主机是 Windows 10/11WSL2 其实是性价比最高的入门方案。它本质是一个轻量级虚拟机里跑的真实 Linux 内核和 Windows 文件系统互通可以直接在 Windows Terminal 里开 Ubuntu 标签页也可以装 VS Code 的 WSL 扩展直接在 Linux 环境里写代码。装起来也简单管理员权限打开 PowerShellwsl --install -d Ubuntu-24.04重启之后按提示设置用户名密码就进去了。想换发行版或者看有哪些可用wsl --list --online wsl --list --verboseWSL 的优点是不用分区、不占多少资源、启动快、和 Windows 无缝切换。缺点是 systemd 支持需要额外配置较新版本默认开启、硬件直通能力弱串口、USB 设备需要 usbipd 转发、内核是微软定制的和标准 Ubuntu 有细微差别。注意WSL 里跑 Docker 有两种方式——在 WSL 里装 Docker Engine或者用 Docker Desktop 的 WSL 后端。前者更接近生产环境后者更省心。学 Docker 本身的话建议用前者因为你能完整看到守护进程、镜像存储、网络配置这些细节。2.3 双系统与物理机安装双系统指的是在同一块硬盘上划出一部分空间装 Ubuntu和 Windows 共存开机时通过 GRUB 选择进哪个。这个方案的好处是性能无损、硬件全通坏处是分区操作有风险一旦搞错可能把 Windows 也弄坏。物理机单系统就是把整个硬盘给 Ubuntu。适合那些已经确定要长期用 Linux 的人比如做嵌入式、做后端开发、或者纯粹想逼自己脱离舒适区。双系统安装最关键的一步是分区。现代机器一般是 UEFI GPT需要的东西是一个EFI 系统分区通常 512MB 到 1GB格式 FAT32挂载点/boot/efi。如果 Windows 已经建好了这个分区直接复用不要新建。一个根分区/ext4 格式建议至少 40GB开发机给 100GB 以上。一个swap 分区或者 swap 文件。内存 16GB 以上基本可以不用独立 swap 分区用 swap 文件更灵活。可选的独立的/home分区好处是将来重装系统时用户数据不用备份。装之前务必做两件事备份数据以及在 Windows 里用磁盘管理压缩出空闲空间不要用第三方工具在 Ubuntu 安装器里直接缩 Windows 分区风险高。另外要在 BIOS 里关闭快速启动否则 Windows 的快速启动会导致文件系统处于半挂载状态Ubuntu 挂载 NTFS 分区时可能出问题Secure Boot 一般可以保留开启Ubuntu 官方镜像支持签名引导。2.4 镜像下载与启动盘制作镜像从官网下载即可注意选对架构。现在绝大多数 PC 是 x86_64也叫 amd64ARM 设备比如某些开发板、部分轻薄本是 arm64。下载页面会提供 Desktop 和 Server 两个版本Desktop 带图形界面Server 是纯命令行。下载完校验一下完整性这一步很多人跳过但遇到下载损坏导致安装中途报错时你会感谢自己做了校验sha256sum ubuntu-24.04-desktop-amd64.iso比对官网公布的哈希值。一致就没问题。制作启动盘用 balenaEtcher 或者 Rufus 都行。Rufus 在 Windows 上更常用注意分区类型选 GPT、目标系统选 UEFI非 CSM。写完盘插上机器开机按 F2/F12/Del 进 BIOS 调整启动顺序把 U 盘调到第一位。提示有些机器 BIOS 里同时有UEFI: 你的U盘和你的U盘两个选项一定要选带 UEFI 的那个否则会以 Legacy 模式启动和已有的 Windows 引导方式不一致后面会出现开机直接进 Windows、看不到 GRUB 的问题。3. 安装实操全流程与踩坑记录这一节讲我实际装机的流程和遇到的真实问题。以虚拟机为例因为它的可复现性最好而且不会因为分区失误损坏数据。3.1 虚拟机参数怎么给新建虚拟机时那些参数不是随便填的。CPU 核心数如果你宿主机是 8 核 16 线程给虚拟机 4 核比较合适留一半给宿主机。内存8GB 是底线16GB 更舒服尤其是你打算在虚拟机里跑 Docker 或者编译大型项目。磁盘建议 60GB 起动态分配不要固定大小因为固定大小的分配速度略快但会立刻吃掉宿主机几十 GB 空间。有个细节值得说虚拟磁盘类型选 NVMe 或 SCSI不要选 IDE。IDE 是老接口性能差而且某些新内核在处理 IDE 设备时会有奇怪的超时。另外记得在虚拟机设置里开启虚拟化引擎里的嵌套虚拟化Intel VT-x/EPT 或 AMD-V/RVI否则你在 Ubuntu 里再装 Docker 或者 KVM 会起不来。网络适配器建议先用 NAT 把系统装完装完之后如果需要局域网访问再改成桥接。桥接模式下虚拟机会从路由器的 DHCP 拿一个和宿主机同网段的 IP这样你就能用宿主机或者其他设备直接 SSH 连它了。3.2 手动分区别怕其实就四块安装器走到安装类型这一步会问你是清除整个磁盘还是其他选项。虚拟机里选清除整个磁盘完全没问题但如果你想练手我建议选其他选项手动分一次因为这套操作在真实服务器和双系统里是必需的。手动分区的典型布局以 60GB 磁盘为例挂载点大小文件系统说明/boot1GBext4可选老式 BIOS 引导时有用/boot/efi512MBFAT32UEFI 必须已有则复用/25GBext4系统和软件别给太小/home30GBext4用户数据重装可保留swap4GBswap或改用 swap 文件为什么要独立/home因为将来重装系统的时候你可以在安装器里只格式化/把/home挂载到原来的分区上不动所有配置、代码、下载文件都还在。这个习惯能省下大量重装成本。注意如果机器内存是 32GB 甚至更大独立 swap 分区意义不大。用 swap 文件的好处是随时可以调整大小命令是sudo fallocate -l 4G /swapfile然后chmod 600、mkswap、swapon再写进/etc/fstab就能持久化。3.3 安装卡住、黑屏、进不去系统的处理这类问题我遇到的次数不少按现象分类说说。卡在 logo 界面转圈不动多见于 NVIDIA 显卡的机器。原因是安装器默认加载开源 nouveau 驱动和新卡不兼容。处理办法是在 GRUB 菜单按e编辑启动参数在linux那一行末尾加上nomodeset然后 CtrlX 启动。装完之后再装闭源驱动并把nomodeset去掉。安装完成重启后黑屏可能是显卡驱动问题也可能是虚拟机 3D 加速的锅。虚拟机里先在设置里关掉 3D 加速试一次物理机仍然用nomodeset进系统先装驱动。开机直接进 Windows没有 GRUB 菜单这是双系统最常见的问题本质是引导项的优先级。可以在 BIOS 里把ubuntu调到第一位或者在 Windows 管理员命令行里执行bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi。装完没有网络虚拟机检查网络适配器是否连接物理机检查是不是网卡驱动缺失。新一点的 Intel 网卡在 22.04 上可能需要升级内核这也是我推荐新硬件用 24.04 的原因。磁盘空间不够的报错虚拟机如果用了动态磁盘实际占用是按实际写入增长的但安装器看到的是分配的总大小。如果这里报错检查虚拟机磁盘设置是不是真的够大。4. 桌面体验打磨中文、字体、常用软件系统装完能跑接下来是让它好用。这一步是最多人卡住、也最容易放弃的部分。4.1 中文输入法先选框架再选引擎Ubuntu 上的输入法体系分两层输入法框架ibus 或 fcitx5和输入法引擎拼音、五笔等。框架负责和桌面环境交互引擎负责实际的候选词生成。理解这个分层很重要因为 90% 的输入法装上了但不显示候选框都是框架和引擎不匹配导致的。GNOME 桌面默认用 ibus。它的优点是开箱即用、和系统集成好缺点是候选词质量一般、对第三方引擎支持较弱。fcitx5 是更现代的选择配置灵活、支持搜狗、Rime 等引擎是目前中文用户的主流方案。切换框架的步骤是先装 fcitx5 全家桶再配置环境变量最后在设置里把输入法框架切过去。环境变量这一步是关键sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-qt5然后在~/.pam_environment或/etc/environment里加GTK_IM_MODULEfcitx QT_IM_MODULEfcitx XMODIFIERSimfcitx很多人配完重启还是不行原因是只在当前 shell 里export了没写进配置文件或者 Wayland 会话下这些变量不生效。24.04 默认是 Wayland如果输入法怎么都起不来可以在登录界面右下角切到 Ubuntu on Xorg 试试这是最快的验证手段。注意环境变量的三个变量缺一不可。GTK 管 GTK 程序大部分 GNOME 应用QT 管 Qt 程序WPS、部分 IDEXMODIFIERS 是老式 XIM 协议某些 Java 程序靠它。少配一个就会出现浏览器里能打字终端里打不出来这种诡异现象。4.2 搜狗输入法的安装与故障排查搜狗输入法是 fcitx 的引擎不是独立框架所以必须先装好 fcitx再装搜狗顺序反了会出问题。安装包从官网下载 deb然后sudo dpkg -i sogoupinyin_*.deb sudo apt install -f第二条命令是修复依赖因为 dpkg 不会自动装依赖直接跑会报一堆 missing dependency。装完之后fcitx5 -r重启框架在 fcitx5 配置里添加搜狗拼音。常见的几个问题候选框是方块豆腐块字体缺失装fonts-noto-cjk和fonts-wqy-microhei基本能解决。输入法列表里找不到搜狗版本不匹配。24.04 上的 fcitx5 需要搜狗较新的包老版本只支持 fcitx4装上去是没有任何反应的。登录后输入法自动掉线把 fcitx5 加到自启动并在 fcitx5 配置里开启记住上次状态。说实话如果你的需求只是打字fcitx5 自带的拼音引擎已经很能打了词库质量这些年提升明显而且没有闭源包的兼容性问题。我现在主力机就是用 fcitx5 自带拼音搜狗只在需要云联想的时候临时切。4.3 终端字体接近 macOS 观感的方案很多人从 macOS 过来最不习惯的是 Linux 终端字体的观感。macOS 默认的 SF Mono 和 Menlo 字形紧凑、字重均匀、连字克制看起来非常干净。Linux 上想接近这个观感可以从这几个方向调字体本身推荐JetBrains Mono开源、连字丰富、字形工整或者Fira Code连字最全。如果你想要更接近 Menlo 的感觉Hack和Source Code Pro都是很接近的选择。安装方式很简单sudo apt install fonts-jetbrains-mono fonts-firacode装完之后旧字体文件可能还在需要刷新缓存fc-cache -fv光换字体还不够观感的差异主要来自三处字号、行高、抗锯齿。macOS 的字号感觉偏大Linux 上默认 10~11pt 会显得瘦小调成 12pt 更接近。行高方面 GNOME Terminal 可以通过修改主题或者换终端模拟器来调。抗锯齿可以用 fontconfig 配置 hinting 和 subpixel rendering!-- ~/.config/fontconfig/fonts.conf -- match targetfont edit namehinting modeassignbooltrue/bool/edit edit namehintstyle modeassignconsthintslight/const/edit edit nameantialias modeassignbooltrue/bool/edit edit namergba modeassignconstrgb/const/edit /matchhintslight是关键默认的hintfull会让笔画变粗变方看起来土。调成hintslight之后字体会柔和很多接近 macOS 的渲染风格。终端模拟器也可以换。GNOME Terminal 够用但可配置性一般Kitty、Alacritty、WezTerm这三个是现在比较主流的替代品都支持 GPU 加速、配置文件驱动、连字渲染。我个人用的是 Kitty配置文件在~/.config/kitty/kitty.conf改字体和行高都很直接font_family JetBrains Mono font_size 12.0 modify_font cell_height 130%cell_height这个参数是很多人不知道的加大一点行间距观感立刻就通透了。4.4 常用软件怎么落地微信官方 Linux 版已经推出可以去官网下载 deb 包安装如果需要更多功能也可以考虑用基于 Wine 的方案但配置成本高。日常聊天、传文件官方版够用。VS Code从官网下 deb 安装最稳也可以用 apt 加微软的源。装完之后同步设置可以用账号登录插件也能跨设备同步。Docker官方推荐通过 apt 源安装而不是apt install docker.io那个是发行版打包的旧版本。后面会详细讲。HTML 编辑器轻量的可以用 VS Code Live Server 插件如果想要所见即所得Bluefish 和 Brackets 都可以试试纯粹改文件的话 vim 加一些前端插件也够。窗口置顶在 GNOME 里窗口标题栏右键有一个Always on Top选项这个功能的实现机制是向窗口管理器发送 EWMH 规范里的_NET_WM_STATE_ABOVE属性。窗口管理器GNOME 用的是 Mutter监听这个属性变化把窗口提升到层级最上方。理解这个机制的意义在于如果你在写自定义窗口程序也可以用同样的方式实现置顶而不是靠不断调用提升窗口这种取巧办法。命令行里想控制的话可以用wmctrl -r 窗口标题 -b add,above。5. 开发环境搭建从 apt 到 Docker 的一条线桌面能用之后重头戏来了。这一节按依赖关系从底往上讲。5.1 换源、更新与基础工具链刚装完系统第一件事是更新。但直连官方源速度往往不理想换成就近的镜像站能快好几倍。备份原文件再替换sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list24.04 用的是新的 deb822 格式源文件在/etc/apt/sources.list.d/ubuntu.sources改法不太一样注意对应版本。换完源之后sudo apt update sudo apt upgrade -y sudo apt install build-essential git curl wget vim htop net-toolsbuild-essential是个元包它会把 gcc、g、make、libc-dev 这些编译必需的东西一起装上。很多人遇到 gcc 安装失败 或者 make 命令找不到其实是这个元包没装全或者 apt 索引过期导致的依赖解析失败。先apt update再装基本都能解决。5.2 GCC、CMake 与环境变量gcc --version验证编译器cmake --version验证构建工具如果没装就sudo apt install cmake。注意 Ubuntu 仓库里的 CMake 版本往往偏旧需要新版本的话得从官方脚本安装或者用 Kitware 的 apt 源。环境变量配置错误是新手最容易踩的坑之一典型现象是命令明明装了但 bash 说不认识。原因基本是PATH被改坏了。.bashrc里追加路径的正确写法是export PATH$PATH:/opt/mytool/bin关键是保留原有的$PATH而不是写成export PATH/opt/mytool/bin——后者会把系统路径全清掉导致ls、cd这些命令都用不了。真的搞坏了也别慌用绝对路径/usr/bin/vim ~/.bashrc改回来即可。环境变量的加载顺序也要清楚登录时先读/etc/profile再读~/.profile如果是交互式 shell 还会读~/.bashrc。图形界面程序启动时读的是/etc/environment和~/.pam_environment不读.bashrc。这就是为什么你在终端里配好的代理或者输入法变量在图形程序里不生效。5.3 Python 生态Miniconda3 与依赖管理系统自带的 Python 不要动很多系统工具依赖它。要写代码就装 Miniconda3好处是能创建互相隔离的环境避免这个项目要 numpy 2.2.5、那个项目要 1.x的死局。wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc conda create -n dev python3.11 conda activate dev pip install numpy2.2.5指定版本安装的时候如果这个版本在你的 Python 版本下没有预编译轮子wheelpip 会尝试从源码编译这时候缺 C 编译器或者 BLAS 库就会报一堆红字。所以先装build-essential能省掉大量麻烦。提示conda 和 pip 混用要小心。原则是同一个环境里尽量只用一种包管理器。conda 装二进制依赖numpy、scipy 这类pip 装纯 Python 的或者 conda 里没有的包。混用容易导致依赖冲突和重复安装。5.4 Docker 的安装与常见配置Docker 在 Ubuntu 上装的时候不要用apt install docker.io那个版本旧且更新慢。正确做法是加官方的 apt 源sudo apt install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release echo $VERSION_CODENAME) stable | sudo tee /etc/apt/sources.list.d/docker.list sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin装完之后把当前用户加进 docker 组这样就不用每次sudosudo usermod -aG docker $USER newgrp docker注意newgrp或者重新登录才生效。这一步的代价是把你加进了特权组安全性上有取舍个人开发机可以这么干生产服务器要谨慎。验证docker run --rm hello-world docker ps如果报 Cannot connect to the Docker daemon检查systemctl status docker服务没起就sudo systemctl enable --now docker。5.5 嵌入式方向串口、开发板与 Zephyr做嵌入式的话Ubuntu 是非常主流的宿主机环境。CH340 是最常见的 USB 转串口芯片很多开发板都用它。Ubuntu 内核自带 ch341 驱动插上之后lsmod | grep ch34 ls /dev/ttyUSB* dmesg | tail正常情况下能看到/dev/ttyUSB0。如果看不到可能是权限或者驱动问题sudo usermod -aG dialout $USER加进 dialout 组之后重新登录普通用户就能访问串口了不用每次都sudo。用 minicom 或者 picocom 连接picocom -b 115200 /dev/ttyUSB0Zephyr 是现在很火的 RTOS官方推荐在 Linux 上开发。基本流程是建 Python 虚拟环境、pip install west、west init拉代码、west update拉依赖、west build编译。第一次west update会拉一大堆模块网络不好会失败可以配置 git 的超时和重试。开发板挂载这块常见方式有几种USB 直连串口和调试器、TF 卡烧录、网络挂载NFS/TFTP。NFS 挂载对内核开发最方便改代码不用反复烧写。配置的时候注意开发板和宿主机要在同一网段防火墙放行 NFS 端口。6. 网络与远程连接排查6.1 网络模式的选择与静态 IP 配置虚拟机三种网络模式的区别值得说清楚。NAT虚拟机通过宿主机上网对外没有独立 IP宿主机可以访问虚拟机需要端口转发局域网其他机器访问不到。桥接虚拟机直接从路由器拿 IP和宿主机平级局域网内互相可访问。仅主机Host-only只能和宿主机通信不能上外网适合隔离测试环境。如果你要做远程调试、给开发板做 NFS桥接是最省事的。切到桥接之后虚拟机里用ip a看 IP通常和宿主机同网段。想固定 IP 的话Ubuntu 现在用 netplan 管理网络配置文件在/etc/netplan/下YAML 格式注意缩进必须用空格不能用 Tabnetwork: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 8.8.8.8]改完执行sudo netplan apply。有语法错误会导致网络直接断掉所以改之前先备份或者用netplan try它会在 120 秒后自动回滚比直接 apply 安全得多。6.2 SSH 连不上按层排查SSH 连不上是高频问题我总结了一个从底往上的排查顺序按这个顺序走基本能定位现象可能原因处理方式ping 不通网络不通或防火墙检查网络模式、ufw statusping 通但端口连不上sshd 没启动systemctl status ssh提示 Connection refused端口不对或被改检查sshd_config里 Port提示 Permission denied密码错或禁用了密码登录检查PasswordAuthentication连接后立刻断开权限问题或 shell 异常看/var/log/auth.log服务端要装 openssh-server很多桌面版默认不装sudo apt install openssh-server sudo systemctl enable --now ssh sudo systemctl status ssh防火墙用sudo ufw status看如果开着并且没放行 22 端口sudo ufw allow 22/tcp。还有一个容易忽略的点Ubuntu 24.04 的 SSH 默认配置有变化部分版本默认不启用密码登录只允许密钥。如果你坚持用密码需要显式设置PasswordAuthentication yes并重启服务。6.3 Xshell 和其他终端工具的连接要点Xshell 是 Windows 上常用的 SSH 客户端连 Ubuntu 的时候几个要点协议选 SSH端口 22主机填虚拟机 IP。如果网络是 NAT 模式需要先在 VMware 的虚拟网络编辑器里加一条端口转发规则把宿主机的某个端口映射到虚拟机的 22 端口。如果连接时频繁超时检查 SSH 服务端的保活设置。在/etc/ssh/sshd_config里ClientAliveInterval 60 ClientAliveCountMax 3这样服务端每 60 秒发一次保活包三次没有响应才断开能避免长时间不操作被踢掉。用密钥登录的话在客户端生成密钥对把公钥追加到服务端的~/.ssh/authorized_keys注意文件和.ssh目录的权限目录 700文件 600。权限不对的话 sshd 会直接拒绝而且日志里的提示很不明显。7. 显卡驱动、系统信息与系统重装7.1 显卡驱动装哪个、怎么装Ubuntu 装 NVIDIA 驱动有几种方式我的建议是优先用系统自带的附加驱动工具。命令行的话先看有哪些可用ubuntu-drivers devices输出会列出推荐版本一般带recommended标记的就是最稳的。安装sudo ubuntu-drivers autoinstall或者指定版本sudo apt install nvidia-driver-550。装完必须重启然后验证nvidia-smi能看到显卡型号、驱动版本、显存占用就成功了。如果nvidia-smi报 couldnt communicate with the NVIDIA driver通常是驱动版本和内核版本不匹配或者 Secure Boot 拦截了未签名模块。后者需要给模块签名或者临时关掉 Secure Boot。查看显卡信息的通用命令不依赖驱动lspci | grep -i vga lspci -k | grep -A 3 -i vgalspci -k能显示当前设备正在用哪个内核模块这对排查是不是还在用 nouveau很有用。注意装驱动之前先sudo apt install linux-headers-$(uname -r)因为 NVIDIA 驱动需要编译内核模块缺头文件会安装失败。这个报错很常见日志里写的 Unable to find the kernel source tree 就是这个意思。7.2 系统信息查询的常用命令这些命令平时不起眼但排查问题时全靠它们。uname -a # 内核版本和架构 lsb_release -a # 发行版信息 arch # 架构简写 dpkg --print-architecture # 软件包架构amd64/arm64 free -h # 内存和 swap df -h # 磁盘使用 lscpu # CPU 详情 lsblk # 块设备看分区最直观lsblk是我最常用的一个输出是树状结构一眼能看出磁盘、分区、挂载点、大小。排查磁盘满了分区挂错了这类问题非常快。7.3 系统重装前的数据保全重装这件事做得越熟练越要谨慎。我的固定流程是这样的首先是导出软件清单这样重装之后能一键恢复大半环境dpkg --get-selections ~/pkglist.txt重装后dpkg --set-selections pkglist.txt apt-get dselect-upgrade但注意手动装的第三方 deb 不会在列表里需要单独记录。其次是配置文件的备份。最关键的几个目录~/.ssh、~/.config、~/.bashrc、/etc/fstab、/etc/netplan、/etc/apt/sources.list.d。我习惯整个/home打包一次即使有独立 home 分区也照样备份因为分区操作总有意外。tar -czvf home_backup.tar.gz -C / home --excludehome/*/.cache排除.cache能省掉大量无用数据。如果要做软 RAID 之类的存储配置重装前一定要记录清楚阵列的成员盘、级别、chunk 大小mdadm --detail /dev/md0的输出直接存成文本。重装后重新组装阵列是mdadm --assemble --scan但如果元数据丢了恢复就非常麻烦。8. 常见问题速查表与排错思路8.1 高频故障对照表问题大概率原因快速处理apt install 报依赖错误索引过期或源混乱apt update后重试检查 PPA命令找不到但确实装了PATH 被覆盖检查.bashrc里的 export中文显示为方块缺 CJK 字体装 fonts-noto-cjk输入法候选框不显示框架环境变量没配三个 IM_MODULE 变量齐全虚拟机分辨率不能改没装增强工具装 open-vm-tools-desktop复制粘贴失效同上同上重启生效磁盘突然满了日志或缓存堆积du -sh /*逐层定位开不了机停在 grub引导项损坏用 live USB 修复 grub时间不对UTC 与本地时间冲突timedatectl set-local-rtc 18.2 我的几条通用排错原则第一先看日志再猜。Linux 的日志系统非常完善journalctl -xe看最近的错误dmesg | tail -50看内核消息/var/log/下按服务分类。大部分问题日志里已经写明了原因只是提示得比较隐晦。养成看日志的习惯能省掉大量瞎试的时间。第二一次只改一个变量。配置出问题的时候很多人会同时改五六个地方然后重启结果好了不知道是哪个起的作用坏了也不知道是哪个搞的。正确的做法是改一处、验证一处、记录一处。第三善用快照和备份点。虚拟机快照、timeshift系统快照、重要配置的 git 仓库这三样东西能把你从系统搞挂了要重装的绝望里救出来。我现在的习惯是任何涉及系统级配置的改动之前先手动打一个 timeshift 快照代价是几十秒收益是几小时。第四搜索时带上版本号和完整报错。搜 Ubuntu 装不上驱动 和搜nvidia-smi has failed ubuntu 24.04 kernel 6.8得到的结果质量天差地别。报错信息原样复制粘贴去搜尤其是英文部分命中率最高。第五不要迷信网上的一键脚本。很多脚本会改一堆你没意识到的系统配置跑完之后系统是能用了但你不知道自己失去了什么。要看清楚脚本做了什么实在看不懂就在虚拟机里先跑一遍观察变化。8.3 几个我踩过的具体坑apt upgrade的时候如果提示要删除大量包先停下来看清楚。有一次我从 22.04 升级到 24.04中途某个第三方源没有对应版本导致 apt 打算卸载一大批依赖包强行确认之后桌面环境直接没了。正确的做法是先把第三方源禁用升级完系统再逐个恢复。还有一次是sudo chown -R用错了目录把/usr的属主改成了普通用户结果 sudo 直接不能用因为 sudo 二进制文件要求属主是 root。这种时候只能进恢复模式用 root shell 改回来。chown -R和chmod -R加在系统目录上之前手一定要停三秒。rm -rf也是同理。我现在养成一个习惯凡是带通配符的删除命令先把它 echo 出来看一眼展开结果确认无误再把 echo 换成 rm。最后分享一个日常很实用的小技巧把常用的一大堆环境配置写成脚本放在~/setup/目录里用 git 管理起来。换机器的时候 clone 下来跑一遍几分钟就能恢复到一个可用的环境。这个习惯我坚持了三年多换过四五台机器每次省下的时间加起来相当可观。脚本不用写得多完美能跑、有注释、分层组织就行——base.sh装基础工具、dev.sh配开发环境、gui.sh弄桌面软件各管一摊哪块出问题改哪块互不影响。
阅读完成 · 觉得有帮助?