数据流重定向
重定向:>和>>是将标准输出导向一个文件或追加到一个文件中。
数据流重定向
$ 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 #带颜色的火焰哦