I/O重定向和管道
一:I/O设备
I/O(Input/Output),即输入/输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。
标准输入(STDIN):0 默认接受来自键盘的输入
标准输出(STDOUT):1 默认输出到终端
标准错误(STDERR):2 默认输出到终端
二:I/O重定向
I/O重定向即改变标准输入、输出和错误的默认位置
标准输出和错误可以被重定向文件
- > 把STDOUT重定向到文件
- 2> 把STDERR重定向到文件
- &> 把所有输出重定向到文件 == COMMAND > /path/to/file.out 2>&1 == (COMMAND 2>&1) > /path/to/file.out
- >> 将标准输出追加到文件
- 2>> 将标准错误追加到文件
- &>> 将标准输出和标准错误都追加到文件
- () 合并多个程序的标准输出
- < 重定向标准输入
- <<EOF heretext就地文本
set -C 禁止将内容覆盖已有文件,但可以追加,但是使用>|FILE可以强制覆盖
set +C 取消禁止覆盖
三:管道
pipe :CMD1 | CMD2 CMD1的标准输出作为CMD2的标准输入
exp: ls /error /data/ 2>&1 | tr 'a-z' 'A-Z' ls /error /data/ |& tr 'a-z' 'A-Z' echo {1..100} | tr ' ' '+' | bc 计算1到100的和 seq -s + 100 | bc tar -cvf - /etc | tar -xvf - echo 'xt.,l 1 jr#*!mn 2 c*/fe 3 uz 4' | tr -dc '[:digit:][:space:]' touch `openssl rand -base64 10 | tr -dc '[:alnum:]' | tr '[:upper:]' '[:lower:]'`.log
tee 用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上,-a 追加模式