数据流重定向

  数据流重定向

 重定向:>和>>是将标准输出导向一个文件或追加到一个文件中。

 数据流重定向

 $ echo 'hello world' > redirect

 $ echo 'www.baidu.com' >> redirect

 $ cat redirect

 <、<<、>、>>它们的区别在于重定向的方向不一致,>表示从左到右,<表示从右到左。

 简单的重定向

 3个特殊设备用于终端的显示和输出:stdin(标准输入)、stdout(标准输出)、stderr(标准错误输出)

 文件描述符:文件描述符在形式上是一个非负整数。实际上他是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。

 文件描述符     设备文件           说明

       0           /dev/stdin       标准输入

    1          /dev/stdout     标准输出

    2          /dev/stderr      标准错误

  另外还有一个符号-。可以同时作为前一个命令。

 管道默认是连接前一个命令的输出到下一个命令的输入,重定向通常需要一个文件来建立两个命令的链接。

 标准错误重定向:标准输出和标准错误通常都被指向伪终端的屏幕显示。

 $ cat Documents/test.c~ hello.c  #报错  hello.c不存在

 $ cat Documents/test.c~ hello.c > file1  #报错  hello.c不存在

 $ cat Documents/test.c~ hello.c > file1 2>&1   #将标准错误重定向到标准输出,再将标准输出重定向文件

 $ cat file1 #可查看错误信息

 $ cat Documents/test.c~ hello.c &> file2  #将标准错误重定向到标准输出,再将标准输出重定向文件

 使用tee命令同时重定向到多个文件

 $ echo 'hello world' | tee hello #将字符输出到hello的同时输出到终端

 永久重定向:使用exec命令实现永久重定向。exec命令的作用是使用指定的命令替换当前的shell及使用一个进程替换当前进程,或指定新的重定向

 $ zsh #开启一个子shell

 $ exec 1>somefile #使用exec替换当前进程的重定向,将标准输出重定向到一个文件

 $ ls

 $ exit

 $ cat somefile

 创建输出文件描述符:默认在shell中有9个打开的文件描述符。

 $ cd /dev/fd/;ls -A1  #打开当前shell进程中的文件描述符

 创建新的文件描述符

 $ zsh

 $ exec 3>somefile

 $ cd /dev/fd/;ls -A1;cd - #先进入目录,再查看

 $ echo 'this is test' >&3

 $ cat somefile 

 $ exit  

 关闭文件描述符

 $ exec 3>&-

 $ cd /dev/fd;ls -A1;cd -

 完全屏蔽命令的输出:在Linux中有一个被成为“黑洞”的设备文件,所有导入它的数据都将被吞噬。在类Unix系统中,/dev/null或称空设备,是一个特殊的设备文件,他通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。

 $ cat Documents/test.c~ nefile 1>/dev/null 2>&1

 使用xargs分割参数列表:xargs是一条UNIX和类UNIX操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

 $ cut -d: -f1 < /etc/passwd | sort | xargs echo #将/etc/passwd文件按:分割取第一个字段排序后,使用echo命令生成一个列表

 

 $ sudo apt-get install caca-utils

 $ cacaview <pic_file>

 $ cacademo

 $ cacafire #带颜色的火焰哦

原文地址:https://www.cnblogs.com/forerver-elf/p/4701276.html