Linux中文件描述符,重定向与标准输入输出

2020-12-11  本文已影响0人  躺在家里干活

Linux中文件描述符,重定向与标准输入输出

文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。在Linux系列的操作系统上,Linux的设计思想便是把一切设备都视作文件

重定向:举个例子,我不想在显示器上看到程序的执行结果而是希望输出到某一文件中,这种场景就可以使用重定向的方式实现。

重定向符号 说明
命令 > 文件 改变送出的数据信道(stdout, stderr),使之输出到指定的文件
命令 >> 文件 和>相似,以追加的形式输出到指定文件
命令 < 文件 改变读进的数据信道(stdin),使之从指定的文件读进,作为命令的参数
命令 << 分解符 从标准输入中读入,直到遇到分界符停止

标准输入输出

每个进程都会默认打开3个文件描述符,即0、1、2。其中0代表标准输入流、1代表标准输出流、2代表标准错误流。

文件描述符 说明 句柄
0 标准输入 stdin
1 标准输出 stdout
2 标准错误 stderr

分析举例

>>> 的使用

  1. ls -a > 1.txt

ls -a命令的输出重定向到1.txt文件,并且会清空1.txt中的内容

# sparrow @ sparrow-power in ~/test [16:55:48] 
$ ls -a > 1.txt

# sparrow @ sparrow-power in ~/test [16:55:57] 
$ cat 1.txt
.
..
1.txt

# sparrow @ sparrow-power in ~/test [16:56:03] 
$ 

# sparrow @ sparrow-power in ~/test [16:56:35] C:130
$ ls -a > 1.txt

# sparrow @ sparrow-power in ~/test [16:57:28] 
$ cat 1.txt    
.
..
1.txt
  1. ls -a >> 1.txt

以追加的方式,重定向标准输入到1.txt

# sparrow @ sparrow-power in ~/test [16:57:31] 
$ ls -a >> 1.txt

# sparrow @ sparrow-power in ~/test [16:59:23] 
$ cat 1.txt
.
..
1.txt
.
..
1.txt

# sparrow @ sparrow-power in ~/test [16:59:35] 
$ 

  1. touch 2> 2.txt

>符号其实是简写,> == 1>1表示文件描述符。然后2>这个命令就很明确了,把标准错误输出到某个位置

# sparrow @ sparrow-power in ~/test [17:11:18] C:1
$ touch 2> 2.txt

# sparrow @ sparrow-power in ~/test [17:14:08] C:1
$ cat 2.txt
touch: 缺少了文件操作数
请尝试执行 "touch --help" 来获取更多信息。

# sparrow @ sparrow-power in ~/test [17:14:11] 
$ 
  1. touch > 3.txt 2 > &1

&是一个描述符,2 > 1表示将标准错误输出到文件1中,&1表示输出到标准输出

# sparrow @ sparrow-power in ~/test [17:22:32] C:127
$ touch > 3.txt 2>&1

# sparrow @ sparrow-power in ~/test [17:23:08] C:1
$ cat 3.txt
touch: 缺少了文件操作数
请尝试执行 "touch --help" 来获取更多信息。
  1. touch &>> 4.txt

命令 &>> 文件命令 > 文件 2 > &1的效果相同

# sparrow @ sparrow-power in ~/test [17:23:12] 
$ touch &>> 4.txt 

# sparrow @ sparrow-power in ~/test [17:26:45] C:1
$ touch 5.txt &>> 4.txt

# sparrow @ sparrow-power in ~/test [17:26:55] 
$ cat 4.txt 
touch: 缺少了文件操作数
请尝试执行 "touch --help" 来获取更多信息。

# sparrow @ sparrow-power in ~/test [17:27:00] 
$ ll &>> 4.txt

# sparrow @ sparrow-power in ~/test [17:27:13] 
$ cat 4.txt
touch: 缺少了文件操作数
请尝试执行 "touch --help" 来获取更多信息。
总用量 20K
-rw-r--r-- 1 sparrow sparrow 28 12月 11 17:22 1
-rw-r--r-- 1 sparrow sparrow 22 12月 11 16:59 1.txt
-rw-r--r-- 1 sparrow sparrow 88 12月 11 17:14 2.txt
-rw-r--r-- 1 sparrow sparrow 88 12月 11 17:23 3.txt
-rw-r--r-- 1 sparrow sparrow 88 12月 11 17:26 4.txt
-rw-r--r-- 1 sparrow sparrow  0 12月 11 17:26 5.txt
上一篇下一篇

猜你喜欢

热点阅读