I/O重定向;
程序:指令+数据 读入数据:Input 输出数据:Output
打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种I/O设备
标准输入(STDIN)-0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置
定向输出 ">"
STDOUT和STDERR可以被重定向到文件: 命令 操作符号 文件名 支持的操作符号包括:
> 把STDOUT(标准输出)重定向到文件
2> 把STDERR(标准错误)重定向到文件
&> 把所有输出重定向到文件
> 文件内容会被覆盖
# set -C: 禁止将内容覆盖已有文件,但可追加
强制覆盖:>|
# set +C: 允许覆盖
>> 原有内容基础上,追加内容
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
():合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt
定向输入 "<"
使用<来重定向标准输入
比如说,我们执行一些命令的时候需要添加一些参数,但是参数太多,不能一条条去写太浪费时间,这时,我们把这些参数写到一个文本当中,用到定向输入"<"会非常的方便,
假设a.txt中没有数据,b.txt中有数据,那我们用下边这个命令,就可以吧b中的数据,写入到a中
cat > a.txt < b.txt
重定向和标准输入/出、标准错误的结合用法;
首先, 什么叫标准输出,就是说,执行命令后出现的正常参数或者说数据,例如;执行ls 就会列出我当前目录下的文件,
[root@centous1 soft]# ls 123.txt b c
或者cat一个文件,让其显示出来文本的内容,这些正常出现的,就叫做标准输出,我们如果需要把数据定向到某个地方,可以用">"
[root@centous1 soft]# ls > d [root@centous1 soft]# ls 123.txt b c d [root@centous1 soft]# cat d 123.txt b c d
如果是错误的提示信息,就叫做标准错误,例如
[root@centous1 soft]# ls - ls: 无法访问-: 没有那个文件或目录
那我们有的时候不想看到那些错误的输出,也可以定向到某个地方;但是格式不一样了
[root@centous1 soft]# ls - 2>f [root@centous1 soft]# ls 123.txt b c d f [root@centous1 soft]# cat f ls: 无法访问-: 没有那个文件或目录
这个命令在 ">" 符号之前多了一个 "2","2>" 表示将标准错误输出重定向
如果,我想把标准输出和标准错误都定向到一个文件中,怎么办?用以下命令
commend > filename 2>&1
这里的&表示让shell理解我们是要把标准错误当成标准输出,写入到flie中
如果那些信息都不重要,那就都扔掉
commend > /dev/null
另外一个非常有用的重定向操作符是 "-",请看下面这个例子
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭 <&- 表示关闭标准输入(键盘) n>&- 表示将 n 号输出关闭 >&- 表示将标准输出关闭
重定向标准输入
cat命令可以接受一组文件为参数,将这些文件复制到标准输出。我们前面的例子中已经多次使用到cat命令来将文本文件的内容读取到屏幕上。cat还有一个很重要的功能:接受一组文件,然后通过重定向将他们重新组合到一个文件中。我们看一个例子
[root@centous1 soft]# echo aaaaaaa > a [root@centous1 soft]# ls 123.txt a [root@centous1 soft]# cat a aaaaaaa [root@centous1 soft]# echo b > b [root@centous1 soft]# echo bbbbbbb > b [root@centous1 soft]# cat b bbbbbbb [root@centous1 soft]# cat a b > c [root@centous1 soft]# cat c aaaaaaa bbbbbbb
这个命令将ls1和ls2文件中的内容合并到ls文件中了。cat命令的这种功能不仅仅适用于文本文件,同样对二进制文件有效。这个场景主要在将多个压缩包文件合并到一个压缩包中用到。
本文出自 “11192821” 博客,请务必保留此出处http://11202821.blog.51cto.com/11192821/1831643
原文地址:http://11202821.blog.51cto.com/11192821/1831643