学习路线

从零开始学习 Linux:从第一条命令到服务器管理的学习计划

更新于: · Skillaria.Top

从零学习 Linux 最好分层进行:先学终端和文件系统,然后是用户与权限、Bash 脚本、软件包、进程与 systemd,最后是磁盘、日志、网络、SSH 和服务器安全。每个阶段都要在自己的虚拟机或低价 VPS 上动手练习,最终目标是独立搭建并加固一台运行服务的服务器。

从零学习 Linux 其实比想象中简单,只要顺序正确,并且立刻动手练习。新手最常犯的错误是只看不敲命令,或者在不理解进程和权限的情况下直接学习 Docker 和 Kubernetes。下面是一份九个阶段的计划:每个阶段学什么、练什么,以及怎样判断自己已经掌握。

按时间估算,每天学习一小时大约需要两到四个月,但每个人的节奏不同。比速度更重要的是:完成每个阶段后,你能亲手做出点什么。

阶段 0. 准备实验环境

学 Linux 最好直接在 Linux 中进行。从简单到接近真实的选择有:

  • Windows 上的 WSL2:几分钟就能得到一个 Ubuntu 终端。适合练习命令和脚本,但 systemd 和网络的行为与真实服务器不完全相同。
  • 虚拟机(VirtualBox、VMware,Mac 上的 UTM)安装 Ubuntu Server 或 Debian。可以随意破坏,并随时恢复快照。
  • 低价 VPS:云服务商提供的真实服务器,带有公网 IP,是练习网络和安全的最佳场所。

入门推荐 Ubuntu Server 或 Debian:它们的文档和问答最多。图形界面不是必需的:服务器通过终端管理,从第一天起就应该习惯它。

阶段 1. 终端与文件系统

目标:熟练地在系统中移动,并且不用鼠标处理文件。

  • 导航:pwd、ls -la、cd,绝对路径与相对路径,~、. 和 ..。
  • 文件:cp、mv、rm、mkdir -p、touch,以及用 cat、less、head、tail -f 查看内容。
  • 搜索:find、which、locate。
  • 帮助:man 和 --help。学会读 man 手册是一项终身受益的技能。
  • 目录结构:/etc、/var/log、/home、/usr、/proc、/dev 中分别有什么;什么是挂载和 inode。
  • 终端编辑器:开始时使用 nano,之后学习 vim 的基本命令,因为几乎每台服务器上都有它。

练习:找出 /etc 中最近一周内修改过的所有 .conf 文件(find /etc -name "*.conf" -mtime -7)。打开 /etc/os-release,确认系统版本。查看 /var/log 中系统记录了什么。

阶段 2. 用户、组和权限

权限是 Linux 安全的基础,也是一半“Permission denied”错误的来源。

  • 读懂 ls -l 的输出:类型、权限、所有者、所属组。
  • 符号和数字形式的 chmod,chown,umask。
  • 特殊位:SUID、SGID、sticky bit,以及为什么 /tmp 对所有人可写,但别人的文件无法删除。
  • 用户和组:useradd、usermod -aG、passwd,文件 /etc/passwd、/etc/shadow、/etc/group。
  • sudo、sudoers 中的规则,以及用 visudo 编辑。

练习:创建两个用户和一个共享的项目目录,使两人都能创建文件,而其他人什么都看不到。提示:使用一个组、chmod 2770,以及用于继承组的 SGID。

阶段 3. Bash 与文本工具

管理服务器很大程度上是在处理文本:日志、配置、命令输出。在这一阶段,终端会从一组命令变成真正的工具。

  • 重定向和管道:>、>>、2>&1、|、xargs。
  • 过滤工具:grep(配合正则表达式)、sort、uniq -c、wc、cut、sed、awk。
  • 在命令行中使用 JSON 和 HTTP:curl 和 jq。
  • 脚本:shebang、变量、引号、条件 if 和 [[ ]]、循环、函数、退出码、set -euo pipefail。

练习:用一行命令统计 Web 服务器日志中请求次数最多的十个 IP 地址:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

然后编写一个备份脚本:将目录打包成文件名带日期的归档,删除七天前的归档,并在出错时返回非零退出码。

阶段 4. 软件包、环境与计划任务

  • 包管理器:apt update、apt install、apt remove、apt search、dpkg -l。在 RHEL 系列系统中使用 dnf。理解什么是软件源,以及签名密钥的作用。
  • 环境变量:env、export、PATH,文件 ~/.bashrc、~/.profile、/etc/environment,以及每个文件何时被读取。
  • 计划任务:crontab -e,五字段的语法,以及为什么在终端能运行的命令放进 cron 里会“不工作”(环境和 PATH 不同)。

练习:从软件源安装 nginx,把你的脚本目录加入 PATH,并用 cron 设置阶段 3 的备份脚本每晚运行,同时把输出写入日志。

阶段 5. 进程与 systemd

在这一阶段,你开始真正理解系统内部正在发生什么。

  • 进程:ps aux、top/htop、PID 与 PPID、进程状态、优先级(nice)、信号与 kill。
  • 负载:平均负载(load average)、内存和 swap(free -h),以及“处于 D 状态的进程”是什么意思。
  • 调试:lsof 查看进程打开了哪些文件和端口;strace 查看进程进行了哪些系统调用,以及它卡在哪里。
  • systemd:单元、systemctl status/start/enable,编写带有 Restart=on-failure 的自定义 unit 文件,用定时器代替 cron。
  • 日志:journalctl -u、-f、-b、-p err,日志轮转,rsyslog;使用 sysstat(sar、iostat)查看性能统计。

练习:把一个小应用(至少是 python3 -m http.server)配置为由独立用户运行的 systemd 服务,用 kill -9 结束进程,确认 systemd 已将其重新拉起,并在日志中找到重启的记录。

阶段 6. 磁盘、LVM 与 RAID

  • 设备和分区:lsblk、blkid、fdisk 或 parted,文件系统 ext4 和 XFS,mkfs。
  • 挂载:mount,使用 UUID 的 /etc/fstab,用 mount -a 检查。
  • 空间:df -h、df -i、du -sh,查找占用磁盘的内容。
  • LVM:物理卷、卷组、逻辑卷,以及在不停机的情况下扩展分区。
  • 使用 mdadm 的软件 RAID:理解 0、1、5、10 级,以及 RAID 不等于备份。

练习:在虚拟机中添加两块磁盘,用它们创建 LVM,建立一个逻辑卷,通过 fstab 挂载,然后用 lvextend -r 扩大它。

阶段 7. 网络

  • 足以用于诊断的 TCP/IP 知识:IP、子网掩码、网关、端口、TCP 与 UDP。
  • 命令:ip a、ip r、ss -tlnp、ping、traceroute/mtr、curl -v、nc。
  • DNS:解析的工作方式,/etc/hosts、/etc/resolv.conf、dig、resolvectl。
  • 在你的发行版中配置网络(Ubuntu 使用 netplan,其他发行版常用 NetworkManager)。
  • 抓取流量:当其他方法都不奏效时使用 tcpdump。

练习:查明服务器上每个开放端口分别由哪个进程监听。分析为什么只监听 127.0.0.1 的服务无法从外部访问,并把它修好。

阶段 8. 远程工作:SSH 与文件传输

  • SSH:密钥(ssh-keygen -t ed25519、ssh-copy-id),文件 ~/.ssh/config,ssh-agent,端口转发(ssh -L),通过 ProxyJump 连接堡垒机。
  • 复制:scp 与 rsync -avz --delete,以及 rsync 在同步方面的优势。
  • 网络文件系统:Linux 服务器之间的 NFS,与 Windows 交换文件的 SMB(Samba)。

练习:把 VPS 配置为只能通过密钥登录,在 ~/.ssh/config 中为它设置一个简短的名称,并通过 rsync 每天把一个目录同步到服务器上。

阶段 9. 服务器安全

  • 防火墙:“默认拒绝,只允许明确放行的流量”原则,简单场景用 ufw,想了解底层原理则学习 nftables。
  • fail2ban:多次登录失败后封禁 IP,用 fail2ban-client status sshd 查看。
  • sshd 设置:禁止密码登录和 root 登录。
  • 安全更新及其自动安装(Debian 和 Ubuntu 中的 unattended-upgrades)。
  • GPG:验证软件包和文件的签名,加密备份。

练习:防火墙中只开放 22、80 和 443 端口,启用 fail2ban,一天之后查看其状态,看看已经封禁了多少个地址。

综合项目:从头搭建一台完整的服务器

检验是否真正学会 Linux 的最好方式,是不借助提示,从零搭建一台服务器:

  1. 全新的 VPS,拥有一个带 sudo 的普通用户,通过 SSH 密钥登录,禁用密码和 root 登录。
  2. 防火墙和 fail2ban,自动安装安全更新。
  3. Web 服务器和应用,以带自动重启的 systemd 服务运行。
  4. 用于数据的独立磁盘或逻辑卷,通过 fstab 挂载。
  5. 按计划(cron 或 systemd 定时器)通过 rsync 把备份传输到另一台机器,并记录日志,还要验证恢复。
  6. 简短的操作说明:如何从头重新搭建这一切。

如果你能完成这份清单,并且能解释每一步,那么你就具备了从事系统管理或 DevOps 工作的基础。接下来可以学习容器、配置自动化和监控。

如何更有效地学习

  • 亲手输入命令。复制粘贴不容易记住,而敲命令和犯错则会留下印象。
  • 破坏并修复。在虚拟机中弄坏 fstab 或 ~/.ssh 的权限,然后把系统修好。这种经验在面试中很受重视。
  • 做笔记。带有示例的个人命令笔记,比任何别人的速查表都更有用。
  • 阅读日志。几乎所有 Linux 问题都能从日志中找到答案,养成先看日志的习惯。

总结

从零学习 Linux 的方法,就是分层前进:终端与文件、权限、Bash、软件包、进程与 systemd、磁盘、网络、SSH、安全。每个阶段都要在自己的环境中解决一个实际问题。最终目标是独立搭建并加固一台运行服务的服务器。正是按照这条路线,从第一讲到综合项目,平台的 Linux 课程才得以构建。

常见问题

学会 Linux 从零开始需要多长时间?

如果每天学习约一小时,通常需要几个月才能掌握日常服务器操作的基础。自信来自于在实际任务中练习,因此规律性比总时长更重要。

学习 Linux 需要先会编程吗?

不需要,可以从零开始。但到了 Bash 脚本阶段,你实际上已经开始编程了,这些技能之后会在自动化中用到。

能在 Windows 上学习 Linux 吗?

可以,通过 WSL2 或虚拟机。对于 systemd、磁盘和网络等主题,最好使用完整的虚拟机或 VPS。

是否应该把 Linux 设为电脑的主系统?

这样有帮助,但不是必需的。做系统管理时,更重要的是通过终端操作服务器版 Linux,而不是使用图形桌面。

新手应该选择哪个发行版?

Ubuntu Server 或 Debian:文档丰富,技能也容易迁移到其他发行版。RHEL 系列的主要区别是使用 dnf 包管理器。

通过视频学习本主题

课程“Linux: с нуля до уверенного администрирования”结合实践详细讲解了这一主题。

前往课程