系统中输入输出的管理

##########系统中输入输出的管理##########

1.理解系统的输入输出

编号 通道名称 描述 默认连接  用法
0 stdin 标准输入 键盘 仅读取
1 stdout 标准输出 显示屏 仅写入
2 stderr 标准错误 显示屏 仅写入

2.管理输入输出的符号
####输入重定向####
       指在文件中保存某些输入和指令,当需要执行文件中的这些指令时,不需要每次输入这些指令,只需执行包含这些命令的文件即可,这些命令会自然执行
    command < file        ##将输入重定向到file
    command << EOF
    haha
    xixi
    EOF            ##将两个EOF之间的内容(haha,xixi)作为输入传递给command
注意:结尾的EOF一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和Tab缩进
     开始的EOF前后的空格会被忽略掉

示例:用输入重定向执行date、cal、passwd命令

先建立一个file.sh文件,写入以下内容:

系统中输入输出的管理

结果如下:

系统中输入输出的管理

####输出重定向####

> 重定向正确输出
2> 重定向错误输出
&> 重定向所有输出

注意:重定向会覆盖源文件内容

示例:
    find /etc/ -name passwd > file         ##定向正确输出到file

系统中输入输出的管理
    find /etc/ -name passwd 2> file.err    ##定向错误输出到file.err

系统中输入输出的管理
    find /etc/ -name passwd &> file.all    ##定向所有输出到file

系统中输入输出的管理
    > file        ##清空file

系统中输入输出的管理

注意:如果希望执行某个命令,但是不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null
    command > /dev/null
    /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件中读取内容,那么什么也读不到。将命令的输出重定向到它,会起到“禁止输出”的效果。

3.输出的追加

   >>    ##追加正确输出到文件最后

示例:find /etc/ -name passwd >> file    ##追加正确输出到file
 

系统中输入输出的管理
    2>>    ##追加错误输出到文件最后

示例:find /etc/ -name passwd 2>> file    ##追加错误输出到file

系统中输入输出的管理
    &>>    ##追加所有输出到文件最后

 示例:find /etc/ -name passwd &>> file    ##追加所有输出到file

系统中输入输出的管理
注意:追加不会覆盖原内容

4.管道的应用

1)管道的作用
    “|”管道的作用是把前一条命令的输出变成后一条命令的输入

注意:
    管道只允许正确输出通过
    通过管道的输出将会变成输入,而变成输入的这些输出是会被第二条命令处理的
    如果需要保存输出内容,那么需要复制一份输出,用的命令是“tee”

示例:此操作在普通用户下操作
    find /etc/ -name passwd | wc -l        ##会看到的结果为2,因为错误输出不能通过管道

系统中输入输出的管理
    find /etc/ -name passwd 2>&1 | wc -l    ##会看到结果19,因为编号为2的输出被“2&>1”转换为编号1

系统中输入输出的管理
    find /etc/ -name passwd 2>&1 tee file |wc -l    ##保存一份文件到file中再统计行数

系统中输入输出的管理

注意:tee复制输出到指定位置

    补充:

              wc命令:
                         -c    ##输出比特数
                         -m    ##输出字符数
                         -l    ##输出行数
                         -L    ##输出最长行的长度
                         -w    ##输出单词数