How does the 'ls' command work in Linux/Unix?
这是一些参考。
但我想知道如何命令如
ls -1 | grep 'myfile'
将由shell执行,即当exec被调用时,何时调用fork,何时调用id dup(如果有的话)。
此外,整个命令如何解析?
答案 0 :(得分:1)
fork做什么
Fork是在类Unix操作系统上创建进程的主要(也是历史上唯一的)方法。
exec做什么
在计算中,exec是在现有进程的上下文中运行可执行文件的操作系统的功能
这是什么意思
当您运行命令(不是像exit
,cd
那样内置)时,shell会使用fork
创建子进程。然后这个子进程使用exec
执行该命令的二进制文件(例如:/ bin / ls)
在输入/输出重定向期间会发生什么
每个过程都提供三个流标准输入(STDIN),标准输出(STDOUT)和标准错误(STDERR)。默认情况下,这些流将映射到父进程的相应流。因此,从STDIN读取的wc
或nano
等命令可以从父shell进程的STDIN提供数据,并且它们的输出由父shell进程捕获并显示。
但是,使用重定向时
ls /tmp /abcd 1>out.log and 2>err.log
stdout现在映射到out.log
的文件输出流,类似地,stderr映射到err.log
。输出将写入相应的文件。
PIPE链接
ls -1 | grep 'myfile'
在shell中,PIPE |
用于链接第一个命令的STDOUT到第二个命令的STDIN。
这意味着输出ls -1
(文件和目录列表)作为grep myfile
的输入,搜索包含“myfile”的行并打印到其STDOUT。组合效果是搜索包含char序列“myfile”