入门 Linux 的 30天自学计划



背景
有朋友碰到了 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
命令的学习。
核心学习理念:
- Red Hat 生态圈: 熟悉基于 RHEL 的系统特性、工具和最佳实践。
- 实践驱动: 理论结合大量实际操作,通过动手理解概念。
- 小步快跑: 每天投入固定时间,循序渐进,持之以恒。
- 详细笔记: 记录命令、配置、遇到的问题和解决方案,构建你的知识库。
- 善用文档:
man
命令是你的第一参考,Red Hat 官方文档和社区资源是宝藏。 - 大胆尝试: 在虚拟机中勇敢犯错,每次解决问题都是一次进步。
- 理解而非死记: 掌握命令背后的原理和逻辑,举一反三。
准备工作(第 0 周):
- 硬件要求: 一台电脑(Windows/macOS 均可)。
- 软件安装:
- 安装虚拟机软件:推荐 VirtualBox 或 VMware Workstation Player (免费版)。
- 下载一个主流的 RHEL 系 Linux 发行版 ISO 镜像:强烈推荐 Rocky Linux 或 AlmaLinux (它们是 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
。
- 理解 Linux 文件系统层次结构 (FHS),如
- 第 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
(显示过程)。 - 文本编辑器初步: 学习
vi
或vim
的基本操作(进入插入模式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 -l
和chmod
练习权限管理。
第二周:用户、权限、高级文本处理与软件包管理(精细化控制)
目标: 深入理解权限,掌握用户和组的管理,提升文本处理能力,学会软件的安装与卸载(尤其是 dnf
和 rpm
)。
- 第 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 包的详细信息)。
- 了解 RHEL 系包管理器:
- 第 6-7 天:复习与实践项目
- 复习本周知识点。
- 项目:
- 创建一个新用户
devops_user
,设置密码,并将其添加到wheel
组(以便使用sudo
)。 - 使用
dnf search httpd
搜索 Apache Web 服务器软件包,然后使用sudo dnf install httpd
安装它。安装完成后,尝试使用rpm -ql httpd
查看其安装了哪些文件,并使用rpm -qi httpd
查看其信息。然后使用sudo dnf remove httpd
卸载它。 - 在一个包含大量日志文件的目录下,使用
grep
和find
查找包含特定错误信息的文件。 - 使用
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-server
并sudo 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 天:复习与实践项目
- 复习本周知识点。
- 项目:
- 在虚拟机中配置一个静态 IP 地址(如果使用 NetworkManager,尝试
nmcli
命令)。 - 尝试使用
ssh
从本机连接到虚拟机,并使用scp
传输文件。 - 启动一个需要长时间运行的命令(例如
while true; do echo "running..."; sleep 1; done
),将其放入后台运行,然后尝试用kill
命令杀死它。 - 安装
nginx
或httpd
(Apache) 服务,使用systemctl
启动、停止、重启它,并设置开机自启。查看其状态和日志。尝试通过浏览器访问虚拟机 IP 地址(如果虚拟机有桌面环境且防火墙允许)。
- 在虚拟机中配置一个静态 IP 地址(如果使用 NetworkManager,尝试
第四周:自动化、定时任务与故障排查(走向运维)
目标: 掌握 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
。
- 了解 Shell 脚本的作用和执行方式 (
- 第 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
- 排查思路:
- 看日志: 这是第一步!
journalctl
或直接查看/var/log
。 - 检查服务状态:
systemctl status service_name
。 - 检查网络连通性:
ping
,ss -tulnp
。 - 检查磁盘空间:
df -h
。 - 检查进程是否运行:
ps aux | grep process_name
。 - 检查文件权限:
ls -l
。 - 防火墙: 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 天:综合实战与查漏补缺
- 项目:
- 编写一个 Shell 脚本:
- 接收一个参数,作为服务名称。
- 检查该服务的运行状态(
systemctl is-active service_name
)。 - 如果服务停止,则尝试启动它,并记录到日志文件。
- 如果服务正在运行,则输出“服务正在运行”。
- 将此脚本添加到
crontab
,每隔 5 分钟检查一次(你可以故意停止某个服务来测试)。
- 模拟一个“磁盘空间不足”的场景(例如,使用
dd if=/dev/zero of=testfile bs=1M count=1024
创建大文件),然后尝试使用df -h
找到它并清理。 - 回顾所有知识点,针对薄弱环节进行强化练习。
- 阅读一些初级 IT 运维岗位的招聘要求,对比自己掌握的技能,找出差距。
- 编写一个 Shell 脚本:
- 项目:
学习资源推荐:
- 书籍:
- 《鸟哥的 Linux 私房菜》(内容全面,但篇幅较长,侧重原理,可以作为参考书)
- 《Linux 命令行与 Shell 脚本编程大全》(实战性强,对命令行和脚本有深入讲解)
- 在线教程:
- Red Hat 官方文档 (尤其是 RHEL 系统管理员指南)
- FreeCodeCamp, Linux Journey 等网站的 Linux 教程
- YouTube 上的 RHEL/CentOS 教学视频
- 文档:
man
命令: 这是你最好的朋友!例如man dnf
、man systemctl
。- Google/百度:遇到任何问题,直接搜索错误信息或命令用法。
- 社区:
- Red Hat/CentOS/Rocky Linux 官方论坛/邮件列表
- Stack Overflow (搜索 Linux 相关问题)
- 国内各大技术论坛和社区的 Linux 版块
给自学者的额外建议:
- 保持好奇心: 对遇到的每一个命令、每一个现象都问“为什么”,并尝试深入理解。
- 动手!动手!动手!: 理论知识必须通过大量实践来巩固。
- 循序渐进: 不要贪多嚼不烂,扎实掌握每一步。
- 学会提问: 当你实在无法解决问题时,学会清晰地描述问题、提供相关信息,以便他人帮助。
- 加入社群: 参与 Linux 学习群或论坛,与他人交流,互相学习。
- 持续学习: IT 技术日新月异,掌握基础后,要不断学习新的工具和技术,如 Docker, Ansible 等。
这个计划非常紧凑,需要你投入大量的业余时间(建议每天 2-3 小时,周末更多)。但只要你严格按照计划执行,并保持高度的实践热情,四周后你将对 RHEL 系 Linux 有一个扎实的基础,足以应对初级 IT 运维岗位的挑战!祝你学习顺利!