O que acontece quando você executa um comando no Linux?

A maioria dos usuários do Linux geralmente não tem conhecimento do funcionamento interno do sistema operacional. Você pode estar executando comandos do Linux no shell por um longo tempo, mas você já se perguntou o que está acontecendo nos bastidores quando você pressiona Enter ?

No final, você terá uma breve compreensão de como o shell processa o comando digitado no Linux.

Processando o Comando

Quando você insere um comando, a primeira coisa que o shell faz é quebrar o comando inteiro em "tokens". O shell irá então procurar por um nome de programa pertencente ao primeiro token na linha de comando.

Se não o encontrar em nenhum dos diretórios do caminho de pesquisa definido na variável de ambiente $ PATH ou no diretório local com o operador . , Ou não for um alias de shell ou função de shell, o shell apresentará um erro . Se encontrar um comando válido, o shell irá então passar por cada um dos outros tokens e decidir se é uma variável, um parâmetro do shell ou um argumento para o comando.

Se o shell determinar que é uma variável ou um parâmetro como o operador ~ para o diretório inicial, o shell irá expandi-los ou substituí-los por seus valores originais no comando.

Quando o shell tiver expandido quaisquer parâmetros ou variáveis, ele passará a string de comando para o comando, executando o programa com seus argumentos. O shell não determina se algum argumento é válido. Esse é o trabalho do comando.

Executando o Comando

Quando o shell inicia outro comando, como ele volta para o mesmo prompt que você estava usando antes? A casca faz uma cópia de si mesma, um processo chamado bifurcação. Esta cópia do shell se substitui pelo comando, com todos os argumentos que foram processados ​​anteriormente. Isso é conhecido como "exec" e o processo combinado é conhecido como "fork-and-exec".

Por exemplo, quando você executa o comando ls , o processo do shell se bifurca usando o método fork () e cria outra instância do shell. Dos dois processos de shell em execução no sistema, o shell adicional executará ls usando a função exec () , transformando-se em uma instância do comando ls.

Enquanto isso, o shell original aguarda a conclusão do comando. É por isso que você pode usar o controle de tarefas para suspender tarefas e executá-las em segundo plano no shell.

Relacionado: O que é um processo no Linux?

Relatando o status de saída

Os comandos do Linux relatam se foram executados com êxito ou não por meio de seu status de saída. Como o nome sugere, os programas relatam seu status de saída quando terminam de ser executados. Eles fazem isso por meio do $? variável de ambiente, que contém o status de saída do último comando de execução.

Por convenção, um status de saída 0 indica uma execução bem-sucedida, enquanto qualquer coisa diferente de 0 geralmente significa um erro. Seu shell também pode indicar um status de saída diferente de zero na linha de comando, dependendo de como seu prompt está configurado.

A captura de tela acima é um exemplo que mostra um prompt Zsh personalizado que mostra um status de saída de erro de 127 devido a um comando que não existe.

Agora você sabe como funcionam os comandos do Linux

Agora que você está ciente de como o shell do Linux processa um comando, bifurca e executa a si mesmo, e como os programas relatam seu status de saída, você pode usar a linha de comando com mais eficácia.

Vários shells do Linux estão disponíveis para os usuários gratuitamente. Embora cada um desempenhe mais ou menos o mesmo trabalho, eles são diferentes em muitos aspectos. Você pode tentar instalar alguns dos shells em seu sistema e decidir por si mesmo qual deles é mais adequado para você.