专栏首页Linux基础入门(18)Bash输入输出重定向

(18)Bash输入输出重定向

在介绍输入输出重定向前,我们需要知道什么是标准输入和输出

1.标准输入输出

设备

设备文件名

文件描述符

类型

键盘

/dev/stdin

0

标准输入

显示器

/dev/sdtout

1

标准输出

显示器

/dev/sdterr

2

标准错误输出

下面我们来看一下什么是输出重定向

从字面意义上我们可以这样理解:输出本来是当我进行命令后,输出到屏幕上,现在我不让他输出到屏幕,改变他的输出方向,把他输出到文件当中,就叫输出重定向。

2.输出重定向

类型

符号

作用

标准输出重定向

命令 > 文件

以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。

命令 >> 文件

以追加的方式,把命令的 正确输出输出到指定的文件或设备当中。

标准错误输出重定向

错误命令 2> 文件

以覆盖的方式,把命令的 错误输出输出到指定的文件或设备当中。

错误命令 2>> 文件

以追加的方式,把命令的错误输出输出到指定的文件或设备当中。

例1.标准输出重定向

#ls命令查看目录内的内容为aaa、bbb、ccc
[root@192 lhh98330]# ls
aaa bbb ccc
#输出重定向,将ls内容输出到newfile这个文件中,不再显示在屏幕上
[root@192 lhh98330]# ls > newfile 
#再次通过ls命令查看目录内的内容
[root@192 lhh98330]# ls
newfile aaa bbb ccc
#通过cat命令查看newfile内容,和ls中的一致
[root@192 lhh98330]# cat newfile
newfile
aaa
bbb
ccc
#将date命令重定向在newfile文件中
[root@192 lhh98330]#date > newfile
#通过cat命令查看newfile内容
#发现date命令覆盖了ls的内容
[root@192 lhh98330]#cat newfile
2020年 08月 11日 星期二 10:19:42 CST
#">"为覆盖重定向,">>"则为追加重定向,
#用">>"再次将date写入newfile
#不会覆盖之前的date,会出现两条date内容
[root@192 lhh98330]#date >> newfile
2020年 08月 11日 星期二 10:19:42 CST
2020年 08月 11日 星期二 10:20:33 CST

例2.错误输出重定向

#输入一条不存在的命令lst,执行结果会报错
[root@192 lhh98330]#lst
bash: lst: 未找到命令...
#如果用输出重定向,错误结果是保存不了的
[root@192 lhh98330]#lst >> newfile
bash: lst: 未找到命令...
#错误输出需要用错误输出重定向
#将lst内容输出到newfile这个文件中,不再显示在屏幕上
[root@192 lhh98330]#lst 2>> newfile
#通过cat命令查看newfile内容,错误输出结果包含在内
[root@192 lhh98330]#cat newfile
2020年 08月 11日 星期二 10:19:42 CST
2020年 08月 11日 星期二 10:20:33 CST
bash: lst: 未找到命令...

等等……错误输出重定向,需要我们提前知道命令是正确的还是错误的,如果我知道这个命令是错的,我把他改正不就行了吗?还输出他干嘛……

所以像这种正确输出和错误输出分别保存的方法在实际中用处不大,我们用到更多的是正确输出和错误输出同时保存

3.正确输出和错误输出同时保存

正确输出和错误输出同时保存

命令 > 文件 2>&1

以覆盖的方式,把正确输 出和错误输出都保存到同 一个文件当中。

命令 &>文件

命令 >> 文件 2>&1

以追加的方式,把正确输出和错误输出都保存到同一个文件当中。

命令 &>>文件

命令 >> 文件1 2>>文件2

把正确的输出追加到文件1中,把错误的输出追加到文件2中

例1:正确输出和错误输出同时保存

#不管错误输出还是正确输出都保存在同一文件里
[root@192 lhh98330]#date &>> file
[root@192 lhh98330]#lst &>> file
[root@192 lhh98330]#cat file
2020年 08月 11日 星期二 14:55:42 CST
bash: lst: 未找到命令...
#把正确的输出追加到文件1中,把错误的输出追加到文件2中
[root@192 lhh98330]#date >> file1 2>> file2
#正确输出保存在file1中
[root@192 lhh98330]#cat file1
2020年 08月 11日 星期二 14:56:42 CST
#因为date为正确输出,所以file2为空
[root@192 lhh98330]#cat file2 

PS:命令 &>/dev/null:不管命令是否正确,直接丢入这个文件,不保存任何数据,在写shell脚本时有用,比如说我们在写Shell脚本的时候,有些命令行在Shell执行的时候他会有一些输出,这个输出对于我们整个脚本没有任何意义,但是他的命令格式本身就会输出,这个时候就可以用这个方式把他丢到垃圾箱。

4.输入重定向

我们执行命令的参数应该是键盘来输入,我改变他的输入方向,不再以键盘来输入,而是以文件来输入。

格式:命令<文件,把文件作为命令的输入

[root@192 lhh98330]#wc [选项] [文件名]
选项: -c 统计字节数
      -w 统计单词数
      -l 统计行数

例1.把文件newfile作为命令wc的输入

[root@192 lhh98330]# wc < newfile
8 8 45   #8行,8个单词,45个字符(包含回车符)

END

本文分享自微信公众号 - 生信real(hh98330),作者:鱼仔real

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • (25)Bash数值运算与运算符

    首先我们来看下面这幅图,为啥cc的值不是33呢,其实是因为在Linux的Shell当中,变量的默认类型全都是字符串类型,所以aa和bb都是字符串,让他们俩相加就...

    生信real
  • Linux文本处理命令详解

    cat /etc/issue /etc/fstab:将这两个文件内容显示出来并连接在一起

    生信real
  • (6)Linux文件搜索命令find

    数据块前面加+表示查找大于这个大小的文件,-表示查找小于这个大小的文件,不加表示查找等于这个大小的文件(一般不常用)

    生信real
  • 使用ntopng和SNMP监控网络设备

    简单网络管理协议(SNMP)是用于远程监控网络设备的事实标准之一,如路由器、交换机和服务器等。使用ntopng Enterprise,就可以与这些设备进行持续的...

    虹科网络可视化与安全
  • Scala安装教程

    首先去Java官网下载Java的安装包 jdk-8u121-windows-x64.exe

    机器学习和大数据挖掘
  • 设计模式~原始模型模式(二)

    为做到深复制,所有需要复制的对象需要实现 java.io.Serializable接口。

    Vincent-yuan
  • 运行网站出现Too many open files,CentOS 6.x和CentOS 7.x解决方法

    针对新手使用Appnode常见问题: 有没有安装完Appnode,配置好网站正常运行一段时间出现报错: Too many open files  出现以上报错可...

    奇梦
  • 运行网站出现Too many open files,CentOS 6.x和CentOS 7.x解决方法 Linux 面板

    奇梦
  • Fab and Dialog Morphing Animation

    Fab and Dialog Morphing Animation on Android.

    宅男潇涧
  • Java Review (一、Java开发环境)

    有些程序编译结束后,还可能需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码 模块生成最终的可执行性程序,通过这种方式实现低层次的代码复用。 ...

    三分恶

扫码关注云+社区

领取腾讯云代金券