一、数据流重定向
所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本。
标准输入:文件描述符0,通常指键盘的输入 。使用符号<或<<
标准输出:文件描述符1,通常指命令执行所回传的正确信息 ,默认输出到屏幕u。使用符号>或>>
标准错误:文件描述符2,通常指命令执行失败后,所回传的信息,也是默认输出到屏幕。试用符号2>或2>>
默认情况下>和>>分别表示1>或1>>,<和<<与0<和0<<等价。
- 标准输出流
[root@localhost ~]$ ll / >~/ll_command.txt
ll命令执行以后,结果不会显示在屏幕上,而是放到了~/ll_command.txt的文件中。
如果这个文件不存,则系统会自动创建文件。
如果文件已经存在,那么系统会先将文件内容清空,然后再写入数据。
如果想不覆盖数据,而在文件后累加,则使用>>
[root@localhost ~]$ ll / >>~/ll_command.txt
- 标准错误流
[root@localhost ~]$ cd /root 2>> ~/cd_comand.txt
- 标准输入流
[leon@localhost ~]$ cat > catfile
testing
cat file test
# 这里按ctrl+d 停止输入
[leon@localhost ~]$ cat catfile
testing
cat file test
由于在cat后加入>,所以catfile会被主动,而内容就是刚才键盘上面输入的那两行数据:testing和cat file test。
输入流<的作用,简单说就是把原本需要由键盘输入的数据改由文件内容替代。
二、管道的概念
把前一个命令的结果当成后一个命令的输入。
管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会堵塞,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。
# 查看 a.txt 文件5-10行的内容
[root@ks-allinone ~]# head -n10 a.txt | tail -n+5