A、三种I/O设备
标准输入(stdin) -0 #默认接受来自键盘的输入
标准输出(stdout) -1 #默认输出到终端窗口
错误输出(stderr) -2 #默认输出到终端窗口
B、把I/O重定向至文件
a、标准输出(stdout)和错误输出(stderr)可以重定向到文件,I/O重定向:指的是改变默认输入或输出。
> #把stdout重定向到文件 #1> 同 > ;1>> 同 >>
2> #把stderr重定向到文件
&> #把所有输出重定向到文件
实例:
】$ find /etc/ -name "*.conf" >all.txt #正确信息输出到all.txt文件
】$ find /etc/ -name "*.conf" >all.txt 2>&1
】$ find /etc/ -name "*.conf" &>all.txt #所有信息(包含错误)到all.txt文件
】$ find /etc/ -name "*.conf" 2> find.error > find.correct
b、文件内容是否会被覆盖参数
set -C #禁止将内容覆盖已有文件,但可以追加【>>】。 在这个模式下,使用 【 >| file 】是强制覆盖。
set +C #默认允许覆盖
实例:
】# cat /etc/redhat-release >win1.txt
- bash: win1.txt: cannot overwrite existing file #>报错
】# cat /etc/redhat-release >>win1.txt #>>正常输出到文件
】# cat win1.txt
CentOS Linux release 7.5.1804 (Core)
注释:
> 若文件不存在,则创建,并将正确的输出填充,若文件已存在,则覆盖原内容
>> 若文件不存在,则创建,并将正确的输出内容填充,若文件已存在,则追加内容
2> 若文件不存在,则创建,并将错误的输出填充,若文件已存在,则覆盖原内容
2>> 若文件不存在,则创建,并将错误的输出内容填充,若文件已存在,则追加内容
&> 若文件不存在,则创建,并将所有的输出填充,若文件已存在,则覆盖原内容
&>> 若文件不存在,则创建,并将所有的输出内容填充,若文件已存在,则追加内容
>file 2>&1 若文件不存在,则创建,并将所有的输出填充,若文件已存在,则覆盖原内容
/dev/null #特殊设备【黑洞】,所有重定向到这里的信息都将丢失。
c、重定向输入,可以从文件中导入(stdin),已可以多行发送给(stdin)
1)、使用【<】来重定向标准输入
2)、某些命令能够接受从文件中导入的STDIN
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
实例:
】cat > file
mage
wangxiaochun
按ctrl+d离开,可以使用文件来代替键盘的输入
3)、使用“<<终止词”命令从键盘把多行重导向给STDIN
实例:
】 cat > /app/test.txt << EOF
hello
123
nihao
EOF
C、管道 |
管道(使用符号“|”表示)用来连接命令; 格式:命令1 | 命令2 | 命令3 | …
“|” 管道只将正确结果传递给右边的命令用,STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现。
注释:
2>&1 将错误结果转为正确结果
|& 将正确及错误都传递给右边命令用
1>&2 将正确结果转为错误结果
实例:
】$ find /etc/ -name "*.conf" |& wc -l
】# ls /boot /error |& tr 'a-z' 'A-Z' #新方法在Centos5里不能使用
】# ls /boot /error 2>&1 | tr 'a-z' 'A-Z'
D、tr 转换和删除字符
tr [OPTION]... SET1 [SET2]
选项
-c #取字符集的补集
-d #删除所有属于第一个字符集的字符
-s #替换连续重复的字符,并单独以一个字符表示。
-t #将第一个字符集对应字符转化为第二个字符集对应的字符
实例:
】ls | tr ‘a-z’ ‘A-Z’
df | tr -s '' ''
echo abcdef | tr -t 'abcd' 'xyz'
----------------------------------------------------------------------------------
练习:从1加到100,取和
[root@instructor_v7(nanyibo) ~]# echo {1..100} |tr " " + |bc
5050
[root@instructor_v7(nanyibo) ~]# echo {1..100} |tr [:blank:] + |bc
5050
----------------------------------------------------------------------------------
F、重定向到多个目标
命令1 | tee 文件名 | 命令
选项:
-a 追加
实例:
[root@centos7 app]# ls | tee -a ls.log #标准输出(stdout),并把内容重定向到ls.log文件里。
】ls.log
passwd
win1
[root@centos7 app]# enable |tee /app/456 |wc -l #enable的内部命令输出到456里,并计算行数。
网友评论