Comando cd do OS X em / usr / bin em vez de / bin

0

No OS X 10.8 eu estava olhando para minha pasta / bin e achei que o cd não estava lá, mas sim na pasta / usr / bin. Por que é que? Do FHS ( Filesystem Hierarchy Standard . Eu sei que / bin deve conter binários essenciais, ou seja, aqueles necessários quando nenhum outro sistema de arquivos é montado. CD não é essencial o suficiente? (A propósito, parece que o comando "su" também está em / Agora, eu sei que o OS X não segue estritamente o FHS, mas existe uma razão para essa localização diferente dos binários?

ggrim
fonte
1
Ao usar siglas, que podem ser incomuns para a maioria, por exemplo, FHS ( Filesystem Hierarchy Standard ), considere descrever ou vincular, de modo que aqueles que não os conhecem fora de sua cabeça não estejam totalmente perdidos.
user3439894
Como o FHS é Linux, por que deveria ou não se aplicar ao Unix?
Mark
@ user3439894 desculpe, você está totalmente certo. Eu editei a questão.
ggrim
@Mark eu pensei que o FHS é mais Unix do que apenas Linux
ggrim
A Wikipédia diz "Ele é mantido pela Linux Foundation. A versão mais recente é 3.0, lançada em 3 de junho de 2015. [1] Atualmente ela é usada apenas por distribuições Linux."
Mark

Respostas:

3

cdé um shell embutido e precisa ser construído para funcionar. Se ele fosse executado como um comando normal, ele seria executado como um subprocesso, mudaria o diretório desse subprocesso e então sairia ... não tendo nenhum efeito no diretório do shell pai.

Quanto a su: a distinção fundamental entre / bin e / usr / bin é que / usr / bin pode estar em um sistema de arquivos diferente da raiz e, portanto, não estar disponível no início do processo de inicialização; assim, / bin (e / sbin) deve conter todos os comandos necessários no início do processo de inicialização. No OS X, suaparentemente não é necessário durante a inicialização.

Gordon Davisson
fonte
Obrigado pela sua resposta útil! Por curiosidade ... cdser um shell embutido significa que ele é armazenado dentro do / bin / bash executável? (desculpe, eu entendo o significado da sua resposta, eu só não sei como um shell embutido é implementado)
ggrim
1
@ggrim: Eu não diria "armazenado dentro" tanto quanto "é parte de". Eu acredito que ele é realmente implementado como uma função incluída no bashcódigo-fonte. BTW, não é apenas bash - cada shell shell (zsh, dash, etc) tem que ter cdcomo um builtin, ou iria falhar pela razão que eu dei. Você pode estar interessado nesta pergunta anterior no Unix & Linux SE .
Gordon Davisson
Além disso, essa resposta tem uma nota histórica interessante sobre cdcomo um programa interno vs.
Gordon Davisson