一、重定向
重定向说白
就是对标准IO的处理,在系统中一般使用、1、2表示,表示标准输入,1表示标准输出,2表示错误。这种表示方法是系统默认的,不仅在bash中,在C、java、python等其他语言开发中也适用。
1.1命令重导向示例
在bash命令执行的过程中,主要有三种输出入的状况,分别是:
1.标准输入;代码为;或称为stdin;使用的方式为
2.标准输出:代码为1;或称为stdout;使用的方式为1>
3.错误输出:代码为2;或称为stderr;使用的方式为2>
1.2重定向符号
>输出重定向到一个文件或设备覆盖原来的文件
>!输出重定向到一个文件或设备强制覆盖原来的文件
>>输出重定向到一个文件或设备追加原来的文件
1.3标准错误重定向符号
2>将一个标准错误输出重定向到一个文件或设备覆盖原来的文件b-shell
2>>将一个标准错误输出重定向到一个文件或设备追加到原来的文件
2>&1将一个标准错误输出重定向到标准输出注释:1可能就是代表标准输出
>&将一个标准错误输出重定向到一个文件或设备覆盖原来的文件c-shell
&将一个标准错误管道输送到另一个命令作为输入
一般常用的就是讲标准输入、输出、错误进行重定向。
示例:
[test @test test]# ls -al >> list.txt
将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!
[test @test test]# ls -al 1> list.txt 2> list.err
将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err
[test @test test]# ls -al 1> list.txt 2> &1
将显示的数据,不论正确或错误均输出到 list.txt 当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!
[test @test test]# ls -al 1> list.txt 2> /dev/null
将显示的数据,正确的输出到 list.txt错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。
二、管道
重定向只是将执行的结果进行重新输出,但是遇到需要对结果进行处理分析的时候就需要向其他进程传递重定向的结果,这个时候就要用到管道,管道可以理解为进程间通信,接收输入的内容并进行操作处理。
注意:
1、管道命令只处理前一个命令正确输出,不处理错误输出
2、管道命令右边命令,必须能够接收标准输入流命令才行。
示例:简单的管线命令
假设我们要读取 last 这个指令中,那个 root 登入的『次数』应该怎么作?
那么我所进行的步骤是:
1. 执行 last ,将所有这个月的所有人登入数据取出来;
2. 使用 grep 将上面的输出数据(stdout)当中的 root 撷取出来,其它的不要;
3. 使用 wc 这个可以计算行数的指令将上一步的数据计算行数!
由于 last 的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,经由上面三个步骤,将 last 数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下:
[test @test bin]# last grep root wc -l
这个管线命令『 』仅能处理经由前面一个指令传来的正确信息,也就是standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力。
三、xargs
主要是讲管道与xargs的区别,总结为:管道是对上一次执行结果的处理,xargs是将上一次执行结果作为参数传递给下一个命令用来执行。
示例:
用find或者ls查找文件,然后将所有文件tar了。
期待与小伙伴们一起交流安全技术
领取专属 10元无门槛券
私享最新 技术干货