zoukankan      html  css  js  c++  java
  • linux 之管道命令与重定向

    一、Linux重定向

    重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令。这部分涉及到的比较多的命令主要有:

    涉及到的比较多的命令主要有:

    • cat:连接文件
    • sort:排序文本行
    • uniq:忽略或者报告重复行
    • wc:统计文件的行数、词数、字节数
    • grep:打印匹配制定模式的行
    • head:输出文件的头部
    • tail:输出文件的尾部
    • tee:从标准输入读,并往标准输出或者文件写

    使用shell中默认使用文件描述符012分别代表标准输入、标准输出、标准错误

    1.  >与>>的含义

        使用>可以将本来出现在屏幕的标准输出信息重定向到一个文件中。

        用>>可以在实现重定向时不覆盖原有内容,而是在文件末尾追加内容。

        两个命令都是如果文件不存在则创建文件

    2.屏蔽不想看到的信息

    Linux中有一个特殊的文件/dev/null,这个文件叫做比特桶(bit bucket),可以接受输入信息但是什么都不做。因此要抑制命令的输出信息,只需要如下操作:

      ls /usr/ > /dev/null    将ls /usr/的标准输出重定向到比特桶

    3.举栗

    输出重定向   
    类型 符号 功能 举栗
    标准输出重定向

    命令>文件或

    命令>>文件

    以覆盖或追加的方式,把命令的正确输出内容输出到指定的文件中,

    命令的错误输出打印到终端中

    ls -l /usr/tmp >dir  重定向覆盖

    ls -l /usr/tmp >>dir  重定向追加

    标准错误输出重定向

    错误命令 2>文件或

    错误命令 2>>文件

    以覆盖或追加的方式,把命令的错误输出内容输出到指定的文件中,

    命令的正确输出打印到终端中

    ls /usr/tmp 2>err.file 错误输出到err.file
    标准输出与标准错误输出重定向

    命令 >文件 2>&1或

    命令 >>文件 2>&1

    以覆盖或追加的方式,把命令的正确输出或错误输出内容输出到指定的文件中。

    ls /usr/tmp >output.file 2>&1  错误和输出重定向到output

    命令 &>文件 或

    命令 &>>文件

    以覆盖或追加的方式,把命令的正确输出或错误输出内容输出到指定的文件中。

    ls /usr/tmp &>output.file  错误和输出重定向到output
    命令 >>文件1 2>文件2

    以追加的方式,把命令的正确输出内容输出到文件1中,以覆盖的方式,把命令的错误输出内容输出到文件2。

     

    其他例子:

           ls /usr/tmp 2>&1 >output.file  输出重定向到output,错误输出到屏幕

      wc </etc/passwd  输入重定向,<其实是0<的简写

           echo "" > test.log  或>test.log,快速清空文件

    二、管道

    管道是一种两个进程间进行单向通信的机制,它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin),如果要进行双工通信,需要建立两个管道。

    因为管道传递数据的单向性,管道又称为半双工管道。

    管道命令的特性:

    1、管道命令使用|作为界定符号

    2、管道命令只能处理前一个命令的standard output,对于standard error output会予以忽略。

    3、管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行,比如less,more,head,tail...,而ls,cp,mv不会接受standard input的命令,所以他们就不是管道命令了。

    举栗:

    1.uniq与sort命令:uniq命令排除重复的行,sort命令将文本行排序。

      [root@test]#cat ls.txt 

      aaaaaaaaaaaaaaaaaaaaaaaa

      bbbbbbbbbbbbbbbbbbbbbbbb

      aaaaaaaaaaaaaaaaaaaaaaaa  

      [root@test]#cat ls.txt |sort|uniq

      aaaaaaaaaaaaaaaaaaaaaaaa

      bbbbbbbbbbbbbbbbbbbbbbbb

        我们还可以对uniq命令加上-d选项来查看重复的行,如下:

      [root@test]#cat ls |sort|uniq -d

      aaaaaaaaaaaaaaaaaaaaaaaa

    2.  wc命令:统计文本的行数、单词书和字节数

      [root@test]#ls /bin /usr/bin/ | sort | uniq | wc

      使用wc -l参数统计代码的行数:

      [root@test]#find cn/ -name "*.php" |xargs cat|wc -l

       上面这个例子统计了cn目录下所有php文件的行数之和。

    3.grep命令:用来查找匹配的模式,并且打印包含该模式的行:

      [root@test]#ls /bin /usr/bin/ | sort | uniq | grep zip

        在/bin和/usr/bin目录下找出名字带有zip的程序,并且打印这些程序的名字。

    4.head和tail命令:head查看文件或者文本的前面部分,tail查看文件或者文本的末尾部分。二者都可以接收-n选项,表示显示的行数。

      [root@test]#ls /bin/ | head -n 5

  • 相关阅读:
    spring boot的@RequestParam和@RequestBody的区别
    SpringBoot 中常用注解@PathVaribale/@RequestParam/@GetMapping介绍
    Required String parameter is not present
    Spring Boot 日志记录 SLF4J
    400错误,Required String parameter 'paramter' is not present
    初学 Spring boot 报错 Whitelabel Error Page 404
    Powershell获取WMI设备清单
    Powershell快速入门
    perl的Sys::Syslog模块(openlog,syslog,closelog函数,setlogsock)-自定义日志
    制作Windows10政府版的小白教程
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12068909.html
Copyright © 2011-2022 走看看