像 sort、find、grep、diff 等 Unix 实用程序非常方便地执行快速任务,有时根本不需要编写任何代码。
我想知道他们内部使用什么算法以及如何智能地决定针对特定任务的特定算法?例如,如果 sort 得到一个巨大的输入文件,它会针对不同的数据大小使用不同的算法吗?
grep 在搜索不同数据集时是否可以智能切换算法?
答案1
Unix 只是一个标准,它指定了实现应该做什么,但没有指定它们应该如何做。
因此,grep/sort/find 的实现很可能会在不同的系统上使用不同的方法(甚至在一个系统上,如 Linux,也有并发的实现)。
对于 Linux,您可以随时查看源代码。
答案2
答案3
UNIX 标准没有指定标准系统工具的实现细节,除非是极少数情况。您可以找到最新的 Single Unix 规范版本这里(警告:需要注册)。
考虑到这一点,每个 UNIX(System V 和直接后代,如 BSD、Solaris、Mac OS X 等)或基于 UNIX 的操作系统(远代或类似的:Linux、Minix)都有自己的实用程序实现, UNIX 规范。例如。看一眼FreeBSD 的和Linux/GNU Coreutils。请注意,有些工具本身是独立的整个项目,例如GNU 差异或者GNU grep。另一个事实是,这些工具的某些实现可能会作为标准进入其他类似 UNIX 的系统,然后是它们最初编写的系统,例如freebsd 中的一些 gnu coreutils或海湾合作委员会。
额外奖励:要了解 UNIX 家族树,请看一下这个图。
答案4
grep 在搜索不同数据集时是否可以智能切换算法?
我不这么认为,但当给定 -f 标志(或作为 fgrep 调用)时,它确实会切换到“快速”非 RE 算法。