结论: Linux 服务器入门只需掌握四件事——选一个发行版(新手推荐 Ubuntu 24.04 LTS)、完成首次初始化(换源、建 sudo 用户、配 SSH 密钥、设时区)、记住二十来条常用命令、理解 Shell 的基本语法。云上 90% 的服务器跑的是 Linux,本文把所有命令按"文件、进程、网络、权限、包管理"分类列出,可直接照抄执行。
第一次登录 Linux 服务器,黑底白字的命令行界面往往让人发怵:没有图形界面,鼠标不起作用,一切靠敲命令。但 Linux 服务器的逻辑其实非常清晰——一切皆文件、一切靠命令、一切可脚本化。熟悉之后你会发现,批量管理 100 台 Linux 服务器的效率远高于逐台点击图形界面。本文假定你拿到的是一台全新的云服务器(Ubuntu 24.04 LTS 或 Rocky Linux 9),从发行版选择讲到日常运维命令,全程命令可直接复制。
一、发行版怎么选?Ubuntu、Debian、Rocky、AlmaLinux 对比
先给结论:新手选 Ubuntu,追求稳定与轻量选 Debian,需要 RHEL 兼容性和长生命周期选 Rocky Linux 或 AlmaLinux。
Linux 发行版(Distribution)本质上是"Linux 内核 + 软件包集合 + 包管理器"的组合。服务器领域主要有两大派系:
| 发行版 | 包管理器 | 支持周期 | 特点 | 适合场景 |
|---|---|---|---|---|
| Ubuntu Server 24.04 LTS | apt / dpkg | 5 年(可延至 10 年) | 教程最多、软件最新、云厂商默认镜像 | 新手、Web 应用、容器、AI |
| Debian 12/13 | apt / dpkg | 约 5 年 | 极其稳定、包版本保守、资源占用低 | 长期稳定运行的基础服务 |
| Rocky Linux 9 | dnf / rpm | 10 年 | Red Hat Enterprise Linux 的下游重建版,二进制兼容 RHEL | 企业环境、需要 RHEL 生态 |
| AlmaLinux 9 | dnf / rpm | 10 年 | 同为 RHEL 下游重建版,由社区基金会运营 | 替代 CentOS 的企业场景 |
| CentOS Stream 9 | dnf / rpm | 滚动 | RHEL 的上游开发分支,更新更快 | 想提前体验 RHEL 新特性的场景 |
| openEuler / 国产发行版 | dnf / apt | 视版本 | 信创合规、国产硬件适配 | 政企信创项目 |
几条实用建议:
- CentOS Linux 7 已于 2024 年停止维护,新项目不要再选;存量系统应迁移到 Rocky Linux、AlmaLinux 或其他替代发行版。
- 不要追新版本,服务器选 LTS(Long Term Support,长期支持)版本,如 Ubuntu 24.04 LTS、Rocky Linux 9。
- 一台机器上不要混用 apt 和 dnf,包管理器由发行版决定,混用会破坏系统。
确认自己的系统版本:
cat /etc/os-release
uname -a
hostnamectl二、首次登录与 SSH 配置
先给结论:第一次登录用 root + 密码,登录后立刻创建普通用户、配置 SSH 密钥、禁用 root 密码登录,这是 Linux 服务器安全的第一道门槛。
从本地连上服务器
# 首次用密码登录(默认 22 端口)
ssh root@你的公网IP
# 指定端口
ssh -p 2222 root@你的公网IP
# 首次连接会提示确认指纹,输入 yes;之后输入密码即可Windows 用户可以用 PowerShell 自带的 ssh(Windows 10 1809 之后内置),或者用 Xshell、PuTTY、FinalShell 等图形客户端。
在本地生成密钥对并上传
# 本地执行:生成 ED25519 密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"
# 把公钥上传到服务器(会自动写入 ~/.ssh/authorized_keys)
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@你的公网IP
# Windows 没有 ssh-copy-id 时,用这条代替
cat ~/.ssh/id_ed25519.pub | ssh root@你的公网IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"此后登录就不需要输入密码了:ssh root@你的公网IP。
配置 SSH 客户端别名(可选但很实用)
# 编辑 ~/.ssh/config
Host web01
HostName 你的公网IP
Port 2222
User deploy
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
# 之后只需输入 ssh web01 即可登录三、初始化:换源、建用户、时区、swap
先给结论:新系统上线前必须做的初始化有六件:更新软件源、创建 sudo 用户、配置 SSH 密钥登录、设置时区与时间同步、按需配置 swap、做基础安全加固。
更换软件源(国内机器建议换成国内镜像)
# Ubuntu 24.04 备份并替换为阿里云镜像源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo tee /etc/apt/sources.list > /dev/null <<'EOF'
deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
EOF
sudo apt update && sudo apt upgrade -y# Rocky Linux 9 替换为国内镜像(以阿里云为例)
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak /etc/yum.repos.d/rocky*.repo
sudo dnf makecache && sudo dnf update -y创建 sudo 用户并配置权限
# 创建用户(交互式会提示设置密码)
adduser deploy
# 加入 sudo 组(Ubuntu / Debian)
usermod -aG sudo deploy
# Rocky / AlmaLinux 对应的是 wheel 组
usermod -aG wheel deploy
# 免密码 sudo(可选,方便自动化)
echo "deploy ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/deploy
sudo chmod 440 /etc/sudoers.d/deploy
# 验证:切到新用户并执行 sudo
su - deploy
sudo whoami # 应输出 root禁用 root 密码登录并改端口
sudo vim /etc/ssh/sshd_configPort 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
AllowUsers deploy
ClientAliveInterval 300
ClientAliveCountMax 2# 语法检查后重启(注意:先另开窗口测试新用户能登录!)
sudo sshd -t
sudo systemctl restart ssh # Ubuntu / Debian
# sudo systemctl restart sshd # Rocky / AlmaLinux务必先测试 ssh -p 2222 deploy@你的IP 登录成功,再关闭当前的 root 会话。
设置时区与时间同步
sudo timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true
timedatectl status
# Ubuntu 24.04 使用 systemd-timesyncd
systemctl status systemd-timesyncd
# 需要更精确时安装 chrony(建议生产环境使用)
sudo apt install -y chrony
sudo systemctl enable --now chrony
chronyc sources -v时间不同步会导致日志错乱、HTTPS 证书校验失败、定时任务错位、数据库主从异常,是新手最容易忽略的问题之一。
配置 swap
# 创建 4GB 交换文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 写入 fstab 实现开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# 调整 swappiness(内存 8GB 以上建议设为 10)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 验证
free -h
swapon --show四、包管理与软件安装
先给结论:记住 apt(Debian 系)或 dnf(RHEL 系)这六个子命令就够了:update、upgrade、install、remove、search、autoremove。
| 操作 | Debian / Ubuntu(apt) | Rocky / AlmaLinux(dnf) | ||
|---|---|---|---|---|
| 更新索引 | apt update | dnf check-update / dnf makecache | ||
| 升级软件 | apt upgrade -y | dnf upgrade -y | ||
| 安装软件 | apt install -y nginx | dnf install -y nginx | ||
| 卸载软件 | apt remove -y nginx | dnf remove -y nginx | ||
| 搜索软件 | apt search nginx | dnf search nginx | ||
| 查看信息 | apt show nginx | dnf info nginx | ||
| 清理无用包 | apt autoremove -y && apt clean | dnf autoremove -y && dnf clean all | ||
| 查找文件属于哪个包 | dpkg -S /usr/sbin/nginx | rpm -qf /usr/sbin/nginx | ||
| 查看已装包 | `dpkg -l \ | grep nginx` | `rpm -qa \ | grep nginx` |
安装常用运维工具套装:
# Ubuntu / Debian
sudo apt install -y curl wget vim git htop iotop iftop net-tools \
lsof rsync unzip zip tree tmux jq sysstat smartmontools \
software-properties-common ca-certificates gnupg
# Rocky / AlmaLinux(需要先装 EPEL 源)
sudo dnf install -y epel-release
sudo dnf install -y curl wget vim git htop iotop iftop net-tools \
lsof rsync unzip zip tree tmux jq sysstat smartmontools五、防火墙与端口管理
先给结论:Ubuntu 用 ufw,RHEL 系用 firewalld,两者都遵循"默认拒绝入站、放行必要端口"的原则。
# ---------- Ubuntu / Debian:ufw ----------
sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp comment 'SSH'
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status numbered
# 删除规则(按编号)
sudo ufw delete 3# ---------- Rocky / AlmaLinux:firewalld ----------
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
# 删除规则
sudo firewall-cmd --permanent --remove-service=http && sudo firewall-cmd --reload云服务器还需要在控制台的安全组里放行同样的端口,安全组在系统之外,两层都要开。
# 查看监听端口与进程
sudo ss -lntup
sudo netstat -lntup
# 查看谁占用了 80 端口
sudo lsof -i :80
sudo fuser -n tcp 80
# 测试远端端口是否可达
nc -zv 你的IP 443
curl -v telnet://你的IP:443六、常用命令速查表(文件 / 进程 / 网络 / 权限 / 系统)
先给结论:下面这五张表覆盖日常运维 90% 的命令,建议先全部跑一遍熟悉手感。
文件与目录
pwd # 显示当前目录
ls -lah # 列出文件(含隐藏、人类可读大小)
cd /var/www # 切换目录
mkdir -p /data/app/logs # 递归创建目录
touch file.txt # 创建空文件
cp -a src/ dst/ # 复制目录(保留属性)
mv old.txt new.txt # 移动/重命名
rm -rf /tmp/old # 强制删除(慎用)
cat file.txt # 显示文件全部内容
less /var/log/syslog # 分页查看(q 退出)
head -n 20 file.txt # 查看前 20 行
tail -n 100 -f app.log # 实时追踪日志(Ctrl+C 退出)
grep -n "ERROR" app.log # 搜索并显示行号
grep -rn "timeout" /etc/nginx/ # 递归搜索目录
find /var -type f -size +100M # 查找大于 100MB 的文件
find /data -name "*.log" -mtime +7 -delete # 删除 7 天前的日志
du -sh /var/* # 查看各目录占用大小
df -hT # 查看磁盘分区与使用率
tar -czf backup.tar.gz /data # 打包压缩
tar -xzf backup.tar.gz -C /tmp # 解压到指定目录进程与服务
ps aux | grep nginx # 查找进程
ps aux --sort=-%mem | head -10 # 按内存占用排序
top # 实时查看进程(q 退出)
htop # 增强版 top
kill -15 PID # 优雅终止进程
kill -9 PID # 强制杀死进程
pkill -f "node server.js" # 按名称杀进程
systemctl status nginx # 查看服务状态
systemctl restart nginx # 重启服务
systemctl reload nginx # 平滑重载配置
systemctl enable --now nginx # 开机自启并立即启动
systemctl disable nginx # 取消开机自启
journalctl -u nginx -f # 实时查看服务日志
journalctl -u nginx --since "10 min ago"
uptime # 查看负载均值网络
ip a # 查看网卡与 IP(替代 ifconfig)
ip route # 查看路由表
ping -c 4 223.5.5.5 # 测试连通性
traceroute example.com # 追踪路由
mtr -r -c 20 example.com # 持续追踪并统计丢包
dig example.com +short # DNS 查询
nslookup example.com # DNS 查询(备用)
curl -I https://example.com # 只看响应头
curl -o /dev/null -w "%{http_code} %{time_total}\n" https://example.com # 取状态码与耗时
wget -c https://example.com/big.iso # 断点续传下载
scp file.tar.gz deploy@IP:/data/ # 上传文件
rsync -avz -e "ssh -p 2222" ./dist/ deploy@IP:/data/www/ # 增量同步
ss -s # 连接统计权限与用户
ls -l # 查看权限(如 -rw-r--r--)
chmod 644 file.txt # 改权限:属主读写,其他人只读
chmod 600 ~/.ssh/id_ed25519 # 私钥必须 600
chmod +x script.sh # 加执行权限
chown deploy:deploy /data/app # 改属主属组
chown -R www-data:www-data /var/www/html
sudo -u www-data whoami # 以指定用户执行
id deploy # 查看用户 UID/GID 与所属组
last # 查看登录历史
w / who # 查看当前登录用户Linux 权限的三组含义(以 -rwxr-xr-- 为例):
| 位置 | 含义 | 数值 |
|---|---|---|
| 第 1 位 | 文件类型(- 普通文件,d 目录,l 链接) | — |
| 2~4 位 | 属主权限(rwx) | 4+2+1 = 7 |
| 5~7 位 | 属组权限(r-x) | 4+0+1 = 5 |
| 8~10 位 | 其他用户权限(r--) | 4 |
系统信息
lscpu # CPU 型号、核数、NUMA
free -h # 内存与 swap
lsblk # 磁盘与分区
df -hT # 文件系统使用率
iostat -x 1 # 磁盘 IO 实时
vmstat 1 5 # 内存、CPU、IO 综合
uname -a # 内核版本
cat /etc/os-release # 发行版信息
dmesg -T | tail -30 # 内核日志
env # 环境变量七、Shell 基础:让命令能组合起来
先给结论:Shell 的核心能力是"输入输出重定向 + 管道 + 变量 + 脚本",掌握这四点就能把单条命令组合成自动化流程。
重定向与管道
# 输出重定向:覆盖写入 / 追加写入
echo "hello" > out.txt
echo "world" >> out.txt
# 错误重定向:2> 标准错误,&> 全部
command > result.log 2> error.log
command &> all.log
command > /dev/null 2>&1 # 丢弃所有输出(cron 里常用)
# 管道:把前一个命令的输出作为后一个的输入
cat access.log | grep "404" | wc -l
ps aux | grep nginx | grep -v grep | awk '{print $2}'变量、条件与循环
#!/usr/bin/env bash
set -euo pipefail # 严格模式:出错即退出,变量未定义即报错
NAME="web01"
DATE=$(date +%F)
COUNT=$(grep -c "ERROR" /var/log/app.log || true)
echo "主机: ${NAME}, 日期: ${DATE}"
if [ "$COUNT" -gt 100 ]; then
echo "错误日志过多:${COUNT} 条,需要排查"
else
echo "日志正常"
fi
for host in web01 web02 web03; do
echo "--- 检查 ${host} ---"
ssh "$host" "uptime; df -h / | tail -1"
done
# 遍历文件并处理
for f in /data/*.tar.gz; do
[ -e "$f" ] || continue
echo "处理 $f"
done实用的日常一键脚本
#!/usr/bin/env bash
# 一键查看服务器健康状态
echo "===== 系统负载 ====="
uptime
echo "===== 内存 ====="
free -h
echo "===== 磁盘 ====="
df -hT | grep -v tmpfs
echo "===== CPU 占用 TOP5 ====="
ps aux --sort=-%cpu | head -6
echo "===== 内存占用 TOP5 ====="
ps aux --sort=-%mem | head -6
echo "===== 监听端口 ====="
sudo ss -lntup | head -20保存为 health.sh 后:
chmod +x health.sh
./health.sh
# 或放到 /usr/local/bin/ 供全局调用
sudo mv health.sh /usr/local/bin/health && health定时任务(cron)
crontab -e # 编辑当前用户的定时任务
crontab -l # 查看
# 格式:分 时 日 月 周 命令
# 每天凌晨 3 点备份
0 3 * * * /home/deploy/backup.sh >> /var/log/backup.log 2>&1
# 每 5 分钟检查一次
*/5 * * * * /usr/local/bin/check.sh
企业QQ咨询




