为什么 cd 不是 /bin 中的文件?

amp*_*ent 6 filesystems command

可能的重复:
为什么 cd 不是程序?

我注意到所有其他常用的 util,比如ls, cp, rm,等等,实际上都是 /bin 中的文件——但cd不是。它也不在任何其他二进制文件目录中(例如/usr/bin, /bin, /sbin等)。

为什么会这样?

ire*_*ses 7

cd是一个shell 内置的。所以它是 shell 本身的一部分,而不是一个单独的可执行文件。

基本上有两类内置函数。

  • 特殊的内置函数与 shell 密切相关,要么不能独立实现,要么不能,因为这样做没有功能意义(它们主要与 shell 控制有关)。它们被称为“特殊”是因为它们具有特定的错误处理和变量赋值语义。
  • 出于性能原因,常规内置函数通常在 shell 中实现,因为它们操作 shell 内部(例如cd)或者因为它们在技术上更容易使用这种方式。在某些情况下,常规内置也可能以非内置形式存在。后一种情况的一个例子是echo,它在每个现代 shell 中都实现,但也存在,主要是由于历史原因,如/bin/echo.

将关键功能内置的另一个原因是它确保核心功能继续保持可访问性,即使您的系统发生了灾难性的事情。例如,如果共享库损坏或无法访问,如果您无法访问/bin/sbin,或者如果系统资源受限,不允许运行更多可执行文件,这可能很重要。

  • `cd` 实际上不*做*任何事情。`cp` 将文件从这里复制到那里,然后 `find` 搜索文件系统。`cd` 只是改变你“在”的目录,这只是在 shell 中导航的一个概念上的想法。 (4认同)