在了解重定向之前,我们先来看看linux 的文件描述符。
linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2
标准输入、输出、错误输出
-
标准输入:从键盘输入数据,即从键盘读入数据。 0
-
标准输出:把数据输出到终端上。1
-
标准错误输出:把标准错误输出到终端上。2
默认的标准输入指的是键盘,默认的标准输出与标准错误输出指的是屏幕或者是终端。
在Linux系统下,一切皆是文件,对文件的操作,一般要用到文件标识符。它们的文件标识符,分别为0,1,2.
重定向
- 输出重定向
输出重定向比较好理解,标准输出是输出到屏幕上,我们可以把输出写入到一个指定的文件中。
下面的命令就是把输出重定向到file文件中,这里需要注意 > 和>>的区别,如果file中有内容,使用>会把file中的内容覆盖,>>会在file的后面追加
ls -l > file
ls -a >> file
- 输入重定向
下面的命令是一个输入重定向的例子,把file文件的内容作为wc -l命令的输入。
wc -l < file
这里我有一个疑问就是,如果不使用重定向的话和使用重定向有啥区别呢
重定向看上面的图片
不使重定向的 输出 5 file,重定向的输出 5
这是因为,不使用重定向,命令可以获取到输入的文件,使用重定向之后,它仅仅知道从标准输入读取内容。
- Here document用法
这表示一种写法,也算是重定向的一种,还是使用wc命令来演示
这里的test叫做delimitor,这个意思就是把两个delimitor之间的内容通过重定向传给命令。当然这个delimitor可以使任意字符,只要是首尾相同就可以。
- Linux下输出重定向的典型分析
# &1 &2 分别表示标准输出和 标准错误输出
ls -l > out 2>&1
意思是把命令 ls -l的标准输出重定向到out文件中,另外标准错误输出重定向到标准输出中,因为标准输出已经重定向到out文件了,所以错误输出也输出到out文件中。
网友评论