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 |
分析举例
>
,>>
的使用
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
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]
$
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]
$
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" 来获取更多信息。
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