标准输入输出和管道
三种输入和输出设备
把输出和输入重定向到文件
使用管道连接命令
一.标准:
输入(STDIN)-0,默认是键盘鼠标的输入窗口
输出(STDOUT)-1,默认设备当前终端窗口
错误(STDERR)-2,默认当前终端窗口
1:
打开的文件都有一个fd: file descriptor (文件描述符)
二,输入输出重定向;改变文件位置
1,> 把输出STDOUT重定向到文件
2>把STDERR重定向到文件
&>把所有输出重定向到文件
> 文件内容会被覆盖
>> 原有内容基础上,追加内容
< 标准输入的重定向
把标准输出,切换到别的终端;用>号。如下图所示
2,定向到文件,如果文件名不存在,它会自己生成文件名
如果说再往 ls.log里定向一个文件,那么它的原有数据就会覆盖
举例:下图以ls为例
3.把错误的重定向到文件,用2>号。如下图所示
如果>号前边不加2 ,就系相当与把文件清空了文件里什么也没有
如下图
4,如果想把错误的和正确的都放一个文件里,得用&>
如下图所示
5,如果想错的对的都放一块,如下图所示
旧版本的系统支持2>&1,2>&1必须放到最后,命令如下图所示
6,把两个命令的标准输出,都定向到一个文件里。得用(命令:命令 )
7,>> 追加到一个文件,数据不会覆盖,如下图
8.>标准输入的重定向,可以代替键盘输入的信息,进行一些批量的处理。
命令如下发一个邮件,执行完后输入内容,最后输.结束
如果我想群发邮件,可以用nano mail.txt ,在里面写上内容 ,就不用一个一个写了。
然后使用标准输入群发邮件。命令如下图
9<<标准输入多行重定向 导入到文件里,输入e结束才会存到f1里.
如下图,
三,tr命令是转换和删除字符的命令
选项:
-c或——complerment:取字符集的补集
-d或——delete:删除所有属于第一字符集的字符;
-s或—squeeze-repeats:把连续重复的字符以单独一个字符表示
-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符
1,转小写字符为大写字符,而且可以用标准输入。把全部文件的内容转换为大写,并且定向到f1文件,注意的是/etc/issue本身没有转换为大写,只是一个输入源。下图
2,tr -d ‘abc ’删除abc 打头的字符
3,tr -s ‘x’把重复的x 用单个的x 来表示
4可以横变竖排序
5 -c 除了补集,全部替换
一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!
操作系统版本信息
管道
(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1的输出(STDOUT)发送给命令2的输入(STDIN),命令2的输出(STDOUT)发送到命令3的输入(STDIN)
管道接收的是标准输出,而不是错误。
如:Cat 是标准输出,通过管道传给mail,作为它的标准输入
错误STDERR默认不能通过管道转发,可利用2>&1 或|& 实现
如:下图,错误也行,正确也行
管道也可多次处理,如下图把AD删了。
如果用tee 命令可以在文件里和桌面两面显示,如下图
还可以在转换,删掉回车换行符。下图
set命令
set -c 可以禁止覆盖 ,set +c 可以取消覆盖。
注意,禁止了换个终端或退出登录它不生效。
一般编写脚本用set -c, 防止覆盖,写完正在set+c取消。
1将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中,下图。
2将/root/下文件列表,显示成一行,并文件名之间用空格隔开。