linux中的数据重定向

首先区分一下标准输出和标准错误输出。
简单的说,标准输出指的是命令执行所传回的正确的信息,而标准错误输出可理解为命令执行失败后所传回的错误信息。

数据重定向就是把标准输出和标准错误输出的结果分别传送到其他的文件或者设备中去,这对于我们想要将某些数据保存下来是很有用的。分别传送所用的字符如下:
1、标准输入(stdin):代码为0,使用< 或 <<;
2、标准输出(stdout):代码为1,使用> 或 >>;
3、标准错误输出(stderr):代码为2,使用2> 或 2>>;

这里说明一下:单个(> 或 <)是指覆盖写,覆盖的意思就是如果目标文件存在数据时,把原数据清空,再写进去。而双个(<< 或 >>)是指追加写。也就是,接在原数据的后面写入。

一、这里举个例子来区分一下stdout和stderr。

当你以一般身份来执行find命令的时候,由于权限的问题会产生一些错误信息。

jie@instance-v7jtqjmo:~$ find /home -name .bashrc
/home/jie/.bashrc
find: ‘/home/jie/tomcat/tomcat8.5/conf/Catalina’: Permission denied //错误信息
find: ‘/home/jie/tomcat/tomcat8.5/work/Catalina’: Permission denied //错误信息
/home/gitlab-runner/.bashrc

这是由于/home下面我还创建了其他的账号,而我以一般的身份来运行命令,无法进入其他账号的主文件夹,所以就会出现权限错误的问题。
下面我来将正确信息重定向到list文件中。

jie@instance-v7jtqjmo:~$ find /home -name .bashrc > list
find: ‘/home/jie/tomcat/tomcat8.5/conf/Catalina’: Permission denied
find: ‘/home/jie/tomcat/tomcat8.5/work/Catalina’: Permission denied

可以看到正确信息已经不见了,只剩下了错误信息。然后查看list文件:

jie@instance-v7jtqjmo:~$ cat list
/home/jie/.bashrc
/home/gitlab-runner/.bashrc

会发现刚刚的正确信息以及被写进来了。
这时屏幕上还是有错误信息,我们可以将错误信息和正确信息分别存到不同的文件中,比如:

jie@instance-v7jtqjmo:~$ find /home -name .bashrc > list 2> list_error

会发现屏幕上已经没有任何信息了,任何打开两个文件查看:正确信息和错误信息都被写到了不同的文件中。

jie@instance-v7jtqjmo:~$ cat list
/home/jie/.bashrc
/home/gitlab-runner/.bashrc
jie@instance-v7jtqjmo:~$ cat list_error 
find: ‘/home/jie/tomcat/tomcat8.5/conf/Catalina’: Permission denied
find: ‘/home/jie/tomcat/tomcat8.5/work/Catalina’: Permission denied

下面来试试>> ,, 会发现信息是在list后面追加的。而没有覆盖掉。

jie@instance-v7jtqjmo:~$ find /home -name .bashrc >> list
find: ‘/home/jie/tomcat/tomcat8.5/conf/Catalina’: Permission denied
find: ‘/home/jie/tomcat/tomcat8.5/work/Catalina’: Permission denied
jie@instance-v7jtqjmo:~$ cat list
/home/jie/.bashrc
/home/gitlab-runner/.bashrc
/home/jie/.bashrc
/home/gitlab-runner/.bashrc

如果想不存储错误信息,可以直接丢进垃圾桶/dev/null

jie@instance-v7jtqjmo:~$ find /home -name .bashrc 2> /dev/null
/home/jie/.bashrc
/home/gitlab-runner/.bashrc

如果想把正确信息和错误信息存到一个文件中,可以用&> list(文件名)

jie@instance-v7jtqjmo:~$ find /home -name .bashrc &> list

然后查看一下list文件:正确和错误信息都被写进去了

jie@instance-v7jtqjmo:~$ cat list
/home/jie/.bashrc
find: ‘/home/jie/tomcat/tomcat8.5/conf/Catalina’: Permission denied
find: ‘/home/jie/tomcat/tomcat8.5/work/Catalina’: Permission denied
/home/gitlab-runner/.bashrc
二、标准输入 stdin

标准输入就是将原本需要由键盘输入的数据改由文件内容来替代。
那什么事键盘输入呢?下面通过cat命令来了解一下。

cat > catfile
test 
test cat create file
<==这里按下【Ctrl + D】来结束输入。

cat查看刚刚创建的文件,大概是下面这个样子啦

jie@instance-v7jtqjmo:~$ cat  catfile
test
test cat create file

用stdin来代替键盘输入以创建新文件。

jie@instance-v7jtqjmo:~$ cat > catfile < Dockerfile   //通过<标准输入创建文件
jie@instance-v7jtqjmo:~$ ll catfile Dockerfile   //这里可以看到这两个文件几乎一模一样
-rw-rw-r-- 1 jie jie 198 Apr  2 20:58 catfile
-rw-r--r-- 1 jie jie 198 Mar 29 20:04 Dockerfile

而<< 在这里是代表结束输出的意思。

jie@instance-v7jtqjmo:~$ cat > catfile << "q"  //用它来指定结束符
> ds
> dsd
> ds
> q

说了这么多,那么输出重定向有啥用呢。

  1. 当屏幕输出的信息很重要,而且我们需要将它存下来的时候。
  2. 后台执行的程序,不希望他干扰屏幕正常的输出结果时。
  3. 一些系统的例行命令,希望可以把它存下来。
  4. 一些执行命令的时候可能已知错误信息时,可以直接丢到垃圾桶/dev/null里
  5. 错误信息和正确信息需要分别输出时。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值