美文网首页
4-14 Linux中的输出重定向

4-14 Linux中的输出重定向

作者: 捌千里路雲和月 | 来源:发表于2021-11-29 23:38 被阅读0次

    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 ~]#                                   
    
    

    相关文章

      网友评论

          本文标题:4-14 Linux中的输出重定向

          本文链接:https://www.haomeiwen.com/subject/epyaoltx.html