IO 重定向
IO重定向整体分为:
1输出重定向
2输入重定向
为什么要用重定向?
有些时候我们在运行某些程序的时候有些垃圾数据会显示在终端窗口,还有些比较私密的信息我们不希望让其他人看见,这时候我们可以将这些数据丢弃到/dev/null或者指定的文件中进行保存
当进程操作一个文件时:
1首先进程是没法直接访问硬件,需要借助内核来访问文件
2而内核kernel需要借助文件描述符(file descriptor)来访问文件
总结:进程—>文件描述符—>访问文件
举例:
第一步:运行tail -f /etc/passwd
第二部: 通过文件描述符–>/etc/passwd—>inode—>block
第三部:正确输出—>默认情况下通过文件描述符1—>当前终端窗口 1>(改变输出位置,文件,黑洞)
第四部:错误输出–>默认情况下通过文件描述符2–>输出到当前终端 2>(改变输出的位置 )
通常访问一个文件至少会打开三个标准输出文件,分别是,标准输出.标准输入,错误输出
进程将标准输出中得到的数据打印到终端
输出重定向的一些格式
案例 1:
[root@localhost ~]# >edu.txt
[root@localhost ~]# ifconfig ens32 | grep 'inet ' >edu.txt
[root@localhost ~]# cat edu.txt
inet 10.0.0.98 netmask 255.255.255.0 broadcast 10.0.0.255
标准输出追加:
[root@localhost ~]# echo 'IPADDR' >> edu.txt ;cat edu.txt
inet 10.0.0.98 netmask 255.255.255.0 broadcast 10.0.0.255
IPADDR
标准错误输出
[root@localhost ~]# ls /etc -iname '*.conf' 1>complete.log 2>error.log
[root@localhost ~]# cat error.log
ls: invalid option -- 'e'
Try 'ls --help' for more information.
混合重定向
1将正确和错误的信息输出到同一个文件中
2将两个文件内容组合成一个文件
[root@localhost ~]# find /etc -name '*.conf' &>all.log ; wc -l all.log
109 all.log
正确和错误的信息都输入到相同的位置
[root@localhost ~]# ls /root/ 1>all.log 2>&1
[root@localhost ~]# wc -l all.log
29 all.log
将内容输出到黑洞
例一
[root@localhost ~]# echo '199688' | passwd --stdin &>/dev/null
例二
[root@localhost ~]# wc -l all.log
29 all.log
[root@localhost ~]# cat all.log &>/dev/null
[root@localhost ~]#
输入重定向
输入重定向:指的是’重新指定设备’来代替键盘作为新的输入设备
[root@localhost ~]# cat > all.log <<EOF
> xiaoming 12 xuesheng
> xiaomei 13 banhua
> xiaohong 15 banzahng
> EOF
[root@localhost ~]# cat > all.log <<EOF
> xiaoming 12 xuesheng
> xiaomei 13 banhua
> xiaohong 15 banzahng
> EOF
经常应用于脚本作为菜单窗口
[root@localhost ~]# vim packege.sh
[root@localhost ~]# bash packege.sh
(1)login ID:
(2)passwrod:
(3)forget password:
(4)exit
please input you need code [1|2|3]:1
[root@localhost ~]#
总结:
输入重定向一般常用的环境:
1输出重定向也经常应用于恢复数据
2cat写入文件
3vim 编辑脚本的菜单窗口