1. 从装一台 Kali 说起:为什么大多数人卡在第一步
Kali Linux 安装教程这个东西,网上一搜一大把,但真到自己动手的时候,十个人里有六个会在引导界面就卡住,三个会死在换源那一步,剩下一个装完了发现全屏黑屏进不去桌面。我这些年帮身边同事、学生重装过的 Kali 少说也有几十台,从老旧的 ThinkPad 到新款的迷你主机,从 VMware 虚拟机到物理机直装,踩过的坑基本能凑成一本小册子。这篇文章就把整套流程从头到尾捋一遍,包含虚拟机方案和物理机方案的差异、磁盘分区怎么划才不后悔、装完之后第一件事该干什么、以及后面把 Python、MySQL、Docker、Git、VSCode 这些常用环境一次性配齐的完整思路。
如果你是完全没接触过 Linux 的新手,这篇可以当操作手册,照着做基本不会出大问题;如果你之前装过 Ubuntu 或者其他发行版,那重点看看分区策略、源配置和几个 Kali 特有的坑就行。我不打算把每个按钮的位置都截图写出来——那种东西看一遍就忘,我更想讲清楚每一步背后的道理,这样下次遇到界面变了你也知道该点哪里。
先说一个前提:Kali 是给安全学习和测试用的发行版,装它的目的是有一个预置了大量工具的 Linux 环境。你可以把它理解成一个"已经帮你把常用开发和安全工具都装好了的 Debian"。理解了这一点,后面很多选择就顺理成章了。
2. 安装方式怎么选:虚拟机、物理机还是双系统
2.1 三种方案的真实差别
很多人上来就问"装虚拟机还是装物理机",其实这个问题没有标准答案,取决于你要拿它干什么。虚拟机的好处是干净、可快照、可克隆、搞坏了删掉重来,五分钟的事。物理机的好处是性能完整、能直接用无线网卡、能访问真实硬件。双系统则是折中方案,但代价是每次切换要重启,而且分区搞不好容易把原来的 Windows 引导弄丢。
我一般这样建议:刚开始学、主要是跑命令行工具和本地靶场的,一律用虚拟机。需要长时间跑任务、或者要用到真实无线网卡做无线相关实验的,才考虑物理机。至于双系统,除非你硬盘空间实在紧张,否则不太推荐——现在 512G 以上的固态很普遍,划 80G 给虚拟机完全够用,还能随时回滚。
虚拟机软件的选择上,VMware Workstation 是主流,功能成熟、快照好用;VirtualBox 免费开源,但在 Kali 上的图形性能一般,3D 加速容易出问题。如果你倾向于开源方案,还有个思路是在 Windows 上直接用 WSL2 装一个 Kali,优点是启动快、和 Windows 文件互通方便,缺点是图形界面和硬件访问受限,很多工具跑不起来。我的建议是主力环境用 VMware,WSL 当作随手敲几个命令的补充。
2.2 硬件资源怎么分配才不卡
虚拟机卡不卡,八成取决于资源分配是否合理。下面这张表是我实测下来比较稳的配置区间,你可以按自己机器的实际配置调整:
| 宿主机配置 | 建议 vCPU | 建议内存 | 建议磁盘 | 说明 |
|---|---|---|---|---|
| 4 核 8G | 2 核 | 2G | 40G | 只跑命令行,够用 |
| 8 核 16G | 4 核 | 4G | 60G | 最舒服的区间 |
| 12 核以上 32G | 6 到 8 核 | 8G | 100G | 可以跑多个容器和靶场 |
几个细节值得说。内存不要超过宿主机的一半,否则宿主系统自己会开始换页,整体反而更慢。磁盘类型选单个文件还是拆成多个,影响的是拷贝和迁移的便利性——单个文件在小文件读写上略快,但拷贝到移动硬盘时很痛苦;拆分成多个 2G 文件则相反。我个人习惯用单个文件,因为平时都是本地用。
还有一个容易被忽略的点:虚拟磁盘不要一开始就分配太大。VMware 默认是"按需增长"的,你标 100G 并不会立刻占满,但如果勾了"立即分配所有磁盘空间",那 100G 就真的被锁死了。这个选项在创建向导的磁盘设置里能找到,默认是关闭的,别手贱去勾。
2.3 网络模式选哪个
VMware 的三种网络模式经常让人犯迷糊。NAT 模式下虚拟机和宿主机共用宿主机的 IP,虚拟机可以访问外网,但外部设备看不到虚拟机;桥接模式让虚拟机和宿主机在同一网段,相当于局域网里多了台独立设备;仅主机模式则完全隔离外网。
装系统阶段我建议先用 NAT,因为安装过程中要联网下载软件包,NAT 基本不会出问题。等装完之后如果你要做局域网内的实验,再改成桥接。注意桥接模式如果宿主机用的是无线网卡,某些情况下虚拟机会拿不到 IP,这时候在虚拟网络编辑器里把桥接绑定的网卡手动指定一下就好了。
3. 镜像获取与虚拟机创建的关键操作
3.1 镜像选 Live 还是 Installer
到官网下载页面,会看到几种版本:Installer Image、Live Boot、NetInstaller、以及针对 VMware 和 VirtualBox 的预构建镜像。这几者的差别很大,选错了会多走弯路。
Installer Image 是标准的安装镜像,适合物理机和虚拟机手动安装,我这个流程讲的就是它。Live Boot 是可以直接从 U 盘启动的体验版,也能安装,但安装过程本质上还是调用安装器,没有优势。NetInstaller 体积小,但安装全程依赖网络,网络不稳就很痛苦。预构建镜像(比如 VMware 版)是官方已经装好的虚拟机文件,双击导入就能用,默认账号密码是 kali/kali,适合只想快速体验的人,缺点是磁盘布局和配置都是固定的,不太适合当作长期环境来养。
我个人的选择是:想认真用一段时间的,一律下载 Installer Image,自己走一遍安装流程,心里踏实。
3.2 下载后一定先做完整性校验
镜像有 4G 左右,下载中断导致文件损坏是很常见的事,装到一半报"无法读取介质"就白折腾了。所以下载完先校验哈希值。官网同页面提供 SHA256 校验文件,Windows 上用 PowerShell 运行:
Get-FileHash .\kali-linux-2024.x-installer-amd64.iso -Algorithm SHA256Linux 或 macOS 上更简单:
sha256sum kali-linux-2024.x-installer-amd64.iso把结果和官网给的字符逐个比对,一致就放心用。这一步很多人跳过,但它是所有安装问题里最容易排查的一环——如果后面安装总是莫名失败,回来重新校验一遍往往能发现问题。
3.3 创建虚拟机时的几个开关
新建虚拟机时选"自定义(高级)"而不是"典型",这样才能完整控制各项参数。客户机操作系统选 Linux,版本选 Debian 12.x 64 位——Kali 基于 Debian,这个选项能拿到更好的兼容性。
创建过程中有几个开关值得单独说:
- 固件类型:选 UEFI 还是 BIOS。Kali 两个都支持,但 UEFI 更现代,分区时会自动带一个 EFI 分区。我一般选 UEFI。
- 虚拟化引擎:勾上"虚拟化 Intel VT-x/EPT",这个能让虚拟机内的嵌套虚拟化生效,后面如果你想在 Kali 里再跑虚拟机或者用某些依赖硬件加速的工具会用到。
- 显卡:显示设置里把"加速 3D 图形"关掉。这个选项是黑屏问题的头号嫌疑犯,Kali 的默认桌面环境对它的兼容性并不总是好。
- 声卡:可以直接移除,省资源。
磁盘类型选 SCSI 或 NVMe 都行,NVMe 性能略好,SCSI 兼容性更广。容量给 60G 起步,选"将虚拟磁盘存储为单个文件"。
4. 安装过程逐步走一遍
4.1 引导菜单与语言选择
虚拟机开机后自动从 ISO 引导,出现菜单选"Graphical Install",图形化安装器比文本模式直观得多,分区那一步尤其明显。
语言这一步有个经典的争议:选中文还是英文。图形界面选中文当然舒服,但安装完之后终端里会出现一堆方块或者乱码,某些工具的输出也会因为本地化而变形。我自己的做法是安装时选 English(US),区域选 Hong Kong 或者 Other → Asia → China 都行,键盘布局选 American English。装完之后再单独装中文字体、输入法和语言包,这样终端永远是干净的 UTF-8 环境,中文显示也不受影响。
注意:如果这一步选了中文,后面至少要手动执行
sudo dpkg-reconfigure locales并把 en_US.UTF-8 设为默认,否则不少脚本会报编码错误。与其事后补,不如一开始就用英文。
4.2 磁盘分区:新手最容易翻车的地方
分区环节是安装器里唯一一个"选错了会丢数据"的步骤。对于虚拟机来说其实没什么风险,但养成好习惯总是对的。安装器会提供四种方案:使用整个磁盘、使用整个磁盘并加密、使用最大的连续空闲空间、手动。
虚拟机里直接选"使用整个磁盘",然后选"将所有文件放在同一个分区中"就够了,简单粗暴。但如果你想顺便学点东西,手动分区也不难,下面是我常用的方案(按 60G 磁盘算):
| 挂载点 | 建议大小 | 文件系统 | 用途说明 |
|---|---|---|---|
| EFI 分区 | 512M | FAT32 | UEFI 引导必需 |
| /boot | 1G | ext4 | 内核和引导文件,独立出来便于恢复 |
| swap | 2 到 4G | swap | 内存不够时的缓冲,也支持休眠 |
| / | 30G | ext4 | 系统和软件包 |
| /home | 剩余空间 | ext4 | 个人数据和配置文件 |
把 /home 单独挂载的最大好处是:将来重装系统时,只要不格式化 /home,你的配置文件、脚本、文档全都还在。这个习惯我从第一次重装系统丢了半个月的笔记之后就一直保持了。
如果选了加密磁盘(LUKS),每次开机都要输一遍解密密码,安全性高但麻烦。虚拟机里我个人不加密,因为整个虚拟机文件本身就在宿主的加密盘里。
4.3 软件包选择与用户设置
分区之后安装器会问"要安装哪些软件"。列表里是一堆桌面环境和工具集合的勾选项。如果你没有特别偏好,直接用默认勾选(一般是 Xfce 桌面加上标准系统工具)就好。想要更轻量的可以把 GNOME 换成 Xfce,想要更炫的可以选 KDE Plasma,但要注意 KDE 在虚拟机里对显存要求高一些,3D 加速没关的话容易花屏。
列表里有个"top10"选项,是一批常用的安全工具子集。默认包集合里已经包含了大部分工具,装完之后还可以随时用apt install kali-linux-large之类的元包补齐,所以这一步不用纠结,选默认即可。
接下来设置主机名、域名(可以留空)、用户名和密码。密码别设太简单,Kali 默认允许 root 登录,弱密码在桥接网络下是个隐患。用户名建议用小写字母,避免某些工具对特殊字符处理不当。
4.4 GRUB 安装到哪
最后一步会问"是否将 GRUB 引导程序安装到主引导记录"。虚拟机里选"是",目标设备选 /dev/sda(或者对应的磁盘名)。如果你是多系统环境,这里要选对磁盘,选错了会把原来的 Windows 引导覆盖掉。真出了这种事也不是没救,用 Windows 安装盘修复引导就行,但过程很折腾,所以务必看清楚设备名再点确认。
安装过程大概 5 到 15 分钟,取决于机器性能和源的速度。结束后会自动重启,记得把 ISO 从虚拟光驱里断开,否则又会从安装介质启动。
5. 装完第一件事:换源、更新与中文环境
5.1 源配置与更新策略
Kali 默认用的是官方源,位于海外,国内访问速度经常感人。换源是装完之后第一个该做的操作。源的配置文件在/etc/apt/sources.list,编辑前先备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo nano /etc/apt/sources.list内容替换成国内的镜像地址,格式大致是这样(以清华源为例):
deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main non-free non-free-firmware contrib注意 Kali 从 2022 年开始就只有 kali-rolling 这一个滚动分支了,网上很多老教程还写着 kali-dev、kali-last-snapshot 之类的名字,照着抄会报错。另外 Kali 2024 之后的版本对 non-free-firmware 的依赖变多了,这一项别漏掉,否则某些无线网卡驱动装不上。
换完之后执行:
sudo apt update sudo apt full-upgrade -y为什么用full-upgrade而不是upgrade?因为 Kali 是滚动发行版,包之间的依赖关系变化比较频繁,upgrade遇到需要卸载或替换包的情况会直接放弃,而full-upgrade会把整个依赖链处理掉。代价是有时候会一次更新几百个包,多花点时间,但这是滚动版的常态。
提示:大规模更新前先打个快照。滚动发行版偶尔会出现某个包更新后依赖被破坏的情况,有快照就能一键回退,比手动修依赖省事得多。
5.2 中文显示与输入法
前面装系统选了英文,现在补中文支持。字体和语言包:
sudo apt install -y fonts-wqy-microhei fonts-wqy-zenhei sudo dpkg-reconfigure locales在列表里勾上zh_CN.UTF-8 UTF-8,然后把默认 locale 保持为en_US.UTF-8。这样系统提示和日志还是英文,但中文文件名的显示不会出问题。
输入法推荐 fcitx5 加拼音,比 fcitx4 稳定不少:
sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-qt5装完在~/.pam_environment或者系统环境变量里加上:
GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx重启会话后在 fcitx5 配置里添加 Pinyin 输入法,用 Ctrl+Space 切换。如果某些程序里打不出中文,八成是 QT_IM_MODULE 没生效,检查一下变量是不是写在了正确的文件里——Xfce 里我一般直接写到/etc/environment,简单直接。
5.3 快照与克隆:给自己的后悔药
装完基础系统、配好源和输入法之后,立刻在 VMware 里打个快照,名字叫"clean-base"。这一步花不到十秒,但后面能救你无数次。之后每次做大动作之前再打一个快照,养成习惯之后你会发现自己对系统的折腾心态会完全不一样——敢试,因为知道能退回来。
克隆功能也值得用起来。虚拟机菜单里选管理 → 克隆,选"创建完整克隆",就能复制出一份完全独立的副本。做多机实验、搭隔离环境的时候特别好用,比重新装一遍快得多。
6. 常用环境的搭建路径
6.1 Python 环境与包管理
Kali 自带 Python 3,但千万别直接往系统 Python 里pip install。Kali 从 2023 年起就启用了 PEP 668 的外部管理保护,直接 pip 安装会报externally-managed-environment错误。正确做法是用虚拟环境:
python3 -m venv ~/venvs/work source ~/venvs/work/bin/activate pip install requests需要多个项目隔离的话,每个项目一个 venv 目录。如果某个工具本身就是个命令行程序,更推荐用 pipx:
sudo apt install -y pipx pipx ensurepath pipx install httpiepipx 会为每个工具单独建一个虚拟环境并把可执行文件链接到 PATH 里,互不干扰,卸载的时候一条命令搞定,是我目前最推荐的命令行工具安装方式。
6.2 数据库:MySQL 与 PostgreSQL
Kali 仓库里的mysql-server实际上是 MariaDB 的替代包。装的时候用:
sudo apt install -y default-mysql-server default-mysql-client sudo systemctl enable --now mysql sudo mysql_secure_installation初始化之后用sudo mysql可以直接免密登录(走的是 unix_socket 认证),要改成密码认证的话执行:
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('你的密码'); FLUSH PRIVILEGES;PostgreSQL 也是常用的,装完之后它不会自动启动,这是很多人遇到的"postgresql 启动失败"的真相——不是失败,是默认被禁用了:
sudo apt install -y postgresql sudo systemctl enable --now postgresql sudo -u postgres psql如果systemctl status postgresql显示 active 但端口连不上,检查一下是不是多个版本的主集群冲突了。Kali 升级时偶尔会装上不同大版本的 postgresql,用pg_lsclusters看一下有几个集群,把不用的那个pg_dropcluster删掉再重启服务即可。
6.3 Docker 与本地练习环境
Docker 是搭本地环境最省事的方式。用官方脚本装最新版:
curl -fsSL https://get.docker.com | sudo sh sudo systemctl enable --now docker sudo usermod -aG docker $USER最后一行把当前用户加入 docker 组,重新登录之后就不用每次 sudo 了。如果拉镜像慢,在/etc/docker/daemon.json里配置一个加速地址:
{ "registry-mirrors": ["https://你的加速地址"] }改完sudo systemctl restart docker生效。
搭本地练习环境的时候,DVWA 是个很好的起点,跑起来只要一行:
docker run -d -p 8080:80 vulnerables/web-dvwa浏览器打开http://localhost:8080,默认账号 admin、密码 password,进去之后先点 Setup 初始化数据库。这就是个纯本地的练习靶场,配合前面装的数据库环境,能覆盖不少 SQL 注入防护相关的学习场景。想更省事的话,docker compose写个 yaml 把数据库和 web 一起拉起来,环境更完整。
6.4 Git、编辑器与开发工具链
Git 装完先配置身份:
sudo apt install -y git git config --global user.name "你的名字" git config --global user.email "你的邮箱" git config --global init.defaultBranch mainSSH 密钥也顺手生成:
ssh-keygen -t ed25519 -C "你的邮箱"Ed25519 比老的 RSA 更短更安全,现在主流平台都支持。
编辑器方面,VSCode 用官方 deb 包安装体验最好:
sudo apt install -y wget gpg wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg后面再添加仓库、更新、安装,流程和 Ubuntu 上一样。如果你更在意轻量,直接sudo apt install -y code-oss也行,功能略少但够用。
Java 工具链在某些场景下需要,比如给 APK 签名会用到 jarsigner,它就在 JDK 里:
sudo apt install -y openjdk-17-jdk jarsigner -helpJDK 装好之后 jarsigner、keytool 这些工具就都能用了。
6.5 虚拟机体验优化:剪贴板、共享目录、分辨率
装完系统之后很多人发现:分辨率只有一种、剪贴板和宿主机不通、拖拽文件不行。这是缺了 VMware 工具包。Kali 上不需要装官方的 VMware Tools,用开源实现就行:
sudo apt install -y open-vm-tools-desktop装完重启,分辨率会自动适配窗口大小,复制粘贴和拖拽也能用了。如果还是不生效,检查一下虚拟机的显示设置里"加速 3D 图形"是不是还开着——这个选项经常和 open-vm-tools 打架。
共享目录用 VMware 的共享文件夹功能配置,然后在 Kali 里挂载。命令行挂载的话:
sudo mkdir -p /mnt/hgfs/share sudo vmhgfs-fuse .host:/ /mnt/hgfs/share -o allow_other想开机自动挂载就写进/etc/fstab,加一行:
.host:/ /mnt/hgfs/share fuse.vmhgfs-fuse allow_other,defaults 0 0SSH 服务建议也打开,方便用宿主机终端连进去操作,比在虚拟机窗口里敲命令舒服:
sudo systemctl enable --now ssh7. 故障排查实录与避坑清单
7.1 安装阶段的问题
装系统时最常见的三个故障,基本都能对应到具体原因。黑屏或者卡在引导界面不动,优先检查 3D 加速有没有关掉,其次是内存给得太少(2G 以下某些桌面环境会撑不住)。报"检测不到安装介质",多半是 ISO 没校验或者虚拟光驱挂载有问题。安装过程中反复失败在同一进度,用另一台机器重新下载镜像再校验一次,比在本地瞎折腾快得多。
还有个隐蔽的坑:宿主机开了 Hyper-V 的情况下,VMware 性能会大幅下降甚至启动失败。Windows 上如果之前装过 Docker Desktop 或者 WSL2,Hyper-V 很可能是开着的。解决方法是关掉 Hyper-V 相关功能,或者改用 VMware 的兼容模式。这个问题不常见但一旦碰上很难找原因,症状是虚拟机启动慢得像幻灯片。
7.2 换源之后的典型报错
换源之后最常见的报错是 GPG 签名错误和 Release 文件过期。前者通常是因为镜像站同步还没完成,等几个小时再试,或者换一个镜像站。后者是宿主机时间不准导致的,Kali 在虚拟机里时间容易漂,执行一下:
sudo apt install -y ntpsec sudo systemctl enable --now ntpsec时间同步上之后,各种证书和签名相关的怪问题会少很多。
如果apt update报 404,检查源地址里的分支名是不是写错了。Kali 只有 kali-rolling,写成 kali-last-snapshot 或者 stable 都会 404。这是老教程最常误导人的地方。
7.3 使用阶段的常见问题速查
下面这张表是我这些年被问得最多的几类问题,直接对照排查:
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 分辨率只有一种、无法全屏 | 缺 open-vm-tools | 安装 open-vm-tools-desktop |
| 剪贴板不通、拖拽无效 | 同上,或 3D 加速冲突 | 关闭 3D 加速并重启 |
| PostgreSQL 连不上 | 服务默认未启用或集群冲突 | pg_lsclusters 检查后清理 |
| pip 安装报 externally-managed | PEP 668 保护 | 用 venv 或 pipx |
| 终端中文显示成方块 | 缺中文字体 | 安装 wqy 系列字体 |
| 输入法在某些程序里失效 | 环境变量未生效 | 检查 GTK/QT_IM_MODULE |
| 虚拟机时间总是不对 | 未启用时间同步 | 装 ntpsec 并开机自启 |
| 共享目录挂载报权限错误 | fuse 参数问题 | 加 allow_other 参数 |
排查这类问题的通用思路是:先看日志。系统层面用journalctl -xe,服务层面用systemctl status 服务名,应用层面看它自己的日志文件。很多人遇到问题第一反应是搜索,但其实日志里往往已经把原因写得很清楚了,只是没去看。
提示:
journalctl -xe加上-u 服务名可以只看某个服务的日志,比翻一大堆无关信息效率高得多。养成遇事看日志的习惯,比记住一百个报错信息有用。
7.4 几个我踩过的坑
第一个坑是快照打得太晚。我早期装完系统先花两小时配各种工具,配到一半系统崩了,只能从头再来。后来改成装完基础系统、换完源就立刻打快照,之后每完成一个独立模块再打一个,回退粒度更细。
第二个坑是磁盘空间不知不觉被吃满。Kali 的包缓存默认放在/var/cache/apt/archives,几十次更新下来能占好几个 G。定期清理:
sudo apt clean sudo apt autoremove --purgeDocker 的镜像和容器也是空间杀手,docker system prune -a一次性清干净,但注意它会删掉所有没在运行的镜像,执行前确认一下。
第三个坑是直接改系统 Python。前面提过一次,但值得再强调:Kali 的很多系统工具依赖特定的 Python 版本和包,手动往系统环境里装东西很容易把某个工具搞崩。虚拟环境不是麻烦,是保险。
第四个坑是忽视主机名和 hosts。某些本地服务启动时会解析主机名,如果/etc/hosts里没有对应条目,启动会卡住几秒甚至直接失败。装完系统后确认一下/etc/hosts里有127.0.1.1 你的主机名这一行,能省掉一些莫名其妙的超时问题。
8. 环境养起来之后的日常维护
系统装好只是开始,后面怎么把它养得顺手才是重点。我的习惯是每周花十分钟做三件事:更新一次系统、清理一次缓存、看一眼磁盘占用。命令就三条:
sudo apt update && sudo apt full-upgrade -y sudo apt autoremove --purge -y && sudo apt clean df -h && du -sh /var/cache/apt/archives滚动发行版更新频繁,放着不管一个月再更新,容易一次撞上几百个包的依赖变化,出问题的概率高得多。小步快跑比攒着一起搞省心。
虚拟机的磁盘也会随着使用不断膨胀,即使删了文件,宿主上的 vmdk 文件也不会自动缩小。定期用 VMware 自带的"压缩"功能回收空间:虚拟机设置里选硬盘,点压缩。或者在虚拟机里把空闲空间清零(Linux 上用zerofree),再压缩效果更好。这个操作我一般一两个月做一次,能回收出不少空间。
最后说一个心态上的体会。Kali 这类滚动发行版,本质上是给愿意折腾的人用的。它不稳定不是缺陷,是特性——新工具、新内核、新特性总是第一时间到位,代价就是偶尔要自己动手修修补补。遇到问题别急着格式化重装,先花十分钟看看日志,往往一个参数就解决了。我这些年修过的系统问题,比重新安装的次数多得多,而每次修完之后对系统的理解都深一层。这套环境真正值钱的地方,不在于装好那一刻,而在于你把它用坏又修好的那些过程。