Shell 命令速查

常用 Shell 命令快速查询,覆盖文件操作、文本处理、网络、进程管理等场景

搜索命令
文件与目录操作
ls列出当前目录内容
ls -la列出所有文件(含隐藏)及详细信息
ls -lh以人类可读格式显示文件大小
ls -lt按修改时间排序显示
cd <dir>切换到指定目录
cd ~切换到用户主目录
cd -切换到上一个目录
pwd显示当前工作目录路径
mkdir -p <path>递归创建目录(父目录不存在时自动创建)
rmdir <dir>删除空目录
rm <file>删除文件
rm -rf <dir>递归强制删除目录及其内容
cp <src> <dest>复制文件
cp -r <src> <dest>递归复制目录
cp -a <src> <dest>归档模式复制(保留权限、链接等)
mv <src> <dest>移动/重命名文件
touch <file>创建空文件或更新时间戳
ln -s <target> <link>创建软链接
find <dir> -name "*.log"按名称查找文件
find . -type f -mtime -7查找7天内修改过的文件
find . -type d -empty -delete查找并删除空目录
find . -name "*.tmp" -exec rm {} \;查找并删除所有 .tmp 文件
find . -type f -size +100M查找大于100MB的文件
chmod 755 <file>设置文件权限(rwxr-xr-x)
chmod +x <file>添加执行权限
chmod -R 644 <dir>递归设置目录权限
chown user:group <file>修改文件所有者和组
stat <file>显示文件详细信息
tree以树形结构显示目录
tree -L 2显示目录树(最多2层)
文本处理
cat <file>显示文件内容
cat -n <file>显示文件内容并带行号
cat file1 file2 > combined合并多个文件
tac <file>反向显示文件内容(从底到顶)
head <file>显示文件前10行
head -n 20 <file>显示文件前20行
tail <file>显示文件后10行
tail -f <file>实时跟踪文件新增内容
tail -n +2 <file>从第2行开始显示
wc <file>统计行数、词数、字节数
wc -l <file>仅统计行数
wc -w <file>仅统计词数
grep "pattern" <file>搜索文件中匹配的行
grep -i "pattern" <file>忽略大小写搜索
grep -rn "pattern" <dir>递归搜索目录中所有文件
grep -v "pattern" <file>显示不匹配的行(反向匹配)
grep -c "pattern" <file>统计匹配的行数
grep -A 3 "pattern" <file>显示匹配行及后3行
grep -B 3 "pattern" <file>显示匹配行及前3行
grep -E "(a|b)" <file>使用扩展正则搜索
sed 's/old/new/g' <file>替换所有 old 为 new
sed -i 's/old/new/g' <file>原地替换文件内容
sed -n '5,10p' <file>只显示第5到10行
sed '/pattern/d' <file>删除匹配的行
sed 's/\([0-9]\{3\}\)/\1-/g'正则捕获和引用分组
awk '{print $1}' <file>打印每行第一个字段
awk -F: '{print $1, $3}' /etc/passwd指定分隔符打印字段
awk 'NR>1 {print $2}'跳过第一行(表头)打印
awk '{sum+=$1} END {print sum}'计算第一列总和
awk 'length($0) > 80'打印长度超过80字符的行
awk '{a[$1]++} END {for(k in a) print k, a[k]}'统计第一列出现次数
sort <file>按字母排序
sort -n <file>按数字排序
sort -r <file>逆序排序
sort -t: -k3 -n /etc/passwd按第3列数字排序(指定分隔符)
uniq <file>去除相邻重复行(需先sort)
sort file | uniq -c统计每行出现次数
sort file | uniq -d只显示重复的行
cut -d: -f1 /etc/passwd按分隔符提取指定列
cut -c1-10 <file>提取每行第1-10个字符
tr 'a-z' 'A-Z' < input小写转大写
tr -d '\r' < input删除回车符(Windows换行转Linux)
tr -s ' '压缩连续空格为单个
diff file1 file2比较两个文件差异
diff -u file1 file2统一格式输出差异
tee output.txt同时输出到终端和文件
进程管理
ps显示当前终端的进程
ps aux显示所有进程的详细信息
ps -ef显示所有进程(完整格式)
ps aux | grep <name>查找指定进程
top实时显示进程动态
htop增强版 top(需安装)
kill <pid>发送SIGTERM信号终止进程
kill -9 <pid>强制杀死进程
killall <name>按名称杀死所有匹配进程
pkill -f <pattern>按模式匹配杀死进程
bg将挂起的进程放到后台运行
fg将后台进程调到前台
jobs查看后台任务列表
nohup <cmd> &后台运行命令(关闭终端不中断)
nohup <cmd> > output.log 2>&1 &后台运行并重定向输出
nice -n 10 <cmd>以指定优先级运行(值越大优先级越低)
renice -n 5 -p <pid>修改已运行进程的优先级
xkill点击窗口杀死图形进程
pgrep <name>按名称查找进程PID
pidof <name>获取进程PID
网络工具
curl <url>获取URL内容
curl -o file <url>下载到指定文件
curl -O <url>下载并使用原始文件名
curl -L <url>跟随重定向
curl -I <url>只获取响应头
curl -X POST -d 'data' <url>发送POST请求
curl -H 'Content-Type: application/json' -d '{}' <url>发送JSON请求
curl -u user:pass <url>使用基本认证访问
wget <url>下载文件(支持断点续传)
wget -r <url>递归下载整个网站
wget -c <url>断点续传
ping <host>测试网络连通性
ping -c 4 <host>发送4个包后停止
traceroute <host>追踪路由路径
netstat -tuln查看监听的TCP/UDP端口
netstat -an | grep <port>查看指定端口的连接
ss -tuln查看监听端口(netstat替代)
ssh user@hostSSH远程登录
ssh -p 2222 user@host指定端口SSH连接
ssh -i <key> user@host使用密钥文件连接
scp <file> user@host:<path>复制文件到远程主机
scp user@host:<path> <file>从远程主机下载文件
scp -r <dir> user@host:<path>递归复制目录
rsync -avz <src> <dest>同步文件(保留权限、压缩传输)
rsync -avz --delete <src> <dest>同步并删除目标多余文件
rsync -avz -e ssh <src> user@host:<dest>通过SSH同步远程文件
ip addr查看网络接口和IP地址
ip route查看路由表
ifconfig查看网络接口(旧版)
dig <domain>DNS查询
dig +short <domain>简洁DNS查询结果
nslookup <domain>DNS查询(交互式)
whois <domain>查看域名注册信息
nc -zv host port测试端口连通性
nc -l <port>监听指定端口
lsof -i :<port>查看占用指定端口的进程
压缩与归档
tar -czf archive.tar.gz <files>创建gzip压缩归档
tar -xzf archive.tar.gz解压gzip归档
tar -cjf archive.tar.bz2 <files>创建bzip2压缩归档
tar -xjf archive.tar.bz2解压bzip2归档
tar -tf archive.tar.gz查看归档内容
tar -tvf archive.tar.gz查看归档内容(详细信息)
tar -xzf archive.tar.gz -C <dir>解压到指定目录
tar -czf archive.tar.gz --exclude='*.log' <dir>排除特定文件创建归档
gzip <file>压缩文件(生成.gz)
gzip -d <file.gz>解压.gz文件
gunzip <file.gz>解压.gz文件
zip -r archive.zip <dir>创建zip压缩包
unzip archive.zip解压zip文件
unzip -l archive.zip查看zip内容
xz -k <file>压缩文件(保留原文件,生成.xz)
xz -d <file.xz>解压.xz文件
系统信息
uname -a显示系统全部信息
uname -s显示操作系统名称
uname -r显示内核版本
hostname显示主机名
uptime显示系统运行时间和负载
whoami显示当前用户名
id显示用户ID和组ID
df -h以人类可读格式显示磁盘使用
df -i显示inode使用情况
du -sh <dir>显示目录总大小
du -sh *显示当前目录各子目录大小
du -ah --max-depth=1显示所有文件和一级目录大小
free -h显示内存使用(人类可读)
free -m以MB为单位显示内存
lsof列出所有打开的文件
lsof -u <user>查看指定用户打开的文件
lsof -c <name>查看指定进程打开的文件
cat /etc/os-release查看操作系统版本信息
cat /proc/cpuinfo查看CPU信息
cat /proc/meminfo查看内存详细信息
nproc显示CPU核心数
dmesg | tail查看最近的内核日志
last显示最近登录记录
history显示命令历史
history | tail -20显示最近20条历史命令
Vim 常用命令
vim <file>用Vim打开文件
i进入插入模式(在光标前)
a进入插入模式(在光标后)
o在当前行下方插入新行
Esc退出插入模式
:w保存文件
:q退出Vim
:wq保存并退出
:q!强制退出不保存
:w !sudo tee %以root权限保存只读文件
dd删除当前行
yy复制当前行
p粘贴
u撤销
Ctrl+r重做
/pattern向下搜索
?pattern向上搜索
n / N下一个/上一个匹配
:s/old/new/g替换当前行所有匹配
:%s/old/new/g替换整个文件所有匹配
:%s/old/new/gc替换时逐个确认
gg跳到文件开头
G跳到文件末尾
:<num>跳到指定行
Ctrl+d / Ctrl+u下翻/上翻半屏
Ctrl+f / Ctrl+b下翻/上翻整屏
v进入可视模式
V进入可视行模式
:set number显示行号
:set paste进入粘贴模式(避免自动缩进)
环境变量与配置
export VAR=value设置环境变量
export PATH=$PATH:/new/path添加到PATH
echo $VAR显示环境变量值
env显示所有环境变量
env | grep VAR搜索指定环境变量
unset VAR删除环境变量
source ~/.bashrc重新加载配置文件
. ~/.bashrcsource的简写形式
alias ll='ls -la'创建命令别名
alias显示所有别名
unalias <name>删除别名
which <cmd>查找命令的完整路径
whereis <cmd>查找命令的二进制、源码和手册位置
type <cmd>显示命令类型(内建/别名/文件)
command <cmd>绕过别名直接执行命令
readlink -f <file>获取文件的绝对路径
管道与重定向
cmd1 | cmd2将cmd1的输出作为cmd2的输入
cmd > file将标准输出重定向到文件(覆盖)
cmd >> file追加标准输出到文件
cmd 2> file将标准错误重定向到文件
cmd > file 2>&1将标准输出和错误都写入文件
cmd &> file同上(bash简写)
cmd < file将文件内容作为命令输入
cmd << EOF ... EOFHere Document:多行输入
cmd1 && cmd2cmd1成功才执行cmd2
cmd1 || cmd2cmd1失败才执行cmd2
cmd1 ; cmd2顺序执行(不管成败)
cmd &后台执行命令
cmd | tee file输出到终端同时写入文件
cat file | head -5 | tail -3管道链式处理
echo "line" | xargs <cmd>将输出作为参数传递给命令
find . -name '*.log' | xargs rm查找并删除(处理文件名含空格用-0)
find . -name '*.log' -print0 | xargs -0 rm安全处理含空格文件名
Shell 脚本
#!/bin/bashShebang:指定脚本解释器
chmod +x script.sh使脚本可执行
VAR=value定义变量
echo $VAR / ${VAR}引用变量
${VAR:-default}变量未设置时使用默认值
${#VAR}获取变量长度
${VAR/pattern/replace}变量中替换第一个匹配
${VAR//pattern/replace}变量中替换所有匹配
$1 $2 $@脚本位置参数
$#参数个数
$?上一个命令的退出状态
$$当前脚本的PID
if [ condition ]; then ... fi条件判断
[ -f file ]判断文件是否存在
[ -d dir ]判断目录是否存在
[ -z "$VAR" ]判断变量是否为空
[ "$a" = "$b" ]字符串比较
[ $a -eq $b ]数字比较(等于)
[ $a -gt $b ]数字比较(大于)
for i in list; do ... donefor循环
for ((i=0; i<10; i++)); do ... doneC风格for循环
while [ condition ]; do ... donewhile循环
case $var in pat) cmd ;; esaccase语句
myfunc() { ... }定义函数
local var=value函数内局部变量
set -e遇到错误立即退出脚本
set -x打印执行的每条命令(调试)
set -euo pipefail严格模式(推荐脚本开头使用)
trap 'echo error' ERR捕获错误信号执行清理
read -p "prompt: " var读取用户输入
echo "$(date)": done命令替换
ARRAY=(a b c)定义数组
${ARRAY[0]} / ${ARRAY[@]}访问数组元素/所有元素
${#ARRAY[@]}数组长度
软件包管理
apt update更新软件包列表(Debian/Ubuntu)
apt upgrade升级所有已安装软件包
apt install <pkg>安装软件包
apt remove <pkg>卸载软件包(保留配置)
apt purge <pkg>彻底卸载(含配置文件)
apt search <keyword>搜索软件包
apt show <pkg>显示软件包信息
dpkg -l列出已安装的deb包
yum update更新所有软件包(RHEL/CentOS)
yum install <pkg>安装软件包
yum remove <pkg>卸载软件包
dnf install <pkg>安装软件包(Fedora新版)
brew install <pkg>安装软件包(macOS Homebrew)
brew upgrade升级所有软件包
brew list列出已安装的软件包
npm install <pkg>安装Node.js包
npm install -g <pkg>全局安装Node.js包
npm update更新包
npm uninstall <pkg>卸载包
npm list --depth=0列出已安装的顶层包
pip install <pkg>安装Python包
pip install --user <pkg>安装到用户目录
pip freeze > requirements.txt导出已安装包列表
pip install -r requirements.txt从文件安装包
pip uninstall <pkg>卸载Python包
Docker 常用命令
docker ps列出运行中的容器
docker ps -a列出所有容器(含已停止)
docker images列出本地镜像
docker pull <image>拉取镜像
docker run -d --name <n> <image>后台运行容器
docker run -p 8080:80 <image>运行并映射端口
docker run -v /host:/container <image>挂载数据卷运行
docker run -it <image> /bin/bash交互式运行容器
docker run --env-file .env <image>使用环境变量文件运行
docker run --network host <image>使用主机网络运行
docker run --restart unless-stopped <image>自动重启策略
docker stop <container>停止容器
docker start <container>启动已停止的容器
docker restart <container>重启容器
docker rm <container>删除已停止的容器
docker rm -f <container>强制删除运行中的容器
docker rmi <image>删除镜像
docker logs <container>查看容器日志
docker logs -f <container>实时跟踪容器日志
docker logs --tail 100 <container>查看最近100行日志
docker exec -it <container> /bin/bash进入运行中的容器
docker exec <container> <cmd>在容器中执行命令
docker cp <container>:<path> <host>从容器复制文件到主机
docker cp <host> <container>:<path>从主机复制文件到容器
docker build -t <name:tag> .构建镜像
docker build --no-cache -t <name> .不使用缓存构建
docker system df查看Docker磁盘使用
docker system prune -a清理未使用的镜像、容器、网络
docker compose up -d后台启动compose服务
docker compose down停止并移除compose服务
docker compose logs -f实时查看compose日志
docker compose ps查看compose服务状态
docker compose build构建compose服务镜像
实用技巧
!!重复上一条命令
sudo !!以sudo重复上一条命令
!$上一条命令的最后一个参数
!<n>执行历史中第n条命令
!<str>执行历史中最近以str开头的命令
Ctrl+r搜索历史命令(交互式)
Ctrl+c中断当前命令
Ctrl+z挂起当前进程(放到后台)
Ctrl+d退出当前shell/终端
Ctrl+l清屏(等同于clear)
Ctrl+a / Ctrl+e跳到行首/行尾
Alt+b / Alt+f跳到一个词的前面/后面
Ctrl+w删除光标前的一个词
Ctrl+u删除光标前的所有内容
Ctrl+k删除光标后的所有内容
clear清屏
reset重置终端(修复显示异常)
man <cmd>查看命令的手册页
<cmd> --help查看命令的帮助信息
date显示当前日期和时间
date +%Y-%m-%d格式化输出日期
sleep 5暂停5秒
time <cmd>测量命令执行时间
watch -n 2 <cmd>每2秒重复执行命令
seq 1 10生成1到10的数字序列
echo {1..10}花括号展开生成序列
echo file_{a,b,c}.txt花括号展开批量生成文件名
使用提示

点击命令 或右侧复制图标可快速复制命令

<占位符> 需要替换为实际值(如文件名、目录名等)

• 使用 man <command> 可查看命令的详细文档

• 管道 | 可以组合多个命令完成复杂任务

• 危险命令(如 rm -rf)执行前请确认路径正确