Linux 使用手册

目录


第一章:Linux 基础概念

1.1 文件系统层次结构(FHS)

/           # 根目录
├── /bin    # 基本命令二进制文件(已链接到 /usr/bin)
├── /boot   # 内核和启动文件
├── /dev    # 设备文件
├── /etc    # 系统配置文件
├── /home   # 用户主目录
├── /lib    # 库文件(已链接到 /usr/lib)
├── /media  # 可移动设备挂载点
├── /mnt    # 临时挂载点
├── /opt    # 第三方应用软件
├── /proc   # 进程和内核信息(虚拟文件系统)
├── /root   # root 用户家目录
├── /run    # 运行时临时文件(tmpfs)
├── /sbin   # 系统管理命令(已链接到 /usr/sbin)
├── /srv    # 服务数据
├── /sys    # 内核和硬件信息(虚拟文件系统)
├── /tmp    # 临时文件(重启后可能清除)
├── /usr    # 用户程序和数据
│   ├── /usr/bin
│   ├── /usr/lib
│   ├── /usr/local  # 本地编译安装的软件
│   └── /usr/share  # 架构无关的共享数据
└── /var    # 可变数据(日志、缓存、数据库等)
    ├── /var/log    # 日志文件
    └── /var/tmp    # 重启后保留的临时文件

1.2 文件类型

标识 类型 示例
- 普通文件 -rw-r--r--
d 目录 drwxr-xr-x
l 符号链接 lrwxrwxrwx
b 块设备 brw-rw----
c 字符设备 crw-rw----
p 命名管道 prw-r--r--
s 套接字 srw-rw-rw-

1.3 Shell 类型

常见的 Shell 及其配置文件:

Shell 配置文件(交互式登录) 配置文件(交互式非登录)
bash ~/.bash_profile, ~/.bash_login, ~/.profile ~/.bashrc
zsh ~/.zprofile, ~/.zlogin ~/.zshrc
fish ~/.config/fish/config.fish 同左

第二章:常用命令

2.1 文件与目录操作

ls — 列出目录内容

ls -l        # 详细列表
ls -a        # 显示所有文件(含隐藏文件)
ls -lh       # 人类可读的文件大小
ls -lt       # 按修改时间排序
ls -lrt      # 按时间倒序,最新在最后
ls -R        # 递归列出子目录
ls -i        # 显示 inode 号

cd — 切换目录

cd /path/to/dir    # 切换到指定目录
cd ~               # 回到 home 目录
cd -               # 回到上次所在目录
cd ..              # 上级目录

文件创建与删除

touch file.txt           # 创建空文件(或更新文件时间戳)
mkdir dir1 dir2          # 创建目录
mkdir -p a/b/c           # 递归创建多级目录
rm file.txt              # 删除文件
rm -r dir/               # 递归删除目录
rm -rf dir/              # 强制递归删除(危险,不提示确认)
rmdir dir/               # 删除空目录

文件复制与移动

cp source.txt dest.txt           # 复制文件
cp -r source_dir/ dest_dir/      # 递归复制目录
cp -p source.txt dest.txt        # 保留权限和时间戳
cp -a source_dir/ dest_dir/      # 归档模式(等同于 -dpR)
mv old_name.txt new_name.txt     # 移动/重命名
mv -i source.txt dest/           # 覆盖前提示

文件查看

cat file.txt              # 显示全部内容
cat -n file.txt           # 显示行号
less file.txt             # 分页查看(支持上下翻页、搜索)
more file.txt             # 分页查看(仅向下翻页)
head -n 20 file.txt       # 显示前 20 行(默认 10 行)
tail -n 20 file.txt       # 显示后 20 行
tail -f log.txt           # 持续追踪文件末尾(查看日志必备)
nl file.txt               # 带行号显示

链接

ln -s /path/to/target link_name      # 创建软链接(符号链接)
ln /path/to/target hard_link_name    # 创建硬链接(不能跨文件系统,不能链接目录)

查找文件

find /path -name "*.log"                    # 按名称查找
find /path -type f -size +100M              # 查找大于 100M 的文件
find /path -type f -mtime -7                # 最近 7 天修改的文件
find /path -type f -mmin -60                # 最近 60 分钟修改的文件
find /path -type d -empty                   # 查找空目录
find /path -name "*.tmp" -delete            # 查找并删除
find /path -name "*.sh" -exec chmod +x {} \; # 对找到的文件执行命令

locate filename                   # 从数据库中快速查找(需 updatedb 更新数据库)
which command                     # 显示命令的完整路径
whereis command                   # 显示命令的二进制、源码、手册位置

2.2 文件权限

权限表示

 -  rw-  r--  r--
 |   |    |    |
 |   |    |    └── 其他用户权限 (other)
 |   |    └─────── 用户组权限 (group)
 |   └──────────── 所有者权限 (owner)
 └──────────────── 文件类型 (-/d/l/b/c/p/s)

权限数字:
r (read)    = 4  读取
w (write)   = 2  写入
x (execute) = 1  执行

例如:755 = rwxr-xr-x(所有者全权限,组和其他人只读执行)
     644 = rw-r--r--(所有者读写,组和其他人只读)

chmod — 修改权限

chmod 755 script.sh            # 数字方式
chmod u+x script.sh            # 符号方式(所有者加执行权限)
chmod g-w file.txt             # 移除组写权限
chmod o= file.txt              # 清除其他用户所有权限
chmod -R 755 dir/              # 递归修改目录
chmod u=rwx,g=rx,o= script.sh  # 同时设置多组权限

chown / chgrp — 修改所有者/组

chown user:group file.txt      # 同时修改所有者和组
chown -R user:group dir/       # 递归修改
chgrp group file.txt           # 只修改组

特殊权限

chmod u+s /path/to/executable     # SUID:以文件所有者的身份执行
chmod g+s /path/to/dir            # SGID:目录内新建文件继承目录组
chmod +t /path/to/dir             # Sticky Bit:只有文件所有者能删除(如 /tmp 目录)

2.3 文件压缩与归档

tar — 归档

tar -cvf archive.tar dir/             # 创建归档(不压缩)
tar -xvf archive.tar                  # 解压归档
tar -czvf archive.tar.gz dir/         # 创建 gzip 压缩归档
tar -xzvf archive.tar.gz              # 解压 gzip 归档
tar -cjvf archive.tar.bz2 dir/        # 创建 bzip2 压缩归档(更高压缩率)
tar -xjvf archive.tar.bz2             # 解压 bzip2 归档
tar -cJvf archive.tar.xz dir/         # 创建 xz 压缩归档(最高压缩率)
tar -xJvf archive.tar.xz              # 解压 xz 归档
tar -czvf archive.tar.gz --exclude="*.log" dir/  # 排除特定文件
tar -tzvf archive.tar.gz              # 列出归档内容(不解压)

其他压缩工具

gzip file.txt                         # 压缩为 .gz
gunzip file.txt.gz                    # 解压 .gz
bzip2 file.txt                        # 压缩为 .bz2
bunzip2 file.txt.bz2                  # 解压 .bz2
xz file.txt                           # 压缩为 .xz
unxz file.txt.xz                      # 解压 .xz
zip -r archive.zip dir/               # 创建 zip 压缩
unzip archive.zip                     # 解压 zip
7z a archive.7z dir/                  # 创建 7z 压缩(需安装 p7zip)
7z x archive.7z                       # 解压 7z

2.4 系统信息

uname -a                       # 内核版本及系统架构
uname -r                       # 仅内核版本
hostnamectl                    # 主机名详细信息
lsb_release -a                 # 发行版信息
cat /etc/os-release            # 发行版信息(通用方式)
cat /proc/cpuinfo              # CPU 信息
cat /proc/meminfo              # 内存信息
free -h                        # 内存使用情况(人类可读)
df -h                          # 磁盘分区使用情况
df -i                          # inode 使用情况
du -sh dir/                    # 目录总大小
du -sh * | sort -hr | head -10 # 当前目录下最大的 10 个文件/目录
uptime                         # 系统运行时间、负载
cat /proc/loadavg              # 负载平均值
lscpu                          # CPU 详细信息
lsblk                          # 列出块设备
lsblk -f                       # 列出块设备及文件系统类型
lspci                          # PCI 设备列表
lsusb                          # USB 设备列表
dmidecode -t memory            # 物理内存信息(需 root)
dmidecode -t system            # 系统制造商和型号

2.5 日期和时间

date                                    # 当前日期和时间
date +"%Y-%m-%d %H:%M:%S"               # 自定义格式
date -d "@1700000000"                   # 将时间戳转为日期
date +%s                                # 当前时间戳(秒)
cal                                     # 当前月份日历
cal 2026                                # 全年日历
timedatectl                             # 时区和时间同步状态
timedatectl list-timezones              # 列出所有时区
sudo timedatectl set-timezone Asia/Shanghai  # 设置时区

第三章:文本处理

3.1 grep — 文本搜索

grep "pattern" file.txt                     # 搜索匹配行
grep -i "pattern" file.txt                  # 忽略大小写
grep -v "pattern" file.txt                  # 反向匹配(排除)
grep -r "pattern" dir/                      # 递归搜索目录
grep -n "pattern" file.txt                  # 显示行号
grep -c "pattern" file.txt                  # 统计匹配行数
grep -A 3 "pattern" file.txt                # 显示匹配行及之后 3 行
grep -B 3 "pattern" file.txt                # 显示匹配行及之前 3 行
grep -C 3 "pattern" file.txt                # 显示匹配行及前后各 3 行
grep -E "pattern1|pattern2" file.txt        # 扩展正则(等同于 egrep)
grep -P "\d{3}-\d{4}" file.txt              # Perl 正则(PCRE)
grep -o "pattern" file.txt                  # 只输出匹配的部分
grep -l "pattern" *.txt                     # 只显示包含匹配的文件名
grep -w "word" file.txt                     # 匹配整个单词

3.2 sed — 流编辑器

# 替换
sed 's/old/new/' file.txt                   # 每行替换第一个匹配
sed 's/old/new/g' file.txt                  # 全局替换
sed 's/old/new/gi' file.txt                 # 忽略大小写全局替换
sed 's/^/PREFIX: /' file.txt                # 每行开头添加
sed 's/$/ :SUFFIX/' file.txt                # 每行末尾添加
sed '3s/old/new/' file.txt                  # 只替换第 3 行

# 删除
sed '3d' file.txt                           # 删除第 3 行
sed '3,5d' file.txt                         # 删除第 3-5 行
sed '/pattern/d' file.txt                   # 删除匹配行
sed '/^$/d' file.txt                        # 删除空行

# 打印
sed -n '5,10p' file.txt                     # 打印第 5-10 行
sed -n '/pattern/p' file.txt                # 打印匹配行

# 插入/追加
sed '3i\New line before line 3' file.txt    # 在第 3 行前插入
sed '3a\New line after line 3' file.txt     # 在第 3 行后追加

# 原地修改
sed -i 's/old/new/g' file.txt               # 直接修改文件
sed -i.bak 's/old/new/g' file.txt           # 修改前备份为 .bak

3.3 awk — 文本处理语言

# 基本语法
awk '{print $1}' file.txt                           # 打印第 1 列
awk '{print $1, $3}' file.txt                       # 打印第 1, 3 列
awk '{print $NF}' file.txt                          # 打印最后一列
awk '{print $(NF-1)}' file.txt                      # 打印倒数第 2 列
awk -F':' '{print $1}' /etc/passwd                  # 指定冒号为分隔符
awk -F',' '{print NF}' file.csv                     # 打印列数

# 条件过滤
awk '$3 > 100' file.txt                             # 第 3 列大于 100 的行
awk '$1 == "error"' file.txt                        # 第 1 列等于 error
awk '$1 ~ /pattern/' file.txt                       # 第 1 列匹配正则
awk '$1 !~ /pattern/' file.txt                      # 第 1 列不匹配
awk 'NR>=5 && NR<=10' file.txt                      # 第 5-10 行
awk 'NF > 0' file.txt                               # 跳过空行

# 计算
awk '{sum += $3} END {print sum}' file.txt          # 第 3 列求和
awk '{sum += $3} END {print sum/NR}' file.txt       # 第 3 列平均值
awk '{total+=$3; count++} END {print total/count}'  # 同上,更精确

# 格式化输出
awk '{printf "%-20s %10d\n", $1, $2}' file.txt      # 左对齐字符串 + 右对齐数字

# 关联数组
awk '{count[$1]++} END {for (k in count) print k, count[k]}' file.txt  # 分组计数

3.4 排序、去重与统计

sort file.txt                             # 升序排列
sort -r file.txt                          # 降序排列
sort -n file.txt                          # 按数值排序(而非字典序)
sort -k2 file.txt                         # 按第 2 列排序
sort -k2,2 -k3,3n file.txt                # 先按第 2 列字典序,再按第 3 列数值
sort -t',' -k2 file.csv                   # 逗号分隔,按第 2 列排序
sort -u file.txt                          # 排序并去重

uniq file.txt                             # 去重(仅相邻重复行)
sort file.txt | uniq                      # 全局去重(先排序)
sort file.txt | uniq -c                   # 去重并统计出现次数
sort file.txt | uniq -d                   # 只显示重复行

wc file.txt                               # 行数、单词数、字节数
wc -l file.txt                            # 仅行数
wc -w file.txt                            # 仅单词数
wc -c file.txt                            # 仅字节数

3.5 cut / paste / tr

cut -d':' -f1 /etc/passwd                 # 指定分隔符,取第 1 列
cut -d',' -f1,3 file.csv                  # 取第 1 和第 3 列
cut -c1-10 file.txt                       # 取每行前 10 个字符

paste file1.txt file2.txt                 # 横向合并文件
paste -d',' file1.txt file2.txt           # 指定分隔符合并

tr 'a-z' 'A-Z' < file.txt                 # 小写转大写
tr -d '\r' < dosfile.txt > unixfile.txt   # 删除回车符
tr -s ' ' < file.txt                      # 压缩连续空格为单个空格
echo "a,b,c" | tr ',' '\n'                # 逗号替换为换行

3.6 diff / comm — 文件比较

diff file1.txt file2.txt                  # 差异比较
diff -u file1.txt file2.txt               # 统一格式(git diff 风格)
diff -r dir1/ dir2/                       # 递归比较目录
diff <(ls dir1) <(ls dir2)                # 比较两个命令的输出

comm file1.txt file2.txt                  # 逐行比较(需先排序)
comm -12 file1.txt file2.txt              # 显示两文件共有行
comm -23 file1.txt file2.txt              # 显示仅在 file1 中的行

第四章:用户与权限管理

4.1 用户管理

# 查看用户信息
whoami                                     # 当前用户名
id                                         # 当前用户 UID、GID、组
id username                                # 查看指定用户信息
who                                        # 当前登录用户
w                                          # 当前登录用户及其在做什么
last                                       # 最近登录记录
lastb                                      # 最近登录失败记录

# 用户管理(需 root)
useradd username                           # 添加用户
useradd -m -s /bin/bash username           # 添加用户并创建家目录、指定 shell
useradd -u 1500 -g groupname username      # 指定 UID 和主组
usermod -aG sudo username                  # 将用户加入 sudo 组
usermod -s /bin/zsh username               # 修改用户默认 shell
usermod -L username                        # 锁定用户
usermod -U username                        # 解锁用户
userdel username                           # 删除用户
userdel -r username                        # 删除用户及家目录和邮件
passwd username                            # 设置/修改用户密码
passwd -l username                         # 锁定用户密码
chage -l username                          # 查看密码过期信息

# 批量创建用户
newusers users.txt                         # users.txt 格式同 /etc/passwd

4.2 组管理

groupadd groupname                         # 创建组
groupadd -g 2000 groupname                 # 指定 GID
groupmod -n newname oldname                # 重命名组
groupdel groupname                         # 删除组
gpasswd -d username groupname              # 从组中移除用户
groups username                            # 查看用户所属的所有组

4.3 sudo 配置

visudo                                     # 安全编辑 /etc/sudoers(语法校验)
# 常用配置示例:
# username ALL=(ALL:ALL) ALL               # 用户拥有完全 sudo 权限
# %group ALL=(ALL) NOPASSWD: ALL           # 组成员免密码 sudo
# username ALL=(ALL) /usr/bin/systemctl     # 限制只能执行特定命令

4.4 ACL(访问控制列表)

# 查看 ACL
getfacl file.txt

# 设置 ACL
setfacl -m u:username:rwx file.txt         # 给特定用户添加权限
setfacl -m g:groupname:rx file.txt         # 给特定组添加权限
setfacl -x u:username file.txt             # 移除用户的 ACL
setfacl -b file.txt                        # 清除所有 ACL
setfacl -R -m u:username:rwx dir/          # 递归设置

第五章:进程管理

5.1 进程查看

ps aux                                      # 显示所有进程(BSD 风格)
ps -ef                                      # 显示所有进程(Unix 风格)
ps -ef --forest                             # 树形显示进程关系
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem  # 自定义输出格式,按内存排序
ps -p 1234 -o pid,ppid,cmd                  # 查看指定 PID 的进程

# 进程树
pstree -p                                   # 带 PID 的进程树
pstree -u username                          # 某用户的进程树

# 实时监控
top                                         # 交互式进程监控
htop                                        # top 增强版(更友好的界面,需安装)
atop                                        # 高级系统和进程监控(需安装)

5.2 top 交互命令

按键 功能
1 显示每个 CPU 核心
P 按 CPU 使用率排序
M 按内存使用率排序
T 按运行时间排序
k 结束进程(输入 PID)
r renice 进程
c 切换显示完整命令
V 森林视图
f 管理显示的列
o 添加过滤器
q 退出

5.3 进程控制

# 前台/后台
command &                                   # 在后台运行
Ctrl + Z                                    # 暂停当前前台进程
jobs                                        # 查看后台任务
fg %1                                       # 将任务 1 调回前台
bg %1                                       # 在后台继续运行任务 1
disown -h %1                                # 使任务不受 shell 退出影响

# nohup — 后台运行且不挂断
nohup long_running_command &                # 输出默认写入 nohup.out
nohup command > /dev/null 2>&1 &            # 丢弃所有输出

# 信号
kill PID                                    # 发送 TERM 信号(优雅终止)
kill -9 PID                                 # 发送 KILL 信号(强制终止)
kill -HUP PID                               # 发送 HUP 信号(重新加载配置)
kill -STOP PID                              # 暂停进程
kill -CONT PID                              # 恢复进程
killall process_name                        # 按名称终止进程
pkill -f "pattern"                          # 按命令行模式匹配终止
pkill -u username                           # 终止某用户的所有进程

# 优先级
nice -n 10 command                          # 以较低优先级启动(-20 最高,19 最低)
renice -n 5 -p PID                          # 修改运行中进程的优先级

5.4 lsof — 列出打开的文件

lsof -p PID                                 # 进程打开的文件
lsof -i :80                                 # 使用 80 端口的进程
lsof -i tcp                                 # 所有 TCP 连接
lsof -u username                            # 某用户打开的文件
lsof /path/to/file                          # 哪些进程在使用此文件
lsof +D /path/to/dir                        # 目录下被打开的文件

5.5 /proc 文件系统

cat /proc/cpuinfo                           # CPU 详细信息
cat /proc/meminfo                           # 内存详细信息
cat /proc/PID/cmdline                       # 进程的完整命令行
cat /proc/PID/environ                       # 进程的环境变量
cat /proc/PID/status                        # 进程状态
cat /proc/PID/limits                        # 进程资源限制
cat /proc/PID/fd/                           # 进程打开的文件描述符
cat /proc/sys/                              # 内核运行时参数
cat /proc/version                           # 内核版本
cat /proc/uptime                            # 系统运行时间

第六章:磁盘与存储管理

6.1 分区管理

# 查看磁盘和分区
lsblk                                       # 树形查看块设备
lsblk -f                                    # 包含文件系统信息
fdisk -l                                    # 列出所有磁盘分区
parted -l                                   # 另一种分区查看
blkid                                       # 查看 UUID 和文件系统类型

# 分区工具
fdisk /dev/sdb                              # MBR 分区工具
gdisk /dev/sdb                              # GPT 分区工具
parted /dev/sdb                             # 通用分区工具

6.2 文件系统

# 创建文件系统
mkfs.ext4 /dev/sdb1                         # 格式化为 ext4
mkfs.xfs /dev/sdb1                          # 格式化为 xfs
mkfs.btrfs /dev/sdb1                        # 格式化为 btrfs
mkfs.vfat -F32 /dev/sdb1                    # 格式化为 FAT32
mkswap /dev/sdb2                            # 创建 swap

# 挂载
mount /dev/sdb1 /mnt/data                   # 挂载
mount -t ext4 /dev/sdb1 /mnt/data           # 指定文件系统类型
mount -o remount,rw /mnt/data               # 重新挂载(如只读变读写)
umount /mnt/data                            # 卸载
umount -l /mnt/data                         # 懒卸载(忙时延迟卸载)
fuser -km /mnt/data                         # 强制结束使用挂载点的进程

# 自动挂载 — 编辑 /etc/fstab
# 格式:设备   挂载点   文件系统   选项   dump  pass
# UUID=xxx-xxx /data ext4 defaults,noatime 0 2

# 验证 fstab
mount -a                                    # 挂载 fstab 中所有条目
findmnt --verify                            # 验证 fstab 语法

6.3 磁盘空间管理

df -h                                       # 磁盘使用概览
df -i                                       # inode 使用情况
du -sh directory/                           # 目录总大小
du -h --max-depth=1 /                       # 根目录一级子目录大小
du -sh * | sort -hr                         # 按大小排序
ncdu                                        # 交互式磁盘使用分析器(需安装)

# 查找大文件
find / -type f -size +1G 2>/dev/null        # 查找 >1GB 的文件
find / -type f -size +100M -mtime +30       # >100MB 且超过 30 天未修改

6.4 LVM(逻辑卷管理)

# 物理卷
pvcreate /dev/sdb1                          # 创建物理卷
pvdisplay                                   # 查看物理卷

# 卷组
vgcreate vg_data /dev/sdb1                  # 创建卷组
vgextend vg_data /dev/sdc1                  # 扩展卷组
vgdisplay                                   # 查看卷组

# 逻辑卷
lvcreate -L 10G -n lv_app vg_data           # 创建逻辑卷(指定大小)
lvcreate -l 100%FREE -n lv_app vg_data      # 使用全部剩余空间
lvextend -L +5G /dev/vg_data/lv_app         # 扩展逻辑卷
resize2fs /dev/vg_data/lv_app               # 调整文件系统大小(ext4)
xfs_growfs /mnt/app                         # 调整文件系统大小(xfs)
lvs                                          # 查看逻辑卷

# 快照
lvcreate -L 1G -s -n snap_app /dev/vg_data/lv_app  # 创建快照
lvconvert --merge /dev/vg_data/snap_app              # 恢复快照

6.5 RAID

# 软件 RAID(mdadm)
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
mdadm --detail /dev/md0                     # 查看 RAID 详情
cat /proc/mdstat                            # RAID 状态

# RAID 级别
# RAID 0 — 条带化(性能高,无冗余)
# RAID 1 — 镜像(冗余,容量减半)
# RAID 5 — 分布式奇偶校验(至少 3 盘,允许坏 1 块)
# RAID 6 — 双奇偶校验(至少 4 盘,允许坏 2 块)
# RAID 10 — RAID 1 + RAID 0(先镜像再条带,至少 4 盘)

第七章:网络管理

7.1 网络信息查看

ip addr                                     # 查看 IP 地址(现代命令,替代 ifconfig)
ip link show                                # 查看网络接口状态
ip route                                    # 查看路由表
ip neigh                                    # 查看 ARP 表
ss -tlnp                                    # 查看 TCP 监听端口
ss -tulnp                                   # 查看所有监听端口(TCP + UDP)
ss -s                                       # 统计摘要
netstat -tlnp                               # 传统命令(部分发行版需安装 net-tools)
route -n                                    # 查看路由表
arp -n                                      # 查看 ARP 缓存
hostname -I                                 # 显示本机所有 IP

7.2 网络配置

# NetworkManager(桌面发行版常用)
nmcli device status                         # 设备状态
nmcli connection show                       # 连接列表
nmcli device wifi list                      # WiFi 列表
nmcli device wifi connect "SSID" password "密码"  # 连接 WiFi
nmtui                                       # 终端图形界面

# systemd-networkd(服务器发行版常用)
# 配置文件:/etc/systemd/network/
systemctl restart systemd-networkd

# 手动配置(临时生效)
ip addr add 192.168.1.100/24 dev eth0       # 添加 IP
ip link set eth0 up                         # 启用接口
ip link set eth0 down                       # 禁用接口
ip route add default via 192.168.1.1        # 添加默认网关

# DNS
cat /etc/resolv.conf                        # 查看 DNS 配置
systemd-resolve --status                    # systemd-resolved 状态

7.3 网络诊断

ping -c 4 google.com                        # 发送 4 个 ICMP 包
ping -i 0.5 google.com                      # 间隔 0.5 秒发送
traceroute google.com                       # 路由追踪(需安装)
tracepath google.com                        # 路由追踪(无需安装,使用 UDP)
mtr google.com                              # 动态路由追踪(需安装,my traceroute)

# DNS 诊断
nslookup domain.com                         # DNS 查询
dig domain.com                              # 详细 DNS 查询
dig +short domain.com                       # 简洁输出
dig -x 8.8.8.8                             # 反向查询
dig domain.com MX                           # 查询邮件记录
host domain.com                             # 简单 DNS 查询

# 连接测试
curl -I https://example.com                 # 获取 HTTP 头
curl -X POST -d "key=value" https://api.example.com  # POST 请求
curl -o file.zip https://example.com/file.zip        # 下载文件
curl -L https://example.com                 # 跟随重定向
curl -k https://self-signed.example.com     # 忽略证书验证
wget https://example.com/file.zip           # 下载文件
wget -r -l 2 https://example.com            # 递归下载(深度 2 层)

# 端口与连接
nc -zv 192.168.1.100 22                     # 测试端口是否开放(netcat/ncat)
nc -l -p 8080                               # 监听端口
telnet 192.168.1.100 80                     # 测试 TCP 连接

7.4 防火墙

# iptables(传统)
iptables -L -n -v                           # 查看规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # 允许 SSH
iptables -A INPUT -j DROP                   # 默认丢弃入站
iptables-save > /etc/iptables/rules.v4      # 保存规则

# ufw(Ubuntu/Debian 上的 iptables 前端,更友好)
ufw status                                  # 查看状态
ufw enable                                  # 启用防火墙
ufw allow 22/tcp                            # 允许 SSH
ufw allow from 192.168.1.0/24 to any port 3306  # 允许网段访问 MySQL
ufw delete 3                                # 删除第 3 条规则
ufw logging on                              # 启用日志

# firewalld(RHEL/CentOS/Fedora 默认)
firewall-cmd --state                        # 查看状态
firewall-cmd --list-all                     # 列出所有规则
firewall-cmd --add-service=http --permanent # 永久添加 HTTP 服务
firewall-cmd --add-port=8080/tcp --permanent# 永久添加端口
firewall-cmd --reload                       # 重新加载规则
firewall-cmd --get-default-zone             # 查看默认区域

7.5 SSH

# 基本用法
ssh user@host                               # 连接到远程主机
ssh -p 2222 user@host                       # 指定端口
ssh -i ~/.ssh/id_rsa user@host              # 使用密钥文件
ssh -L 8080:localhost:80 user@host          # 本地端口转发
ssh -R 8080:localhost:80 user@host          # 远程端口转发
ssh -D 1080 user@host                       # SOCKS 代理

# 密钥管理
ssh-keygen -t ed25519 -C "comment"          # 生成 ED25519 密钥(推荐)
ssh-keygen -t rsa -b 4096 -C "comment"      # 生成 RSA 4096 密钥
ssh-copy-id user@host                       # 复制公钥到远程主机

# SCP / SFTP
scp file.txt user@host:/path/               # 复制文件到远程
scp -r dir/ user@host:/path/                # 递归复制目录
scp user@host:/path/file.txt ./             # 从远程下载
sftp user@host                              # 交互式文件传输

# rsync — 增量同步
rsync -avz source/ user@host:/dest/         # 归档模式同步(保留属性)
rsync -avz --delete source/ dest/           # 镜像同步(删除目标多余文件)
rsync -avz --exclude="*.log" source/ dest/  # 排除特定文件
rsync -avz -e "ssh -p 2222" source/ dest/   # 指定 SSH 端口

7.6 数据下载与传输

# wget — 下载工具
wget https://example.com/file.iso           # 下载文件
wget -c https://example.com/file.iso        # 断点续传
wget -b https://example.com/file.iso        # 后台下载
wget -i urls.txt                            # 批量下载(从文件读取 URL)

# aria2 — 多线程下载
aria2c -x 16 https://example.com/file.iso   # 16 线程下载
aria2c -c https://example.com/file.iso      # 断点续传

第八章:Shell 脚本编程

8.1 脚本基础

#!/bin/bash
set -euo pipefail                           # 严格模式:遇错退出、未定义变量报错、管道错误

# 变量
name="world"                                # 赋值(等号两边不能有空格)
echo "Hello, $name"                         # 双引号内可展开变量
echo 'Hello, $name'                         # 单引号原样输出
echo "Hello, ${name}"                       # 花括号明确变量边界

# 特殊变量
echo "脚本名: $0"
echo "参数个数: $#"
echo "所有参数: $@"
echo "所有参数(单字符串): $*"
echo "退出码: $?"
echo "当前 PID: $$"
echo "上一个后台 PID: $!"

# 数组
arr=("a" "b" "c")                           # 定义数组
echo "${arr[0]}"                            # 第一个元素
echo "${arr[@]}"                            # 所有元素
echo "${#arr[@]}"                           # 数组长度
arr+=("d")                                  # 追加元素

8.2 条件判断

# if 语句
if [ "$a" -eq "$b" ]; then
    echo "相等"
elif [ "$a" -gt "$b" ]; then
    echo "a 大于 b"
else
    echo "a 小于 b"
fi

# 数值比较:[ -eq / -ne / -gt / -lt / -ge / -le ]
# 字符串比较:[ = / != / -z(为空) / -n(不为空) ]
# 文件测试:[ -f(是文件) / -d(是目录) / -x(可执行) / -r(可读) / -w(可写) / -e(存在) ]

# [[ ]] 增强版(支持正则和逻辑运算符)
if [[ "$str" =~ ^[0-9]+$ ]]; then           # 正则匹配
    echo "是数字"
fi
if [[ -f config.yml && -r config.yml ]]; then  # 逻辑与
    echo "配置文件可读"
fi

# case 语句
case "$OS" in
    Linux)
        echo "Linux";;
    Darwin)
        echo "macOS";;
    *)
        echo "Unknown";;
esac

8.3 循环

# for 循环
for i in {1..10}; do
    echo "Number: $i"
done

for file in *.txt; do
    echo "Processing: $file"
done

# while 循环
while read -r line; do
    echo "$line"
done < file.txt

count=0
while [ $count -lt 10 ]; do
    echo "$count"
    ((count++))
done

# until 循环(条件为假时执行)
until ping -c1 google.com > /dev/null 2>&1; do
    echo "等待网络..."
    sleep 5
done

8.4 函数

# 定义函数
log() {
    local level="$1"                         # local 限定作用域
    local message="$2"
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"
}

log "INFO" "脚本开始执行"

# 返回值(return 只能返回 0-255 的整数)
is_root() {
    [ "$(id -u)" -eq 0 ] && return 0 || return 1
}

# 函数输出作为返回值
get_config() {
    local key="$1"
    grep "^${key}=" /etc/myapp.conf | cut -d'=' -f2
}
value=$(get_config "database_host")

8.5 常用模式

# 遍历文件逐行处理
while IFS= read -r line || [ -n "$line" ]; do
    echo "$line"
done < file.txt

# 处理命令输出
while IFS= read -r file; do
    echo "-> $file"
done < <(find . -name "*.log")

# 临时文件安全创建
tmpfile=$(mktemp /tmp/myscript.XXXXXX)
trap "rm -f $tmpfile" EXIT                 # 脚本退出时自动清理

# 彩色输出
RED='\033[0;31m'; GREEN='\033[0;32m'; NC='\033[0m'
echo -e "${GREEN}[OK]${NC} 操作成功"
echo -e "${RED}[FAIL]${NC} 操作失败"

# 参数解析
while getopts "h:u:p:" opt; do
    case $opt in
        h) host="$OPTARG";;
        u) user="$OPTARG";;
        p) pass="$OPTARG";;
        *) echo "用法: $0 -h host -u user -p pass"; exit 1;;
    esac
done

第九章:高级命令与技巧

9.1 xargs — 参数构建

find . -name "*.tmp" | xargs rm             # 删除找到的文件
find . -name "*.log" -print0 | xargs -0 rm  # 处理包含空格的文件名(安全方式)
echo "file1 file2 file3" | xargs -n 1       # 每次传递 1 个参数
seq 1 10 | xargs -P 4 -I {} echo "Processing {}"  # 4 进程并行处理
find . -name "*.txt" | xargs grep "pattern" # 在找到的文件中搜索

9.2 重定向与管道进阶

# 标准流
# stdin = 0, stdout = 1, stderr = 2

command > file.txt                          # 覆盖写入 stdout
command >> file.txt                         # 追加写入 stdout
command 2> error.txt                        # 重定向 stderr
command 2>&1                                # stderr 合并到 stdout
command > /dev/null 2>&1                    # 静默所有输出
command > file.txt 2>&1                     # stdout 和 stderr 写入同一文件

# 管道
command1 | command2                         # 将 stdout 传给下一个命令
command1 2>&1 | command2                    # 将 stdout 和 stderr 都传给下一个
command1 | tee output.txt                   # 同时输出到文件和 stdout
command1 | tee -a output.txt                # 追加模式

# 进程替换
diff <(ls dir1) <(ls dir2)                  # 比较两个命令的输出
command1 > >(gzip > file.gz)                # 输出到压缩文件

# Here Document
cat <<EOF > config.txt
line1
line2
EOF

# Here String
grep "pattern" <<< "some string to search"

9.3 计划任务

# cron 格式:分 时 日 月 周
crontab -e                                  # 编辑当前用户 cron
crontab -l                                  # 列出当前用户 cron
crontab -u username -e                      # 编辑指定用户 cron(需 root)

# 示例(在 /var/spool/cron/ 或 /etc/crontab)
# */5 * * * * /path/to/script.sh            # 每 5 分钟执行
# 0 2 * * * /path/to/backup.sh              # 每天凌晨 2 点
# 0 9 * * 1-5 /path/to/script.sh            # 工作日早 9 点
# @daily /path/to/script.sh                 # 每天一次
# @reboot /path/to/script.sh                # 开机启动

# /etc/cron.d/       — 系统级 cron 任务
# /etc/cron.daily/   — 每天执行的脚本
# /etc/cron.hourly/  — 每小时执行的脚本
# /etc/cron.weekly/  — 每周执行的脚本
# /etc/cron.monthly/ — 每月执行的脚本

# systemd timer(systemd 发行版推荐替代 cron)
systemctl list-timers                       # 查看所有定时器

9.4 systemd 服务管理

# 服务状态
systemctl status nginx                      # 查看服务状态
systemctl is-active nginx                   # 是否运行中
systemctl is-enabled nginx                  # 是否开机自启
systemctl list-units --type=service         # 所有服务单元
systemctl list-units --type=service --state=failed  # 失败的服务

# 服务控制
systemctl start|stop|restart nginx           # 启动/停止/重启
systemctl reload nginx                       # 重新加载配置(无需重启)
systemctl enable|disable nginx               # 设置/取消开机自启
systemctl mask|unmask nginx                  # 屏蔽/取消屏蔽(禁止手动启动)

# 查看日志
journalctl -u nginx                          # 某服务的日志
journalctl -u nginx -f                       # 持续追踪
journalctl -u nginx --since "2026-05-15"     # 从指定日期
journalctl -u nginx --since "1 hour ago"     # 最近 1 小时
journalctl -u nginx -p err                   # 只看错误级别
journalctl --disk-usage                      # 日志占用空间
journalctl --vacuum-size=500M                # 清理日志至 500M 以下

# 分析启动时间
systemd-analyze                              # 总启动时间
systemd-analyze blame                        # 各服务启动时间排序
systemd-analyze critical-chain               # 关键启动链

9.5 journald 持久化配置

# /etc/systemd/journald.conf
# Storage=persistent    # 持久化到磁盘(默认 /var/log/journal/)
# SystemMaxUse=1G       # 最大占用空间

第十章:软件包管理

10.1 包管理器对比

功能 Debian/Ubuntu (apt/dpkg) RHEL/CentOS/Fedora (dnf/yum/rpm) Arch (pacman) Alpine (apk) openSUSE (zypper)
搜索软件 apt search pkg dnf search pkg pacman -Ss pkg apk search pkg zypper search pkg
安装 apt install pkg dnf install pkg pacman -S pkg apk add pkg zypper install pkg
卸载 apt remove pkg dnf remove pkg pacman -R pkg apk del pkg zypper remove pkg
更新列表 apt update dnf check-update pacman -Sy apk update zypper refresh
升级所有 apt upgrade dnf upgrade pacman -Su apk upgrade zypper update
本地安装 dpkg -i file.deb rpm -ivh file.rpm pacman -U file.pkg.tar.zst apk add --allow-untrusted file.apk zypper install file.rpm
列出已安装 dpkg -l rpm -qa pacman -Q apk info zypper packages --installed-only
文件属于哪个包 dpkg -S /path/file rpm -qf /path/file pacman -Qo /path/file apk info --who-owns /path/file zypper search --provides /path/file
包包含哪些文件 dpkg -L pkg rpm -ql pkg pacman -Ql pkg apk info -L pkg rpm -ql pkg
清理缓存 apt clean dnf clean all pacman -Sc apk cache clean zypper clean

10.2 APT 详细操作(Debian/Ubuntu)

# 源配置
# 主源文件:/etc/apt/sources.list
# 附加源:/etc/apt/sources.list.d/*.list

# 常用命令
apt update                                  # 更新包索引
apt list --upgradable                       # 查看可升级的包
apt upgrade                                 # 升级所有包(不删除旧包)
apt full-upgrade                            # 完整升级(可能删除冲突包)
apt autoremove                              # 删除不再需要的依赖
apt purge pkg                               # 彻底删除(含配置文件)
apt show pkg                                # 查看包详细信息
apt edit-sources                            # 编辑源列表
apt-mark hold pkg                           # 锁定包版本(禁止升级)
apt-mark unhold pkg                         # 解锁

# PPA(Ubuntu 特性)
add-apt-repository ppa:user/name            # 添加 PPA 源
add-apt-repository -r ppa:user/name         # 移除 PPA 源

10.3 DNF/YUM 详细操作(RHEL/CentOS/Fedora)

# RHEL 8+ / CentOS 8+ / Fedora 使用 DNF(YUM 的下一代)
# RHEL 7 / CentOS 7 使用 YUM

# 仓库管理
dnf repolist                                # 列出已启用的仓库
dnf repolist all                            # 列出所有仓库
dnf config-manager --add-repo url           # 添加仓库

# 包管理
dnf search pkg                              # 搜索
dnf info pkg                                # 查看信息
dnf install pkg                             # 安装
dnf remove pkg                              # 卸载
dnf upgrade                                 # 升级
dnf autoremove                              # 删除孤立依赖
dnf history                                 # DNF 操作历史
dnf history undo 5                          # 回滚第 5 次操作

# 包组
dnf group list                              # 列出包组
dnf group install "Development Tools"       # 安装包组

10.4 Pacman 详细操作(Arch)

# 配置:/etc/pacman.conf
# 镜像:/etc/pacman.d/mirrorlist

pacman -Syu                                 # 更新并升级(日常推荐)
pacman -S pkg                               # 安装
pacman -R pkg                               # 删除(保留依赖)
pacman -Rs pkg                              # 删除(含不再需要的依赖)
pacman -Rns pkg                             # 删除(含依赖和配置文件)
pacman -Qdt                                 # 列出孤立包
pacman -Qe                                  # 列出显式安装的包
pacman -Qm                                  # 列出外来包(非官方仓库)
paccache -r                                 # 清理包缓存(保留最近 3 个版本)

# AUR 助手(非官方,推荐 yay 或 paru)
yay -S pkg                                  # 安装(含 AUR)
yay -Sua                                    # 仅升级 AUR 包

10.5 通用二进制包管理

# Flatpak(跨发行版桌面应用)
flatpak search appname                       # 搜索
flatpak install flathub org.app.Name        # 安装
flatpak run org.app.Name                    # 运行
flatpak list                                 # 列出已安装
flatpak update                               # 更新所有

# Snap(Ubuntu 推广的通用包格式)
snap find appname                           # 搜索
snap install appname                        # 安装
snap list                                   # 列出已安装
snap refresh                                # 更新所有

# AppImage(免安装运行)
chmod +x app.AppImage                       # 赋予执行权限
./app.AppImage                              # 直接运行

第十一章:系统性能与排错

11.1 性能监控

# CPU
top / htop
mpstat 1                                    # 每个 CPU 使用率(sysstat 包)
sar -u 1 10                                 # CPU 历史统计

# 内存
free -h
vmstat 1                                    # 虚拟内存统计
sar -r 1 10                                 # 内存历史统计

# IO
iostat -x 1                                 # 磁盘 IO 统计(sysstat 包)
iotop                                       # IO 进程排行(需安装)
sar -b 1 10                                 # IO 历史统计

# 网络
iftop                                       # 网络流量监控(需安装)
nethogs                                     # 按进程查看网络流量(需安装)
sar -n DEV 1 10                             # 网络历史统计

# 综合
dstat                                       # 替代 vmstat、iostat、netstat(需安装)
glances                                     # Web/终端综合监控(需安装)

11.2 内存与 OOM 排错

dmesg | grep -i oom                         # 查看 OOM Killer 日志
dmesg | grep -i "killed process"            # 被杀的进程
cat /proc/PID/oom_score                     # OOM 分数(越高越可能被杀)
cat /proc/PID/oom_score_adj                 # OOM 调整值(-1000 排除)

# 限制应用内存
systemd-run --scope -p MemoryMax=500M ./myapp
cgexec -g memory:limit_group ./myapp

11.3 日志管理

# 传统 syslog
cat /var/log/syslog                          # Debian/Ubuntu 系统日志
cat /var/log/messages                        # RHEL/CentOS 系统日志
cat /var/log/auth.log                        # 认证日志(Debian/Ubuntu)
cat /var/log/secure                          # 认证日志(RHEL/CentOS)
cat /var/log/kern.log                        # 内核日志

# journald(systemd 系统)
journalctl -b                                # 本次启动以来的日志
journalctl -b -1                             # 上次启动的日志
journalctl -k                                # 内核日志
journalctl -p err                            # 只看错误及以上级别
journalctl _PID=1234                         # 特定 PID 的日志

# 日志轮转
# 配置:/etc/logrotate.conf 和 /etc/logrotate.d/
logrotate -f /etc/logrotate.conf             # 强制执行轮转

11.4 启动与恢复

# GRUB 恢复模式
# 开机时在 GRUB 菜单按 'e' 编辑启动参数
# 在 linux 行末尾添加:single 或 init=/bin/bash
# 或添加 systemd.unit=rescue.target

# 单用户模式
systemctl rescue                             # 救援模式(需 root 密码)
systemctl emergency                          # 紧急模式(最小环境)

# 修复文件系统
fsck /dev/sdb1                               # 检查文件系统(需卸载)
fsck -y /dev/sdb1                            # 自动修复
tune2fs -l /dev/sdb1                         # 查看 ext 文件系统信息

# 重置 root 密码
# 1. GRUB 编辑启动项,添加 init=/bin/bash
# 2. mount -o remount,rw /
# 3. passwd root
# 4. reboot -f

第十二章:发行版对比

12.1 主流发行版家族总览

Linux 发行版家族树(简化版):

Debian ──┬── Debian Stable/Testing/Unstable
         ├── Ubuntu ──┬── Ubuntu Desktop/Server
         │            ├── Linux Mint
         │            ├── Pop!_OS
         │            └── Elementary OS
         └── Kali Linux(安全审计)

RHEL ────┬── Red Hat Enterprise Linux
         ├── CentOS / CentOS Stream
         ├── Fedora
         ├── AlmaLinux
         └── Rocky Linux

Arch ────┬── Arch Linux
         ├── Manjaro
         └── EndeavourOS

SUSE ────┬── openSUSE Leap
         └── openSUSE Tumbleweed

独立系 ──┬── Gentoo Linux(源码编译)
         ├── Alpine Linux(轻量,基于 musl/BusyBox)
         ├── NixOS(声明式配置)
         ├── Void Linux(独立开发)
         └── Solus(独立开发)

12.2 核心差异对照表

特性 Debian/Ubuntu RHEL/CentOS/Fedora Arch Linux Alpine openSUSE
包格式 .deb .rpm .pkg.tar.zst .apk .rpm
包管理器 apt/dpkg dnf/rpm/yum pacman apk zypper
默认防火墙 ufw firewalld iptables/nftables iptables firewalld
C 库 glibc glibc glibc musl glibc
核心工具 GNU coreutils GNU coreutils GNU coreutils BusyBox GNU coreutils
init 系统 systemd systemd systemd OpenRC systemd
默认文件系统 ext4 xfs (RHEL8+) ext4 ext4 btrfs
SELinux/AppArmor AppArmor SELinux 无(可选) AppArmor
Python 默认 python3 python3 (RHEL8+) python3 默认不安装 python3
默认 Shell bash bash bash ash (BusyBox) bash
软件源规模 极大(Ubuntu PPA) 小(EPEL 扩展) 极大(AUR) 极小 中等
更新策略 稳定版/保守 稳定版/保守 滚动更新 稳定版/保守 Leap(稳定) / Tumbleweed(滚动)

12.3 包管理器命令对照(详细版)

操作              Debian/Ubuntu          RHEL/CentOS 7          RHEL 8+/Fedora          Arch                    Alpine                 openSUSE
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
更新索引          apt update             yum makecache          dnf makecache           pacman -Sy              apk update             zypper refresh
升级所有包        apt upgrade            yum update             dnf upgrade             pacman -Su              apk upgrade            zypper update
安装包            apt install pkg        yum install pkg        dnf install pkg         pacman -S pkg           apk add pkg            zypper install pkg
卸载包            apt remove pkg         yum remove pkg         dnf remove pkg          pacman -R pkg           apk del pkg            zypper remove pkg
清除配置卸载      apt purge pkg          yum erase pkg          dnf remove --purge pkg  pacman -Rn pkg          apk del --purge pkg    zypper remove --clean-deps pkg
搜索包            apt search keyword     yum search keyword     dnf search keyword      pacman -Ss keyword      apk search keyword     zypper search keyword
包详情            apt show pkg           yum info pkg           dnf info pkg            pacman -Si pkg          apk info pkg           zypper info pkg
列出已安装        dpkg -l / apt list --installed  rpm -qa      rpm -qa / dnf list --installed  pacman -Q       apk info               zypper packages --installed-only
文件属于哪个包    dpkg -S /path/file     rpm -qf /path/file     rpm -qf /path/file      pacman -Qo /path/file   apk info --who-owns    rpm -qf /path/file
包包含哪些文件    dpkg -L pkg            rpm -ql pkg            rpm -ql pkg             pacman -Ql pkg          apk info -L pkg        rpm -ql pkg
清理缓存          apt clean / apt autoclean  yum clean all     dnf clean all           pacman -Sc / paccache -r  apk cache clean    zypper clean
锁定版本          apt-mark hold pkg      yum versionlock pkg    dnf versionlock pkg     (编辑 pacman.conf)      apk add pkg=version    zypper addlock pkg

12.4 服务管理对比

操作              SysV Init              systemd (当前主流)      OpenRC (Alpine/Gentoo)
─────────────────────────────────────────────────────────────────────────────────
启动服务          service nginx start    systemctl start nginx   rc-service nginx start
停止服务          service nginx stop     systemctl stop nginx    rc-service nginx stop
重启服务          service nginx restart  systemctl restart nginx rc-service nginx restart
状态              service nginx status   systemctl status nginx  rc-service nginx status
开机自启          chkconfig nginx on     systemctl enable nginx  rc-update add nginx
禁用自启          chkconfig nginx off    systemctl disable nginx rc-update del nginx
列出所有服务      chkconfig --list       systemctl list-units    rc-status

12.5 配置文件位置差异

配置项 Debian/Ubuntu RHEL/CentOS/Fedora Arch Alpine
网络接口 /etc/network/interfaces /etc/sysconfig/network-scripts/ifcfg-* /etc/systemd/network/ /etc/network/interfaces
DNS /etc/resolv.conf (或 resolvconf) /etc/resolv.conf (NetworkManager 管理) /etc/resolv.conf (systemd-resolved) /etc/resolv.conf
软件源 /etc/apt/sources.list /etc/yum.repos.d/*.repo /etc/pacman.d/mirrorlist /etc/apk/repositories
时区 /etc/timezone + /etc/localtime /etc/localtime (systemd: timedatectl) /etc/localtime /etc/timezone + /etc/localtime
主机名 /etc/hostname /etc/hostname /etc/hostname /etc/hostname
locale /etc/default/locale /etc/locale.conf /etc/locale.conf /etc/locale
SSH 配置 /etc/ssh/sshd_config /etc/ssh/sshd_config /etc/ssh/sshd_config /etc/ssh/sshd_config

12.6 各发行版特点与适用场景

Debian 系

  • Debian Stable:极致稳定,适合服务器;软件版本偏旧
  • Ubuntu LTS:平衡稳定和新特性,最广泛的社区支持,适合学习和生产
  • Ubuntu 非 LTS:较新特性,适合桌面用户
  • Linux Mint:开箱即用的桌面体验,对新手友好
  • Kali Linux:预装大量安全工具,仅适合安全测试

RHEL 系

  • RHEL:企业级商业支持,适合大型企业生产环境
  • CentOS Stream:RHEL 的上游滚动版,预览下一版 RHEL
  • AlmaLinux / Rocky Linux:RHEL 的免费兼容克隆(CentOS 替代)
  • Fedora:前沿技术,适合开发者和爱好者,每 6 个月发布新版

Arch 系

  • Arch Linux:滚动更新,DIY 精神,适合有经验的用户(需从命令行手动安装)
  • Manjaro:开箱即用的 Arch,适合想用 AUR 但不想折腾的用户
  • AUR(Arch User Repository):用户维护的庞大软件库,几乎所有 Linux 软件都能找到

其他

  • Alpine Linux:超轻量(约 5MB),基于 musl libc 和 BusyBox,Docker 容器首选基础镜像
  • openSUSE:YaST 配置工具体验独特,Leap(稳定版)和 Tumbleweed(滚动版)双轨
  • NixOS:声明式系统配置,可复现构建,适合 DevOps 和开发环境管理
  • Gentoo:源码编译发行版,极致可定制,适合学习和追求极致性能的用户

12.7 相同点汇总

无论使用哪个发行版,以下内容保持一致或高度通用:

  1. Linux 内核:核心相同,只是版本新旧有别
  2. FHS 文件系统结构:所有发行版遵循同一标准
  3. GNU 工具链:coreutils、grep、sed、awk、find 等用法完全一致(Alpine 使用 BusyBox,参数略有精简)
  4. POSIX 兼容:基础 Shell 语法和系统调用接口一致
  5. 编程语言:Python、Perl、Ruby、Node.js 等运行时行为一致
  6. X11/Wayland:图形协议栈相同
  7. systemd:除少数发行版(Alpine、Gentoo、Void)外,init 系统统一
  8. SSH 配置/etc/ssh/sshd_config 格式和选项完全一致
  9. 内核参数/proc/sys//etc/sysctl.conf 相同
  10. 日志位置(传统syslog)/var/log/ 结构基本一致
  11. cron 语法:所有发行版 crontab 格式相同
  12. LVM/mdadm/文件系统工具:底层磁盘管理命令完全一致

第十三章:常用快捷键与技巧汇总

13.1 Bash 快捷键

快捷键 功能
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾
Ctrl + U 删除光标前所有内容
Ctrl + K 删除光标后所有内容
Ctrl + W 删除前一个单词
Ctrl + L 清屏(等同于 clear)
Ctrl + R 搜索命令历史
Ctrl + D 退出 shell / 发送 EOF
Ctrl + C 终止当前命令
Ctrl + Z 暂停当前命令

13.2 Vim 基础(救急备忘)

操作 命令
进入编辑模式 i (光标前) / a (光标后) / o (下一行)
退出编辑模式 Esc
保存并退出 :wqZZ
不保存退出 :q!
仅保存 :w
撤销 u
搜索 /keywordn 下一个
查找替换 :%s/old/new/g
跳转到行 :行号:50
跳转到末尾 G
跳转到开头 gg
复制一行 yy
粘贴 p
删除一行 dd
删除 10 行 d10d

13.3 tmux 基础

tmux new -s session_name          # 创建新会话
tmux attach -t session_name       # 重新连接会话
tmux ls                           # 列出所有会话

# 默认前缀键:Ctrl + b
Ctrl+b %                          # 垂直分割窗格
Ctrl+b "                          # 水平分割窗格
Ctrl+b 方向键                     # 切换窗格
Ctrl+b x                          # 关闭窗格
Ctrl+b d                          # 脱离会话(后台运行)
Ctrl+b c                          # 新建窗口
Ctrl+b n / p                      # 下一个/上一个窗口
Ctrl+b [                          # 进入滚动模式(PgUp/Down 翻页)

13.4 最佳实践速查

# 安全习惯
alias rm='rm -i'                           # 删除前确认
alias cp='cp -i'                           # 覆盖前确认
alias mv='mv -i'                           # 覆盖前确认

# 历史记录增强
export HISTSIZE=10000                      # 增加历史条数
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%F %T "            # 显示时间戳
export HISTCONTROL=ignoredups:erasedups   # 去重

# 有用的别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
alias free='free -h'
alias ..='cd ..'
alias ...='cd ../..'

# 偶尔使用的长时间命令备忘
alias untar='tar -xzvf'
alias ports='ss -tlnp'
alias myip='curl -s ifconfig.me'

手册版本:v1.0 | 持续更新