标准的I/O和管道
程序:指令+数据
系统自带了许多二进制程序,这些二进制程序共有两部分组成,一部分是指令,一部分是数据。
指令就是指二进制程序中的内容,然而程序的运行,也需要数据来支撑。
标准输出 STDOUT -1 standard output
输入命令所呈现在屏幕上的内容称之为标准输出,但是不是所有的命令都有标准输出。例如cd rm后面不跟参数时,就没有标准输出。
标准输出的默认设备就是当前终端窗口。
标准错误 STDERR -2 standard error
当命令的错误使用时,所显示在屏幕上的报错信息为标准错误。
标准错误的默认设备也是当前终端窗口。
标准输入 STDIN -0 standard input
键盘所输入的内容称为标准输入
I/O重定向
改变I/O设备的默认位置 用“>”来实现重定向
“>”标准输出的具体用法:
1、如果下图中ls.log这个文件不存在,则自动创建。
2、如果重新重定向到ls.log文件中,则现有内容会覆盖原有内容。
3、如果不想覆盖,想保留原有数据,则用“>>”。
注意:
不是所有$SHELL都支持重定向。例如:
“>”是用来重定向正确的信息的,不能用来重定向错误信息。
若想重定向错误信息用命令,用命令“2>”。
4、当正确命令和错误命令一起执行时,如何把错误信息和正确信息分别从定向到不同的文件夹中该如何实现???
5、如果错误信息和正确信息放在同一个文件中呢?中间加“&”
或执行下面这条命令也可以。但是命令顺序不能错。
6、多个文件内容合并到一个文件中去。
7、多条命令重定向
“<”标准输入的重定向的具体用法:
1、一些命令需要键盘把一些重要的数据输入到系统中进行处理,例如发送电子邮件。
2、多行一块处理
Cat命令执行后,输入内容,其每一行都要执行一遍,完全没有必要。
用“<<”可以实现多行一块执行,其中“E”表示多行的开始,随便什么内容。但是结束时,要跟前面的开始符号保持一致,也就是下图中也要用“E”结尾。只要不输入结束符,其每行的内容始终不会执行,只要输入结束符,其多行内容都会一块执行。
Tr 命令的具体用法:
1、小写字母转换成大写字母
2、也可以实现“abc”转换“xyz”
3、tr -d
只删除含有a 、b、c 的字符
4、tr -s
将重复的字符合并成一个
5、/n 回车换行
新建一个文件f1,用hexdump查看二进制编码,有/n,表示回车换行,tr -d命令删除,结果如下图。
也可以将空格转化成“/n”表示回车换行。
6、tr -c 除了a,a的补集全部替换。
管道(使用符号“|”表示)用来连接命令
使用方法:
1、将$USER的执行结果用管道符“|”传给tr作为参数执行小写字母转换大写字母。
2、电子邮件也可以用管道符传
3、管道接收的是标准输出,不接受标准错误。但是如果要想接收标准错误,用命令| &,表示前面命令无论成功失败,统统可以用管道来处理。
4、也可以用管道进行多次处理,以得到我们想要的结果。
5、|tee 既能将输出结果显示到屏幕上,也能输入到文件中。
若管道所输出的文件不存在,则会自动创建。下图中的f4文件本身不存在。
6、Set -C
文件原有内容不想被覆盖则可以用set-C将覆盖禁止。但是该命令只对当前终端有效,若终端退出再重新登录,该命令也会失去作用。
但是可以累加。
若想取消禁止覆盖则用命令“set +C”。