一.标准输入与输出
Linux给程序提供三种I/O设备
标准输入(STDIN) - 0 默认接受来自终端窗口的输入
标准输出(STDOUT) - 1 默认输出到终端窗口
标准错误(STDERR) - 2 默认输出到终端窗口
注:即为平时使用终端时的输入、系统反馈的正常内容、以及错误提示
I/O重定向redirect
将默认的输入,输出或错误对应的设备改变,指向新的目标
1.标准输出和错误重新定向
格式:
命令 操作符号 文件名
符号定义:
1> 或 > :把STDOUT重定向到文件
2> :把STDERR重定向到文件
&> :把标准输出和错误都重定向
>& :同上,但不如前者好用
(注:以上重定向如果文件已存在,内容会直接覆盖)
set -C 禁止将内容覆盖已有文件,但可追加,使用 >| 仍可强制覆盖
set +C 允许覆盖,默认
>> :追加标准输出重定向至文件
2>> :追加标准错误重定向至文件
(注:追加即在原有基础上,增加内容)
扩展用法:
①标准输出和错误输入各自定向不同位置
实例:
#ls /data /xxx > /data/1.log 2> /data/2.log
②合并标准输出和错误输出为同一个数据流进行重定向
&> :覆盖重定向
&>> :追加重定向
command > /path/to/file.out 2>&1
command >> /path/to/file.out 2>&1
(注:顺序很重要)
错误示范:
ls /data /xxx > /data/all4.log 1>&2
ls /data /xxx 2&1 > /data/all4.log
③合并多个程序的重定向
(cmd1;cmd2...)或{cmd1;cmd2;...}后跟重定向
2.标准输入重定向
command < command
command << command
注:cat是一个标准输入命令,单行重定向,并且默认是追加
实例
①tr命令
选项:
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:去重
-t --truncate-set1: 将第一字符集对应字符转化为第二字符集对应的字符
-c -C --complement:取字符集的补集
[:alnum:] 字母和数字
[:alpha:] 字母
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:sapace:] 空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[:graph:] 图形符号
[:cntrl:] 控制字符(非打印)
[:xdigit:] 十六进制字符
注:tr也是一个标准输入命令
替换字符数不对应时默认用最后一个字符替换,如下
使用 -t 强制对应关系,如下
-s 去重只作用于连续字符,对比如下
使用 -dc 结合可以只保留自己想要的,去除其他字符,要注意要用ctrl+d结束
②标准输入重定向
③多行重定向
使用"<<终止词" 命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时称为就地文本
其中终止词可以是任意一个或多个符号,一般EOF比较常用(end of file)
3.管道
①管道
管道符 | 用来连接多个命令,即将命令1的输出当做命令2的输入,执行后,再把命令2的输出发送给命令3进行执行,以此持续.一般用作组合多种工具
注:所有命令会在当前shell进程的子shell进程中执行
注:STDERR不能通过管道转发,可用2>&1或 |&实现
②tee命令
利用tee命令可用重定向到多个目标,经常配合管道符使用
选项 -a 表示追加
功能: 保存不同阶段的输出
复杂管道的故障排除
同时查看和记录输出
4.重定向中的 - 符号
wget,curl等命令可能用到 - 符号