linux中的重定向

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012107143/article/details/80589143

1. linux中的重定向

重定向这个词已经表达的非常准确,所谓重定向就是重新定义输出的方向(目的地)。

如,以下2中重定向本质上是一样的。

  1. ll 1>1.txt
    ll命令本来是输出到/proc/self/fd/1的,/proc/self/fd/1指向的/dev/pts/6(屏幕)
    这里写图片描述
    现在让/proc/self/fd/1指向了1.txt
    这里写图片描述
    当然,在命令执行完成后,/proc/self/fd/1会自动恢复指向/dev/pts/6(屏幕)
  2. ll >1.txt
    和1的本质一样,只是如果要对1进行重定向,那么在写法上可以把1省略不写。
  3. ll 1>1.txt 2>&1
    对于这种命令,先执行1>1.txt,让/proc/self/fd/1指向了1.txt;再执行2>&1,让/proc/self/fd/2指向/proc/self/fd/1的输出目标。

所以:
1. 重定向(>)就相当于是赋值,只不过赋的输出目的地。
2. &表示引用,类似于c++中的引用,表示取得不是它本身的值,而是它的指向的内容的值。比如,在3中,&1表示1.txt,而不是/proc/self/fd/1。

2. linux的文件描述符

为了对上一节的内容进行补充,特地增加此小节,对linux中的文件描述符进行描述。
本小节的内容转载自:linux shell数据重定向(输入重定向与输出重定向)详细分析

  1. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。
    linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2。以后打开文件后。新增文件绑定描述符可以依次增加。 一条shell命令执行,都会继承父进程的文件描述符。因此,所有运行的shell命令,都会有默认3个文件描述符。
  2. 对于任何一条linux 命令执行,它会是这样一个过程:
    这里写图片描述
    一个命令执行了:
    先有一个输入:输入可以从键盘,也可以从文件得到
    命令执行完成:成功了,会把成功结果输出到屏幕:standard output默认是屏幕
    命令执行有错误:会把错误也输出到屏幕上面:standard error默认也是指的屏幕
  3. 文件输入输出由追踪为一个给定的进程所有打开文件的整数句柄来完成。这些数字值就是文件描述符。最为人们所知的文件米描述符是 stdin, stdout 和 stderr,文件描述符的数字分别是0,1和2。这些数字和各自的设备是保留的。一个命令执行前,先会准备好所有输入输出,默认分别绑定(stdin,stdout,stderr),如果这个时候出现错误,命令将终止,不会执行。
阅读更多
换一批

没有更多推荐了,返回首页