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 # 重新加载配置