美文网首页
Linux TLCL笔记

Linux TLCL笔记

作者: cccshuang | 来源:发表于2018-05-11 11:26 被阅读0次

    第七章:重定向

    cat - 连接文件
    sort - 排序文本行
    uniq - 报道或省略重复行
    grep- 打印匹配行
    wc - 打印文件中换行符,字,和字节个数
    head - 输出文件第一部分
    tail - 输出文件最后一部分
    tee - 从标准输入读取数据,并同时写到标准输出和文件

    标准输出重定向

    使用 “>” 重定向符后接文件名将标准输出重定向到除屏幕以外的另一个文件。
    ls -l /usr/bin > ls-output.txt 创建了一个长长的目录/usr/bin 列表,并且输送程序运行结果到文件 ls-output.txt 中。
    使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写。 如果我们 ls 命令没有产生运行结果,只有错误信息,重定向操作开始重写文件,然后 由于错误而停止,导致文件内容清空。事实上,如果我们需要清空一个文件内容(或者创建一个 新的空文件),可以使用这样的技巧:> ls-output.txt
    把重定向结果追加到文件内容后面,而不是从开头重写文件,可以使用”>>“重定向符。

    标准错误重定向

    标准错误重定向没有专用的重定向操作符。为了重定向标准错误,我们必须参考其文件描述符。 一个程序可以在几个编号的文件流中的任一个上产生输出。虽然我们已经将这些文件流的前三个称作标准输入、输出和错误,shell 内部分别将其称为文件描述符0、1和2。shell 使用文件描述符提供 了一种表示法来重定向文件。因为标准错误和文件描述符2一样,我们用这种 表示法来重定向标准错误:ls -l /bin/usr 2> ls-error.txt

    重定向标准输出和错误到同一个文件

    ls -l /bin/usr > ls-output.txt 2>&1 使用这种方法,我们完成两个重定向。首先重定向标准输出到文件 ls-output.txt,然后 重定向文件描述符2(标准错误)到文件描述符1(标准输出)使用表示法2>&1。注意重定向的顺序安排非常重要。
    第二种方法ls -l /bin/usr &> ls-output.txt 使用单单一个表示法 &> 来重定向标准输出和错误到文件 ls-output.txt。

    处理不需要的输出

    我们不想要一个命令的输出结果,只想把它们扔掉。这种情况 尤其适用于错误和状态信息。系统通过重定向输出结果到一个叫做”/dev/null”的特殊文件, 为我们提供了解决问题的方法。这个文件是系统设备,叫做位存储桶(bit bucket),它可以 接受输入,并且对输入不做任何处理。为了隐瞒命令错误信息,我们这样做:
    ls -l /bin/usr 2> /dev/null

    标准输入重定向

    cat - 连接文件,可以使用 cat 来显示 文件而没有分页。cat 经常被用来显示简短的文本文件。如cat ls-output.txt
    cat 可以接受不只一个文件作为参数,所以它也可以用来把文件连接在一起。比方说我们下载了一个大型文件,这个文件被分离成多个部分(USENET 中的多媒体文件经常以这种方式分离), 我们想把它们连起来。如果文件命名为:
    movie.mpeg.001 movie.mpeg.002 … movie.mpeg.099
    我们能用这个命令把它们连接起来:cat movie.mpeg.0* > movie.mpeg
    如果 cat 没有给出任何参数,它会从标准输入读入数据。
    cat
    输入后,然后按下Ctrl-d,来告诉 cat,在标准输入中, 它已经到达文件末尾(EOF)。由于没有文件名参数,cat 复制标准输入到标准输出,所以我们看到文本行重复出现。
    可以使用这种行为来创建简短的文本文件。如cat > lazy_dog.txt输入命令,其后输入要放入文件中的文本。记住,最后输入 Ctrl-d。
    重定向标准输入‘cat < lazy_dog.txt`
    使用“<”重定向操作符,我们把标准输入源从键盘改到文件 lazy_dog.tx。我们看到结果 和传递单个文件名作为参数的执行结果一样。把这和传递一个文件名参数作比较,不是特别有意义, 但它是用来说明把一个文件作为标准输入源。

    管道

    使用管道操作符”|”(竖杠),一个命令的标准输出可以通过管道送至另一个命令的标准输入。
    ls -l /usr/bin | less

    过滤器

    把几个命令放在一起组成一个管道线。 通常,以这种方式使用的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后 输出它。
    ls /bin /usr/bin | sort | less
    指定了两个目录(/bin 和/usr/bin),ls 命令的输出结果由有序列表组成, 各自针对一个目录。通过在管道线中包含 sort,我们改变输出数据,从而产生一个 有序列表。

    • uniq - 报道或忽略重复行
      uniq 命令经常和 sort 命令结合在一起使用,默认情况下,从数据列表中删除任何重复行。
      ls /bin /usr/bin | sort | uniq | less
      如果我们想看到 重复的数据列表,让 uniq 命令带上”-d”选项。
      ls /bin /usr/bin | sort | uniq -d | less
    • wc - 打印行数、字数和字节数
      wc ls-output.txt wc 打印出来三个数字:包含在文件 ls-output.txt 中的行数,单词数和字节数。
      ”-l”选项限制命令输出只能 报道行数。添加 wc 到管道线来统计数据,是个很便利的方法。查看我们的有序列表中程序个数, 我们可以这样做:
      ls /bin /usr/bin | sort | uniq | wc -l
    • grep - 打印匹配行
      grep pattern [file...]
      例如,我们想在我们的程序列表中,找到文件名中包含单词”zip”的所有文件。
      ls /bin /usr/bin | sort | uniq | grep zip
      grep 有一些方便的选项:”-i”使得 grep 在执行搜索时忽略大小写(通常,搜索是大小写敏感的),”-v”选项会告诉 grep 只打印不匹配的行。
    • head / tail - 打印文件开头部分/结尾部分
      head 命令打印文件的前十行,而 tail 命令打印文件的后十行。默认情况下,两个命令 都打印十行文本,但是可以通过”-n”选项来调整命令打印的行数。
      head -n 5 ls-output.txt
      ls /usr/bin | tail -n 5
      tail 使用”-f”选项,当新的内容添加到文件后,它们会立即出现在屏幕上,允许你实时地浏览文件。当观察日志文件的进展时,这很有用。
    • tee - 从 Stdin 读取数据,并同时输出到 Stdout 和文件
      tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个或多个文件。
      ls /usr/bin | tee ls.txt | grep zip
      当在某个中间处理 阶段来捕捉一个管道线的内容时,这很有帮助。这里,我们重复执行一个先前的例子, 这次包含 tee 命令,在 grep 过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt。

    第八章:从 shell 眼中看世界

    相关文章

      网友评论

          本文标题:Linux TLCL笔记

          本文链接:https://www.haomeiwen.com/subject/hjaxdftx.html