zoukankan      html  css  js  c++  java
  • 06.Linux IO重定向

    08.Linux IO重定向

    1. 重定向基础概述

    1.1 什么是重定向

    将原本要输出到屏幕中的数据信息,重新定向到某个指
    定的文件中,或者定向到黑洞(/dev/null)中。

    1.2 为什么需要重定向

    1、当程序执行输出的信息比较多时,需要保存下来
    在进行分页查看;
    2、后台执行的程序一般都会有输出,不希望它的输
    出干扰到屏幕;
    3、定时执行的备份任务,希望将备份的结果保留下
    来时;
    4、当重复创建用户,会提示一些错误信息,可以直
    接将信息丢弃;
    5、希望将错误日志与正确日志,分别输出保存到不
    同文件时;

    1.3 标准输入与输出

    • 当进程操作一个文件时:

      • 1.首先进程是无法直接访问硬件,需要借助内核来
        访问文件;
      • 2.而内核 kernel 需要利用文件描述符 (file
        descriptor) 来访问文件。文件描述符百度百科
    • 总结:进程--通过-->文件描述符(非负整数)--访问-->文件名称;进程使用文件描述符来管理打开的文件
      对应关系;

    • 第一步:运行 tail -f /etc/passwd

    • 第二步:通过文件描述符3 --> /etc/passwd --> inode
      --> block

    • 第三步:正确输出---> 默认情况下通过文件描述 1 ---
      当前终端 1>(改变输出的位置,文件,黑洞)

    • 第四步:错误输出--> 默认情况下通过文件描述2 --->
      当前终端 2>

    • 通常程序访问一个文件至少会打开三个标准文件,分
      别是标准输入、标准输出、错误输出。

    • 进程将从标准输入中得到数据,将正常输出打印至屏
      幕终端,将错误的输出信息也打印至屏幕终端。

    名称 文件描述符 作用
    标准输入(STDIN) 0 默认是键盘,也可以是文件或其他命令的输出
    标准输出(STDOUT) 1 默认输出到屏幕
    错误输出(STDERR) 2 默认输出到屏幕
    文件名称(filename) 3+

    2. 输出重定向案例

    • 输出重定向.改变输出内容的位置.输出输出重定向有如
      下几种方式,如表格所示

      类型 操作符 用途
      标准覆盖输出重定向 1> 将程序输出的正确结果输出到指定的文件中去,会覆盖原文件的内容
      标准追加输出重定向 1>> 将程序输出的正确结果以追加的方式输出到指定文件.不会覆盖原有文件
      错误覆盖输出重定向 2> 将程序的错误结果输出到执行的文件中.会覆盖文件原有内容
      错误追加输出重定向 2>> 将程序输出的错误结果以追加的方式输出到指定文件.不会覆盖原有文件

    2.1 案例1-标准输出重定向

    • 标准输出重定向示例
      • 1.如果文件不存在则创建
      • 2.如果文件存在则清空内容
    [root@oldxu ~]# > edu.txt
    [root@oldxu ~]# ifconfig eth0 > edu.txt
    

    2.2 案例2-标准追加输出重定向

    • 标准追加输出重定向示例
      • 1.如果文件不存在则创建
      • 2.如果文件存在则在文件尾部添加内容
    [root@oldxu ~]# echo "Hello Students" >> if
    

    2.3 案例3-错误输出重定向

    • 标准错误输出重定向
      • 1.正确输出及错误输出至相同文件
      • 2.正确输出及错误输出至不同文件
    [xuliangwei@oldxu ~]$ find /etc -name
    "*.conf" 1>ok 2>ok
    [xuliangwei@oldxu ~]$ find /etc -name
    "*.conf" 1>ok 2>err
    

    2.4 案例4-混合和输出重定向

    • 混合输出重定向
      • 1.将正确输出和错误输出混合至同一文件
      • 2.将两个文件内容组合为一个文件
    [xuliangwei@oldxu ~]$ find /etc -name
    "*.conf" &>ab
    [xuliangwei@oldxu ~]$ cat a b > c
    
    • 正确和错误都输入到相同位置

    [root@oldxu ~]# ls /root /error >ab 2>&1
    

    2.5 案例5-将内容输出至黑洞

    • 将内容输出至黑洞设备/dev/null

      [root@oldxu ~]# ls /root /error >ab
      2>/dev/null
      [root@oldxu ~]# ls /root /error >ab
      &>/dev/null
      

    3. 输入重定向案例

    • 输入重定向:指的是"重新指定设备"来"代替键盘"做为新的输入设备;

    3.1 输入重定向示例

    1.通过输入重定向读取文件内容;

    [root@oldxu ~]# cat < /etc/hosts
    

    2.通过输入重定向读入多行内容

    [root@dns-master ~]# cat <<EOF
    小明 99
    小红 100
    小王 80
    EOF   # 只要不出现EOF则可以一直输入
    

    3.通过输入重定向将数据导入至数据库中;

    [root@oldxu ~]# mysql -uroot -poldxu.com </opt/wordpress.sql
    

    3.2 脚本输入重定向

    • 使用输入重定向打印安装服务的菜单导航栏
    [root@dns-master ~]# cat install.sh
    #!/usr/bin/bash
    cat <<-EOF
    ---------主菜单----------
    |  1) 安装nginx     |
    |  2) 安装php      |
    |  3) 退出       |
    --------------------------
    EOF
    read -p "请选择你要安装的软件编号 [ 1 | 2 | 3
    ]: "
    

    3.3 输入重定向场景

    • 1.恢复数据时;
    • 2.脚本打印菜单时会用到
    • 3.cat写入文件时;vim
    • 输出重定向:
      • 正确输出:
        • 1> : 覆盖(先清空,后写入)
        • 1>> : 直接写入文件的尾部(末尾)
      • 错误输出 :
        • 2> : 覆盖(先清空,后写入)
        • 2>> : 直接写入文件尾部(末尾)
      • 混合输出
        • &> /dev/null
        • &>> /dev/null
        • 1>/dev/null 2>&1

    4.进程管道技术

    4.1 什么是管道

    • 管道操作符" | ",主要用来连接左右两个命令,将左侧的命令[标准输出],交给右侧命令的[标准输入]
    • 注意事项:无法传递标准错误输出至后者的命令
    • 管道命令符能让大家进一步掌握命令之间的搭配使用方法.进一步提高命令输出值的处理效率

    4.2 管道流程示意图

    • 格式: cmd1 | cmd2 [... | cmdn ]

    4.3 管道使用案例

    4.3.1 案例1

    • 案例1.将/etc/passwd中的用户按UID大小排序
    [root@oldxu ~]# sort -t":" -k3 -n
    /etc/passwd
    [root@oldxu ~]# sort -t":" -k3 -n
    /etc/passwd -r
    [root@oldxu ~]# sort -t":" -k3 -n
    /etc/passwd |head
    

    4.3.2 案例2

    • 案例2 : 统计当前/etc/passwd 中用户使用的shell 类型
    # 思路:取出第七列(shell) | 排序(把相同归类)| 去重
    [root@oldxu ~]# awk -F: '{print $7}'
    /etc/passwd
    [root@oldxu ~]# awk -F: '{print $7}'
    /etc/passwd |sort
    [root@oldxu ~]# awk -F: '{print $7}'
    /etc/passwd |sort |uniq
    [root@oldxu ~]# awk -F: '{print $7}'
    /etc/passwd |sort |uniq -c
    

    4.3.3 案例3

    • 案例3:打印并输出当前所有主机所有网卡的 IP 地址
    [root@oldxu ~]# ip addr |grep 'inet ' |awk
    '{print $2}' |awk -F"/" '{print $1}'
    127.0.0.1
    10.0.0.100
    

    4.4 tee与xargs

    4.4.1 管道中使用tee

    #选项: -a追加
    [root@web ~]# ip addr |grep 'inet ' |tee
    ip.txt |awk -F"/" '{print $1}' |awk '{print
    $2}'
    127.0.0.1
    10.0.0.100
    [root@web ~]# cat ip.txt
    inet 127.0.0.1/8 scope host lo
    inet 10.0.0.100/24 brd 192.168.69.255 scope
    global ens32
    

    4.4.2 管道中使用xargs

    • xargs 参数传递,主要让一些不支持管道的命令可以
      使用管道技术
    # which cat | xargs ls -l
    # ls | xargs rm -fv
    

    本文来自博客园,作者:GaoBeier,转载请注明原文链接:https://www.cnblogs.com/gao0722/p/15026546.html

  • 相关阅读:
    Sql Server 2008卸载后再次安装一直报错
    listbox 报错 Cannot have multiple items selected when the SelectionMode is Single.
    Sql Server 2008修改Sa密码
    学习正则表达式
    Sql Server 查询第30条数据到第40条记录数
    Sql Server 复制表
    Sql 常见面试题
    Sql Server 简单查询 异步服务器更新语句
    jQuery stop()用法以及案例展示
    CSS3打造不断旋转的CD封面
  • 原文地址:https://www.cnblogs.com/gao0722/p/15026546.html
Copyright © 2011-2022 走看看