1. 标准输入输出
stdin:标准输入
stdout:标准输出
stderr:标准错误输出
我们运行程序,在控制台看到的输出,就是stdout+stderr。
在shell中执行命令c。这个命令c可以接受stdin也可以不接受stdin,stdin是可选的,然后输出stdout和stderr。
可以把这个命令执行的过程抽象成一种函数调用,如下:
(stdout, stderr) = c(optional stdin)
Java中,
- System.out输出到stdout,System.err输出到stderr。
- 使用log.info、log.error这样的,通过日志框架在控制台打日志,底层同样是使用Java自带的System.out、System.err。这种情况下各级别日志究竟是输出到stdout还是stderr取决于日志的配置。
2. 管道(|)和重定向(<、>、>>)
管道可以把一个命令的输出作为另一个命令的输入。
linux中命令执行起来后就是进程。所以管道是由系统提供的一种进程间的通信机制,底层通过内存中的缓冲区来实现进程之间的通信。
重定向用于将命令的输出保存到文件中(有覆盖和追加两种方式),或者将文件内容作为命令的输入。
总的来说,管道用于连接两个命令,使一个命令的输出成为另一个命令的输入;而重定向用于改变命令的输入源或输出目的地。两者可以结合使用,例如将一个命令的输出通过管道传递给另一个命令,并将最终结果保存到文件中。
使用示例
# 例子:列出当前目录下的文件,并通过grep过滤,再通过sort排序
ls -l | grep ".txt" | sort
# 例子:将ls命令的输出保存到文件list.txt
ls -l > list.txt
# 例子:将echo的输出追加到文件log.txt
echo "New log entry" >> log.txt
# grep 命令将会搜索包含 "err" 的行,而输入则来自于 app.log 文件
grep "err" < app.log
网友评论