Linux的输入与输出
Linux中的输入与输出正确与否用不同代号来表示,标准输入为0,显示输入信息;标准输出为1,显示正确信息;错误输出为2,显示错误信息。过程:当系统运行一个程序时 ,需要从某个位置读取输入信息,然后 cpu 处理,最后将输出显示到屏幕或文件。
举例:在/dev/pts这个目录下面会存放bash输出文件,并且一个bash单独对应一个文件,比如打开一个bash,会出现一个编号为 0 的文件:
当再次打开一个bash后,就又会出现一个编号为 1 的文件:
将一个命令的输出结果定向输出到另一个bash对应的文件中时,那么这个输出结果就会在另一个bash中显示出来,如下:
输出重定向
如果想找到需要的信息,可以用重定向的方法使无用的信息保存在某个指定文件中,让其不再屏幕进行显示,对内容进行筛选后,只获得需要的信息。重定向命令:
’ > ’ 重定向正确输出
’ 2> ’ 重定向错误输出
’ &> ’ 重定向所有输出
示例操作:
注意:由于root用户权限比较大,某些报错就不会产生,因此以下操作均在student用户下完成。
首先执行以下命令: find /etc -name passwd
输出结果如下:
可以看到再执行命令之后有两条正确输出,其它的都是错误输出,下面我们就对这些输出进行操作。
(1). find /etc -name passwd > file 重定向正确输出到file
可以看到通过 > 将正确输出重定向到了file文件中去了,而屏幕只显示了没有重定向的错误输出。
(2). find /etc -name passwd 2> file 重定向错误输出到file
可以看到通过 2> 将错误输出重定向到了file文件中去了,而屏幕只显示了没有重定向的正确输出,还可以发现后面的重定向会覆盖掉之前重定向文件的内容。
(3). find /etc -name passwd &> file 重定向所有输出到file
可以看到通过 &> 将所有的输出重定向到了file文件中去了,而屏幕就不会显示任何输出了,还可以发现后面的重定向会覆盖掉之前重定向文件的内容。
(4). find /etc -name passwd > file 2>&1 重新定义了错误输出为正确输出
可以看到重定向错误与正确信息输出到了file中,2>&1的作用是将错误输出2换成编号为1
上面的重定向都是会覆盖掉原文件的,重定向输出也是可以追加到原文件中的。
输出追加命令
’ >> ’ 追加正确输出
’ 2>> ’ 追加错误输出
’ &>> ’ 追加所有输出
(1). find /etc -name passwd >> file 追加正确输出file
先把date命令的输出重定向到file中,然后将正确输出追加到file中。
(2). find /etc -name passwd 2>> file 追加错误输出到file
先把date命令的输出重定向到file中,然后将错误输出追加到file中。
(3). find /etc -name passwd &>> file 追加所有输出到file
先把date命令的输出重定向到file中,然后将所有的输出追加到file中。
输入重定向
输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。 输入重定向有两种类型:(1). 标准输入
格式: 命令 < 文件
功能: 命令把文件的内容作为标准的输入设备
(2). 标识符限定输入
格式: 命令 << 标识符
功能: 命令把标准输入读入内容,直到遇到“标识符”分解符为止
示例操作:
(1). 标准输入示例
首先用vim打开一个文件,并编辑
编辑内容如下:
使用命令 tr ‘a-z’ ‘A-Z’ < file 使file文件的内容作为标准输入。( tr 命令用于转换或删除文件中的字符,在这里的意思是将小写转换成大写)
通过输入重定向使小写转换成大写字母并输出到屏幕上。
(2). 标识符限定输入示例
命令 date 功能是显示当前的时间,命令 cal 功能是显示当前日历,如下:
新建一个test.sh文件(.sh文件是脚本文件,可以直接使用 sh 命令运行)
然后把 date 命令和 cal 命令写入文件中
用 sh 命令运行test.sh脚本文件
还有一个 passwd 命令,它的功能是修改当前用户密码的,当运行此命令之后,系统会与用户进行交互让用户输入两次新密码,如下:
如果把 passwd 命令放到刚才的test.sh文件中,并且放在 date 和 cal 命令的中间
运行test.sh之后,先执行了date命令,之后还需要用户输入才能执行 cal 命令,如下:
但是我们可以使用标识符限定输入让系统直接将提前写好的内容作为输入,这样就不需要等待用户输入了。编辑 test.sh文件如下:
再次执行test.sh脚本文件,输出如下:
这里的EOF只是一个标识符,当然也可以换成其它的字符,只要有开始的还要有结束的就行。
管道
符号: |含义: 将前一条命令的正确输出作为管道符后面命令的标准输入
注:错误输出不能通过管道,2>&1 可以把 错误输出 转换成 标准输出
示例操作: 查看 /etc 目录下文件名中有passd的文件,将输出作为输入,统计行数后显示,此时只有第二个条命令的运行结果:
命令 tee 功能是可以将输出复制一份到指定文件中
转载:https://blog.csdn.net/Mr_fengzi/article/details/102333118