数据流重定向是什么
一般来说,我们使用命令行来操作Linux,那这跟数据流重定向又有什么关系呢?举个栗子,假设你需要将一个命令所输出的信息存储到一个文件里面该怎么办?,那么数据流重定向就能解决这个问题。一般来说你执行一个命令通常它会是下面这张图所示的,
当我们执行一个命令时,这个命令可能会先从文件读取数据,经过处理之后,再将数据输出到屏幕上。输出可以分为标准输出(standard output)和标准错误输出(standard error output)。
- 标准输出与标准错误输出
标准输出指的是命令是指命令执行成功所传回来的正确信息,而标准错误输出则是命令执行失败之后所传回来的信息。比如,我使用这个cat命令来展示文件信息,如果被展示的文件存在,则会将文件的内容输出到屏幕上,而这就是标准输出。如果被展示的文件不存在,则会将错误信息输出到屏幕上,而这就是标准错误输出。如果我们想把正确的信息和错误的信息分开存储到不同的文件中,则可以使用下面这些特殊字符:
- 标准输出(stdout) : 代码为1,使用>或>>。
- 标准错误输出(stderr): 代码为2,使用2>或2>>。
下面是具体的用法:
把ls .
命令输出的信息通过>
(也可以写成1>)存储到dataflow这个文件中,如果dataflow文件存在,则会创建这个文件,并把ls .
命令的输出的信息存储到这个文件中(如果此文件已经有内容则会被覆盖),所有的数据流操作都是如此。如果不想文件内容被覆盖则可以使用下面这个命令。
是里使用>>
(也可以写成1>>)将echo $PATH
输出的信息累加到dataflow
文件中。下面是标准错误输出的用法。
使用2>
则可以将错误的信息存储到指定的文件中。如果不想指定文件的内容不被覆盖则可以使用2>>
,把错误信息和正确信息存储到一个文件中可以使用&>
。这里就不在多做演示。如果想将正确的信息和错误的信息分别存储不同的文件中则可以使用下面这个用法。
find /home -name .bashrc
命令会查找/home
目录是否有.bashrc
文件的存在。因为该命令会检查所有指定目录下的文件,而这些文件不一定有足够的权限可以访问,所以可能会引发权限不足的错误信息。在这个用法中,使用>
将正确的信息存储到RightInfo中,把错误的信息存储到ErrorInfo中。
/dev/null信息垃圾桶设备
这个设备的用处是用是,如果你不想错误信息输出到屏幕上,并且也不存储到文件中,就可以将信息输出到这个设备中。这个设备会将错误信息吃掉。下面是用法:
参考
《鸟哥的Linux私房菜》