Ubuntu(中文常写作乌班图)这套系统值得写一篇从安装到实战的完整记录,原因不是它有多新奇,而是它能用一台普通笔记本、一台旧台式机,或者一台最低配的云服务器,把“装系统、配环境、跑服务”这条链路完整走一遍。很多人卡住的地方其实不在安装那几步点鼠标,而在装完之后:软件源更新不动、中文输入法打不出字、权限被拒、服务起不来、磁盘莫名其妙满了。这篇内容面向三类人:第一次装 Linux 的新手、想把自己的开发机换成 Ubuntu 的开发者、以及需要维护一台 Ubuntu 服务器但不熟悉命令行的同学。最值得先关注的是三件事:安装时的分区和引导选择、装完后的软件源与中文环境、以及出问题时的排查顺序。前两件决定你能不能顺利进入系统,第三件决定你能不能长期用下去。
1. 先定清楚装哪一版:桌面、服务器、还是先用虚拟机试水
装 Ubuntu 最常见的时间浪费,是还没想清楚用途就开始做 U 盘。桌面版、服务器版、虚拟机里的试用环境,这三条路的安装流程、后续操作习惯和踩坑点完全不一样。先把这个岔路口定下来,后面的步骤才有意义。
1.1 三种安装形态的实际差别和适用人群
**桌面版(Desktop)**带图形界面,默认是 GNOME 桌面,适合日常办公、写代码、学习 Linux 命令。它的优势是你能看见文件管理器、终端、设置面板,出问题时至少有图形界面可以打开浏览器查资料。劣势是占用资源更多,一台只有 4GB 内存的老机器跑起来会比较吃力。
**服务器版(Server)**没有图形桌面,装完就是一个命令行登录界面。它适合云主机、内网服务、长期开机跑任务的场景。资源占用低,一台 1 核 1G 的云主机也能跑起来。但如果你是第一次接触 Linux,直接上服务器版会有点难受:没有浏览器,查报错只能靠另一台设备。
虚拟机或子系统适合试水。虚拟机的好处是装坏了直接删掉重来,不影响你现有的 Windows 或 macOS;坏处是图形性能一般,涉及显卡、USB 设备直通的操作会比较别扭。
| 形态 | 适合谁 | 资源下限参考 | 主要限制 |
|---|---|---|---|
| 桌面版 | 学习、日常开发、办公 | 双核 + 4GB 内存起,建议 8GB | 图形界面吃内存,老显卡可能要装驱动 |
| 服务器版 | 云主机、常驻服务、远程开发 | 1 核 + 1GB 内存可试,建议 2GB | 无图形界面,全靠命令行 |
| 虚拟机 | 第一次接触、想反复重装 | 分配 2 核 + 4GB 内存 | 图形卡顿,硬件直通麻烦 |
| 双系统 | 想保留原系统又要原生性能 | 磁盘至少留 60GB | 分区和引导容易出错,风险最高 |
这里有个判断标准:如果你还在犹豫要不要长期用,就先装虚拟机;如果确定要当主力开发机,直接装桌面版;如果只是要一台跑服务的机器,用服务器版。
1.2 硬件、分区和安装介质的准备清单
磁盘空间这块,官方给的“最低要求”只能保证系统能装进去,日常用起来会很紧张。我的建议是:桌面版至少留 40GB,能到 60GB 更稳;如果你还要装开发工具链、Docker 镜像、数据集,100GB 起步比较舒服。服务器版 20GB 到 25GB 可以跑,但日志和缓存会慢慢吃掉空间,需要定期清理。
内存方面,桌面版 8GB 是体感分水岭。4GB 能开机、能上网,但同时开浏览器十几个标签加一个 IDE 就会开始频繁读写交换分区,风扇声会很响。这不是系统的问题,是内存真的不够。
安装介质准备:
- 一个 8GB 以上的 U 盘,制作过程会清空里面所有数据,提前备份。
- 系统镜像文件,选 LTS(长期支持)版本更稳,具体下哪一个以你打开下载页面时提供的列表为准。
- 写盘工具,Windows 上常用 Rufus 或 balenaEtcher,Linux 和 macOS 上可以直接用
dd。
下载完之后先校验一下文件完整性,这一步很多人跳过,结果是装到一半报错,浪费更多时间。
bash复制# Linux / macOS 下校验镜像,把文件名换成你实际下载的
sha256sum ubuntu-xx.xx-desktop-amd64.iso
拿到的哈希值和下载页面上公布的一致,说明文件没下坏。不一致就重新下,不要抱着侥幸心理继续写盘。
还有一个容易被忽略的前置条件:UEFI 和安全启动(Secure Boot)。现在绝大多数机器都是 UEFI 引导,Ubuntu 对安全启动的支持是有的,但如果你还要装第三方显卡驱动或者某些内核模块,可能会被拦下来。装之前进 BIOS 确认一下引导模式,记下开机时按哪个键进启动菜单(常见是 F2、F12、Del,不同品牌不一样),这些信息在装完系统出问题时很有用。
1.3 做 U 盘和改启动项这一步最容易卡住
写盘工具的操作都很简单:选镜像、选 U 盘、点开始。真正容易卡住的是后面两步。
第一是启动项没改对。U 盘插上去,重启,结果还是进了原来的系统。原因通常是启动顺序没调,或者这台机器需要用一次性启动菜单(Boot Menu)而不是改 BIOS 里的永久顺序。我一般会优先试一次性启动菜单,改完不管用也不影响原设置。
第二是U 盘做完了但启动不起来。常见原因有三个:写盘过程中断了、U 盘本身有坏块、以及这台机器只认某种分区格式的启动盘。前两个换 U 盘重做就行,第三个要看你用的写盘工具是不是按 UEFI 模式写的。
动手之前先把原系统里的重要文件复制到移动硬盘或云盘。分区操作一旦执行,恢复成本很高,这一步省不得。
如果你打算装双系统,顺序很重要:先装 Windows,再装 Ubuntu。反过来的话,Windows 的引导程序很容易把 GRUB 覆盖掉,最后两个系统都进不去,得用 Live 环境修复。另外 Windows 那边的“快速启动”和磁盘加密建议提前处理掉,尤其是加密,一定要先把恢复密钥备份出来,否则后面调整分区会让你很被动。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装向导里的几个分岔口,选错了后面全是麻烦
Ubuntu 的安装向导一共就那么几屏,但它把最关键的几个决定都塞在了很短的时间里。分区、用户、要不要边装边更新,这几个选项选错,轻则用起来别扭,重则开不了机。
2.1 分区方案:让新手不慌的最小可行分法
安装向导里的分区选项通常有三种:擦除整盘安装、与其他系统共存、手动分区。前两个是给不想折腾的人准备的,第三个是给你想控制布局的人准备的。
擦除整盘安装最省事,系统会自动划分 EFI 分区、根分区和交换文件。缺点是整块盘的数据全没了,所以执行前一定确认这块盘上没有你要留的东西。
与其他系统共存会自动压缩现有分区腾出空间。它一般能用,但我见过压缩失败、压缩后 Windows 起不来的情况。如果原系统盘快满了,或者有多个分区,建议先在 Windows 的磁盘管理里手动压缩出未分配空间,再进 Ubuntu 安装程序选手动分区。
手动分区看着吓人,其实只要理解三个东西:
| 挂载点 | 作用 | 大小建议 | 说明 |
|---|---|---|---|
/boot/efi |
EFI 引导分区 | 512MB 到 1GB | UEFI 机器必须有,双系统时复用已有的那个,不要新建 |
/ |
根分区,系统和软件都在这 | 40GB 起 | 装桌面版和开发工具建议 60GB 以上 |
/home |
用户文件 | 剩余空间 | 单独分出来的好处是重装系统时数据能保留 |
| swap | 交换空间 | 内存 8GB 以下建议给 4GB 到 8GB | 现在默认用交换文件,手动分区时也可以不单独划 |
双系统用户注意:EFI 分区要复用 Windows 已经建好的那个,只在里面新增 Ubuntu 的引导文件,不要格式化它。格式化 EFI 分区会直接导致 Windows 也进不去。
还有一个细节,如果你把 /home 单独分出来了,重装系统时记得在分区界面手动指定挂载点,并且不要勾选格式化,否则数据照样没。这一点我见过太多人踩。
2.2 用户、主机名、时区和“最小安装”选项
用户名建议全小写,别带空格和特殊字符。Linux 的用户名会出现在路径里,带空格的话以后写脚本、配服务都要加引号,纯属给自己找麻烦。主机名同理,用有意义的名字,比如 dev-box 或者 web-01,以后 SSH 登录多台机器时不会搞混。
密码这块,桌面版日常使用建议设置一个你能记住的强密码,因为 sudo 会频繁要求输入。服务器版则建议直接配 SSH 密钥登录,密码登录后面可以关掉。
时区选对很重要,不然日志时间、定时任务、证书有效期判断全是错的。安装时如果机器联网,一般会自动选对;没联网就手动选一下。
**“最小安装”**这个选项会跳过一些常用软件(办公套件、部分游戏和工具),装出来的系统更干净。我的习惯是:开发机勾最小安装,之后按需装;给非技术用户装的机器就不勾,省得后面还要一个个补。
安装过程中还有一个“安装时下载更新”的勾选项。网络条件好的话勾上没问题,但如果你的网络到软件源比较慢,这一步会把安装时间拉得很长,甚至卡在中途。更稳的做法是先不勾,装完进系统之后再统一更新。原因很简单:安装阶段的更新失败了很难排查,进系统之后至少能看到错误信息,能换源、能重试。
2.3 首次进系统后的三件必做事项
装完重启,第一件事是确认能正常进入桌面(或命令行登录)。进去之后别急着装软件,先做这三件:
第一,更新系统。
bash复制sudo apt update
sudo apt upgrade -y
apt update 是刷新软件源里的包列表,apt upgrade 才是真正升级已安装的软件。很多人只跑第一条,然后发现软件版本没变,就是这个原因。第一次升级可能会更新内核,跑完之后建议重启一次。
第二,处理驱动。 桌面版可以打开“附加驱动”面板看有没有可用的专有驱动,或者在命令行跑:
bash复制ubuntu-drivers devices
它会列出检测到的硬件和建议的驱动。显卡驱动这一步在笔记本上尤其值得做,否则可能遇到亮度调节失灵、外接显示器不识别、休眠唤醒黑屏这些问题。服务器版一般不需要管这个。
第三,做一次系统快照。 这一步是给自己留后路。在还没折腾任何配置之前拍一个快照,后面把系统搞坏了能几分钟回滚。桌面版可以用 Timeshift 这类工具,服务器版如果是在云上,直接用云平台自带的快照功能。
快照不是备份。快照和原系统在同一块盘上,盘坏了一起没。重要数据还是要单独备份到别的地方。
3. 把“能装软件”这件事打通:软件源、apt 和中文环境
Ubuntu 好不好用,很大程度上取决于软件源通不通、中文环境配没配好。这两个问题不解决,后面所有操作都会别扭。
3.1 软件源和 apt 的更新节奏
Ubuntu 装软件主要靠 apt,它从配置文件里列出的软件源地址下载包。默认源在境外,国内访问可能很慢。这时候需要换成响应更快的镜像源。
配置文件的位置在不同版本间有变化:较早的版本主要是 /etc/apt/sources.list 这一个文件,较新的版本开始用 /etc/apt/sources.list.d/ 目录下的 .sources 文件。改之前先看一眼自己机器上是哪种,别照着旧教程改了一个不生效的文件。
bash复制# 先备份,改坏了能还原
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 看看当前用的是哪些源
grep -v '^#' /etc/apt/sources.list | grep -v '^$'
换源的原则是:地址要和你的系统版本代号对应。代号填错了,apt update 会报 404 或者签名校验失败。查自己的版本代号:
bash复制lsb_release -cs
换完之后必须再跑一次 sudo apt update,看到一堆 Hit 或 Get 而不是大段 Err,才算通。
apt 的常用操作其实就那几个,但顺序要理清:
bash复制sudo apt update # 刷新包列表
apt search 关键词 # 搜包
apt show 包名 # 看包信息、版本、依赖
sudo apt install 包名 # 安装
sudo apt remove 包名 # 卸载,保留配置
sudo apt purge 包名 # 卸载并删配置
sudo apt autoremove # 清理不再需要的依赖
apt show 这一步很多人跳过,结果装了个版本很旧的包,或者没注意到它会顺带装一堆依赖。装之前看一眼版本和依赖,能省掉不少麻烦。
3.2 中文输入法、字体和编码
装完系统发现中文显示成一堆方块,或者输入法切不出来,是新手最常问的两个问题。
字体问题通常是没装中文字体。装一个覆盖比较全的字体包就行:
bash复制sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
装完如果界面还是方块,注销重新登录,或者清一下字体缓存:
bash复制fc-cache -fv
输入法现在主流方案是 Fcitx5 配拼音。装完之后要在“语言支持”里把输入法框架切换过去,再注销重登,最后在输入法配置里添加拼音引擎。顺序错了会表现为:装了但切不出来、能切出来但打不出候选词。这类问题九成是框架没切换或者没重新登录。
bash复制sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-qt5
编码问题在服务器上更常见。中文乱码、日志里全是问号,先看当前 locale:
bash复制locale
如果输出里有 POSIX 或者空的 LANG,说明没配语言环境。生成一下并设成默认:
bash复制sudo locale-gen en_US.UTF-8 zh_CN.UTF-8
sudo update-locale LANG=en_US.UTF-8
服务器上我一般建议用 en_US.UTF-8 而不是中文 locale:日志、报错信息保持英文更方便搜索,中文显示靠终端本身支持就够了。
3.3 依赖冲突和 snap、deb、flatpak 的选择边界
Ubuntu 上装软件有三条路,各有各的边界。
deb 包(通过 apt 装)是原生方式,启动快、和系统集成好,但版本往往偏旧,因为发行版会锁定版本保证稳定。
snap 是 Ubuntu 主推的打包格式,自带运行时依赖,版本新,隔离性好。代价是首次启动慢(要挂载镜像)、占用磁盘更多、某些场景下访问系统资源受限。桌面版很多预装软件就是 snap 包,第一次打开等十几秒是正常的,不是卡死。
flatpak 是另一种通用打包格式,桌面应用生态比较活跃,需要先装 flatpak 并添加软件仓库。
选择上的判断标准很简单:
- 系统工具、命令行工具、开发依赖:优先 apt。
- 桌面应用、想要新版本:可以试 snap 或 flatpak。
- 服务器环境:尽量只用 apt,减少不必要的运行时层,排查问题更直接。
依赖冲突是另一类高频问题。典型表现是装 A 的时候提示“以下软件包有未满足的依赖关系”。处理顺序是:
bash复制sudo apt update
sudo apt --fix-broken install # 先尝试修复破损依赖
sudo apt install -f # 再补装缺失依赖
如果还不行,看它到底在抱怨哪个包的哪个版本,很多时候是你手动装了一个高版本 deb,和源里的版本打架。这时候 apt policy 包名 能看清候选版本是从哪个源来的。
4. 命令行这关必须过:目录、权限、常用操作
Ubuntu 桌面版可以只用鼠标操作,但一旦涉及服务器、脚本、部署,命令行就绕不开。这一节不追求把命令背全,而是把“能看懂、能判断、不出事”这三件事讲清楚。
4.1 目录结构和挂载关系
Linux 没有 C 盘 D 盘的概念,所有东西都挂在根目录 / 下面。先记住这几个:
| 路径 | 放什么 | 注意点 |
|---|---|---|
/etc |
系统和服务配置 | 改之前先备份,改坏了服务起不来 |
/var |
日志、缓存、数据库文件 | 最容易撑爆磁盘的地方 |
/usr |
系统级软件和库 | 不要手动往里塞东西 |
/home |
用户目录 | 重装系统时想保留的就是它 |
/opt |
第三方软件 | 手动装的商业软件常放这 |
/tmp |
临时文件 | 重启可能被清空,别放重要数据 |
/boot |
内核和引导文件 | 空间小,旧内核太多会满 |
看磁盘和挂载情况,最常用的两条:
bash复制lsblk # 看块设备和挂载点
df -h # 看各分区用了多少、还剩多少
/etc/fstab 是开机自动挂载的配置文件,改动它风险很高——写错一行,机器可能进不了系统。如果确实要加挂载项,改完先跑 sudo mount -a 验证,没报错再重启。这一条我建议写进肌肉记忆。
4.2 sudo、文件权限和属主
sudo 是临时获取管理员权限。默认情况下,安装时创建的第一个用户会在 sudo 组里,可以执行 sudo。如果新加的用户执行 sudo 报“不在 sudoers 文件中”,把它加进组就行:
bash复制sudo usermod -aG sudo 用户名
注意 -aG 里的 a 不能省,省了会把用户从其他附加组里踢出去。
文件权限用 rwx 三组表示:属主、属组、其他人。ls -l 看到的 -rw-r--r-- 就是这套规则。
bash复制chmod 644 文件 # 属主读写,其他人只读,普通文件常用
chmod 755 目录 # 属主读写执行,其他人读和执行,目录常用
chmod +x 脚本.sh # 加上执行权限
chown 用户:组 文件 # 改属主和属组
几个实操判断:
- 网页目录、脚本文件用 755,配置文件用 644。
777看着省事,实际上是把权限全打开了,多人环境里是隐患。- 脚本报 “Permission denied”,先看是不是没有执行权限,而不是怀疑脚本写错了。
- SSH 私钥文件权限必须是 600,权限太宽 ssh 会直接拒绝使用。
umask 决定了新建文件的默认权限,默认 022 意味着新建文件是 644、新建目录是 755。这个值一般不用动,除非你在做多用户共享目录。
4.3 一组够用的命令清单
不需要一次记全,先掌握下面这些,日常 80% 的操作就够了。
bash复制ls -lh # 看目录内容,带大小
cd /var/log # 切目录
pwd # 当前在哪
cp -r 源 目标 # 复制目录
mv 源 目标 # 移动或改名
rm -rf 目录 # 删目录,不可恢复,执行前看清路径
find /var/log -name "*.log" -size +100M # 找大日志
grep -rn "关键词" 目录 # 递归搜内容
tail -f 日志文件 # 实时看日志
du -sh /* | sort -h # 看各目录占了多少
ps aux | grep 进程名 # 找进程
ss -tulnp # 看端口占用
systemctl status 服务名 # 看服务状态
journalctl -u 服务名 -n 100 # 看服务最近日志
tar -czf 包.tar.gz 目录 # 打包压缩
重点说两个:rm -rf 和 du -sh。
rm -rf 不会问你确认,删了就是删了。执行之前先 pwd 确认自己在哪,路径尽量写绝对路径,不要在有变量的情况下随手回车。我见过在 / 下执行删除的例子,结果是重装系统。
du -sh /* 是磁盘满时的第一诊断命令。它能告诉你到底是 /var 涨了还是 /home 涨了,比盲目找快得多。注意 /* 会跳过隐藏目录,如果怀疑是隐藏目录占的空间,再单独看。
5. 实战:把它做成能干活的环境
装好系统、配好源,接下来就是让它真正能干活。这一节按“开发环境、常驻服务、容器化”三个层次走,每一步都给出验证方式,避免配完了不知道有没有生效。
5.1 Python、Node、Git 的安装顺序和隔离原则
Ubuntu 自带 Python 3,但不要直接往系统 Python 里装包。系统的一部分工具依赖它,装乱了可能导致包管理器自己出问题。现在的 apt 版本已经会拦这种情况:
bash复制pip3 install requests
# 可能报错:externally-managed-environment
这个报错不是 bug,是保护机制。正确做法是用虚拟环境:
bash复制sudo apt install python3-venv python3-pip
python3 -m venv ~/venv/demo
source ~/venv/demo/bin/activate
pip install requests
激活之后命令行前面会出现 (demo),这时候装的包都隔离在这个环境里。用完 deactivate 退出。需要装命令行工具类的 Python 程序,用 pipx 更省事,它会给每个工具单独建环境。
Node 这边同理,不建议直接用系统源装全局的 node,各项目依赖的版本经常不一样。用版本管理工具更稳:
bash复制# 示例思路:用 nvm 管理 Node 版本,具体安装命令以项目文档为准
node -v
npm -v
Git 基本是必装:
bash复制sudo apt install git
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main
ssh-keygen -t ed25519 -C "你的邮箱"
生成密钥后把公钥(~/.ssh/id_ed25519.pub)加到代码平台的账号里,之后推送就不用反复输密码了。私钥永远不要外传,权限保持 600。
验证这一步很简单:新建一个目录,git init,写个文件,git add 再 git commit,能提交成功就说明配置没问题。
5.2 用 systemd 托管一个常驻服务
把程序放在终端里前台跑,关掉窗口就没了,这不是能用的状态。Ubuntu 用 systemd 管理服务,自己写的程序也可以挂进去。
假设你有一个脚本 /opt/demo/app.sh,先建一个服务文件:
ini复制# /etc/systemd/system/demo.service
[Unit]
Description=Demo Service
After=network.target
[Service]
Type=simple
User=demo
WorkingDirectory=/opt/demo
ExecStart=/opt/demo/app.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
几个关键项的含义:
User:用哪个用户跑。不要图省事用 root,出问题时影响面太大。WorkingDirectory:工作目录。相对路径的读写都基于它,不设容易找不到文件。Restart=on-failure:异常退出自动重启。这是常驻服务的基本要求。RestartSec:重启间隔,防止疯狂重启把日志刷爆。
启用并验证:
bash复制sudo systemctl daemon-reload
sudo systemctl enable --now demo.service
systemctl status demo.service
journalctl -u demo.service -n 50 --no-pager
daemon-reload 这一步经常被忘。改了服务文件不 reload,改动不生效,然后你会怀疑自己写错了。
服务起不来看什么?先看 status 里的退出码和最后几行输出,再看 journalctl。最常见的三个原因:脚本没有执行权限、路径写的是相对路径、以及脚本里依赖的环境变量在 systemd 里不存在(systemd 不读你的 .bashrc)。第三个尤其隐蔽,表现是手动跑没问题,做成服务就报 command not found。
5.3 Docker 该不该上,什么时候上
Docker 解决的是环境一致性问题。如果你只跑一两个简单服务,直接用系统包安装反而更轻。但如果你的项目依赖特定版本的运行时、需要多环境并存、或者要把部署流程固化,Docker 的价值就出来了。
判断标准:
- 需要反复在不同机器上部署同一套环境:值得上。
- 只是本地跑个脚本、一个小工具:没必要。
- 服务器内存只有 1GB:要慎重,镜像和容器本身也要吃资源。
安装后有一个必须注意的点:默认只有 root 能操作 Docker。把用户加进 docker 组能免 sudo,但这等同于给了这个用户很高的系统权限,多人环境要评估清楚。
bash复制sudo usermod -aG docker $USER
# 需要重新登录才生效
docker ps
验证 Docker 是否正常,不要只看 docker -v。跑一个最小容器,能拉镜像、能启动、能输出,才算真的通:
bash复制docker run --rm hello-world
拉不动镜像通常是网络问题,先确认基础网络通不通,再考虑镜像地址配置,不要一上来就怀疑 Docker 装坏了。
6. 出问题时的排查顺序:从开不了机到软件装不上
Ubuntu 的报错信息整体算友好,但新手容易在第一步就走偏:看到报错就去搜,搜到一堆不相关的答案,越改越乱。下面这套顺序是我自己用的,核心思路是先分层定位,再动手改。
6.1 启动和引导类问题
现象一:开机直接进了 Windows,没有 Ubuntu 选项。
这说明引导项顺序不对,或者 GRUB 没装上。先进 BIOS 看启动顺序里有没有 ubuntu 这一项。有的话调顺序;没有的话,用安装 U 盘进 Live 环境修复 GRUB。修复命令要针对你的磁盘,执行前用 lsblk 确认盘符,别照着教程无脑复制。
现象二:选了 Ubuntu 之后黑屏或者卡在 logo。
先等一到两分钟,有些机器首次启动要初始化。真的卡住,重启时在 GRUB 菜单按 e 编辑启动参数,在 linux 那一行末尾加 nomodeset,然后启动。这个参数会跳过显卡的模式设置,能进系统就说明是显卡驱动的问题,进去之后再装合适的驱动。
现象三:进系统后分辨率不对、外接屏不亮。
基本可以确定是显卡驱动。回到 2.3 节,用 ubuntu-drivers devices 看建议驱动,装完重启。
现象四:更新内核之后进不去了。
GRUB 菜单里选“高级选项”,能选到旧内核启动。进去之后把新内核卸掉或者修好驱动,别急着重装系统。
这类问题的共同点是:能用 Live 环境就别急着重装。Live 环境里能挂载原系统的分区,能看日志(/var/log/syslog、journalctl -b -1 看上一次启动的日志),能改配置,大部分引导问题都能救回来。
6.2 软件安装、网络和磁盘类问题
apt update 报错。 按这个顺序看:
- 报 404:源地址里的版本代号写错了,用
lsb_release -cs对一下。 - 报签名错误(NO_PUBKEY):缺 GPG 公钥,需要导入对应的 key。
- 报连接超时:网络到源不通,先
ping一下源域名,再考虑换源。 - 报“无法获得锁”:有另一个 apt 进程在跑,等它结束,或者确认没有残留进程后再处理锁文件。
装软件报依赖问题。 先 sudo apt --fix-broken install,再看 apt policy 包名 确认版本来源。如果之前手动装过 deb 包,很可能是它和源里的版本冲突,先卸掉手动装的那个。
磁盘满了。 这是服务器上最常见的问题,排查顺序:
bash复制df -h # 哪个分区满
sudo du -sh /var/* | sort -h # /var 下面谁大
sudo journalctl --disk-usage # 日志占了多少
sudo journalctl --vacuum-size=200M # 日志压到 200M
sudo apt clean # 清理 apt 缓存
日志是最常见的元凶,尤其是某个服务在反复重启,日志能几分钟涨到几个 G。这时候要做的不是清日志,而是先看那个服务为什么重启。
网络不通。 顺序是:ip a 看有没有 IP,ping 网关 看局域网通不通,ping 外部地址 看出口通不通,最后看 DNS(cat /etc/resolv.conf,注意这个文件可能被 systemd-resolved 接管,手改会被覆盖)。
6.3 长期使用的备份、快照和升级节奏
系统能跑起来只是开始,长期用下去要考虑两件事:出事了怎么恢复,以及什么时候升级。
快照和备份要分开做。 快照解决的是“我把配置改坏了”,备份解决的是“这块盘坏了”。桌面版用 Timeshift 做系统快照,把 /etc 和 /home 单独备份到外部存储;服务器版优先用云平台快照,同时把关键数据做异地备份。
升级节奏上,LTS 版本之间不要跳版本。 一般是从一个 LTS 升到下一个 LTS,跨版本直接升容易出问题。升级前必须做的三件事:完整备份、确认磁盘剩余空间足够(升级过程会下载大量包)、以及在测试环境先跑一遍。
bash复制# 查看当前版本和可升级目标,执行前先备份
lsb_release -a
sudo do-release-upgrade
生产环境我的建议是:新版本发布后不要马上跟,等一两个小版本,社区把明显的坑趟完了再动。安全更新该打还是要打,但大版本升级要单独安排时间窗口。
平时养几个习惯能省很多事:定期看 df -h 和 journalctl -p err;改任何配置前先 cp 一份带日期的备份;把常用的部署步骤写成脚本而不是靠记忆敲;把服务日志的轮转策略配好,别等磁盘满了才想起来。
真要说这台 Ubuntu 从装到用最关键的是什么,我觉得不是记住多少命令,而是三件事:装的时候把分区和引导搞对,装完把软件源和中文环境打通,出问题时按“现象、输入、环境、参数、工具本身”这个顺序一层层往下查。前两件是一次性的,第三件是长期要练的。很多人觉得 Linux 难,其实难的不是命令,是缺少一套稳定的判断顺序。把顺序固定下来,剩下的就是查文档和积累经验了。
