刚接触 Linux 的人,十有八九都卡在第一步:从哪儿开始装、装哪个版本、装完了又该干嘛。我见过太多人下载了一堆镜像,结果连安装界面都没走完就放弃了。说句实话,Linux 环境搭建这事儿,最大的门槛不是技术,而是选择太多——发行版多、安装方式多、分区方案多,没有一套清晰的思路,很容易一头扎进去就迷失方向。
这篇文章我打算从环境选型、发行版选择、系统安装、基础命令、开发环境搭建,再到常见故障排查,把一条完整的学习路径串下来。内容主要围绕 Ubuntu 22.04 LTS 和 CentOS Stream 这两个最有代表性的发行版展开,兼顾新手和想转行做后端、运维、大数据的朋友。看完你应该能搞清楚自己到底该用哪种方案、怎么把系统装起来、装完怎么配置,以及日常高频使用的命令和排错思路是什么样。篇幅会有点长,但每一步都是实操过的,可以直接跟着抄。
1. 环境选型:先想清楚再动手
很多新手一上来就纠结“Linux 是什么”,其实这问题不值得卡太久。Linux 是一个开源的操作系统内核,我们日常说的“装 Linux”,实际上装的是基于这个内核的发行版,例如 Ubuntu、CentOS、Debian、Fedora 等等。打个不太严谨但好理解的比方,内核是发动机,发行版是整车——发动机决定了基本性能,但不同的整车有不同的调校、内饰和驾乘体验。
选择环境方案之前,先想清楚一个问题:你装 Linux 是为了什么?是为了学习命令、跑开发环境,还是准备部署服务?不同的目的,对应的最优路径完全不同,没必要一上来就追求“物理机纯 Linux 环境”那种仪式感。
1.1 虚拟机方案:最推荐新手入门
我用得最多、也最推荐新手尝试的,是虚拟机方案。工具选 VMware Workstation Player 或 Oracle VirtualBox 都可以,前者性能稍好,后者完全开源免费,社区资源丰富。虚拟机的核心优势是“破坏成本低”——你可以在里面随便折腾,装错软件、敲错命令、把系统搞崩,拍个快照几秒钟就能回滚,这在学习阶段特别重要。
资源分配上,我给一个可复制的参考值:内存建议分配给虚拟机 4GB 起步,如果宿主机内存是 16GB,分配 6GB 比较舒服;处理器核心给 2 到 4 个;磁盘大小设 60GB,不用一次性全部分配,选“动态分配”就好,实际用多少占多少。虚拟化引擎里面,如果 CPU 支持,优先勾选 VT-x/AMD-V,这能明显提升两台机器之间的响应速度。
有个细节容易被忽略,就是虚拟机的网络模式。NAT 模式下虚拟机可以正常上网,宿主机也能访问虚拟机,但局域网里其他机器访问不到它;桥接模式下虚拟机会被路由器分配一个独立 IP,表现得更像一台独立的物理机器,适合后面练习 SSH 远程登录、部署 Web 服务给别人访问这类场景。学习阶段先用 NAT,等做到网络服务实验再切桥接。
注意:安装虚拟机软件时,如果宿主机开了 Hyper-V 或内核隔离,可能会出现 VMware 无法启动虚拟化的情况。解决办法不是关掉 Hyper-V,而是把虚拟化平台的“Hypervisor 启动类型”设置成 Auto,或者在 VMware 设置里改用 Hyper-V 模式启动。具体路径不同版本略有差异,但关键词就是 hypervisor 启动类型。
1.2 双系统与物理机直装:需要动真格的时候
双系统的思路,就是在一台物理机上同时装 Windows 和 Linux,开机时通过引导菜单选择进入哪个系统。这种方案的优势是硬件性能全开,不会被虚拟机那层“翻译官”拖后腿,适合要跑深度学习训练、大型仿真软件,或者对 GPU 直通有要求的场合。
但双系统的代价也很明显:分区步骤比虚拟机复杂,而且开机引导容易出问题。尤其是现在很多笔记本默认开了 BitLocker 加密和快速启动,如果在 Windows 下压缩分区操作不小心,轻则找不到 Linux 引导项,重则把 Windows 引导搞坏。所以双系统的第一原则是:重要数据先备份,第二原则是:确保能进 BIOS/UEFI 设置,第三原则:分区前先把 Windows 的快速启动关掉,否则跨系统读写 NTFS 分区时可能出现文件锁死的情况。
至于物理机直接装 Linux,这个我不太推荐新手一上来就这么干。除非你手头有一台专门用作服务器的旧机器,或者你确定自己未来一到两年都用不到 Windows,否则还是先用虚拟机过渡更稳。等真正觉得“虚拟机满足不了性能需求”了,再考虑双系统或独立安装也不迟。
1.3 云主机与 WSL:换一种思路
如果你不想动本地环境,或者你手头是一台配置比较低的电脑,用云主机也是常见选择。各大云厂商的轻量应用服务器通常都有现成的 Ubuntu、CentOS 镜像,几分钟就能开出一台带公网 IP 的机器。这样做的最大好处是环境纯净,想重置就重置,而且可以随时随地从本地电脑 SSH 连上去操作,跟真实服务器环境几乎一模一样。
Windows 平台上还有一个轻量方案叫 WSL(Windows Subsystem for Linux),它不需要完整的虚拟机监控器,直接在 Windows 里跑一个 Linux 用户态环境。日常学习命令、跑脚本、装 Python 环境,WSL 完全够用;启动速度比虚拟机快很多,而且能直接访问 Windows 文件系统。缺点是网络模式和一些底层内核模块有差异,如果以后要学 Docker 容器网络、内核模块编程这类偏底层的知识,最好还是换到虚拟机或真机环境。
我的建议是,条件允许的话,本地虚拟机、云主机两套环境都搭一搭——前者练安装和配置,后者练远程操作和部署。现阶段不少人都处在组建家庭实验室或学习环境的阶段,两套环境互补,覆盖的场景更全面,学习效率反而更高。
2. 发行版选择与系统安装实操
接下来落到具体操作。发行版怎么选、镜像哪里下载、安装时分区怎么处理,这一节我按实际经验逐条说。
2.1 发行版选型:Ubuntu 还是 CentOS
很多新手都在 Ubuntu 和 CentOS 之间纠结。直接说结论:如果你是学习 Linux 通用操作、做开发、跑 Python/Java 环境,选 Ubuntu;如果你面向的是传统服务器运维岗位,或者公司内部明确以 RHEL 系为主,选 CentOS Stream 或 Rocky Linux 更贴近生产环境。
原因是两者的软件包管理体系和一些默认行为差异不小。Ubuntu 系用的是 apt/dpkg,软件更新激进,社区资料最多,遇到问题基本能搜到现成答案;CentOS/RHEL 系用的是 yum/dnf/rpm,软件版本相对保守,但更强调稳定性和长期维护。这两个生态一旦深入,内部细节差别会越来越大,比如网络管理工具有的是 netplan,有的是 NetworkManager 或 systemd-networkd,新手上手时容易懵。
如果实在拿不准,就选 Ubuntu 22.04 LTS。LTS 代表长期支持版本,更新源稳定,官方支持周期到 2027 年 4 月,教程覆盖面最大,踩坑概率最低。等用熟了 Ubuntu,再切换到其他发行版适应成本也很小——毕竟基础命令、文件系统布局、权限模型这些核心概念是共通的。
提示:国内网络环境下,从 Ubuntu 官网下载镜像可能比较慢,可以走阿里云开源镜像站、清华大学 TUNA 镜像源下载。这些镜像站同时提供多种发行版的镜像,也提供软件源配置,属于装机必备资源。
2.2 虚拟机安装 Ubuntu 的完整步骤
这里以 VirtualBox + Ubuntu 22.04 Server 为例,把每个关键步骤拆开讲。
第一步,新建虚拟机,类型选 Linux,版本选 Ubuntu 22.04 LTS (Jammy Jellyfish) (64-bit)。内存设 4096MB 以上,虚拟硬盘创建为 VDI 格式,大小按前面说的 60GB,动态分配。
第二步,处理器设置里,把 CPU 核心数调到 2 或 4,同时勾选“启用 PAE/NX”(通常默认开启)。如果 CPU 支持嵌套虚拟化,也可以在系统——处理器——勾选“启用嵌套 VT-x/AMD-V”,以后在虚拟机里再跑虚拟机或 Docker 时会事半功倍。
第三步,在存储设置里加载下载好的 ISO 镜像,然后启动虚拟机。启动后选择“Try or Install Ubuntu Server”进入安装界面。安装语言建议直接选 English,这样后续遇到路径、日志、报错信息时你不需要再换算一遍中文术语,对习惯英文技术资料的长远发展更有利。
第四步,网络配置。如果用的是 NAT 模式,安装程序会自动通过 DHCP 获取 IP;如果用静态 IP,选择自己的网卡,手动填 IP、掩码、网关和 DNS。DNS 可以填 223.5.5.5(阿里 DNS)或 119.29.29.29(腾讯 DNS),比默认的运营商 DNS 在一些情况下更稳定。
第五步,磁盘分区。新手直接选“Use An Entire Disk”并开启 LVM 即可,这是最稳妥的做法。LVM 的好处是以后磁盘空间不够了可以动态扩展,不用重新分区。如果手头机器配置较高,也可以选自定义布局,把 /boot 单独分 1GB,swap 分 4GB,剩下全给根目录,但对于学习阶段,默认整盘 + LVM 足够了。
第六步,设置用户名和主机名。主机名不要用带空格的名称,纯小写字母加连字符是安全选择,例如 ubuntu-server。安装完成后会自动开启 SSH Server,后面就可以直接从宿主机用终端工具连过去操作,不用每次打开虚拟机的控制台窗口。
安装完成后卸载 ISO 并重启,看到登录提示就说明系统已经装好了。此时先不要急着乱敲命令,先执行系统更新:sudo apt update && sudo apt upgrade -y。这一步会把内核和基础软件更新到源里的最新版本,能避免不少后续因为软件包版本过旧导致的编译或安装问题。
2.3 软件源配置:装软件快不快的分水岭
系统刚装完时,默认软件源指向国外服务器,国内访问很慢,甚至经常超时。所以装完系统后第一件事就是换软件源。
Ubuntu 的源配置在 /etc/apt/sources.list,也可能拆分成 /etc/apt/sources.list.d/ 下的文件。操作前先备份:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak。然后用 sed 命令替换,或者直接用编辑器把内容替换成镜像站提供的配置。
这里给一个针对 Ubuntu 22.04 的国内源配置示例(以阿里云为例),替换到 /etc/apt/sources.list 后执行 sudo apt update 生效:
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse如果是 CentOS 系,源配置在 /etc/yum.repos.d/ 目录下,需要把 CentOS-Base.repo 替换为对应镜像站版本,然后运行 yum clean all && yum makecache。
换源这件事,我强烈建议新手亲手做一遍。虽然有些安装脚本会自动帮你换,但自己动手能理解 apt update、apt upgrade、软件源、仓库(Repository)这些概念各自是干什么的,这些概念在以后的日常运维里会反复用到,基础打牢了后面才走得顺。
3. 基础命令体系:从入门到够用
系统装好了,接下来就是真正开始“用”Linux。很多人觉得 Linux 命令又多又杂,背了忘、忘了背。实际上日常使用的高频命令就那几十个,核心围绕文件操作、权限管理、进程管理、网络管理这四大块展开。把这几块搞明白,大多数日常任务都能应付。
3.1 目录结构与文件操作
Linux 文件系统从根目录 / 开始,一切皆文件。理解几个关键目录基本就能看懂系统的骨架:/etc 存放系统配置文件,/var 存放日志和可变数据,/usr 存放系统软件,/home 下是每个用户的个人目录,/tmp 是临时文件目录。
文件操作里最常用的命令组合是:ls 查看目录内容,cd 切换目录,pwd 显示当前路径,cp 复制,mv 移动或重命名,rm 删除,mkdir 创建目录,touch 创建空文件或更新文件时间戳。
新手容易犯的一个错是直接用 rm -rf 删除目录——这个命令组合的威力极大,一旦路径写错,比如少写一个点、多写一个斜杠,后果可能是灾难性的。我的习惯是:重要操作前先用 ls 确认当前路径,再用 find 或 tree 看看目标目录的内容,最后才动手。可以给 rm 设置一个别名(alias rm='rm -i'),让它在删除前强制交互确认,对新手很有保护作用。
查看文件内容时,cat 适合看小文件,less 适合看大文件或日志(支持上下翻页和搜索),head 和 tail 分别看文件头尾,tail -f 是跟踪日志的利器,做开发调试时几乎离不开它。
注意:绝对不要在生产环境随意禁用 root 登录或修改系统关键文件权限,比如 /etc/sudoers、/etc/passwd、/etc/fstab。改这些文件前一定要备份,并且保证自己有另一个终端能登录,否则一旦写错,可能导致无法开机或无法登录系统。
3.2 用户与权限模型
Linux 是一个多用户系统,权限模型简单说就是三个身份(属主、属组、其他用户)对每个文件有三种权限(读 r、写 w、执行 x)。用 ls -l 可以查看详细信息,权限位一共十位,第一位是文件类型,剩下九位按三组排列。
理解权限之后,有两个高频命令必须掌握。一个是 chmod,用来修改权限,常见用法有符号模式(chmod u+x file)和数字模式(chmod 755 file)。数字模式里 r=4、w=2、x=1,755 表示属主有读、写、执行权限,属组和其他用户只有读和执行权限,这是可执行程序和脚本最常见的权限设置。
另一个是 chown,用来修改文件属主和属组,例如 sudo chown user:group file。技术上有个常见场景是复制文件后所有者变成 root,导致普通用户无法修改——这时候就需要 chown 把属主改回来。
添加用户的命令是 useradd 或 adduser(Ubuntu 下 adduser 是交互式前端,更像新手);把用户加入 sudo 组可以用 sudo usermod -aG sudo username。删除用户用 userdel,注意加 -r 参数可以顺便删除用户主目录。
3.3 文本处理三剑客
做运维和开发的人,跟日志和文本打交道的时间非常多。Linux 下有几个文本处理命令,被习惯性地称为“三剑客”:grep、sed、awk。
grep 用于在文件或输出中搜索匹配行,最常用的是 grep keyword file 和 grep -r keyword dir/,加上 -n 显示行号、-i 忽略大小写、-v 反向匹配、--color=auto 高亮匹配内容,排查日志时非常实用。
sed 是一个流编辑器,常用的场景是替换文件内容,例如 sed -i 's/old/new/g' file,会把文件中所有 old 替换为 new。-i 表示直接在文件中修改,建议先不加 -i 跑一遍看输出是否符合预期,再加 -i 执行,避免误替换。
awk 更高级一些,适合做按列处理。比如从日志里提取某个字段:awk '{print $1, $4}' log.txt;或者按某个分隔符切分:awk -F':' '{print $1}' /etc/passwd。awk 的完整语法非常庞大,但日常用到的也就这几个模式。
这三样工具单独看都不难,难点在于组合使用,例如 tail -f app.log | grep ERROR | awk '{print $6}',一行命令就能实时跟踪日志中的错误信息并提取关键字段。这种管道思维是 Linux 文化的核心,不必刻意背命令,多写几次就会形成肌肉记忆。
4. 开发环境搭建:Python、Java、Docker
系统管理和命令熟悉之后,很多人装 Linux 的最终目的是搭开发环境。这里我把最常碰到的 Python 环境、Java 环境和 Docker 环境分别讲透,包括环境配置的原理和常见坑。
4.1 Python 环境:版本管理比安装本身更重要
装 Python 本身不是难点,Ubuntu 22.04 系统默认带了 Python 3.10,直接输入 python3 就能进入交互环境。真正让新人头疼的是项目依赖隔离和版本切换问题。
我的建议是:不要直接往系统 Python 里 pip install 一堆包,而是用虚拟环境工具做隔离。最推荐的是 venv,它是 Python 自带的模块,零额外安装成本。创建一个项目并在其中启用虚拟环境只需要这几步:
mkdir myproject && cd myproject python3 -m venv venv source venv/bin/activate pip install flask激活之后,命令行前缀会出现 (venv),此时 pip install 的包只安装在这个项目目录下,不会污染全局环境。离开时执行 deactivate 即可。这个模式和不做隔离的差异,有点像不同项目分用不同的工作台,工具虽然不通用,但不会互相干扰。
如果需要在多个 Python 版本之间切换(比如一个项目要求 3.8,另一个要求 3.11),推荐用 pyenv。pyenv 可以编译安装或拉取预编译的 Python 版本,配合 pyenv local 和 pyenv global 在目录级别切换版本,是目前比较主流的方案。
另一个高频场景是安装 CUDA 版的 PyTorch,这在深度学习环境搭建时必不可少。核心步骤是先安装 NVIDIA 显卡驱动,再安装 CUDA toolkit,然后用官方提供的命令安装对应版本的 torch、torchvision、torchaudio。不少人在这一步装出来的 torch 是 CPU 版本,跑模型时特别慢,原因是 pip 从默认源拉包时没有识别到 CUDA 标识。解决方案是到 PyTorch 官网选择自己的 CUDA 版本,复制带 --index-url 的安装命令执行:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118提示:深度学习环境搭建的核心不是命令本身,而是“版本匹配”。显卡驱动、CUDA 版本、PyTorch 版本、Python 版本四者之间必须兼容,建议在动手前先画个版本对应关系表,或者直接去官方文档查 compatibility matrix。
4.2 Java 环境与 JAVA_HOME
Java 环境的搭建核心是 JDK 安装和环境变量配置。Ubuntu 下可以用 apt 直接安装 OpenJDK:sudo apt install openjdk-11-jdk,也可以用 sdkman 管理多个 JDK 版本,后者在切换版本时更灵活。
装完 JDK 后,关键一步是配置 JAVA_HOME。很多 Java 应用(比如 Hadoop、Maven、Gradle)启动脚本都依赖这个变量,如果不配置,后面基本跑不起来。先查看 JDK 的实际安装路径:
which java ls -l /usr/bin/java然后把这个路径的上级目录记下来,写入 /etc/profile.d/java.sh:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$PATH:$JAVA_HOME/bin保存后执行 source /etc/profile.d/java.sh 使配置立即生效,再用 echo $JAVA_HOME 和 java -version 验证。这里有个体会:环境变量写在哪里是有讲究的。写在 /etc/profile.d/ 下对所有用户生效,写在 ~/.bashrc 里只对当前用户生效,系统服务(比如 systemd 启动的服务)则需要在 service 文件或环境文件里单独指定。很多人配完环境变量后直接启动服务发现还是找不到 Java,就是因为服务进程的环境和交互终端的环境不是一回事。
4.3 Docker:开发与学习的最佳辅助工具
Docker 可以说是环境搭建的终极方案。它把应用及其依赖打包成镜像,用容器隔离运行,解决了“在我机器上是好的”这个经典问题。对于学习 Linux 的人,Docker 还有一个额外价值:不用重新装系统,也能快速体验各种不同的软件环境。
Ubuntu 上安装 Docker 的官方推荐方式是通过 apt 仓库安装,依次执行:
sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io安装完成后,默认情况下普通用户需要 sudo 才能运行 docker 命令,不想每次敲 sudo,可以把当前用户加入 docker 组:
sudo usermod -aG docker $USER newgrp dockerDocker 的基本操作链路是:拉取镜像(docker pull)、运行容器(docker run)、查看容器(docker ps)、进入容器(docker exec -it container_name bash)、停止删除(docker stop && docker rm)。常用的还有 docker compose,用来定义和管理多容器应用,比如一个 Nginx + MySQL + Redis 的开发环境,写一个 compose 文件就能一键启动,比手动逐个启动容器省心得多。
注意:国内直接拉取 Docker Hub 镜像常常很慢或超时,可以配置镜像加速器。常见做法是在 /etc/docker/daemon.json 里写入 registry-mirrors 配置,然后重启 docker 服务。各大云厂商都有对应的加速地址,选一个稳定可用的填上即可。
5. 常见问题与排查技巧实录
环境搭建的过程绝对不会一帆风顺,我把这些年踩过的高频坑整理出来,按“问题—原因—解法”的格式列成速查表,方便你遇到类似问题时直接对照。
5.1 网络与 SSH 连接问题
| 现象 | 常见原因 | 排查思路与解法 |
|---|---|---|
| ping 不通外网 | 网卡没配置 DNS 或路由 | 先 ping 网关,再 ping 公网 IP(如 223.5.5.5);IP 通则检查 DNS 配置:cat /etc/resolv.conf |
| 能 ping 通 IP 但域名解析失败 | DNS 配置错误 | 修改 /etc/resolv.conf 或使用 netplan/systemd-resolved 配置 DNS |
| SSH 连接被拒绝 | SSH 服务没启动或端口被防火墙拦截 | sudo systemctl status sshd;sudo ufw status;确认云主机安全组放行 22 端口 |
| SSH 登录很慢 | DNS 反向解析超时 | 修改 /etc/ssh/sshd_config 中 UseDNS 为 no,重启 sshd |
网络排查的核心方法论是“逐层定位”:先看链路层(网卡是否 up),再看网络层(IP 和路由),再看传输层(端口是否监听),最后看应用层(服务配置)。不要一上来就怀疑防火墙,按这个顺序排查通常几分钟就能锁定问题。
5.2 软件安装与依赖问题
apt 安装软件时最常见的报错是 “Unable to locate package”。原因通常是软件源索引没有更新。先执行 sudo apt update,如果还是找不到,可能是软件不在默认仓库里,需要添加 PPA 或对应厂商的官方仓库。比如安装 Nginx 的官方稳定版,就需要先添加 nginx 官方源。
另一个高频问题是 “E: Sub-process /usr/bin/dpkg returned an error code (1)”。这种一般是某个软件包安装脚本报错。先看具体报错,常见原因是配置冲突或依赖不全。可以用 sudo dpkg --configure -a 修复半安装状态,再执行 sudo apt --fix-broken install 自动修复依赖关系。如果是某个包的 postinst 脚本卡住,可能需要手动编辑 dpkg 的 info 目录下的脚本,把报错行去掉,操作起来稍麻烦,但确实能救回不少被搞坏的 dpkg 状态。
5.3 解压乱码与文件编码问题
从 Windows 传过来的 zip 压缩包,在 Linux 下解压后文件名经常乱码,原因是 Windows 的 zip 压缩包默认使用 GBK 编码保存文件名,而 Linux 的 unzip 默认按 UTF-8 解码。解法是安装 unzip 的替代工具 unar,或者用 Python 脚本处理:
sudo apt install unar unar 文件名.zip如果只是临时看文件内容乱码,可以用 iconv 转换编码。理解“编码”这个概念本身很重要:文件内容本身只是字节流,显示成什么样取决于用什么编码解释。很多中文乱码问题的根源就是编码不一致,不要急着改文件内容,先确认两边用的是不是同一种编码。
5.4 系统启动与引导问题
双系统下最常见的故障是开机直接进 Windows,没有出现 Linux 引导菜单。原因多半是 GRUB 引导项被 Windows 的引导程序覆盖,或者 BIOS 的启动顺序把 Windows Boot Manager 排在了前面。解法是进入 BIOS 把 UEFI 启动顺序里的 ubuntu/GRUB 提到第一位;如果引导项彻底丢了,用 Ubuntu 安装 U 盘启动,选 “Try Ubuntu”,然后在终端里执行 boot-repair 工具,或者手动 chroot 进去重新安装 GRUB:
sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair boot-repair这里必须多提醒一句:修复引导之前,一定要确认数据已备份。GRUB 重装过程中如果出现断电或操作失误,可能导致两套系统都进不去,到那时候你只能靠 Live USB 进场救数据了。
5.5 资源占用与系统卡顿
虚拟机里跑 Linux 觉得卡,最直接的原因往往是内存不足。Linux 的机制是尽量把空闲内存用作缓存,所以图形界面下看内存占用很高其实是正常现象,不代表系统出了问题。真正要看的是 swap 使用情况和内存压力。可以用 free -h 查看内存概况,确保 swap 不是 0,否则内存一满就容易 OOM,进程莫名其妙被杀。
还有一种情况是磁盘空间满了。日志文件(特别是 /var/log 下的日志)会悄无声息地占满磁盘。用 df -h 查看磁盘使用率,用 du -sh /var/log/* 定位大文件,然后清理日志或配置 logrotate 做日志轮转。下面这行命令可以查看当前目录下各个子目录的占用情况,帮助快速定位大目录:
du -sh * | sort -hr | head -20其实大部分“卡顿”问题都遵循一个朴素的排查思路:先看内存、再看磁盘、再看 CPU,最后看网络。用 top 或 htop 实时查看资源占用,用 dmesg 看内核日志里有没有 OOM 或硬件报错,绝大多数问题都能在这几步里定位到线索。
写在最后:一些个人的操作习惯
环境搭建这件事,回头来看,真正值钱的不是某一条命令,而是一套稳妥的操作习惯。我自己这些年吃了不少亏,也慢慢总结出几个值得坚持的原则。
第一,改动系统文件之前先备份。不管是 /etc/apt/sources.list 还是 /etc/ssh/sshd_config,改动前复制一份 .bak 后缀的备份,成本几乎为零,但关键时刻能救命。第二,装完系统先做一次快照或备份。虚拟机方案里这个优势很突出,系统折腾坏了直接回滚,比任何救援手段都快。第三,重要操作不要直接用 root 账号,而是用普通用户加 sudo。这个习惯能避免很多因为手误导致的系统级破坏,也符合 Linux 多用户设计的初衷。
最后想说的是,不要害怕把环境搞坏。Linux 学习过程中,破坏和修复本身就是最好的老师。我见过太多人在教程面前犹豫不敢动手,结果半年过去了还在看安装教程。大胆一点,把系统装起来,把环境搭起来,先把一件事跑通,哪怕是只跑到“能用 SSH 连上自己的虚拟机”这一步,也算是真正迈进了 Linux 的大门。
如果有朋友按这篇文章把环境搭起来了,卡在某个步骤上,欢迎在评论里留下具体的报错信息和操作环境,我看到会尽量回复。毕竟环境搭建这类操作,最怕的就是“好像按教程做了,但就是不对”,这种问题往往细节里藏着答案,拿出来讨论比自己闷头试要高效得多。