• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Linux标准输入、标准输出、重定向

武飞扬头像
挚夏
帮助2

前言

背景:我们在平时中常见到诸如

Linux常见的命令 >1>/dev/null2>&1 都是指的什么呢?

  1. > 代表重定向符

  2. 1>/dev/null 代表标准输出重定向到空设备文件,也就是不输出也不显示任何信息。其中 :1 代表标准输出,/dev/null 代表空设备文件。

  3. 2>&1 代表标准错误重定向且等同于标准输出,也就是 标准错误也重定向到空设备中 。其中:2代表标准错误,& 代表等同于。

command 1>/dev/null 2>&1 就是 不显示任何标准输出和标准错误

关于标准输入、输出和错误

3种文件描述符

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix/Linux 程序默认从stdin读取数据,标准输入就是命令的输入,默认指向键盘。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix/Linux 程序默认向stdout输出数据,标准输出就是命令的输出,默认指向终端屏幕。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix/Linux 程序会向stderr流中写入错误信息,标准错误是命令错误信息的输出,默认指向屏幕。

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

6种重定向符

  1. 命令 < 文件

    将文件作为命令的输入,如:mail -s "mymail" IloveChina@163.com < mailfile

    将文件 mailfile 作为信件内容发送。

  2. 命令 > 文件

    将命令的输出结果送到指定文件中,默认为标准输出重定向(即1>),且覆盖原文件内容。

  3. 命令 >! 文件

    将命令的输出结果送到指定文件中,若指定文件存在,则覆盖。

  4. 命令 >& 文件

    将命令的输出结果写入到指定文件中

  5. 命令 >> 文件

    将命令的输出结果附加到指定文件中(追加)

  6. 命令 >>& 文件

    将命令的 产生的任何输出结果附加到指定文件中

常用的有2、4、5,重定向的使用需要注意:

  1. 标准输入0、标准输出1、标准错误2需要分别重定向,一个重定向只能改变它们其中一个。
  2. 标准输入和标准输出可以省略。(当出现重定向符号左侧时)
  3. 文件描述符在重定向符号左侧直接写即可,在右侧时前面加&。
  4. 文件描述符与重定向符号之间不能有空格

例子

我们来解析一些例子:

# /home/pi需要根据用户名修改,且已存在temp目录,不存在则需 mkdir temp 创建新目录
# 将字符test输入到test.txt
pi@raspberrypi:/dev $ echo "test" > /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test
# 将字符test2222输入到已存在的test.txt,>覆盖原内容,>>追加原内容
pi@raspberrypi:/dev $ echo "test2222" > /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test2222
pi@raspberrypi:/dev $ echo "test2222" >> /home/pi/temp/test.txt
pi@raspberrypi:/dev $ cat /home/pi/temp/test.txt
test2222
test2222
# 将标准错误输出重定向到 err_out.txt 文件中,由于不存在test目录而不能创建文件导致错误,使用2>重定向错误到文件中,则控制台不显示错误输出
# 注意:前提要不存在test目录
pi@raspberrypi:~ $ touch /home/test/test/test.txt  2> err_out.txt
pi@raspberrypi:~ $ cat err_out.txt
touch: cannot touch '/home/test/test/test.txt': No such file or directory
# 将标准错误重定向到标准输出,将标准输出重定向到空设备文件
pi@raspberrypi:~ $ ls > /dev/null 2>&1 
pi@raspberrypi:~ $ ls 2&>1 > /dev/null # 两者等价 

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkbjek
系列文章
更多 icon
同类精品
更多 icon
继续加载