zoukankan      html  css  js  c++  java
  • linux系统管理学习笔记3-重定向和管道

    linux系统管理学习笔记3-重定向和管道

    重定向

    本讲介绍linux中输入输出重定向。

    unix 发明人总结的的设计准则是,一次只做一件事,并且做到最好。(Do one thing, and do it well)

    一个好的程序,应该满足:

    1. 一次只做一件事,并做到最好。
    2. 能够与其他程序协同工作。
    3. 能够处理文本流。

    为了让Linux 程序有效地协同工作,就需要对命令输入输出重定向。

    用户与Linux 的交互,通过shell实现。

    Bash 有三种标准输入输出流,并且分别有各自的文件标识号

    1. 标准输入流 stdin,一般指终端键盘,文件描述符为 0
    2. 标准输出流 stdout,一般指终端屏幕,或图形界面上的终端窗口,文件描述符为 1
    3. 错误输出流 stderr,一般也是指终端屏幕,或图形界面上的终端窗口,文件描述符为 2

    简而言之:

    • 输出重定向就是,将默认的stdout 或者stderr 转而将命令输出到某个文件中。

    • 输入重定向就是,将默认的stdin 转而使用来自某个文件进行输入。

    Linux shell中输出重定向的实现命令

    • Linux 中使用右箭头符,或双右箭头符来重定向标准输出
    #标准输出流
    ls /tmp/example/
    # 错误输出流
    ls /tmp/example/file04
    
    # 输出重定向, 1表示被重定向的是标准输出,>后为跟的要输出为的文件名称,若stdout.txt文件不存在,则被创建。若stdout.txt已存在,则覆盖原文件。若将>改为>>,则是将输出内容追加至文件内容后面。
    ls -l /tmp/example/ 1> ./stdout.txt
    ls -l /tmp/example/ 1>> ./stdout.txt
    # 重定向错误输出流,将文件标识符1改为2即可
    ls -l /tmp/example/file04 2> ./stderr.txt
    ls -l /tmp/example/file04 2>> ./stderr.txt
    
    # 同时重定向命令的标准输出流和错误输出流为不同文件。使用&> 将1 2 输出重定向为一个文件。
    ls -l /tmp/example/file01 /tmp/example/file04 1>> ./stdout.txt 2>> ./stderr.txt
    ls -l /tmp/example/file01 /tmp/example/file04 &> ./stdouterr.txt
    
    

    结合echo 命令(将内容回显在终端屏幕上)和输出重定向,可以实现创建指定内容的文本文件,举例

    # echo命令,-e选项表示输出转义字符
    echo -e "1 apple
    2 pear
    3 banana"
    
    echo -e "1 apple
    2 pear
    3 banana" >fruit.txt
    cat ./fruit.txt
    
    

    利用输出重定向命令,来实现忽略命令的错误输出(即屏幕不显示命令的错误输出)。即错误输出到 /dev/null 文件中,/dev/null非常特殊,可以视为一个“系统的黑洞”,写入到这个文件中的内容都被丢弃了。举例:

    ls -l /tmp/example/file01 /tmp/example/file04 2>>/dev/null
    

    Linux shell中输入重定向的实现命令

    • Linux 中使用左箭头符,或双左箭头符来重定向标准输入
    # 将标准输入重定向为外部的文件
    # 介绍替换命令 tr命令和输入重定向的联合使用
    # tr [准备要被替换的字符] [要替换成的字符]
    # 替换fruit.txt文件的空格为制表符
    tr ' ' '	' <./fruit.txt
    
    # 将外部文件输入重定向为标准输入
    # 介绍排序sort命令和输入重定向的联合使用
    # sort -k [关键字字段序号] [要排序的文本文件]
    sort -k2 <<EOF
    1 apple
    2 pear
    3 banana
    EOF
    
    #例子中的EOF 是界定符,可以自定义为其他字符(不过要注意结尾的界定符要顶格写,前后不能有任何字符或空格)。通过界定符,就将原本sort命令中需要的文本文件,重定向为标准输入。
    
    

    管道

    本讲介绍管道使用,管道就是一种特殊的输入输出重定向,即将一个命令的标准输出作为下一个命令的标准输入。

    管道操作符是 竖线 | , 构造管道只需要使用竖线将命令连起来即可。

    需要注意的是,管道操作符右边的命令必须要能够接受标准输入流才可以。能够接收标准输入流的命令并不多,一般为文本操作命令,常用的有 grep cut head tail less more wc tr sort

    接下来介绍grep cut wc命令

    举例

    # 对命令的输出进行分页查看,可以逐行逐页地查看命令输出
    ls -al /etc |less
    
    # grep 是文本查找命令,兼容正则表达式
    # grep [待查找文本] [待查找文件]
    # 查找ls输出中带有ssh字样的行
    ls -al /etc |grep 'ssh'
    
    # 文本提取和统计, wc	cut
    # cut为文本切割命令, -c选项后紧跟的数字表示切割的字符列序号,可以切割多列,数字之间用逗号隔开
    cat ~/install.log| cut -c1,2 
    # cut -d 和-f 选项,实现按指定分隔符分开的文本来切割文本。-d后紧跟分隔符,-f后紧跟的数字表示切割的字段序列号。以下命令表示,切割cat输出内容的第一个字段,字段是用冒号隔开的。
    cat /etc/passwd | cut -f1 -d":"
    
    # wc 命令,统计文本文件或者标准输出中的文本行数、单词数和字节数
    # wc -l 选项表示仅统计文本行数
    # 举例,统计当前用户家目录下所有目录文件的数目 (切割每一行中的第一字符列,d 表示文件类型为目录文件)
    ls -al ~ | cut -c1 | grep "d" | wc -l
    

    提醒,管道不会传递错误输出。如果不希望看到管道中的错误输出,可以将其中的某一步重定向到dev/null文件中。

    ls -al /bin/sbni 2>/dev/null | wc -l
    
  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/songbiao/p/12585890.html
Copyright © 2011-2022 走看看