要理解管道操作,必须知道Linux的文件和文件描述符概念。
关于这两个概念的理解,在我的两个浅文《Linux文件描述符、重定向》和《Linux Shell脚本攻略一书中-关于重定向理解与补充》都有提及。虽然不想啰嗦,但为了文意连贯,有助于理解,还不得不再提一下要点。
1 关于Linux文件和文件描述符
简单提一下几个要点:
(1)在Linux中,一切都是文件。屏幕是文件,键盘是文件,系统错误也被抽象成了一个文件。当然,各种磁盘文件、各种设备,都是文件。
(2)是文件都有其对应的名字,名字是静态的。比如:键盘文件、屏幕文件、系统错误,它们的名字分别是:/dev/stdin、/dev/stdout、/dev/stderr。当然,各种磁盘文件、各种设备,也都有对应的名字。
(3)但是在Linux运行时,进程或内核需要打开某个文件时,内核用文件描述符的方式来跟踪处理相对应的文件。所以,文件描述符是动态概念。文件描述符是个非负整数。
(4)在Linux中,标准文件描述符有三个,分别是0(stdin)、1(stdout)、2(stderr)