理解系统的输入与输出
1.
文件描述符是一个简单的正整数,用来标明每一个被shell所打开文件和socket。 最前面的三个文件描述符{0,1,2}分别与标准输入,标准输出,标准错误相对应。 shell会自动为我们打开和关闭三个文件描述符。 标准输入是命令的输入默认指向键盘,标准输出是命令的输出默认指向屏幕,标准错误是命令中错误信息的输出默认指向屏幕。 0代表我们输入的信息,1代表输出的正确结果,2代表输出的错误结果。
-
< 单行输入
举例 :vim westos WESTOS ##westos里的内容 tr ‘ A-Z ’ ' a-z ' < westos ##退出vim,该命令将大写字母换为小写字母
3.<<EOF 多行输入,从第一个EOF到再次出现EOF录入结束。
举例 :
vim test.sh ##建立了一个脚本,并且进行编写
passwd <<EOF
123 ##将此录入到passwd命令后需要输入密码的第一行
123 ##将此录入到passwd命令后需要重新确认密码的第二行
EOF ##结束录入
管理输入与输出的符号
1.输出重定向
> ##重定向正确输出
2> ##重定向错误输出
&> ##重定向所有输出
注意 :重定向会覆盖原文件内容
举例 :
find /etc/ -name passwd > file ##重定向正确输出到file
如图所示:查找/etc下名为passwd的文件,并将正确输出定向到file文件中,该目录下有许多passwd文件,但正确的只有两个,所以cat file可以看到,有两条正确输出,屏幕上显示的,以find开头的文件全部为错误文件。
find /etc/ -name passwd 2> file ##定向错误输出到file
find /etc/ -name passwd &> file ##定向所有输出到file
> file ##将无内容定向到file,相当于空白覆盖文件内容,等于删除文件内容。`
如图所示:定向输出所有到file中,运行该命令后屏幕无文件显示,此时用cat 命令查看file,发现所有输出被保存在file中。对比上图发现,在执行该命令前file中的文件被覆盖。
注意 :以下实验必须在普通用户下完成,在root用户下正确和错误文件都可通过。
2.输出追加
>> ## 将正确的输出追加到为文件到最后
2>> ##将错误的输出追加到文件到最后
&>> ##将所有输出追加到文件到最后
注意 :追加不会覆盖文件内容
举例 :
find /etc/ -name passwd >> file ##将正确输出追加到file
find /etc/ -name passwd 2>> file.err ##将错误输出追加到file
find /etc/ -name passwd &>> file.all ##将所有输出追加到file
如图所示:追加正确的输出到file文件最后,对比上图可以看到file中多出来两个正确的passwd文件,之前正确的文件也没有被覆盖,错误的文件显示在屏幕上。
管道的应用
1.管道的作用
" | " 管道的作用 :将前一条命令的输出变为后一条命令的输入。
注意 :
管道只允许正确输出通过。
通过管道的输出将会变成输入,而变成输入的这些输出将会被第二条命令处理。
如果需要保存输出,那么需要复制一份输出,用到的命令是 tee 。
举例 :
该实验在普通用户下进行
find /etc/ -name passwd | wc -l
如图所示:看到的结果数为2,因为错误的输出不能通过管道,错误文件输出到屏幕。
find /etc/ -name passwd 2>&1 | wc -l
如图所示:经过命令 2&>1的执行,所有错误文件都被定向为正确文件,所以都为正确输出,统计出行数为19。
find /etc/ -name passwd 2>&1 | tee file | wc -l
如图所示:file1为空文件,管道符输出结果可以用tee来保存到文件file1中,再统计行数。
输入重定向
cat >file <<EOF
hello
WORLD
EOF