阿Q的Linux运维学习之路(day15-1)-Linux输入与输出-重定向

概述

重定向就是将我们原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。比如我们每天定时备份数据的时候,希望将备份数据的结果保存到某个文件中。这样我们第二天就可以查看这个文件得知备份成功还是失败

重定向的使用场景

  1. 当屏幕输出很重要的信息时,而且希望保存重要的信息时。
  2. 后台执行中的程序频繁干扰屏幕正常的输出结果时。
  3. 系统的例行命令,例如定时任务的执行结果希望保存下来时。
  4. 一些执行命令,我们已经知道可能会出现错误信息,不想再看到报错时。
  5. 错误日志与正确日志需要分别输出至不同的文件保存时。
标准输入与输出

学习重定向我们首先要了解Linux系统标准的输入与输出。
当我们运行一个程序时通常会自动打开三个标准文件,分别是标准输入,标准输出,错误输出。

名称 文件描述 作用
标准输入(STDIN) 0 默认是键盘,也可以是文件或其他命令的输出。
标准输出(STDOUT) 1 默认输出到屏幕
错误输出(STDERR) 2 默认输出到屏幕
文件名称(filename) 3+
进程将从标准的输入中得到数据,将正常的输出结果以及错误的输出信息都打印至屏幕终端。

进程是使用文件描述符(file descriptors)来管理打开的文件

输出设备(链接指向):

[root@localhost ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Mar 18 08:28 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Mar 18 08:28 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Mar 18 08:28 /dev/stdout -> /proc/self/fd/1

输出重定向

输出重定向就是改变输出内容的位置。
输出重定向的方式:

类型 操作符 用途
标准覆盖输出重定向 > 将程序输出的正确结果输出到指定的文件中,会覆盖文件原有的内容
标准追加输出重定向 >> 将程序输出的正确结果以追加的方式输出到指定文件,不会覆盖原有文件
错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中,会覆盖文件原有的内容
错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到指定文件,不会覆盖原有文件
标准输入重定向 << 将命令中接收输入的途径由默认的键盘更改为指定的文件或命令
案例演示
  1. 标准输出重定向

    标准覆盖输出重定向,先清空文件内容,再写入,如果文件不存在则新建
    [root@localhost ~]# ifconfig ens32 > file.txt

    标准追加输出重定向,向配置文件末尾追加内容
    [root@localhost ~]# echo "my name is Q" >> file.txt

  2. 错误输出重定向

    正确的输出以及错误的输出重定向至不同文件
    [oldQ@localhost ~]$ find /etc -name "*.conf*" 1>a 2>b

  3. 正确和错误输出结果重定向到相同位置

    将标准输出和标准错误输出重定向到同一文件,混合输出
    [oldQ@localhost ~]$ find /etc -name "*.conf*" &>ab

    合并两个文件内容至一个文件
    [oldQ@localhost ~]$ cat a b > c

  4. 重定向到空设备/dev/null

    将产生的任何数据都放入黑洞设备,放入后则视为丢弃。
    [root@localhost ~]# ls /root /error >ab 2>/dev/null
    [root@localhost ~]# ls /root /error >ab &>/dev/null

  5. 脚本中使用重定向

    [root@localhost ~]# vim ping.sh
    ping -c1 10.0.0.1 &>/dev/null
    if [ $? -eq 0 ];then
        echo "10.0.0.1 is up." >>up.txt
    else
        echo "10.0.0.1 is down." >>down.txt
    fi
    [root@localhost ~]# chmod +x ping.sh
    [root@localhost ~]# ./ping.sh
    

    $? 是用来判断上一条命令的执行结果,0表示ok,只要不是0都是错的。

  6. 两条命令同时重定向

    无论ls命令执行是否成功,都会执行date命令
    [root@localhost ~]# ls ; date

    ls和date分为两个整体,左右重定向位置互不影响。
    [root@localhost ~]# ls ; date &>/dev/null

    使两个命令同时定向到一个位置
    [root@localhost ~]# (ls ; date) &>/dev/null

发布了38 篇原创文章 · 获赞 0 · 访问量 587

猜你喜欢

转载自blog.csdn.net/qq_39095114/article/details/104944479