Linux操作系统介绍
什么是 Linux?
Linux 是一种开源的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年首次发布。 广义上的 Linux 通常指基于该内核的完整操作系统(如 Ubuntu、Fedora 等), 结合了 GNU 项目 的软件工具,因此严格称为 GNU/Linux。
Linux 的核心特性
- 开源免费
- 源码公开可修改,社区协作开发,遵循 GPL 协议。
- 用户可自由分发、定制系统(无需支付版权费用)。
- 多用户与多任务
- 高稳定性与安全性
- 服务器可连续运行数年无需重启,漏洞修复快,权限管理严格。
- 硬件兼容性广泛
- 强大的命令行工具
- 通过终端(Terminal)可深度控制系统,支持脚本自动化。
Linux 发行版(Distros)
Linux 的架构与核心组件
内核(Kernel)
- 管理硬件资源(CPU、内存、磁盘等),提供核心接口。
- 支持模块化驱动,可动态加载或卸载。
Shell
- 用户与内核交互的接口(如 Bash、Zsh),支持脚本编程。
文件系统
- 采用层级目录结构(/ 为根目录),如 ext4、XFS、Btrfs。
- 常见目录:
/bin(基础命令)
/etc(配置文件)
/home(用户目录)
包管理系统
- Debian 系(如 Ubuntu):apt(apt install / apt update)
- Red Hat 系(如 CentOS):yum 或 dnf(yum install)
- Arch 系:pacman(pacman -S)
基础命令速查
| 类别 |
命令 |
说明 |
| 文件管理 |
ls、cp、mv、rm |
列出文件、复制、移动、删除 |
| 目录操作 |
cd、mkdir、pwd |
切换目录、创建目录、显示当前路径 |
| 权限管理 |
chmod、chown |
修改文件权限与所有者 |
| 文本处理 |
cat、grep、vim |
查看内容、文本搜索、编辑文件 |
| 网络工具 |
ping、curl、ssh |
测试连接、数据传输、远程登录 |
| 进程管理 |
ps、top、kill |
查看进程状态、结束进程 |
应用场景
- 服务器与云计算
- Web 服务(如 Nginx/Apache)、数据库(MySQL)、容器化(Docker/K8s)。
- 开发与运维
- 支持 Python、Java、C/C++ 等语言,提供丰富的开发工具链(Git、CI/CD)。
- 嵌入式与物联网
- 智能家电、路由器、工控设备(如 OpenWrt)。
- 学术与科研
- 科学计算(如 MATLAB 替代品 Octave)、大数据处理(Hadoop/Spark)。
Linux 目录结构详解
graph LR
/[//:根目录/] --> /bin["/bin:基础命令"]
/ --> /etc["/etc:配置文件"]
/ --> /home["/home:用户目录"]
/ --> /root["/root:管理员家目录"]
/ --> /usr["/usr:用户程序"]
/ --> /var["/var:动态数据"]
/ --> /tmp["/tmp:临时文件"]
/ --> /dev["/dev:设备文件"]
/ --> /proc["/proc:内核与进程"]
/ --> /boot["/boot:启动文件"]
/usr --> /usr/bin["bin:用户程序"]
/usr --> /usr/lib["lib:库文件"]
/usr --> /usr/local["local:本地安装软件"]
/var --> /var/log["log:系统日志"]
/var --> /var/cache["cache:缓存"]
/var --> /var/www["www:网站数据"]
/home --> user1["user1:用户1目录"]
/home --> user2["user2:用户2目录"]
/proc --> proc1["cpuinfoCPU:信息"]
/proc --> proc2["meminfo:内存信息"]
/proc --> proc3["pid:进程目录"]
- 常见问题与操作示例
- 如何查看磁盘空间?
- 查找特定文件或配置文件
1 2
| find /etc -name "*.conf" locate nginx.conf
|
- 挂载外部设备到 /mnt
1 2
| sudo mount /dev/sdb1 /mnt sudo umount /mnt
|
Linux用户与组管理
一、基础命令
| 操作 |
命令示例 |
作用 |
| 创建用户 |
sudo useradd -m alice |
创建用户alice并生成家目录 |
| 设置密码 |
sudo passwd alice |
为alice设置登录密码 |
| 创建组 |
sudo groupadd developers |
新建组developers |
| 将用户加入组 |
sudo usermod -aG developers alice |
将alice添加到developers组(附加组) |
| 修改用户主组 |
sudo usermod -g developers bob |
将bob的主组改为developers |
| 删除用户 |
sudo userdel -r alice |
删除alice及其家目录 |
| 查看用户信息 |
id alice |
显示用户UID、GID及所属组 |
| 查看当前用户 |
whoami |
- |
| 查看当前用户组 |
groups |
- |
| 查看当前用户组 |
groups |
- |
| 查看所有用户 |
cat /etc/passwd |
- |
| 查看所有组 |
cat /etc/group |
- |
| 添加用户 |
useradd 用户名 |
- |
| 修改用户信息 |
usermod |
- |
| 切换用户 |
su - 用户名 |
不加用户名表示切换root |
| 创建新用户组 |
groupadd |
- |
| 删除新用户组 |
groupdel |
- |
| 查看所有组 |
cat /etc/group |
- |
| 修改用户组信息 |
groupmod |
- |
二、配置文件解析
| 文件路径 |
关键字段说明 |
| /etc/passwd |
用户名:密码占位符(x):UID:GID:描述:家目录:默认Shell |
| /etc/shadow |
用户名:加密密码:最近修改日:最小天数:最大天数:警告期:失效日:保留字段 |
| /etc/group |
组名:组密码占位符(x):GID:组成员列表 |
三、Mermaid关系图
graph TD
%% 定义用户和组节点(用双引号包裹避免解析问题)
root[("root用户 (UID 0)")] --> |"拥有sudo权限"| admin_group["admin组GID 1001"]
admin_group --> user1["用户1(alice)"]
admin_group --> user2["用户2(bob)"]
%% 普通用户与附加组关系
dev_group["dev组GID 1002"] --> user3["用户3(charlie)"]
user1 --> |"附加组"| dev_group
%% 主组连接样式
style user1 fill:#f9f,stroke:#333
linkStyle 2 stroke:#0f0,stroke-width:2px;
Linux文件与目录管理
一、核心操作命令
| 操作 |
命令示例 |
作用 |
| 查看目录内容 |
ls -l /home |
显示详细文件列表 |
| 切换目录 |
cd /var/log |
进入指定目录 |
| 创建目录 |
mkdir -p /data/project/src |
递归创建多层目录 |
| 删除目录/文件 |
rm -rf tmp/ |
强制递归删除 |
| 复制文件/目录 |
cp -a /backup/config /etc |
保留属性复制(包含隐藏文件) |
| 移动/重命名 |
mv old_name.txt new_name.txt |
文件/目录重命名或移动 |
| 查看文件内容 |
cat -n server.conf |
显示文件内容并显示行号 |
| 实时跟踪日志 |
tail -f /var/log/nginx/access.log |
监控实时更新的日志文件 |
二、权限与所有权管理
1. 权限符号解释
1 2 3 4 5 6
| -rwxr-xr-- → 用户(u)、组(g)、其他人(o) \_/\_/\_/\ 类型| | | 用户权限[rwx] 组权限[r-x] 其他权限[r--]
|
2. 关键操作命令
1 2 3 4 5 6 7 8
| chmod 764 script.sh
chmod u+x,g-w,o=r file.txt
sudo chown alice:developers /project/src
|
三、目录结构可视化
graph LR
root["/ (根目录)"] --> bin["/bin核心命令"] & etc["/etc配置文件"]
root --> home["/home"] --> user1["alice"] & user2["bob"]
root --> var["/var"] --> log["/var/log系统日志"] & www["/var/www网站目录"]
etc --> network[/"network/网络配置"\]
style user1 fill:#9f9,stroke-width:2px
四、高级文件操作
| 场景 |
组合命令示例 |
说明 |
| 批量重命名 |
rename 's/.jpg/.png/' *.jpg |
所有jpg文件改为png格式 |
| 查找并删除旧文件 |
find /tmp -name "*.log" -mtime +30 -delete |
删除30天前的临时日志 |
| 目录同步 |
rsync -avz ~/docs/ backup@server:/backup/ |
增量同步到远程服务器 |
| 文件差异比对 |
diff -u file_v1.c file_v2.c |
生成可读的差异补丁 |
五、软链接和硬链接
| 类型 |
创建命令 |
关键特性 |
| 软链接 |
ln -s source link |
✔️ 跨文件系统 ✔️ 链接目录 ❌ 源文件删除后失效 |
| 硬链接 |
ln source link |
✔️ 同分区 ✔️ 同步更新 ❌ 不能链接目录 |
六、压缩与解压
| 格式 |
压缩命令 |
解压命令 |
| .tar.gz |
tar -czvf archive.tar.gz dir |
tar -xzvf archive.tar.gz |
| .zip |
zip -r data.zip dir |
unzip data.zip |
| .tar.xz |
tar -cJvf file.tar.xz dir |
tar -xJvf file.tar.xz |
七、常见问题排查
- 权限被拒绝(Permission Denied)
1 2 3 4
| ls -l /path/to/file sudo chmod +x script.sh sudo chown user:group file
|
Linux文件权限
一、权限基础
1. 权限表示方式
- 通过ls -l查看的文件权限格式:
1 2 3 4 5
| -rwxr-xr-- 1 user group 4096 Jan 1 12:34 file.txt ↑_________ │ | └──── 其他用户权限(o) │ └──────── 组权限(g) └─────────── 用户权限(u)
|
- 类型标识:
-:普通文件
d:目录
l:软链接
2. 权限符号与数值对应关系
| 权限 |
符号 |
数值 |
| 读 |
r |
4 |
| 写 |
w |
2 |
| 执行 |
x |
1 |
- 示例:
1
| rwxr-xr-- = 7 (4+2+1) | 5 (4+0+1) | 4 (4+0+0) → 权限 754
|
二、权限设置命令
| 命令 |
用法 |
说明 |
| chmod(数字法) |
chmod 755 file.txt |
修改权限为rwxr-xr-x |
| chmod(符号法) |
chmod u+x,g-w,o=r file.txt |
用户添加执行,组移除写,其他设为只读 |
| chown |
sudo chown alice:developers file.txt |
修改所有者和组 |
| chgrp |
sudo chgrp www-data /var/www |
修改所属组 |
| 递归设置 |
chmod -R 755 /path/to/dir |
递归修改目录及其内容 |
三、关键权限规则
1. 目录权限的特殊性
x(执行):允许进入目录或访问其内容(如cd或ls)。
r(读):仅允许列出目录内容(仍需x权限才能生效)。
w(写):允许在目录中创建/删除文件(仍需x权限)。
示例:
2. 特殊权限
| 权限 |
字符表示 |
数值表示 |
作用 |
| SUID |
s(用户位) |
4(如4755) |
用户执行文件时继承所有者权限(如/usr/bin/passwd)。 |
| SGID |
s(组位) |
2(如2770) |
文件继承组权限;目录中新文件自动继承组所有权。 |
| Sticky Bit |
t(其他位) |
1(如1777) |
目录下的文件仅所有者可删除(如/tmp)。 |
设置示例:
1 2 3 4 5 6 7 8 9 10 11
| chmod u+s /usr/bin/script.sh chmod 4755 /usr/bin/script.sh
chmod g+s /shared_dir chmod 2770 /shared_dir
chmod o+t /tmp/upload chmod 1777 /tmp/upload
|
四、默认权限与umask
默认权限规则:
- 文件:最大权限为 666(rw-rw-rw-)。
- 目录:最大权限为 777(rwxrwxrwx)。
umask值:
- 定义创建文件/目录时需“减去”的权限(如umask 022):
- 文件:666 - 022 = 644 → rw-r–r–
- 目录:777 - 022 = 755 → rwxr-xr-x
查看当前umask:
五、文件权限Mermaid展示
graph LR
%% 1. 权限整体结构
perms["权限分解: - rwx r-x r--"] --> type["类型位"]
perms --> user["用户权限(u)"]
perms --> group["组权限(g)"]
perms --> others["其他用户权限(o)"]
%% 2. 类型位详解
type --> f["\- → 普通文件"]
type --> d["d → 目录"]
type --> l["l → 软链接"]
%% 3. 用户权限
user --> ur["读(r)"]
user --> uw["写(w)"]
user --> ux["执行(x)"]
%% 4. 组权限
group --> gr["读"]
group --> gw["\- → 无写权限"]
group --> gx["执行"]
%% 5. 其他权限
others --> o_r["读"]
others --> o_w["\- → 无写"]
others --> o_x["\- → 无执行"]
%% 6. 权限数字化转换
style perms fill:#f9f,stroke:#333
perms --> numeric["数值表示: rwx=7, r-x=5, r--=4 → 754"]
numeric --> bits["计算逻辑"]
bits --> rbits["r=4(读)"]
bits --> wbits["w=2(写)"]
bits --> xbits["x=1(执行)"]
%% 7. 视觉修饰
classDef red fill:#fdd,stroke:#f00
classDef green fill:#cfc,stroke:#0f0
classDef purple fill:#f9f,stroke:#909
class urs,rbits green
class uw,gw,o_w,o_x red
class perms,purple purple
Linux进程与软件管理及Shell
Mermaid 可视化+结构化 的 Linux 进程管理、软件管理及 Shell 知识框架
graph LR
%% Linux 核心管理主题
Linux[Linux管理] --> Processes["进程管理"]
Linux --> Packages["软件管理"]
Linux --> Shell["Shell 基础"]
%% ========== 进程管理 ==========
Processes --> Status["进程状态"]
Status --> Running("运行中<br>Running")
Status --> Sleeping("睡眠中<br>Sleeping (S)")
Status --> Zombie("僵尸进程<br>Zombie (Z)")
Status --> Stopped("已停止<br>Stopped (T)")
Processes --> Commands["命令工具"]
Commands --> ps["ps aux → 进程快照"]
Commands --> top["top → 动态监视"]
Commands --> kill["kill -9 PID → 强制终止"]
%% ========== 包管理 ==========
Packages --> Managers["包管理器"]
Managers --> apt["APT (Debian/Ubuntu)"]
Managers --> yum["YUM/DNF (RHEL/CentOS)"]
Managers --> pacman["Pacman (Arch)"]
Packages --> Operations["常用操作"]
Operations --> Install["安装: apt install nano"]
Operations --> Remove["卸载: dnf remove httpd"]
Operations --> Update["更新系统: pacman -Syu"]
%% ========== Shell 基础 ==========
Shell --> Env["环境变量"]
Env --> PATH["PATH → 命令搜索路径"]
Env --> Export["export VAR=value → 设置变量"]
Shell --> Scripts["脚本基础"]
Scripts --> Shebang["#!/bin/bash → 解释器指定"]
Scripts --> Condition["条件语句: if [ -f file ]"]
Scripts --> Loop["循环: for i in 1 2 3"]
%% 高亮关键点
classDef highlight fill:#FFE6B3,stroke:#FFA500
class Stop,Install,Scripts highlight
核心概念分解
1. 进程管理
状态转换逻辑:
graph LR
A[新建进程] -->|调度执行| B(Running)
B -->|等待资源| C(Sleeping)
B -->|信号暂停| D(Stopped)
C -->|资源就绪| B
D -->|继续运行| B
B -->|完成退出| E(Zombie)
关键命令:
1 2 3 4
| nohup command &
pkill -f "process_name"
|
2. 软件管理
| 操作 |
APT (Debian) |
YUM (RHEL) |
Pacman (Arch) |
| 更新源 |
apt update |
yum check-update |
pacman -Sy |
| 清理缓存 |
apt clean |
yum clean all |
pacman -Scc |
3. Shell 编程
- 脚本模板示例:
1 2 3 4 5 6 7
| #!/bin/bash
if [ "$1" == "start" ]; then echo "Starting service..." else echo "Usage: $0 {start|stop}" fi
|
- 进程与资源监控:
1 2 3 4
| iotop
ps aux --sort=-%mem | head
|
Linux系统防火墙
Mermaid 可视化 + 结构化 的 Linux 防火墙知识框架
graph LR
%% Linux 防火墙核心工具
Firewall["Linux 防火墙"] --> Tools["工具与实现"]
Tools --> iptables("iptables (基础规则工具)")
Tools --> firewalld("firewalld (动态防火墙管理)")
Tools --> ufw("UFW (简单防火墙工具)")
%% ========== iptables ==========
iptables --> Concepts["核心概念"]
Concepts --> Tables["四张表: raw > mangle > nat > filter"]
Concepts --> Chains["链: INPUT/OUTPUT/FORWARD"]
Concepts --> Rules["规则匹配顺序: 从上到下"]
iptables --> CommonRules["常用规则示例"]
CommonRules --> AllowSSH("-A INPUT -p tcp --dport 22 -j ACCEPT")
CommonRules --> DropAll("-P INPUT DROP ← 默认拒绝")
CommonRules --> LogPackets("-j LOG --log-prefix 'Blocked: '")
%% ========== firewalld ==========
firewalld --> Zones["区域逻辑"]
Zones --> PredefZones["默认区域: public/home/dmz..."]
Zones --> DynamicAdjust["运行时动态调整规则"]
firewalld --> Commands["常用命令"]
Commands --> zoneAddPort("firewall-cmd --zone=public --add-port=80/tcp --permanent")
Commands --> reload("firewall-cmd --reload")
%% ========== UFW ==========
ufw --> Simplicity["简单操作"]
Simplicity --> Enable("ufw enable/disable")
Simplicity --> AllowDeny("ufw allow 22/tcp<br>ufw deny 23")
%% ===== 通用流程 =====
Firewall --> Workflow["配置流程"]
Workflow --> DefinePolicy["1\. 定义默认策略 (允许/拒绝)"]
Workflow --> WhiteList["2\. 设置白名单规则"]
Workflow --> PersistRules["3\. 持久化规则 (iptables-save)"]
Workflow --> Monitor["4\. 监控日志 (/var/log/syslog)"]
%% 高亮关键能力
classDef red fill:#FFE5E5,stroke:#FF4444
class DropAll,AllowSSH,reload,Enable red
核心功能详解
1. iptables 四表五链
- 流量控制流程图:
graph LR
Incoming[接收数据包] --> PREROUTING --> Routing{路由决策}
Routing -->|目标为本机| INPUT --> App[应用程序]
Routing -->|需要转发| FORWARD --> POSTROUTING --> Out[发出数据包]
App --> OUTPUT --> POSTROUTING
- 保存规则:
1 2
| iptables-save > /etc/iptables/rules.v4 service iptables save
|
2. firewalld 高级操作
- 富规则 (Rich Rules) 示例:
1 2
| firewall-cmd --add-rich-rule=' rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" reject'
|
- 与 Docker 的冲突解决:
1
| firewall-cmd --zone=trusted --add-interface=docker0 --permanent
|
3. UFW 场景化配置
- 限制IP访问:
1 2
| ufw allow from 192.168.1.100 to any port 22 ufw deny from 203.0.113.0/24
|
- 查看状态:
实际应用案例
案例1:Web服务器防火墙
graph LR
用户请求 --> Firewall{防火墙规则}
Firewall -->|允许HTTP/HTTPS| Web服务器
Firewall -->|阻断其他流量| Drop[丢弃数据包]
案例2:NAT端口转发
1 2 3
| iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80 iptables -t nat -A POSTROUTING -j MASQUERADE
|
学习路线建议
| 阶段 |
内容 |
| 初级 |
UFW基础命令、firewalld放行端口 |
| 中级 |
iptables四表五链深入、NAT配置 |
| 高级 |
结合Fail2ban防暴力破解、自定义防火墙脚本 |