
1. 项目概述为什么选择无图形界面的Ubuntu Server如果你正在为服务器、虚拟机或者一台老旧电脑寻找一个稳定、高效且资源占用极低的操作系统那么Ubuntu 20.04 LTS Server版绝对是一个绕不开的经典选择。与带有华丽桌面环境的版本不同Server版默认就是一个纯粹的命令行界面所有操作都通过终端指令完成。这听起来可能让新手望而却步但恰恰是这种“纯粹”赋予了它无与伦比的可靠性、安全性和性能。想象一下你不需要为华丽的动画和图形服务消耗哪怕一丁点的CPU和内存所有的系统资源都可以百分百投入到你部署的服务上比如一个网站的后端、一个数据库或者一个自动化脚本。这就是无图形界面安装的核心价值极致的精简与控制。我选择Ubuntu 20.04 LTS不仅因为它是长期支持版本官方维护到2025年更因为其庞大的社区和丰富的软件生态几乎你遇到的所有问题都能找到成熟的解决方案。本次安装过程我们将从头到尾一步步完成从制作安装介质、启动安装程序到完成基础系统配置的全过程。整个过程完全在命令行界面下进行但别担心我会把每个步骤背后的逻辑、每个选项的意义以及我踩过的坑都讲清楚。无论你是想搭建个人开发环境、家庭服务器还是学习Linux系统管理这篇指南都能让你获得一个干净、高效的起点。2. 安装前的核心准备与规划在真正按下安装键之前充分的准备能避免过程中绝大多数令人抓狂的问题。无图形界面安装更像是一次精准的外科手术你需要提前确认好手术方案和工具。2.1 硬件与介质准备清单首先你需要一台用于安装的物理机或虚拟机。对于物理机请确保其支持从USB设备启动。虚拟机的创建就简单多了在VMware或VirtualBox中新建一台机器即可。接下来是制作安装介质这是整个流程的基石。你需要准备一个容量至少为4GB的U盘8GB更稳妥以及Ubuntu 20.04 Server的ISO镜像文件。务必从Ubuntu官方或国内可靠的镜像站如阿里云、清华镜像源下载校验文件的SHA256值这是保证镜像完整、未被篡改的关键一步。我见过太多因为镜像损坏导致安装中途失败的案例。制作启动U盘是第一个实操点。在Windows下我强烈推荐使用Rufus这款工具它开源、免费且极其可靠。打开Rufus选择你的U盘在“引导类型选择”处点击“选择”找到你下载的ISO文件。关键设置在于“分区类型”和“目标系统类型”对于2010年后生产的主流电脑支持UEFI启动选择“GPT”分区方案对于非常老旧的电脑仅支持传统BIOS则选择“MBR”。如果你不确定或者想让U盘兼容性最强Rufus的“GPT”方案通常也能兼容大多数UEFI且带有CSM兼容性支持模块的BIOS。点击“开始”采用默认的“以DD镜像模式写入”即可。这个过程会清空U盘所有数据请提前备份。注意切勿使用Windows自带的格式化工具或简单复制ISO文件到U盘那绝对无法启动。必须使用Rufus、Etcher或dd命令这类专门工具进行“烧录”。2.2 启动顺序与安装环境确认将制作好的U盘插入目标机器开机并进入BIOS/UEFI设置界面通常是按F2、F12、Delete或Esc键因主板而异。在这里你需要完成两件事调整启动顺序将U盘设置为第一启动项。确认启动模式尽可能使用UEFI模式启动如果你的硬件支持。UEFI相比传统BIOS具有更快的启动速度、更好的安全性支持安全启动以及支持超过2TB的大硬盘。在启动选择菜单中你可能会看到两个U盘选项例如“UEFI: Kingston DataTraveler”和“Kingston DataTraveler”选择带“UEFI”前缀的那一个。成功从U盘启动后你会直接进入一个文本菜单这就是Ubuntu Server的安装程序入口。从这里开始你的鼠标基本就“退休”了所有的操作都将通过键盘的方向键、Tab键、空格键和回车键来完成。这是你需要适应的第一个变化。3. 安装程序逐步骤详解与原理剖析安装程序是一个基于debconf的文本向导逻辑清晰但选项密集。理解每个选项背后的意义比单纯记住按哪个键更重要。3.1 语言、键盘与网络配置首先选择语言。虽然你可以选择中文但我强烈建议在安装阶段选择“English”。原因在于纯命令行环境下中文可能会在终端中显示为乱码尤其是在一些非UTF-8的串口控制台或救援模式下增加不必要的排错复杂度。系统安装完成后我们可以在一个稳定的环境里再配置中文语言包和 locale。键盘布局根据你的物理键盘选择通常是中国用户选择“Chinese”。安装程序会自动探测网络连接。如果是有线网络且支持DHCP它会自动获取IP并连接。这一步非常关键因为后续的镜像源选择和软件包更新都需要网络。如果网络不通安装程序会提示你进行配置或跳过但为了体验完整的安装流程请确保网络畅通。3.2 镜像源配置安装速度的生命线接下来是配置Ubuntu的归档镜像源archive.ubuntu.com和安全性更新源security.ubuntu.com。默认源指向海外在国内访问速度可能极慢导致安装过程耗时数小时甚至失败。这是安装过程中第一个可以大幅提速的优化点。安装程序会提供一个镜像源地址的输入框。不要使用默认地址直接输入国内镜像源的地址。例如阿里云http://mirrors.aliyun.com/ubuntu清华https://mirrors.tuna.tsinghua.edu.cn/ubuntu华为云https://repo.huaweicloud.com/ubuntu输入后安装程序会去测试该地址的连通性和速度。选择一个延迟低的镜像源能让你后续下载数百兆的软件包时如丝般顺滑。我个人的习惯是首选阿里云其CDN网络覆盖广速度稳定。3.3 磁盘分区最需要谨慎的环节磁盘分区是整个安装的核心也是新手最容易出错的地方。Ubuntu Server安装器提供了几种方案使用整个磁盘最简单安装程序会自动创建必要的分区包括UEFI系统分区或BIOS启动分区、交换空间、根分区。如果你是新手或者这是一块全新的专用硬盘选这个最省心。手动分区给予你完全的控制权适合多系统共存、特殊存储规划或高级用户。这里我们深入一下手动分区的典型方案。假设我们在一台支持UEFI的机器上为单系统规划一个500GB的硬盘EFI系统分区这是UEFI启动的必需分区。大小512MB(或更大1GB也无妨但512MB足够)。类型EFI System Partition。挂载点/boot/efi。格式FAT32。为什么是FAT32因为UEFI规范只要求固件能读取FAT文件系统。/boot/efi是操作系统与固件沟通的桥梁。交换空间相当于Windows的虚拟内存当物理内存不足时系统会将部分内存数据交换到此空间。大小一个经验法则是物理内存的1到2倍但不超过16GB。对于拥有大内存如32GB以上的服务器交换空间可以设置得较小如4GB甚至对于某些纯内存计算场景可以考虑不设。这里我们假设物理内存8GB设置8GB的交换空间。类型swap area。无挂载点。为什么需要它即使内存充足某些休眠Hibernate功能也需要交换空间来保存内存镜像。对于服务器它更是一个重要的安全缓冲防止内存耗尽导致进程被强制终止。根分区系统的核心存放所有系统文件、配置和安装的软件。大小剩余所有空间。挂载点/。格式ext4。这是Linux上久经考验、性能稳定的日志文件系统是服务器环境的主流选择。为什么不推荐单独分/home对于服务器而言数据和配置文件的管理通常有更专业的方案如单独的数据盘、Docker卷、数据库存储。将根分区和家目录分区合并简化了存储管理避免了/或/home某一个分区空间不足需要调整的麻烦。对于个人学习环境这样也更简单。实操心得分区方案确认后务必在最后一步“结束分区操作并将更改写入磁盘”前反复检查每个分区的挂载点、大小和格式。一旦确认写入数据将不可逆地丢失。对于生产服务器分区方案应在安装前就根据业务需求日志量、数据库大小等详细规划好。3.4 用户创建与SSH服务安装分区完成后设置你的地理位置用于时区然后创建第一个用户。这里有一个至关重要的细节是否将第一个用户设置为管理员sudo权限默认是勾选的请务必保持。这个用户将成为你日后管理系统的主要账号。设置一个强密码。在纯服务器环境密码是你安全的第一道防线。接下来是选择要安装的软件包。这是一个非常关键的步骤安装程序会提供一个列表例如OpenSSH server务必勾选。它允许你通过SSH从另一台电脑远程登录和管理这台服务器。没有它你只能坐在服务器面前操作失去了服务器“远程”管理的意义。Docker如果你打算使用容器可以勾选安装程序会帮你配置好Docker的官方源并安装。Kubernetes、LAMP stack、Mail server等根据你的具体需求选择。我的建议是初次安装除了OpenSSH server其他一律不选。保持系统最小化安装得到一个最干净的环境。所有需要的软件都可以在系统安装完毕后通过apt命令按需安装这样依赖关系更清晰也便于管理。4. 安装后的首要配置与安全加固当安装程序完成文件复制和基础配置提示你重启并移除安装介质后一个最简化的Ubuntu Server系统就准备就绪了。重启后你会看到黑底白字的登录提示符。用你创建的用户名和密码登录。恭喜你现在正式进入了一个纯粹的Linux命令行世界。4.1 初始系统更新与基础工具安装登录后第一件事不是急着部署应用而是更新系统。这能确保你获得最新的安全补丁和软件包更新。# 首先更新本地软件包索引列表。apt update 并不会更新任何已安装的软件它只是从配置的镜像源拉取最新的软件包信息。 sudo apt update # 然后升级所有可升级的已安装软件包。apt upgrade 会列出所有可更新的包并询问你是否确认。 sudo apt upgrade -y # 加上 -y 参数表示自动回答“yes”适合脚本化操作但首次建议不加先看看要更新什么。 # 可选但推荐执行发行版升级。这会将系统更新到该发行版系列中的最新版本例如从20.04.1到20.04.6。 sudo apt dist-upgrade -y接下来安装一些不可或缺的基础工具它们会让你后续的管理工作轻松百倍sudo apt install -y vim curl wget net-tools htop tree gitvim比默认的nano更强大的文本编辑器学习曲线陡但效率极高。curl/wget命令行下载工具用于获取网络资源。net-tools包含ifconfig、netstat等传统网络诊断工具虽然ip命令是未来但很多老脚本和习惯仍依赖它们。htop一个交互式的进程查看器比top更直观可以清晰看到CPU、内存使用情况。tree以树状图列出目录结构一目了然。git版本控制工具用于拉取代码。4.2 SSH安全强化配置既然我们安装了OpenSSH就必须对它进行安全加固。默认配置存在一定风险。编辑SSH服务端配置文件sudo vim /etc/ssh/sshd_config找到并修改以下几行如果行首有#注释请删除#以启用该配置# 禁止使用密码空白的root账户直接登录这是必须的。 PermitRootLogin no # 修改SSH监听端口默认22端口是自动化攻击脚本的常扫目标。改为一个1024-65535之间的高端口例如 2222。 Port 2222 # 禁用密码认证强制使用密钥对登录。这是提升安全性的最有效手段。 PasswordAuthentication no修改端口后需要更新系统的防火墙规则如果使用了ufwsudo ufw allow 2222/tcp # 允许新端口 sudo ufw deny 22/tcp # 拒绝旧端口如果之前允许过 sudo ufw reload # 重新加载防火墙规则重要在禁用密码认证前必须先将你的SSH公钥添加到服务器的~/.ssh/authorized_keys文件中。否则你会把自己锁在服务器外面在你的本地电脑比如你的Windows/Mac笔记本上生成SSH密钥对如果还没有的话ssh-keygen -t ed25519。将本地公钥通常是~/.ssh/id_ed25519.pub的内容复制。在服务器上为你登录的用户创建.ssh目录并设置正确权限然后将公钥内容粘贴到authorized_keys文件中mkdir -p ~/.ssh echo “你的公钥内容” ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys在本地测试使用新端口和密钥登录ssh -p 2222 your_usernameserver_ip。确认密钥登录成功后再重启SSH服务使配置生效sudo systemctl restart sshd。现在你的服务器SSH入口已经安全多了。4.3 配置静态IP地址针对服务器对于服务器一个固定的IP地址远比动态获取DHCP来得可靠。编辑网络配置文件Ubuntu 20.04使用netplan进行网络管理。配置文件通常在/etc/netplan/目录下名字可能是00-installer-config.yaml或50-cloud-init.yaml。sudo vim /etc/netplan/00-installer-config.yaml将其内容修改为类似如下根据你的网络环境调整network: version: 2 ethernets: ens33: # 网卡名称请用 ip a 命令查看你自己的 dhcp4: no addresses: [192.168.1.100/24] # 静态IP和子网掩码 routes: - to: default via: 192.168.1.1 # 网关地址 nameservers: addresses: [8.8.8.8, 114.114.114.114] # DNS服务器应用配置sudo netplan apply。如果配置有误导致断网你可以通过服务器的物理控制台登录进行修复或者如果之前是DHCP重启后可能会恢复。5. 日常维护与问题排查实录系统运行起来后日常的维护和问题诊断是必备技能。这里记录几个最常见场景和我的处理思路。5.1 系统监控与日志查看服务器是否健康htop给了我们一个实时视图。但更重要的是学会查看系统日志。Ubuntu使用systemd的journalctl来管理日志。# 查看所有日志实时滚动 sudo journalctl -f # 查看指定服务如ssh的日志 sudo journalctl -u ssh.service # 查看今天的内核日志 sudo journalctl -k --since today # 查看系统启动过程中的错误信息 sudo journalctl -b -p err另一个黄金命令是dmesg它显示内核环形缓冲区的消息对于诊断硬件问题和驱动故障至关重要。5.2 软件包管理故障排除最常见的问题是apt update失败提示无法连接或拉取镜像列表失败。这通常是网络问题或镜像源配置错误。检查网络连通性ping -c 4 mirrors.aliyun.com检查当前源配置cat /etc/apt/sources.list以及/etc/apt/sources.list.d/目录下的文件。手动修改源如果确认是源的问题可以再次编辑/etc/apt/sources.list文件将其内容替换为阿里云源以focal为例即20.04的代号deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse然后再次运行sudo apt update。5.3 磁盘空间告急处理服务器运行一段时间后/分区可能会被日志、缓存或上传的文件占满。使用df -h查看磁盘使用情况。如果某个分区使用率超过90%就需要清理了。常见的“空间杀手”日志文件位于/var/log/。可以使用sudo journalctl --vacuum-time7d清理7天前的系统日志。对于特定的应用日志如Nginx、Docker需要进入相应目录查看并清理。APT缓存apt下载的软件包缓存位于/var/cache/apt/archives/。运行sudo apt clean可以清空所有缓存的安装包文件.debsudo apt autoclean则只删除不再需要的旧版本缓存。Docker资源如果使用了Docker它的镜像、容器和卷会占用大量空间。使用docker system prune -a谨慎使用会删除所有未使用的资源或docker image prune来清理。5.4 SSH连接失败问题排查这是远程管理服务器时最令人紧张的问题。如果无法连接按以下顺序排查网络层本地能ping通服务器IP吗服务器防火墙ufw是否放行了SSH端口你修改后的那个检查命令sudo ufw status。服务层SSH服务在运行吗登录服务器控制台物理或虚拟运行sudo systemctl status ssh查看状态。尝试重启服务sudo systemctl restart sshd。配置层检查/etc/ssh/sshd_config确认Port、PermitRootLogin、PasswordAuthentication等设置无误并且没有语法错误可以用sudo sshd -t测试配置。密钥层如果是密钥登录失败检查服务器上~/.ssh/authorized_keys文件的权限必须是600以及本地私钥的权限在Windows/Mac上也可能因权限太开放而被拒绝。尝试在本地用ssh -v -p 2222 userip查看详细的连接过程日志错误信息通常会指向问题根源。完成以上所有步骤你已经拥有了一个安全、稳定、配置妥当的Ubuntu 20.04 Server基础系统。这个系统没有一丝冗余所有资源都可供你支配。接下来无论是搭建Web服务Nginx/Apache、部署数据库MySQL/PostgreSQL、运行容器Docker还是作为开发环境你都可以在这个坚实的基础上自由构建。记住命令行不是障碍而是赋予你精确控制力的工具。每一次输入命令都是你与系统最直接的对话。