数据流重定向
一、概念
- 平常我们在终端输入命令,输入的命令或显示的信息(正确/错误)就是数据流。数据流重定向就是通过一定的方法使输入的命令信息来自于文件/设备,或者使输出的数据传输到文件/设备中,而不在屏幕上显示。
二、分类
- 输入流重定向:在终端中,原本需要由键盘输入的数据,由文件的内容替换
- 输出流重定向:在终端中,原本需要输出到终端的数据,输出到文件/设备中
三、标准输入、标准输出、标准错误输出
- 标准输入(stdin):从键盘/文件中输入的信息。代码为0
- 标准输出(stdout):输出的信息是正确信息。代码为1
- 标准错误输出(stderr):输出的信息是错误信息。代码为2
四、输出流重定向
1.命令格式
- 命令 重定向符号1 文件1/设备1 重定向符号2 文件2/设备2
重定向符号
- 标准输出流重定向:使用>(文件内容清空,将数据写入文件)或>>(在文件尾部追加内容)
- 标准错误输出流重定向:使用2>(文件内容清空,将数据写入文件)或2>>(在文件尾部追加内容)
注意
- 后面的文件不存在,系统自动创建
- 标准输出流重定向后,错误信息还是会显示在屏幕上
- 标准错误输出流重定向后,正确信息还是会显示在屏幕上
2.重点:标准输出和标准错误输出写入同一文件
方法
- 命令 > file 2> file //错误用法,两股数据同时写入同一文件中,造成次序错乱,查看文件内容时混乱的
- 命令 > file 2>&1 //正确用法(2>&1代表把错误信息写入到正确信息文件中)
- 命令 2> file 1>&2 //正确用法(1>&2代表把正确信息写入到错误信息文件中)
- 命令 &> file //正确用法(>都写入到正确文件中)
3.演示案例
- ①将当前目录的信息写入到一个文件中
使用ll命令产生的信息就被输出到文件中,cat查看文件的内容就为我们ll的内容(错误的信息不会被写入)
- ②将正确数据和错误数据写入到不同的文件中(file文件存在,file2文件不存在)
为了将正确信息和错误信息写入到不同的文件中,可以用两次数据流重定向符号
五、输出流与/dev/null设备的特殊用法
1./dev/null设备
扫描二维码关注公众号,回复:
5390518 查看本文章
- 写入到这个设备的任何数据都会消失不见
2.合适使用这个设备
- 我们执行一条命令时,提前知道会有错误信息产生,但是不想输出到屏幕上,又不想输出到其它文件中,于是就可以输出到这个设备中
3.用法
命令 2> /dev/null
4.案例
- 目录下不存在file2文件,因此查看不了,会有错误信息,将错误信息输入到/dev/null
ll file2 2> /dev/null
六、输入流重定向
1.概念
- 在终端中,原本需要由键盘输入的数据,由文件的内容替换输入完成
2.输入流重定向符号
- <:后面接文件,想要输入的信息由文件代替
- <<:后面接【结束的输入字符】
3.<的应用
cat命令介绍:输入cat然后回车,我们就可以在终端随意输入内容
- 案例:我们将~/.bashrc的内容拷贝到一个text文件中(类似于cp拷贝文件的功能)
解析:cat之后屏幕会让在屏幕上输入信息,这些信息使用< ~/.brashrc来自于~/.brashrc文件,然后再使用>text写入text文件中。下面两种命令格式都可以
- 第一种:cat > text < ~/.brashrc
- 第二种:cat < ~/.brashrc > text
4.<<的应用
- 我们使用cat命令输入信息到file文件中,然后使用"eof"作为结束符,但是eof不会被写入到文件中(eof为自己取的名称)
cat > file << "eof"
七、双向重定向(tee命令)
1.功能
- tee命令是一种管道命令
- 与普通数据流重定向不同,tee可以让输出的内容既可以输出到屏幕中,也可以输出到文件中
2.命令格式
- tee [选项] 文件名
相关选项与参数
- -a:以追加的方式将数据写入文件中
3.注意事项
- 后面的文件不存在,自动创建
- tee不加-a参数,默认清空文件内容再写入
4.演示案例
- 将/home显示的信息存入到~/.homefile文件中
ls -l /home | tee ~/homefile | more
- 将last显示的用户信息以" "分割获取第一部分,并存入last.list文件中
last | cut -d " " -f 1 | tee last.list