I/O重定向

 

I/O重定向

I/O Redirection
====================================================================================
标准输入、标准输出、标准错误
输出重定向及综合案例
输入重定向及结合案例


标准输入、标准输出、标准错误

file descriptors (FD,文件描述符或 Process I/O channels):
进程使用文件描述符来管理打开的文件
[root@tianyun ~]# ls /proc/$$/fd
0 1 2 3 4

0, 1, and 2, known as standard input, standard output, and standard error




输出重定向 (覆盖,追加)
正确输出: 1>1>> 等价于 > >>
错误输出: 2>2>>

案例1:输出重定向(覆盖)
[root@tianyun ~]# date 1> date.txt

案例2:输出重定向(追加)
[root@tianyun ~]# date >> date.txt


案例3:错误输出重定向
[root@tianyun ~]# ls /home/ /aaaaaaaaa >list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
[root@tianyun ~]# ls /home/ /aaaaaaaaa>list.txt 2>error.txt //重定向到不同的位置


案例4: 正确和错误都输入到相同位置
[root@tianyun ~]# ls /home/ /aaaaaaaaa &>list.txt //混合输出

案例5: 正确和错误都输入到相同位置
[root@tianyun ~]# ls /home/ /aaaaaaaaa >list.txt 2>&1 //重定向到相同的位置

案例6:重定向到空设备/dev/null
[root@tianyun ~]# ls /home/ /aaaaaaaaa >list.txt 2>/dev/null //空设备,即将产生的输出丢掉
[root@tianyun ~]# ls /home/ /aaaaaaaaa &>/dev/null//空设备,即将产生的输出丢掉

cp /etc/passwd /dev/null ???
cp /etc/passwd /etc/passwd1 2>/dev/null ???



sudo rm /dev/null
sudo mknod -m 666 /dev/null c 1 3



案例7:脚本中使用重定向
# vim ping.sh
#!/usr/bin/bash
ping -c1 172.16.120.254 &>/dev/null
if [ $? -eq 0 ];then
echo "up.."
else
echo "down.."
fi

# bash ping.sh

案例8:脚本中使用重定向
# vim ping2.sh
#!/usr/bin/bash
ping -c1 172.16.120.254 &>/dev/null
if [ $? -eq 0 ];then
echo "172.16.120.254 up.." > /up.txt
else
echo "172.16.120.254 down.." >/down.txt
fi

# bash ping2.sh

>new.txt ???
>/etc/passwd ???
>/etc ???




输入重定向
标准输入: < 等价 0<
案例1
[root@tianyun ~]# mail -s "ssss" alice //没有改变输入的方向,默认键盘
111
222
333
^D
[root@tianyun ~]# su - alice
[alice@tianyun ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/alice": 1 message 1 new
>N 1 root@tianyun.local Mon Oct 29 14:09 18/657 "ssss"
&

[root@tianyun ~]# mail -s "test01" alice </etc/hosts //输入重定向,来自于文件

案例2
[root@tianyun ~]# grep 'root' //没有改变输入的方向,默认键盘,此时等待输入...
yang sss
sssrootssss..
sssrootssss..

[root@tianyun ~]# grep 'root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

案例3
[root@tianyun ~]# dd if=/dev/zero of=/file1.txt bs=1M count=2
[root@tianyun ~]# dd </dev/zero >/file2.txt bs=1M count=20

案例4:mysql表结构导入
[root@tianyun ~]# mysql -uroot -p123 <bbs.sql

案例5:at
[root@tianyun ~]# at now +5 min
at> useradd yang99
at> <EOT>
job 1 at 2015-06-09 11:57

[root@tianyun ~]# vim at.txt
sudo useradd yang100
sudo useradd yang102
[root@tianyun ~]# at now +2 min < at.txt
job 2 at 2015-06-09 11:55

sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo




综合案例1: 利用重定向建立多行的文件
[root@tianyun ~]# echo "111" > file1.txt
[root@tianyun ~]# cat file1.txt
111

[root@tianyun ~]# cat >file2.txt
111
222
333
444
^D
[root@tianyun ~]# cat file2.txt

请问:file2.txt有几行?




[root@tianyun ~]# cat >>file3.txt
aaa
bbb
ccc
ddd
^D
[root@tianyun ~]# cat file3.txt

请问:file3.txt有几行?



[root@tianyun ~]# cat >file4 <<EOF
> 111
> 222
> 333
> EOF
[root@tianyun ~]# cat file4
111
222
333


综合案例2: 脚本中利用重定向打印消息
[root@tianyun ~]# vim yang.sh
#!/usr/bin/bash
cat <<-EOF
+------------------------------------------------+
| |
| ====================== |
|
虚拟机基本管理centos |
| by tianyun |
| ====================== |
| 1.
安装虚拟机 |
| 2. 重置所有Linux虚拟机 |
| 3. 重置Windows虚拟机 |
| 4. 重置Windows虚拟机 [完全] |
| 5. 重置指定的虚拟机 |
| q. 退出管理程序 |
| |
+------------------------------------------------+
EOF


综合案例3
[root@tianyun ~]# ls; date &>/dev/null

[root@tianyun ~]# ls &>/dev/null; date &>/dev/null

[root@tianyun ~]# (ls; date) &>/dev/null

[root@tianyun ~]# (while :; do date; sleep 2; done) &>date.txt

[root@tianyun ~]# (while :; do date; sleep 2; done) &>date.txt&
[1] 6595
[root@tianyun ~]# tailf date.txt
Tue Apr 12 22:04:32 CST 2016
Tue Apr 12 22:04:34 CST 2016
Tue Apr 12 22:04:36 CST 2016
Tue Apr 12 22:04:38 CST 2016
Tue Apr 12 22:04:40 CST 2016
Tue Apr 12 22:04:42 CST 2016
Tue Apr 12 22:04:44 CST 2016
Tue Apr 12 22:04:46 CST 2016
Tue Apr 12 22:04:48 CST 2016

[root@tianyun ~]# jobs
[1]+ Running ( while :; do
date; sleep 2;
done ) &>date.txt &
[root@tianyun ~]# kill %1
[root@tianyun ~]# jobs

[root@tianyun ~]# (./configure && make && make install)&>/dev/null

扩展点:subshell
[root@tianyun ~]# (umask 777; touch file8888)
[root@tianyun ~]#
[root@tianyun ~]# ll file8888
---------- 1 root root 0 Apr 12 22:11 file8888
[root@tianyun ~]#
[root@tianyun ~]# umask
0022

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值