易学笔记-Linux命令-第7章:重定向

第7章:重定向

  1. 概念:Linux中任何的一个东西都是文件,输入和输出的基础也都是文件。而重定向指的是从输入和输出的标准文件切换到一般文件
  2. 标准化的输入和输出
    1. 标准的输入:stdin:通常指的是键盘
    2. 标准的输出:stdout:通常指的是屏幕
    3. 标准的错误:stderr:通常指的是屏幕

第7章:重定向/7.1 重定向标准输出

  1. 语法: > 具体的文件名
  2. 举例:

    [root@zabbix ~]# ls -l > ls-output.txt

    [root@zabbix ~]# vi ls-output.txt

    total 409916

    -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

    -rw-r--r--. 1 root root         0 Aug 27 01:42 ls-output.txt

    drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

    -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

    -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

    lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

    lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

    drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

追加式重定向:

  1. 语法: >> 文件名
  2. 举例:

    [root@zabbix /]# ll -l >> /root/ls-output.txt

    [root@zabbix ~]# vi ls-output.txt

    total 409916

    -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

    -rw-r--r--. 1 root root         0 Aug 27 01:46 ls-output.txt

    drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

    -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

    -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

    lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

    lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

    drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

    total 36  新增的内容

    drwxr-xr-x.   8 root root 4096 Apr 24 16:10 app

    lrwxrwxrwx.   1 root root    7 May 21 11:03 bin -> usr/bin

    dr-xr-xr-x.   5 root root 4096 May 31 12:20 boot

    drwx--x--x.   3 root root   19 May  3 17:00 cutome-path

    drw-------.   9 root root 4096 May 31 16:04 data

    drwxr-xr-x.  19 root root 3220 Aug 16 01:10 dev

    drwxr-xr-x.   2 root root   90 Apr 16 10:03 dockercmd

    drwxr-xr-x.   4 root root   32 Apr 13 11:21 docker-hub

    drwxr-xr-x. 101 root root 8192 Aug 14 17:40 etc

    drwxr-xr-x.   8 root root   88 Aug 14 17:40 home

    lrwxrwxrwx.   1 root root    7 May 21 11:03 lib -> usr/lib

    lrwxrwxrwx.   1 root root    9 May 21 11:03 lib64 -> usr/lib64

    drwxr-xr-x.   2 root root    6 Apr 11 12:59 media

    drwxr-xr-x.   2 root root    6 Apr 11 12:59 mnt

    drwxr-xr-x.   6 root root   56 Jun  8 11:16 opt


第7章:重定向/7.2 重定向标准错误

  1. 没有专用的重定向错误操作符,需要配合文件描述符使用,文件描述符说明:
    1. 0:标准输入
    2. 1:标准输出
    3. 2:标准错误
  2. 覆盖式:
    1. 语法: 2>
    2. 举例:

      [root@zabbix ~]# xxx 2> /root/ls-output.txt

      [root@zabbix ~]# vi ls-output.txt

      -bash: xxx: command not found

  3. 追加式:
    1. 语法:2>>
    2. 举例:

      [root@zabbix ~]# aaa 2>> /root/ls-output.txt

      [root@zabbix ~]# vi ls-output.txt

      -bash: xxx: command not found

      -bash: aaa: command not found


第7章:重定向/7.3 重定向标准输出和标准错误

  1. 覆盖式:
    1. 旧版:
      1. 语法:> 文件名 2>&1 
      2. 举例:

        [root@zabbix ~]# ls -l  /aa /bin/usr /bin/temp/ . /root/mylog > ls-output.txt 2>&1

        [root@zabbix ~]# vi ls-output.txt

        ls: cannot access /aa: No such file or directory

        ls: cannot access /bin/usr: No such file or directory

        ls: cannot access /bin/temp/: No such file or directory  先输出错误

        -rw-r--r--.  1 root root 7166 Jun  7 18:33 /root/mylog   再输出正确的

        .:

        total 409920

        -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

        -rw-r--r--. 1 root root       159 Aug 27 02:08 ls-output.txt

        drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

        -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

        lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

        drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

    2. 新版:
      1. 语法:&> 文件名
      2. 举例:

        [root@zabbix ~]# ls -l  /aa /bin/usr  .  &> ls-output.txt

        [root@zabbix ~]# vi ls-output.txt

        ls: cannot access /aa: No such file or directory

        ls: cannot access /bin/usr: No such file or directory 先输出错误

        .:   再输出正确的

        total 409920

        -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

        -rw-r--r--. 1 root root       103 Aug 27 02:10 ls-output.txt

        drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

        -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

        lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

        drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

  2. 追加式:
    1. 旧版:>>  文件名  2>&1 
    2. 新版:&>>  文件名

第7章:重定向/7.4 不产生输出:/dev/null


第7章:重定向/7.5 拼接多个输出

  1. 举例1:错误输出到文件1 标准错误到文件2
    1. 语法: 1>文件2  2> 文件1 
    2. 举例:

      [root@zabbix ~]# ls -l  /aa /bin/usr  .  2> err-output.txt   1> ls-output.txt

      [root@zabbix ~]# vi err-output.txt

      ls: cannot access /aa: No such file or directory

      ls: cannot access /bin/usr: No such file or directory

      [root@zabbix ~]# vi ls-output.txt

      .:

      total 409920

      -rw-r--r--. 1 root root       103 Aug 27 02:32 err-output.txt

      -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

      -rw-r--r--. 1 root root         0 Aug 27 02:32 ls-output.txt

      drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

      -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

      -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

      lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

      lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

      drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

  2. 举例2:不需要错误输出  标准错误到文件2
    1. 语法: 1>文件2  2> /dev/null
    2. 举例:

      [root@zabbix ~]# ls -l  /aa /bin/usr  .  2> /dev/null   1> ls-output.txt

      [root@zabbix ~]# vi ls-output.txt

      .:

      total 409916

      -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

      -rw-r--r--. 1 root root         0 Aug 27 02:31 ls-output.txt

      drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

      -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

      -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

      lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

      lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

      drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak


第7章:重定向/7.6 cat 命令

  1. 作用:读取一个或者多个文件,然后复制它们到标准输出
  2. 用cat 命令实现多个文件标准输出
    1. 格式:cat file1 file2
    2. 举例:

      [root@zabbix ~]# cat ln_123  test.txt

      112

      11222   ln_123文件内容

      idadada 2dfada dada

      dada 1122

      womd

      [root@zabbix ~]#  test.txt文件内容

  3. 用cat 命令实现多个文件重定向
    1. 格式: cat file1 file2 > 文件名
    2. 举例:

      [root@zabbix ~]# cat ln_123  test.txt > mycat

      [root@zabbix ~]# cat mycat

      112

      11222

      idadada 2dfada dada

      dada 1122

      womd

      [root@zabbix ~]#

  4. cat命令把标准输入的内容重定向到文件
    1. 覆盖式输入:

      [root@zabbix ~]# cat > test.txt

      accfc 

      ddd

      ddd

      www

      ^C

      [root@zabbix ~]# cat test.txt

      accfc

      ddd

      ddd

      www

    2. 追加式输入

       [root@zabbix ~]# cat >> test.txt

      dadada

      dadad

      dadad

      [root@zabbix ~]# cat test.txt

      accfc

      ddd

      ddd

      www

      dadada

      dadad

      dadad

  5.  

第7章:重定向/7.7 管道

  1. 作用:将一个命令的标准输出作为另外一个命令的标准输入
  2. 格式:command1|command2
    1. command1:产生标准输出
    2. command2:需要一个标准输入
  3. 举例:
    1. command1:产生标准输出

      [root@zabbix ~]# ls -l /usr/bin

      -rwxr-xr-x. 2 root root      185488 Apr 11 13:24 zipinfo

      -rwxr-xr-x. 1 root root       12040 Jun 10  2014 zipmerge

      -rwxr-xr-x. 1 root root       95984 Nov  6  2016 zipnote

      -rwxr-xr-x. 1 root root      100096 Nov  6  2016 zipsplit

      -rwxr-xr-x. 1 root root       11880 Jun 10  2014 ziptorrent

      -rwxr-xr-x. 1 root root        2041 Apr 11 08:01 zless

      -rwxr-xr-x. 1 root root        2859 Apr 11 08:01 zmore

      -rwxr-xr-x. 1 root root        5343 Apr 11 08:01 znew

      lrwxrwxrwx. 1 root root           6 Aug 31  2017 zsoelim -> soelim

    2. command2:需要一个标准输入

      [root@zabbix ~]# less mycat

      11222

      idadada 2dfada dada

      dada 1122

      womd

      mycat (END

    3. command1|command2

      [root@zabbix ~]# ls -l /usr/bin|less

      total 286160

      -rwxr-xr-x. 1 root root       41480 Apr 11 12:35 [

      -rwxr-xr-x. 1 root root      107856 Aug  3  2017 a2p

      -rwxr-xr-x. 1 root root       52720 Apr 21 02:11 ab

      -rwxr-xr-x. 1 root root       11336 Apr 27 22:53 abrt-action-analyze-backtrace

      -rwxr-xr-x. 1 root root       11320 Apr 27 22:53 abrt-action-analyze-c

      -rwxr-xr-x. 1 root root        1345 Apr 27 22:53 abrt-action-analyze-ccpp-local

      -rwxr-xr-x. 1 root root        6821 Apr 27 22:53 abrt-action-analyze-core

    4.  

第7章:重定向/7.8 过滤器/7.8.1 sort:可能重复排序

  1. 作用:在管理( 第7章:重定向/7.7 管道)的基础上,将一个命令标准输出(可能多个)经过处理后(比如排序)再作为另外一个命令的输入
  2. 格式:commond1|sort|commond2
  3. 举例:

    [root@zabbix ~]# ls /bin /usr/bin |sort|less

    abrt-action-analyze-xorg

    abrt-action-check-oops-for-hw-error

    abrt-action-check-oops-for-hw-error

    abrt-action-generate-backtrace

    abrt-action-generate-backtrace

    abrt-action-generate-core-backtrace

    abrt-action-generate-core-backtrace

    abrt-action-install-debuginfo

    abrt-action-install-debuginfo

    abrt-action-list-dsos

    :


第7章:重定向/7.8 过滤器/7.8.2 uniq:去除重复的排序

  1. 格式:commond1|sort|uniq|commond1
  2. 举例:

    [root@zabbix ~]# ls /bin /usr/bin |sort|uniq|less

    abrt-cli

    abrt-dump-oops

    abrt-dump-xorg

    abrt-handle-upload

    abrt-merge-pstoreoops

    abrt-retrace-client

    abrt-watch-log

    abs2rel

    ac

    acyclic

    addr2line

    :


第7章:重定向/7.8 过滤器/7.8.3 wc:统计行数、字数、字节数

  1. 格式:commond1|过滤器1|过滤器2|wc
  2. 关于wc 命令
    1. 命令:  wc 操作 文件名1  文件名2
    2. 操作
      1. -l :显示行数
      2. -c : 显示字节数
      3. -m:显示字符数
    3. 举例:

      [root@zabbix ~]# wc ln_123  mycat

       2  2 10 ln_123   1列:行数 2列:字符 3列:字节数

       5  8 47 mycat

       7 10 57 total

  3. 举例:

    [root@zabbix ~]# ls /bin /usr/bin |sort|uniq|wc

       1150    1149   10835  1列:行数 2列:字符 3列:字节数

    [root@zabbix ~]#


第7章:重定向/7.8 过滤器/7.8.4 grep 过滤

  1. grep命令:后面章节会详细讲解grep
    1. 格式:grep pattern 文件1 文件2 。。。
    2. 举例:

      [root@zabbix ~]# grep 12 ln_123

      112

      11222

  2. 过滤器中使用grep
    1. 举例

      [root@zabbix ~]# ls /bin /usr/bin |sort|uniq|grep zip

      bunzip2

      bzip2

      bzip2recover

      funzip

      gpg-zip

      gunzip

      gzip

      unzip

      unzipsfx

      zip

      zipcloak

      zipcmp

      zipgrep

      zipinfo

      zipmerge

      zipnote

      zipsplit

      ziptorrent


第7章:重定向/7.8 过滤器/7.8.5 head/tail 过滤

  1. head命令
    1. 格式:head 操作符 文件1 文件2
      1. 操作符:
        1. -n:文件开始几行
        2. -c:文件开始的多个字节
    2. 举例:

      [root@zabbix ~]# head -n 5 mylog  mycat

      ==> mylog <==

      .

      .

      JAVA Memory arguments: -Xms256m -Xmx512m  -XX:MaxPermSize=256m

      .

      server/common/derby/lib/derby.jar:/u01/oracle/weblogic/wlserver/server/lib/xqrl.jar

      ==> mycat <==

      112

      11222

      idadada 2dfada dada

      dada 1122

      womd

      [root@zabbix ~]#

  2. tail命令
    1. 格式:tail 操作符 文件1 文件2
      1. 操作符:
        1. -n:文件结尾几行
        2. -c:文件开始的多个字节
    2. 举例:

      [root@zabbix ~]# tail-n 5 mylog  mycat

      ==> mylog <==

      .

      .

      JAVA Memory arguments: -Xms256m -Xmx512m  -XX:MaxPermSize=256m

      .

      server/common/derby/lib/derby.jar:/u01/oracle/weblogic/wlserver/server/lib/xqrl.jar

      ==> mycat <==

      112

      11222

      idadada 2dfada dada

      dada 1122

      womd

      [root@zabbix ~]#

    3. 实时查看文件内容: tail -f  find
  3. 在管道中使用head/tail 

    [root@zabbix ~]# ls /bin /usr/bin |head -n 5  输出前面5个文件

    /bin:

    [

    a2p

    ab

    abrt-action-analyze-backtrace

    [root@zabbix ~]# ls /bin /usr/bin |tail -n 5 输出后面5个文件

    ziptorrent

    zless

    zmore

    znew

    zsoelim

    [root@zabbix ~]#


第7章:重定向/7.8 过滤器/7.8.6 tee:重定向管道输出结果到文件

  1. 格式:commond1|....|tee 文件名1|tee 文件名2|commond...|
  2. 说明:tee 可以插入到管道的任意一个过程,捕捉管道最近的一次输出,插入的位置不一样捕捉输出的结果也不一样
  3. 举例:
    1. 举例1:捕捉ls 输出结果

      [root@zabbix ~]# ls /usr/bin |tee ls.txt|grep zip

      bunzip2

      bzip2

      bzip2recover

      funzip

      gpg-zip

      gunzip

      gzip

      unzip

      unzipsfx

      zip

      zipcloak

      zipcmp

      zipgrep

      zipinfo

      zipmerge

      zipnote

      zipsplit

      ziptorrent

      [root@zabbix ~]# cat ls.txt

      yumdownloader

      yum-groups-manager

      zcat

      zcmp

      zdiff

      zegrep

      zfgrep

      zforce

      zgrep

      zip

      zipcloak

      zipcmp

      zipgrep

      zipinfo

      zipmerge

    2. 举例2:捕捉grep 输出结果

      [root@zabbix ~]# ls /usr/bin |grep zip|tee ls.txt

      bunzip2

      bzip2

      bzip2recover

      funzip

      gpg-zip

      gunzip

      gzip

      unzip

      unzipsfx

      zip

      zipcloak

      zipcmp

      zipgrep

      zipinfo

      zipmerge

      zipnote

      zipsplit

      ziptorrent

      [root@zabbix ~]# cat ls.txt

      bunzip2

      bzip2

      bzip2recover

      funzip

      gpg-zip

      gunzip

      gzip

      unzip

      unzipsfx

      zip

      zipcloak

      zipcmp

      zipgrep

      zipinfo

      zipmerge

      zipnote

      zipsplit

      ziptorrent

      [root@zabbix ~]#

猜你喜欢

转载自blog.csdn.net/u011830122/article/details/83904849