Linux重定向初探

编写Linux shell脚本的时候,经常会用到重定向,本文从简单的ls开始,逐渐探索常用的重定向用法。
首先,我们列出/usr目录下面的全部文件和目录。
[root@gn01 ~]# ls /usr
bin  etc  games  include  lib  lib64  libexec  local  sbin
我们看到,在终端输出了目录详情。
如果我们要将输出信息保存到文件呢?
[root@gn01 ~]# ls /usr > output.log  //没有输出
[root@gn01 ~]# more output.log //调整了输出格式
bin etc games include lib lib64 libexec local sbin
我们看到,使用 >就可以实现重定向功能。
下面我们查看一个不存在的目录,当然会看到报错信息。
[root@gn01 ~]# ls /not-exists-dir
ls: 无法访问/not-exists-dir: 没有那个文件或目录
通过上面的例子看到,正常的输出和错误信息都打印到终端了。现在,我们希望将报错信息保存到一个文件中(这样就可以在程序运行的时候离开一会儿),该怎么写呢?
既然>可以实现将输出信息重定向到文件中,那么它能够将错误信息重定向吗?
[root@gn01 ~]# ls /not-exists-dir > err.log
ls: 无法访问/not-exists-dir: 没有那个文件或目录
失败了,错误信息还是打印到了屏幕上。正确的写法如下。
[root@gn01 ~]# ls /not-exists-dir 2>err.log
上面的2>err.log表示将标准错误重定向到err.log文件,也就是将错误信息保存到err.log文件。

0、1和2分别表示标准输入、标准输出和标准错误,可以用来指定需要重定向的标准输入或输出。在一般使用时,默认的是标准输出,既1。

好了,现在错误信息也写入文件了,那么如果要将正常输出和错误信息写到同一个文件呢?
[root@gn01 ~]# ls /usr /not > all.log 2>&1
[root@gn01 ~]# cat all.log 
ls: 无法访问/not: 没有那个文件或目录
/usr:
bin etc games include lib lib64 libexec local sbin
ls /usr /not > all.log将标准输出重定向到文件,2>&1将标准错误重定向到标准输出,这里的顺序很重要。另外,之所以要在1之前加一个&,是为了区分名称为1的文件和标准输出。
最终,我们希望程序在后台运行,将输出写入文件,并且在我们退出终端的时候也能继续运行。
nohup ./program > log-file 2>&1 &

程序运行久了,我们就会发现log-file不停增大,想在文件中找到错误信息很耗时间,这是我们不希望看到的,看来还需要将正常输出和错误输出分开,直接丢弃正常输出,只保留错误信息即可,这就需要用/dev/null。


/dev/null是Linux下的一个特殊文件,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。


nohup ./program >/dev/null 2>log-file &

更多内容可以参考:

http://en.wikipedia.org/wiki/Redirection_(computing)
http://en.wikipedia.org/wiki/Nohup
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值