Linux命令完全指南

Linux 命令完全指南

本文系统整理了 Linux 常用命令,每个命令均标明具体用途并配有示例,涵盖系统管理、文件操作、网络配置、进程管理等核心领域,对功能相似的命令进行对比分析,并配以 Mermaid 图表辅助理解。


目录


一、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 哲学思想

  1. 由目的单一的小程序组成:组合小程序完成复杂任务
  2. 一切皆文件:设备、进程、网络套接字都以文件形式呈现
  3. 尽量避免捕获用户接口:尽量减少交互式操作
  4. 配置文件保存为纯文本格式:方便编辑和版本控制
  5. 提供机制,而非策略:给予用户最大灵活性

二、系统信息查看

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 ../.. 返回上两级 返回上两级目录
cdcd ~ 快速回家目录 进入用户家目录
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 密码安全策略

  1. 使用四种字符(大写、小写、数字、特殊字符)中至少三种
  2. 长度大于 7 位
  3. 使用随机字符串
  4. 定期更换
  5. 循环周期足够大

十一、软件包管理

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、网关、启停网卡;现代系统推荐用 ipifconfig 已过时。

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 统计;ssnetstat 更快,推荐使用。

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_struct
  • init 是所有用户空间进程的父进程
  • 变量是一段命名的内存空间,变量名是内存空间的引用

关于文件系统:

  • 1 block = 2^n 个扇区
  • 文件名和文件类型都存放于目录中
  • 在启动时需要使用的分区称为根分区

关于内核运行:

  • 内核运行在 CPU 的两种情况:
    1. 进程间切换时
    2. 进程执行了特权指令

关于 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)过程:

  1. 加电自检(POST):检测硬件
  2. 磁盘引导:BIOS/UEFI 加载引导程序
  3. 加载内核:引导程序加载 Linux 内核到内存
  4. 启动 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命令与基础.mdLinux文件系统与FHS详解.md

相关推荐
A-刘晨阳2 小时前
K8S 之 Taints(污点)与 Tolerations(容忍)
运维·云原生·容器·kubernetes·k8s污点·k8s容忍
likeGhee2 小时前
bridge 模式下docker容器无法访问,curl: (56) Recv failure: Connection reset by peer
运维·docker·容器
Kendra9192 小时前
服务器上架流程
运维·服务器·网络·ip·磁盘
Lsir10110_2 小时前
【Linux】线程初步——线程概念以及接口认识
linux·运维·服务器
cuber膜拜2 小时前
Tenacity 原理与基本使用
服务器·网络·python·装饰器模式·tenacity
cuber膜拜2 小时前
PyBreaker 原理与基本使用
服务器·网络·python·pybreaker
Albert Edison2 小时前
【Python】文件
android·服务器·python
未来之窗软件服务2 小时前
服务器运维(三十三)日志分析ssh日志工具—东方仙盟
运维·服务器·ssh·仙盟创梦ide·东方仙盟
梦雨羊2 小时前
搭建服务器进行测试
linux·运维·服务器