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 2005 分布式架构 对等事务复制 .
    兼容级别
    Delphi中的INI文件编程
    金正昆谈礼仪之西餐礼仪zt
    WOW UI定制基本资料初学者指南 被一个疯狂迷恋魔兽的兄弟逼死了,不得以,沦落的作些小脚本,失败呀
    相爱与相知
    情欲信,而词欲巧
    周日去看F1:)
    当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
  • 原文地址:https://www.cnblogs.com/songbiao/p/12585890.html
Copyright © 2011-2022 走看看