1.  I/O重定向
    在命令行下,我们使用echo命令输出变量或字串到屏幕,如:
        echo Hello World
    就会在屏幕输出:Hello World!
        echo $HOME
    就会将当前用户的根目录输出到屏幕
    而I/O重定向就是重新定义输入输出的接受端,这个接收端可以为其他终端,文件或者应用程序
    例如:
  

echo Hello World > hello.txt


    就会将Hello World这个字串写入当前目录下名为Hello的txt文件中,注意,如果该目录下已存在该文件,那么它将被重写。
     如何将echo参数输出到应用程序呢?下面我们来看一个实例
    输入以下程序:
  

/*******say.c*********/
    #include <stdio.h>
    #include <malloc.h>
   
    int main()
    {
        char *str;
        str=(char *)malloc(100);
        scanf("%s",str);
        printf("%s/n",str);
        exit(0);
    }

    编译链接:
        cc -o say say.c
    这样在当前目录下就生成了可执行文件say,然后输入以下命令:
        echo Hello World | ./say
    于是屏幕上就输出了:Hello
     因为scanf函数以空格分隔扫描参数,所以输出的只有Hello字串。上面我们用到了“|",这种技术称为管道技术,后面我会详细讲解。
     事实上,应用程序也可以从文件中接受输入参数。输入以下命令:
         ./say < hello.txt
   我们可以看到与上面同样的结果。
   下面的命令类似:
  

ls | ./say
        ps |./say
        whoami|./say

    我们还可以直接将Shell命令的执行结果输出到文件,如:
  

ls -l >lsdir.txt
    ps -ef >psproc.txt
    grep main *.c > gmain.txt

    将文件内容输出到屏幕:
     

more<hello.c

    上面我们通过”<“操作符定向输入,”>"操作符定向输出,在Linux中还提供了一些文件描述符辅助我们定向输入输出,如:
        0 标准输入
        1 标准输出
        2 标准出错
    举例:
        rm  lsdir.txt psproc.txt gmain.txt >rmsus.txt  2>rmerr.txt
    使用rm命令删除文件时,如果文件不存在就会保错,上面的命令我们将错误信息输出到rmerr.txt这个文件中。
         cc -o say say.c >clog.txt  2>&1
    上面的命令将标准输出和错误信息都输出到clog.txt这个文件中
        ps -ef >> file.txt
     上面的命令将输出信息添加到file.txt文件末尾

    值得注意的是,在Linux中还有一个空设备/dev/null,任何写到该设备的内容都会被丢弃,如果我们不希望我们的结果有输出,即可将输出定向到这个设备,如:
        cc -o say say.c >/dev/null  2>&1

 

2. 管道技术
    在linux中可以利用管道技术来连接不同的进程,例如:
        ls -l|grep -v '^d' 列出当前目录下所有非目录文件的详细信息
        ps -ef|grep '^root'  列出系统中所有root进程的详细信息
        ps|sort|more 列出排序后的用户进程
        ps -ef|sort >proc.txt  将当前所有进程排序后输出到文件proc.txt