Blog

入门 Linux 的 30天自学计划

Cover Image for 入门 Linux 的 30天自学计划
ZD
ZD

背景

有朋友碰到了 Linux 难以入门的问题,虽然我会,但是并不表示会教,于是和 AI 切磋了一下,让 AI 设计一个 30 天 为期 4 周的业余时间自学计划。

PS: 虽然叫做正文,但也只个大纲,把所有内容都写完整了,可不是一篇小小博客能 cover 得住的。

正文

我: 你是一个富有经验的成功的自学专家,如何帮助一个零基础的 Linux 学习者,在 4 周的业余时间内,掌握基础的 Linux 技能,从而胜任初级的 IT 运维工作?

AI: bala bala bala ...

我:调整一下细节,以 redhat linux 为教学和练习平台,因此所有的命令也以该平台为主。命令的选取重在实用、常用、高频。包管理需要包含 rpm 命令。

好的,作为一名富有经验的自学专家,我将为你量身定制一个以 Red Hat Enterprise Linux (RHEL) 及其衍生版(如 CentOS Stream, Rocky Linux, AlmaLinux)为主要教学和练习平台的四周学习计划。我们将聚焦于实用、常用、高频的命令,并特别加入 rpm 命令的学习。


核心学习理念:

  1. Red Hat 生态圈: 熟悉基于 RHEL 的系统特性、工具和最佳实践。
  2. 实践驱动: 理论结合大量实际操作,通过动手理解概念。
  3. 小步快跑: 每天投入固定时间,循序渐进,持之以恒。
  4. 详细笔记: 记录命令、配置、遇到的问题和解决方案,构建你的知识库。
  5. 善用文档: man 命令是你的第一参考,Red Hat 官方文档和社区资源是宝藏。
  6. 大胆尝试: 在虚拟机中勇敢犯错,每次解决问题都是一次进步。
  7. 理解而非死记: 掌握命令背后的原理和逻辑,举一反三。

准备工作(第 0 周):

  • 硬件要求: 一台电脑(Windows/macOS 均可)。
  • 软件安装:
    • 安装虚拟机软件:推荐 VirtualBoxVMware Workstation Player (免费版)。
    • 下载一个主流的 RHEL 系 Linux 发行版 ISO 镜像:强烈推荐 Rocky LinuxAlmaLinux (它们是 RHEL 的免费且社区支持的替代品,与 RHEL 100% 二进制兼容),或 CentOS Stream (RHEL 的上游开发版)。选择服务器版(Server/Minimal Install),因为初级运维主要面对命令行环境。
    • 在虚拟机中安装 Linux 系统。务必学会如何创建虚拟机、安装操作系统、配置网络(NAT 模式即可),并了解快照功能(在每次进行重大更改前创建快照,方便回滚)。
    • 重要: 确保虚拟机能访问互联网。

四周学习计划:

第一周:Linux 世界初探与基本操作(建立你的操作舒适区)

目标: 理解 Linux 哲学,熟悉命令行界面,掌握基本文件和目录管理。

  • 第 1 天:Linux 初识与虚拟机操作
    • 了解 Linux 是什么,理解开源、发行版(尤其是 RHEL 系),以及 Shell (Bash) 和终端的概念。
    • 掌握虚拟机的基本操作:启动、关机、快照、网络模式(重点是 NAT 模式,确保能联网)。
    • 学会打开终端(或通过 SSH 远程连接,如果可以),执行你的第一个命令:echo "Hello, Rocky Linux!"
    • 学习退出终端:exit
  • 第 2 天:文件系统基础与导航
    • 理解 Linux 文件系统层次结构 (FHS),如 /, /home, /etc, /var, /opt, /tmp 等目录的作用及其在服务器环境中的重要性。
    • 常用命令:pwd (显示当前路径), ls (列出目录内容,常用参数 ls -l, ls -a, ls -F), cd (切换目录), . (当前目录), .. (上级目录), ~ (用户主目录), - (上一个目录)。
    • 学会使用 tab 键进行命令补全,提高效率。
    • 核心: man 命令:学会如何查看命令的帮助文档,如 man ls
  • 第 3 天:文件与目录管理
    • 创建目录:mkdir dir1 dir2
    • 删除目录:rmdir (空目录), rm -r (非空目录,慎用!)。
    • 创建文件:touch file1.txt
    • 复制文件/目录:cp source_file destination_file, cp -r source_dir destination_dir
    • 移动/重命名文件:mv old_name new_name
    • 删除文件:rm file1.txt
    • 重要参数:-i (交互式确认), -f (强制), -v (显示过程)。
    • 文本编辑器初步: 学习 vivim 的基本操作(进入插入模式 i,保存退出 :wq,不保存退出 :q!)。这是服务器运维的必备技能。
  • 第 4 天:查看文件内容与文本处理初步
    • 查看文件内容:cat file.txt (全部显示), less file.txt (分页显示,可搜索), more file.txt (分页显示), head -n 5 file.txt (查看文件开头几行), tail -n 5 file.txt (查看文件末尾几行)。
    • 理解 > (重定向输出), >> (追加输出), < (重定向输入) 的概念和用法。
    • 理解管道 | 的概念,尝试 ls -l | less
  • 第 5 天:用户、组与权限基础
    • 理解用户和组的概念,root 用户(管理员),普通用户。
    • 查看当前用户:whoami, id
    • 切换用户:su - username (完全切换), su username (部分切换)。
    • 重要: sudo 命令:以管理员权限执行命令(sudo command)。
    • 理解 Linux 文件权限 (rwx),使用 ls -l 查看权限。
    • 修改文件权限:chmod 755 file.sh (数字表示法), chmod u+x file.sh (符号表示法)。
    • 修改文件所有者/所属组:chown user:group file.txt, chgrp group file.txt
  • 第 6-7 天:复习与实践项目
    • 复习本周所有命令,确保能熟练操作。
    • 项目: 在你的主目录下,创建一个名为 my_project 的目录,并在其中创建子目录 data, scripts, logs。在 data 目录下创建几个文本文件并写入内容。在 scripts 目录下创建一个空脚本文件并赋予执行权限。尝试移动、复制、删除这些文件和目录。使用 ls -lchmod 练习权限管理。

第二周:用户、权限、高级文本处理与软件包管理(精细化控制)

目标: 深入理解权限,掌握用户和组的管理,提升文本处理能力,学会软件的安装与卸载(尤其是 dnfrpm)。

  • 第 1 天:深入文件权限与特殊权限(初步了解)
    • chmod 命令的更多高级用法。
    • 初步了解 SUID, SGID, Sticky Bit 的概念(知道有这些东西,其作用和潜在安全风险)。
  • 第 2 天:用户与组管理进阶
    • 创建用户:useradd username (常用参数 -m 创建家目录, -g 指定主组, -G 指定附加组, -s 指定 Shell)。
    • 修改用户:usermod -aG groupname username (添加用户到附加组)。
    • 删除用户:userdel -r username (删除用户及家目录)。
    • 修改用户密码:passwd username
    • 创建组:groupadd groupname
    • 删除组:groupdel groupname
    • 查看用户和组信息文件:/etc/passwd, /etc/shadow, /etc/group
  • 第 3 天:强大的文本搜索工具
    • grep:按模式搜索文件内容。学习常用参数:-i (忽略大小写), -n (显示行号), -v (反向匹配), -r (递归搜索), --color
    • find:在文件系统中搜索文件。学习按名称 (-name), 类型 (-type), 大小 (-size), 时间 (-mtime) 等搜索。
  • 第 4 天:正则表达式与高级文本处理
    • 了解正则表达式的基础知识(^, $, ., *, +, ?, [], | 等)。
    • sed:流编辑器,用于对文本进行替换、删除、插入等操作。学习基本的替换命令 s/old/new/g
    • awk:文本报告生成器,用于按列处理文本。学习简单的 print $1 (打印第一列) 等命令。
  • 第 5 天:软件包管理 (DNF & RPM)
    • 了解 RHEL 系包管理器: dnf (下一代包管理器,推荐使用), yum (传统包管理器,逐渐被 dnf 取代,但仍兼容)。
    • dnf 常用命令:
      • sudo dnf update (更新所有软件包,重要且常用)。
      • sudo dnf install package_name (安装软件)。
      • sudo dnf remove package_name (卸载软件)。
      • sudo dnf search keyword (搜索软件)。
      • sudo dnf info package_name (查看软件包信息)。
      • sudo dnf provides /path/to/command (查找提供某个文件的软件包)。
    • rpm 常用命令 (低级别包管理):
      • rpm -ivh package.rpm (安装本地 rpm 包)。
      • rpm -Uvh package.rpm (升级本地 rpm 包)。
      • rpm -e package_name (卸载已安装的 rpm 包)。
      • rpm -qa (查询所有已安装的 rpm 包)。
      • rpm -ql package_name (查询 rpm 包安装的文件列表)。
      • rpm -qi package_name (查询 rpm 包的详细信息)。
  • 第 6-7 天:复习与实践项目
    • 复习本周知识点。
    • 项目:
      1. 创建一个新用户 devops_user,设置密码,并将其添加到 wheel 组(以便使用 sudo)。
      2. 使用 dnf search httpd 搜索 Apache Web 服务器软件包,然后使用 sudo dnf install httpd 安装它。安装完成后,尝试使用 rpm -ql httpd 查看其安装了哪些文件,并使用 rpm -qi httpd 查看其信息。然后使用 sudo dnf remove httpd 卸载它。
      3. 在一个包含大量日志文件的目录下,使用 grepfind 查找包含特定错误信息的文件。
      4. 使用 sed 批量修改某个配置文件中的特定行(例如,尝试修改 /etc/selinux/config 中的 SELINUX= 行,但不要立即生效,只做文本修改练习)。

第三周:网络、进程管理与系统服务(运维核心)

目标: 理解网络基础,掌握进程和服务管理,为远程运维打下基础。

  • 第 1 天:网络配置与诊断
    • 查看网络接口信息:ip addr (推荐,比 ifconfig 更新更强大), ip link, ip route
    • 测试网络连通性:ping host_name_or_ip
    • 查看网络连接:ss -tulnp (推荐,比 netstat 更快更高效), netstat -tulnp (传统)。
    • 了解 /etc/hosts 文件(本地 DNS 解析)。
    • 初步了解 NetworkManager 服务(RHEL 系默认网络管理工具)和 /etc/sysconfig/network-scripts/ 目录。
  • 第 2 天:SSH 远程连接与文件传输
    • 理解 SSH (Secure Shell) 的概念和作用,它是远程管理 Linux 服务器的基石。
    • 使用 ssh user@ip_address 命令远程连接服务器(确保虚拟机已安装并启动 SSH 服务:sudo dnf install openssh-serversudo systemctl start sshd)。
    • 使用 scp source_file user@ip:destination_path 命令进行文件传输。
    • 了解 SSH 密钥对登录(更安全更便捷的登录方式)。
  • 第 3 天:进程管理
    • 查看进程:ps aux (显示所有用户的进程), ps -ef (显示详细信息), top (实时监控进程和系统资源), htop (更友好的 top 替代,需要安装 sudo dnf install htop)。
    • 杀死进程:kill PID (发送信号), killall process_name (按名称杀死所有进程)。
    • 理解进程信号(SIGTERM, SIGKILL)。
    • 理解前台进程与后台进程:& (后台运行), jobs (查看后台任务), fg (将后台任务调到前台), bg (将前台停止的任务调到后台)。
    • nohup command & (即使退出终端也能继续运行)。
  • 第 4 天:服务管理 (Systemd)
    • 理解系统服务与 systemd (RHEL 系的标准初始化系统)。
    • 常用 systemctl 命令:
      • systemctl start service_name (启动服务)。
      • systemctl stop service_name (停止服务)。
      • systemctl restart service_name (重启服务)。
      • systemctl status service_name (查看服务状态,最常用)。
      • systemctl enable service_name (设置服务开机自启)。
      • systemctl disable service_name (禁用服务开机自启)。
      • systemctl is-enabled service_name (检查服务是否开机自启)。
      • systemctl list-units --type=service (列出所有服务)。
    • 查看系统日志:journalctl -u service_name (查看特定服务日志), journalctl -f (实时查看最新日志)。
  • 第 5 天:磁盘管理与文件系统
    • 查看磁盘空间:df -h (human-readable)。
    • 查看目录大小:du -sh dir_name (human-readable)。
    • 了解 mount (挂载) 和 umount (卸载) 的概念。
    • 了解 /etc/fstab 文件(系统启动时自动挂载的文件系统配置)。
    • 了解分区工具:lsblk (列出块设备), fdisk (分区工具,谨慎使用! 了解即可,实际操作在虚拟机中)。
  • 第 6-7 天:复习与实践项目
    • 复习本周知识点。
    • 项目:
      1. 在虚拟机中配置一个静态 IP 地址(如果使用 NetworkManager,尝试 nmcli 命令)。
      2. 尝试使用 ssh 从本机连接到虚拟机,并使用 scp 传输文件。
      3. 启动一个需要长时间运行的命令(例如 while true; do echo "running..."; sleep 1; done),将其放入后台运行,然后尝试用 kill 命令杀死它。
      4. 安装 nginxhttpd (Apache) 服务,使用 systemctl 启动、停止、重启它,并设置开机自启。查看其状态和日志。尝试通过浏览器访问虚拟机 IP 地址(如果虚拟机有桌面环境且防火墙允许)。

第四周:自动化、定时任务与故障排查(走向运维)

目标: 掌握 Shell 脚本基础,学会定时任务,了解基本的故障排查思路,为初级运维工作做好准备。

  • 第 1 天:Shell 脚本入门
    • 了解 Shell 脚本的作用和执行方式 (#!/bin/bash 作为 Shebang)。
    • 编写你的第一个脚本:打印 "Hello, Shell Script!"。
    • 变量定义和使用 (name="Linux"), 变量引用 ($name, ${name})。
    • 输入输出:read -p "Enter your name: " name, echo "Hello, $name"
    • 脚本执行权限:chmod +x script.sh
  • 第 2 天:Shell 脚本:条件判断与循环
    • if-else 条件判断 ([ ][[ ]],常用 -f 文件存在, -d 目录存在, -z 字符串为空, -n 字符串非空, -eq 等于)。
    • for 循环 (for i in {1..5}; do echo $i; done, for file in *; do echo $file; done)。
    • while 循环。
    • 尝试编写一个简单的脚本,根据用户输入判断文件是否存在,或者批量重命名文件。
  • 第 3 天:定时任务 Cron
    • 理解 cron 服务和 crontab 命令的作用,用于定期执行任务。
    • 学习 crontab -e (编辑当前用户定时任务) 和 crontab -l (列出定时任务)。
    • 掌握 crontab 的时间格式(分 时 日 月 周)。
    • 尝试创建一个每天定时备份日志文件的脚本,并用 crontab 执行(将输出重定向到文件以检查执行结果)。
  • 第 4 天:日志管理与系统监控初步
    • 了解 /var/log 目录下的各种日志文件(如 messages, secure, maillog 等)。
    • 使用 tail -f /var/log/messages 实时查看日志。
    • 了解 logrotate (日志轮转) 的作用和配置 (/etc/logrotate.conf, /etc/logrotate.d/)。
    • 简单了解常用系统监控命令:uptime (系统运行时间), free -h (内存使用), top / htop (CPU/内存/进程), df -h (磁盘空间)。
  • 第 5 天:基本故障排查思路与 firewalld
    • 排查思路:
      1. 看日志: 这是第一步!journalctl 或直接查看 /var/log
      2. 检查服务状态: systemctl status service_name
      3. 检查网络连通性: ping, ss -tulnp
      4. 检查磁盘空间: df -h
      5. 检查进程是否运行: ps aux | grep process_name
      6. 检查文件权限: ls -l
      7. 防火墙: RHEL 系默认使用 firewalld
        • sudo systemctl status firewalld
        • sudo firewall-cmd --list-all (查看防火墙规则)
        • sudo firewall-cmd --add-service=http --permanent (添加服务,谨慎操作!)
        • sudo firewall-cmd --reload (重新加载规则)
    • 模拟一些简单故障(如停止 SSH 服务,再尝试登录;防火墙阻止某个端口,再尝试访问)。
  • 第 6-7 天:综合实战与查漏补缺
    • 项目:
      1. 编写一个 Shell 脚本:
        • 接收一个参数,作为服务名称。
        • 检查该服务的运行状态(systemctl is-active service_name)。
        • 如果服务停止,则尝试启动它,并记录到日志文件。
        • 如果服务正在运行,则输出“服务正在运行”。
        • 将此脚本添加到 crontab,每隔 5 分钟检查一次(你可以故意停止某个服务来测试)。
      2. 模拟一个“磁盘空间不足”的场景(例如,使用 dd if=/dev/zero of=testfile bs=1M count=1024 创建大文件),然后尝试使用 df -h 找到它并清理。
      3. 回顾所有知识点,针对薄弱环节进行强化练习。
      4. 阅读一些初级 IT 运维岗位的招聘要求,对比自己掌握的技能,找出差距。

学习资源推荐:

  • 书籍:
    • 《鸟哥的 Linux 私房菜》(内容全面,但篇幅较长,侧重原理,可以作为参考书)
    • 《Linux 命令行与 Shell 脚本编程大全》(实战性强,对命令行和脚本有深入讲解)
  • 在线教程:
    • Red Hat 官方文档 (尤其是 RHEL 系统管理员指南)
    • FreeCodeCamp, Linux Journey 等网站的 Linux 教程
    • YouTube 上的 RHEL/CentOS 教学视频
  • 文档:
    • man 命令: 这是你最好的朋友!例如 man dnfman systemctl
    • Google/百度:遇到任何问题,直接搜索错误信息或命令用法。
  • 社区:
    • Red Hat/CentOS/Rocky Linux 官方论坛/邮件列表
    • Stack Overflow (搜索 Linux 相关问题)
    • 国内各大技术论坛和社区的 Linux 版块

给自学者的额外建议:

  • 保持好奇心: 对遇到的每一个命令、每一个现象都问“为什么”,并尝试深入理解。
  • 动手!动手!动手!: 理论知识必须通过大量实践来巩固。
  • 循序渐进: 不要贪多嚼不烂,扎实掌握每一步。
  • 学会提问: 当你实在无法解决问题时,学会清晰地描述问题、提供相关信息,以便他人帮助。
  • 加入社群: 参与 Linux 学习群或论坛,与他人交流,互相学习。
  • 持续学习: IT 技术日新月异,掌握基础后,要不断学习新的工具和技术,如 Docker, Ansible 等。

这个计划非常紧凑,需要你投入大量的业余时间(建议每天 2-3 小时,周末更多)。但只要你严格按照计划执行,并保持高度的实践热情,四周后你将对 RHEL 系 Linux 有一个扎实的基础,足以应对初级 IT 运维岗位的挑战!祝你学习顺利!