设为首页收藏本站

[Linux公社] Linux基础:文件描述符与重定向

[复制链接]
查看317 | 回复10 | 2019-11-26 10:50:32 | 显示全部楼层 |阅读模式
文件描述符简介:文件描述符在形式上是一个非负整数,每一个文件描述符会与一个打开文件相对应,内核利用文件描述符来访问文件,最广为人知的文件描述符有stdin(标准输入),stdout(标准输出),stderr(标准错误),系统分别事先为它们保留了三个文件描述符0,1,2,我们也可以通过特殊命令给我们的的文件指定文件描述符。


重定向的意思:Linux中,IO重定向是将某一个文件描述符的内容转移到另一个指定的文件描述符中,通常与文件描述符有关。


最常用的我们可以将标准输出的内容重定向到指定文件中。通过重定向操作符(>和>>)可以将输出发送到文件中,而不是终端。>和>>略有差异,尽管两者都可以将文本重定向到文件,但是前者会清空文件,再写入内容,后者会将内容追加到现有的文件的尾部,默认情况下,重定向操作符针对的是标准输出,所以>等同于1>,类似的>>等同与1>>。


1:标准输出和标准错误重定向


2:利用<操作符将文件读入stdin


3:自定义文件描述符


4:tee命令


1:例如echo命令就是将指定的字符串送到标准输出,那么我们就可以结合echo命令将指定字符串发送到指定的文件:


2182261150221.png


在这里就是将文件描述符stdout(1)的内容通过重定向操作符重定向到了test.txt文件里。


在处理错误时,来自stderr的输出被倾倒入了文件/dev/null中,/dev/null是一个特殊的设备文件,他会丢弃接收到的任何数据。也常被称为黑洞,因为但是进入其中的数据都将一去不复返。同样的我们可以将标准错误输出也重定向到文件中,以供保存。


接下来这个命令会将stderr文本打印到屏幕上,而不是重定向到文本中,因为默认情况下重定向操作符针对的是标准输出,而这里stdout并没有输出,而是stderr输出


2182261150222.png


在重定向操作符前指定stderr文件描述符,就可以重定向stderr了


2182261150223.png


2: 从stdin读取输入的命令能以多种方式接收数据:


借助小于符号,我们可以像使用stdin那样读取文件中数据: cmd<file; (cmd命令需要文件数据)


还有使用管道时,经常将前一个命令的标准输出重定向成下一个命令的标准输入,cmd1 | cmd2。


3:使用exec命令创建一个用于读取的文件描述符(符号&表明后边的数字是一个文件描述符):


2182261150224.png


创建一个用于写入的文件描述符:


2182261150225.png


4:标准输出既可以被重定向到文件,也可以通过管道传入其他程序,但不能同时进行,命令tee可以实现这个操作,tee命令从stdin读取,将数据重定向到文件中,然后还将数据重定向到标准输出(stdout)中:cmd | tee file1 file2 | othercmd


例如ls命令列出和cat命令查看文件内容的结果均为标准输出:


2182261150226.png


-a 指定以追加的方式保存到文件


本知识点需了解exec命令,以及对文件的打开模式,标准输入输出的初步了解。

帖子地址: 

墙和鸡蛋 | 2019-11-26 11:51:50 | 显示全部楼层
楼下的接上
墙和鸡蛋 | 2019-11-26 12:12:25 | 显示全部楼层
我是个凑数的。。。
形腿望舞 | 2019-11-26 12:15:51 | 显示全部楼层
呵呵。。。
123456868 | 2019-11-26 12:16:29 | 显示全部楼层
这样的帖子,就当我没看见吧。哎~
David902 | 2019-11-26 12:45:33 | 显示全部楼层
提前做好准备啊!
普通人物怨 | 2019-11-26 13:33:09 | 显示全部楼层
没人回帖。。。我来个吧
我的苦恼冉 | 2019-11-26 13:39:08 | 显示全部楼层
佩服佩服!
顺势而为47 | 2019-11-26 13:42:28 | 显示全部楼层
前排顶,很好!
俺乃小潜mg | 2019-11-26 13:48:11 | 显示全部楼层
介是神马?!!
您需要登录后才可以回帖 登录 | 点击加入

本版积分规则