本章目录: 一. 三种I/O设备 二.把I/O重定向入文件 三.tr命令的使用 四.使用管道链接命令 五.tee命令的使用 一. 三种I/O设备 1.标准输入和输出 (1)程序:指令+数据 a.指令:决定了功能是什么 数据: b.读入数据:input 输出数据:output (2)打开的文件都有一个fd: file descriptor (文件描述符) (3)Linux给程序提供三种I/O设备: a.标准输入(STDIN) ——0,默认接收来自键盘的输入 b.标准输出(STDOUT)——1,默认输出到终端窗口 c.标准错误(STDERR)——2,默认输出到终端窗口 (4)I/O重定向:改变默认位置 二.把I/O重定向入文件 1.STDOUT和STDERR可以被重定向到文件 (1)语法:命令+操作符号+文件名 a.命令:执行的命令可以输出内容 b.操作符号: (a)>:输出内容重定向到文件中并覆盖文件原有内容 1>:把STDOUT重定向到文件 2>:把STDERR重定向到文件 &>:把所有输出重定向到同一个文件 (b)>>:输出内容重定向到文件中并追加到文件中原有内容的最后一行 1>>:把STDOUT重定向到文件 2>>:把STDERR重定向到文件 c.文件名:输出的内容要被重定向到的文件的文件名 (2)操作符的使用: a.1>的用法: (a)把正确输出重定向到文件 (b)系统默认是1>,1省略不写 (c)如果重定向到的文件不存在会自动创建 例1: 例2: b.2>的用法: (a)把错误输出重定向到文件 (b)如果重定向到的文件不存在会自动创建 例: c.&>的用法: (a)如果将正确输出和错误输出重定向到不同文件,不需要使用&>,而需要将>和2>综合使用 语法为:命令 >(或者2>) 文件1 2>(或者>) 文件2 (b)如果将正确输出和错误输出完全一样地重定向到同一个文件,使用&> 语法为:命令 &> 文件 例1: 例2: d.1>>的用法: (a)把正确输出的内容追加到文件原有内容的最后一行 (b)如果重定向到的文件不存在会自动创建 例: e.2>>的用法: (a)把错误输出的内容追加到文件原有内容的最后一行 (b)如果重定向到的文件不存在会自动创建 例: 2.set -C的使用: (1)使用这条命令后,会开启禁止覆盖的功能 (2)当文件已存在时不允许覆盖 (3)当文件不存在时仍然可以创建并覆盖 (4)追加不受影响 (5)在开启set -C的功能后,如果要强制覆盖,需要使用操作符>| (6)使用set +C关闭该功能 例1: 例2: 例3: 例4: 例5: 3.正确结果与错误结果之间的转换: (1)语法:输出正确内容的命令 1>&2 将正确输出转换为错误输出 输出错误内容的命令 2>&1 将错误输出转换为正确输出 例: 4.()的使用:合并多个程序的正确输出 例: 三.tr命令的使用 1.功能与语法: (1)功能:转换和删除字符 语法:命令[+选项]+第一字符集[+第二字符集] a.选项: (a)-t,--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符,一一对应 (b)-c,-C,--complement::取字符集的补集 (c)-d,--delete:删除所有属于第一字符集的字符 (d)-s,--squeeze-repeats:把连续重复的字符以单独一个字符表示 2.使用方法: (1)tr单独使用的方法: a.语法:tr 第一字符集 第二字符集 b.第一字符集对应字符转化为第二字符集对应的字符 c.如果第一字符集的字符数多于第二字符集,则第一字符集多出来的字符均会转换为第二字符集的最后一个字符 d.如果第一字符集的字符数多于第二字符集,则第一字符集多出来的字符均会转换为第二字符集的最后一个字符 e.如果要转换的内容不存在于第一字符集,则不会转换 例1: 例2: 例3: 例4: (2)tr -t 的用法: a.语法:tr -t 第一字符集 第二字符集 b.将第一个字符集对应字符转化为第二字符集对应的字符 c.必须一一对应的转换,如果第一字符集的字符数多与第二字符集,则第一字符集多出来的字符不会转换 例: (3)tr -d 的用法: a.语法:tr -d 第一字符集 b.删除所有属于第一字符集的字符 c.只能有第一字符集 例: (4)tr -s的用法: a.语法:tr -s 第一字符集 b.第一字符集列出的字符如果连续重复,将以单独一个字符表示 c.只能有第一字符集 例: (5)tr -c的用法: a.语法:tr -s 第一字符集 b.取第一字符集的补集 (在下一章节管道符中与-d共同使用) (6)字符的特殊表示方法: [:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字 [:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号 [:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符 例: 3.输入重定向: (1)使用<来重定向标准输入 a.语法:tr 第一字符集 第二字符集 < 指定输入的内容 b.本身依赖于键盘输入的内容重定向到指定的输入内容 c.将指定的输入内容进行字符的转换 例: (2)cat > 文件1 [<文件2] a.语法:cat > 文件1 将输入的内容重定向为键盘输入,并将输出的内容重定向到文件1中 c.语法:cat > 文件1 <文件2 将输入的内容重定向为键盘输入,再重定向为文件2的内容,并将输出的内容重定向到文件1中,实质就是复制 例1: 例2: (3)把多行发送给STDIN: a.使用“<<终止词”命令从键盘输入把多行内容重定向给STDIN b.直到 终止词 位置的所有文本都发送给STDIN c.终止词必须是单独的一行 例: 四.使用管道链接命令 1.功能与语法: a.功能 :管道(使用符号“|”表示)用来连接命令 语法 :命令1 | 命令2 | 命令3 | …… 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN 例1: 例2:输出的内容只保留ac(除了ac其他全部删除,包括换行符等等,使用cat -A 可以显示出换行符) 2.STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现 例: less :一页一页地查看输入 例: mail: 通过电子邮件发送输入 例: 5.将输出内容重定向到多个目标(tee): a.语法:命令1 | tee [-a ] 文件名 | 命令2 把命令1的STDOUT保存在文件中,做为命令2的输入 -a 追加 例: