You Don't Need GUI:用命令行替代图形界面
GUI(图形界面)对普通用户友好,但它是为了降低早期 CLI 的学习门槛而生的——从 1970 年代 Xerox Star 8010 工作站开始,人们相信「点一点」比「敲命令」更容易上手。但它通常消耗更多计算资源,在自动化、批处理、远程操作(SSH)方面远不如 CLI 强大。
本文是经典开源项目 you-dont-need/You-Dont-Need-GUI 的整理版:把「你可能想用鼠标去点」的日常任务,逐个给出命令行实现。检索方式:本文按主题分组,找到你的场景直接抄命令即可;示例命令以 macOS / Linux 为主,系统差异处已注明。
文件与目录操作
文件管理 80% 的动作就是复制、移动、重命名、删除——这些在终端里都是一行命令,且天然支持通配符与批处理。
bash
cp readme.txt documents/ # 拷贝文件到目录
cp readme.txt readme.bak.txt # 创建文件副本(等价于右键「复制 + 粘贴 + 改名」)
cp readme{,.bak}.txt # 同上,用花括号展开;试试 touch foo{1,2,3}.txt 理解 {} 的威力
cp -a myMusic myMedia/ # 拷贝整个目录(-a 保留权限/链接等属性)
cp -a myMusic myMedia/myMusic/ # 或明确目标位置
mv readme.txt documents/ # 移动文件;注意目标目录末尾的斜杠 /,否则会被当成重命名
mv readme.txt README.md # 重命名文件
mv myMedia myMusic/ # 移动目录;同理,目标以 / 结尾才是「移进去」
mv myMedia/ myMusic/myMedia
rsync -a /images/ /images2/ # 合并目录;当心:同名文件会被覆盖
touch 'new file' # 创建新文件(已存在则只更新时间戳)
> 'new file' # 同上,但会清空已存在文件的内容
mkdir 'untitled folder' # 创建新目录
mkdir -p path/may/not/exist/untitled\ folder # 递归创建不存在的中间路径
rm my_useless_file # 删除文件——注意:是永久删除,等价于「移入回收站再清空」!
rm -r my_useless_folder # 递归删除整个目录,谨慎使用
find . -name "*.bak" -type f -delete # 按条件批量删除(先不加 -delete 跑一遍看范围!)查看与属性
把 Finder / 文件浏览器里「列表视图、简介、搜索陈旧文件」都搬到命令行:
bash
ls my_folder # 简单列出
ls -la my_folder # -l 列表格式;-a 含隐藏文件
ls -alrth my_folder # -r 倒序;-t 按修改时间排;-h 人类可读大小
tree # 目录树(Linux;macOS 先 brew install tree)
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' # macOS 无 tree 时的替代
du -sh node_modules/ # 目录/文件占用的总大小
stat -x readme.md # 文件详细信息(macOS)
stat readme.md # 文件详细信息(Linux)
find my_folder -mtime +5 # 找出 5 天前之后未再修改的陈旧文件文本内容与检索(grep)
「看文件」与「在文件里搜」是终端最频繁的两种阅读操作:
bash
cat apps/settings.py # 直接输出文件全部内容
less apps/settings.py # 大文件分页阅读(空格翻页、q 退出)
grep -i "Query" file.txt # 在文件中检索文本
grep 常用参数说明:
-i:忽略大小写匹配(-i = ignore case);-A/-B/-C<N>:顺带输出上下文,-A后 N 行、-B前 N 行、-C前后各 N 行;-E:按正则表达式匹配(等价egrep);-v:反选——输出不匹配的行;-l:只输出命中的文件名(适合「哪些文件里有这个东西」);-F:把检索词当纯文本,不解释为正则(等价fgrep);-r:递归检索整个目录下所有文件;-o:只输出匹配到的片段,而不是整行;-a:把二进制文件也当文本检索,而不是默认跳过。
检索代码时也可以换用更快的专用工具:ack、ag(The Silver Searcher)、ripgrep(rg),它们在递归检索大仓库时更快、且默认尊重 .gitignore。
归档与压缩
告别「右键 → 压缩 / 解压」,也不用再装 WinRAR:
bash
zip -r archive_name.zip folder_to_compress # 压缩整个目录
unzip archive_name.zip # 解压
zipinfo archive_name.zip # 只查看压缩包内容清单
unzip -l archive_name.zip # 同上(-l = list)打开与预览
bash
open file # 用默认程序打开文件(macOS)
xdg-open file # 同上(Linux)
open -a appName file # 指定应用打开(macOS)
imgcat image.png # 在终端里直接预览图片(macOS iTerm2)
qlmanage -p <file> # 从命令行调用 macOS「快速预览」系统与资源
活动监视器 / 任务管理器能干的事,下面全都能干:
bash
cal # 文本日历(当月)
cal 11 2018 # 某年某月的日历
date +%m/%d/%Y # 今天的日期
date -d "+7 days" # 一周后的日期(Linux)
date -j -v+7d # 一周后的日期(macOS)
bc # 计算器;bc -l 开启浮点数学库
df -h # 磁盘分区与用量总览
top # 进程与 CPU/内存实时视图
htop # 更好用的 top(brew install htop)
top -o vsize # 按内存排序,看是什么拖慢了 mac
killall program_name # 强制退出某个应用(按名字,如 killall Safari)网络与域名
不开浏览器、不装网络工具箱,直连诊断:
bash
curl -i umair.surge.sh # 查看 HTTP 响应头与状态(-i = include headers)
nc -vz www.google.com 443 # 检查某地址某端口能否连通
nc -vz 1.1.1.1 53
dig www.google.com # 查看域名的 DNS 解析记录
whois www.google.com # 查看域名注册人与注册信息历史记录与命令行技巧

写给 macOS 用户,但 bash / zsh 大多通用:
bash
!! # 再执行一次上一条命令
sudo !! # 以管理员权限执行上一条命令
!<word> # 找出并执行历史上以 <word> 开头的最近命令
!<word>:p # 只打印该命令,不执行(:p = print)
<space>command # 行首空格 = 执行但不写入历史记录
echo "ls -l" | at midnight # 在指定时间执行命令(macOS 默认无 at,需 sudo launchctl 启用)
caffeinate -u -t 3600 # 接下来一小时不让 mac 休眠
ls -lhs # 按文件大小排序并显示可读大小
top -o vsize # 看是什么进程占内存拖慢系统Shell 热键
编辑命令时手不离开主键区,效率翻倍:
| 热键 | 作用 |
|---|---|
Ctrl + A | 跳到当前命令行的行首 |
Ctrl + E | 跳到当前命令行的行尾 |
Ctrl + L | 清屏(等同 clear) |
Ctrl + U | 删除光标之前的内容(行尾处即清空整行) |
Ctrl + H | 等同退格 Backspace |
Ctrl + R | 反向搜索历史命令 |
Ctrl + C | 强制终止当前正在运行的命令 |
Ctrl + D | 退出当前 shell |
Ctrl + Z | 挂起当前程序到后台,fg 恢复 |
Ctrl + W | 删除光标前的一个词 |
Ctrl + K | 删除光标之后到行尾的内容 |
Ctrl + T | 交换光标前的两个字符 |
Ctrl + F / Ctrl + B | 光标向前 / 向后移动一个字符 |
Esc + T / Alt + T | 交换光标前的两个词 |
Alt + F / Alt + B | 光标前进 / 后退一个词 |
Alt + . | 粘贴上一条命令的最后一个参数 |
Tab | 自动补全文件 / 目录名 |
记不住这些命令怎么办
- 用
man <命令>查看手册,或man -k <关键词>搜索手册; - 在线查:Google / Stack Overflow;
- 装
tldr:由社区维护的、简化版的man页面合集,每个命令只给出最常用的几个例子——终端速查的终极方案; - 常用命令进阶可搭配
alias固化自己的高频片段。
来源与致谢
内容整理自开源项目 you-dont-need/You-Dont-Need-GUI(含社区中文翻译),正文结构按文档站排版习惯重新编排。文中插图版权归原作者:
grep.jpg:Julia Evans(@b0rk,wizardzines.com)cli_tips.jpg:Addy Osmani(@addyosmani,出自 Google Developer 分享的 CLI 技巧)
相关主题:Linux 与系统管理、监控与告警。