← 完全使用手册

与 Shell 对话 · 看与找
信息的读取与搜索

棱镜2026.6.3  ·  日志

这是《与 Shell 对话》系列的第二篇。第一篇教会了你导航文件系统、操作文件。现在你知道了文件放在哪里——但还不知道怎么读里面的内容、怎么从一堆文件里找到你需要的那个。这就是这篇要解决的问题。看完这篇,你将能:查看任意文件的内容、在大量文件中搜索特定文字、使用终端找到电脑上的任何东西。

上一篇:终端是你的新桌面  ·  下一篇:流水线与重定向

🔑 关键词索引

关键词一句话说明
cat把文件内容打印到屏幕——全量输出,适合短文件
less分页查看文件——看长文件时用它,可以上下翻、可以搜索
head / tail只看文件的开头或末尾几行。tail -f 能实时追踪日志
grep在文件内容中搜索指定的文字——终端里最强大的搜索工具
正则表达式一种描述「字符模式」的语言,^ $ . 这些符号不是乱码,是逻辑
find按名字/类型/大小/时间搜索文件——精确但语法稍绕
mdfindmacOS 的 Spotlight 搜索——用终端调出你平时在访达里搜东西的能力
file检测一个文件到底是什么类型——不信任文件后缀时用它
wc统计文件的行数、词数、字节数——Word Count
du / dfdu 看文件夹占多大空间,df 看硬盘还剩多少空间

一、看文件内容——从 cat 到 less 到 tail

第一篇里你用 ls 看到了文件名,用 cat 看了练习文件的内容。这一节把所有「看内容」的命令串起来,让你知道什么时候该用哪一个。

1.1 cat——全量输出,适合短文件

cat 文件名               # 把文件内容全部打印到屏幕
cat -n 文件名             # 显示行号
cat 文件1 文件2           # 把多个文件的内容连在一起输出

cat = Concatenate(连接)。它原本的设计意图是把多个文件的内容串起来输出。但对于终端初学者来说,它的主要用途是「看一眼这个文件里有什么」。

想试试的话,找一个小文件试一下:

cat ~/.zshrc         # 看看你的 shell 配置文件(很短的)
cat -n ~/.zshrc      # 带行号再看一遍

cat 的极限:如果文件超过一屏,内容会快速滚过屏幕。这不是 bug,它就是设计成这样的——把内容"倒"到屏幕上。你需要的是下面这个命令。

「cat 适合看短文件,less 适合看长文件」——把这个口诀记住。用错了会有点狼狈:一个 2000 行的日志文件 cat 出来,内容从你眼前飞过,什么都看不到。

1.2 less——长文件的正确打开方式

less 文件名              # 分页查看文件

less 一次只显示一屏内容,按空格翻到下一屏。这是终端里「看长东西」的标准方式。

进入 less 后的操作键:

按键效果备注
空格f向下翻一屏最常用的翻页方式
b向上翻一屏看过头了往回翻
↑ ↓逐行上下滚动翻过头几行时用
/关键词在文件内搜索输入 / 后打字,回车搜索,n 跳到下一个,N 跳回上一个
g跳到文件开头Go to start
G跳到文件末尾Go to end
=显示当前位置在文件中的百分比看进度
q退出 less不退出你就卡在这儿了

试一下:

less /etc/passwd       # Mac 的用户账户文件,看看里面是什么
# 进入 less 后:按空格翻页,按 / 搜索你的用户名,按 q 退出

less 不只是用来读文件的。 很多命令的输出也可以「管道」给 less——这个管道符号 | 下一篇会详细讲,但你可以先试一下:

ls -la /System/Library | less
# ls -la 的输出很长,但通过管道送给 less 后,就可以翻页看了

还记得上一篇的 man 命令吗?man ls 打开的手册页就是通过 less 显示的——所以翻页和退出的操作一模一样。

more 是早于 less 的翻页工具。less 在功能上是 more 的超集(所以有个玩笑:less is more)。你现在只需要 less,不需要 more。

1.3 head 和 tail——只看头尾

head 只看文件开头,tail 只看文件末尾:

head 文件名              # 默认显示前 10 行
head -n 20 文件名        # 显示前 20 行

tail 文件名              # 默认显示后 10 行
tail -n 20 文件名        # 显示后 20 行

试一下:

head -n 5 ~/.zshrc      # 看配置文件的前 5 行
tail -n 5 ~/.zshrc      # 看配置文件的最后 5 行

看起来很简单,但 tail 有一个绝招——-f(follow)模式:

tail -f 文件名           # 持续跟踪文件末尾,新内容实时显示

这是系统管理员最常用的命令之一。当某个程序在写日志文件时,tail -f 让你实时看到新写入的每一行。按 Ctrl + C 退出跟踪。

# 尝试跟踪系统日志(需要退出时按 Ctrl + C)
# 注意:如果你的 Mac 提示 Permission denied,说明该文件需要
# 管理员权限才能读取——这是正常的,换一个你权限内的文件试
tail -f /var/log/system.log

tail -f 的场景:你下载一个大文件,想看进度日志有没有更新;你在调试程序,想实时看错误输出;服务器出了问题,你 SSH 上去 tail -f /var/log/nginx/error.log 看最新报错。以后你会有无数次用到它。

但注意:tail -f 一旦运行就一直占用终端,不会自动退出。每次有新内容追加到文件末尾,它就会立即显示出来。想停止时按 Ctrl + C。这不是卡住了——它是在等你按停止。

二、搜索大师 grep

grep 是终端世界里最重要的命令之一。它的工作极其单纯:在文件内容中搜索指定的文字,把匹配到的行打印出来。

它的名字源自一个古老的行编辑器命令 g/re/p:Global Regular Expression Print。但你不需要记住这个——你只需要知道它怎么用。

2.1 基础用法

grep "关键词" 文件名           # 在文件中搜索,显示包含关键词的行
grep -i "关键词" 文件名         # 忽略大小写
grep -n "关键词" 文件名         # 同时显示行号
grep -c "关键词" 文件名         # 只统计匹配的行数,不显示内容
grep -v "关键词" 文件名         # 反向匹配——显示不包含关键词的行

grep 默认会在匹配的文字上加颜色高亮(在大多数 Mac 上已经是彩色的)。如果你的终端没显示颜色,可以主动加上:

grep --color=auto "关键词" 文件名   # 带颜色高亮显示匹配文字

试一下:

grep "export" ~/.zshrc         # 看看配置文件里有哪些 export 语句
grep -n "PATH" ~/.zshrc        # 带行号看 PATH 相关设置
grep -c "alias" ~/.zshrc       # 统计你设了多少个别名
grep -v "^#" ~/.zshrc          # 不看注释行(排除以 # 开头的行),只看有效配置

2.2 跨越多个文件搜索

当你不知道关键词在哪个文件中——或者想在所有文件里搜索时,-r(recursive,递归)搜索整个目录:

grep -r "关键文字" ~/Desktop/领域      # 在 Desktop/领域 里搜索
grep -ri "terminal" ~/Desktop          # 递归 + 忽略大小写
grep -rl "TODO" ~/Desktop              # -l 只显示包含匹配的文件名,不显示内容
grep -rL "TODO" ~/Desktop              # -L 只显示不包含匹配的文件名(反向的 -l)
grep -rn "sleepnow" ~/Desktop          # 递归 + 显示行号

在实际使用中,这几个选项可以任意组合。最常用的组合是 grep -rin "文字" 目录——递归、忽略大小写、显示行号、在一个目录里搜。

一个经常被混淆的点:grep 搜索的是文件内容,而不是文件名。想搜索文件名要用 findmdfind(下一节)。grep "python" 文件 是找文件里写了「python」这个单词的行;find . -name "*python*" 是找名字里带「python」的文件。两者完全不同。

2.3 grep 与管道——现在开始值得先看一眼

上一篇提到管道 | 可以把一个命令的输出传给另一个命令。grep 是管道最经典的搭档:

history | grep "ssh"              # 在命令历史中搜索所有带 ssh 的命令
ls -la ~/Desktop | grep "2026"    # 只显示 Desktop 里日期含 2026 的文件

这是 grep 的真正威力所在——它不只能搜索文件,还能搜索任何命令的输出。第三篇会系统讲管道,但现在先记住这种模式:命令 | grep 关键词

2.4 正则的第一次接触——grep 的搜索语言

grep 搜索时,"关键词" 里的内容不只是普通文字——它可以包含一些特殊符号来表示模式。这叫正则表达式(Regular Expression,简称 regex)。以下是三个最基础的:

符号含义例子匹配什么
^行首grep "^export" 文件以 export 开头的行
$行尾grep "true$" 文件以 true 结尾的行
.任意一个字符grep "c.t" 文件cat、cut、cot 都匹配——中间任意一字
# 在配置文件里试试正则
grep "^#" ~/.zshrc           # 所有以 # 开头的行(注释)
grep -v "^#" ~/.zshrc        # 所有不以 # 开头的行(有效配置)
grep -v "^$" ~/.zshrc        # 排除空行(更干净的版本:有效行 + 非空)

正则表达式是整个系列里最值得单独深入的话题。这篇只是让你知道它的存在——符号不是乱码,是逻辑。后面我们会专门展开。

grep 默认使用基础正则(BRE),有些符号(如 + ? {})需要用 \ 转义才能使用。加上 -E 选项可以切换到扩展正则(ERE),更接近你学到的标准正则。现在你只需要知道:当你的正则不按预期工作时,试试 grep -E

三、搜索文件——find 和 mdfind

grep 搜索的是文件内容。那文件呢?你想找到一个叫"笔记"的文件但不记得它在哪——这时用 findmdfind

3.1 find——精准但语法绕

find 起点目录 -name "文件名"     # 按名字查找

find 的第一参数是从哪开始找,然后才是条件。

find ~/Desktop -name "*.md"                      # Desktop 下所有 .md 文件
find ~/Desktop -name "*笔记*"                     # 名字里带"笔记"的文件
find ~/Desktop -name "*.md" -type f              # 只看文件(不包含文件夹)
find ~/Desktop -name "*.md" -type f -size +1M    # 只找大于 1MB 的 .md 文件
find ~/Desktop -name "*.md" -type d              # 找名字以 .md 结尾的文件夹

常用的 -type 选项:

类型含义
-type f只找文件(file)
-type d只找文件夹(directory)
-type l只找符号链接(link)

常用的 -name 选项支持通配符——和第一篇学的完全一样:* 匹配任意字符,? 匹配单个字符。

find 的搜索范围由你指定的起点决定。不给起点默认为当前目录(.)。find ~ 会搜索整个用户文件夹——范围越大越慢。尽量把搜索范围收窄,比如从 ~/Desktop 而不是 / 开始找。

3.2 ⚠️ find 的 -delete 必须小心

find 可以找到文件后直接删除:

find ~/Desktop -name "*.tmp" -delete    # 删除所有 .tmp 文件(⚠️ 谨慎!)

rm 一样,find -delete 不会进废纸篓。永远先用不带 -delete 的版本跑一遍,确认找到的是你想删的东西,再加 -delete。

# 安全做法:先看找到什么
find ~/Desktop -name "*.tmp"
# 确认无误后,再删
find ~/Desktop -name "*.tmp" -delete

3.3 mdfind——macOS 的 Spotlight 搜索

find 很强大,但它的语法对初学者来说有点绕。如果你只是想快速找到文件,macOS 提供了一个更友好的方式——mdfind,它调用的是你平时在访达右上角搜索时用的 Spotlight 索引。

mdfind 关键词              # 搜索所有包含该关键词的文件
mdfind -name 文件名         # 按文件名搜索
mdfind -onlyin 目录 关键词  # 只在指定目录内搜索

试一下:

mdfind 睡眠                  # 搜索所有包含"睡眠"的文件(不限文件名和内容)
mdfind -name "pmset"         # 搜索文件名带 pmset 的文件
mdfind -onlyin ~/Desktop 终端  # 只在桌面范围内搜索"终端"

mdfindfind 快的多——因为它不是实时遍历文件系统,而是查预先建好的索引。代价是新创建的文件可能不会立刻出现在结果中(索引有延迟)。

场景用 find用 mdfind
按文件名搜索find ~ -name "*.md"mdfind -name ".md"
按文件内容搜索搭配 grep 使用✅ 直接 mdfind 关键词
按大小/时间搜索✅ 支持 -size -mtime❌ 不支持(需配合其他工具)
刚创建的文件✅ 立刻能找到⚠️ 可能需等索引更新

一个实用原则:日常随便找文件用 mdfind(快、简单);需要精确条件或要处理刚创建的文件用 find。两个都学会,看场景选。

四、了解你的文件——类型、大小、用量

这一节是几个独立的小工具,各自回答一个问题。

4.1 file——它是什么类型的文件

文件后缀(.jpg、.pdf、.doc)可以被随意更改,不靠谱。file 命令通过读取文件的头部特征字节来判断真实类型:

file ~/Desktop/图片.png      # 检测文件类型
图片.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced

file /usr/bin/grep           # 连可执行文件类型也能检测
/usr/bin/grep: Mach-O 64-bit executable x86_64

file 不讲界面语言——它输出的是文件格式的标准名称,不一定是中文。但信息足够精确:分辨率、颜色深度、编码格式都会显示。

4.2 wc——数一数

wc = Word Count。统计文件有多少行、多少词、多少字节:

wc ~/.zshrc                     # 行数、词数、字节数
wc -l ~/.zshrc                  # 只看行数
wc -c ~/.zshrc                  # 只看字节数(约等于文件大小)

一个非常实用的组合——配合第一篇的 ls 和通配符,可以快速了解一个目录下的文件数量:

ls ~/Desktop | wc -l            # 桌面上有多少个文件和文件夹
ls ~/Desktop/领域 | wc -l       # Desktop/领域 里有多少东西

4.3 du——看看占了多少空间

du = Disk Usage。计算文件夹或文件占用了多少磁盘空间:

du -sh ~/Desktop                # Desktop 总占用了多大空间(-s 汇总,-h 人类可读)
du -sh ~/Downloads
du -sh ~/Desktop/*              # Desktop 里每个项目分别占多大

不加 -s 会递归显示每一级子文件夹的大小——输出非常长。du -sh 是日常最常用的组合,记住它:

组合含义
du -sh 目录只看该目录的总大小(汇总 + 人类可读)
du -sh 目录/*看该目录下一级各项目的大小
du -h 目录递归查看每一级(通常输出太长,配合 less 使用)

4.4 df——硬盘还剩多少

df = Disk Free。查看整个硬盘的容量、已用空间、可用空间:

df -h                           # 人类可读格式显示所有挂载卷的空间
df -h /                         # 只看主硬盘

输出示例:

df -h /
Filesystem     Size   Used  Avail Capacity  Mounted on
/dev/disk1s1  494Gi  420Gi   70Gi    86%    /

从左到右:总容量、已用、可用、使用百分比、挂载点。

三个实用场景:买新电脑前用 df -h 看还剩多少空间;感觉电脑变慢时用 du -sh ~/Downloads 看是不是下载文件夹塞满了;要备份之前用 du -sh ~/Desktop ~/Documents 先估个大小。

五、综合练习——用学过的命令调查你的电脑

从第一篇到这第二篇,你已经学了系统中最重要的操作和搜索命令。这个练习没有固定的"正确答案"——它是一个探索任务,用你学过的命令去了解你的电脑。

在开始之前,先创建本次练习用的文件夹:

mkdir -p ~/Desktop/终端练习/文档
cd ~/Desktop/终端练习/文档
touch 日记_2026年6月.txt 日记_2026年5月.txt 读书笔记.md 购物清单.txt

现在开始——每个任务都留了操作空间,先自己试,再看下面的参考命令:

任务一:这个文件夹里有什么

用第一篇学到的命令,看看这个文件夹里有哪些文件、各自多大、什么时候创建的。

👆 查看参考命令
ls -la ~/Desktop/终端练习/文档
ls -lh ~/Desktop/终端练习/文档

任务二:看看文件的开头和结尾

这些文件都是空的(刚创建的)。但你可以用 headtail 来验证它们确实没内容——wc -l 也可以。

👆 查看参考命令
# 多文件的组合用法
wc -l ~/Desktop/终端练习/文档/*
head -n 1 ~/Desktop/终端练习/文档/*

任务三:找一篇真正有内容的文件来探索

空文件没啥好查的。用 mdfindfind 在你的电脑上找到一篇你写过的 .md 文件:

👆 查看参考命令
# 方法一:用 mdfind 快速搜
mdfind -onlyin ~/Desktop ".md"

# 方法二:用 find 精准搜
find ~/Desktop -name "*.md"

# 选一个你找到的 .md 文件,把路径记下来,接下来我们用这个文件练习

任务四:用 less 读这个文件

找到文件后,用 less 打开它,在文件内搜索一个你记得出现过的词:

👆 查看参考命令
less ~/Desktop/领域/你的文件.md    # 把路径换成你找到的文件

# 在 less 里面:
#   空格    → 翻下一页
#   /关键词  → 搜索
#   n       → 跳到下一个匹配
#   N       → 跳回上一个匹配
#   q       → 退出

任务五:用 grep 在那个文件里搜索

退出 less 后,用 grep 在同一个文件中搜索同一个词,看看 grep 给的行号和在 less 里搜到的位置是否对应得上:

👆 查看参考命令
grep -n "关键词" ~/Desktop/领域/你的文件.md

# 再试试忽略大小写
grep -in "关键词" ~/Desktop/领域/你的文件.md

任务六:算算这个文件夹占了多少空间

用 du 和 df 了解一下磁盘占用:

👆 查看参考命令
# 练习文件夹占多大
du -sh ~/Desktop/终端练习

# 你整个桌面占多大
du -sh ~/Desktop

# 主硬盘还剩多少
df -h /

任务七:清理

和第一篇一样,练习完清除痕迹:

rm -rf ~/Desktop/终端练习

这个练习的精髓不在于每一步都做对——而在于你开始把命令组合起来用。第一篇学的导航 + 本篇学的查看和搜索,这就是真正的终端工作流。下一篇讲管道后,这些命令还能串成更强大的链条。

📌 本篇核心命令速查

命令作用最常用法
cat输出文件内容到屏幕cat 文件(短文件) cat -n 文件(带行号)
less分页查看文件less 文件 → 空格翻页,/关键词搜索,q 退出
head看文件开头几行head -n 20 文件
tail看文件末尾几行tail -n 20 文件 tail -f 文件(实时追踪)
grep在内容中搜索文字grep -rin "文字" 目录 命令 | grep 文字
find按条件搜索文件find 目录 -name "模式" -type f
mdfindSpotlight 快速搜索mdfind 关键词 mdfind -onlyin 目录 关键词
file检测文件真实类型file 文件
wc统计行数wc -l 文件 ls | wc -l(数文件数量)
du查看磁盘用量du -sh 目录
df查看可用空间df -h

待延伸线索

本篇提到了但未深入展开的方向,后续篇章会覆盖:


← 上一篇:终端是你的新桌面 下一篇:流水线与重定向 →