Linux 命令完全指南
本文系统整理了 Linux 常用命令,每个命令均标明具体用途并配有示例,涵盖系统管理、文件操作、网络配置、进程管理等核心领域,对功能相似的命令进行对比分析,并配以 Mermaid 图表辅助理解。
目录
- [一、Linux 系统架构概览](#一、Linux 系统架构概览)
- 二、系统信息查看
- 三、系统关机与重启
- 四、文件与目录操作
- 五、文件搜索命令
- 六、文件查看与文本处理
- 七、文件权限与属性管理
- 八、打包与压缩
- 九、磁盘与文件系统管理
- 十、用户与群组管理
- 十一、软件包管理
- 十二、进程管理
- 十三、网络管理
- [十四、Linux 文件系统目录结构](#十四、Linux 文件系统目录结构)
- [十五、Shell 基础与命令格式](#十五、Shell 基础与命令格式)
- 十六、获取帮助
- 十七、操作系统基础知识
- 附录:速查表
一、Linux 系统架构概览
1.1 系统层次结构
📱 用户应用程序
User Applications
🐚 Shell / 库函数
Shell / Library
🔌 系统调用接口
System Call Interface
🐧 Linux 内核
Kernel
🔧 硬件抽象层
HAL
💻 硬件
Hardware
1.2 内核核心功能
🐧 Linux 内核
⚙️ 进程管理
🧠 内存管理
📁 文件系统
🌐 网络通信
🔒 安全机制
🔌 设备驱动
📊 进程调度
💬 进程间通信
🔄 多任务处理
💭 虚拟内存
📦 内存分配
🔃 页面交换
🗂️ VFS 虚拟文件系统
💾 ext4 / xfs / btrfs
📌 挂载管理
📡 TCP/IP 协议栈
🔗 Socket 接口
🖧 网络设备驱动
🔑 权限管理
🛡️ SELinux
🔐 加密支持
💿 块设备
⌨️ 字符设备
📶 网络设备
1.3 Linux 哲学思想
- 由目的单一的小程序组成:组合小程序完成复杂任务
- 一切皆文件:设备、进程、网络套接字都以文件形式呈现
- 尽量避免捕获用户接口:尽量减少交互式操作
- 配置文件保存为纯文本格式:方便编辑和版本控制
- 提供机制,而非策略:给予用户最大灵活性
二、系统信息查看
2.1 硬件信息
| 命令 | 用途 | 说明 |
|---|---|---|
arch |
判断当前 CPU 架构,便于选择兼容软件包 | 显示处理器架构 |
uname -m |
同 arch,脚本中常用 | 显示处理器架构(同 arch) |
uname -r |
确认内核版本,排查驱动或兼容性问题 | 显示内核版本 |
uname -a |
一次性获取主机名、内核、架构等,用于故障报告 | 显示全部系统信息 |
dmidecode -q |
查看主板、BIOS、内存条等硬件明细 | 显示硬件系统部件(SMBIOS/DMI) |
lscpu |
查看 CPU 核心数、型号、缓存,做性能或虚拟化规划 | 显示 CPU 详细信息 |
lspci -tv |
列出显卡、网卡等 PCI 设备及层级关系 | 列出 PCI 设备(树状) |
lsusb -tv |
列出 U 盘、键鼠等 USB 设备及层级 | 列出 USB 设备(树状) |
hdparm -i /dev/sda |
查看硬盘型号、序列号、支持特性 | 显示磁盘架构特性 |
hdparm -tT /dev/sda |
粗略测试硬盘读速,做性能对比 | 测试磁盘读取速度 |
lsblk |
查看磁盘、分区、挂载点,便于挂载或扩容 | 列出所有可用块设备信息 |
free -h |
查看内存与 swap 使用,判断是否需加内存或调优 | 显示内存使用情况 |
示例:
bash
arch # 输出 x86_64 或 aarch64
uname -r # 输出 5.15.0-91-generic
uname -a # 输出完整系统信息一行
lscpu # 查看 CPU 核心、线程、缓存
lspci -tv # 树状看 PCI 设备
lsusb -tv # 树状看 USB 设备
lsblk # 看 /dev/sda1 等及挂载点
free -h # 看 Mem、Swap 使用(人类可读)
hdparm -tT /dev/sda # 测磁盘读速(需 root)
2.2 /proc 虚拟文件系统
| 文件路径 | 说明 |
|---|---|
/proc/cpuinfo |
CPU 信息 |
/proc/meminfo |
内存使用信息 |
/proc/version |
内核版本 |
/proc/interrupts |
中断信息 |
/proc/swaps |
Swap 使用情况 |
/proc/net/dev |
网络适配器及统计 |
/proc/mounts |
已挂载的文件系统 |
/proc/loadavg |
系统负载信息 |
/proc/devices |
已配置的设备清单 |
/proc/filesystems |
支持的文件系统 |
2.3 日期与时间
| 命令 | 用途 | 说明 |
|---|---|---|
date |
查看或脚本中获取当前时间 | 显示当前系统日期时间 |
date +%Y-%m-%d |
生成日志文件名、备份日期等 | 格式化输出日期(如 2026-02-12) |
date +%Y%m%d |
紧凑日期,常用于脚本变量 | 紧凑格式日期(如 20260212) |
date +%H:%M:%S |
只取当前时分秒 | 格式化输出时间 |
date +%T |
同 %H:%M:%S | 显示时分秒(同 %H:%M:%S) |
date +%s |
计时、过期判断、唯一文件名 | 显示时间戳(Unix 纪元秒数) |
date +%D |
简短日期显示 | 显示日期(MM/DD/YY) |
cal |
快速看本月/某月某年日历 | 显示当月日历 |
cal 2026 |
看整年日历 | 显示指定年份日历 |
cal 6 2026 |
看某年某月 | 显示指定月份日历 |
hwclock / clock |
查看 BIOS 时间,排查时间漂移 | 显示硬件时钟 |
hwclock -w |
改系统时间后写回 BIOS,重启保持 | 将系统时间同步到硬件时钟 |
hwclock -s |
用 BIOS 时间校正系统时间 | 将硬件时钟同步到系统时间 |
uptime |
看运行时长和负载,判断是否过载 | 显示系统运行时间和负载 |
示例:
bash
date # Thu Feb 12 10:30:00 CST 2026
date +%Y-%m-%d # 2026-02-12
date +%Y%m%d # 20260212
date +%s # 1739327400(时间戳)
cal # 当月日历
cal 2026 # 2026 年全年
cal 6 2026 # 2026 年 6 月
uptime # 运行时间 + 1/5/15 分钟负载
hwclock -r # 读硬件时钟
设置系统时间:
bash
# 设置日期和时间(格式:MMDDhhmm[[CC]YY][.ss])
date 041217002026.00 # 设置为 2026-04-12 17:00:00
# 使用更直观的格式设置
date -s "2026-04-12 17:00:00"
# 将系统时间写入硬件时钟(确保重启后时间正确)
hwclock -w
# 或
clock -w
硬件时钟与系统时钟同步(补充示例):
bash
hwclock --hctosys # 硬件时钟 → 系统时钟(hc to sys)
hwclock --systohc # 系统时钟 → 硬件时钟(sys to hc)
clock --hctosys # 同上,clock 与 hwclock 用法相近
hwclock -r # 仅显示硬件时钟
hwclock --set --date="09/17/2003 13:26:00" # 设置硬件时钟
# 网络对时后写回硬件:ntpdate 0.rhel.pool.ntp.org && hwclock -w
系统时钟 vs 硬件时钟:系统时钟由内核维护,运行于 RAM 中;硬件时钟(RTC)存在于主板 BIOS/CMOS 中,断电后仍保持运行。
三、系统关机与重启
3.1 关机/重启命令对比
🔵 注销
👋 logout
🚪 exit
🟡 重启命令
🔄 shutdown -r now
🔃 reboot
6️⃣ init 6
🔴 关机命令
⏹️ shutdown -h now
0️⃣ init 0
0️⃣ telinit 0
🔌 poweroff
✋ halt
3.2 命令详解
| 命令 | 用途 | 说明 | 推荐度 |
|---|---|---|---|
shutdown -h now |
安全关机并通知已登录用户 | 立即关机(通知所有用户) | 推荐 |
shutdown -h +10 |
延迟关机,给用户保存时间 | 10 分钟后关机 | 推荐 |
shutdown -h 23:00 |
定时在指定时刻关机 | 定时 23:00 关机 | 推荐 |
shutdown -c |
取消已计划的关机/重启 | 取消定时关机 | - |
shutdown -r now |
安全重启并通知用户 | 立即重启 | 推荐 |
shutdown -k now "msg" |
只发关机警告,不真关(演练或提醒) | 发送警告信息,不真正关机 | - |
init 0 |
切换到运行级别 0(关机) | 传统方式关机 | - |
init 6 |
切换到运行级别 6(重启) | 传统方式重启 | - |
reboot |
快速重启,脚本或维护常用 | 重启系统 | 推荐 |
poweroff |
关机并断电(支持 ACPI 时) | 关闭系统电源 | - |
halt |
停止 CPU,不一定会断电 | 停止系统 | - |
logout |
退出当前登录会话 | 注销当前用户 | - |
sync |
关机/拔盘前把缓存写入磁盘,防数据丢失 | 将内存缓冲区数据写入磁盘 | 关机前建议执行 |
示例:
bash
sync && shutdown -h now # 先同步再立即关机
shutdown -h +10 "10分钟后维护关机" # 10 分钟后关机并广播消息
shutdown -r 23:00 # 今晚 23:00 重启
shutdown -c # 取消上面计划的关机/重启
shutdown -k now "请保存工作" # 只发消息,不关机
reboot # 立即重启
logout # 退出当前 Shell 登录
最佳实践 :推荐使用
shutdown命令,因为它会通知所有登录用户,并且可以设置延时,给用户保存工作的时间。在执行关机/重启前,建议先执行sync命令。
3.3 shutdown 参数详解
| 参数 | 说明 |
|---|---|
-t sec |
延迟指定秒数后执行 |
-k |
仅发送警告信息,不真正关机 |
-r |
重启 |
-h |
关机 |
-n |
不经过 init 程序直接关机 |
-f |
跳过 fsck 磁盘检查 |
-F |
强制进行 fsck 磁盘检查 |
-c |
取消已计划的关机 |
四、文件与目录操作
4.1 目录导航
🧭 导航命令
📂 cd /home - 进入指定目录
⬆️ cd .. - 返回上一级
🏠 cd ~ - 回到家目录
↩️ cd - 返回上次目录
📍 pwd - 显示当前路径
🌳 / 根目录
🏠 /home
📦 /usr
⚙️ /etc
📊 /var
👤 /home/user1
| 命令 | 用途 | 说明 |
|---|---|---|
cd /home |
进入指定绝对路径 | 进入 /home 目录 |
cd .. |
返回父目录 | 返回上一级目录 |
cd ../.. |
返回上两级 | 返回上两级目录 |
cd 或 cd ~ |
快速回家目录 | 进入用户家目录 |
cd ~user1 |
进入指定用户家目录 | 进入 user1 的家目录 |
cd - |
在最近两个目录间切换 | 返回上次所在目录 |
pwd |
确认当前路径,供脚本或粘贴用 | 显示当前工作路径 |
pwd -P |
解析符号链接得到物理路径 | 显示真实路径(非符号链接) |
示例:
bash
cd /var/log # 进入日志目录
cd .. # 回到上一级
cd ~ # 回家目录
cd - # 在上次目录与当前目录间切换
pwd # 输出如 /var/log
pwd -P # 若当前是链接,显示真实路径
4.2 目录查看 - ls 命令详解
用途:列出目录内容,查看文件名、权限、大小、时间等,日常使用最频繁。
基础用法:
| 命令 | 用途 | 说明 |
|---|---|---|
ls |
快速看当前目录有哪些文件 | 查看目录中的文件 |
ls -l |
看权限、大小、时间、所有者 | 长格式显示(权限、大小、时间等) |
ls -a |
看隐藏文件(如 .bashrc) | 显示所有文件(含隐藏文件) |
ls -A |
同 -a 但不显示 . 和 ... | 显示所有文件(不含 . 和 ..) |
ls -lh |
大小以 K/M/G 显示 | 以人类可读格式显示文件大小 |
ls -F |
区分目录(/)、可执行(*)等 | 在文件名后附加类型标识符 |
ls -R |
递归列出子目录内容 | 递归显示子目录内容 |
ls -r |
倒序显示 | 逆序显示 |
ls -t |
最近修改的在前 | 按修改时间排序 |
ls -S |
大的在前 | 按文件大小排序 |
ls -i |
看 inode,排查硬链接 | 显示 inode 号 |
ls -d |
只显示目录本身,不展开内容 | 显示目录自身属性 |
ls -l 输出解析:
-rwxr-xr-x 1 root root 4096 2026-02-12 10:00 filename
│├─┤├─┤├─┤ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └── 文件名
│ │ │ │ │ │ │ │ └── 修改时间
│ │ │ │ │ │ │ └── 文件大小(字节)
│ │ │ │ │ │ └── 所属组
│ │ │ │ │ └── 所有者
│ │ │ │ └── 硬链接数
│ │ │ └── 其他用户权限
│ │ └── 组权限
│ └── 所有者权限
└── 文件类型
文件类型标识:
| 符号 | 类型 | 说明 |
|---|---|---|
- |
普通文件 | 文本文件、二进制文件等 |
d |
目录文件 | Directory |
l |
符号链接 | Symbolic Link |
b |
块设备 | 如硬盘 /dev/sda |
c |
字符设备 | 如键盘、鼠标 |
p |
管道文件 | Named Pipe (FIFO) |
s |
套接字文件 | Socket |
实用示例:
bash
# 列出所有文件的详细信息(含隐藏文件)
ls -lha
# 按时间逆序列出文件
ls -ltr
# 只列出子目录
ls -F /opt/soft | grep /$
# 统计文件个数和目录个数
ls -l * | grep "^-" | wc -l # 文件个数
ls -l * | grep "^d" | wc -l # 目录个数
# 列出文件的绝对路径
ls | sed "s:^:`pwd`/:"
# 指定时间输出格式
ls -tl --time-style=full-iso
# 列出所有以"t"开头的目录详细内容
ls -l t*
# 列出以 s 开头的档案,新的排后面
ls -ltr s*
# 列出所有档案及目录(目录加"/",可执行档加"*")
ls -AF
# 递归列出当前目录下所有文件的绝对路径
find $PWD | xargs ls -ld
# 列出当前目录下所有文件的绝对路径(不递归)
find $PWD -maxdepth 1 | xargs ls -ld
ls 颜色含义(默认配置):
| 颜色 | 文件类型 |
|---|---|
| 蓝色 | 目录 |
| 绿色 | 可执行文件 |
| 红色 | 压缩文件 |
| 浅蓝色 | 链接文件 |
| 灰色 | 其他文件 |
提示 :在
/etc/bashrc中添加alias ls="ls --color"可启用彩色显示。
4.3 目录创建与删除
| 命令 | 用途 | 说明 |
|---|---|---|
mkdir dir1 |
创建单级目录 | 创建目录 |
mkdir dir1 dir2 |
一次创建多个同级目录 | 同时创建多个目录 |
mkdir -p /tmp/dir1/dir2 |
创建多级目录,父目录不存在时一并创建 | 递归创建目录树 |
mkdir -m 755 dir1 |
创建目录并直接设定权限 | 创建目录并指定权限 |
rmdir dir1 |
删除空目录(非空会报错) | 删除空目录 |
rmdir -p a/b/c |
从子到父逐级删除空目录 | 级联删除空目录 |
示例:
bash
mkdir project # 创建 project 目录
mkdir -p backup/2026/02 # 一次创建多级目录
mkdir -m 700 private # 创建仅自己可访问的目录
rmdir empty_dir # 删除空目录
rmdir -p a/b/c # 若 a/b/c、a/b、a 都为空则全部删除
大括号展开(一次创建多个目录):
bash
mkdir -pv /mnt/test/{x/m,y} # 创建 /mnt/test/x/m 和 /mnt/test/y
mkdir -pv /mnt/test2/{a,b}_{c,d} # 创建 a_c, a_d, b_c, b_d 四个目录
mkdir -pv scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}
# 一条命令创建完整项目目录结构
mkdir -m 777 test3 # 创建权限为 777 的目录
4.4 文件操作
touch 命令
| 命令 | 用途 | 说明 |
|---|---|---|
touch file1 |
创建空文件,或只更新已有文件的访问/修改时间 | 创建空文件或更新时间戳 |
touch -t 0712250000 file1 |
将文件时间设为指定时间(脚本批量改时间) | 设定指定时间戳(YYMMDDhhmm) |
touch -d "2026-01-01" file1 |
用可读日期字符串设定时间 | 设定指定日期 |
touch -a file1 |
只更改访问时间(atime) | --time=atime |
touch -m file1 |
只更改修改时间(mtime) | --time=mtime |
touch -r ref.txt file1 |
将 file1 的时间设为与 ref.txt 相同 | 参照文件时间戳 |
touch -c file1 |
不创建新文件,仅更新已有文件时间 | --no-create |
示例:
bash
touch newfile.txt # 创建空文件或刷新时间
touch -d "2026-01-15" file1 # 把 file1 时间设为 2026-01-15
touch file1 file2 file3 # 一次创建或更新多个文件
touch log2012.log log2013.log # 创建不存在的文件
touch -r log.log log2012.log # 使 log2012.log 与 log.log 时间戳相同
touch -t 201211142234.50 log.log # 设定文件时间戳(YYMMDDhhmm.ss)
cp 命令(复制)
| 参数 | 用途 | 说明 |
|---|---|---|
cp file1 file2 |
备份或生成副本 | 复制文件 |
cp -a dir1 dir2 |
完整备份目录(权限、时间、链接等) | 归档复制(相当于 -pdr,保留所有属性) |
cp -r dir1 dir2 |
递归复制整个目录树 | 递归复制目录 |
cp -i file1 file2 |
覆盖前确认,防止误覆盖 | 覆盖前询问(interactive) |
cp -f file1 file2 |
不询问直接覆盖 | 强制覆盖(force) |
cp -p file1 file2 |
保留权限、时间戳,便于备份 | 保留文件原属性(权限、时间戳等) |
cp -l file1 file2 |
省空间的"副本"(共享 inode) | 创建硬链接而非复制 |
cp -s file1 file2 |
创建指向 file1 的快捷方式 | 创建符号链接(快捷方式) |
cp dir/* . |
把某目录下所有文件拷到当前目录 | 复制目录下所有文件到当前目录 |
cp -L src dest |
复制链接指向的文件本身(默认行为) | 跟随符号链接 |
cp -P src dest |
复制链接本身,不跟随 | 保留符号链接 |
示例:
bash
cp config.conf config.conf.bak # 备份单个文件
cp -r /etc/nginx /root/nginx_backup # 备份整个目录
cp -a source dest # 完整克隆目录
cp -i *.txt backup/ # 复制到 backup,覆盖前询问
cp dir/* . # 把 dir 下所有文件拷到当前目录
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/ # 复制多个指定文件到 /tmp
cp -L /etc/rc /tmp/rc.2 # 复制链接指向的文件;cp -P /etc/rc /tmp/rc.3 复制链接本身
install 命令
用途:创建目录、复制文件并可同时设定权限,常用于安装脚本或部署。
| 用法 | 说明 |
|---|---|
install -d dir1 dir2 |
创建目录(同 mkdir -p) |
install file dest |
复制文件到 dest(若 dest 为目录则复制到该目录下) |
install -D file path |
创建 path 的父目录并复制 file 到 path(等价于 mkdir -p 父目录 && cp) |
install -m 755 script /usr/local/bin/ |
复制并设定权限为 755 |
install -t DEST src1 src2 |
先指定目标目录,再指定多个源文件 |
示例:
bash
install -d a/b/c e/f # 同 mkdir -p a/b/c e/f
install -D x a/b/c # 等价于 mkdir -p a/b && cp x a/b/c
install -m 755 script.sh /usr/local/bin/ # 复制并设为可执行
install -t /opt/myapp bin/* # 将 bin 下所有文件安装到 /opt/myapp
mv 命令(移动/重命名)
| 参数 | 用途 | 说明 |
|---|---|---|
mv file1 file2 |
重命名文件或移动到另一目录 | 移动/重命名文件 |
mv dir1 new_dir |
重命名或移动目录 | 移动/重命名目录 |
mv -i file1 file2 |
覆盖前确认 | 覆盖前询问 |
mv -f file1 file2 |
强制覆盖,不提示 | 强制覆盖 |
mv -u file1 file2 |
仅当源比目标新时才移动(做"更新"式移动) | 仅当源文件更新时才移动 |
mv -t DEST src1 src2 |
先指定目标目录,再指定多个源 | 批量移动到同一目录 |
mv -b file1 file2 |
覆盖前为 file2 做备份(~ 后缀) | --backup |
示例:
bash
mv oldname.txt newname.txt # 重命名文件
mv file.txt /tmp/ # 移动到 /tmp
mv -i *.bak backup/ # 移动并覆盖前询问
mv -u new.log /var/log/ # 仅当 new.log 更新时才覆盖目标
mv -t /backup log1.txt log2.txt log3.txt # 将多个文件移动到 /backup
mv test.log -b test2.log # 覆盖前备份 test2.log
# 若目标不存在:mv dir1 newname 为重命名;若目标为已存在目录则 dir1 被移入该目录
rm 命令(删除)
| 参数 | 用途 | 说明 |
|---|---|---|
rm file1 |
删除单个文件(无写权限或只读会提示) | 删除文件 |
rm -f file1 |
强制删除,不报错、不询问 | 强制删除,不提示(force) |
rm -i file1 |
每个文件删除前确认 | 删除前询问(interactive) |
rm -r dir1 |
递归删除目录及其内容 | 递归删除目录(recursive) |
rm -rf dir1 |
不经确认递归删除(慎用) | 递归强制删除目录及内容 |
rm -rf dir1 dir2 |
一次删除多个目录 | 同时删除多个目录 |
示例:
bash
rm trash.txt # 删除文件
rm -i *.log # 逐个确认后删除
rm -r temp_dir # 删除目录(会提示确认)
rm -rf cache_dir # 强制递归删除(不可恢复)
rm -rf test2 # 递归删除且不逐一确认
rm -- -f # 删除以 -f 开头的文件名(-- 表示选项结束)
自定义"回收站"示例(避免误删):
bash
# 定义函数:将参数中的文件移动到带时间戳的临时目录
myrm(){ D=/tmp/$(date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }
alias rm='myrm' # 用别名替代 rm(可选,慎用)
# 使用:rm 1.log 2.log → 文件被移到 /tmp/20260212103045/ 等目录
危险警告 :
rm -rf /会删除整个系统,请务必小心!
4.5 链接文件
⛓️ 硬链接
直接指向
直接指向
📎 lnk1
💾 inode - 数据块
📄 file1
🔗 软链接 - 符号链接
指向路径
指向
📎 lnk1
📄 file1
💾 inode - 数据块
| 命令 | 用途 | 说明 |
|---|---|---|
ln -s file1 lnk1 |
为文件或目录建"快捷方式",可跨分区 | 创建软链接(符号链接) |
ln file1 lnk1 |
多名字指向同一 inode,省空间且同删才丢 | 创建硬链接 |
示例:
bash
ln -s /usr/local/app/bin/run run # 当前目录下 run 指向该可执行文件
ln -s ../config.yaml config.yaml # 相对路径软链接
ln file.txt file_hard.txt # 为 file.txt 建硬链接
软链接 vs 硬链接对比:
| 特性 | 软链接(Symbolic Link) | 硬链接(Hard Link) |
|---|---|---|
| 类似概念 | Windows 快捷方式 | 文件的别名 |
| 可否跨分区 | 可以 | 不可以 |
| 可否链接目录 | 可以 | 不可以 |
| inode 号 | 不同(有自己的 inode) | 相同(共享 inode) |
| 源文件删除后 | 链接失效(悬挂链接) | 仍可访问 |
| 文件大小 | 很小(只存路径名) | 与原文件相同 |
4.6 其他文件操作
| 命令 | 用途 | 说明 |
|---|---|---|
file file1 |
判断是文本、二进制、链接等,便于后续处理 | 检测文件类型 |
basename /usr/local/bin |
从路径中取出最后一段(文件名或目录名) | 提取路径中的文件名(bin) |
dirname /usr/local/bin |
从路径中取出目录部分,脚本中拼路径用 | 提取路径中的目录部分(/usr/local) |
tree |
直观查看目录层级,做文档或排查用 | 树状显示目录结构 |
iconv -l |
查看系统支持的编码名 | 列出已知编码 |
iconv -f GBK -t UTF-8 input > output |
把文件从 GBK 转成 UTF-8 | 转换文件编码 |
cp dir/* . |
把某目录下所有文件拷到当前目录 | 复制目录下所有文件到当前目录 |
ls *[0-9]* |
列出名字里含数字的文件或目录 | 显示包含数字的文件名和目录名 |
示例:
bash
file /bin/ls # 输出:ELF 64-bit LSB executable
file README.md # 输出:ASCII text
basename /usr/local/bin/nginx # 输出:nginx
dirname /usr/local/bin/nginx # 输出:/usr/local/bin
tree -L 2 /etc/nginx # 显示 /etc/nginx 下两层目录树
iconv -f GBK -t UTF-8 old.txt > new.txt # GBK 转 UTF-8
4.7 路径知识
绝对路径 vs 相对路径:
| 类型 | 说明 | 示例 |
|---|---|---|
| 绝对路径 | 从根目录 / 开始的完整路径 |
/home/user1/file.txt |
| 相对路径 | 从当前目录开始的路径 | ./file.txt 或 ../dir/file.txt |
特殊路径符号:
| 符号 | 含义 |
|---|---|
. |
当前目录 |
.. |
上一级目录(父目录) |
~ |
当前用户的家目录 |
~username |
指定用户的家目录 |
- |
前一个工作目录 |
文件名限制:
- 单一文件或目录最大名称长度:255 个字符
- 完整路径名称最大长度:4096 个字符
- 避免使用特殊字符:
* ? < > ; & ! [ ] | ' " ' ( ) { }
五、文件搜索命令
5.1 搜索命令对比
🔍 文件搜索命令体系
速度慢 功能强
范围小
🔎 find
实时遍历文件系统
功能最强大
⚡ locate
查询预建数据库
速度最快
🎯 which
在 PATH 中搜索
查找可执行文件
📚 whereis
搜索二进制/源码/手册
范围广于 which
四大搜索命令详细对比:
| 特性 | find |
locate |
which |
whereis |
|---|---|---|---|---|
| 搜索方式 | 实时遍历目录树 | 查询预建数据库 | 搜索 $PATH 路径 | 搜索标准路径 |
| 搜索速度 | 慢(实时扫描) | 极快(查数据库) | 快 | 快 |
| 搜索范围 | 任意路径 | 全系统 | 仅 $PATH 目录 | 标准系统路径 |
| 搜索条件 | 名称/大小/权限/时间/类型等 | 仅文件名 | 仅可执行文件名 | 二进制/源码/手册 |
| 实时性 | 实时 | 有延迟(需 updatedb) | 实时 | 实时 |
| 可执行操作 | 可对结果执行命令 | 仅显示路径 | 仅显示路径 | 仅显示路径 |
| 典型用途 | 复杂条件搜索、批量操作 | 快速查找文件位置 | 确认命令位置 | 查找程序相关文件 |
5.2 find 命令详解
用途:在指定目录下按名称、类型、大小、时间、权限等条件查找文件,并可对结果执行命令(-exec),适合批量清理、备份、统计。
按时间搜索:
⏰ find 时间参数
👀 -atime: 访问时间
✏️ -mtime: 内容修改时间
🔧 -ctime: 属性修改时间
⏪ +n: n天前
⏩ -n: n天内
📌 n: 恰好n天前
bash
# 按时间搜索
find / -name file1 # 按名称搜索
find / -user user1 # 搜索属于 user1 的文件
find /usr/bin -type f -atime +100 # 100天内未访问的文件
find /usr/bin -type f -mtime -10 # 10天内修改过的文件
find /home -newer file1 # 比 file1 更新的文件
# 按大小搜索
find /tmp -size +2M # 大于 2M 的文件
find /tmp -size -2M # 小于 2M 的文件
find /tmp -size 2M # 等于 2M 的文件
# 按类型搜索
find /var/run -type p # 管道文件
find /var/run -type s # 套接字文件
find /dev -type b # 块设备文件
find . -type f # 普通文件
find . -type d # 目录
find . -type l # 符号链接
# 按权限搜索
find /tmp -perm 755 # 权限恰好为 755
find /tmp -perm -222 # 所有类别用户都有写权限
find / -perm -u+s # 具有 SUID 的文件
# 按用户搜索
find / -user user1 # 属于 user1 的文件
find / -group group1 # 属于 group1 的文件
find / -nouser # 没有属主的文件
find / -nogroup # 没有属组的文件
# 搜索并执行操作
find / -name "*.rpm" -exec chmod 755 '{}' \; # 修改权限
find /tmp -name "*.sh" -exec chmod u+x {} \; # 添加执行权限
find . -name "*.txt" -exec cp {} {}.bak \; # 备份文件
find . -name "*.old" -exec rm -rf {} \; # 删除文件
find /tmp -perm 644 -exec ls -l {} \; # 列出详情
# 组合条件
find / -nogroup -a -nouser # -a 表示 AND
find / -name "*.txt" -o -name "*.log" # -o 表示 OR
5.3 locate 命令
用途:按文件名在预建数据库中快速查找路径,适合"找名字已知的文件在哪",速度远快于 find。
bash
locate *.ps # 查找 .ps 文件
locate -i filename # 不区分大小写
locate -n 20 passwd # 只显示前 20 条
sudo updatedb # 手动更新数据库(新建文件后建议执行)
示例:
bash
locate nginx.conf # 快速找 nginx 配置位置
locate -i "readme" # 不区分大小写找 readme
locate /etc/sh # 搜索 /etc 下以 sh 开头的文件
locate /etc/m # 搜索 /etc 下以 m 开头的文件
updatedb # 更新索引后 locate 才能找到新文件
注意 :locate 使用的数据库通常每 24 小时自动更新一次。新建或删除的文件在
updatedb前无法被检索到。
5.4 which / whereis
which 用途 :在 PATH 中查命令对应的可执行文件路径,确认用的是哪个程序。
whereis 用途:查命令的二进制、手册、源码位置,比 which 范围大。
bash
# which 示例
which passwd # 输出: /bin/passwd
which fdisk # 输出: /usr/sbin/fdisk
which -a python # 显示所有匹配的路径
which which # 查找 which 自身
which cd # 内置命令可能无路径或显示 shell 内置
# whereis 示例
whereis man # 显示 man 的二进制、源码、手册位置
whereis -b man # 仅查找二进制文件
whereis -m man # 仅查找手册文件
whereis -s man # 仅查找源代码
whereis svn # 与 svn 相关的二进制、手册、源码
whereis -b svn # 只查二进制
5.5 find 更多实用示例
bash
# 批量缩放图片(配合 ImageMagick)
find . -maxdepth 1 -name "*.jpg" -print -exec convert "{}" -resize 80x60 "thumbs/{}" \;
# 将找到的 .txt 文件备份为 .txt.old
find -name "*.txt" -exec cp {} {}.old \;
# 删除所有 .old 文件
find -name "*.old" -exec rm -rf {} \;
# 在整个系统中查找既没有属主又没有属组的文件(危险文件)
find / -nogroup -a -nouser
# find 执行动作说明
# -print 默认动作,打印结果
# -ls 用 ls 格式显示找到的文件
# -ok cmd 执行命令前询问用户
# -exec cmd 直接执行命令,不询问
# 示例:给找到的 .sh 文件添加执行权限
find /tmp/ -name "*.sh" -exec chmod u+x {} \;
# 示例:列出找到文件的详细信息
find /tmp -perm 644 -exec ls -l {} \;
# 忽略可移动设备搜索
find / -xdev -name "*.rpm"
六、文件查看与文本处理
6.1 文件查看命令对比
📖 文件查看命令
反向版本
增强版本
互补
🐱 cat - 一次显示全部
🔄 tac - 反向显示
📄 more - 分页向前
📑 less - 分页双向
⬆️ head - 查看头部
⬇️ tail - 查看尾部
🔢 nl - 显示行号
命令对比表:
| 命令 | 方向 | 分页 | 搜索 | 编辑 | 适用场景 |
|---|---|---|---|---|---|
cat |
正向 | 否 | 否 | 否 | 小文件查看、合并文件 |
tac |
反向 | 否 | 否 | 否 | 反向查看日志 |
more |
正向 | 是 | 是 | 否 | 中等文件分页查看 |
less |
双向 | 是 | 是 | 否 | 大文件查看(推荐) |
head |
前 N 行 | 否 | 否 | 否 | 快速查看文件开头 |
tail |
后 N 行 | 否 | 否 | 否 | 查看日志、实时监控 |
nl |
正向 | 否 | 否 | 否 | 需要行号的场景 |
常用示例:
bash
# cat 基础用法
cat file1 # 查看文件
cat -n file1 # 显示行号(所有行)
cat -b file1 # 对非空行编号(空白行不编号)
cat -s file1 # 连续多行空白压缩为一行
cat -A file1 # 显示特殊字符(-vET 整合参数)
cat -E file1 # 显示行尾换行符 $
cat -T file1 # 将 Tab 显示为 ^I
cat file1 file2 > merged.txt # 合并文件
cat file1 | command > result.txt # 配合管道处理
cat -n log2012.log > log.log # 带行号写入另一文件
cat -b log2012.log log2013.log >> log.log # 非空行编号并追加
# tac - 反向显示
tac file1 # 从最后一行开始显示
# more / less 分页查看
more file1 # 分页查看(空格翻页,q 退出)
more +3 file1 # 从第 3 行开始显示
more +/pattern file1 # 从首次出现 pattern 的前两行开始显示
more -5 file1 # 每屏 5 行
ls -l | more -5 # 管道分页,每页 5 条
less file1 # 增强分页(支持上下翻页)
ps -ef | less # 进程列表分页查看
less log1.log log2.log # 多文件:n 下一文件,p 上一文件
# head / tail
head -20 file1 # 查看前 20 行
head -n 20 file1 # 同上(标准写法)
head -n -6 file1 # 输出除最后 6 行外的全部内容
head -c 20 file1 # 前 20 字节;head -c -32 file1 为除最后 32 字节
tail -20 file1 # 查看后 20 行
tail -n +5 file1 # 从第 5 行开始显示到末尾
tail -f /var/log/messages # 实时追踪文件内容
tail -F /var/log/messages # 实时追踪(文件重建后继续追踪)
tail -f --pid=PID file1 # 追踪到进程 PID 结束后停止
ping 192.168.1.1 > test.log & ; tail -f test.log # 后台 ping 并实时看输出
# nl - 带行号显示
nl file1 # 显示行号(默认空行不编号)
nl -b a file1 # 所有行都编号(包括空行)
nl -b t file1 # 空行不编号(默认)
nl -n ln file1 # 行号左对齐
nl -n rn file1 # 行号右对齐,不补零
nl -n rz file1 # 行号右对齐,补零
nl -w 5 file1 # 行号占 5 位宽
nl -b a -n rz -w 4 file1 # 组合:所有行编号,右对齐补零,4位宽
# od - 以二进制形式读取文件
od -c file1 # 以字符形式显示
od -x file1 # 以十六进制显示
less / more 快捷键:
| 快捷键 | 说明 |
|---|---|
Space |
向下翻一页 |
b |
向上翻一页 |
Enter |
向下翻一行 |
k |
向上翻一行 |
Ctrl+d |
向下翻半页 |
Ctrl+u |
向上翻半页 |
/keyword |
向下搜索 |
?keyword |
向上搜索 |
n |
下一个搜索结果 |
N |
上一个搜索结果 |
q |
退出 |
:f |
显示文件名和当前行号 |
6.2 文本处理三剑客
⚔️ 文本处理三剑客
📥 输入文本
🔍 grep - 文本搜索 按行过滤
✂️ sed - 流编辑器 替换删除
📊 awk - 文本分析 按列处理
📤 输出结果
三剑客对比:
| 特性 | grep |
sed |
awk |
|---|---|---|---|
| 核心功能 | 文本搜索/过滤 | 文本替换/编辑 | 文本分析/格式化 |
| 处理单位 | 行 | 行 | 字段(列) |
| 是否修改文件 | 否 | 可选(-i) | 否 |
| 正则支持 | 支持 | 支持 | 支持 |
| 编程能力 | 弱 | 中 | 强(类 C 语言) |
| 适用场景 | 快速查找、过滤 | 批量替换、删除 | 数据提取、报表 |
grep 常用用法
用途:在文件或管道中按行匹配文本,用于过滤日志、配置、命令输出,支持正则。
bash
grep "Aug" /var/log/messages # 查找包含 "Aug" 的行
grep ^Aug /var/log/messages # 查找以 "Aug" 开头的行
grep [0-9] /var/log/messages # 查找包含数字的行
grep -R "Aug" /var/log/ # 递归搜索目录
grep -i "error" file1 # 不区分大小写
grep -n "pattern" file1 # 显示行号
grep -c "pattern" file1 # 统计匹配行数
grep -v "pattern" file1 # 反向匹配(不包含)
grep -E "pattern1|pattern2" file1 # 扩展正则(OR)
更多示例:
bash
grep -r "TODO" src/ # 在源码中找 TODO
grep -l "error" *.log # 只输出包含 error 的文件名
grep -E "error|warning" app.log # 同时匹配多个关键词
ps aux | grep nginx # 过滤出 nginx 进程
sed 常用用法
用途:流式编辑文本,做批量替换、删除行、提取行,不改原文件(除非用 -i)。
bash
# 基本替换
sed 's/old/new/g' file.txt # 全局替换
sed -i 's/old/new/g' file.txt # 直接修改文件
sed 's/stringa1//g' file.txt # 删除指定字符串
# 删除操作
sed '/^$/d' file.txt # 删除空行
sed '/^[[:space:]]*$/d' file.txt # 删除空白行(含空格/Tab)
sed '/^[[:space:]]*#/d' file.txt # 删除注释行
sed '/^#/d; /^$/d' file.txt # 同时删除注释和空行
sed '/^[[:space:]]*#/d;/^[[:space:]]*$/d' file.txt # 删除注释和空白行
sed -e 's/ *$//' file.txt # 删除行尾空格
# 显示指定行
sed -n '1,5p' file.txt # 显示第 1-5 行
sed -n '1,5p;5q' file.txt # 显示第 1-5 行后退出(更快)
sed -n '5p' file.txt # 显示第 5 行
sed -n '5p;5q' file.txt # 只显示第 5 行
sed -e '1d' file.txt # 删除第 1 行
sed -n '/pattern/p' file.txt # 显示匹配的行
# 高级替换
sed -e 's/00*/0/g' file.txt # 多个零替换为单个零
echo 'example' | tr '[:lower:]' '[:upper:]' # 小写转大写
更多示例:
bash
sed -n '10,20p' file.txt # 只打印第 10--20 行
sed -i.bak 's/foo/bar/g' file.txt # 替换并备份为 file.txt.bak
sed '/^#/d' config.conf # 删除所有注释行
awk 常用用法
bash
# 基本列提取
echo "a b c" | awk '{print $1}' # 输出第一列
echo "a b c" | awk '{print $1,$3}' # 输出第一和第三列
awk '{print $0}' file.txt # 输出整行
awk '{print NR, $0}' file.txt # 输出行号和整行
# 指定分隔符
awk -F: '{print $1}' /etc/passwd # 以 : 为分隔符
awk -F'\t' '{print $1}' file.txt # 以 Tab 为分隔符
# 行过滤
cat file.txt | awk 'NR%2==1' # 输出奇数行(删除偶数行)
cat file.txt | awk 'NR%2==0' # 输出偶数行(删除奇数行)
awk 'NR>=5 && NR<=10' file.txt # 输出第 5-10 行
awk 'length>80' file.txt # 输出长度超过 80 的行
# 统计计算
awk '{sum+=$1} END {print sum}' file.txt # 求和
awk 'END {print NR}' file.txt # 统计行数
awk '{if($1>max) max=$1} END {print max}' f # 求最大值
awk 用途:按列处理文本,做统计、报表、字段提取,支持条件与简单编程。
更多示例:
bash
awk -F: '$3>=1000 {print $1}' /etc/passwd # 列出普通用户名(UID≥1000)
awk '{print $NF}' file.txt # 打印每行最后一列
awk 'NR==1 || $3>50' data.csv # 表头 + 第3列大于50的行
6.3 其他文本处理命令
| 命令 | 用途 | 说明 |
|---|---|---|
sort file1 |
按行排序,默认字典序 | 排序文件内容 |
sort -r file1 |
倒序输出 | 逆序排序 |
sort -n file1 |
按数字大小排序 | 按数字排序 |
sort -k2 file1 |
按第二列排序 | 按第二列排序 |
uniq |
合并相邻重复行(常与 sort 配合) | 去除相邻重复行 |
| `sort file1 file2 | uniq` | 两文件合并去重(并集) |
| `sort file1 file2 | uniq -d` | 只保留两文件都出现的行 |
| `sort file1 file2 | uniq -u` | 只保留仅在一个文件中出现的行 |
wc -l file1 |
统计行数,脚本中常用 | 统计行数 |
wc -w file1 |
统计单词数 | 统计单词数 |
wc -c file1 |
统计字节数 | 统计字节数 |
cut -d: -f1 /etc/passwd |
按列截取字段,如提用户名 | 按分隔符截取字段 |
paste file1 file2 |
按行把两文件列并排 | 合并两个文件的列 |
paste -d '+' file1 file2 |
指定分隔符合并列 | 指定分隔符合并 |
tr 'a-z' 'A-Z' |
字符替换/删除,如大小写转换 | 小写转大写 |
comm file1 file2 |
对已排序文件做差集/交集(三列输出) | 逐行比较两个已排序文件 |
diff file1 file2 |
显示两文件差异,打补丁或对比用 | 比较两个文件的差异 |
示例:
bash
sort -n data.txt # 按数字排序
sort -k2 -t',' csv.txt # 按逗号分隔的第二列排序
sort -t: -k3 -n /etc/passwd # 按 : 分隔,第 3 列数字排序
sort -t: -k3 -nr /etc/passwd # 第 3 列数字逆序
sort -n -u file.txt # 数字排序并去重(-u 同 sort | uniq)
sort file1 file2 | uniq -d # 两文件共有行
sort file.txt | uniq -c # 统计每行出现次数
sort file.txt | uniq -u # 只显示不重复的行
wc -l *.log # 统计各日志行数
wc -l file.txt # 仅输出行数(管道中常用)
ls -l | wc -l # 统计当前目录文件数
cut -d: -f1 /etc/passwd # 第 1 列(用户名)
cut -d: -f1,3 /etc/passwd # 第 1 与第 3 列
cut -d: -f1-3 /etc/passwd # 第 1 到第 3 列
cut -d: -f1,7 /etc/passwd # 用户名与 shell
paste -d':' users ids # 两文件按行用 : 拼成一列
tr -d '\r' < win.txt > unix.txt # 删除回车符(^M)
tr 'a-z' 'A-Z' < file.txt # 小写转大写
echo $PATH | tr ':' '\n' # PATH 按行显示,便于阅读
tr -s '\n' < file.txt # 连续空行压成一行
diff old.conf new.conf # 看配置改动
comm -12 <(sort a.txt) <(sort b.txt) # 两文件交集(需先排序)
6.4 字符编码与格式转换
| 命令 | 用途 | 说明 |
|---|---|---|
dos2unix file.txt |
去掉 Windows 换行符 \r,避免脚本报错 | DOS 格式转 UNIX(\r\n → \n) |
unix2dos file.txt |
给文件加上 \r,便于在 Windows 下正常换行 | UNIX 格式转 DOS(\n → \r\n) |
iconv -f GBK -t UTF-8 in.txt > out.txt |
把 GBK 等编码转成 UTF-8 | 转换文件编码 |
iconv -l |
查看本机支持的编码名称 | 列出所有支持的编码 |
recode ..HTML < page.txt > page.html |
将文本转为 HTML 等格式 | 转换为 HTML |
| `recode -l | more` | 查看 recode 支持的转换 |
示例:
bash
dos2unix script.sh # 脚本在 Linux 下执行前常用
iconv -f GBK -t UTF-8 old.csv > new.csv # 中文文件转 UTF-8
iconv -l | grep -i gb # 查看 GB 相关编码
换行符差异:
- Windows:
\r\n(^M$)- 回车+换行- Linux/Unix:
\n($)- 换行- Mac 旧版:
\r(^M)- 回车
6.5 文件比较命令
| 命令 | 用途 | 说明 |
|---|---|---|
diff file1 file2 |
查看两文件差异,生成补丁或审阅改动 | 比较两个文件的差异 |
diff -u file1 file2 |
输出统一 diff 格式,便于 patch 使用 | 统一格式输出差异 |
diff -r dir1 dir2 |
递归对比两目录下同名文件 | 递归比较两个目录 |
comm file1 file2 |
对已排序文件做集合运算(需先 sort) | 逐行比较两个已排序文件 |
comm -1 file1 file2 |
只显示第二列(仅在 file2 中的行) | 显示仅在 file2 中的行 |
comm -2 file1 file2 |
只显示第一列(仅在 file1 中的行) | 显示仅在 file1 中的行 |
comm -3 file1 file2 |
只显示第三列(两文件共有行) | 显示两文件共有的行 |
cmp file1 file2 |
二进制或文本逐字节比较,只报第一处不同 | 按字节比较文件 |
示例:
bash
diff -u old.c new.c > fix.patch # 生成补丁
patch old.c < fix.patch # 应用补丁
diff -rq dir1 dir2 # 只报哪些文件不同(-q 简要)
comm -12 <(sort a.txt) <(sort b.txt) # 两文件交集
cmp bin1 bin2 # 两文件是否完全相同,不同则输出首处差异位置
七、文件权限与属性管理
7.1 权限体系
📄 文件/目录
👤 所有者 Owner
👥 所属组 Group
🌍 其他人 Other
👁️ r 读 4
✏️ w 写 2
🚀 x 执行 1
👁️ r 读 4
✏️ w 写 2
🚀 x 执行 1
👁️ r 读 4
✏️ w 写 2
🚀 x 执行 1
权限对文件和目录的不同含义:
| 权限 | 对文件 | 对目录 |
|---|---|---|
r (读) |
可以读取文件内容 | 可以列出目录中的文件(ls) |
w (写) |
可以修改文件内容 | 可以在目录中创建/删除/重命名文件 |
x (执行) |
可以执行文件 | 可以进入目录(cd) |
7.2 权限管理命令
🔐 权限管理三兄弟
🔑 chmod - 改变权限
👤 chown - 改变所有者
👥 chgrp - 改变所属组
用途简述:
| 命令 | 用途 |
|---|---|
chmod |
修改文件/目录的读®写(w)执行(x)权限,控制谁可以访问 |
chown |
修改文件所有者,常用于部署时把文件交给运行服务的用户 |
chgrp |
修改文件所属组,配合组权限做团队共享 |
bash
# chmod - 修改权限
chmod 755 file1 # 数字方式:rwxr-xr-x
chmod u+x file1 # 给所有者添加执行权限
chmod go-rwx dir1 # 移除组和其他人的所有权限
chmod a+r file1 # 所有人添加读权限
chmod u=rwx,g=rx,o=r file1 # 精确设置权限
chmod -R 755 dir1 # 递归修改目录权限
# chown - 修改所有者
chown user1 file1 # 修改文件所有者
chown user1:group1 file1 # 同时修改所有者和组
chown -R user1 dir1 # 递归修改目录所有者
# chgrp - 修改所属组
chgrp group1 file1 # 修改文件所属组
chgrp -R group1 dir1 # 递归修改
示例:
bash
chmod 755 script.sh # 脚本可执行:自己全权限,他人读执行
chmod 600 ~/.ssh/id_rsa # 私钥仅自己可读写的
chown nginx:nginx /var/www/html # 把网站目录交给 nginx 用户
chgrp developers project/ # 把 project 目录属组改为 developers
7.3 特殊权限位
| 权限位 | 用途 | 设置方法 | 说明 |
|---|---|---|---|
| SUID | 让普通用户执行时临时拥有所有者权限(如 passwd) | chmod u+s file |
执行文件时以文件所有者身份运行 |
| SGID | 目录下新建文件自动继承目录属组,便于协作 | chmod g+s dir |
新建文件继承目录的组 |
| Sticky Bit | 目录内只有所有者能删自己的文件,如 /tmp | chmod o+t dir |
只有文件所有者才能删除文件(如 /tmp) |
bash
chmod u+s /bin/file1 # 设置 SUID
chmod u-s /bin/file1 # 取消 SUID
chmod g+s /home/public # 设置 SGID
chmod g-s /home/public # 取消 SGID
chmod o+t /home/public # 设置 Sticky Bit
chmod o-t /home/public # 取消 Sticky Bit
find / -perm -u+s # 查找所有 SUID 文件
7.4 文件特殊属性 (chattr/lsattr)
bash
# chattr - 设置特殊属性
chattr +i file1 # 设为不可变(不能删除、修改、重命名、链接)
chattr -i file1 # 取消不可变
chattr +a file1 # 只能追加内容(适用于日志文件)
chattr +c file1 # 自动压缩/解压
chattr +d file1 # dump 备份时忽略此文件
chattr +s file1 # 安全删除(数据区域清零)
chattr +S file1 # 同步写入磁盘
chattr +u file1 # 删除后可恢复
# lsattr - 查看特殊属性
lsattr file1
lsattr /etc/resolv.conf
chattr 参数说明:
| 参数 | 说明 | 典型用途 |
|---|---|---|
+i |
不可变文件(immutable) | 保护关键系统文件 |
+a |
仅追加(append only) | 保护日志文件 |
+c |
自动压缩 | 节省磁盘空间 |
+d |
不做 dump 备份 | 排除备份 |
+s |
安全删除 | 敏感数据 |
+S |
同步写入 | 重要数据 |
+u |
可恢复删除 | 防止误删 |
实际应用示例:
bash
# 保护系统关键文件
chattr +i /etc/resolv.conf # 防止 DNS 配置被修改
chattr +i /etc/passwd # 保护用户数据库
chattr +i /etc/shadow # 保护密码文件
# 保护日志文件
chattr +a /var/log/messages # 只允许追加,不允许删除
# 需要修改时先取消保护
chattr -i /etc/passwd
# ... 进行修改 ...
chattr +i /etc/passwd
八、打包与压缩
8.1 压缩格式对比
🔧 独立压缩工具
💚 gzip - 单文件压缩
🟠 bzip2 - 单文件压缩
📮 zip - 打包+压缩
🔴 rar - 打包+压缩
⬛ 7z - 打包+压缩
📦 tar 打包系列
📁 tar - 仅打包
🗜️ tar.gz - tar + gzip
🗜️ tar.bz2 - tar + bzip2
🗜️ tar.xz - tar + xz
压缩格式性能对比:
| 格式 | 压缩率 | 压缩速度 | 解压速度 | 跨平台 | 保留原文件 | 适用场景 |
|---|---|---|---|---|---|---|
tar |
无压缩 | 最快 | 最快 | Linux | 否 | 仅打包 |
tar.gz |
中等 | 快 | 快 | 广泛 | 否 | 日常推荐 |
tar.bz2 |
高 | 慢 | 慢 | 广泛 | 否 | 大文件归档 |
tar.xz |
最高 | 最慢 | 中等 | 广泛 | 否 | 发行版打包 |
gzip |
中等 | 快 | 快 | 广泛 | 否 | 单文件压缩 |
bzip2 |
高 | 慢 | 慢 | 广泛 | 否 | 单文件高压缩 |
zip |
一般 | 快 | 快 | 最佳 | 是 | 跨平台传输 |
rar |
高 | 中 | 中 | 广泛 | 是 | Windows 兼容 |
7z |
极高 | 慢 | 中 | 广泛 | 是 | 极致压缩+加密 |
8.2 tar 命令详解
用途:打包目录或大量文件为单一归档(tar),并可配合 gzip/bzip2/xz 压缩,用于备份、发布、迁移。
bash
# 创建归档
tar -cvf archive.tar file1 # 创建 tar 包
tar -cvf archive.tar file1 file2 dir1 # 打包多个文件/目录
# 创建压缩归档
tar -cvzf archive.tar.gz dir1 # 创建 gzip 压缩包
tar -cvjf archive.tar.bz2 dir1 # 创建 bzip2 压缩包
tar -cvJf archive.tar.xz dir1 # 创建 xz 压缩包
# 查看归档内容
tar -tf archive.tar # 列出包内容
tar -tzf archive.tar.gz # 列出 gz 包内容
# 解压归档
tar -xvf archive.tar # 解压 tar 包
tar -xvf archive.tar -C /tmp # 解压到指定目录
tar -xvzf archive.tar.gz # 解压 gzip 包
tar -xvjf archive.tar.bz2 # 解压 bzip2 包
tar -xvJf archive.tar.xz # 解压 xz 包
示例:
bash
tar -cvzf backup-$(date +%Y%m%d).tar.gz /etc/nginx # 按日期备份 nginx 配置
tar -xvf data.tar -C /opt/app # 解压到 /opt/app
tar -tzf package.tar.gz | head -20 # 只看压缩包前 20 个文件
tar 参数速记:
| 参数 | 含义 | 记忆方法 |
|---|---|---|
-c |
创建(Create) | Create |
-x |
解压(Extract) | Extract |
-t |
列出(lisT) | List |
-v |
详细(Verbose) | Verbose |
-f |
文件名(File) | File |
-z |
gzip 压缩 | gzip |
-j |
bzip2 压缩 | bzip2 → j |
-J |
xz 压缩 | xz → J |
-C |
指定目录 | Change dir |
8.3 其他压缩/解压命令
用途 :gzip/bzip2 单文件压缩;zip/unzip 跨平台压缩与解压;rar/unrar 高压缩比或与 Windows 交换。
bash
# gzip / gunzip
gzip file1 # 压缩(替换原文件)
gzip -9 file1 # 最大压缩率
gzip -k file1 # 保留原文件
gunzip file1.gz # 解压
# bzip2 / bunzip2
bzip2 file1 # 压缩
bunzip2 file1.bz2 # 解压
# zip / unzip
zip file1.zip file1 # 压缩单个文件
zip -r archive.zip dir1 # 递归压缩目录
zip -r file1.zip file1 file2 dir1 # 压缩多个文件/目录
unzip file1.zip # 解压
unzip file1.zip -d /tmp # 解压到指定目录
# rar / unrar
rar a file1.rar test_file # 创建 rar 包
rar a file1.rar file1 file2 dir1 # 压缩多个文件
rar x file1.rar # 解压
unrar x file1.rar # 解压
示例:
bash
gzip -k -9 big.log # 最大压缩并保留原文件
zip -r release.zip src/ # 打包源码发给他人
unzip -o package.zip -d /opt # 解压到 /opt,-o 覆盖不询问
九、磁盘与文件系统管理
9.1 磁盘空间查看
| 命令 | 用途 | 说明 |
|---|---|---|
df -h |
看各分区总容量、已用、可用、挂载点,排查"磁盘满" | 显示已挂载分区的使用情况(人类可读) |
df -i |
看 inode 是否用尽(小文件极多时先查此项) | 显示 inode 使用情况 |
df -T |
看分区文件系统类型(ext4/xfs 等) | 显示文件系统类型 |
du -sh dir1 |
看某目录总占用大小 | 显示目录占用空间 |
du -h --max-depth=1 |
看当前目录下各一级子目录占用 | 显示各子目录占用空间 |
du -h --max-depth=1 work/testing/* |
看指定路径下各子目录大小 | 显示指定目录的子目录大小 |
| `du -sk * | sort -rn` | 按占用从大到小排,找"大户" |
ls -lSr |
当前目录下文件按大小升序 | 按文件大小排序显示 |
lsblk |
看磁盘、分区、挂载点树状关系 | 列出所有块设备信息 |
fdisk -l |
看分区表(分区、起止、类型),规划分区前用 | 列出所有磁盘分区 |
示例:
bash
df -h # 看哪个分区快满了
df -i # 看是否 inode 用尽
du -sh /var/log/* # 看各日志目录大小
du -h --max-depth=1 /home # 看各用户家目录占用
du -sk * | sort -rn | head -10 # 当前目录下最大的 10 个
fdisk -l # 列出磁盘与分区
查看 RPM/DEB 包占用空间:
bash
# Fedora/RedHat 系统:按大小显示已安装的 rpm 包
rpm -q -a --qf '%10{SIZE}\t%{NAME}\n' | sort -k1,1n
# Ubuntu/Debian 系统:按大小显示已安装的 deb 包
dpkg-query -W -f='${Installed-Size;10}\t${Package}\n' | sort -k1,1n
df vs du 对比:
| 特性 | df |
du |
|---|---|---|
| 查看对象 | 文件系统/分区 | 目录/文件 |
| 显示内容 | 整个分区的使用情况 | 指定目录/文件的大小 |
| 速度 | 快(读取超级块) | 慢(遍历目录树) |
| 典型用途 | 监控磁盘空间 | 排查空间占用 |
9.2 挂载文件系统
用途 :把分区、光盘、U 盘、网络共享挂到目录上以便访问;umount 卸载。挂载后可通过挂载点读写设备。
bash
# 基本挂载
mount /dev/sdb1 /mnt/data # 挂载分区
umount /dev/sdb1 # 卸载
umount /mnt/data # 通过挂载点卸载
# 常见挂载场景
mount /dev/cdrom /mnt/cdrom # 挂载光盘
mount /dev/sda1 /mnt/usbdisk # 挂载 USB
mount -o loop file.iso /mnt/cdrom # 挂载 ISO 镜像
mount -t vfat /dev/sda1 /mnt/fat32 # 挂载 FAT32
mount -t ntfs-3g /dev/sda1 /mnt/ntfs # 挂载 NTFS
mount -t cifs //server/share /mnt/share -o username=user # 挂载网络共享
# 强制卸载
fuser -km /mnt/data # 强制卸载繁忙设备
umount -n /mnt/data # 不写入 /etc/mtab
9.3 文件系统检查
用途 :badblocks 检测磁盘坏道;fsck/e2fsck 检查并修复文件系统错误,常在单用户或救援模式下使用。
bash
# 检查磁盘坏块
badblocks -v /dev/sda1
# 检查/修复文件系统
fsck /dev/sda1 # 自动检测文件系统类型
fsck.ext4 /dev/sda1 # 检查 ext4
e2fsck /dev/sda1 # 检查 ext2/ext3/ext4
fsck.vfat /dev/sda1 # 检查 FAT
示例:
bash
umount /data # 先卸载
fsck -y /dev/sda2 # 检查并自动修复(-y 默认 yes)
badblocks -sv /dev/sda1 # 只读扫描坏块
注意:检查文件系统前,必须先卸载该文件系统,否则可能造成数据损坏。
十、用户与群组管理
10.1 用户管理流程
👥 创建用户组
groupadd
👤 创建用户
useradd
🔑 设置密码
passwd
✏️ 修改属性
usermod
🗑️ 删除用户
userdel
❌ 删除用户组
groupdel
10.2 用户组管理
| 命令 | 用途 | 说明 |
|---|---|---|
groupadd group_name |
新建组,用于权限分配或团队共享 | 创建用户组 |
groupdel group_name |
删除空组(组内无用户) | 删除用户组 |
groupmod -n new old |
重命名组 | 重命名用户组 |
groups user1 |
查看某用户所属的所有组 | 查看用户所属组 |
newgrp group_name |
临时将当前会话主组切换到指定组 | 切换当前组 |
示例:
bash
groupadd developers # 创建组
groupmod -n devs developers # 重命名组
groups alice # 查看 alice 属于哪些组
newgrp developers # 当前 Shell 下以 developers 为主组
10.3 用户管理
| 命令 | 用途 | 说明 |
|---|---|---|
useradd user1 |
新建系统用户,可配合 -d/-s/-g 等 | 创建用户 |
useradd -c "Name" -g admin -d /home/user1 -s /bin/bash user1 |
创建用户并指定备注、主组、家目录、Shell | 创建用户(指定详细信息) |
userdel user1 |
删除用户,保留家目录(可给新用户复用) | 删除用户(保留家目录) |
userdel -r user1 |
删除用户并删除其家目录和邮件 | 删除用户及家目录 |
usermod -c "FTP User" -g system -d /ftp/user1 -s /bin/nologin user1 |
修改用户备注、主组、家目录、登录 Shell | 修改用户属性 |
passwd |
修改当前用户自己的密码 | 修改当前用户密码 |
passwd user1 |
root 为指定用户改密码或锁定账户 | 修改指定用户密码(需 root) |
chage -E 2026-12-31 user1 |
设置账户过期日,到期无法登录 | 设置密码过期日期 |
id user1 |
查看 UID、GID、所属组列表 | 查看用户 ID 信息 |
who / w |
查看谁在登录、从哪登录、在做什么 | 查看当前登录用户 |
last |
查看登录/重启历史,审计用 | 查看登录历史 |
pwck |
检查 /etc/passwd 一致性(无主组、无家目录等) | 检查 /etc/passwd 文件格式和语法 |
grpck |
检查 /etc/group 一致性 | 检查 /etc/group 文件格式和语法 |
useradd 参数详解:
| 参数 | 说明 | 示例 |
|---|---|---|
-c comment |
用户描述/备注 | -c "Web Admin" |
-g group |
主用户组 | -g admin |
-G groups |
附加用户组 | -G wheel,docker |
-d homedir |
家目录路径 | -d /home/webuser |
-s shell |
登录 Shell | -s /bin/bash |
-e expire |
账户过期日期 | -e 2026-12-31 |
-m |
创建家目录 | - |
-M |
不创建家目录 | - |
-r |
创建系统用户 | - |
完整示例:
bash
# 创建一个属于 "admin" 用户组的用户
useradd -c "John Doe" -g admin -d /home/john -s /bin/bash john
# 创建一个无法登录的系统用户(用于运行服务)
useradd -r -s /sbin/nologin -M nginx
10.4 用户切换
用途 :su 切换到其他用户身份(常用 su - root);sudo 以 root 权限执行单条命令,无需知道 root 密码。
bash
su user1 # 切换用户(不切换环境变量)
su - user1 # 完全切换用户(切换环境变量)
su -l user1 # 同 su -
exit # 退回原用户
sudo command # 以 root 权限执行命令
示例:
bash
su - root # 切换到 root 并加载 root 环境
sudo systemctl restart nginx # 用 root 权限重启 nginx
sudo -u www-data cat /var/www/config # 以 www-data 用户执行命令
exit # 退出当前 su 会话
10.5 相关配置文件
| 文件 | 说明 |
|---|---|
/etc/passwd |
用户账号信息 |
/etc/shadow |
用户密码信息(加密) |
/etc/group |
用户组信息 |
/etc/sudoers |
sudo 权限配置 |
/etc/login.defs |
登录默认配置 |
10.6 密码安全策略
- 使用四种字符(大写、小写、数字、特殊字符)中至少三种
- 长度大于 7 位
- 使用随机字符串
- 定期更换
- 循环周期足够大
十一、软件包管理
11.1 包管理体系对比
🔵 DEB 系 - Debian/Ubuntu
📦 dpkg - 底层工具
🟣 apt - 自动解决依赖
🔴 RPM 系 - RedHat/CentOS/Fedora
📦 rpm - 底层工具
🟡 yum - 自动解决依赖
🟢 dnf - yum 的替代
包管理器完整对比:
| 功能 | RPM 系 (rpm) | RPM 系 (yum/dnf) | DEB 系 (dpkg) | DEB 系 (apt) |
|---|---|---|---|---|
| 安装 | rpm -ivh pkg.rpm |
yum install pkg |
dpkg -i pkg.deb |
apt install pkg |
| 卸载 | rpm -e pkg |
yum remove pkg |
dpkg -r pkg |
apt remove pkg |
| 更新 | rpm -Uvh pkg.rpm |
yum update pkg |
dpkg -i pkg.deb |
apt upgrade pkg |
| 搜索 | `rpm -qa | grep pkg` | yum search pkg |
`dpkg -l |
| 列出已安装 | rpm -qa |
yum list installed |
dpkg -l |
apt list --installed |
| 包信息 | rpm -qi pkg |
yum info pkg |
dpkg -s pkg |
apt show pkg |
| 文件列表 | rpm -ql pkg |
yum provides file |
dpkg -L pkg |
dpkg -L pkg |
| 依赖解决 | 不自动解决 | 自动解决 | 不自动解决 | 自动解决 |
| 仓库管理 | 不支持 | 支持 | 不支持 | 支持 |
| 清理缓存 | - | yum clean all |
- | apt clean |
11.2 RPM 包管理
用途:在 RedHat/CentOS/Fedora 上直接安装、查询、卸载 .rpm 包;不自动解决依赖,复杂依赖建议用 yum/dnf。
bash
# 安装
rpm -ivh package.rpm # 安装 rpm 包
rpm -ivh --nodeeps package.rpm # 忽略依赖关系安装
# 更新
rpm -Uvh package.rpm # 更新(未安装则安装)
rpm -Fvh package.rpm # 更新(仅已安装的)
# 删除
rpm -e package_name # 删除
# 查询
rpm -qa # 列出所有已安装包
rpm -qa | grep httpd # 搜索包含 httpd 的包
rpm -qi package_name # 查询包信息
rpm -ql package_name # 列出包中的文件
rpm -qc package_name # 列出配置文件
rpm -qf /etc/httpd/conf/httpd.conf # 查询文件属于哪个包
# 验证
rpm --checksig package.rpm # 验证包完整性
rpm -V package_name # 验证已安装包
rpm --import /media/cdrom/RPM-GPG-KEY # 导入 GPG 公钥
11.3 YUM 包管理
用途:在 RedHat/CentOS 上从仓库安装、更新、删除软件,自动解决依赖。
bash
yum install package_name # 安装
yum update package_name # 更新指定包
yum update # 更新所有包
yum remove package_name # 删除
yum list # 列出所有包
yum list installed # 列出已安装包
yum search keyword # 搜索
yum info package_name # 查看包信息
yum provides /etc/httpd/conf/httpd.conf # 查询文件属于哪个包
yum clean packages # 清理包缓存
yum clean headers # 清理头文件缓存
yum clean all # 清理所有缓存
yum localinstall package.rpm # 本地安装(自动解决依赖)
11.4 DEB 包管理(dpkg)
用途:在 Debian/Ubuntu 上直接安装、查询、卸载 .deb 包;不自动解决依赖,复杂安装建议用 apt。
bash
dpkg -i package.deb # 安装
dpkg -r package_name # 删除
dpkg -l # 列出所有已安装包
dpkg -l | grep httpd # 搜索
dpkg -s package_name # 查询包信息
dpkg -L package_name # 列出包中的文件
dpkg --contents package.deb # 列出未安装包的文件
dpkg -S /bin/ping # 查询文件属于哪个包
11.5 APT 包管理
用途:在 Debian/Ubuntu 上从软件源安装、升级、删除软件,自动解决依赖,日常首选。
bash
apt install package_name # 安装
apt remove package_name # 删除
apt purge package_name # 删除(含配置文件)
apt update # 更新软件源列表
apt upgrade # 升级所有已安装包
apt full-upgrade # 完整升级(可能删除旧包)
apt search keyword # 搜索
apt show package_name # 查看包信息
apt list --installed # 列出已安装包
apt autoremove # 清理不需要的依赖
apt clean # 清理下载缓存
apt-cache search keyword # 搜索(旧命令兼容)
十二、进程管理
12.1 进程生命周期
fork()
Wait
CPU Schedule
Time Slice
Wait I/O
I/O Done
exit()
wait()
SIGSTOP
SIGCONT
🎬 Start
🆕 Created
✅ Ready
🏃 Running
⏳ Blocked
💀 Zombie
🏁 End
⏸️ Stopped
12.2 进程查看命令
| 命令 | 用途 | 说明 |
|---|---|---|
ps -ef |
列出所有进程,脚本中常用(标准格式) | 显示所有进程(标准格式) |
ps aux |
列出所有进程及 CPU/内存占用(BSD 格式) | 显示所有进程(BSD 格式) |
ps -ejH |
以层级方式看进程父子关系 | 显示进程树 |
| `ps -ef | grep java` | 查 Java 相关进程,便于 kill 或排查 |
| `ps -ef | grep mysql` | 查 MySQL 进程及安装路径 |
pstree -p |
树状看进程父子关系及 PID | 树状显示进程关系 |
top |
实时看 CPU、内存、进程列表,按 P/M 排序 | 动态查看进程和资源占用 |
htop |
更直观的 top,支持鼠标、颜色、过滤 | 增强版 top(需安装) |
pgrep -f process_name |
按命令行匹配取 PID,供脚本用 | 按名称查找进程 ID |
pidof program |
按程序名取 PID(多实例会列出多个) | 查找程序的 PID |
常用查看示例:
bash
# 查找 Java 进程
ps -ef | grep java
# 查找 MySQL 进程
ps -ef | grep mysql
# 查看程序安装目录(通过 grep 找到进程后查看完整命令)
ps -ef | grep nginx
# 按名称取 PID(脚本中常用)
pgrep -f nginx
pidof nginx
# 树状看进程
pstree -p
ps -ejH
ps vs top 对比:
| 特性 | ps |
top |
htop |
|---|---|---|---|
| 显示方式 | 静态快照 | 动态刷新 | 动态刷新 |
| 交互性 | 无 | 有 | 更好 |
| 资源占用 | 低 | 中 | 中 |
| 输出格式 | 灵活定制 | 固定 | 彩色+图形 |
| 典型用途 | 脚本中使用 | 实时监控 | 交互式管理 |
12.3 进程控制命令
用途简述 :kill/killall/pkill 用于终止进程;nice/renice 调整优先级;nohup 与 & 用于后台运行并脱离终端。
bash
# 终止进程
kill PID # 发送 SIGTERM(温和终止)
kill -9 PID # 发送 SIGKILL(强制终止)
kill -15 PID # 发送 SIGTERM(默认)
killall process_name # 按名称终止所有进程
pkill -f pattern # 按模式匹配终止进程
# 进程优先级
nice -n 10 command # 以较低优先级运行
renice -n -5 -p PID # 修改运行中进程优先级
# 后台运行
command & # 后台运行
nohup command & # 后台运行(终端关闭后继续)
jobs # 查看后台任务
fg %1 # 将后台任务调到前台
bg %1 # 将暂停的任务放到后台运行
Ctrl+Z # 暂停当前进程
Ctrl+C # 终止当前进程
示例:
bash
kill 12345 # 温和结束进程 12345
kill -9 12345 # 强制结束
killall nginx # 结束所有名为 nginx 的进程
pkill -f "python app.py" # 按命令行匹配结束
nohup ./start.sh > out.log 2>&1 & # 后台启动,关闭终端仍运行
jobs # 看当前 Shell 的后台任务
fg %1 # 把任务 1 拉到前台
12.4 常用信号
| 信号 | 编号 | 说明 |
|---|---|---|
SIGHUP |
1 | 挂起,通常用于重新加载配置 |
SIGINT |
2 | 中断(Ctrl+C) |
SIGKILL |
9 | 强制终止(不可捕获) |
SIGTERM |
15 | 正常终止(默认信号) |
SIGSTOP |
19 | 暂停进程(Ctrl+Z) |
SIGCONT |
18 | 继续运行暂停的进程 |
12.5 服务管理
systemctl vs service 对比:
| 功能 | systemctl(systemd) |
service(SysV init) |
|---|---|---|
| 启动 | systemctl start sshd |
service sshd start |
| 停止 | systemctl stop sshd |
service sshd stop |
| 重启 | systemctl restart sshd |
service sshd restart |
| 查看状态 | systemctl status sshd |
service sshd status |
| 开机启用 | systemctl enable sshd |
chkconfig sshd on |
| 开机禁用 | systemctl disable sshd |
chkconfig sshd off |
| 查看所有服务 | systemctl list-units |
service --status-all |
| 重载配置 | systemctl reload sshd |
service sshd reload |
推荐 :现代 Linux 发行版(CentOS 7+、Ubuntu 16.04+)应使用
systemctl。
十三、网络管理
13.1 网络命令体系
🖥️ 远程连接
🔐 ssh - 安全Shell
📤 文件传输
🔒 scp - 安全复制
🔄 rsync - 增量同步
⬇️ wget - 下载
🌐 curl - 数据传输
📡 网络监控
替代
👴 netstat - 已过时
✨ ss - 推荐
🔍 网络诊断
📶 ping - 连通性测试
🛤️ traceroute - 路由追踪
🔎 dig - DNS 查询
📊 mtr - 综合诊断
⚙️ 网络配置
替代
👴 ifconfig - 已过时
✨ ip - 推荐
13.2 网络配置
用途 :查看或配置网卡 IP、网关、启停网卡;现代系统推荐用 ip,ifconfig 已过时。
ifconfig vs ip 命令对比:
| 功能 | ifconfig(旧) |
ip(新,推荐) |
|---|---|---|
| 查看所有接口 | ifconfig -a |
ip addr show / ip a |
| 查看指定接口 | ifconfig eth0 |
ip addr show eth0 |
| 设置 IP | ifconfig eth0 192.168.1.1 |
ip addr add 192.168.1.1/24 dev eth0 |
| 启用接口 | ifconfig eth0 up |
ip link set eth0 up |
| 禁用接口 | ifconfig eth0 down |
ip link set eth0 down |
| 查看路由表 | route -n |
ip route show / ip r |
| 添加路由 | route add default gw 192.168.1.1 |
ip route add default via 192.168.1.1 |
| 查看 ARP | arp -n |
ip neigh show |
13.3 网络诊断
用途 :ping 测连通性;traceroute/mtr 看路径与延迟;dig/nslookup/host 查 DNS;nmap 查端口开放情况。
bash
# 连通性测试
ping hostname # 测试网络连通性
ping -c 4 hostname # 发送 4 个包后停止
ping6 hostname # IPv6 ping
# 路由追踪
traceroute hostname # 追踪路由路径
tracepath hostname # 无需 root 权限的路由追踪
mtr hostname # 实时路由追踪+统计
# DNS 查询
dig domain.com # DNS 查询
dig domain.com +short # 简洁输出
nslookup domain.com # DNS 查询(交互式)
host domain.com # 简单 DNS 查询
# 端口扫描
nmap hostname # 扫描开放端口
nmap -p 80,443 hostname # 扫描指定端口
示例:
bash
ping -c 4 8.8.8.8 # 测到谷歌 DNS 是否通
traceroute www.baidu.com # 看经过哪些路由
dig +short www.example.com # 只输出 A 记录 IP
nmap -p 22,80,443 192.168.1.1 # 扫描常用端口是否开放
13.4 网络监控
用途 :查看本机监听端口、已建立连接、Socket 统计;ss 比 netstat 更快,推荐使用。
netstat vs ss 对比:
| 功能 | netstat(旧) |
ss(新,推荐) |
|---|---|---|
| 查看所有连接 | netstat -an |
ss -an |
| 查看 TCP 监听 | netstat -tnlp |
ss -tnlp |
| 查看 UDP | netstat -unlp |
ss -unlp |
| 显示进程 | netstat -p |
ss -p |
| 统计信息 | netstat -s |
ss -s |
| 速度 | 慢 | 快(使用 netlink) |
bash
# 常用 ss 命令
ss -tnlp # 查看 TCP 监听端口
ss -tunap # 查看所有连接
ss -s # 显示统计摘要
ss -tn state established # 查看已建立的连接
ss -o state time-wait # 查看 TIME_WAIT 连接
13.5 远程连接与文件传输
用途 :ssh 远程登录与执行命令;scp 基于 SSH 的安全拷贝;rsync 增量同步与备份;wget/curl 下载或请求 URL。
bash
# SSH 远程连接
ssh user@hostname # 远程登录
ssh root@192.168.1.100 # 以 root 连接指定 IP
ssh -p 2222 user@hostname # 指定端口
ssh-keygen # 生成密钥对
ssh-copy-id user@hostname # 复制公钥到远程主机
# SCP 安全复制
scp file user@host:/path # 上传文件
scp user@host:/path/file . # 下载文件
scp -r dir user@host:/path # 递归复制目录
scp -P 2222 file user@host:/path # 指定端口
# rsync 增量同步
rsync -avz dir/ user@host:/path/ # 同步到远程
rsync -avz user@host:/path/ dir/ # 从远程同步
rsync -avz --delete dir/ user@host:/path/ # 同步并删除多余文件
rsync -avz --progress dir/ user@host:/path/ # 显示进度
# wget / curl 下载
wget URL # 下载文件
wget -c URL # 断点续传
wget -r URL # 递归下载
wget -O filename URL # 指定保存文件名
curl -O URL # 下载文件
curl -L URL # 跟随重定向
curl -I URL # 只获取头信息
curl -o filename URL # 指定保存文件名
示例:
bash
ssh root@192.168.1.10 # 登录服务器
scp app.war user@host:/opt/tomcat/webapps/ # 上传部署包
rsync -avz --progress /backup/ user@host:/remote/ # 备份到远程并显示进度
wget -c https://example.com/large.iso # 断点续传下载
curl -I https://example.com # 只看 HTTP 头
curl -o page.html https://example.com # 下载并重命名
scp vs rsync 对比:
| 特性 | scp |
rsync |
|---|---|---|
| 传输方式 | 完整复制 | 增量传输 |
| 带宽效率 | 低(全量传输) | 高(只传差异) |
| 断点续传 | 不支持 | 支持 |
| 压缩传输 | 支持(-C) | 支持(-z) |
| 适用场景 | 少量文件传输 | 大量文件同步 |
13.6 网络配置文件
| 文件路径 | 说明 |
|---|---|
/etc/sysconfig/network-scripts/ifcfg-eth0 |
网卡配置(CentOS) |
/etc/netplan/*.yaml |
网络配置(Ubuntu 18.04+) |
/etc/resolv.conf |
DNS 客户端配置 |
/etc/hosts |
静态主机名解析 |
/etc/sysconfig/network |
主机名和网关配置 |
/etc/hostname |
主机名 |
十四、Linux 文件系统目录结构
14.1 FHS 目录树
🌳 / 根目录
⚡ /bin
🔧 /sbin
🚀 /boot
🔌 /dev
⚙️ /etc
🏠 /home
👑 /root
📚 /lib
💿 /media
📌 /mnt
📦 /opt
🧠 /proc
💻 /sys
🗑️ /tmp
📂 /usr
📊 /var
⚡ /usr/bin
🔧 /usr/sbin
📚 /usr/lib
📦 /usr/local
📄 /usr/share
📝 /var/log
📬 /var/spool
🏃 /var/run
📧 /var/mail
14.2 目录详解
| 目录 | 说明 | 重要文件/子目录 |
|---|---|---|
/bin |
基本用户命令 | ls, cp, mkdir, cat 等 |
/sbin |
系统管理命令 | fdisk, iptables, reboot 等 |
/boot |
启动文件 | vmlinuz(内核)、initrd、grub |
/dev |
设备文件 | sda(硬盘)、tty(终端)、null |
/etc |
系统配置文件 | passwd, shadow, fstab, hosts |
/home |
普通用户家目录 | /home/user1, /home/user2 |
/root |
root 用户家目录 | - |
/lib |
基本共享库 | .so 文件、内核模块 |
/media |
可移动设备挂载点 | 光盘、U 盘自动挂载 |
/mnt |
临时挂载点 | 手动挂载额外存储 |
/opt |
第三方软件 | 可选应用程序包 |
/proc |
进程信息伪文件系统 | cpuinfo, meminfo, version |
/sys |
硬件信息伪文件系统 | 设备参数配置 |
/tmp |
临时文件 | 所有用户可写,有 Sticky Bit |
/usr |
用户程序和数据 | bin, sbin, lib, share, local |
/var |
可变数据 | log, spool, mail, run |
/srv |
服务数据 | www, ftp |
/lost+found |
文件系统恢复 | fsck 恢复的文件 |
14.3 重要配置文件
| 路径 | 说明 |
|---|---|
/etc/passwd |
用户账号信息 |
/etc/shadow |
用户密码(加密) |
/etc/group |
用户组信息 |
/etc/fstab |
开机自动挂载配置 |
/etc/hosts |
静态主机名解析 |
/etc/resolv.conf |
DNS 客户端配置 |
/etc/profile |
全局环境变量 |
/etc/bashrc |
全局 bash 配置 |
/etc/sudoers |
sudo 权限配置 |
/etc/syslog.conf |
日志配置 |
/etc/crontab |
系统定时任务 |
/etc/init.d/ |
系统服务脚本 |
14.4 /var 目录详解
| 路径 | 说明 |
|---|---|
/var/log |
系统日志目录 |
/var/log/messages |
系统信息日志 |
/var/log/secure |
安全日志(SSH 等) |
/var/log/wtmp |
登录记录(用 last 查看) |
/var/spool/cron |
用户定时任务 |
/var/spool/mail |
用户邮箱 |
/var/run |
运行时数据(PID 文件等) |
/var/lib |
应用程序状态数据 |
十五、Shell 基础与命令格式
15.1 Shell 分类
🐚 Shell 接口
🖥️ GUI 图形界面
⌨️ CLI 命令行界面
🦶 GNOME - C语言
💎 KDE - C++
🐭 Xfce - 轻量级
📜 sh - Bourne Shell
⭐ bash - 推荐
✨ zsh - Oh My Zsh
🌊 csh - C Shell
🔷 ksh - Korn Shell
🔶 tcsh
15.2 命令格式
命令 [选项] [参数]
Command [Options] [Arguments]
选项类型:
| 类型 | 格式 | 示例 | 说明 |
|---|---|---|---|
| 短选项 | -字符 |
-l, -a |
可组合:-la = -l -a |
| 长选项 | --单词 |
--all, --help |
不可组合 |
命令提示符:
| 符号 | 含义 |
|---|---|
# |
root 用户(管理员) |
$ |
普通用户 |
15.3 终端类型
| 类型 | 设备文件 | 说明 |
|---|---|---|
| 物理终端 | /dev/console |
系统启动时的终端 |
| 虚拟终端 | /dev/tty[1-6] |
Ctrl+Alt+F[1-6] 切换 |
| 伪终端 | /dev/pts/# |
远程连接或图形界面终端 |
| 串行终端 | /dev/ttyS# |
串口连接 |
15.4 环境变量
bash
echo $PATH # 查看 PATH 变量
printenv # 查看所有环境变量
export VAR=value # 设置环境变量
env # 查看环境变量
set # 查看所有变量(含本地变量)
PATH 变量:定义了 Shell 查找命令的路径列表。当用户输入命令时,Shell 会依次从这些路径(由左向右)中查找可执行文件。
15.5 echo 和 printf 命令
bash
# echo 命令
echo "Hello World" # 输出字符串
echo -e "Hello\nWorld" # 启用转义字符(\n 换行)
echo -n "Hello" # 不换行输出
echo $PATH # 输出变量值
# printf 命令(默认不自动换行)
printf "Hello World\n" # 输出并换行
printf "%s\n" "Hello" # 格式化输出字符串
printf "%d\n" 42 # 格式化输出数字
printf "Name: %s, Age: %d\n" "John" 25 # 多个参数格式化
15.6 bc 计算器
bash
bc # 进入计算器
# 在 bc 中可以进行:
# 1 + 2 → 输出 3
# 10 ^ 2 → 输出 100
# scale = 3; 1 / 3 → 输出 .333
# quit → 退出
# 命令行直接使用
echo "1 + 2" | bc # 输出 3
echo "scale=2; 10/3" | bc # 输出 3.33
15.7 命令查找顺序
Yes
No
Yes
No
Yes
No
Yes
No
⌨️ 用户输入命令
🏷️ 别名?
✅ 执行别名
🔧 内部命令?
✅ 直接执行
💾 hash缓存?
✅ 从缓存执行
🔍 在PATH中查找
📍 找到?
✅ 执行并缓存
❌ command not found
bash
type command # 查看命令类型(内部/外部)
type -a command # 列出该名字的所有类型(如内置+外部路径)
hash # 查看命令缓存(外部命令路径)
hash -r # 清空 hash 缓存,下次按 PATH 重新查找
alias # 查看所有别名
which command # 查找命令路径(仅 PATH 中)
which -a ls # 显示 PATH 中所有 ls 的路径
说明 :内部命令由 Shell 直接执行;外部命令在 PATH 中查找可执行文件,找到后会缓存路径(hash),再次执行时 O(1) 查找。help COMMAND 查内部命令,man COMMAND 查手册(内部命令时 man 显示的是当前 Shell 的 man 页)。
十六、获取帮助
16.1 帮助方式对比
❓ 获取帮助的方式
🔴 help command - 内部命令
🟡 command --help - 简要帮助
🟢 man command - 完整手册
🔵 info command - 详细文档
🟣 /usr/share/doc - 文档目录
| 方式 | 用途 | 适用范围 | 详细程度 | 示例 |
|---|---|---|---|---|
help command |
查 Shell 内建命令用法 | 内部命令 | 简要 | help cd |
command --help |
快速看选项说明 | 外部命令 | 简要 | ls --help |
man command |
查完整手册(最常用) | 几乎所有命令 | 完整 | man ls |
info command |
查更详细文档(如 GNU 软件) | 部分命令 | 最详细 | info ls |
/usr/share/doc |
浏览已安装软件的文档 | 安装的软件 | 变化 | 目录浏览 |
16.2 Man 手册章节
| 章节 | 说明 | 路径 |
|---|---|---|
| 1 | 用户命令 | /bin, /usr/bin, /usr/local/bin |
| 2 | 系统调用 | - |
| 3 | 库函数 | - |
| 4 | 特殊文件(设备文件) | /dev |
| 5 | 文件格式(配置文件语法) | 如 man 5 passwd |
| 6 | 游戏 | - |
| 7 | 杂项 | Miscellaneous |
| 8 | 管理命令 | /sbin, /usr/sbin, /usr/local/sbin |
16.3 Man 文档结构
| 字段 | 说明 |
|---|---|
NAME |
命令名称和简要说明 |
SYNOPSIS |
用法说明和选项格式 |
DESCRIPTION |
详尽功能说明 |
OPTIONS |
选项详解 |
FILES |
相关配置文件 |
EXAMPLES |
使用示例 |
SEE ALSO |
相关命令参考 |
BUGS |
已知问题 |
man 翻页与搜索操作:
| 操作 | 说明 |
|---|---|
f / Space |
向后翻一屏 |
b |
向前翻一屏 |
j / Enter |
向后翻一行 |
k |
向前翻一行 |
/KEYWORD |
向后搜索 KEYWORD |
?KEYWORD |
向前搜索 KEYWORD |
n |
下一个匹配 |
N |
上一个匹配 |
q |
退出 |
格式约定:
| 符号 | 含义 |
|---|---|
[] |
可选项 |
<> |
必选项 |
... |
可重复多次 |
| ` | ` |
{} |
分组 |
bash
# 查看命令在哪些章节有说明
whatis passwd # 精确查找
man -k keyword # 模糊查找
apropos keyword # 同 man -k
# 查看指定章节
man 5 passwd # 查看 passwd 文件格式
man 2 read # 查看 read 系统调用
# 指定手册路径
man -M /usr/share/man/ passwd # 从指定路径查找
16.4 Info 文档
| 快捷键 | 说明 |
|---|---|
Space / Page Down |
向下翻页 |
Page Up |
向上翻页 |
Tab |
在节点间移动(节点处显示 *) |
Enter |
进入当前节点 |
n |
前往下一个 info page |
p |
前往上一个 info page |
u |
向上移动一层 |
s / / |
在 info page 中搜索 |
h |
显示帮助菜单 |
? |
显示命令一览表 |
q |
退出 |
16.5 在线文档
bash
# 大多数命令的文档和手册存放位置
cd /usr/share/doc
# 查看特定软件的文档
ls /usr/share/doc/bash*
十七、操作系统基础知识
17.1 计算机体系结构
🧠 CPU
⌨️ 输入设备
💾 存储器 RAM
🔢 运算器 ALU
🎮 控制器 CU
🖥️ 输出设备
17.2 存储层次
🚀 CPU 寄存器 - 最快
⚡ L1 Cache 一级缓存
💨 L2 Cache 二级缓存
🏃 L3 Cache 三级缓存
📊 内存 RAM
🐢 SSD / HDD 磁盘 - 最慢
工作频率排序:CPU > 寄存器 > L1 缓存 > L2 缓存 > L3 缓存 > 内存 > 磁盘
17.3 重要概念术语
| 术语 | 英文 | 说明 |
|---|---|---|
| API | Application Programming Interface | 应用编程接口,封装系统调用提供高级功能 |
| ABI | Application Binary Interface | 应用程序二进制接口,定义程序运行格式 |
| 系统调用 | System Call | 用户程序请求内核服务的接口 |
| 中断 | Interrupt | 处理器接收到的事件通知信号 |
| 局部性原理 | Locality of Reference | 时间局部性和空间局部性 |
| 进程 | Process | 运行中的程序实例 |
| task_struct | Task Structure | Linux 内核控制进程的核心数据结构 |
| 魔数 | Magic Number | 文件类型的标识字节 |
17.4 CPU 保护模式
🛡️ CPU 保护环
📞 系统调用
📤 返回结果
🔴 Ring 0 - 内核态
🟢 Ring 3 - 用户态
🟠 Ring 1 - 保留
🟡 Ring 2 - 保留
17.5 硬件架构
| 架构 | 厂商 | 说明 |
|---|---|---|
| x86 / x86_64 | Intel / AMD | PC 主流架构 |
| ARM | ARM Holdings | 移动设备、嵌入式 |
| RISC-V | 开源 | 新兴开源架构 |
| Power | IBM | 高性能服务器 |
| MIPS | MIPS Technologies | 嵌入式/网络设备 |
17.6 加密方法
| 类型 | 算法示例 | 说明 |
|---|---|---|
| 对称加密 | DES, 3DES, AES | 加密解密使用同一密钥 |
| 非对称加密 | RSA, DSA, ECC | 公钥加密,私钥解密 |
| 单向加密(散列) | MD5(128位), SHA1(160位), SHA256 | 不可逆,用于完整性校验 |
单向加密特点:
- 雪崩效应:输入微小变化导致输出巨大变化
- 定长输出:无论输入多大,输出长度固定
- 不可逆:无法从散列值还原原始数据
17.7 重要知识点总结
关于库(Library):
- 库是程序,位于操作系统底层
- 库不能独立运行,只能被调用
- 库提供统一的调用接口,封装系统调用
.so文件是动态库(Shared Object),.a文件是静态库
关于进程:
- 进程由父进程通过
fork()创建 fork()过程由父进程申请,内核负责生成task_structinit是所有用户空间进程的父进程- 变量是一段命名的内存空间,变量名是内存空间的引用
关于文件系统:
1 block = 2^n 个扇区- 文件名和文件类型都存放于目录中
- 在启动时需要使用的分区称为根分区
关于内核运行:
- 内核运行在 CPU 的两种情况:
- 进程间切换时
- 进程执行了特权指令
关于 CPU:
- CPU 能寻址的内存范围取决于其字长
- CPU 捕获 I/O 事件的方法:轮询(poll)和中断(interrupt)
- 存储器由两部分组成(物理视角):ROM(只读)和 RAM(随机存取)
17.8 AAA 安全协议
| 组件 | 英文 | 说明 |
|---|---|---|
| 认证 | Authentication | 验证用户身份,判断是否为合法用户 |
| 授权 | Authorization | 对认证通过的用户,授权其可用的服务 |
| 审计 | Accounting/Auditing | 记录用户使用资源的情况,通常用日志实现 |
附录:速查表
A. Bash 常用快捷键
| 快捷键 | 说明 |
|---|---|
Ctrl+C |
终止当前命令 |
Ctrl+Z |
暂停当前命令 |
Ctrl+D |
退出当前 Shell |
Ctrl+L |
清屏(同 clear) |
Ctrl+A |
光标移到行首 |
Ctrl+E |
光标移到行尾 |
Ctrl+R |
搜索历史命令 |
Ctrl+W |
删除光标前一个单词 |
Ctrl+U |
删除光标前的所有字符 |
Ctrl+K |
删除光标后的所有字符 |
Tab |
命令/文件名自动补全 |
!! |
执行上一条命令 |
!n |
执行历史中第 n 条命令 |
Ctrl+Alt+F[1-6] |
切换到虚拟终端 |
Ctrl+Alt+F7 |
切换回图形界面 |
B. Vi/Vim 编辑器快捷键
模式切换:
| 按键 | 说明 |
|---|---|
i |
在光标前插入 |
a |
在光标后插入 |
o |
在下一行插入 |
Esc |
退出编辑模式 |
:wq |
保存并退出 |
:wq! |
强制保存并退出 |
:q |
退出(未修改) |
:q! |
强制退出(不保存) |
移动与编辑:
| 按键 | 说明 |
|---|---|
h/j/k/l |
左/下/上/右移动 |
gg |
跳到文件开头 |
G |
跳到文件结尾 |
dd |
删除当前行 |
yy |
复制当前行 |
p |
粘贴 |
/keyword |
向下搜索 |
?keyword |
向上搜索 |
n |
下一个搜索结果 |
N |
上一个搜索结果 |
C. 文件操作速查
| 操作 | 命令 |
|---|---|
| 创建文件 | touch file |
| 创建目录 | mkdir dir |
| 复制文件 | cp src dst |
| 复制目录 | cp -r src dst |
| 移动/重命名 | mv src dst |
| 删除文件 | rm file |
| 删除目录 | rm -rf dir |
| 查看文件 | cat, less, more |
| 搜索文件 | find, locate |
| 搜索内容 | grep pattern file |
| 查看权限 | ls -l |
| 修改权限 | chmod 755 file |
| 修改所有者 | chown user file |
D. 系统管理速查
| 操作 | 命令 |
|---|---|
| 查看系统信息 | uname -a |
| 查看内存 | free -h |
| 查看磁盘 | df -h |
| 查看进程 | ps -ef, top |
| 终止进程 | kill -9 PID |
| 查看端口 | ss -tnlp |
| 查看网络 | ip addr |
| 查看日志 | tail -f /var/log/messages |
| 定时任务 | crontab -e |
| 系统时间 | date, hwclock |
| 服务管理 | systemctl start/stop/status service |
| 开机启动 | systemctl enable service |
E. 重定向与管道
| 语法 | 说明 |
|---|---|
cmd > file |
标准输出重定向到文件(覆盖) |
cmd >> file |
标准输出追加到文件 |
cmd 2> file |
错误输出重定向到文件 |
cmd &> file |
标准输出和错误输出都重定向 |
cmd < file |
从文件读取输入 |
| `cmd1 | cmd2` |
cmd > /dev/null 2>&1 |
丢弃所有输出 |
cmd 2>/dev/null |
丢弃错误输出 |
F. MySQL 连接示例
bash
# 连接 MySQL
mysql -uroot -p # 交互式输入密码
mysql -uroot -ppassword # 命令行指定密码(不安全)
mysql -h hostname -u user -p # 连接远程 MySQL
# MySQL 内常用命令
mysql> SHOW DATABASES; # 显示所有数据库
mysql> USE database_name; # 切换数据库
mysql> SHOW TABLES; # 显示所有表
mysql> DESCRIBE table_name; # 显示表结构
# 授权远程访问
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
G. 计算机启动相关
启动方式:
| 类型 | 说明 |
|---|---|
| 冷启动 | 完全关机后重新开机,执行完整的加电自检(POST) |
| 热启动 | 不断电重启,跳过自检过程 |
自举(Bootstrap)过程:
- 加电自检(POST):检测硬件
- 磁盘引导:BIOS/UEFI 加载引导程序
- 加载内核:引导程序加载 Linux 内核到内存
- 启动 init:内核启动第一个用户进程(systemd 或 init)
相关文档(同系列)
| 文档 | 说明 |
|---|---|
| Shell命令与基础.md | Shell 环境、命令类型(type/hash)、PATH、date/clock/hwclock、man/whatis、echo/printf、大括号展开、more/less 操作等,与第十五章、第十六章互补。 |
| Linux文件系统与FHS详解.md | FHS 标准、根目录与 /usr、/var 详解、目录树特性、文件类型与扩展名、inode 与 ls -l 属性、绝对/相对路径,与第十四章互补。 |
文档版本 : v2.2
最后更新 : 2026-02-12
说明: 本文档基于原始 Linux 命令笔记进行系统化整理,并吸纳第二章命令示例,补充了 date/hwclock、mkdir 大括号展开、touch/rm/cp/mv/install、cat/more/less/head/tail、cut/sort/uniq/wc/tr、which/whereis/locate、man 翻页操作、type/hash 等。涵盖 1500+ 个命令用法示例。配套阅读:Shell命令与基础.md、Linux文件系统与FHS详解.md。