Linux的重定向符

重定向的核心思想:改变命令的默认输入(键盘)和默认输出(屏幕)数据流向。能让你轻松地将命令保存到文件、从文件读取数据、或把多个命令串联成强大的组合。

核心概念:三大数据流

Linux命令运行时,默认会打开三个数据流,可以把它想象成命令与外部世界通信的管道。

名称 文件描述符 默认去向 代表符号
标准输入 (stdin) 0 从键盘读取输入 <
标准输出 (stdout) 1 将正常结果输出到屏幕 >1>
标准错误 (stderr) 2 将错误信息输出到屏幕 2>

1.输出重定向

把结果保存到文件

即将命令的结果写入到文件,而不是打印在屏幕上

1.覆盖写入:>

将命令的输出写入文件,如果文件已存在,会覆盖其原有内容

bash 复制代码
[root@master tmp]# ls
hsperfdata_root                                                       vmware-root_655-4021587944  vmware-root_658-2697598381  vmware-root_662-2689143848  vmware-root_665-3988687359
systemd-private-5854d42a467a4b06ae78cd0f4be30b1e-ntpd.service-kSfrnq  vmware-root_656-2689274927  vmware-root_659-4013788787  vmware-root_663-4022243318
vmware-root_653-4013264490                                            vmware-root_657-4022112241  vmware-root_660-2697467306  vmware-root_664-2722697761
[root@master tmp]# ls
hsperfdata_root                                                       vmware-root_655-4021587944  vmware-root_658-2697598381  vmware-root_662-2689143848  vmware-root_665-3988687359
systemd-private-5854d42a467a4b06ae78cd0f4be30b1e-ntpd.service-kSfrnq  vmware-root_656-2689274927  vmware-root_659-4013788787  vmware-root_663-4022243318
vmware-root_653-4013264490                                            vmware-root_657-4022112241  vmware-root_660-2697467306  vmware-root_664-2722697761
[root@master tmp]# mkdir test
[root@master tmp]# ls -l > ./test/ls-output.txt  # 将/tmp目录下的ls结果(/tmp目录下的目录和文件信息)输入到/tmp/test目录下的ls-output.txt文件中
[root@master tmp]# ls
hsperfdata_root                                                       vmware-root_653-4013264490  vmware-root_657-4022112241  vmware-root_660-2697467306  vmware-root_664-2722697761
systemd-private-5854d42a467a4b06ae78cd0f4be30b1e-ntpd.service-kSfrnq  vmware-root_655-4021587944  vmware-root_658-2697598381  vmware-root_662-2689143848  vmware-root_665-3988687359
test                                                                  vmware-root_656-2689274927  vmware-root_659-4013788787  vmware-root_663-4022243318
[root@master tmp]# cd test
[root@master test]# ls
ls-output.txt
[root@master test]# cat ls-output.txt
total 0
drwxr-xr-x. 2 root root  6 Apr 20 22:54 hsperfdata_root
drwx------. 3 root root 17 Apr 22 09:53 systemd-private-5854d42a467a4b06ae78cd0f4be30b1e-ntpd.service-kSfrnq
drwxr-xr-x. 2 root root 27 Apr 22 10:14 test
drwx------. 2 root root  6 Apr  9 08:03 vmware-root_653-4013264490
drwx------. 2 root root  6 Apr  5 15:30 vmware-root_655-4021587944
drwx------. 2 root root  6 Apr  4 17:43 vmware-root_656-2689274927
drwx------. 2 root root  6 Apr  6 20:10 vmware-root_657-4022112241
drwx------. 2 root root  6 Apr  5 18:50 vmware-root_658-2697598381
drwx------. 2 root root  6 Apr 13 23:50 vmware-root_659-4013788787
drwx------. 2 root root  6 Mar 28 09:41 vmware-root_660-2697467306
drwx------. 2 root root  6 Apr  4 20:14 vmware-root_662-2689143848
drwx------. 2 root root  6 Apr 19 11:47 vmware-root_663-4022243318
drwx------. 2 root root  6 Apr  2 07:56 vmware-root_664-2722697761

下面的结果就体现了>重定向符的覆盖作用:

bash 复制代码
[root@master test]# echo "Hello World" > ls-output.txt
[root@master test]# cat ls-output.txt
Hello World

2.追加写入:>>

将输出追加的文件末尾,不会覆盖原有内容。适合用于记录日志。

bash 复制代码
[root@master test]# date >> time.log
[root@master test]# ls
ls-output.txt  time.log
[root@master test]# cat time.log
Wed Apr 22 10:22:39 CST 2026
[root@master test]# date >> time.log
[root@master test]# cat time.log
Wed Apr 22 10:22:39 CST 2026
Wed Apr 22 10:22:58 CST 2026

3.重定向错误:2>

专门用于保存程序运行时的错误信息

bash 复制代码
[root@master test]# ls
ls-output.txt  time.log
[root@master test]# ls not-exist.txt 2> error.log
[root@master test]# ls
error.log  ls-output.txt  time.log
[root@master test]# cat error.log
ls: cannot access not-exist.txt: No such file or directory

4.同时重定向所有输出:&>

将标准输出和标准错误一起重定向到一个文件,非常适合全量记录脚本运行日志

bash 复制代码
[root@master test]# ls -/ exist.txt &> output.txt
[root@master test]# ls
error.log  ls-output.txt  output.txt  time.log
[root@master test]# cat output.txt
ls: invalid option -- '/'
Try 'ls --help' for more information.

2.输入重定向

作用:让一个命令从文件而不是从键盘读取输入

1.从文件读取:<

bash 复制代码
[root@master test]# touch test.txt
[root@master test]# ls
error.log  ls-output.txt  output.txt  test.txt  time.log
[root@master test]# echo "你好呀,未来看到这个的你" > test.txt
[root@master test]# date >> test.txt
[root@master test]# cat < test.txt
你好呀,未来看到这个的你
Wed Apr 22 10:34:40 CST 2026
[root@master test]# wc -w < test.txt
7

操作符 功能 示例
> 标准输出覆盖重定向 echo "hello" > file.txt
>> 标准输出追加重定向 date >> log.txt
2> 标准错误覆盖重定向 command 2> error.log
&> 所有输出重定向 command &> all.txt
< 标准输入重定向 wc -l < file.txt
` ` 管道,连接命令
tee 输出到屏幕和文件 `ls
2>&1 将标准错误合并到标准输出 command > log 2>&1

注意 :使用>&>时要格外小心,因为它们会立即清空目标文件的所有内容。如果不小心覆盖了重要文件,数据可能无法找回。

相关推荐
CarIise9 小时前
下拉菜单HTML/CSS/JS实现
前端·css
隔窗听雨眠9 小时前
TDengine在AIOps中的硬核实战:从时序数据存储到智能运维的完整落地路径
大数据·运维·tdengine
2601_962128269 小时前
Nginx知识详解(理论+实战更易懂)
运维·nginx
Elastic 中国社区官方博客10 小时前
从建议到修复的 4 个阶段:使用 Elastic Workflows 实现人在回路中的自动化
运维·数据库·人工智能·后端·elasticsearch·ai·自动化
2601_9620715710 小时前
Java进阶(vue基础)
前端·javascript·vue.js
研☆香10 小时前
数组方法 splice讲解 拓展
开发语言·前端·javascript
码视野10 小时前
基于 Spring Boot + Vue3 的【城市地下燃气管网微泄漏感知与相邻地下空间燃爆预警中台】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端
淡海水10 小时前
05-03-栈队列-PriorityQueue-TElement-TPriority-NET6优先队列语义与四叉堆实现
服务器·前端·c#·priorityqueue·clr·telement
土星云SaturnCloud10 小时前
大型仓储AI视觉全场景落地实战:安全·效率·库存,32TOPS土星云边缘算力赋能分区部署
服务器·人工智能·ai·边缘计算
jing.wang_202510 小时前
制作一个带用户操作界面的精简Linux操作系统
linux·服务器