Linux学习-数据流重导向

以前只会最简单的命令输出内容重导向到剪切板或者其他文件中,今天重温了这一章又学到了很多:至少“标准输出”和“标准错误输出”就是两种不同的方式。

数据流在这里所说的就是命令运行产生的结果,一个命令的运行数据流向图:
数据流向图

输出

输入只有标准输入一种方式,输出有标准输出和标准错误输出两种,所以输入与输出总共有三种:

  1. 标准输入(stdin): 代码为0,使用<或<<;
  2. 标准输出(stdout): 代码为1,使用>或>>(>,覆盖写入;>>,追加写入);
  3. 标准错误输出(stderr): 代码为2,使用2>或2>>;
  • 将某个文件的内容写入剪切板:

    1
    clip < ~/.ssh/id_rsa.pub
  • 将正确输出和错误输出分别写入不同的文件中:

    1
    find /home -name .bashrc > list_right 2 > list_error
  • 将正确输出和错误输出写入同一文件中:

    1
    2
    3
    find /home -name .bashrc > list 2 > list //错误:正确、错误信息会交叉写入文件,次序混乱(但是这里为啥会次序混乱了呢?)
    find /home -name .bashrc > list 2>&1 //正确
    find /home -name .bashrc &> list //正确

输入

<, 这个符号的作用就是:将原本需要由键盘输入的数据,改由文件内容来取代。

  • 利用cat命令创建一个文件

    1
    2
    3
    4
    cat > catfile //创建文件catfile,命令执行之后用户输入的内容会写入到catfile文件中
    testing
    cat file test
    //按下[ctrl+d]离开文件的编辑,以上两行就会写入catfile文件中
  • 使用复制其他文件的内容来取代键盘的输入

    1
    cat > catfile < ~/.bashrc //新建的文件catfile在内容上完全复制~/.bashrc
  • 输入结束符<<

    1
    2
    3
    4
    cat > catfile << "eof"
    This is a test.
    Ok now stop
    eof //这里输入eof即会退出catfile文件的编辑,而不需要[ctrl+d]了,前两行内容会写入文件catfile中