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 为 newsed -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>按名称查找进程PIDpidof <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和组IDdf -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添加到PATHecho $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成功才执行cmd2cmd1 || cmd2cmd1失败才执行cmd2cmd1 ; 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 $@脚本位置参数$#参数个数$?上一个命令的退出状态$$当前脚本的PIDif [ 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)执行前请确认路径正确