诗和远方

文件描述符、重定向、/dev/null

文件描述符是与文件输入、输出关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stidin、stdout、和stderr。我们可以将某个文件描述符的内容重定向到另外一个文件描述符中。

文件描述符我们常见的就是系统预留的0,1和2这三个。他们的意义:

0 —— stdin(标准输入)

1 —— stdout (标准输出)

2 —— stderr (标准错误)


重定向操作,其实就是通过在shell命令后面追加一个重定向操作符号,将shell命令对应的文件描述符输出的文本信息重新输入到另外一个指定文件的操作。

重定向操作符号有两个>和>>。

对于标准输出的重定向操作,>等同于1>。


描述符的重定向还有下面的几种用法

你可以将stderr单独定向到一个文件,将stdout重定向到另一个文件:

cmd 2>stderr.txt 1>stdout.txt

也可以利用下面的方法,将stderr转换成stdout,使得stderr和stdout都被重新定向到同一个文件中:

cmd > output.txt 2>&1
cmd &> output.txt
cmd >& output.txt # 和上个表达式效果一样


/dev/null是一个特殊的设备文件,这个文件接收到的任何数据都会被丢弃。因此,null这个设备通常也被成为位桶(bit bucket)或黑洞。

简单地理解就是,重定向操作给这个/dev/null文件的所有东西都会被丢弃。

文件描述符输出的字符串,总是会显示出来的。如果我们在shell编程的时候,操作到某一条命令的返回结果,我们不想要这个时候又不想让这个输出结果打印到屏幕上,我们就可以重定向到/dev/null这个文件来,由/dev/null这个文件负责处理后事。

i=$(ls 123.txt) # i 获得命令 ls 123.txt 输出的标准输出。错误提示(标准错误)依然会打印到屏幕上显示
i=$(ls 123.txt 2> /dev/null) # ls命令如果出现了错误提示,就会被重定向到/dev/null去了


Related
/var/log目录下的Linux日志文件功能2019年06月24日
索引节点inode2019年06月21日
Shell脚本实例2019年06月20日
GCC编译C程序2019年06月18日
Linux内核编译/内核数据结构/同步机制/信号量2019年06月14日
shell中的算术运算2019年06月14日
iptables2019年06月14日
7 个致命的 Linux 命令2019年06月14日

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:1995
  • 页面总数:1
  • 分类总数:17
  • 标签总数:515
  • 评论总数:0
  • 浏览总数:516418
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML