Unix/Linux大学教程:从入门到精通
前言:为什么学习Unix/Linux?
Unix/Linux是现代计算机科学的基石,无论是服务器、云计算、嵌入式系统、移动设备(Android内核基于Linux),还是数据科学、人工智能领域,Linux都扮演着不可或缺的角色,掌握它,意味着你拥有了与计算机底层交互的强大能力,是通往高级编程、系统管理、网络安全等领域的“敲门砖”。

第一部分:基础入门 - 熟悉环境与核心概念
目标: 理解Unix/Linux哲学,熟练使用命令行,掌握文件系统和基本操作。
第1章:Unix/Linux简介与历史
- Unix的诞生: 1969年,AT&T贝尔实验室,Ken Thompson和Dennis Ritchie,它简洁、模块化、多用户、多任务的设计哲学影响深远。
- Linux的诞生: 1991年,芬兰学生Linus Torvalds基于Minix(一个教学用的类Unix系统)编写了Linux内核,并遵循GNU General Public License(GPL)开源。
- 发行版: 内核 + GNU工具集 + 图形界面 + 应用软件 = 发行版。
- 推荐入门发行版: Ubuntu (用户友好,社区庞大), Mint。
- 推荐专业/服务器发行版: CentOS Stream (RHEL社区版), Debian, Fedora (Red Hat上游)。
- 核心哲学:
- 一切皆文件: 硬件设备、进程、配置信息都以文件形式存在于文件系统中。
- 小而美的工具: 每个程序只做好一件事,并通过标准输入/输出/错误流组合使用,完成复杂任务。
- 组合大于复杂: 管道是这一哲学的体现,将一个程序的输出作为另一个程序的输入。
- 配置文本化: 系统配置通常存储在人类可读的文本文件中。
实践: 安装一个Linux虚拟机(推荐使用VirtualBox或VMware),并选择一个发行版进行安装。
第2章:Shell与基本命令
目标: 掌握Bash Shell的使用,熟练进行文件和目录操作。
- 什么是Shell? Shell是用户与Linux内核交互的桥梁,它是一个命令解释器,Bash (Bourne-Again Shell) 是目前最流行的Shell。
- 基本命令结构:
命令 [选项] [参数] - 核心文件和目录操作命令:
ls(list): 列出文件和目录。ls -l: 长格式显示(权限、所有者、大小、日期)。ls -a: 显示所有文件,包括隐藏文件(以开头)。ls -h: 以人类可读的方式显示文件大小(K, M, G)。
cd(change directory): 切换目录。cd /: 切换到根目录。cd ~: 或cd: 切换到当前用户的家目录。cd ..: 切换到上级目录。
pwd(print working directory): 显示当前工作目录。mkdir(make directory): 创建新目录。mkdir -p dir1/dir2: 递归创建多级目录。
rmdir(remove directory): 删除空目录。rm(remove): 删除文件或目录。rm file.txt: 删除文件。rm -r dir/: 递归删除目录及其内容。rm -f file.txt: 强制删除,不提示。- 警告:
rm -rf是一个极其危险的命令,使用前请三思!
cp(copy): 复制文件或目录。cp file1.txt dir/: 将文件复制到目录。cp -r dir1/ dir2/: 复制整个目录。
mv(move/rename): 移动文件或目录,或重命名。mv old_name.txt new_name.txt: 重命名。mv file.txt dir/: 移动文件到目录。
touch: 创建一个空文件或更新文件时间戳。
实践: 在你的Linux系统中,创建一个名为my_project的目录,在其中创建几个文件和子目录,并用ls, cd, cp, mv, rm等命令进行操作。

第3章:文件系统结构与权限
目标: 理解Linux文件系统树状结构,掌握用户、组与权限管理。
- 文件系统树状结构:
- 根目录,所有文件的起点。
/home: 用户家目录。/etc: 系统配置文件。/bin,/usr/bin: 存放用户可执行的二进制文件(命令)。/sbin,/usr/sbin: 存放系统管理员使用的系统管理命令。/var: 存放经常变化的文件,如日志 (/var/log)。/tmp: 临时文件目录。/dev: 设备文件。/proc: 虚拟文件系统,内核与进程信息。
- 用户与组:
root(超级用户):拥有对系统的最高权限,慎用!- 普通用户:权限受限。
- 组:将用户归类,便于统一管理权限。
- 文件权限:
ls -l输出示例:-rwxr-xr-- 1 user group 1234 Jan 1 12:34 file.txt- 第一列(10个字符):
- 第1位:文件类型 (普通文件,
d目录,l链接)。 - 第2-4位:所有者 的权限 (
r读,w写,x执行)。 - 第5-7位:所属组 的权限。
- 第8-10位:其他用户 的权限。
- 第1位:文件类型 (普通文件,
- 修改权限:
chmod- 符号法:
chmod u+x file.txt: 给所有者添加执行权限。chmod g-w file.txt: 移除所属组的写权限。chmod o+r file.txt: 给其他用户添加读权限。
- 数字法(常用):
r=4,w=2,x=1。chmod 755 file.txt: 所有者rwx(7), 组r-x(5), 其他r-x(5)。
- 符号法:
- 修改所有者和组:
chown,chgrpsudo chown new_user file.txt: 将文件所有者改为new_user。sudo chgrp new_group file.txt: 将文件所属组改为new_group。
实践: 创建一个文件,查看其默认权限,然后修改权限,使其只有你可以读写执行,而组和其他用户只能读,尝试用普通用户身份去修改一个系统文件(如/etc/hosts),体会权限的重要性。
第二部分:进阶技能 - 管理与自动化
目标: 掌握文本处理、软件安装、进程管理和Shell脚本编程。
第4章:文本处理三剑客
目标: 熟练使用grep, sed, awk进行强大的文本搜索和编辑。

grep(Global Regular Expression Print): 文本搜索。grep "error" log.txt: 在log.txt中搜索包含"error"的行。grep -i "error" log.txt: 忽略大小写。grep -v "error" log.txt: 输出不包含"error"的行。grep -n "error" log.txt: 显示匹配行的行号。
sed(Stream Editor): 流编辑器,用于对文本进行编辑(替换、删除、插入)。sed 's/old/new/g' file.txt: 将文件中所有的"old"替换为"new"(s是 substitute 命令)。sed -i 's/old/new/g' file.txt: 直接在原文件上修改(-i表示 in-place)。sed '1d' file.txt: 删除文件的第一行。
awk: 强大的文本分析工具,按列处理。awk '{print $1, $3}' file.txt: 打印每行的第1列和第3列。awk -F: '{print $1}' /etc/passwd: 以冒号为分隔符,打印/etc/passwd文件的第一列(用户名)。
实践: 找一个系统日志文件(如/var/log/syslog),使用grep找出包含"kernel"的行,然后用awk提取出时间和事件信息。
第5章:软件包管理与进程
目标: 学会安装和管理软件,并理解系统进程。
- 软件包管理器:
- 基于Debian/Ubuntu的系统:
apt(Advanced Packaging Tool):sudo apt update,sudo apt install package_name,sudo apt remove package_name。
- 基于RHEL/CentOS/Fedora的系统:
yum(Yellowdog Updater, Modified):sudo yum install package_name。dnf(Dandified Yum):sudo dnf install package_name(Fedora/CentOS 7+ 推荐)。
- 基于Debian/Ubuntu的系统:
- 进程管理:
ps(process status): 查看当前运行的进程。ps aux: 显示所有进程的详细信息。
top/htop: 实时动态地查看进程和系统资源使用情况。htop是top的增强版,更直观。kill: 终止进程。kill PID: 发送正常终止信号。kill -9 PID: 强制杀死进程(不推荐使用,除非必要)。
jobs: 查看当前终端后台的任务。bg,fg: 将任务放到后台/前台运行。
实践: 使用top观察系统负载,然后打开一个文本编辑器(如nano),找到它的进程ID(PID),然后用kill命令终止它。
第6章:Shell脚本编程
目标: 编写简单的自动化脚本,提高工作效率。
- 第一个脚本:
- 创建一个文件
hello.sh。 #!/bin/bash(Shebang,指定解释器) 和echo "Hello, World!"。- 赋予执行权限:
chmod +x hello.sh。 - 执行:
./hello.sh。
- 创建一个文件
- 变量:
name="Alice"(定义变量,等号两边不能有空格)。echo "Hello, $name"(使用变量,推荐用${name})。- 只读变量:
readonly name。 - 特殊变量:
$0(脚本名),$1,$2(参数), (参数个数), (上一个命令的退出状态), (进程ID)。
- 条件判断:
if-then-elseif [ $1 -gt 100 ] then echo "Number is greater than 100." else echo "Number is not greater than 100." fi- 常用测试:
-eq(等于),-ne(不等于),-gt(大于),-lt(小于),-d(是目录),-f(是文件)。
- 常用测试:
- 循环:
for和whilefor循环:for file in *.txt do echo "Processing $file..." donewhile循环:count=1 while [ $count -le 5 ] do echo "Count: $count" ((count++)) done
- 函数:
my_function() { echo "This is a function." echo "Argument 1: $1" } my_function "Hello"
实践: 编写一个脚本,它可以接受一个目录名作为参数,然后列出该目录下所有.log文件,并计算它们的总大小。
第三部分:系统管理与网络
目标: 了解系统核心配置,掌握基本网络命令。
第7章:用户管理与系统信息
- 用户管理:
useradd username: 创建新用户。passwd username: 为用户设置密码。userdel username: 删除用户。usermod: 修改用户属性。
- 系统信息:
uname -a: 显示所有系统信息。df -h: 显示磁盘空间使用情况。free -h: 显示内存使用情况。uptime: 显示系统运行时间和负载。
第8章:网络配置与命令
- 基本网络命令:
ifconfig/ip addr: 查看和配置网络接口。ip addr是现代Linux推荐使用的命令。ping: 测试网络连通性。netstat -tuln: 查看监听的TCP/UDP端口。ss -tuln:netstat的替代品,更快更强大。ssh: 安全远程登录。wget/curl: 从网络下载文件。
实践: 在两台Linux机器之间(或一台机器和虚拟机之间),配置静态IP,然后用ping和ssh互相连接。
第四部分:进阶方向与学习资源
完成以上基础后,你可以根据兴趣选择深入的方向。
系统管理与运维
- 深入学习系统服务管理 (
systemd)、日志管理 (journalctl)、性能监控与调优、安全加固、容器技术。 - 推荐工具/技术: Docker, Kubernetes (K8s), Ansible (自动化配置管理), Prometheus (监控)。
C/C++与系统编程
- 学习使用
gcc/g++编译器,理解进程、线程、内存管理、文件I/O、信号、网络编程(Socket API)。 - 经典书籍: 《Unix环境高级编程》(APUE), 《C++ Primer》。
网络安全
- Linux安全模型、防火墙配置 (
iptables,firewalld)、入侵检测、漏洞分析、渗透测试。 - 推荐工具/技术: Nmap, Wireshark, Metasploit。
推荐书籍与在线资源
- 经典书籍:
- 《鸟哥的Linux私房菜》: 非常适合初学者的中文入门宝典。
- 《Unix/Linux大学教程》 (A Practical Guide to Linux Commands, Editors, and Shell Programming): 非常经典的大学教材,理论与实践结合得很好。
- 《鸟哥的Linux私房菜-服务器架设篇》: 深入学习服务器配置。
- 《The Linux Command Line》 (TLCL): 免费的在线书籍,被誉为“Linux命令行圣经”。
- 在线资源:
- The Linux Documentation Project (TLDP): 最权威的Linux文档集合。
- 菜鸟教程: 提供快速查询的命令手册。
- Stack Overflow: 解决编程和系统问题的最佳社区。
- GitHub: 大量开源的Shell脚本和工具,是学习的绝佳范例。
学习建议:
- 动手!动手!再动手! 理论知识必须通过实践来巩固,不要害怕搞坏系统,虚拟机是你的“试验田”。
- 善用
man手册:man command是学习任何命令最权威的方式,养成习惯,遇到新命令先看man。 - 多思考“为什么”: 为什么权限是这样设计的?为什么Shell的哲学是组合而不是复杂?理解其背后的设计思想,能让你学得更深。
- 建立自己的知识库: 记录常用的命令、脚本和遇到的问题,这会成为你宝贵的财富。
祝你学习顺利,在Unix/Linux的世界里探索愉快!
