闇の光

读书笔记 经验感受

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

重定向

  • 输出重定向

    有关输出重定向,举例说明就比如:

    $ls -l > lsoutput.txt

    这个例子的意思就是,将ls命令操作得到的结果导入到lsoutpu.txt文件中。

    这是输出重定向中比较简单的操作,上面的这个例子的结果,在当前目录下不存在lsoutput.txt文件时,创建该文件并将结果置于其中;但在已经存在lsoutput.txt文件的情况下,将会清空该文件再把结果置于其中。由此,将带来一些不必要的麻烦。

    在此,Linux提供了一种方法来避免这种麻烦,即通过设置noclobber。操作如下:

    set -o noclobber (or set -C)

    这样设置之后,就可以避免当lsoutput.txt文件存在时,重定向操作重写该文件。 要取消noclobber的设置,命令如下:

    set +o noclobber

    除此之外,输出重定向操作还有另一项操作:>> 。例如:

    $ps >> lsoutput.txt

    它所代表的意思就是,将ps的结果保存在lsoutput.txt文件中,当lsoutput.txt文件不存在时,创建该文件并将结果置于其中,而当lsoutput.txt文件存在时,则将结果保存在该文件的结尾。

    上面简单介绍了一下输出重定向操作的两种方式,现在我们再深入了解重定向操作。

    在Linux中,分别用三个数字0、1、2来表示重定向操作的三种状态。0代表标准输入、1代表标准输出、2代表标准错误输出。因此,我们通过使用2>来将标准错误输出存放到具体的文件中。比如:

    $kill -HUP 1234 >killout.txt 2>killerr.txt

    它所表示的意思就是,将进程号为1234的进程杀死,并将结果保存到killout.txt中,将所报的错误保存到killerr.txt中。

    如果你想将这两种结果都保存在一个文件中,可以通过操作:

    $kill -1 1234 >killout.txt 2>&1

    注意操作的顺序,先将标准输出到killout.txt文件中,再将将标准错误输出到该文件中。如果顺序错误的话,将不能得到你所想要的结果。

    另外,如果你不想保存标准输出和标准错误输出到文件中,可以通过/dev/null来达到要求。命令如下:

    $kill -1 1234 >/dev/null 2>&1

  • 输入重定向

    输入重定向操作类似于输出重定向,举例说明:

    $more < killout.txt

    所表示的意思是,将killout.txt中内容导入到more操作中。

    下面是一些重定向的例子:

    $ls /dev 1>filename

    $ls -qw /dev 2>filename (很明显,qw选项不是ls的参数选项)

    $ls /dev &>filename (标准输出和标准错误输出都保存在filename文件中)

    $exec 5>&1 (表示把文件标识符5定向到标准输出,这个命令通常用来临时保存标准输入)

    接下来是一个具体的操作实例:

    #echo 123456789 >filename 把字符串写到文件filename中

    #exec 3<>filename 把文件filename打开,并指定文件标识符为3

    #read -n 4 <&3 从文件中读4个字符,句柄已经指到第四个字符末尾

    #echo -n . >&3 在第5个字符处写一个点,覆盖第5个字符,-n表示不换行

    #exec 3>&- 关闭文件标识符3

    现在cat filename文件的结果就成了1234.6789 (注:命令j<>filename表示把文件打开,并指明文件标识符为j , "&-"表示关闭文件标识符) 有关关闭文件标识符的操作请参考下面

    n<&- 关闭输入文件标识符n

    0<&-或<&- 关闭标准输入stdin

    n>&- 关闭输出文件标识符n

    1>&-或>&-关闭标准输出stdout

    另外还有一些其他命令,如下参考

    :> filename 或者 > filename

    表示把文件filename设置成空,也就是清空文件内容,如果文件不存在,则创建一个空文件,(等同于touch命令) :表示一个空输出,两个命令的唯一区别就是>filename不是在所有shell都可以正常工作的。
  • posted on 2008-03-05 14:42  taizi  阅读(262)  评论(0编辑  收藏  举报