我最近阅读了命名管道,但我不明白它们为什么存在。
我在某处读到使用命名管道比使用文件更省时。
为什么会这样?
命名管道也必须存储在内存中(可能会被交换,就像文件一样)。
据我所知,他们必须获得一个必须由当前目录引用的 inode,就像文件一样。此外,它们必须由程序员删除,就像文件一样。
那么优势在哪里呢?
当一个进程从 shell 启动时,为什么 shell 在执行进程之前会自己fork?
例如,当用户输入时grep blabla foo,为什么shell 不能在exec()没有子shell 的情况下调用grep?
此外,当 shell 在 GUI 终端仿真器中分叉自身时,它是否会启动另一个终端仿真器?(比如pts/13开始pts/14)
我正在阅读 O'Reilly 的书“Unix in a nutshell”,我在那里看到可以使用以下格式在当前 shell 中对命令进行分组和执行:
{ cmd1 ; cmd2 }
Run Code Online (Sandbox Code Playgroud)
我不明白这是怎么可能的,因为我知道对 exec 的调用会替换 shell 的数据,因此 shell 无法从 exec 系统调用中返回。所以我测试了命令,我不明白发生了什么。我输入了一个命令行,但我不确定该命令行属于什么。
它只是终端模拟器的命令行,从外壳中剥离出来吗?
另外,在当前 shell 中以任何方式执行命令有什么用?

如何从命令行获取这样的列表,包括每个实用程序的版本?默认情况下,它们是否在同一个文件中?