重定向和管道

一、重定向

1.什么是重定向?简单理解,就是将输出的数据(一般在显示器上显示)重新在另一个地方显示。
在系统设定当中,默认的输出设备:标准输出(STDOUT,用1描述),默认的输入设备:标准输入(STDIN,用0描述),标准错误输出(STDERR,用2描述),标准输入一般是用键盘,标准输出和错误输出一般在显示器上显示。
符号:> 、>>、<、<<

2.I/O重定向

    对linux来说有两种方式:>覆盖重定向,>>追加重定向,覆盖重定向的意思就是会把原有的数据覆盖掉,追加重定向就是在原有的数据后面添加数据,如:echo “hello” > /tmp/out.txt,用echo打印hello语句,把显示的信息重定向到/tmp/out.txt文件中(如果out.txt文件不存在会创建,如果有会覆盖原有的数据),本来用echo “hello” 命令会把显示的信息显示在显示器上的,但是加了>重定向之后就不再显示到显示器上,而是显示到/tmp/out.txt文件中,>>追加重定向也是同样的道理,只是它不会覆盖原有的数据,而是在文件的末尾添加。

    另外要注意的是使用覆盖重定向>是比较危险的,要格外小心,因为稍不注意可能就会把重要的配置文件覆盖了,为了避免这种情况发生,你可以使用 set -C 命令不允许覆盖原有文件、set +C 允许覆盖进行设置。

3.2>重定向错误输出,2>>追加的方式

    如:ls xssxs 2> /tmp/err.txt ,ls列出一个不存的文件名是会报错的,2>就是把错误的信息重定向的/tmp/err.txt文件中,如果不加 2 错误信息会在显示器上显示,而不是重定向到/tmp/err.txt文件中,2>>追加同理。

4.1>标准输出重定向,1>>追加方式

    如:ls xxxssx /etc 1> /tmp/stdin.txt ,xxxssx文件不存在,/etc目录是存在的,使用ls列举这两个文件是,对错误的信息会输出到显示屏上,正确的输出信息则重定向到/tmp/stdin.txt文件中,可以不加 1,追加方式同理。

5.&>标准错误输出和标准输出重定向,&>>追加方式
如:ls xxxssx /etc &> /tmp/stdin.txt,错误信息和正确的输出信息都会重定向到/tmp/stdin.txt文件中,追加方式同理。
6.输入重定向<,<<

    如:tr 'a-z' 'A-Z' ,将小写字母转为大写字母,这条命令执行后会等待你在键盘上要输入的字母:

重定向和管道

    但是如果你加上<输入重定向,就会把你要重定向的内容当作键盘输入,如:
    tr 'a-z' 'A-Z' < install.log ,就会把install.log文件内的内容当作是键盘输入的,提交给tr转换。
    <<:用法,如:
    cat << EOF,会等待你输入的内容,当你输入EOF的时候,结束输入等待,并把你输入的内容在显示器上显示:

重定向和管道

    cat >> /tmp/cat.txt << EOF,会等待你输入的内容,当你输入EOF的时候,结束输入等待,并把你输入的内容重定向到/tmp/cat.txt文件中,以追加的方式。

二、管道

管道就是把前一个命令的输出作为后一个命令的输入
用法:命令1 | 命令 2 | 命令3 ...

    如:cat "hello" | tr 'a-z' 'A-Z',将输出的hello作为tr命令的输入
    echo ‘redhat’ | passwd student --stdin ,用此方法也可以修改student的密码。
    echo 'hello' | tee /tmp/hello.txt,tee命令是将输入的内容在显示器上打印出来,并保存到/tmp/hello.txt中。

猜你喜欢

转载自blog.51cto.com/13803030/2133596