Linux操作系统--管道与重定向(二十)

一、数据流重定向

  所谓数据流重定向简单来说就是一个过程,这个过程捕捉一个文件,或者命令,程序,脚本,甚至脚本中的代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件,命令,程序,或者脚本。
标准输入:文件描述符0,通常指键盘的输入 。使用符号<或<<
  标准输出:文件描述符1,通常指命令执行所回传的正确信息 ,默认输出到屏幕u。使用符号>或>>
  标准错误:文件描述符2,通常指命令执行失败后,所回传的信息,也是默认输出到屏幕。试用符号2>或2>>
  默认情况下>和>>分别表示1>或1>>,<和<<与0<和0<<等价。


数据流重定向
  1. 标准输出流
[root@localhost ~]$ ll / >~/ll_command.txt

ll命令执行以后,结果不会显示在屏幕上,而是放到了~/ll_command.txt的文件中。
如果这个文件不存,则系统会自动创建文件。
如果文件已经存在,那么系统会先将文件内容清空,然后再写入数据。
如果想不覆盖数据,而在文件后累加,则使用>>

[root@localhost ~]$ ll / >>~/ll_command.txt
  1. 标准错误流
[root@localhost ~]$ cd /root 2>> ~/cd_comand.txt
  1. 标准输入流
[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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容