十年专注于品牌网站建设 十余年专注于网站建设_小程序开发_APP开发,低调、敢创新、有情怀!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

介绍Linux中的几种标准文件描述符

百恒网络 2017-09-25 8567

Linux系统将每个对象当作文件处理,这包括输入和输出进程。Linux用文件描述符(file descriptor)来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。每个进程一次多可以有九个文件描述符。出于特殊目的,bash shell保留了前三个文件描述符(0、1和2),详情见下表。

Linux的标准文件描述符

Linux的标准文件描述符

这三个特殊文件描述符会处理脚本的输入和输出。shell用它们将shell默认的输入和输出导向到相应的位置。下面南昌网络公司-百恒网络就来为大家介绍一下这些标准文件描述符,供大家参考!

一、STDIN

STDIN文件描述符代表shell的标准输入。对终端界面来说,标准输入是键盘。shell从STDIN 文件描述符对应的键盘获得输入,在用户输入时处理每个字符。

在使用输入重定向符号(<)时,Linux会用重定向指定的文件来替换标准输入文件描述符。 它会读取文件并提取数据,就如同它是键盘上键入的。

许多bash命令能接受STDIN的输入,尤其是没有在命令行上指定文件的话。下面是个用cat 命令处理STDIN输入的数据的例子。

$ cat

this is a test

this is a test

this is a second test.

this is a second test.

当在命令行上只输入cat命令时,它会从STDIN接受输入。输入一行,cat命令就会显示出 一行。

但你也可以通过STDIN重定向符号强制cat命令接受来自另一个非STDIN文件的输入。

$ cat < testfile

This is the first line.

This is the second line.

This is the third line.

$

现在cat命令会用testfile文件中的行作为输入。你可以使用这种技术将数据输入到任何能从 STDIN接受数据的shell命令中。

二、STDOUT

STDOUT文件描述符代表shell的标准输出。在终端界面上,标准输出就是终端显示器。shell 的所有输出(包括shell中运行的程序和脚本)会被定向到标准输出中,也就是显示器。

默认情况下,大多数bash命令会将输出导向STDOUT文件描述符。同时,你也可以用输出重定向来改变。

$ ls -l > test2

$ cat test2

total 20

-rw-rw-r-- 1 rich rich 53 2014-10-16 11:30 test

-rw-rw-r-- 1 rich rich 0 2014-10-16 11:32 test2

-rw-rw-r-- 1 rich rich 73 2014-10-16 11:23 testfile

$

通过输出重定向符号,通常会显示到显示器的所有输出会被shell重定向到指定的重定向文件。你也可以将数据追加到某个文件。这可以用>>符号来完成。

$ who >> test2

$ cat test2

total 20

-rw-rw-r-- 1 rich rich 53 2014-10-16 11:30 test

-rw-rw-r-- 1 rich rich 0 2014-10-16 11:32 test2

-rw-rw-r-- 1 rich rich 73 2014-10-16 11:23 testfile

rich pts/0 2014-10-17 15:34 (192.168.1.2)

$

who命令生成的输出会被追加到test2文件中已有数据的后面。 但是,如果你对脚本使用了标准输出重定向,你会遇到一个问题。下面的例子说明了可能会出现什么情况。

$ ls -al badfile > test3

ls: cannot access badfile: No such file or directory

$ cat test3

$

当命令生成错误消息时,shell并未将错误消息重定向到输出重定向文件。shell创建了输出重 定向文件,但错误消息却显示在了显示器屏幕上。注意,在显示test3文件的内容时并没有任何错误。test3文件创建成功了,只是里面是空的。

shell对于错误消息的处理是跟普通输出分开的。如果你创建了在后台模式下运行的shell脚本,通常你必须依赖发送到日志文件的输出消息。用这种方法的话,如果出现了错误信息,这些信息是不会出现在日志文件中的。你需要换种方法来处理。

三、STDERR

shell通过特殊的STDERR文件描述符来处理错误消息。STDERR文件描述符代表shell的标准错误输出。shell或shell中运行的程序和脚本出错时生成的错误消息都会发送到这个位置。

默认情况下,STDERR文件描述符会和STDOUT文件描述符指向同样的地方(尽管分配给它们的文件描述符值不同)。也就是说,默认情况下,错误消息也会输出到显示器输出中。

但从上面的例子可以看出,STDERR并不会随着STDOUT的重定向而发生改变。使用脚本时,你常常会想改变这种行为,尤其是当你希望将错误消息保存到日志文件中的时候。

以上就是南昌网络公司为大家介绍的关于Linux中的三种标准文件描述符,大家可以了解一下,希望对大家今后的学习有所帮助。此外,百恒网络专注于网站建设、微信开发、南昌物联网开发、APP开发制作等服务,如有需要,欢迎大家来电咨询,洽谈合作!

400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×