关于Linux I/O 重定向

关于Linux I/O 重定向

Linux 的标准输入,标准输出,标准错误

1.标准输入就是键盘或者鼠标输入到linux的信息,英文standard input 简写stdin,linux用文件符号0表示标准输入 如下面命令:

	read city 					   #窗口会等待输入信息,然后赋值给city这个变量
  	read city;echo "I love $city";  #你输入的信息被赋值给city这变量,如果输入BeiJing,屏幕会输出 I love BeiJing

2.标准输出就是命令行的信息输出到屏幕或者声音设备中,英文standard out 缩写stdout ,linux用文件符号1表示,如下面命令会产生标准输出到屏幕

 echo BeiJing			 #输出 BeiJing
 date		             #输出当前日期
 ls -l /usr/bin          #输出/usr/bin目录的内容信息

3.标准错误就是产生的错误会自动输出到屏幕中,英文standad error 缩写stderr,linux用文件符号2表示,如下命令会产生错误并输出到屏幕:

 ls -l /usr/bin/xxx   #/usr/bin/xxx目录不存在屏幕输出错误 ls: cannot access /usr/bin/xxx: No such file or directory

重定向

1.标准输入重定向 符号 <
如上面的 read city;echo “I love $city”; 我们必须要从键盘输入一个城市名称
如果我们新建一个文件 vim city.txt ,并且输入BeiJing 保存退出
用输入重定向把 文件里面的内容给city变量:

 vim city.txt 								#输入一个城市如BeiJing 保存退出
 read city < city.txt ;echo "I love $city"; #这时city.txt 内容会给到city 然后屏幕直接输出 I love BeiJing

2.标准输出重定向 符号>
如上面的echo BeiJing 屏幕会显示BeiJing,如果我们不希望输出到屏幕可以这样:

 echo BeiJing > beijing.txt         #此时 会生成一个文件并且内容是BeiJing
 cat beijing.txt                    #查看文件内容
 ls -l /usr/bin >usr-bin.txt		  #目录/usr/bin的内容会输出到usr-bin.txt文件中

重定向符号> 会每次覆盖文件内容,如果希望追加内容可以使用>> 如:

 echo BeiJing >> beijing.txt
 echo BeiJing >> beijing.txt
 echo BeiJing >> beijing.txt
 cat beijing.txt #此时会有多行beijing

3.标准错误重定向 文件描述符 2紧跟 >输出重定向符号,既:2>
如执行

 ls -l /usr/bin/xxx   # /usr/bin/xx 不存在 屏幕输出错误:ls: cannot access /usr/bin/xxx: No such file or directory

但我们不希望它输出错误,而是希望它把错误保存在一个日志文件,我们有空再定时排查,这个在linux执行一些shell定时任务脚本是很有用的。

 ls -l /usr/bin/xxx 2> error.log  #此时会生成error.log文件,并且内容是 ls: cannot access /usr/bin/xxx: No such  file or directory
 cat error.log 					 #查看错误日志内容
 ls -l /usr/bin/xxx 2>> error.log #追加错误信息到error.log 而不是每次都覆盖掉

4.标准输出和标准错误同时重定向到一个文件
上面说到

 ls -l /usr/bin >usr-bin.txt  			  #会把标准输出内容重定向到usr-bin.txt
 ls- l /usr/bin/xxx 2> error.log          #会把标准错误内容重定向到error.log

那么有没有方法不管命令错误还是正常都把内容输出到一个test.txt 文件?
方法有两个:

 ls -l /bin/usr/test > test.txt 2>&1 #老版本shell命令
#如果/bin/usr/test 存在则内容输出到test.txt 中,
#如果不存在则错误内容也输出到test.txt 中,
#后面的 2>&1 ,2表示标准错误 , >表示重定向,&表示取址,1表示标准输出,合起来就是把标准错误也重定向到标准输出,然后标准输出给 test.txt 文件

 ls -l /bin/usr/test &> test.txt #新版本shell更简单的合并命令

处理不想要的输出 黑洞/dev/null

如果我们执行一段linux命令,我们既不想要它把标准输出或者标准错误打印打到屏幕,也不想要它重定向保存到文件中.,可以采用/dev/null ,这是linux特殊文件,称为位桶(bit bucket),也有点像黑洞,不管丢什么东西进去都会不见了.

 echo Hello > /dev/null     #  标准输出重定向到/dev/null 屏幕不会有输出 /dev/null也不会有内容
 cat /dev/null					  #不会得到任何信息
 ls -ls /usr/bin > /dev/null  
  ls -ls /usr/bin/xxx 2> /dev/null    #/usr/bin/xxx 目录不存在,把错误信息重定向到/dev/null 这样屏幕既不会输出错误信息,我们也不需要把错误信息保存到文件中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值