Por que o bash é usado em scripts de inicialização?

2

Por que os programas executados na inicialização / desligamento são gravados em bash script?

Se uma linguagem compilada (ou uma linguagem interpretada mais rápida, como Python) fosse usada, então seu tempo de execução seria menor.

    
por Marc 27.05.2012 / 15:52

3 respostas

5

É em grande parte histórico, em parte uma questão de controle de um aspecto de administração do sistema, em parte uma questão de portabilidade, em parte uma questão de depuração.

"De volta ao dia", não havia autoconf, dpkg, rpm. Você baixou o software, às vezes do UUCP, compilou o produto e determinou - com suas próprias convenções - onde instalar o produto. Conectar o produto ao sistema de boot / shutdown era considerado um dever do administrador do sistema. O administrador do sistema gravaria o script rc e o colocaria no local apropriado para esse sistema ( /etc/inittab , /etc/rcN.d/ , /etc/rc.local , /etc/inetd.conf ). Com menos sistemas não-Linux na vanguarda, o advento de rpm e dpkg torna algumas dessas opções locais menos importantes.

Os administradores de sistemas também gostam de ter alguma medida de controle sobre seus sistemas, e os mais fáceis de escrever, depurar e modificar posteriormente são os scripts de shell, não os programas em C.

Como eu aludi anteriormente, diferentes sistemas operacionais UNIX tinham maneiras diferentes de inicializar. Escrever um pequeno shell script para o seu próprio sistema era muito mais fácil do que o desenvolvedor escrever para cada possível sabor do UNIX que estava chegando (novamente, isso foi antes mesmo do autoconf): SysV, Ultrix, Irix, HP-UX, SunOS, Solaris, NextStep, NonStop, etc. Na maioria das vezes, eles se encaixavam em dois ou três mecanismos, mas cada um tinha sua própria reviravolta.

Os sistemas de inicialização podem ser complicados facilmente. É bom ter um script de shell onde você pode imprimir informações de depuração, alterar o fluxo, lidar com interações que os autores do programa não previram. Se este fosse um programa compilado, seria muito mais difícil encontrar tais erros.

Os sistemas modernos têm mecanismos mais recentes, mas a maioria ainda chamará shell scripts, principalmente pelas razões acima.

    
por 27.05.2012 / 16:25
2

A maior parte do processo de inicialização é limitada por E / S: espera que os arquivos sejam carregados do disco ou que os dispositivos sejam inicializados. Não haveria muito a ganhar com o uso de uma linguagem compilada.

Usar o ash em vez do bash acelera o processo de inicialização. O Ash foi projetado para ser mais rápido e menor que o bash, o que ele consegue com menos recursos (POSIX e não muito mais). Crucialmente, o cinza é iniciado mais rapidamente, o que dá uma vantagem mensurável, porque o processo de inicialização é dividido entre muitos scripts. Usar mais Python provavelmente tornaria o processo de inicialização mais lento, porque um interpretador Python é maior e leva mais tempo para iniciar cada processo.

Os sistemas Unix geralmente possuem um ou mais scripts por subsistema ou daemon que precisam ser inicializados. Esses scripts são frequentemente ajustados pelos administradores do sistema. O trabalho é dividido entre muitos pequenos programas que vêm de diferentes fontes (um por subsistema). Para muitos programas pequenos e simples, um shell é bem rápido; não haveria muito a ganhar usando uma linguagem compilada, mas haveria um enorme custo em flexibilidade.

    
por 28.05.2012 / 02:25
1

Modificar um script bash é mais fácil do que localizar fontes para executáveis.

Os scripts de inicialização, na maioria das vezes, são específicos da distribuição, por isso é importante facilitar a modificação.

Se você acha que os scripts do bash são lentos, você pode querer olhar para dash e escrever scripts sh compatíveis com POSIX que são executados no dash.

    
por 27.05.2012 / 16:31