1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Linux 标准输入输出 重定向及管道

Linux 标准输入输出 重定向及管道

时间:2022-02-08 12:06:47

相关推荐

Linux 标准输入输出 重定向及管道

随笔一篇,以便日后翻阅,如有问题欢迎指正

操作环境:Ubuntu 21.10 desktop

shell版本:Xshell

因为所学知识有限,所以本文结合了多篇文章的精华并适当添加了自己的内容

其实就是个只会Ctrl cv 的屑(bushi)

文章出处将在文末标出

目录

前言标准输出标准输入标准错误输出重定向输入重定向输出重定向追加重定向错误输出重定向双重输出重定向双重输入重定向(结束符)重定向的使用规律(总结)管道小练习参考文章明细

前言

频道的概念(流):

Linux系统有专属于自己的输入输出频道,类似于看电视,可以通过遥控板随意切换频道,而显示屏就会根据频道不同显示不同内容。

默认将键盘叫做标准输入设备:stdin,频道为0

将屏幕叫做标准输出设备:stout,频道为1

还有一个频道,是专门为输出的错误信息准备的:stderr,频道为2

深入理解:linux随笔(一) | 标准输入、输出、错误流

下面由几个例子来解释文件的标准输入、标准输出、输出重定向

标准输出

利用命令行实现输出:

pepino@Pepino:~$ echo "this is a test"this is a test

这就是标准输出,默认输出到屏幕上供人查看

或者用ls命令深入理解默认输出概念:

pepino@Pepino:~$ ls公共的 模板 视频 图片 文档 下载 音乐 桌面

同样是输出到屏幕上

标准输入

默认输入设备是键盘,但也可以通过文件输入,但需要结合重定向一起理解

通过tr命令体验标准输入输出的交互

pepino@Pepino:~$ tr "a-z" "A-Z"#将输入的 a-z 小写字符自动转换为大写输出asdfghjASDFGHJ

ctrl + d退出

标准错误输出

默认输出设备是屏幕,输出错误提示以便提示程序员和纠错

重定向

标注输入、标准输出与标准错误输出都可以通过特定符号改变来源或去向

常见重定向有:

输入重定向输出重定向追加重定向错误输出重定向双重输出重定向

输入重定向

有一些指令需要用户从标准输入(键盘)来输入数据,但数据量巨大的时候让用户手动输入的话,将会相当麻烦

输入重定向:指的是重新指定设备来代替键盘作为新的输入设备;

使用小于符号<来重定向输入源

使用vi命令编辑一个新文件 test1.txt 并输入内容12345pepino@Pepino:~$ vi test1.txtpepino@Pepino:~$ cat < test1.txt#将 test1.txt 文件作为输入源12345

补充:Linux之vi编辑器

输出重定向

大多数的指令在正确执行后都会有一个执行结果显示在标准输出(屏幕终端)上。一般是另存到一个文件中供以后分析,而不再显示屏幕终端上。

输出重定向:指的是重新指定设备来代替显示器作为新的输出设备。

使用大于符号>来重定向输出环境

pepino@Pepino:~$ ls > test2.txt#将 ls 的输出内容直接传到文件 test2.txt 内而不显示在屏幕上pepino@Pepino:~$ cat test2.txt公共的模板视频图片文档下载音乐桌面test1.txttest2.txt

注意:如果原文件存在并有内容,那么新的执行结果会覆盖原文件内容。

追加重定向

刚刚提到,使用>进行输出重定向,文件的原内容会被覆盖。那么有没有一个办法不覆盖原文件内容,只是追加在其后呢?

使用>>就可以将正确的输出结果追加到一个文件中

pepino@Pepino:~$ ls -a >> test2.txtpepino@Pepino:~$ cat test2.txt 公共的模板视频图片文档下载音乐桌面test1.txttest2.txt公共的模板视频图片文档下载音乐桌面test1.txttest2.txt

错误输出重定向

如果一个指令执行错误时,也会在屏幕上显示错误提示信息。虽然它与标准输出一样都会将结果显示在屏幕上,但它们占用的 I/O通道 不同。

如果要将错误结果重定向到另一个地方则就不能再使用>来实现了

因为标准错误输出的频道是2

所以使用2>将报错讯息重定向。

pepino@Pepino:~$ de -h 2> test3.txt#试错命令 de -h 将报错信息存入文件 test3.txt 中pepino@Pepino:~$ cat test3.txt de:未找到命令

也可使用2>>将报错讯息追加入一个文件

pepino@Pepino:~$ lt -l 2>> test3.txt#试错命令 lt -l 将报错信息追加到文件 test3.txt pepino@Pepino:~$ cat test3.txt de:未找到命令Command 'lt' not found, but can be installed with:sudo apt install looptools

双重输出重定向

如果用户想将正确的输出结果错误输出结果一次性单独地送到不同的地方则可使用双重输出重定向

pepino@Pepino:~$ ls -l 2> error > resultspepino@Pepino:~$ cat error#无显示表示没有标准错误输出pepino@Pepino:~$ cat results 总用量 52drwxrwxr-x 2 pepino pepino 4096 Apr 13 18:36 1drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 公共的drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 模板drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 视频drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 图片drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 文档drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 下载drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 音乐drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 桌面-rw-rw-r-- 1 pepino pepino 0 Apr 13 20:40 error-rw-rw-r-- 1 pepino pepino 0 Apr 13 20:40 results-rw-rw-r-- 1 pepino pepino 6 Apr 13 20:09 test1.txt-rw-rw-r-- 1 pepino pepino 304 Apr 13 20:29 test2.txt-rw-rw-r-- 1 pepino pepino 99 Apr 13 20:35 test3.txt-rw-rw-r-- 1 pepino pepino 10 Apr 13 18:48 test.txt

如果用户将不管是正确输出还是错误输结果都送到同一个指定的地方

可使用&>&>>来完成。

pepino@Pepino:~$ ls -l &> test4.txtpepino@Pepino:~$ lt -l &>> test4.txt #错误命令 lt -l 输出追加到文件 test4.txtpepino@Pepino:~$ cat test4.txt 总用量 60drwxrwxr-x 2 pepino pepino 4096 Apr 13 18:36 1drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 公共的drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 模板drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 视频drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 图片drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 文档drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 下载drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 音乐drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 桌面-rw-rw-r-- 1 pepino pepino 802 Apr 13 20:43 error-rw-rw-r-- 1 pepino pepino 875 Apr 13 20:47 result-rw-rw-r-- 1 pepino pepino 0 Apr 13 20:43 results-rw-rw-r-- 1 pepino pepino 6 Apr 13 20:09 test1.txt-rw-rw-r-- 1 pepino pepino 304 Apr 13 20:29 test2.txt-rw-rw-r-- 1 pepino pepino 99 Apr 13 20:35 test3.txt-rw-rw-r-- 1 pepino pepino 0 Apr 13 20:48 test4.txt-rw-rw-r-- 1 pepino pepino 10 Apr 13 18:48 test.txtCommand 'lt' not found, but can be installed with:sudo apt install looptools

双重输入重定向(结束符)

用户可以通过cat > file来创建文件并为文件输入内容,输入结束后按下快捷键ctrl+d结束输入。

pepino@Pepino:~$ cat > test5.txt123(Ctrl+d)pepino@Pepino:~$

默认是ctrl+d结束输入,但如果用户想要多行输入怎么办?

一旦敲回车就自动输出了,可以用<<选择任意符号作为终结标识符

pepino@Pepino:~$ cat > test5.txt << stop> 123> 234> 456> 567> stop#实现多行输入,直到识别到结束符pepino@Pepino:~$

重定向的使用规律(总结)

标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变其中的一个标准输入0和标准输出1可以省略(当其出现重定向符号左侧时)文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&文件描述符与重定向符号之间不能有空格

本文只介绍基本概念,具体使用情况还得看实际操作环境和要求

补充:linux 文件描述符详解,详解Linux文件描述符

管道

管道名称非常形象。所谓管道,是Linux系统中将一个进程的输出连接到另一个进程的输入,从而允许进程间通信的文件。因此,可以简单地讲,管道的作用是充当两个进程间数据交换的通道。可以把Linux系统中需要通信的两个文进程比作是两段断开的水管,现在需要将一段水管中的水引入到另外一段水管中。为了达到这个目的,需要一段中间的转接水管。而管道则承担这个角色。参与数据交换的两个进程就是那两段断开的水管,管道就是中间的转接水管,而数据就是水管中的水。

管道是Linux中很重要的一种通信方式,它是把一个程序的输出直接连接到另一个程序的输入。

常说的管道一般是指无名管道(例如|),无名管道只能用于具有”亲缘”关系进程之间的通信,通常和grep合作使用。

使用“ | ”将前一个进程的输出直接送入后一个进程的输入(拼接)

例1:pepino@Pepino:~$ ls | wc -l17注:wc -l#输出行数统计例2:pepino@Pepino:~$ ls -l | head -3总用量 64drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 公共的drwxr-xr-x 2 pepino pepino 4096 Apr 6 00:10 模板注:head -3#查看当前目录下前3行文本例3:pepino@Pepino:~$ cat test3.txt | grep a#grep 过滤作用Command 'lt' not found, but can be installed with:sudo apt install looptoolspepino@Pepino:~$

类似的应用还有很多,请根据实际情况自行灵活运用

综合应用:cat file1 > file2#拷贝file1到file2cat file1 file2 file3 > fileall#将数个小文件合并成一个文件ls –l | more#分屏显示当前目录下的文件

小练习

参考文章明细

一文搞懂Linux下的文件的标准输入、标准输出、输出重定向问题Linux中的标准输入输出Linux的标准输入输出Linux重定向(输入输出重定向)linux管道举例理解

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。