Linux-重定向和管道

系列文章目录

Linux-简介
LInux-文本编辑
Linux-文件系统
Linux-目录和文件操作
Linux-用户管理和文件权限
Linux-进程管理
Linux-重定向和管道
Linux-网络编程
Linux-常用命令



stdin/stdout/stderr

Linux进程在启动后,通常就会打开3个文件句柄,标准输入文件(stdin),标准输出文件(stdout)和 标准错误文件(stderr)。

Linux进程,要从用户那里读入输入的信息,就是从stdin文件里面读取信息,要输出信息给用户看都是输出到 stdout, 要输出错误提示给用户看都是输出到 stderr。

而缺省情况下这三个文件stdin、stdout、stderr 都指向 —— 终端设备。

Linux进程从stdin里面读取信息其实就是从终端设备(比如终端模拟程序Putty)读取信息;Linux进程写入信息到stdout或者stderr,其实就是打印到终端设备上。

在这里插入图片描述

Stdout、Stderr重定向

如果我们在Shell中输入命令的时候,使用 > 符号, 就可以将输入信息输出到其他文件(包括设备文件)中去。

例如:

[Mrliu@mrliu ~]$ ps > out

运行后,我们会发现Putty终端窗口里面则没有任何内容打印出来了,通过cat命令,我们在out文件中读取跟上面一样的结果。

在这里插入图片描述
这个 > 就是 stdout 重定向符号, 它表示 stdout 不是指向 终端设备了,而是 重定向到 out 文件。 所以stdout 指向了 out 文件, 输入的信息就到 out 文件了。 终端屏幕上就没有信息了。

此时,对应示意图如下:
在这里插入图片描述
但是重定向Stderr跟Stdout是不同的,重定向符号是2>,我们输入一个不存在的命令

例如:

[Mrliu@mrliu ~]$ ps asdf 2> err

运行后,发现跟上面结果一样
在这里插入图片描述

如果我们要,同时重定向stdout和stderr到同一个文件both中,需要加上 &>,命令写法如下:

[Mrliu@mrliu ~]$ command &> both

这个用法通常用在一些网络服务,需要记录一些日志信息等。

如果我们要,重定向stdout到out文件,并重定向stderr到err文件,命令写法如下:

[Mrliu@mrliu ~]$ command > out 2>err

stdin重定向

我们也可以在命令中,将 标准输入stdin 重定向,使用符号 <

例如下面程序:

for i in xrange(3):
    data=raw_input()
    print ('%s+1=%s' % (data,int(data)+1))

该程序是从终端都三次输入,每次的结果+1,然后输出

在这里插入图片描述
接下来我们将输入重定向到其他文件,首先,再创建一个文件add.dat

在这里插入图片描述

执行命令,结果如下:

在这里插入图片描述
这个 < 就是 stdin 重定向符号, 它表示 stdin 不是指向 终端设备了,而是 重定向到 add.dat 文件。 所以 stdin 指向了 add.dat 文件, 程序就从add.dat 文件读入信息 了。

对应示意图:
在这里插入图片描述
通过输入重定向,我们可以完成一些事先已知的操作,写好需求,通过自动化完成,节省人工成本。

管道

在Linux操作过程中,我们经常需要 将一个命令的输出的内容,给另一个命令作为输入的内容进行处理。这时候就可以用到管道,而使用管道,我们可以通过管道操作符来实现。例如:

ps –ef | grep 6536

其中的 竖线 | , 这个就是管道操作符,它起的作用就是

● 将 前面的 ps –ef 命令的stdout(本来是输出到终端设备的) 重定向到一个 临时管道设备里面,

● 同时 将后一个命令 grep 6536 的stdin重定向到这个临时的管道设备。

示意图如下:
在这里插入图片描述
下面我们通过命令行来演示一下:

如果我们想到进程中包含65的命令,下面直接输出太多了
在这里插入图片描述

用ps -ef 可以显示出所有的进程信息,而grep命令可以从文件中过滤出包含指定字符串模式的行。这时,将两者结合并使用管道操作符“|”就可以实现

在这里插入图片描述

通过管道操作,等价于分别将输出重定向到文件,然后再从文件中读取

例如:

在这里插入图片描述
引入管道后,大大提高了效率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值