Skip to content

Latest commit

 

History

History
184 lines (108 loc) · 6.53 KB

redirection.md

File metadata and controls

184 lines (108 loc) · 6.53 KB

重定向

目录

  • 有以下命令需要掌握

    • cat - 连接文件

    • sort - 排序文本行

    • uniq - 报道或省略重复行

    • grep - 打印匹配行

    • wc - 打印文件中换行符,字,和字节个数

    • head - 输出文件第一部分

    • tail - 输出文件最后一部分

    • tee - 从标准输入读取数据,并同时写到标准输出和文件

  • 概念

    • 默认的输入流就是键盘。

    • 默认的输出流就是屏幕,重定向就是要更改这个流的走向。

    • 输入流输出流等前缀都是std,例如输出流使用stdout输入stdin错误stderr

    • io重定向到意义:I/O 重定向允许我们可以更改输出走向和输入来向。一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以改变输入输出方向

    • >重定向的符号

    ls ./code > ./app.md
    # 这样的结果就是说 ls命令的结果不显示到屏幕,流入到了app.md中。
    less app.md
    # 可以很清楚的看到我们ls的本来是显示到桌面的东西全部都到了app.md中
    # 如果没有app.md系统会自动创建一个app.md文件。
    • 当我们使用 “>” 重定向符来重定向输出结果时,目标文件总是从开头被重写,所以你如果使用两次重定向的话得到的结果是最后一次的输出结果(如果遇到错误的话那么这个文件就是零了)

    小技巧:我们想删除一个文件里面的内容或者是我们想创立一个空白的文件使用哪种方式呢?

    答案就是:
    > someFile这样的话因为你重定向前面的文件是空的,当它重写的时候先把原文件东西删除然后再写入,不过因为发生了错误,而且并没有写入标准错误流,所以导致文件是空白的。

    • 但是我们总是想知道怎么不被删除呢?其实我们使用:
    ls ./code >> app.md
    
    # 这种方式的话就不会把原来的东西删除。
    • 重定向定向标准错误流。2>输入流0>输出流1>
    ls /1 2> app.text
    
    # 我们的/1 是不存在的,所以这样的话我们可以将这个错误流的信息送到这个app.text文件中去。
    • 把标准的输出流和错误流放到一个文件中&>就OK了,这种情况相对较少。

    • 位存储桶也叫unix垃圾桶意思就是系统垃圾桶,就是让你把很多信息都导入到这个文件中,然后就消失了,这就是它的功能。

    ls /1 2> /dev/null
    
    # 这个错误的信息就消失了不会在任何的地方出现了因为它被重定向到了系统的位储存桶。
  • cat

    • cat的含义:

    cat less more这三个命令用法相近,cat跟其余两个不同的是它可以合并文件,

    • 小技巧:cat总是从标准输入流得到东西到标准输出流(默认是这样)所以:
    cat > app.text
    
    anthor :dfdfdf
    
    # 在app.text中就会出现 anthor :dfdfdf
    • 但是less和more就无法使用上述的技巧,因为它们默认并不是从输入流复制文件到输出流,它们只是打开而已,所以说cat的实质跟less和more并不是一样的。要记得,我们可以以后只使用cat也是可以的。cat更加灵活好用。不过就是我们要记得实质就好。

    那么我们从cat可以引出来标准输入流定向了

  • <

    • 标准输入流

    • 使用方法:

    cat < app.text
    #这样的话cat的输入流就从键盘到了app.text了当然加上序号cat 0<也是可以的。
    • 小技巧: 从某个文件复制到另一个文件我们使用cat也是可以实现的,不使用cp也可以 也就是说cp app.text another.text === cat < app.text > another.text
  • |

    • 含义:|的含义就是管道,如果你学过nodejs就应该知道,我们可以从一个输出流流到另一个输入流,当然这个理念是unix提出的。也就是从一个管道可以衔接到另一个管道就是这个意思。
    ls /bin | less
    
    • 这样的话ls的输出流就被重定向给了less的输入流了。当然我们也可以说被管道给了less

    • 其实说白了管道|重定位都是流的一种表现,该传递给标准的默认的我们更改了这样就是�这两种方式

      • 重定位

      • 管道

    • 我们甚至可以说管道真的是一种特殊的重定位,它也是不把信息给默认,但是更加规范,更加有特点,就像数组一样,是一组特定的类型的组合的数据,像是正规军的feel。

  • 过滤器

    • 定义:使用一定到规则去定义的方法来进行一些操作的方法就是过滤器

    • 举例子:ls /usr/bin /bin | sort | less

    • ps:可以看出|就是很有规则感,很有规范的感觉。

  • uniq

    • 含义:uniq 从标准输入或单个文件名参数接受数据有序列表,默认情况下,从数据列表中删除任何重复行。

    • 注意这个含义是有序列表所以经常在sort后面使用

    • man uniq 解释

  • wc

    • 含义:就是统计有多少行多少字多少字节的。

    • wc -l只输出行数。

  • sort

    • 含义:排序

    • 默认的话就是按照Ascii的顺序来排序。

  • grep

    • 强大的搜索工具用来找到匹配文本。

    • 用法:

      • grep 匹配模式 文件

      • 输出流| grep 匹配模式

    grep json a.json
    
    或者是 | grep 模式 | less
    
    反正要有输入流和输出流

    grep是查找匹配条件的行,find是搜索匹配条件的文件

    • 举例:-i忽略大小写,-v 只打印不匹配的行。
  • head && tail

    - 含义:默认是打印前十行或者是后十行当然你也可以使用`head -n 3`来指定行数(n其实就是number的意思)
    
    - 当然这两者也是管道中的成员。
    
    - **使用”-f”选项**,tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即 出现在屏幕上。这会一直继续下去直到你输入 `Ctrl-c`
    
  • tee

    - 含义:就是从输入端复制文件到输出端
    
    - 这个东西最常用的地方就是在通道里中间串联这个tee但是tee对这个管道并没有影响,然后它就像钩子一样勾取点东西然后检验一下然后正常对轨迹并没有收到影响。
    
    - `ls /bin | tee app.text | grep zip`这样tee就能截取某段的信息了。
    

目录