欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Linux学习笔记】21:Bash基础-输入输出重定向

程序员文章站 2022-05-06 16:08:54
...

[1]输入和输出

把数据写入电脑即是输入,反之即是输出。
一些输入输出设备的设备文件名:键盘(标准输入)/dev/stdin,显示器(标准输出)/dev/stdout,显示器(错误输出)/dev/stderr。它们的文件描述符(内核用以访问文件的非负整数)分别是0,1,2。也就是说,标准输入,标准输出,错误输出的文件描述符分别是0,1,2。
(注:在Linux中一切皆文件,键盘显示器也是,所以就有设备文件名)
标准输入设备是键盘,显示器既是标准的正确输出,也是标准的错误输出。

[2]输出重定向(简)

标准输出输出到显示器上,输出重定向即是把输出方向做一个改变,一般是输出到文件当中去。比如把服务器某些命令做定时任务,输出保存在文件中(相当于做了日志),就不需要一直对着电脑了,在上班的时候看一下文件中是什么,就知道那个时间执行这个命令输出了什么了。
(注:实际上定时任务去执行的往往不是单条命令,而是我们写的系统管理脚本)

*正确输出(覆盖):

命令 > 文件名

*正确输出(追加):

命令 >> 文件名

【Linux学习笔记】21:Bash基础-输入输出重定向

*错误输出(覆盖):

出错命令 2> 文件名

*错误输出(追加):

出错命令 2>> 文件名

【Linux学习笔记】21:Bash基础-输入输出重定向
(注:在有些Linux环境下错误输出的大于号两边应不加空格)

这种方式的输出重定向用处很局限,因为正确输出和错误输出格式不一样,我们需要一种能把正确输出和错误输出都保存下来的方式。

[3]输出重定向(常用)

*正确和错误输出都覆盖到同一个文件中:

命令 > 文件名 2>&1

命令 &> 文件名

【Linux学习笔记】21:Bash基础-输入输出重定向

*正确和错误输出都追加到同一个文件中:

命令 >> 文件名 2>&1

命令 &>> 文件名

【Linux学习笔记】21:Bash基础-输入输出重定向

*正确输出追加到文件A,错误输出追加到文件B:

命令 >> 文件A2>>文件B名

【Linux学习笔记】21:Bash基础-输入输出重定向
(注:”命令 >> 文件名 2>&1”可以理解为,如果命令输出都是正确的,直接追加到文件中,否则把错误输出(文件描述符为2)给正确输出(文件描述符为1),然后再一并追加到文件中去)

*黑洞/dev/null
/dev/null是Linux中的”黑洞”(一个特殊的设备文件名),扔进去系统就把它直接抛弃了。有些时候我们不想看到命令执行后所显示的结果,就可以输出重定向到这里。
【Linux学习笔记】21:Bash基础-输入输出重定向
结果就这样消失了。在写脚本的时候,我们常常不需要里面的命令的结果,只关心这个脚本执行完成就好了,所以就需要这个”黑洞”。

[4]输入重定向

*wc统计指定文件中的字节数、字数、行数

wc [选项] [文件名]

选项:-c统计字节数,-w统计单词数,-l统计行数。
如果不加文件名,直接wc可以开始写东西,写完之后Ctrl+D开始统计。
如果不加选项,结果是行数-单词数-字节数。
【Linux学习笔记】21:Bash基础-输入输出重定向

*输入重定向

命令 < 文件名

wc本来统计的是要键盘输入的东西,可以用”<”换成从文件输入:

【Linux学习笔记】21:Bash基础-输入输出重定向

实际上wc也可以直接统计文件中的信息:
【Linux学习笔记】21:Bash基础-输入输出重定向

*双小于号的使用
相当于原地做一个标记,然后开始读你输入的内容,当再碰到这个标记时,认为输入结束了。
【Linux学习笔记】21:Bash基础-输入输出重定向
如果作为子串,那样的串不被认为是标记,如上。