2.2 通配符、重定向与管道
通配符、重定向与管道
📋 命令执行总结
通配符(Wildcard)
| 通配符 | 含义 | 示例 |
|---|---|---|
* |
匹配任意多个字符(包括0个) | *.txt 匹配所有 txt 文件 |
? |
匹配恰好一个字符 | file?.txt 匹配 file1.txt、fileA.txt |
[abc] |
匹配方括号中的任意一个字符 | file[123].txt 匹配 file1.txt、file2.txt、file3.txt |
[a-z] |
匹配范围内的一个字符 | file[a-c].txt 匹配 filea.txt、fileb.txt、filec.txt |
{a,b,c} |
匹配花括号中的任意一项(扩展) | file{a,b,c}.txt 同上 |
重定向(Redirection)
| 符号 | 作用 | 示例 |
|---|---|---|
> |
覆盖输出到文件 | echo hello > file.txt |
>> |
追加输出到文件末尾 | echo world >> file.txt |
2> |
覆盖重定向错误输出 | ls notexist 2> error.log |
2>> |
追加重定向错误输出 | ls notexist 2>> error.log |
&> |
同时重定向标准和错误 | ls notexist &> all.log |
< |
从文件读入作为输入 | wc -l < file.txt |
管道(Pipe)
| 符号 | 作用 | 示例 |
|---|---|---|
| ` | ` | 把左边命令的输出作为右边命令的输入 |
标准输入输出
| 名称 | 数字代号 | 符号 | 默认去向 |
|---|---|---|---|
| 标准输出(stdout) | 1 | >、>> |
屏幕 |
| 标准错误(stderr) | 2 | 2>、2>> |
屏幕 |
| 标准输入(stdin) | 0 | < |
键盘 |
🧠 知识点总结
核心概念
通配符的作用
- 用模式匹配批量操作文件,无需逐个写出文件名
- 花括号展开(
{a,b,c})不是通配符,而是 Bash 的扩展特性,创建文件时非常方便
重定向的本质
- 改变命令的输入/输出方向,不再默认到屏幕或键盘
>覆盖输出会清空原文件内容,谨慎使用2>只能重定向错误信息,普通输出仍到屏幕&>将标准输出和标准错误合并到同一文件
管道的威力
- 将多个命令串联,每个命令专注做一件事
- 组合小命令完成复杂任务,这是 Linux 哲学的核心体现
- 管道不依赖中间文件,直接在内存中传递数据
常见组合模式
| 场景 | 命令组合 |
|---|---|
| 查找特定进程 | ps aux | grep 关键词 |
| 分页查看长输出 | ls -la | less |
| 统计结果数量 | ls | wc -l |
| 筛选并保存 | cat file | grep 关键词 > result.txt |
| 查看最新几条记录 | ls -lt | head -5 |
🔐 权限 / 用户 / 系统机制说明
重定向与权限的关系
- 写入文件需要对该目录有写权限
- 错误重定向(
2>)同样受文件权限限制 - 读取文件作为输入(
<)需要读权限
特殊文件说明
/dev/null
- 特殊设备文件,写入内容会被丢弃,读取立即返回 EOF
- 常用场景:
命令 2>/dev/null屏蔽错误输出
管道与子进程
- 管道两边的命令在子 shell 中执行
- 管道内的变量修改不会影响父 shell
📌 补充说明
重要提醒
| 提醒项 | 说明 |
|---|---|
| 覆盖风险 | > 会直接覆盖目标文件,无回收站,重要文件前先备份 |
| 通配符展开 | * 和 ? 由 shell 展开,不是命令本身的功能 |
| 管道效率 | 管道在内存中传输数据,比写入文件再读取要快得多 |
| 错误处理 | 2>/dev/null 可屏蔽错误信息,适合脚本自动化 |
实用技巧
| 技巧 | 命令示例 |
|---|---|
| 批量创建文件 | touch {1..100}.txt 一次创建 100 个文件 |
| 同时保存输出和错误 | command 2>&1 | tee output.log |
| 快速清空文件 | > file.txt 不执行任何命令直接清空 |
| 多重管道 | cat file | grep A | sort | uniq | wc -l |
| 查找并删除 | find . -name "*.log" | xargs rm |
2.2 通配符、重定向与管道
https://blog.sh462li.top/2026/05/25/2.2 通配符、重定向与管道/