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 相同点汇总#
无论使用哪个发行版,以下内容保持一致或高度通用:
- Linux 内核:核心相同,只是版本新旧有别
- FHS 文件系统结构:所有发行版遵循同一标准
- GNU 工具链:coreutils、grep、sed、awk、find 等用法完全一致(Alpine 使用 BusyBox,参数略有精简)
- POSIX 兼容:基础 Shell 语法和系统调用接口一致
- 编程语言:Python、Perl、Ruby、Node.js 等运行时行为一致
- X11/Wayland:图形协议栈相同
- systemd:除少数发行版(Alpine、Gentoo、Void)外,init 系统统一
- SSH 配置:
/etc/ssh/sshd_config 格式和选项完全一致
- 内核参数:
/proc/sys/ 和 /etc/sysctl.conf 相同
- 日志位置(传统syslog):
/var/log/ 结构基本一致
- cron 语法:所有发行版 crontab 格式相同
- 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 |
| 保存并退出 |
:wq 或 ZZ |
| 不保存退出 |
:q! |
| 仅保存 |
:w |
| 撤销 |
u |
| 搜索 |
/keyword → n 下一个 |
| 查找替换 |
:%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 | 持续更新