Shell: o que é, importância e usos

Para quem tem algum nível de envolvimento no mundo Linux, a palavra shell é razoavelmente conhecida.

Mas o que muita gente não sabe, é que shell não é uma particularidade do Linux, mas de qualquer sistema operacional, incluindo o que você tem instalado no dispositivo que está usando para ler esse artigo.

Não, não importa o sistema que você esteja usando!

Afinal, o que é um shell, porque ele é importante e que usos podemos ter deles, são algumas das dúvidas que iremos responder…

O que é shell?

Para além do fato que shell não é exclusivo do Linux, mas de todo sistema operacional, podemos dizer que shell é uma camada que faz intermediação de comandos e/ou serviços do sistema operacional e o usuário.

Ok, essa pode não ser a melhor definição de shell, especialmente para quem não é um grande conhecedor de como funcionam as coisas nos muitos dispositivos (smartphone, notebook, tablet, etc) que utilizamos.

Shell é uma palavra em inglês mais comumente usada para designar concha. Sim a carapaça que recobre, envolve e protege vários moluscos.

Em sistemas operacionais, além do papel de proteção, um shell também tem uma função seletiva, na medida em que só é permitido executar ações dentro de certos parâmetros e de acordo com privilégios dos usuários.

Há basicamente dois grupos ou tipos de shell – CLI e GUI.

Os shells CLIs – que é a sigla de “Command Line Interface” – são aqueles que usam uma interface baseada em linha de comando. Ou seja, para executar qualquer ação, é necessário digitar um comando equivalente.

Assim, se você quer que o sistema escreva na tela uma simples mensagem, como “Olá mundo!”, é necessário digitar a linha de comando:

echo “Olá mundo!”

E a seguir pressionar a tecla “enter”.

Já os shells GUI – que é a sigla de "Graphical User Interface" – são os que fazem uso de uma interface gráfica para que os mesmos comandos não precisem ser digitados.

Entre os shells baseados em GUI mais conhecidos pelos usuários do Windows, temos o Windows Explorer.

Sim, essa popular ferramenta usada para mover arquivos, copiar conteúdo para e a partir do pendrive, entre muitas outras ações, é um shell.

Suponhamos que você queira renomear um arquivo hipotético lista-de-convidados.txt para lista-atualizada.txt, por exemplo.

No Windows Explorer, você clica com o botão direito do mouse sobre o arquivo e seleciona a opção “renomear” e então digita o novo nome.

Para realizar exatamente a mesma ação usando CLI, por exemplo, no Windows Powershell, você digita:

rename-item lista-de-convidados.txt lista-atualizada.txt

e pressiona “enter”.

Portanto, o shell seja por meio de uma interface com linhas de comando ou gráfica, realiza ações básicas do sistema operacional para administrar dados, os quais podem ser os muitos arquivos que você tem armazenados no seu dispositivo, ou outros aplicativos.

Qual a importância do shell?

Já deve estar um tanto evidente a importância do shell a partir da última definição que demos dele.

Mas quando damos outros exemplos clássicos de shells do Windows, começa a ficar ainda mais clara a sua importância.

Quando você clica no ícone do Windows 10 e se abre o menu iniciar, todas as opções que você visualiza e que são clicáveis, correspondem a atalhos para uma linha de comando, tal como o exemplo de renomear um arquivo e evitam que você tenha que digitar qualquer coisa para que a ação desejada ocorra.

A área de trabalho, é outro exemplo. Nela o usuário tem agrupados ícones de programas frequentemente usados, arquivos que estão sendo editados, fotos e tudo o mais que se deseje um acesso rápido para uso diário.

No MacOS, nas muitas distribuições Linux e mesmo em outros sistemas operacionais, como o Android que você tem no smartphone, também há shells do tipo GUI e que desempenham papel similar aos exemplos citados para Windows.

Portanto, entre muitas coisas, o shell permitem usufruir de funcionalidades dos sistemas operacionais.

Quando se pensa em boa parte dos aplicativos que temos instalados no notebook, por exemplo, boa parte deles se não são shells típicos, em um dado momento usam seus recursos. Assim, quando você cria uma planilha, um texto ou uma apresentação e salva o trabalho no dispositivo, o respectivo programa usa a função do shell correspondente.

Visto dessa forma, se não houvesse o shell, quase nada do funcionamento dos programas ou apps seria possível.

Usos do shell

Mas além do que já vimos até aqui, o shell pode fazer ainda muito mais…

E isso vem do uso mais comum que temos associado ao shell, que é o terminal e, portanto, mais frequentemente relacionado a alguma distribuição Linux.

O terminal por sua vez, nada mais é do que a interface para linha de comando.

Como já vimos, em teoria tudo que é feito via interface gráfica, também é por linha de comando. Mas o inverso, não necessariamente é verdade, ou pelo menos, não até que alguém crie em interface gráfica determinadas ações equivalentes.

Inclusive essa costuma ser a motivação por trás de quem prefere administrar um sistema via linha de comando, em detrimento da interface gráfica – o poder da linha de comando.

Considere a situação hipotética – mas perfeitamente possível – de que você tenha uma pasta de mensagens marcadas como SPAM e que cresce diariamente com cerca de 200 novos arquivos e que diariamente você precise remover todos as mensagens mais velhas do que 30 dias, ou algum outro critério específico, do contrário logo você não terá mais espaço de armazenamento.

É possível usando algo como o Windows Explorer ou um programa equivalente?

Sim, é. Mas pode dar algum trabalho e consumir um tempo valioso. Ao usar por exemplo, a coluna de “data de modificação” para ordenar das mensagens mais antigas para as mais novas, é possível selecionar inadvertidamente alguma que não deveria, por exemplo. Sim, também é.

Enfim, é uma ação de administração de conteúdo que pode representar trabalho e estar sujeita a erros, mesmo que involuntários.

Mas por meio da seguinte linha de comando, bastará aguardar o tempo de remoção do conteúdo, o qual é o mesmo para a ação via linha de comando ou interface gráfica.

find /home/usuario/mail/spam/cur/ -type f -mtime +30 -delete

Ok, pode ser que dada a pouca familiaridade com o bash – o “programa” mais popular para linhas de comando no Linux – e ao gasto de apenas 2 minutos diários a mais, você ainda prefira o método gráfico. Em um ano inteiro de trabalho, não chega nem a 7 horas, o que pode ser aceitável.

Mas e quando esse exemplo possível, não é a única ação do tipo?

Imagine que você tenha um servidor empresarial, no qual dezenas de colaboradores tenham pastas com arquivos que precisem de algum tipo de processamento baseado em critérios, tal e qual o nosso último exemplo.

Automatização de rotinas, por meio de shell scripts, é um dos usos mais comuns.

Shell scripts, nada mais são do que conjuntos de linhas de comando, a exemplo da última e que processam seguidamente ou de acordo com algoritmos, ações, comandos, outros programas e até mesmo outros shell scripts.

Da mesma forma que nas linguagens de programação, é possível verificar condições lógicas, incluir laços de controle, variáveis, entre outras estruturas de programação, para produzir resultados desejados.

De fato, é possível programar para shell tal como em muitas outras linguagens e dessa forma conseguir ainda mais poder do que uma única linha de comando.

Como exemplo, na HostMídia os administradores de servidores, dispõem de um arsenal de scripts que os ajudam no gerenciamento dos servidores e que vão desde a avaliação dos muitos logs produzidos pelo sistema operacional e pelos diferentes serviços para geração de relatórios, ao controle dos recursos por parte dos usuários.

Assim, descobrir quais usuários mais enviaram mensagens de e-mails em um dia e quantos foram enviados e salvando isso em um arquivo chamado “ranking_e-mail_hoje”, pode ser conseguido com um script tão simples como:

#!/bin/sh

#Verifica quais contas mais enviaram e-mail no dia

hoje=`date +%Y-%m-%d`

egrep $hoje /var/log/exim_mainlog | egrep "<= " | awk '{print $5}' | sort | uniq -c | sort -n > ranking_e-mail_hoje

Tente fazer isso usando um shell GUI qualquer!

Conclusão

Shell é um recurso de qualquer sistema operacional, o qual por meio de uma interface de linha de comando ou interface gráfica e que permite executar comandos, outros programas, serviços e até mesmo outros shells para que o usuário execute ações sobre o sistema operacional.

Comentários ({{totalComentarios}})