精选技术Linux2026-09-14 13:13:14(编辑于 2026-09-14 13:18:19)

Linux 命令速查

一、文件与目录操作

基础操作

命令 说明 常用参数
ls 列出目录内容 -l(详细) -a(隐藏) -h(可读大小) -t(按时间) -R(递归)
cd 切换目录 cd ~(家目录) cd -(上次目录) cd ..(上级)
pwd 显示当前路径
mkdir 创建目录 -p(递归创建)
rmdir 删除空目录 -p(递级删除空目录)
cp 复制 -r(递归) -p(保留属性) -a(归档复制)
mv 移动/重命名 -i(覆盖确认) -f(强制)
rm 删除 -r(递归) -f(强制) -i(确认)
touch 创建空文件/更新时间戳 -t(指定时间)
ln 创建链接 -s(软链接,不加为硬链接)

软链接 vs 硬链接

软链接(符号链接):ln -s 源文件 链接名
  - 类似 Windows 快捷方式,可跨文件系统
  - 删除源文件 → 链接失效(悬空链接)
  - 可以指向目录

硬链接:ln 源文件 链接名
  - 同一个 inode,本质是同一文件的多个名字
  - 不能跨文件系统,不能链接目录
  - 删除源文件 → 硬链接仍可用(引用计数 -1)

文件查看

命令 说明 常用参数
cat 查看全部内容 -n(行号) -b(非空行号)
more 分页查看(向下) 空格翻页,q 退出
less 分页查看(可上下) /pattern 搜索,n/N 跳转
head 查看前 N 行 -n 20 或 -20
tail 查看后 N 行 -n 20 -f(实时跟踪,看日志必备)
wc 统计 -l(行数) -w(词数) -c(字节数)

二、文件查找与内容搜索

find(按条件查找文件)

# 按名字
find / -name "*.log"               # 精确匹配
find / -iname "*.LOG"              # 忽略大小写

# 按类型
find / -type f                     # 文件
find / -type d                     # 目录
find / -type l                     # 软链接

# 按大小
find / -size +100M                 # 大于100M
find / -size -1k                   # 小于1k

# 按时间
find / -mtime -7                   # 7天内修改(内容)
find / -mmin -30                   # 30分钟内修改
find / -atime -7                   # 7天内访问
find / -ctime -7                   # 7天内变更(权限/属性)

# 按权限
find / -perm 755                   # 精确权限
find / -perm -u+x                 # 用户有执行权限

# 组合操作(-exec)
find / -name "*.tmp" -exec rm {} \;
find / -name "*.log" -exec grep "error" {} \;
find / -name "*.bak" -delete       # 等价于 -exec rm

grep(文本搜索)

# 基础搜索
grep "error" /var/log/syslog
grep -r "TODO" /project/           # 递归搜索目录
grep -i "error" file               # 忽略大小写
grep -n "error" file               # 显示行号
grep -c "error" file               # 统计匹配行数
grep -v "debug" file               # 反向匹配(排除)
grep -w "port" file                # 全词匹配
grep -l "error" *.log              # 只显示匹配的文件名
grep -A 3 "error" file             # 匹配行后3行
grep -B 3 "error" file             # 匹配行前3行
grep -C 3 "error" file             # 匹配行前后各3行

# 正则匹配
grep -E "error|warning" file       # 扩展正则(ERE)
grep -P "\d{4}-\d{2}" file         # Perl 正则

# 管道组合
ps aux | grep nginx
cat file | grep -v "^#" | grep -v "^$"    # 去注释去空行

awk(文本处理)

# 基本格式:awk 'pattern {action}' file

# 按列提取(默认空格/Tab分隔)
awk '{print $1}' file              # 第1列
awk '{print $1, $3}' file          # 第1、3列
awk '{print NR, $0}' file          # 行号 + 全行

# 指定分隔符
awk -F: '{print $1}' /etc/passwd   # : 分隔,取用户名
awk -F',' '{print $2}' data.csv    # CSV取第2列

# 条件过滤
awk '$3 > 100' file                # 第3列 > 100
awk '/error/ {print}' file         # 包含 error 的行

# 统计
awk '{sum+=$1} END {print sum}' file         # 求和
awk '{sum+=$1} END {print sum/NR}' file      # 平均值
awk 'END {print NR}' file                    # 行数

# 内置变量
# NR = 当前行号, NF = 当前行列数, FS = 输入分隔符
# OFS = 输出分隔符, $0 = 整行, $NF = 最后一列

sed(流编辑器)

# 替换
sed 's/old/new/' file              # 替换每行第一个
sed 's/old/new/g' file             # 替换所有
sed -i 's/old/new/g' file          # 原地修改(-i 面试常问)
sed -i.bak 's/old/new/g' file      # 备份后修改

# 删除
sed '3d' file                      # 删除第3行
sed '2,5d' file                    # 删除2-5行
sed '/pattern/d' file              # 删除匹配行

# 插入/追加
sed '3a\新行内容' file              # 第3行后追加
sed '3i\新行内容' file              # 第3行前插入

# 打印
sed -n '5,10p' file                # 打印5-10行
sed -n '/error/p' file             # 打印匹配行(等同 grep)

三、用户与权限管理

用户/组操作

# 用户管理
useradd -m -s /bin/bash username   # 创建用户(-m建家目录 -s指定shell)
passwd username                    # 设置密码
userdel -r username                # 删除用户及家目录
usermod -aG groupname username     # 将用户追加到组(-a 追加!不加会覆盖)
usermod -l newname oldname         # 改名

# 组管理
groupadd groupname                 # 创建组
groupdel groupname                 # 删除组
groups username                    # 查看用户所属组
id username                        # 查看用户 UID、GID 及所属组

# 切换用户
su - username                      # 切换用户(加载环境变量)
sudo command                       # 以 root 身份执行
visudo                             # 编辑 sudoers 文件(安全方式)

文件权限

权限格式:-rwxrwxrwx
  第1位:文件类型(- 文件, d 目录, l 链接)
  2-4:  所有者权限(u)
  5-7:  所属组权限(g)
  8-10: 其他人权限(o)

r=4(读)  w=2(写)  x=1(执行)

# 修改权限
chmod 755 file                     # 数字法:rwxr-xr-x
chmod u+x file                     # 符号法:给所有者加执行
chmod go-w file                    # 去掉组和其他人的写权限
chmod -R 755 directory             # 递归修改

# 修改所有者
chown user:group file              # 修改所有者和组
chown -R user:group directory      # 递归修改

# 特殊权限
chmod u+s file                     # SUID:执行时使用文件所有者权限(如 passwd)
chmod g+s directory                # SGID:目录下新建文件继承组
chmod +t directory                 # Sticky Bit:只有所有者能删除文件(如 /tmp)

chmod 777 各数字含义

7 = rwx = 4+2+1(读+写+执行)
6 = rw- = 4+2(读+写)
5 = r-x = 4+1(读+执行)
4 = r-- = 4(只读)
0 = --- = 0(无权限)

755 = 所有者 rwx,组 r-x,其他 r-x(常用目录权限)
644 = 所有者 rw-,组 r--,其他 r--(常用文件权限)

四、进程管理

查看进程

ps aux                             # 所有进程(BSD 风格)
ps -ef                             # 所有进程(System V 风格)
ps aux | grep nginx                # 查找特定进程
ps -ef --forest                    # 树状显示进程关系

top                                # 实时进程监控
  # 按 P 按CPU排序,M 按内存,k 杀进程,q 退出
htop                               # top 增强版(需安装)

# ps aux 各列含义
# USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
# VSZ = 虚拟内存, RSS = 实际物理内存, STAT = 状态
# STAT: S(休眠) R(运行) D(不可中断) Z(僵尸) T(停止)

进程控制

kill PID                           # 发送 SIGTERM(15) 优雅终止
kill -9 PID                        # 发送 SIGKILL(9) 强制杀死
kill -l                            # 列出所有信号

killall nginx                      # 按进程名杀死
pkill -f "pattern"                 # 按匹配模式杀死

# 后台运行
command &                          # 后台运行
nohup command &                    # 后台运行,不受终端关闭影响
jobs                               # 查看后台任务
fg %1                              # 将任务调回前台
bg %1                              # 让暂停的任务在后台继续
Ctrl+Z                             # 暂停当前任务

信号

SIGHUP  (1)  - 终端挂起/重载配置
SIGINT  (2)  - Ctrl+C 中断
SIGKILL (9)  - 强制杀死(不可捕获)
SIGTERM (15) - 优雅终止(默认信号,可被捕获)
SIGSTOP (19) - 暂停(不可捕获)
SIGCONT (18) - 继续

五、网络管理

网络配置与诊断

# 查看网络信息
ifconfig                           # 网卡信息(旧)
ip addr                            # 网卡信息(新)
ip route                           # 路由表
netstat -tulnp                     # 查看监听端口(-t TCP -u UDP -l 监听 -n 数字 -p 进程)
ss -tulnp                          # netstat 替代(更快)
curl ifconfig.me                   # 查看公网IP

# DNS
nslookup domain.com                # DNS 查询
dig domain.com                     # DNS 详细查询
host domain.com                    # 简单 DNS 查询
cat /etc/resolv.conf               # DNS 配置文件

# 防火墙
iptables -L -n                     # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # 放行80端口
firewall-cmd --list-all            # firewalld 查看规则
ufw status                         # Ubuntu 防火墙状态

网络调试

ping host                          # 测试连通性
traceroute host                     # 路由追踪
telnet host port                   # 测试端口连通性
nc -zv host port                   # 端口扫描(netcat)
wget url                           # 下载文件
curl -I url                        # 获取 HTTP 头
curl -v url                        # 详细请求信息

# 抓包
tcpdump -i eth0 port 80           # 抓取80端口流量
tcpdump -i any -w capture.pcap    # 全部抓包保存

TCP 三次握手 / 四次挥手

三次握手:
  客户端 → SYN → 服务端
  服务端 → SYN+ACK → 客户端
  客户端 → ACK → 服务端(连接建立)

四次挥手:
  客户端 → FIN → 服务端
  服务端 → ACK → 客户端
  服务端 → FIN → 客户端
  客户端 → ACK → 服务端(等待 2MSL 后关闭)

为什么是三次不是两次?—— 防止已失效的连接请求到达服务端
TIME_WAIT 为什么等 2MSL?—— 确保最后的 ACK 能到达 + 让旧报文过期

六、磁盘与存储

磁盘信息

df -h                              # 磁盘使用情况(-h 可读格式)
du -sh /path                       # 目录/文件大小
du -sh *                           # 当前目录各项大小
lsblk                              # 块设备列表(树状)
fdisk -l                           # 磁盘分区信息
mount /dev/sdb1 /mnt               # 挂载
umount /mnt                        # 卸载
cat /etc/fstab                     # 开机自动挂载配置

# IO 监控
iostat -x 1                        # 磁盘IO统计(1秒刷新)
iotop                              # 磁盘IO top(需root)

inode

- inode 是文件元数据的索引(权限、所有者、大小、时间、数据块位置)
- inode 不包含文件名(文件名存在目录的数据块中)
- inode 用完 → 磁盘空间够也无法创建新文件
- 查看:df -i(inode 使用情况)
- 一个文件占用一个 inode

七、系统管理

系统信息

uname -a                           # 内核信息
cat /etc/os-release                # 发行版信息
hostnamectl                        # 主机名信息
uptime                             # 运行时间 + 负载
date                               # 系统时间
timedatectl                        # 时区信息
free -h                            # 内存使用(-h 可读)
cat /proc/cpuinfo | grep "model name" | head -1  # CPU 型号
nproc                              # CPU 核心数

系统负载

uptime
# 输出:load average: 0.50, 0.80, 1.20
# 分别是 1分钟、5分钟、15分钟 的平均负载
# 负载 < CPU核心数 = 正常
# 负载 ≈ CPU核心数 = 满载
# 负载 > CPU核心数 = 过载

# 查看核心数
nproc
# 或
grep -c ^processor /proc/cpuinfo

服务管理(systemd)

systemctl start nginx              # 启动
systemctl stop nginx               # 停止
systemctl restart nginx            # 重启
systemctl reload nginx             # 重载配置
systemctl status nginx             # 查看状态
systemctl enable nginx             # 开机自启
systemctl disable nginx            # 取消开机自启
systemctl list-units --type=service  # 列出所有服务
journalctl -u nginx -f             # 查看服务日志
journalctl --since "1 hour ago"    # 最近1小时日志

定时任务(crontab)

crontab -e                         # 编辑定时任务
crontab -l                         # 查看定时任务
crontab -r                         # 删除所有定时任务

# 格式:分 时 日 月 周 命令
# ┌───── 分钟 (0-59)
# │ ┌───── 小时 (0-23)
# │ │ ┌───── 日 (1-31)
# │ │ │ ┌───── 月 (1-12)
# │ │ │ │ ┌───── 星期 (0-7, 0和7都是周日)
# │ │ │ │ │
# * * * * * command

# 常用示例
*/5 * * * * /script.sh             # 每5分钟
0 2 * * * /backup.sh               # 每天凌晨2点
0 0 * * 0 /cleanup.sh              # 每周日0点
0 9 1 * * /report.sh               # 每月1号9点

八、压缩与归档

# tar
tar -czf archive.tar.gz /path      # 创建 gzip 压缩包
tar -cjf archive.tar.bz2 /path     # 创建 bzip2 压缩包
tar -xzf archive.tar.gz            # 解压 gzip
tar -xzf archive.tar.gz -C /dest   # 解压到指定目录
tar -tf archive.tar.gz             # 查看内容不解压

# 参数记忆:-c(创建) -x(解压) -t(查看) -z(gzip) -j(bzip2) -f(文件名) -v(详细)
# 口诀:压缩 czf / 解压 xzf / 查看 tf

# 其他
gzip file                          # 压缩(原文件消失)
gunzip file.gz                     # 解压
zip -r archive.zip directory       # 创建 zip
unzip archive.zip                  # 解压 zip

九、管道与重定向

重定向

command > file                     # 标准输出覆盖写入
command >> file                    # 标准输出追加写入
command 2> error.log               # 标准错误重定向
command &> all.log                 # 标准输出+错误都重定向
command > /dev/null 2>&1           # 丢弃所有输出(常见写法)
command 2>&1 > file                # 先将错误合并到输出,再写文件(注意顺序)

# 输入重定向
command < input.txt                # 从文件读取
command << EOF                     # Here Document(多行输入)
multi
line
content
EOF

管道与组合

# 管道:前一个命令的输出作为后一个命令的输入
cat file | grep "error" | wc -l    # 统计 error 出现行数
ps aux | sort -k3 -rn | head -5    # CPU 占用前5的进程
df -h | awk '$5+0 > 80'           # 磁盘使用率超过80%

# xargs(将输入转为命令参数)
find . -name "*.log" | xargs rm    # 删除所有 .log 文件
cat urls.txt | xargs -I {} curl {} # 对每个URL执行curl

# tee(同时输出到屏幕和文件)
command | tee output.log           # 输出到屏幕+文件
command | tee -a output.log        # 追加模式

# | 和 ; 的区别
# | 管道:前一个 stdout → 后一个 stdin
# ; 分号:顺序执行,前一个失败不影响后一个
# && 与:前一个成功才执行后一个
# || 或:前一个失败才执行后一个

十、Shell 编程基础

变量

name="taffy"                       # 赋值(等号两边不能有空格!)
echo $name                         # 使用变量
echo ${name}                       # 推荐写法
readonly name                      # 只读变量
unset name                         # 删除变量

# 特殊变量
$0   # 脚本名
$1-$9 # 第1-9个参数
$#   # 参数个数
$@   # 所有参数(分开对待)
$*   # 所有参数(一个整体)
$?   # 上一个命令的返回值(0=成功)
$$   # 当前进程PID

条件判断

# if 语句
if [ condition ]; then
    commands
elif [ condition ]; then
    commands
else
    commands
fi

# 常用判断
[ -f file ]      # 文件存在且是普通文件
[ -d dir ]       # 目录存在
[ -e path ]      # 路径存在
[ -r file ]      # 可读
[ -w file ]      # 可写
[ -x file ]      # 可执行
[ -s file ]      # 文件非空
[ -z "$str" ]    # 字符串为空
[ -n "$str" ]    # 字符串非空
[ "$a" = "$b" ]  # 字符串相等
[ "$a" != "$b" ] # 字符串不等
[ $a -eq $b ]    # 数值相等
[ $a -ne $b ]    # 数值不等
[ $a -gt $b ]    # 大于
[ $a -lt $b ]    # 小于
[ $a -ge $b ]    # 大于等于
[ $a -le $b ]    # 小于等于

# 逻辑组合(注意 [[ ]] 中可以直接用 && ||)
[ cond1 ] && [ cond2 ]            # 与
[ cond1 ] || [ cond2 ]            # 或
[[ cond1 && cond2 ]]              # 双括号写法

循环

# for 循环
for i in 1 2 3 4 5; do
    echo $i
done

for i in $(seq 1 10); do
    echo $i
done

for file in /var/log/*.log; do
    echo $file
done

# while 循环
while [ condition ]; do
    commands
done

# 读取文件每一行
while IFS= read -r line; do
    echo "$line"
done < file.txt

十一、vim 编辑器操作(.sh 编辑必备)

vim 三种模式

普通模式(Normal)──按 i/a/o──→ 插入模式(Insert)
       ↑                            |
       |         按 Esc             |
       ←────────────────────────────┘
       |
       按 :
       ↓
命令行模式(Command)──按 Enter 执行后回到普通模式

打开/创建文件

vim script.sh                      # 打开或新建文件
vim +10 script.sh                  # 打开并跳到第10行
vim +/pattern script.sh            # 打开并跳到第一个匹配
vim -R script.sh                   # 只读模式打开

进入插入模式(开始编辑)

i   在光标前插入          I   在行首插入
a   在光标后插入          A   在行尾插入
o   在下方新开一行        O   在上方新开一行

保存与退出(命令行模式,按 : 进入)

:w              保存
:q              退出(未修改时)
:q!             强制退出不保存(面试常问!)
:wq             保存并退出(等价 :x)
ZZ              普通模式下保存退出(不用按冒号)
:w filename     另存为
:wq!            强制保存(只读文件用,需要权限)

普通模式常用操作

# 移动光标
h j k l         左 下 上 右
gg              跳到文件开头
G               跳到文件末尾
:n              跳到第 n 行
$               行尾
0               行首
w               下一个单词开头
b               上一个单词开头

# 删除
x               删除光标处字符
dd              删除整行(剪切)
ndd             删除 n 行
d$              删除到行尾
d0              删除到行首
dw              删除一个单词

# 复制粘贴
yy              复制整行
nyy             复制 n 行
p               粘贴到光标后
P               粘贴到光标前

# 撤销/重做
u               撤销
Ctrl+r          重做

# 搜索替换
/pattern        向下搜索
?pattern        向上搜索
n               下一个匹配
N               上一个匹配
:%s/old/new/g   全文替换
:5,10s/old/new/g  第5-10行替换

vim

Q: 如何在 vim 中执行 shell 命令?
A: :!command,如 :!ls 查看当前目录

Q: 如何显示行号?
A: :set number(临时)或写入 ~/.vimrc 永久生效

Q: vim 异常退出产生 .swp 怎么办?
A: vim -r filename 恢复,或手动删除 .swp 文件

nano 编辑器(简单备选)

nano script.sh                     # 打开文件
# 底部有快捷键提示,^ 表示 Ctrl

Ctrl+O                             # 保存(Write Out)
Ctrl+X                             # 退出(会提示是否保存)
Ctrl+K                             # 剪切一行
Ctrl+U                             # 粘贴
Ctrl+W                             # 搜索
Ctrl+\                             # 替换

十二、.sh 脚本完整操作流程

创建并运行一个脚本

# 第一步:创建文件
vim hello.sh                       # 用 vim 创建

# 第二步:写入内容(按 i 进入编辑模式)
# #!/bin/bash
# echo "Hello, World!"

# 第三步:保存退出(Esc → :wq → Enter)

# 第四步:添加执行权限(常忘的一步!)
chmod +x hello.sh

# 第五步:运行(三选一)
./hello.sh                         # 方式1:直接执行
bash hello.sh                      # 方式2:用 bash 解释器执行
sh hello.sh                        # 方式3:用 sh 解释器执行

Shebang 行

#!/bin/bash                        # 用 bash 执行
#!/bin/sh                          # 用 sh 执行(兼容性更好)
#!/usr/bin/env python3             # 用 python3 执行
#!/usr/bin/env node                # 用 node 执行

# 问:#!/bin/bash 和 #!/bin/sh 的区别?
# 答:bash 是 sh 的超集,sh 可能是 bash 也可能是指向 dash 的链接
#     sh 更注重 POSIX 兼容,bash 扩展了数组、[[ ]] 等特性

脚本调试

bash -x script.sh                  # 打印每行执行的命令(最常用)
bash -n script.sh                  # 只检查语法不执行
bash -v script.sh                  # 显示读取的每一行

# 脚本内开启调试
set -x                             # 开启调试模式
set +x                             # 关闭调试模式

# 脚本内严格模式(加分项)
set -euo pipefail
# -e 出错即退出
# -u 未定义变量报错
# -o pipefail 管道中任一命令失败则整体失败

实用脚本模板

#!/bin/bash
set -euo pipefail

# 变量定义
LOG_FILE="/var/log/myscript.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')

# 函数
log() {
    echo "[$DATE] $1" | tee -a "$LOG_FILE"
}

# 参数检查
if [ $# -lt 1 ]; then
    echo "Usage: $0 <arg>"
    exit 1
fi

# 主逻辑
log "脚本开始执行"
# ... 业务逻辑 ...
log "脚本执行完毕"
exit 0

脚本退出码

exit 0                             # 成功
exit 1                             # 一般错误
exit 2                             # 用法错误

# 查看上一个命令的退出码
echo $?

# $? 是什么?
# 上一个命令的退出状态码,0 表示成功,非 0 表示失败

十三、面试高频场景题

1. 查看日志中的报错

tail -1000 app.log | grep -i "error" | tail -20
# 实时监控
tail -f app.log | grep --line-buffered "error"

2. 找出占用 CPU 最高的进程

ps aux --sort=-%cpu | head -10
# 或
top -bn1 | head -20

3. 找出占用端口的进程

lsof -i:8080
# 或
netstat -tulnp | grep 8080
# 或
ss -tulnp | grep 8080
# 或
fuser 8080/tcp

4. 批量替换文件内容

sed -i 's/old/globally/g' *.txt
# 或用 find 组合
find . -name "*.conf" -exec sed -i 's/old/new/g' {} \;

5. 统计访问日志中 IP 访问次数 TOP 10

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

6. 查看文件行数/字数

wc -l file                          # 行数
wc -w file                          # 词数
wc -c file                          # 字节数

7. 定时备份数据库

# crontab -e
0 2 * * * mysqldump -u root -p'pass' dbname > /backup/db_$(date +\%Y\%m\%d).sql

8. 排查服务器被攻击

# 查看当前连接
netstat -an | awk '/^tcp/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
# 查看登录失败
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn

十四、高频概念速记

文件系统

/          根目录
/bin       基本命令(ls, cp, mv 等)
/sbin      系统管理命令(fdisk, iptables 等)
/etc       配置文件
/home      用户家目录
/root      root 用户家目录
/var       可变数据(日志、缓存、数据库)
/tmp       临时文件(重启可能清除)
/usr       用户程序和数据(第二层级)
/opt       第三方软件
/dev       设备文件
/proc      虚拟文件系统(进程和内核信息)
/sys       内核对象信息
/boot      启动相关(内核、grub)
/lib       共享库
/mnt       临时挂载点
/media     可移动设备挂载点

常见配置文件

/etc/passwd       用户信息(用户名:密码占位:UID:GID:注释:家目录:shell)
/etc/shadow       密码哈希(仅root可读)
/etc/group        组信息
/etc/hosts        主机名解析
/etc/resolv.conf  DNS 配置
/etc/fstab        挂载配置
/etc/crontab      定时任务
/etc/ssh/sshd_config  SSH 服务配置
/var/log/syslog   系统日志(Debian/Ubuntu)
/var/log/messages 系统日志(RHEL/CentOS)
/var/log/auth.log 认证日志

面试常考对比

概念 A B 区别
fork vs exec 复制进程 替换进程 fork 后可用 exec 加载新程序
信号 vs 中断 软件通知 硬件通知 信号由内核/进程发,中断由硬件触发
用户态 vs 内核态 受限访问 完全访问 系统调用触发切换
互斥锁 vs 自旋锁 睡眠等待 忙等 自旋锁适合短临界区
文件描述符 fd 进程级索引 0=stdin 1=stdout 2=stderr

十五、实用技巧速记

# 历史命令
history                            # 查看历史
!n                                 # 执行第n条历史
!!                                 # 执行上一条
Ctrl+R                             # 反向搜索历史

# 快捷键
Ctrl+C                             # 终止
Ctrl+Z                             # 暂停
Ctrl+D                             # EOF / 退出
Ctrl+A                             # 移到行首
Ctrl+E                             # 移到行尾
Ctrl+U                             # 删除到行首
Ctrl+K                             # 删除到行尾
Ctrl+W                             # 删除前一个单词
Ctrl+L                             # 清屏

# 实用命令
alias ll='ls -alh'                 # 设置别名
which command                      # 查找命令路径
whereis command                    # 查找命令+源码+手册
man command                        # 查看手册
command --help                     # 快速帮助
type command                       # 查看命令类型(内置/外部)

# 环境变量
export VAR=value                   # 设置环境变量
env                                # 查看所有环境变量
echo $PATH                         # 查看 PATH
source ~/.bashrc                   # 重新加载配置