Linux 输入输出

基本输入输出三个:

    0    标准输入STDIN

    1    标准输出STDOUT

    2    标准错误STDERR

标准错误流默认是输出到屏幕即标准输出上的。

重定向:

    符号  > 输出覆盖  >>输出追加  <输入

    ls -al > list 将结果写入list文件中,list没有将创建

    ls -al >> list 将结果追加到list尾部,list没有将创建

   上面这种情况只能一次性的改变输入输出方向,要想在终端或shell中永久(也不能算是永久,在退出之前所有的输入输出是有效的)有效,需要用到exec命令,可以用man exec 查看bash中的帮助(需要查找 /exec 最好跟空格)

    exec 1> list 表示将标准输出重定向到list文件中,以后的输出都会到list中,这个是追加的,后面输出的内容不会覆盖以前的,我刚试了。

    如果你这样做了,你就会发现你没办法将输出从list返回到标准输出中了,要改变这种情况,需要用一个中间值将标准输出保存起来,书中叫Open File descriptor ,描述符最多只能有9个,可以用lsof命令列出所有的,也可用

lsof -a -p $$ -d 0,1,2 列出描述符为0,1,2的情况,$$表示当前bash,-a表示and,具体请man

    示例:

                exec 3>&1(描述符3重定向到标准输出,3后面不能有空格) 

                exec 1>list(标准输出重定向到list)

                ls (输出到了list中)

                exec 1>&3(将标准输出重定向会monitor)

                ls(输出到屏幕上)

    我感觉描述符中存的是一个地址,在你修改1的时候,3指向的地址不会变,仍然是标准输出,所以才可以重定向回来(自我感觉)。

      要想弃置一个描述符可以使用&-, exec  3>&-,再应用的时候会报错3: Bad file descriptor

抑制输出:

    有时候不想看到一些错误信息,可以将错误输出重定向到 /dev/null ,有时候想将一个文件清空,可以用 file</dev/null ,这样文件保留,但是内容已经没了,wiki中有比较有意思的解释 http://zh.wikipedia.org/wiki//dev/null,有兴趣的可以看看。

生成日志:

    有时候既想在控制台上看到,又想将信息存到一个file中,该怎么办呢?这时候就可以使用一个特别的命令tee,可以将信息输出到这两个地方,man一下解释: tee - read from standard input and write to standard output and files




你可能感兴趣的:(input,output)