linux重定向、管道

1、这条命令是什么意思?cat file1 file2 | grep "name" | tee file3 file4 file5 | wc -l
        该命令表示 将 file1 file2 中的包含 name 的行重定向输出。使用 tee 命令表示 将该输出有两个去向。一个是定向到文件 file3,file4,flie5.(三个文件内容相同),另一个方向是将输出作为 命令 wc -l 的标准输入,此条命令的标准输出是显示器。    它相当于下面几条命令的组合:
        1、cat file1 file2 >temp1 temp2
        2、grep "name" temp1 temp2 >temp3
        3、cat temp3 > file3 file4 file5
        4、wc -l temp3
   
    2、写一条命令将文件 file1 复制到文件 file.bak,用 mail 命令将排好序的 file1 文件发送到 abcd@163.com ,如果出错,将错误信息定向到 file1.error
        cat file1 | tee file1.bak | sort | mail abcd@163.com > file1.error

    3、什么是标准文件?
        Linux 系统中为每个命令都要打开三个文件,标准输入、标准输出、标准出错输出。(stdin、stdout、stderr)。

    4、什么是 Linux的文件描述符?标准文件的文件描述符是什么?怎么利用文件描述符来进行重定向?
        Linux 的特殊机制。
        cat file1 执行这条命令时,系统新建一个进程。该进程会建立一个文件描述符表。表里包含着所需要的文件描述符。接着读入 cat,为这个命令分配三个文件。每个文件都有自己的文件描述符,为 0、1、2。接着是 file1,系统为它分配的文件描述符是 4。通过这第四个文件描述符,关联到系统的文件表-->系统的 inode 表-->(文件的各种信息)读取 它在磁盘中的位置-->读入文件
        所以,标准文件的文件描述符分别是 0、1、2。重定向命令为:cat 0<file_in 1>file_out 2>file.err。表示从文件file_in 读入,输出到file_out,出错的话输出到 file_err。

    5、什么是管道?
        管道是 进程间通信的一种机制,直接在内存中操作。cat file1 | file2 表示将 file1 作为输入,同时将输出定向到 file2 文件。省去了中间步骤:cat file1 >temp ; cat temp>file2。

    6、tee 是什么命令?
        tee 可以将管道中的输出进行分流。参见第一条。
   
    7、下面两条命令有什么区别?
        1: cat 1>letter 2>save 0<memo
        2: cat 0<memo 1>letter 2>save
        命令 1 表示 标准输入到 letter 出错输入到 save memo作为标准输入。这条语句是错误的。因为要将标准输入放在最左边

    8、    cat 1>letter 0<memo 2>&1 里面的 "2>&1" 是什么意思?
        表示将 2 作为 1 的备份,使 错误输出也输出到 标准输出。
        例:cat file1 > file1.bak 2>&1 ,表示如果有错误的话,也会输出到 1 上,即输出到 file1.bak里面。

    9、考虑下面的 Bourne shell 命令
            (1) cat memo letter 2>communication 1>&2
            (2) cat memo letter 1>&2 2>communication
        在下面的情况中,输出和错误信息分别送到何处?
            (1) 两个文件 ( memo和 letter) 在当前目录下都存在。
            (2) 两个文件中的一个在当前目录下不存在。

        分析:在第一种条件下,第一条命令:两个文件的内容会全部输入到 文件 communication 里面。它相当于:
                    cat memo letter > temp
                    cat temp 2>communication
                    cat temp >temp2
                    cat temp2>communication
                    也就是有两个错误输出。先后顺序不同而已。
                 在第一种条件下,第二条命令:首先在控制台输出两个文件的内容。标准输入成了标准出错的一个备份,先在控制台输出。接着标准出错输出到 文件 communication 里面。相当于下面几条命令的组合:
                        cat memo letter > temp1
                        cat temp1 > 2(stderr)
                        cat 2
                        cat 2>communication 将出错文件再次定向到 communication

                 在第二种条件下,第一条命令:首先将标准出错输入到 communication ,然后将 标准输出 作为 标准出错输出的备份,再次输出 communication里面。因为前面已经定义了标准错误的输出目的地。
       
                  在第二种条件下,第二条命令:先将“标准输出”作为标准出错的备份并输出。因为此时错误输出并未指定目的地。先输出“标准输出”。接着,再次定向错误输出到文件 communication。所以应该显示的是 :控制台 显示一个文件的内容,文件 communication 显示出错信息。

                第二种条件还要分两种:memo存在而 letter不存在;memo 不存在而 letter 存在。大家自己分析吧!

    10、通过使用输出重定向,将问候信息“Hello Friends”送到朋友的终端上?

    11、怎么样显示出第一个登录系统的用户的名字?

    12、用一条命令显示当前目录下的内容,每行5个文件。
posted @ 2009-03-18 11:11  红衣女剑  阅读(2532)  评论(0编辑  收藏  举报