Linux 学习教程
本教程分为五个部分,从最基础的入门到进阶的系统管理和脚本编程。

第一部分:Linux 基础入门
-
什么是 Linux?
- 核心概念:Linux 是一个开源的、免费的类 Unix 操作系统内核,我们通常所说的 "Linux" 指的是 "Linux 发行版",如 Ubuntu, CentOS, Debian 等,它们是在 Linux 内核基础上集成了各种 GNU 软件和工具形成的完整操作系统。
- 为什么学习 Linux:它是服务器、云计算、嵌入式设备、超级计算机等领域的主流操作系统,也是开发者的必备技能。
-
安装 Linux
- 推荐发行版:对于初学者,强烈推荐 Ubuntu Desktop,它拥有友好的图形界面和庞大的社区支持。
- 安装方式:
- 虚拟机:在 Windows 或 macOS 上使用 VMware 或 VirtualBox 安装,最安全、最无风险的方式,方便练习和实验。
- 双系统:与 Windows 并存安装,可以直接体验完整的 Linux 性能,但有一定风险。
- WSL (Windows Subsystem for Linux):在 Windows 10/11 上直接运行一个真实的 Linux 环境,非常适合开发。
-
Linux 文件系统结构
- 一切皆文件:Linux 中几乎所有的东西(硬件、目录、进程)都被表示为文件。
- 顶级目录(必须熟记):
- (根目录):所有文件的起点。
/bin:基本命令 (如ls,cp)。/sbin:系统管理命令 (如reboot,fdisk)。/etc:系统配置文件 (如passwd,network)。/home:普通用户的家目录。/usr:用户安装的软件和程序。/var:经常变化的文件,如日志 (/var/log)、邮件。/tmp:临时文件。/boot:启动文件。/dev:设备文件 (如硬盘、键盘)。/proc:内核与进程信息。
-
Shell 基础
(图片来源网络,侵删)- 什么是 Shell:是用户与 Linux 内核交互的命令行解释器,最常用的是 Bash (Bourne-Again Shell)。
- 打开终端:在 Ubuntu 中,可以使用
Ctrl + Alt + T快捷键打开终端。 - 基本命令格式:
命令 [选项] [参数]
第二部分:核心命令详解
-
文件和目录操作
ls:列出目录内容。ls -l:长格式显示(权限、所有者、大小、日期)。ls -a:显示所有文件,包括隐藏文件(以 开头)。ls -h:以人类可读的方式显示文件大小 (K, M, G)。
pwd:显示当前工作目录。cd:切换目录。cd /home:切换到/home目录。cd ..:切换到上一级目录。cd ~或cd:切换到当前用户的家目录。
mkdir:创建新目录。mkdir my_dir:创建一个目录。mkdir -p parent/child:递归创建多级目录。
touch:创建一个空文件或更新文件时间戳。cp:复制文件或目录。cp source.txt dest.txt:复制文件。cp -r source_dir/ dest_dir/:递归复制目录。
mv:移动/重命名文件或目录。mv old_name.txt new_name.txt:重命名。mv file.txt /home/user/:移动文件。
rm:删除文件或目录。rm file.txt:删除文件。rm -r dir/:递归删除目录。rm -f file.txt:强制删除,不提示。- 警告:
rm -rf /是一个极其危险的命令,会删除根目录下所有文件!
cat:查看文件内容(一次性全部显示)。less/more:分页查看文件内容(less更强大,支持上下翻页和搜索)。head/tail:查看文件的开头或结尾部分。head -n 10 file.txt:查看前 10 行。tail -n 10 file.txt:查看最后 10 行。tail -f file.log:实时追踪日志文件的更新。
-
文本处理
grep:在文本中搜索匹配的行。grep "error" /var/log/syslog:在系统日志中搜索包含 "error" 的行。grep -i "warning" log.txt:忽略大小写搜索。grep -v "info" log.txt:反向匹配,即不包含 "info" 的行。
find:在目录树中搜索文件。find /home -name "*.txt":在/home目录下查找所有.txt文件。find . -type f -size +10M:在当前目录下查找大于 10MB 的文件。
echo:输出文本或变量。echo "Hello, World!"。
>/>>:重定向。command > file.txt:将命令的输出覆盖写入file.txt。command >> file.txt:将命令的输出追加写入file.txt。
- (管道):将一个命令的输出作为另一个命令的输入。
cat /var/log/syslog | grep "error":先显示系统日志,然后通过管道过滤出 "error" 行。
第三部分:用户与权限管理
-
用户和用户组
whoami:显示当前用户。id:显示当前用户的 ID 和所属组。useradd/adduser:创建新用户。passwd:修改用户密码。userdel:删除用户。userdel -r username:删除用户及其家目录。
groupadd:创建新组。
-
文件权限
(图片来源网络,侵删)- 权限类型:
r(Read):读权限 (4)w(Write):写权限 (2)x(Execute):执行权限 (1)
- 权限对象:
u(User):文件所有者g(Group):文件所属组o(Others):其他用户a(All):所有用户
- 查看权限:
ls -l输出的第一列,如-rwxr-xr--。- 第1位:文件类型 ( 文件,
d目录,l链接)。 - 第2-4位:所有者权限。
- 第5-7位:组权限。
- 第8-10位:其他用户权限。
- 第1位:文件类型 ( 文件,
- 修改权限:
chmod:修改权限。- 数字法:
chmod 755 script.sh(所有者 rwx=7, 组 r-x=5, 其他 r-x=5)。 - 符号法:
chmod u+x script.sh(给所有者增加执行权限)。
- 数字法:
- 修改所有者和组:
chown:修改文件所有者。chown user:group file.txt。chgrp:修改文件所属组。chgrp group file.txt。
- 权限类型:
第四部分:软件包管理与进程
-
软件包管理
- 基于 Debian/Ubuntu (使用
apt):sudo apt update:更新软件包列表。sudo apt upgrade:升级所有已安装的软件包。sudo apt install package_name:安装软件包。sudo apt remove package_name:卸载软件包。
- 基于 CentOS/RHEL (使用
yum或dnf):sudo yum check-update:检查更新。sudo yum update:升级所有软件包。sudo yum install package_name:安装软件包。sudo yum remove package_name:卸载软件包。
- 基于 Debian/Ubuntu (使用
-
进程管理
ps:查看当前运行的进程。ps aux:显示所有进程的详细信息。
top/htop:动态显示正在运行的进程,并按 CPU/内存使用率排序 (htop更直观)。kill:终止进程。kill PID:正常终止进程。kill -9 PID:强制杀死进程(无法被忽略)。
jobs/fg/bg:管理后台任务。command &:让命令在后台运行。jobs:查看后台任务。fg %1:将任务 1 调到前台。bg %1:将任务 1 放到后台继续运行。
第五部分:进阶主题
-
Shell 脚本编程
- 创建一个
.sh文件,如myscript.sh。 - 第一行必须为
#!/bin/bash(Shebang)。 - 赋予执行权限:
chmod +x myscript.sh。 - 变量:
name="Alice",使用时$name。 - 条件判断:
if...fi。 - 循环:
for...done,while...done。 - 函数:
function_name() { ... }。
- 创建一个
-
网络配置
ip addr:查看 IP 地址。ping google.com:测试网络连通性。ss -tuln/netstat -tuln:查看监听的端口。
-
Vim/Neovim 编辑器
- 三种模式:
- 普通模式:默认模式,用于导航和命令。
- 插入模式:用于输入文本,按
i进入。 - 命令行模式:用于保存、退出等,按 进入。
- 常用命令:
i:进入插入模式。Esc:返回普通模式。w:保存。q:退出。wq:保存并退出。q!:不保存强制退出。dd:删除一行。yy:复制一行。p:粘贴。
- 三种模式:
Linux 习题库
以下习题按照教程的顺序编排,旨在巩固所学知识。
第一部分:基础入门
-
选择题
- Linux 系统的顶级根目录是?
a)
windowsb)homec) d)root - 在 Linux 中,哪个命令用于显示当前所在目录?
a)
dirb)lsc)pwdd)cd - 哪个目录通常用来存放用户安装的应用程序?
a)
/binb)/etcc)/usrd)/var
- Linux 系统的顶级根目录是?
a)
-
简答题
- 请解释 "Linux 内核" 和 "Linux 发行版" 的区别。
- 请列出至少 5 个 Linux 顶级目录,并简述其用途。
第二部分:核心命令
-
操作题
- 在你的家目录下创建一个名为
test_project的文件夹。 - 进入
test_project文件夹。 - 在该文件夹下创建两个文件:
file1.txt和file2.log。 - 将
file1.txt的内容复制一份,并命名为file1_backup.txt。 - 将
file2.log移动到你的桌面。 - 删除
file1_backup.txt文件。 - 使用
cat命令在file1.txt中写入一行文字 "Hello Linux World!"。 - 使用
echo命令在file1.txt末尾追加一行 "This is a test."。
- 在你的家目录下创建一个名为
-
命令组合题
- 使用一条命令,在当前目录下查找所有以
.log结尾的文件。 - 使用一条命令,查看
/var/log目录下所有以syslog开头的文件的前 5 行内容。 - 使用管道 ,列出
/home目录下所有文件夹(不包括文件)。
- 使用一条命令,在当前目录下查找所有以
第三部分:用户与权限
-
操作题
- 创建一个名为
testuser的新用户,并为其设置一个密码。 - 切换到
testuser用户身份(使用su - testuser)。 - 在
testuser的家目录下创建一个secret.txt文件,并写入一些内容。 - 切换回原来的管理员用户(使用
exit)。 - 尝试直接读取
testuser的secret.txt文件,你会遇到什么情况? - 使用
chown命令将secret.txt的所有者改为当前管理员用户。 - 尝试读取
secret.txt文件,是否成功?为什么? - 使用
chmod命令,将secret.txt的权限修改为:所有者可读写,其他用户没有任何权限。
- 创建一个名为
-
简答题
- 解释
-rwxr--r--这个权限字符串的含义。 - 为什么在执行
rm -rf /之前需要非常小心?
- 解释
第四部分:软件包与进程
-
操作题
- 更新你的系统软件包列表。
- 安装一个有趣的小工具,
neofetch(可以显示系统信息)。 - 运行
neofetch命令,看看效果。 - 使用
ps aux查找neofetch进程的 PID。 - 使用
kill命令优雅地终止neofetch进程。 - 卸载
neofetch。
-
分析题
- 运行
top命令,观察哪些进程占用了最多的 CPU 或内存资源?尝试解释它们可能是什么。 - 如果你有一个正在运行的脚本,你如何在不关闭终端的情况下让它暂停,并在稍后继续运行?
- 运行
第五部分:进阶主题
-
Shell 脚本题
- 编写一个名为
check_disk.sh的脚本,它可以:- 接收一个目录路径作为参数(
./check_disk.sh /home)。 - 使用
du命令计算该目录的总大小。 - 如果大小超过 1GB,则输出 "Warning: Disk usage is high!",否则输出 "Disk usage is normal."。
- 接收一个目录路径作为参数(
- 编写一个名为
backup_logs.sh的脚本,它可以:- 在
/tmp目录下创建一个以当前日期为名字的文件夹(/tmp/2025-10-27)。 - 将
/var/log/syslog文件复制到这个新创建的文件夹中。 - 输出一条消息 "Backup completed!"。
- 在
- 编写一个名为
-
Vim 编辑器题
- 打开一个名为
notes.txt的空文件。 - 进入 Vim 编辑器。
- 使用命令行模式,设置行号(
set number)。 - 进入插入模式,输入三行笔记。
- 退出插入模式,使用
dd命令删除第二行。 - 保存文件并退出 Vim。
- 打开一个名为
学习建议
- 动手实践:Linux 是一门实践性极强的技术,不要只看不练,把每一个命令都亲自在终端里敲一遍。
- 多查资料:遇到问题,善用
man命令(man ls)查看命令手册,以及利用搜索引擎(Google, Bing)和官方文档。 - 不怕犯错:在虚拟机里练习,即使搞坏了系统也可以随时恢复,错误是最好的老师。
- 从命令行开始:虽然图形界面很友好,但真正掌握 Linux 的捷径是熟练使用命令行。
- 坚持学习:循序渐进,不要期望一天之内掌握所有内容,每天坚持学习一点,积少成多。
祝您学习愉快,早日成为 Linux 高手!
