文件输入输出的管理
####1.输入输出的定义######
#1.输入
就是我们的键盘,鼠标和我们用这些硬件在系统逐个录入的字符
#2.输入
就是系统接收到我们想要实现的功能字符后,经过进程的处理产生字符
输入会有两种出现
编号1为正确输出
编号2为错误输出
默认这两种输出都会被系统定向到字符设备中
### 2.如何管理输出 ################
#1.交互式多行录入
交互式多行录入,利用”.sh“文件。
## ”.sh“文件是 UNIX/LINUX 操作系统的脚本文件,”sh“是Linux,unix的命令,其用途为调用缺省的shell。
下面举例进行说明,利用“.sh”文件来修改用户密码。首先用命令“ vim C_pass.sh”创建一个“.sh”文件,并输入"passwd"。再使用命令“sh C-pass.sh"调用文件中"passwd"的命令,则进入到修改密码的命令中。
<2>非交互式录入
vim C_pass.sh
passwd <<END
lee
lee
END
sh C_pass.sh
但其是不能自动运行的,仍然需要手动输入密码,若直接将密码加入到".sh"文件中则可直接修改成功,
可以自动运行避免交互,密码修改完成,其中”END"用来规定起始,也可用其他字符代替,但首尾必须一致。
#2.如何管理输出
#重定向
> #重定向正确输出
2> #重定向错误输出
&> #重定向所有输出
2>&1 #把错误输出的编号由2转换为1
##请用student用户做以下实验
find /etc/ -name passwd > file.out
find /etc/ -name passwd 2> file.out
find /etc/ -name passwd &> file.all
"注意:从定向是会覆盖原文件内容的!!!"
vim westos
hello westos
find /etc/ -name passwd > westos
cat westos ##原文件内容不见了
如在student用户中执行命令,在/etc/目录下寻找名为“passwd”的文件。
查看所有输出:
我们可以看到当输入命令后,对应有2条正确的输出---“/etc/passwd"和"/etc/pam.d/passwd"。
及对应的17条错误输出。那么我们如何选择性的输出我们需要的输出呢,以及输出我们需要统计的输出行数呢,我们需要注意的是重定向输出我们需要的结果,而把不需要的结果保存到一个文件中,并且文件原内容会被覆盖。
查看错误输出:
将错误结果在终端输出,将正确结果放到文件file.sight中。
再将所有输出结果重定向到”file.all“文件中,输入命令”find /etc/ -name passwd &> file.all“
###追加
#保持原文件内容不变的情况下把输出追加到文件之后
>> ##追加正确输出
2>> ##追加错误输出
&>> ##追加所有输出
eg:
find /etc/ -name passwd >> westos #将正确输出放到westos中,原westos内容不会覆盖
find /etc -name passwd 2>> westos #将错误输出放到westos中,原westos内容不会覆盖
find /etc -name passwd &>> westos #将所有输出放到westos中,原westos内容不会覆盖
原文件内容“hello world”依然存在,只不过是将正确输出追加进来而已。
######3.管道##############
#把输出变成下一个程序的输入
#管道是用来组合多条命令的使用的
ls /bin | wc -l
“-----查看”/bin/目录下文件,并将其行数统计出来输出,本来的输出应该是目录下的文件,而在使用管道后将文件变为“wc -l”的输入,再输出行数。
"注意:通过管道后输出会变成输入,那么是无法保存在文件中的"
tee ##复制输出到指定位置
ls /bin | tee file | wc -l
cat file ##file中已经保存了输出
查看”/bin/目录下文件,并将其文件内容复制到file中,再将其行数统计出来输出。