Linux 初探之旅(三)——重定向、标准输入输出和管道

标准输入输出我们先从Linux最基础的交互来讲起,我们究竟是如何和Linux系统内核进行交互的?换句话说,如何通过在按下键盘,就能让系统实现对应的操作的? 这一切都离不开它,终端——用户与Linux建立起联系的桥梁。 当我们在终端上输入命令的时候,直到我们未按下回车键之前,我们输入的所有内容都储存在终端的缓冲区(Buffer)里。此时我们输入的内容不会被系统所读到,只有在我们按下回车键后,缓冲区里的内容才会被发往 stdin (Standrad input 标准输入),stdin 是 Linux 内核和用户交互的通道。 接着,Shell 会介入,它会将 stdin 收到的内容翻译成操作并执行,Shell 译为壳层,与 Kernel(内核)相对应。Shell在外,Kernel在内。例如我们输入ls,那么 Shell 就会找到 ls 这条命令对应的二进制文件并执行。 执行完命令后,Shell 会将获取到的结果发送到另一条与 stdin 相对应的通道中,即 stdout(Standard output 标准输出)。终端会不间断地从 stdout 里读取内容,然后打印到屏幕上,即我们在终端中看到的输出。 总的来说,用户的输入的内容会发往 stdin 并被 Shell 读取,Shell 将找到内容所对应的二进制文件并执行,执行完后 Shell 会将结果发往 stdout 中,及时的显示在屏幕上。这就是一次与 Linux 交互的过程。 我们总说,在 Linux 中一切皆为文件,那么 stdin 和 stdout 也不例外,它们也是系统的两个文件。除了 stdin 和 stdout 之外,还有第三条通道 stderr(Standard error 标准错误)。stderr 和 stdout 一样,它们都是用于存储执行结果的地方,区别在于,Shell 执行完命令后,会将正常的结果发往 stdout 里,将错误的结果发往 stderr 里。同样地,stderr 也会被终端所读取,最后显示在屏幕上。 输出重定向理解了标准输入输出后,我们能弄懂重定向的原理了,实际上就是 Shell 执行完命令后不把输出结果存放在 stdout 或 stderr 。而是存放到另一个文件当中。 ...

2024年06月16日 · 1 分钟 · Cassius0924