文件描述符与重定向

文件描述符简介:文件描述符在形式上是一个非负整数,每一个文件描述符会与一个打开文件相对应,内核利用文件描述符来访问文件,最广为人知的文件描述符有stdin(标准输入),stdout(标准输出),stderr(标准错误),系统分别事先为它们保留了三个文件描述符0,1,2,我们也可以通过特殊命令给我们的的文件指定文件描述符。

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

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

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

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

3:自定义文件描述符

4:tee命令

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/hongbo-tao/p/11722113.html

时间: 2024-09-29 09:25:37

文件描述符与重定向的相关文章

文件描述符的重定向

关于文件描述符的重定向,有三种方法,分别为dup(),dup2(),dup3(). 下面即为三种函数的原型,本文主要介绍前两种函数的使用.其中dup()接受一个参数,将旧的文件描述符重定向到新的文件中. 而dup2()接受两个参数,一个为新的文件描述符,另一个为旧的文件描述符.dup3()的原理同dup2(). 下图是三种函数的相关描述: 这些函数的返回值为,成功则返回新的文件描述符,失败返回-1. 进行dup()和dup2()的程序编写,其中注释的为dup()的相关语句. 本程序经过测试是正确

shell文件描述符及重定向

文件描述符是与文件输入.输出相关联的整数.它用来跟踪已经打开的文件.最常见的文件描述符是stdin.stdout.stderr.我们甚至可以将某个文件描述的内容重定向到另一个文件描述符中.文件描述符0,1,2是系统预留的: 0----stdin(标准输入) 1----stdout(标准输出) 2----stderr(标准错误) 实例 (一).将输出的文本重定向到一个文件中: [[email protected] shell]# echo "this is a example test"

Shell命令(2)——文件描述符和重定向符

文件描述符 stdin:标准输入,接收鼠标.键盘或其他输入设备的输入信息,文件描述符是1 stduot:输出所有的正常输出结果,文件描述符是2 stderr:输出所有错误信息,文件描述符是3 重定向符 “>":使用方法,“command > file",进程接受标准输入后,该重定向符使得标准输出改变方向,不输出到屏幕,而是输出到一个文件.标准错误输出依然不变,默认输出到屏幕或相应的设备.另外,若文件已存在,则原有内容就会被擦除.例如: ”>>" :与上

文件描述符和重定向

文件描述符是一个打开的文件或数据流相关联的证书 0-------stdin 标准输入 1-------stdout 标准输出 2-------stderr 标准错误 # echo “this is a file” > file.txt //将this is a file 重定向到文件file.txt中 # echo "this is a file 2" >> file.txt //将this is a file2 重定向到文件file.txt中,这种方法会将文本追加到

Linux --- 文件描述符和重定向

1.预备知识 标准输入(stdin).标准输出(stdout)和标准错误(stderr)是编写脚本的时候经常使用的,因为输出的信息可能是上述的一种. 文件描述符 是与打开的某个文件或者数据流相关联的整数.文件描述符0,1,2是系统预留的. 0 - stdin(标准输入) 1 - stdout(标准输出) 2 - stderr(标准错误) 2.实例 echo This is a sample. > temp.txt 可将文本输出到 temp.txt 中,是通过截断文件的方式,也就是说在echo命令

linux专题一之文件描述符、重定向、管道符、tee命令

本节讨论一下几个问题: 1. 文件描述符. 2. 重定向. 3. 管道符 4. tee的用法. 1. 文件描述符. 在linux系统中一切皆文件.文件夹和设备都是文件.如何用来区别不同的文件呢?这里的区别不是我们在windows下看到的后缀名不同来区别.也不是我们在linux下用ls 命令看到的不同文件的列表.这里的文件描述符主要讨论的是对文件操作的一个标识符.无操作就无标识符.   比如两个进程同时在对同一个文件进行读操作. 如何区分这两个读操作呢?这就需要文件文件描述符来区别了.每一次打开一

SHELL脚本学习总结--文件描述符和重定向

文件描述符是与文件输入和输出的相关联的整数,它们用来追踪已打开的文件,文件描述符0,1,2是系统预留的. 0 --> stdin (标准输入) 1 --> stdout (标准输出) 2 --> stderr (标准错误) $ echo a1>a1 $ cp a1 a2;cp a2 a3 $ cat a* cat: a1: Permission denied a1 a1 将0定向到std.txt,将2定向到err.txt $ cat a* >std.txt 2>err.

【Linux】文件描述符与重定向

重定向符号 符号 描述 > 输出重定向到一个文件或设备 覆盖原来的文件 >! 输出重定向到一个文件或设备 强制覆盖原来的文件 >> 输出重定向到一个文件或设备 追加原来的文件 < 输入重定向到一个程序 标准错误重定向符号 符号 描述 2> 将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件 2>> 将一个标准错误输出重定向到一个文件或设备 追加到原来的文件 2>&1 将一个标准错误输出重定向到标准输出 注释:1 标准输出 >&

Shell重定向文件描述符

#!/bin/bash  最近在看shell,各种困惑,不过解决困惑的感觉还是很不错的.废话少说,linux中使用文件描述符来标识每个文件对象.文件描述符为一个非负整数,可以唯一标识会话中打开的文件.每个过程最多可以有9个文件描述符. linux使用的标准文件描述符: 标准输入STDIN就是0,标准输出STDOUT就是1,标准错误输出STDERR就是2.而我们也可以自己创建文件描述符3~8. 将今天看到的一段代码: 1    #!/bin/bash 2    exec  3>&1 3