Eu sei que a arquitetura de "camada" de qualquer sistema operacional * nix é o utilitário de shell do kernel ("interno para externo").
se instalarmos o Debian-Server e tivermos alguns utilitários CLI com ele,
todos esses utilitários devem funcionar da mesma forma com todos os shells (Bash, Dash, Korn, etc)?
Em outras palavras, os utilitários do Linux (que suponho serem dependentes do kernel) também são dependentes do shell?
Não é. Tudo é executado em cima do kernel, e os “utilitários” que não são scripts de shell não precisam de um shell e, portanto, não dependem de um shell específico.
Alguns programas precisam de outros, por exemplo, um cliente Wayland precisa de um compositor Wayland. Mas não há camadas gerais envolvendo conchas.
Estou assumindo que por "shell" você está se referindo ao shell específico que você usa como o shell de login do seu sistema Unix.
O software em sua máquina pode depender de um shell específico, mas não dependerá do shell que você usa como seu shell de login pessoal (ou seja, não dependerá do shell de login apenas porque é seu shell de login).
Um utilitário que é implementado como um script (ou parcialmente como um script) pode usar, por exemplo
/bin/sh
, ou algum outro shell para fazer certas coisas, mas funcionaria exatamente da mesma maneira se seu shell de login fossebash
,zsh
ouyash
, ou algum shell mais esotérico , assim como um script Python funcionaria da mesma forma para todos, independentemente do shell que eles usam.Lembre-se de que o Unix é um sistema operacional multiusuário e, como tal, utilitários de linha de comando, bem como aplicativos gráficos, funcionariam da mesma forma, independentemente de qual shell de linha de comando qualquer usuário usar (o "encanamento", ou seja, a sintaxe para iniciar o utilitário , pode diferir um pouco, mas seria consistente dentro do shell de qualquer usuário).
Para um exemplo de um utilitário que usa um script de shell, veja, por exemplo, o
firefox
executável em alguns sistemas (este pode ser um script de shell que inicia o binário real ).firefox
Alguns tipos de compiladores, por exemplo, OpenMPI, são implementados como invólucros de script de shell em torno do compilador real. Novamente, os programas que fazem isso funcionariam da mesma forma, independentemente do shell que o usuário esteja usando como shell de login.Por outro lado, um script de shell escrito para, por exemplo
zsh
, não funcionará de forma confiável quando executado por outro shell. Isso não deve ser surpresa, pois substituir o interpretador de qualquer script por outro pode muito bem quebrar esse script (por exemplo, executar um script Perl com o interpretador Ruby provavelmente falhará).