IO管理
输入输出管理
-
理解shell中的输入输出
-
command命令—>memory内存—>cpu运算—>/dev/pts/0字符设备—>shell回显
注意:
/dev/pts/0字符设备(其实也是内存中的一部分)
将cpu的运算结果输出到指定的字符设备,这是输出管理
输出重定向>:将输出定向到指定位置
-
用>重定向正确的输出结果
用2>重定向错误的输出结果
用&>将全部输出结果定向
(正确的结果被定义为1,错误的结果则被定义为2)
(可以通过使用&>将错误结果全部作为正确结果处理:2&>1)
注意:
重定向会将原文件内容都覆盖掉(因此,可以直接用‘>file’清空文件的内容)
例子eg:
find /etc/ -name passwd > file
find /etc/ -name passwd 2> file
(find命令,按照文件名字(-name),查找/etc/目录下文件名含有passwd的文件,将该命令输出定向到当前目录下的file文件内)
(执行find命令后既有正确的结果,也有错误的结果,将其中之一存入file文件中,另一部分会输出在屏幕上显示)
追加符号>>:该命令不会覆盖原文件的内容
-
用>>重定向正确的输出结果
用2>>重定向错误的输出结果
用&>>将全部输出结果定向
输入重定向:<单行输入重定向 <<多行输入重定向
-
两个例子:
eg1:
vim file (使用vim编辑file这个文件)
QWERASDF (将文件file内容编辑为QWERASDF)
tr ‘A-Z’ ‘a-z’ < westos
(这里前半部分单独的tr命令是将大写字母转为小写字母输出,但这个命令本身并没有输入,而加上后半部分的输入重定向,将file文件内容作为输入传给tr命令)
eg2:
vim file1.sh(使用vim编辑法file1.sh这个文件)
passwd <<EOF(以下均为编辑后的file1.sh文件的内容)
123
123
EOF
sh file1.sh (将file1.sh文件内容作为命令执行)
实际执行如下图:
(第一张图是直接在命令行中完成的,不借助文件;而第二,三张图则是例二执行结果,与图一结果一致)
上例中使用到了多行输入重定向<<,其用法如下:
<<EOF
EOF
解释:
<<本身表示多行输入重定向,以EOF作为标示符开始录入,当再次出现EOF表示录入结束
(其实标识符可以不是EOF,可以为任意字符串,只不过规范要求使用EOF表示)
管道符:将前一个命令的内容作为后一个命令的输入
-
只允许正确的输出通过,但是通过命令2&>1可以将错误的输出结果变为正确的结果,从而通过管道符(管道符号是可以前后多次使用,即多个命令相互组合的)
注意:
如果还需要保存前一个命令的输出内容,那么需要复制一份输出内容,则使用到的命令是tee filename
如:ls /bin/ | tee file | wc -l
(将/bin目录下的文件的信息保存一份到当前目录file文件中,同时将其复制一份作为wc -l命令的输入)