1、标准输出文件(stdout):stdout 的文件描述符为1,默认输出到屏幕。
2、标准错误文件(stderr):stderr的文件描述符为2,默认输出到屏幕。
3、输出重定向简单理解就是把输出的内容写入到文件,而不是输出到屏幕。
4、输出重定向的符号是 > (大于号)。
- 1)、command > file:标准输出重定向到文件(覆盖)
- 2)、command >> file:标准输出重定向到文件(追加)
- 3)、command 2> file:标准错误输出重定向到文件(覆盖)
- 4)、command 2>> file:标准错误输出重定向到文件(追加)
- 5)、command 2> /dev/null :标准错误输出重定向到回收站
- 6)、command &> file:标准输出和标准错误输出重定向到文件(覆盖)
- 7)、command &>> file:标准输出和标准错误输出重定向到文件(追加,既正确输出和错误输出保存在同一个文件)
- 8)、command > file 2>&1:标准输出和标准错误输出重定向到文件(覆盖),功能和第 6 点一样。
- 9)、command >> file 2>&1:标准输出和标准错误输出重定向到文件(追加),功能和第 7 点一样。
- 10)、command > file1 2> file2:将标准输出重定向到 file1,将标准错误输出重定向到file2。
- 11)、command >> file1 2>> file2:将标准输出重定向追加到 file1,将标准错误输出重定向追加到file2。
- 12)、command > file 2>&1:标准输出和标准错误输出重定向到一个文件(覆盖)
- 13)、command >> file 2>&1:标准输出和标准错误输出重定向到一个文件(追加)
5、实操练习:
- ①、> file:输出重定向到文件(覆盖)
[root@localhost ~]#
[root@localhost ~]# date ## 输入 date 命令,屏幕上输出日期
Wed Oct 20 10:25:53 CST 2021
[root@localhost ~]#
## 把 date 的输出重定向到 date.txt 文件,
## 重定向后屏幕不会输出日期,而是把内容写入 date.txt 文件
[root@localhost ~]# date > date.txt
[root@localhost ~]#
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Oct 20 10:26 date.txt ## 重定向的文件
[root@localhost ~]#
[root@localhost ~]# cat date.txt ## date 的内容
Wed Oct 20 10:26:07 CST 2021
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# date > date.txt ## 再执行一次
[root@localhost ~]#
[root@localhost ~]# cat date.txt ## 覆盖旧的文件内容
Wed Oct 20 10:33:02 CST 2021
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# echo "i am root" > date.txt ## 输出一句话重定向到 date.txt
[root@localhost ~]#
[root@localhost ~]# cat date.txt ## 新内容覆盖旧内容
i am root
[root@localhost ~]#
- ②、>> file:标准输出重定向到文件(追加)
[root@localhost ~]# cat date.txt ##/ 原来已有的内容
i am root
[root@localhost ~]# date >> date.txt ## 输出 dete (时间)重定向追加到 date.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat date.txt ## 已追加 date 内容到 date.txt 文件
i am root
Wed Oct 20 10:48:41 CST 2021
[root@localhost ~]#
[root@localhost ~]# cal >> date.txt ## 输出 cal (日历)重定向追加到 date.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat date.txt ## 已追加 cal 内容到 date.txt 文件
i am root
Wed Oct 20 10:48:41 CST 2021
October 2021
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
[root@localhost ~]#
- ③、2> file:标准错误输出重定向到文件(覆盖)
[root@localhost ~]# 123 ## 错误的输入会产生报错。没有123 这个命令
-bash: 123: command not found
[root@localhost ~]#
[root@localhost ~]# 123 2> err.txt ## 把错误输出重定向到 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# ll
total 8
-rw-r--r--. 1 root root 189 Oct 20 10:49 date.txt
-rw-r--r--. 1 root root 30 Oct 20 11:02 err.txt ## 存储错误信息的 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## err.txt 文件内容就是 123 错误输出的信息
-bash: 123: command not found
[root@localhost ~]#
[root@localhost ~]# abc ## 再执行一个错误输出 abc
-bash: abc: command not found
[root@localhost ~]#
[root@localhost ~]# abc 2> err.txt ## 把 abc 报错的内容重定向到 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## abc 的错误信息覆盖了 err.txt 的旧内容
-bash: abc: command not found
[root@localhost ~]#
- ④、2>> file:标准错误输出重定向到文件(追加)
[root@localhost ~]#
[root@localhost ~]# efg 2>> err.txt ## 追加一条错误命令 efg 输出到 err.txt
[root@localhost ~]#
[root@localhost ~]# cat err.txt
-bash: abc: command not found ## 原来的错误输出信息
-bash: efg: command not found ## 追加的错误输出信息
[root@localhost ~]#
[root@localhost ~]# hijk 2>> err.txt ## 再追加一条错误命令 hijk 输出到 err.txt
[root@localhost ~]#
[root@localhost ~]# cat err.txt
-bash: abc: command not found ## 原来的错误输出信息
-bash: efg: command not found ## 原来的错误输出信息
-bash: hijk: command not found ## 追加的错误输出信息
[root@localhost ~]#
- 如果正确的输出用 2> 进行重定向,它会首先打印正确输出的结果到屏幕,然后清空存储错误信息的文件。如果正确输出用 2>> 进行重定向,它会打印正确输出的结果到屏幕,不会追加到存储错误信息的文件,保留原有的内容。
[root@localhost ~]# cat err.txt ## err.txt 原有保存的错误信息
-bash: abc: command not found
-bash: efg: command not found
-bash: hijk: command not found
[root@localhost ~]#
[root@localhost ~]# date 2> err.txt ## 输入正确指令用错误信息重定向 2>
Wed Oct 20 11:49:40 CST 2021 ## 输出正确的信息到屏幕
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## 清空了 err.txt 文件原有的内容
[root@localhost ~]#
------------------ 分割线 ------------------
[root@localhost ~]#
[root@localhost ~]# abc 2> err.txt ## 错误信息输出到 err.txt 文件
[root@localhost ~]# efg 2>> err.txt
[root@localhost ~]# hijk 2>> err.txt
[root@localhost ~]# cat err.txt ## err.txt 已有错误的信息
-bash: abc: command not found
-bash: efg: command not found
-bash: hijk: command not found
[root@localhost ~]# date 2>> err.txt ## 正确的指令用 2>> 追加错误信息重定向 err.txt
Wed Oct 20 13:22:36 CST 2021 ## 输出正确的命令信息
[root@localhost ~]# cat err.txt ## 原有的错误信息仍保留
-bash: abc: command not found
-bash: efg: command not found
-bash: hijk: command not found
[root@localhost ~]#
- ⑤、2> /dev/null :标准错误输出重定向到回收站,重定向到 /dev/null 后就再也看不到信息。
[root@localhost ~]#
[root@localhost ~]# abc 2> /dev/null
[root@localhost ~]#
- ⑥、&> file:标准输出和标准错误输出重定向到文件(覆盖)
[root@localhost ~]#
[root@localhost ~]# date &> backups.txt ## 正确输出的信息保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# ll
total 4
-rw-r--r--. 1 root root 29 Oct 20 14:31 backups.txt
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## 正确输出的内容
Wed Oct 20 14:31:19 CST 2021
[root@localhost ~]#
[root@localhost ~]# abc &> backups.txt ## 错误输出的信息也保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## 错误输出的内容,覆盖了以前的内容
-bash: abc: command not found
[root@localhost ~]#
[root@localhost ~]#
- ⑦、&>> file:标准输出和标准错误输出重定向到文件(追加,既正确输出和错误输出保存在同一个文件)
[root@localhost ~]# cat backups.txt ## backups.txt 文件原有的信息
-bash: abc: command not found
[root@localhost ~]#
[root@localhost ~]# date &>> backups.txt ## 正确输出的信息追加保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt
-bash: abc: command not found
Wed Oct 20 14:40:09 CST 2021 ## 追加正确的信息
[root@localhost ~]#
[root@localhost ~]# ls abc &>> backups.txt ## 错误输出的信息也追加保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt
-bash: abc: command not found
Wed Oct 20 14:40:09 CST 2021
ls: cannot access abc: No such file or directory ## 追加错误的信息
[root@localhost ~]#
- ⑧、> file 2>&1:标准输出和标准错误输出重定向到文件(覆盖),功能和第 6 点一样。
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## 原有 backups.txt 文件的内容
-bash: abc: command not found
Wed Oct 20 14:40:09 CST 2021
ls: cannot access abc: No such file or directory
[root@localhost ~]#
[root@localhost ~]# date > backups.txt 2>&1 ## 正确输出的信息保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## 覆盖了 backups.txt 旧的内容
Wed Oct 20 15:24:03 CST 2021
[root@localhost ~]#
[root@localhost ~]# abc > backups.txt 2>&1 ## 错误输出的信息也保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## 覆盖了 backups.txt 旧的内容
-bash: abc: command not found
[root@localhost ~]#
- ⑨、>> file 2>&1:标准输出和标准错误输出重定向到文件(追加),功能和第 7 点一样。
[root@localhost ~]# cat backups.txt ## 原有 backups.txt 文件的内容
-bash: abc: command not found
[root@localhost ~]#
[root@localhost ~]# date >> backups.txt 2>&1 ## 正确输出的信息追加保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt
-bash: abc: command not found
Wed Oct 20 16:37:12 CST 2021 # 追加正确的信息
[root@localhost ~]#
[root@localhost ~]# ls abc >> backups.txt 2>&1 ## 错误输出的信息也追加保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt
-bash: abc: command not found
Wed Oct 20 16:37:12 CST 2021
ls: cannot access abc: No such file or directory ## 追加错误的信息
[root@localhost ~]#
- ⑩、>file1 2>file2:将标准输出重定向到 file1,将标准错误输出重定向到file2。
[root@localhost ~]# ll ##/ 现在目录下没有文件
total 0
[root@localhost ~]# date > backups.txt 2> err.txt ## 正确输出的信息保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# ll ## 命令执行后会生成两个文件。
total 4
-rw-r--r--. 1 root root 29 Oct 20 16:52 backups.txt
-rw-r--r--. 1 root root 0 Oct 20 16:52 err.txt
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## backups.txt 存储正确输出信息
Wed Oct 20 16:52:48 CST 2021
[root@localhost ~]#
[root@localhost ~]# ls abc > backups.txt 2> err.txt ## 错误输出的信息保存到 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## err.txt 存储错误输出信息
ls: cannot access abc: No such file or directory
[root@localhost ~]#
[root@localhost ~]#
- ⑩-①、>>file1 2>>file2:将标准输出重定向追加到 file1,将标准错误输出重定向追加到file2。
[root@localhost ~]# cat backups.txt ##/ backups.txt 现有的信息
Wed Oct 20 16:52:48 CST 2021
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## err.txt 现有的信息
ls: cannot access abc: No such file or directory
[root@localhost ~]#
[root@localhost ~]# date >> backups.txt 2>> err.txt ## 正确输出的信息追加保存到 backups.txt 文件
[root@localhost ~]#
[root@localhost ~]# abc >> backups.txt 2>> err.txt ## 错误输出的信息也追加保存到 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# date >> backups.txt 2>> err.txt ## 正确输出的信息追加保存到 backups.txt 文件
[root@localhost ~]# ls efg >> backups.txt 2>> err.txt ## 错误输出的信息也追加保存到 err.txt 文件
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## backups.txt 存储正确输出信息
Wed Oct 20 16:52:48 CST 2021
Wed Oct 20 16:55:06 CST 2021
Wed Oct 20 16:55:48 CST 2021
[root@localhost ~]#
[root@localhost ~]# cat err.txt ## err.txt 存储错误输出信息
ls: cannot access abc: No such file or directory
-bash: abc: command not found
ls: cannot access efg: No such file or directory
[root@localhost ~]#
- ⑩-②、> file 2>&1:标准输出和标准错误输出重定向到一个文件(覆盖)
## 同时执行正确输出和错误输出,并把反馈信息保存到 backups.txt 文件
[root@localhost ~]# (echo "test" ; abc) > backups.txt 2>&1
[root@localhost ~]#
[root@localhost ~]# ll ## 生成 backups.txt
total 4
-rw-r--r--. 1 root root 35 Oct 21 09:11 backups.txt
[root@localhost ~]# cat backups.txt ## backups.txt 文件的信息
test
-bash: abc: command not found
[root@localhost ~]#
## 再次执行正确信息和错误信息重定向到 backups.txt 文件
[root@localhost ~]# (echo "hello" ; abc ; ls 123) > backups.txt 2>&1
[root@localhost ~]# cat backups.txt ## backups.txt 文件的信息
hello
-bash: abc: command not found
ls: cannot access 123: No such file or directory
[root@localhost ~]#
⑩-③、>> file 2>&1:标准输出和标准错误输出重定向到一个文件(追加)
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## backups.txt 现有的信息
hello
-bash: abc: command not found
ls: cannot access 123: No such file or directory
## 重新执行正确信息和错误信息重定向到 backups.txt 文件
[root@localhost ~]# (echo "hello world" ; efg ; ls 456) >> backups.txt 2>&1
[root@localhost ~]#
[root@localhost ~]# cat backups.txt ## backups.txt 追加后的信息
hello
-bash: abc: command not found
ls: cannot access 123: No such file or directory
hello world ## {...
-bash: efg: command not found ## 追加后的信息
ls: cannot access 456: No such file or directory ## ...}
[root@localhost ~]#
网友评论