之前我们讲了很多 Linux 服务器操作的命令,它们是管理服务器的基础。操作的时候,我们都是在一个图形化服务器(Server with GUI)内,很多时候系统都已经帮我们配置好了。然而,在实际的生产环境中,服务器都是不带桌面环境的,也就是说,我们必须和命令行打交道。相信很多初学者一听到“命令行”三个字,或者一看到黑咕隆咚的屏幕,蹦出一大堆根本看不懂的东西,就头皮发麻了。你并不孤单!就像初次进入一个新城市需要一份导航地图一样,掌握了关键步骤和基础逻辑,你会发现那片看似神秘的终端窗口,正是赋予你精确控制力和高效能力的起点。今天我们就仔细看看,服务器是否真的像天书一样很难配置。

前提条件……

首先,你需要先安装一台 Linux 服务器。网上有很多教程可以遵循,发行版官方也提供了丰富的文档。如果你不知道要安装哪个,可以参考下面的表格:

名称

特点

适用场景

Debian 12+

免费、开源且非常稳定,总计有 5 年的支持,但软件包版本较陈旧。

追求极致稳定性和自由软件理念的服务器环境。

Ubuntu Server 22.04+ LTS

基于 Debian,软件包版本相对更新。提供 5 年标准安全更新 + 5 年免费/付费 ESM 支持。拥有庞大的社区和极其丰富的文档。

新手友好、应用广泛的通用服务器,云环境和容器生态支持极佳。(建议)

RHEL 9+

企业级Linux的行业标准。提供最长达10年的超长生命周期支持、顶尖的安全认证、完善的技术支持(需订阅,但对开发者免费)和硬件/软件生态兼容性。稳定性和可靠性经过极致锤炼。

对稳定性、安全性和支持服务有最高要求的关键业务生产环境,如金融、电信、政府及大型企业核心系统。

CentOS Stream / Rocky Linux / AlmaLinux 9+

作为 RHEL 的社区复刻版(除了 CentOS Stream),提供长达 10 年的生命周期支持,具备企业级稳定性和安全性。

需要企业级特性、长周期支持的生产环境及传统企业应用。

openSUSE Leap 16+

来自德国的发行版,稳定可靠,拥有强大的图形化/命令行系统管理工具(YaST),测试流程严谨,但学习门槛较大,生态相对小众。

重视系统可管理性和稳定性的服务器,尤其在欧洲使用非常广泛。

Alpine Linux

极致轻量,基于musl libc和BusyBox,默认安装容量仅数MB。采用面向安全的配置,使用apk包管理器。非常适合容器化。

容器/Docker镜像、边缘计算、资源极度受限的环境的首选基础镜像,追求最小化攻击面和快速启动。

请注意,CentOS 7 已经停止支持超过 1 年,存在很大的安全风险,强烈不建议使用

对于第一次接触服务器环境的新手来说,首选 Ubuntu Server 22.04/24.04 LTS,次选 Debian 12/13 或 AlmaLinux/Rocky Linux 9+. CentOS Stream 由于更新迭代较快,不建议用于服务器环境。

对于 BSD 家族,由于多数命令和 Linux 不一样,这里不做考虑。

下面的内容,我们会用 Ubuntu Server 24.04 LTS 作为演示,但大多数操作在其他发行版上都是通用的。

SSH 登录

在生产环境下,正规且安全的做法是在另一个操作系统上通过 SSH 登录系统。这样做的目的是:

  1. 保证安全与高效:SSH(Secure Shell)协议对传输的所有数据(包括密码)进行强加密,从根本上杜绝了在图形界面中可能存在的直接物理接触、截屏或键盘记录风险,有助于最小化攻击面。同时,通过终端纯文本操作,避免了图形界面带来的不必要资源开销,指令执行更直接高效。

  2. 操作的便利性:在本地终端操作,我们可以方便地使用熟悉的本地编辑器(如 Vim、VS Code)编辑配置文件,并可利用本地的文档、浏览器和历史命令记录随时查找资料、复制粘贴复杂命令。同时,会话易于管理(多标签、保持连接),且所有操作日志都基于文本,便于记录、分享和团队协作。

这里我用的是 Termora,一款开源好用的 SSH 客户端,你也可以用 Wave Terminal 或 WindTerm 等其他 XShell 的开源平替,PowerShell 也行。至于 Putty,它缺少现代运维中必须要用到的文件传输功能,且其他功能十分有限,协议老旧,这里不做推荐。

不过在通过 SSH 登录之前,我们必须先获取服务器的 IP 地址。如果管理员没有告诉你,则必须先使用管理员给的账号密码登进去。

在系统启动界面,输入安装时设定的用户名(应该是小写)和密码,就可以进入系统了。

使用 ip addr show 获取当前服务器的 IP 地址:

可以看到,服务器的 IP 地址(在 ens32inet 后面,lo 是回环地址,只会 ping 到自己)为 192.168.40.129.

我们记录下这个服务器地址,保持服务器开启(否则你登不进去),打开 SSH 客户端并输入刚才得到的信息(框出的为必填项):

可以测试一下连接。如果连接不上,可能是操作系统没有安装 OpenSSH 服务器,需要通过以下命令安装:

sudo apt update
sudo apt install openssh-server

安装完成后,检查 ssh 的状态:

如果 xxx.service 后面是 "disabled",则使用下面的命令设置为开机自启动:

sudo systemctl enable ssh

这样应该就能使用 SSH 客户端登录了:

配置软件源仓库

这里使用的是 TUNA 清华源,如果访问速度较慢,可以试着使用离你最近的镜像源。先进入软件源仓库所在的目录:

如果你的软件源目录显示为 /etc/apt/sources.list.d,说明该系统采用了新版 DEB822 格式的配置文件。反之,则为传统格式(位于 /etc/apt/sources.list 文件内)。(其实两种格式的操作方法是类似的

以本例中采用的 DEB822 为例,先备份原软件源:

mv /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.old

再打开 ubuntu.sources 进行编辑:

进入 TUNA 清华源的网站,转到 ubuntu 这里:

tuna-ubuntu-mirror-config.png

找到下面的 DEB822 格式,复制里面的内容并粘贴进文件中:

保存并退出。运行 sudo apt update 刷新一下软件包缓存:

最后的警告没有用,不需要管。现在我们就完成了软件源仓库的配置。

如果要查看软件源仓库,可以使用下面的命令:

sudo apt-cache policy

(在 CentOS 系发行版中,你可能还需要安装 epel-release 源。)

放开防火墙端口

不同的发行版可能使用不同的防火墙,例如 iptables, firewall-cmdufw. 以本文使用的 Ubuntu 为例,默认可用的防火墙为 iptablesufw. 这里我们使用配置更简单的 ufw 举例说明,至于更复杂的 iptables,我们在后面会专门出一章讲解。

请注意:某些教程内可能会让你关闭或删除防火墙,严格来说,这种做法无论是在生产环境还是在内网环境下都是绝对禁止的!因为网络上每时每刻都有很多恶意工具在扫描你的和公司的服务器,像这种没有任何防护的就会成为黑客眼中的一块大肥肉。

必须放开的端口如下:

端口号

含义

22

SSH 登录的默认端口(或者填 OpenSSH)

80

HTTP 端口

443

HTTPS 端口

要开放某个端口:

sudo ufw allow PORT/PROTOCOL
# PROTOCOL: typically 'tcp' (default) and 'udp'

要删除某个端口的开放规则:

sudo ufw delete allow PORT/PROTOCOL
# You cannot delete a non-existing rule!!

要设置默认策略(默认拒绝所有入站流量,允许所有出站流量):

sudo ufw default deny incoming
sudo ufw default allow outgoing

完成改动后,记得启用防火墙(或者一开始就直接启用防火墙):

sudo ufw enable

查看防火墙规则状态:

sudo ufw status
# Or add "verbose" for more information

设置 SELinux

SELinux(Security Enhanced Linux)是 Linux 中的一个额外的安全层(相较于上面的防火墙而言),其对权限的控制作用超过 root(可以防止篡改系统重要文件),你可以认为它就是 Linux 版的 Windows Defender. SELinux 的概念和配置非常复杂(官方给的 SELinux 文档比较难理解),这里只挑几个重要的说。

Ubuntu Server 默认是没有安装 SELinux 的(但是 CentOS 有),需要使用如下命令安装(最好先更新一下系统):

sudo apt install selinux-utils selinux-basics selinux-policy-default

安装完成后,如果此时它的状态像这样:

说明它默认是被禁用的。需要打开 /etc/selinux/config 文件编辑默认模式:

改成 permissive 或 enforcing 都行,不过前者是开启但放行(允许授权用户修改系统重要文件),而后者是完全禁止(即使是 root 也不能做更改),但有概率会导致无法进入服务器。某些不可变 Linux 发行版就使用到了它。

修改完成后,必须先使用 sudo selinux-activate 激活,再重启系统,否则即使重启系统,更改也不会生效。

那么问题来了,如果我们只是临时修改一下,那还一定要每次都去改配置文件吗?

答案是否定的,SELinux 为了解决这一问题,提供了一个允许临时修改规则的命令 setenforce,重启后会失效:

setenforce 1
# 1 - enforcing
# 0 - permissive

永久修改 SELinux 策略的话就需要修改配置文件。其实它的答案就在上面。

安装常用工具

一些常用的工具如下:

工具名称

软件包名称(Debian/Ubuntu 系)

软件包名称(Fedora/CentOS 系)

说明

lrzsz

lrzsz

lrzsz

zmodem/xmodem/ymodem 文件传输工具

sysstat

sysstat

sysstat

Linux 系统性能工具

elinks

elinks

elinks

基于命令行文本的高级网络浏览器

wget

wget

wget

常用的命令行下载工具(经常和 curl 一起使用)

net-tools

net-tools

net-tools

NET-3 网络工具包

bash-completion

bash-completion

bash-completion

bash 终端内的自动补全插件(新版本的操作系统内默认已经安装)

vim

vim

vim

Vim 文本编辑器,为 Vi 的改进

fastfetch

fastfetch(Debian 13 和 Ubuntu 26.04 LTS 以后

fastfetch(位于 epel-release 内)

neofetch 的平替,可以输出系统配置信息和运行状态

可以使用 apt 来安装它们。请注意,某些软件包可能缺失,需要自行从外部下载再传输

备份/快照

这一部分比较简单,可以设置为计划任务。需要用到的软件包是 rsync.

例如,将本地 /home/$USER/Documents 目录下的文件同步到其他挂载点 /data

sudo rsync -av /home/$USER/Documents/ /data/backups

它执行的是增量备份,如果最后没有"/"则同步目录本身,反之则是里面的文件

如果目标是远程服务器的话(请先尝试通信):

sudo rsync -av /data/backups/ [email protected]:/remote/backups/

更多关于 rsync 的用法请参考这里:https://www.runoob.com/linux/linux-comm-rsync.html

至于虚拟机的话,直接拍摄快照就可以了。难度不是很大。

C/C++ 新人开发者,主攻 UE5,业余 Linux 运维