zoukankan      html  css  js  c++  java
  • linux学习14 Linux运维高级系统应用-glob通配及IO重定向

    一、回顾

      1、bash基础特性:命令补全,路径补全,命令引用

      2、文件或目录的复制,移动及删除操作

      3、变量:变量类型

        存储格式,数据表示范围,参与运算

    二、bash的基础特性

      1、globbing:文件名通配(整体文件名匹配,而非部分)

        a、匹配模式:元字符

          *:匹配任意长度的任意字符

            pa*,*pa*

          ?:匹配任意单个字符,不管是什么必须得有一个

            pa?;   ??pa;  p?a;  p?a?;

          []:匹配指定范围内的任意单个字符

            有几种特殊格式:

              [a-z],[A-Z],[0-9],[a-z0-9],[abcxyz]

              pa[0-9][0-9],表示200-299之间的数字:2[0-9][0-9]

              [[:upper:]]:用来表示所有大写字母

              [[:lower:]]:所有小写字母

              [[:alpha:]]:所有字母

              [[:digit:]]:所有数字

              [[:alnum:]]:所有的字母和数字

              [[:space:]]:所有空白字符

              [[:punct:]]:匹配所有标点符号

          [^]:匹配指定范围外的任意单个字符

              [^[:upper:]]:匹配大写字母外的任意字符

              [^0-9]:匹配非0-9之外的字符

              [^[:alnum:]]:匹配所有的字母和数字之外的字符

        b、练习

          练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录

    [root@node3 ~]# ls -d /var/l?[[:lower:]]
    /var/lib  /var/log

          练习2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录

    [root@node3 ~]# ls -d /etc/[[:digit:]]*[^[:digit:]]
    /etc/3ab23y

          练习3:显示/etc目录下,以非字母开头,后面以一个字母及其他任意长度任意字符的文件或目录

    [root@node3 ~]# ls -d /etc/[^a-z][a-z]*
    /etc/3ab23y

          练习4:复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/magedu.com目录

    [root@node3 ~]# cp -r /etc/m*[^0-9] /tmp/magedu.com/

          练习5:复制/usr/share/man目录下,所有以man开头后跟一个数字结尾的文件或目录至/tmp/man目录下

    [root@node3 ~]# cp -r /usr/share/man/man[0-9] /tmp/man

          练习6:复制/etc目录下,所有以.com结尾且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下

    [root@node3 ~]# cp -r /etc/[mnrp]*.conf /tmp/conf.d/

    二、IO重定向及管道

      1、程序组成:指令+数据

        a、程序也有IO

        b、可用输入的设备:文件

          键盘设备,文件系统上的常规文件,网卡等

        c、可用于输出的设备:文件

          显示器,文件系统上的常规文件,网卡等

        d、程序的数据流有三种:

          输入的数据流: <-- 标准输入(stdin),默认情况下标准输入是键盘。

          输出的数据流:-->  标准输出(stdout),默认情况下标准输出是显示器。

          错误输出流:  -->    错误输出(stderr),默认情况下错误输出是显示器。

        e、fd:file descriptor,文件描述符

          标准输入:0

          标准输出:1

          错误输出:2

      2、IO重定向

        a、输出重定向:   >

    [root@node3 ~]# cat /etc/issue >> /tmp/issue.out && cat /tmp/issue.out
    S
    Kernel 
     on an m

          接下来我们可以试着装一波,查看/etc/issue内容并将其重定向至虚拟机终端,此时我们可以在虚拟机中看到对应的内容打印。要注意这个命令是很危险的。

    [root@node3 ~]# cat /etc/issue > /dev/tty1

          

           特性:覆盖输出重定向

        b、输出重定向: >>

          特性:追加输出

        c、set命令

          set -C :禁止覆盖输出重定向至已存在的文件,仅对当前shell有效

    [root@node3 ~]# set -C
    [root@node3 ~]# cat /etc/issue > /tmp/issue.out 
    -bash: /tmp/issue.out: cannot overwrite existing file
    [root@node3 ~]# cat /etc/issue > /tmp/issue.out1

          如果我们set -C了但是我们又想要重定向至已存在的文件时,我们可以使用 >|符号

    [root@node3 ~]# cat /etc/issue > /tmp/issue.out1
    -bash: /tmp/issue.out1: cannot overwrite existing file
    [root@node3 ~]# cat /etc/issue >| /tmp/issue.out1

          set +C:如果要关闭此特性,使用此命令即可

        d、错误输出流重定向:2> ,2>>

    [root@node3 ~]# cat /etc/issue1 2>/tmp/issue3.err
    [root@node3 ~]# cat /tmp/issue3.err
    cat: /etc/issue1: No such file or directory

        e、合并正常输出流和错误输出流,使用&即可,即 &>,&>>

        f、把正常输出定向至一个位置,把错误输出定向到正常输出上。  

    [root@node3 /]# cat /etc/init.d/functions >> /tmp/functions.out 2>&1

        g、合并正常输出流和错误输出流

          (1)、&>,&>>

          (2)、COMMAND > /path/to/somefile 2>&1

              COMMAND >> /path/to/somefile 2>&1

        h、输入重定向: <

        i、tr命令

          (1)、把输入的数据当中的字符,凡是在SET1定义范围内出现的,统统对位转换为set2出现的字符

          tr abc ABC:将abc转换成ABC

    [root@node3 /]# tr [a-z] [A-Z]
    how are you?
    HOW ARE YOU?
    what are you doing?
    WHAT ARE YOU DOING?

          接下来看输入重定向

    [root@node3 /]# tr [a-z] [A-Z] < /etc/issue
    S
    KERNEL R ON AN M

          (2)、删除所指明的字符集合中的字符

             

           (3)、注意,不会修改原文件

         j、<<     Here Document,即创建文档

          (1)、cat <<EOF

    [root@node3 /]# cat > /tmp/wohaoshuai << EOF
    > woahaoshuaia
    > wohaoshuai
    > EOF
    [root@node3 /]# cat /tmp/wohaoshuai 
    woahaoshuaia
    wohaoshuai

          (2)、cat > /PATH/TO/SOMEFILE <<EOF

        k、特殊设备: /dev/null

      3、管道:连接程序,实现将前一个命令的输出直接定向到后一个程序当作输入数据流

        a、将/etc/issue文件进行大小写转换

    [root@localhost ~]# cat /etc/issue |tr 'a-z' 'A-Z'
    S
    KERNEL R ON AN M

        b、对who命令进行操作

    [root@localhost ~]# who
    root     pts/0        2019-12-17 05:15 (192.168.10.1)
    [root@localhost ~]# who |head -2
    root     pts/0        2019-12-17 05:15 (192.168.10.1)
    [root@localhost ~]# who |head -2|tr 'a-z' 'A-Z'
    ROOT     PTS/0        2019-12-17 05:15 (192.168.10.1)
    [root@localhost ~]# who |head -2|tr 'a-z' 'A-Z' |tr -d '0-9'
    ROOT     PTS/        -- : (...)

        c、tee命令。COMMAND |tee /PATH/TO/SOMEFILE。将COMMAND结果输出到屏幕上并且又保存至指明文件中。

          查看/etc/issue文件,将文件中的内容保存至/tmp/issue.tee文件中并同时通过tr命令进行字符替换

    [root@localhost ~]# cat /etc/issue |tee /tmp/issue.tee|tr 'a-z' 'A-Z'
    S
    KERNEL R ON AN M
    
    [root@localhost ~]# cat /tmp/issue.tee 
    S
    Kernel 
     on an m

    三、练习

      1、练习题目

        a、练习1:把/etc/passwd文件的前6行的信息转换为大写字符后输出

    [root@localhost ~]# cat /etc/passwd |head -6 |tr 'a-z' 'A-Z'
    ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
    BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
    DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
    ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
    LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
    SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
  • 相关阅读:
    Excel与Google Sheets中实现线性规划求解
    Optaplanner终于支持多线程并行运行
    【译】Optaplanner开发手册本地化: (0)
    多工序、多机台(产线)环境下的排程要点
    设计Optaplanner下实时规划服务的失败经历
    Optaplanner规划引擎的工作原理及简单示例(2)
    vim 分屏
    vim autocmd
    irun vcs option
    记录
  • 原文地址:https://www.cnblogs.com/Presley-lpc/p/12048948.html
Copyright © 2011-2022 走看看