Bash 常用命令速查手册
Bash(Bourne-Again Shell)是 Linux 和 macOS 系统中最广泛使用的命令行解释器——你在终端里输入的每一条命令,几乎都是经过 Bash 解析后交给操作系统执行的。即使是在 Windows 上,通过 WSL(Windows Subsystem for Linux)或 Git Bash 也能获得完整的 Bash 环境。掌握 Bash 常用命令,意味着你能够高效地浏览文件系统、搜索文本、管理进程、组合命令完成复杂任务,而不必依赖图形界面。

文件与目录操作
文件与目录操作是 Bash 使用频率最高的一组命令,涵盖了”我在哪、有什么、怎么去、怎么建、怎么删”五个核心场景。
导航与查看:pwd / ls / cd
pwd(print working directory)显示当前所在的绝对路径,是最简单的”我在哪”命令:
$ pwd /home/user/projects
ls(list)列出目录内容。加 -l 显示详细信息(权限、大小、修改时间),加 -a 显示隐藏文件(以 . 开头的文件),加 -h 以人类可读格式显示文件大小:
$ ls -lah total 24K drwxr-xr-x 3 user user 4.0K Aug 19 10:00 . drwxr-xr-x 5 root root 4.0K Aug 18 22:00 .. -rw-r--r-- 1 user user 220 Aug 19 09:30 .gitignore -rw-r--r-- 1 user user 1.2K Aug 19 09:35 README.md drwxr-xr-x 2 user user 4.0K Aug 19 09:40 src
cd(change directory)切换工作目录。几个常用简写:cd .. 返回上级目录,cd ~ 回到用户主目录,cd - 返回上一次所在的目录:
$ cd /var/log # 切换到 /var/log $ cd .. # 返回上级 /var $ cd ~ # 回到 /home/user $ cd - # 回到刚才的 /var
创建与删除:mkdir / touch / cp / mv / rm / rmdir
mkdir(make directory)创建目录,-p 参数可递归创建多层嵌套目录:
$ mkdir reports $ mkdir -p reports/2026/q3/charts # 一次创建多层目录
touch 创建空文件或更新已有文件的时间戳——如果文件不存在,则创建空文件;若存在,则将其访问和修改时间更新为当前时间:
$ touch newfile.txt # 创建空文件 $ touch newfile.txt # 再次 touch 只更新时间戳 $ touch -t 202601011200 oldfile # 将 oldfile 的时间戳设为 2026-01-01 12:00
cp(copy)复制文件或目录。常用选项:-r 递归复制目录、-i 覆盖前询问、-p 保留源文件属性(权限、时间戳等)、-u 仅在源更新时复制(增量备份):
$ cp script.sh backup.sh # 复制文件 $ cp -r project/ project_bak/ # 复制整个目录 $ cp -ip file.txt /dest/ # 复制并保留属性,遇重名询问
mv(move)移动或重命名文件——在 Bash 中,重命名和移动是同一个操作:若目标为目录,则移动源到该目录下;若目标为文件名,则重命名。常用选项:-i(覆盖前询问)、-f(强制覆盖)、-u(仅在源更新时移动):
$ mv file1.txt file2.txt # 重命名 $ mv data/ /tmp/ # 将 data 目录移动到 /tmp 下 $ mv -i *.pdf ~/Documents/ # 移动 PDF 文件,遇重名询问
rm(remove)删除文件或目录。-r 递归删除目录,-f 强制删除不提示。这两者组合 -rf 需要格外谨慎,因为删除后不可恢复:
$ rm temp.log # 删除单个文件 $ rm -r old_project/ # 递归删除目录 $ rm -rf build/ # 强制递归删除(危险!无确认)
安全建议:在不确定路径正确性时,先用 ls 确认目标,再执行 rm;或使用 rm -i 让 Bash 逐个确认。永远不要对 / 根目录执行 rm -rf。
rmdir(remove directory)删除空目录。与 rm -r 不同,rmdir 只能删除空目录,目录非空时报错——这反而是一种安全特性:
$ rmdir empty_dir # 删除空目录 $ rmdir -p a/b/c # 递归删除空目录链(先删 c,再删 b,再删 a)
链接:ln
ln(link)创建链接。-s 创建符号链接(软链接),类似于 Windows 的快捷方式;不加 -s 则创建硬链接,硬链接与原文件共享同一个 inode:
$ ln -s /usr/bin/python3 /usr/local/bin/python # 创建软链接 $ ln data.txt hardlink.txt # 创建硬链接
查找文件:find
find 是功能最强大的文件搜索命令,支持按名称、类型、大小、时间等多种条件组合查找:
$ find . -name "*.py" # 当前目录下所有 .py 文件 $ find /var/log -name "*.log" -mtime -7 # 最近 7 天修改过的日志 $ find . -type d -name "test" # 查找名为 test 的目录 $ find . -size +100M # 大于 100MB 的文件 $ find . -name "*.tmp" -delete # 查找并删除 .tmp 文件
以下是文件与目录操作命令的速查汇总:
| 命令 | 用途 | 常用参数 | 示例 |
|---|---|---|---|
pwd |
显示当前目录 | — | pwd |
ls |
列出目录内容 | -l 详情,-a 含隐藏,-h 可读大小 |
ls -lah |
cd |
切换目录 | .. 上级,~ 主目录,- 上一次 |
cd ~/projects |
mkdir |
创建目录 | -p 递归创建 |
mkdir -p a/b/c |
touch |
创建空文件/更新时间戳 | -t 指定时间戳 |
touch new.txt |
cp |
复制文件/目录 | -r 递归,-i 确认,-p 保留属性,-u 增量 |
cp -r src/ backup/ |
mv |
移动/重命名 | -i 确认,-f 强制,-u 增量 |
mv old.txt new.txt |
rm |
删除文件/目录 | -r 递归,-f 强制,-i 确认 |
rm -rf build/ |
rmdir |
删除空目录 | -p 递归删除空目录链 |
rmdir empty/ |
ln |
创建链接 | -s 软链接 |
ln -s target link |
find |
查找文件 | -name 按名,-type 按类型,-size 按大小,-mtime 按时间 |
find . -name "*.log" |
文本查看与搜索
在命令行环境下,查看文件内容、搜索关键文本是日常高频操作。Bash 提供了从简单到强大的完整工具链。
查看文件内容:cat / less / head / tail
cat(concatenate)连接文件并输出到标准输出,常用于快速查看小文件、合并文件或从标准输入创建文件:
$ cat file.txt # 显示文件内容 $ cat file1.txt file2.txt # 合并两个文件的内容输出 $ cat > new.txt # 从标准输入创建文件(Ctrl+D 结束)
less 是分页查看器,适合查看长文件——支持上下滚动、搜索(输入 / 后跟关键词),按 q 退出。与 cat 不同,less 不会一次性将所有内容刷屏:
$ less /var/log/syslog # 进入 less 后: # /error 向下搜索 "error" # ?error 向上搜索 "error" # n 跳到下一个匹配 # N 跳到上一个匹配 # G 跳到文件末尾 # g 跳到文件开头 # q 退出
head 和 tail 分别查看文件开头和末尾。默认各显示 10 行,-n 参数可指定行数,-c 指定字节数。tail -f 是实时追踪文件追加内容的利器,常用于查看日志:
$ head -n 5 data.csv # 前 5 行 $ tail -n 20 error.log # 末 20 行 $ tail -f /var/log/app.log # 实时追踪日志(Ctrl+C 退出)
文本搜索:grep / rg
grep(global regular expression print)是 Linux 下最常用的文本搜索工具,按模式匹配行并输出。核心参数:-i 忽略大小写,-v 反向匹配(输出不包含模式的行),-n 显示行号,-r 递归搜索目录,-c 只输出匹配行数,-E 启用扩展正则表达式:
$ grep "error" app.log # 搜索含 "error" 的行 $ grep -i "warning" app.log # 忽略大小写 $ grep -n "TODO" *.py # 显示行号 $ grep -rn "function" src/ # 递归搜索 + 行号 $ grep -v "^#" config.conf # 排除以 # 开头的注释行 $ grep -c "Exception" error.log # 只统计匹配行数 $ grep -E "cat|dog|bird" animals.txt # 扩展正则:匹配 cat 或 dog 或 bird
grep 常用正则表达式速查:
| 模式 | 含义 | 示例 |
|---|---|---|
^text |
以 text 开头 | grep "^import" *.py |
text$ |
以 text 结尾 | grep "\.py$" filelist |
. |
匹配任意单个字符 | grep "c.t" words(匹配 cat、cut 等) |
.* |
匹配任意长度的任意字符 | grep "a.*z"(a 到 z 之间任意内容) |
[abc] |
匹配 a、b 或 c 中任一 | grep "[Hh]ello" |
[^abc] |
不匹配 a、b、c | grep "[^0-9]" data(非数字行) |
\< / \> |
词首 / 词尾边界 | grep "\<error\>" log(精确匹配 error 单词) |
\{n,m\} |
前一个字符出现 n 到 m 次 | grep "o\{2,4\}" words(oo 到 oooo) |
rg(ripgrep)是更快、更现代的 grep 替代品——默认递归搜索,自动忽略 .gitignore 中的文件和二进制文件,支持正则,输出带颜色。语法:rg [选项] 模式 [路径]。常用选项:-i 忽略大小写、-n 显示行号、-t 按文件类型过滤(如 -tpy 只搜 Python 文件)、-g 包含/排除 glob 模式:
$ rg "function" . # 递归搜索当前目录 $ rg -i "todo" --type markdown # 只在 Markdown 文件中搜索 todo(忽略大小写) $ rg -g "!*.log" "error" src/ # 排除 .log 文件
若系统未安装 rg,可通过包管理器安装(如 apt install ripgrep、brew install ripgrep)。
文本统计与处理:wc / sort / uniq / cut / tr
wc(word count)统计文件的行数、单词数和字符数。-l 只统计行数,-w 只统计单词数,-c 统计字节数,-m 统计字符数:
$ wc -l access.log # 统计行数 $ wc -w essay.txt # 统计单词数 $ wc -c data.bin # 统计字节数 $ wc -m file.txt # 统计字符数
sort 对文本行排序。-n 按数值排序,-r 逆序,-k 按指定列排序,-u 排序同时去重,-t 指定字段分隔符(默认空白):
$ sort scores.txt # 字母序排序 $ sort -n scores.txt # 数值排序 $ sort -rn scores.txt # 数值逆序(从大到小) $ sort -t, -k2 data.csv # 以逗号分隔,按第 2 列排序
uniq 去除相邻的重复行。通常需要先用 sort 排序后再用 uniq,因为 uniq 只去除连续重复行。-c 在行首显示重复次数:
$ sort access.log | uniq -c | sort -rn | head -10 # 组合用法:统计日志中各 IP 出现频率,取前 10
cut 按分隔符或列号提取文本。-d 指定分隔符,-f 指定字段号:
$ cut -d: -f1 /etc/passwd # 提取用户名(第 1 列) $ cut -d, -f2,3 data.csv # 提取 CSV 第 2、3 列 $ cut -c1-10 file.txt # 提取每行前 10 个字符
tr(translate)替换或删除字符,常用于大小写转换或删除多余字符:
$ echo "Hello World" | tr 'a-z' 'A-Z' # 转大写 HELLO WORLD $ echo "a,b,c" | tr ',' '\n' # 逗号替换为换行 $ cat file.txt | tr -d '\r' > file_unix # 删除 Windows 回车符
文本流编辑与比较:awk / sed / diff
awk 是面向”列”的文本处理工具,用「模式 {动作}」逐行处理文本,是命令行数据分析的利器:
$ awk '{print $1}' users.txt # 打印每行第 1 列(默认按空白分隔)
$ awk -F, '{print $2, $3}' data.csv # 指定逗号分隔,打印第 2、3 列
$ awk '$3 > 90 {print $1}' scores.txt # 第 3 列大于 90 时打印第 1 列
$ awk 'NR >= 2 && NR <= 5' log.txt # 打印第 2 到 5 行
awk 中 $0 表示整行、NF 表示字段数、NR 表示当前行号;它本质是一门完整的脚本语言,还支持 BEGIN/END 块、循环和数组。
语法:sed [选项] '命令' 文件。sed(stream editor)是流编辑器,对文本进行过滤和转换,最常用于”查找替换”。常用命令:s/旧/新/ 替换、d 删除、p 打印、a/i 追加/插入。常用选项:-i 直接修改文件(慎用,建议先备份)、-n 抑制默认输出(配合 p 使用):
$ sed 's/foo/bar/g' file.txt # 将所有 foo 替换为 bar(全局) $ sed -n '5,10p' data.txt # 只打印第 5 到 10 行 $ sed '/^#/d' config.conf # 删除所有以 # 开头的注释行 $ sed -i.bak 's/old/new/' file.txt # 替换并备份原文件
语法:diff [选项] 文件1 文件2。diff 比较两个文件或目录的差异,常用于代码审查和版本对比。常用选项:-u 以统一格式输出(更易读)、-r 递归比较目录、-q 仅报告是否有差异(不显示详情):
$ diff -u old.sh new.sh # 显示统一差异格式 $ diff -r dir1/ dir2/ # 比较两个目录 $ diff -q file1 file2 # 只报告是否相同
进程管理与系统信息
在服务器运维和开发调试场景中,查看进程状态、管理系统资源、排查网络与用户是必不可少的技能。
进程查看与控制:ps / top / htop / kill
ps(process status)列出当前运行的进程。aux 组合是最常用的形式,显示系统中所有进程的详细信息:
$ ps aux # 列出所有进程 $ ps aux | grep nginx # 查找 nginx 进程 $ ps -ef | grep python # 另一种常用形式
ps aux 输出的各列含义如下:
| 列 | 含义 | 典型值 |
|---|---|---|
| USER | 进程所有者 | root / www-data |
| PID | 进程 ID | 1234 |
| %CPU | CPU 占用率 | 2.3 |
| %MEM | 内存占用率 | 1.5 |
| VSZ | 虚拟内存大小(KB) | 256000 |
| RSS | 物理内存使用量(KB) | 32456 |
| STAT | 进程状态 | R(运行)/S(睡眠)/Z(僵尸)/D(不可中断) |
| START | 启动时间 | 10:30 或 Aug 19 |
| COMMAND | 启动命令 | /usr/bin/python3 app.py |
top 提供实时动态的进程监控视图,默认每 3 秒刷新一次。在 top 界面中按 P 按 CPU 排序,按 M 按内存排序,按 q 退出。
htop 是 top 的增强版(需额外安装,如 apt install htop 或 brew install htop),提供彩色界面和鼠标操作:F3 搜索进程、F4 过滤、F5 树状视图、F6 排序、F9 终止进程、F10 退出:
$ htop
kill 向进程发送信号,最常用于终止进程。kill PID 发送 SIGTERM(优雅终止),kill -9 PID 发送 SIGKILL(强制终止,不可被忽略),killall name 按进程名终止:
$ kill 1234 # 优雅终止 PID 1234 $ kill -9 1234 # 强制终止 $ killall nginx # 终止所有名为 nginx 的进程 $ pkill -f "python app.py" # 按命令行模式匹配终止
优先使用 kill PID(SIGTERM),给进程保存数据和清理资源的机会;只有在进程无响应时才用 kill -9(SIGKILL),因为后者直接在内核层面终止进程,可能导致数据丢失。
后台任务管理:& / jobs / fg / bg
在命令末尾加 & 可将任务放到后台运行,Shell 立即返回提示符;jobs 查看后台任务列表,fg/bg 在前后台之间切换:
$ sleep 100 & # 后台运行,立即返回提示符 [1] 12345 # 方括号内是任务编号,后面是 PID $ jobs # 查看后台任务 [1]+ Running sleep 100 & $ fg %1 # 将任务 1 调到前台 $ bg %1 # 将挂起的任务 1 放到后台继续运行
前台任务按 Ctrl+Z 会挂起(暂停),再用 bg 转到后台继续运行;fg/bg 后用 %任务编号 指定具体任务。
系统资源信息:df / du / free / uname / uptime
df(disk free)查看磁盘空间使用情况,-h 以人类可读格式显示:
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 32G 16G 67% / tmpfs 4.0G 0 4.0G 0% /dev/shm
du(disk usage)查看目录或文件占用的磁盘空间,-s 只显示总计,-h 可读格式:
$ du -sh /var/log # 查看日志目录总大小 $ du -sh * # 当前目录各子项大小 $ du -h --max-depth=1 / # 根目录下一级各目录大小
free 查看内存使用情况,-h 可读格式,-m 以 MB 为单位:
$ free -h
total used free shared buff/cache available
Mem: 8.0G 2.3G 3.1G 128M 2.6G 5.2G
Swap: 2.0G 0.0B 2.0G
uname(unix name)显示系统信息,-a 显示全部:
$ uname -a Linux my-server 5.15.0-76-generic #84-Ubuntu SMP x86_64 GNU/Linux
uptime 显示系统运行时长和负载情况:
$ uptime 11:20:01 up 5 days, 2:31, 2 users, load average: 0.08, 0.03, 0.01
load average 后面的三个数字分别表示过去 1、5、15 分钟的平均负载——当数值接近或超过 CPU 核数时,说明系统负载偏高。
网络工具:netstat / curl / wget
netstat 查看网络连接和端口监听情况,是排查服务是否启动、端口是否被占用的首选工具。常用组合:-t 只看 TCP、-l 只看监听、-n 数字显示、-p 显示进程:
$ netstat -tlnp # 查看 TCP 监听端口及对应进程 $ netstat -an # 查看所有连接 $ netstat -rn # 查看路由表
部分新系统已用 ss 替代 netstat,用法一致:ss -tlnp。
curl 是功能强大的数据传输工具,支持下载、上传与 API 请求:
$ curl -O https://example.com/file.zip # 下载文件并保持原文件名 $ curl -I https://example.com/ # 只查看响应头 $ curl -X POST -d "name=alice" https://api.example.com/users # 发送 POST 请求
wget 专注于文件下载,支持断点续传与递归抓取:
$ wget https://example.com/file.zip # 下载文件 $ wget -c https://example.com/big.zip # 断点续传 $ wget -r -l 2 https://example.com/ # 递归下载 2 层页面
文件权限与状态:chmod / chown / stat
Linux 文件权限分为三组:所有者(owner)、组(group)、其他(others),每组有读(r=4)、写(w=2)、执行(x=1)三种权限。chmod(change mode)修改权限,chown(change owner)修改所有者和组:
$ chmod 755 script.sh # rwxr-xr-x:所有者全权限,组和其他读+执行 $ chmod 644 config.conf # rw-r--r--:所有者读写,组和其他只读 $ chmod +x deploy.sh # 给所有用户添加执行权限 $ chmod -R 755 public/ # 递归修改目录及内容权限 $ chown user:group file.txt # 同时修改所有者和组 $ chown user file.txt # 只修改所有者 $ chown -R www:www /var/www # 递归修改目录所有者
权限数字速查:
| 数字 | 权限 | 含义 | 典型场景 |
|---|---|---|---|
| 777 | rwxrwxrwx | 所有人全部权限 | 不推荐用于敏感文件 |
| 755 | rwxr-xr-x | 所有者全权限,其他读+执行 | 目录、可执行脚本 |
| 700 | rwx—— | 仅所有者全权限 | SSH 私钥 (~/.ssh/id_rsa) |
| 644 | rw-r–r– | 所有者读写,其他只读 | 普通配置文件 |
| 600 | rw——- | 仅所有者读写 | 敏感配置文件 |
stat 显示文件的详细状态信息,包括大小、权限(数字和符号)、inode 号以及访问/修改/状态更改时间:
$ stat file.txt # 输出示例:File: file.txt,Size: 1234,Access: (0644/-rw-r--r--)...
用户管理:useradd / passwd / whoami
whoami 显示当前登录的用户名:
$ whoami alice
useradd 创建新用户(需要 root 或 sudo 权限)。默认不创建家目录也不设置密码,-m 创建家目录、-s 指定登录 Shell:
$ sudo useradd -m -s /bin/bash alice # 创建用户 alice,建家目录,指定 Shell
passwd 设置或修改密码——用户创建后必须设置密码才能登录:
$ sudo passwd alice # 设置 alice 的密码 $ passwd # 修改自己的密码
管道、重定向与 Shell 技巧
管道和重定向是 Bash 的精髓所在——它们让简单的命令能够组合成强大的数据处理流水线。掌握这几个符号,你就从”会用命令”升级为”会用命令行”。
管道:|
管道符 | 将前一个命令的标准输出(stdout)直接作为后一个命令的标准输入(stdin)。这是一种进程间通信机制,无需借助临时文件,多个命令可以串联成一条数据处理流水线。

一个经典的管道组合:ls | grep "txt" | wc -l——列出文件,过滤含”txt”的行,统计行数,最终输出一个数字。拆开看,ls 负责产出数据,grep 负责过滤,wc -l 负责汇总,三者各司其职,通过管道协作完成了一个完整的查询任务。
$ ls | grep "txt" | wc -l 5 $ ps aux | grep python | grep -v grep # 找出 python 进程(排除 grep 自身) $ cat access.log | grep "404" | wc -l # 统计 404 错误数 $ history | grep "git" | tail -5 # 最近 5 条含 git 的命令
重定向:> / >> / < / 2>
Bash 中每个进程有三个标准数据流:标准输入(stdin,文件描述符 0)、标准输出(stdout,文件描述符 1)和标准错误(stderr,文件描述符 2)。默认情况下,stdin 来自键盘,stdout 和 stderr 都输出到终端屏幕。重定向操作符可以改变这些数据流的方向。
各操作符的具体行为:
| 操作符 | 方向 | 行为 | 示例 |
|---|---|---|---|
> |
stdout → 文件 | 写入文件(覆盖已有内容) | ls > files.txt |
>> |
stdout → 文件 | 追加到文件末尾 | echo "done" >> log.txt |
2> |
stderr → 文件 | 将错误信息写入文件 | cmd 2> err.log |
2>&1 |
stderr → stdout | 合并 stderr 到 stdout | cmd > all.log 2>&1 |
< |
文件 → stdin | 从文件读取输入 | mysql < dump.sql |
&> |
stdout+stderr → 文件 | 合并输出到文件(覆盖) | cmd &> all.log |
/dev/null |
丢弃输出 | 黑洞设备,写入即消失 | cmd 2>/dev/null |
$ ls -l > file_list.txt # 输出写入文件(覆盖) $ echo "build OK" >> build.log # 追加到日志 $ make 2> errors.txt # 只捕获编译错误 $ make > build.log 2>&1 # 正常输出和错误都写入同一文件 $ mysql < backup.sql # 从 SQL 文件恢复数据库 $ find / -name "*.tmp" 2>/dev/null # 隐藏权限不足的错误信息
tee:既输出又保存
tee 就像管道中的一个”T 型三通”——它从 stdin 读取数据,同时输出到终端和文件。这在需要实时查看命令输出又想保存日志时非常有用:
$ make 2>&1 | tee build.log # 屏幕和文件同时看到输出 $ ping google.com | tee ping.log # 实时查看 ping 结果并保存
xargs:将输入转为参数
xargs 将标准输入转换为命令行参数。很多命令(如 rm、mkdir)不接受管道输入,xargs 在管道和这些命令之间架起桥梁:
$ find . -name "*.bak" | xargs rm # 查找并删除所有 .bak 文件 $ cat urls.txt | xargs curl -s # 批量请求 URL 列表 $ find . -name "*.py" | xargs grep "main" # 在所有 .py 文件中搜索
通配符
通配符(globbing)是 Bash 对文件名的模式匹配机制,在命令执行前由 Shell 展开:
| 通配符 | 含义 | 示例 | 匹配结果 |
|---|---|---|---|
* |
匹配任意数量字符 | *.py |
app.py, test.py, utils.py |
? |
匹配单个字符 | file?.txt |
file1.txt, file2.txt(不匹配 file12.txt) |
[abc] |
匹配括号内任一字符 | file[12].txt |
file1.txt, file2.txt |
[a-z] |
匹配范围内的字符 | file[a-c].txt |
filea.txt, fileb.txt, filec.txt |
{a,b} |
展开为多个模式 | *.{py,sh} |
所有 .py 和 .sh 文件 |
变量与环境变量:echo / export
echo 输出文本或变量值,是 Shell 中最常用的”打印”命令:
$ echo "Hello World" # 输出文本 $ echo $HOME # 查看变量值($HOME 是主目录) $ echo $? # 查看上一条命令的退出码(0 成功,非 0 失败)
export 将变量导出为环境变量,使其对当前 Shell 启动的子进程(脚本、程序)可见。直接 MY_VAR=hello 只对当前 Shell 有效,export 后子进程才能读到;要永久生效,写入 ~/.bashrc:
$ export MY_VAR="hello" # 导出环境变量 $ export PATH="$PATH:/opt/myapp/bin" # 将新路径追加到 PATH
alias 与 history
alias 为常用命令创建简短别名,提高输入效率。别名通常写在 ~/.bashrc 或 ~/.bash_aliases 中以持久生效:
$ alias ll='ls -lah' # ll 即 ls -lah $ alias gs='git status' # gs 即 git status $ alias ..='cd ..' # .. 即 cd .. $ unalias ll # 取消别名
history 显示历史命令记录,配合 !!、!$、!n 可快速复用历史命令:
$ history | tail -10 # 最近 10 条命令 $ !! # 重复上一条命令(常用于 sudo !!) $ !$ # 上一条命令的最后一个参数 $ !42 # 执行第 42 条历史命令 $ !git # 执行最近一条以 git 开头的命令
例如先执行 mkdir /tmp/backup,再输入 cd !$ 就相当于 cd /tmp/backup——!$ 会自动展开为上一条命令的最后一个参数。
常用快捷键
Bash 在终端中提供了丰富的快捷键,熟练使用后能显著提升操作效率:
| 快捷键 | 功能 | 使用场景 |
|---|---|---|
Tab |
自动补全 | 补全命令名、文件名、路径 |
Ctrl+C |
终止当前命令 | 停止运行中的进程 |
Ctrl+D |
发送 EOF(退出) | 退出当前 Shell 或关闭终端输入 |
Ctrl+Z |
挂起进程到后台 | 暂停进程,用 fg 恢复、bg 后台继续 |
Ctrl+R |
反向搜索历史命令 | 快速找回之前输入过的命令 |
Ctrl+L |
清屏 | 等效于 clear |
Ctrl+A |
光标移到行首 | 快速编辑命令开头 |
Ctrl+E |
光标移到行尾 | 快速跳到命令末尾 |
Ctrl+W |
删除光标前一个单词 | 快速修改命令中的参数 |
Ctrl+U |
删除光标前至行首 | 清空当前输入重新开始 |
结论
Bash 命令行的学习曲线在于”记不住”,但真正的诀窍不是死记硬背每个参数,而是理解几个核心概念:文件系统是一棵树(pwd/ls/cd 在树上移动)、每个进程有 stdin/stdout/stderr 三个通道(管道和重定向改变通道方向)、命令可以像积木一样组合(| 将输出喂给下一个命令)。
学 Bash 命令的最佳方式是在真实任务中反复使用,而非背诵命令列表。 每天挑两三个命令在实际工作中使用,遇到不确定的参数时用 man 命令名 查阅手册——几个月后,这些命令就会成为肌肉记忆。





