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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值