Linux 管道与重定向入门:把小命令拼成流水线
【摘要】 刚学 Linux 时,很多人只会一条命令一条命令地敲。真正让命令行好用的,是“管道”和“重定向”:它们能把简单命令组合成强大的处理流程。一、三个标准流每个进程默认有三条数据通道:标准输入 stdin(编号0)、标准输出 stdout(1)、标准错误 stderr(2)。命令正常结果走1,报错走2,默认都显示在终端。二、输出重定向ls > list.txt:把结果写入文件,覆盖原内容。ls >...
刚学 Linux 时,很多人只会一条命令一条命令地敲。真正让命令行好用的,是“管道”和“重定向”:它们能把简单命令组合成强大的处理流程。
一、三个标准流
每个进程默认有三条数据通道:标准输入 stdin(编号0)、标准输出 stdout(1)、标准错误 stderr(2)。命令正常结果走1,报错走2,默认都显示在终端。
二、输出重定向
- ls > list.txt:把结果写入文件,覆盖原内容。
- ls >> list.txt:追加到文件末尾。
- ls /nonexist 2> err.txt:只把错误写入文件。
- command > all.log 2>&1:正常输出和错误都写入同一个文件,写脚本、定时任务时非常常用。
- command > /dev/null 2>&1:丢掉所有输出,/dev/null 就是“黑洞”。
三、输入重定向
wc -l < list.txt 让命令从文件读取输入。还有 here-document:cat <<EOF > hello.txt,然后写若干行,最后以 EOF 结束,适合在脚本里直接生成配置文件。
四、管道 |
管道把前一个命令的 stdout 接到后一个命令的 stdin。例如:
- ps aux | grep nginx:查找 nginx 进程。
- cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head:统计访问最多的前10个IP。
- docker ps | wc -l:粗略统计容器数量(含表头)。
- history | tail -20:看最近20条命令。
每个命令只做一件事,组合起来就能完成复杂任务,这就是 Unix 哲学。
五、tee:边看边存
make 2>&1 | tee build.log 既在屏幕显示输出,又保存到文件。需要追加用 tee -a。
六、常见坑
-
会直接清空文件,sort a.txt > a.txt 会把文件变空,应写到临时文件再替换。
- 管道默认只传 stdout,想让错误也进管道要写 2>&1 |。
- sudo echo x > /etc/file 无效,因为重定向由当前 shell 完成,应使用 echo x | sudo tee /etc/file。
- 在脚本里加 set -o pipefail,才能发现管道中间命令的失败。
七、小练习
统计当前目录下各类扩展名的文件数量:ls | sed ‘s/.*.//’ | sort | uniq -c | sort -nr。动手改一改,换成自己的目录试试。掌握这些,日常查日志、处理文本就能快很多。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)