目录
1. 标准输入、标准输出、标准错误
2.标准输出重定向
3.标准输入重定向
4.标准错误重定向
5.重定向到/dev/null
6.创建文件描述符
7.关闭文件描述符
1. 标准输入、标准输出、标准错误
1)标准输入(stdin):代码为0,使用0<或0<<,其中代码0可以省略
2)标准输出(stdout):代码为1,使用1>或1>>,其中代码1可以省略
3)标准错误输出(stderr):代码为2,使用2>或2>>
默认情况下>和>>分别表示1>或1>>,<和<<与0<和0<<等价。
文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。
2.标准输出重定向
cat 命令是默认使用终端的标准输入作为命令的输入和标准输出作为命令的输出
若参数为文本,则是将文件输出到标准输出即终端屏幕。
等价于
cat file 1 > file2
file 的内容是 hello world! 。把标准输出重定向到file2,若不存在file2,则新创建。
>> 和 > 的区别就是:
>> 是以追加的方式添加
> 是清空原来的内容。
3.标准输入重定向
cat < file //标准输入重定向为file文件
等价于
cat 0 < file
cat >file3 < file //标准输入重定向为file文件,标准输出重定向为file3文件
4.标准错误重定向
ls -qw 2 > errorfile //把标准错误信息重定向到errorfile文件
//把标准输出和标准错误重定向到一个文件
写法1, cmd > out_file 2>&1
写法2, cmd &> out_file
5.重定向到/dev/null
在 Linux 中有一个被称为“黑洞”的设备文件,所有导入它的数据都将被“吞噬”。
在类 UNIX 系统中,/dev/null,或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。
将输出和错误输出都定向到/dev/null。
6.创建文件描述符
在 Shell 中有9个文件描述符。上面我们使用了也是它默认提供的0,1,2号文件描述符。另外我们还可以使用3-8的文件描述符,只是它们默认没有打开而已。你可以使用下面命令查看当前 Shell 进程中打开的文件描述符:
cd /dev/fd
ls -Al //查看打开的文件描述符
$ zsh
$ exec 3>somefile
# 先进入目录,再查看,否则你可能不能得到正确的结果,然后再回到上一次的目录
$ cd /dev/fd/;ls -Al;cd -
# 注意下面的命令>与&之间不应该有空格,如果有空格则会出错
$ echo "this is test" >&3
$ cat somefile
$ exit
7.关闭文件描述符
exec 3>&- //关闭3号文件描述符