Bash é uma linguagem de linha de comando (sabe aquela tela preta) para sistemas operacionais baseados em Unix, como o Linux. Ela permite que você controle seu computador utilizando comandos programáveis. Sendo você um desenvolvedor de softwares ou administrador de sistemas, existem diversas razões do porque aprender Bash ou Shell e tirar o melhor do ambiente, por meio da linha de comando, aumentando sua produtividade.

Além de programadores e administradores, aprender Bash é uma habilidade valiosa para os profissionais que trabalham com dados. Não se preocupe, você não precisa ser um Hacker para usar o terminal e programar em linha de comando

O que é Bash?

Resumidamente, Bash é a interface de linha de comando (CLI - command line interface) do Unix, Linux, Centos. É comum ser chamado de terminal, linha de comando ou shell. Ele é uma linguagem de comando que nos permite trabalhar com arquivos em nossos computadores de uma forma muito eficiente e, com frequência, de maneira mais poderosa do que usar uma GUI (interface gráfica do usuário).

Fazer a mudança de interfaces gráficas de usuário (GUIs) para uma interface de linha de comando pode parecer intimidador, mas lhe garanto que é um aprendizado simples e que em pouco tempo começa a melhorar a produtividade dos profissionais no dia a dia.

A seguir, vou apresentar uma série de razões para convencer você de que vale muito a pena aprender Bash:

De acordo com a pesquisa de desenvolvedores Stack Overflow de 2020, bash / shell / powershell (ou seja, a família de intérpretes de linguagem de linha comando do Linux) é a sexta linguagem mais usada no geral, ficando à frente de Python e R. Também foi associada a salários mais altos do que Python ou R, de acordo com a mesma pesquisa, além de obter uma classificação elevada na lista de linguaens de programação mais amadas (53,7%).

E embora a pesquisa do StackOverflow abranja programadores e engenheiros de software de todas as naturezas, a linha de comando é de particular relevância para cientistas de dados porque Bash / Shell / Powershell se correlaciona fortemente com tecnologias de ciência de dados como Python, IPython / Jupyter, TensorFlow e PyTorch. Estas conclusões também são apontadas pelas pesquisa de desenvolvedores Python (2019, 2020) mais recentes conduzidas pela Python Software Foundation.

2. Habilidades de linha de comando ajudam a construir processos de dados repetíveis

Parte do trabalho de um cientista de dados é garantir que certas informações estejam disponíveis regularmente, muitas vezes diariamente. Na maioria das vezes, esses dados são adquiridos, processados e exibidos da mesma maneira.

A linha de comando é uma ferramenta adequada para esse propósito, porque séries de comandos são facilmente organizados para execução automática e de maneira reproduzível repetidamente.

Considere o seguinte cenário:

Sua empresa decide investir em análise de dados. Vários profissionais de dados se juntarão à equipe. Você, como administrador dos sistemas e servidores, tem a tarefa de garantir que suas máquinas estejam com o ambiente de trabalho com tudo de que precisam para começar.

Se você trabalhar com um CLI (intérprete de linguagem de comando), pode escrever alguns scripts que irão instalar, configurar e testar tudo automaticamente.

Caso contrário, terá que recorrer a uma GUI e fazer os mesmos movimentos do mouse e clique, repetidamente, em várias máquinas - maldita LER.

Esse é apenas um exemplo de como as programar para terminais pode ajudar a tornar os processos de ciência de dados mais escalonáveis e repetíveis.

3. Aprender Bash torna você mais flexível

Em papéis como cientista de dados, programador, administrador de sistemas; você frequentemente descobrirá que tem mais flexibilidade se puder usar o terminal, em vez de ter que depender de movimentos de mouse e clicar em GUIs.

Como a linha de comando é um programa que executa outros programas (esta é a origem do nome “shell” - concha), a interação entre os programas é freqüentemente mais fácil de ajustar pela linha de comando.

Após dominar os comandos bash, mesmo os mais básicos, é relativamente fácil escrever scripts - pequenos programas que executam no terminal. E os scripts de shell tornam a construção de todos os tipos de pipelines de dados e fluxos de trabalho muito mais simples.

De forma mais ampla, saber como usar o shell oferece uma segunda opção para interagir com seu computador.

Mesmo linhas de comandos que parecem impossíveis de serem lembradas e difíceis de manter para comandos repetidos de seu dia a dia, podem ser facilmente organizadas usando apelidos (alias) em bash.

Você sempre pode usar a GUI quando quiser, mas a linha de comando pode fornecer mais poder direto e controle para quando você precisar. Além de poupar tempo para os trabalhos repetitivos, como citado no motivo 2.

4. Trabalhar com arquivos de texto é fácil

Os arquivos de texto estão entre os métodos mais comuns de armazenamento e tratamento de dados. Quase qualquer projeto de ciência de dados envolverá algum trabalho com arquivos de texto. Ser capaz de lidar com arquivos de texto com rapidez e eficiência é, portanto, uma habilidade muito útil para um cientista de dados.

Desenvolvedores de software também se beneficiam com o trabalho em arquivos de texto com transporte facilitado de dados entre sistemas ou ambientes.

O shell possui ferramentas de processamento de texto muito poderosas, como AWK e sed, que ajudam a se familiarizar com os arquivos e facilitam a limpeza de dados.

Por exemplo, o código abaixo usa AWK para imprimir a primeira e a terceira colunas de um arquivo denominado a_csv_file, onde o valor do segundo campo é Dataquest, usando uma vírgula como separador de campo.

awk 'BEGIN {FS=","} {if ($2=="Mazer") {print $1 $3} } a_csv_file'

5. Utiliza menos recursos de processamento

Quando você está trabalhando com recursos de computação limitados ou simplesmente quer maximizar sua velocidade, o uso da linha de comando, em geral, será melhor do que usar uma interface gráfica. Isto porque usar uma GUI significa dedicar muitos recursos à renderização da saída gráfica.

Isso é válido tanto para trabalhar localmente quanto remotamente. Ao se conectar remotamente para utilizar um servidor com interface gráfica o consumo largura de banda será muito maior do que trafegar apenas texto simples quando se usa os terminais.

Além disso, a latência, ou seja, o “intervalo de tempo entre a requisição e a resposta”, será maior ao usar uma GUI, o que pode ser particularmente frustrante se você estiver tentando controlar um mouse que está um ou dois segundos atrás de seus movimentos reais.

Se você estiver apenas digitando na linha de comando, a latência provavelmente será menor e também será mais fácil de controlar, pois você sabe exatamente onde o cursor está a qualquer momento.

6. Gerenciamentos de “nuvem” (cloud) são feitos por linha de comando

Os serviços em nuvem geralmente são conectados e operados por meio de uma interface de linha de comando.

Isso é particularmente importante para trabalhos de gestão de ambientes de implantação de sistemas e ciência de dados mais avançados, como aprendizado profundo (Deep Learning), mineração de dados (Data mining) , em que seus recursos de computação locais são provavelmente insuficientes para as tarefas que você gostaria de realizar.

O artigo de 2018 “Tensorflow on AWS”, da Nucleus Research, expõe que:

De acordo com o mesmo artigo, “96 por cento do aprendizado profundo - deep learning, hoje é executado na nuvem”.

Em resumo, se você vai trabalhar com serviços avançados em nuvem, conhecimentos de linha de comando serão necessários, desde para mover seus dados de e para a nuvem com eficiência, até para o gerenciamento e execução de rotinas nestes ambientes.

7. Conhecimento em Unix Shell são reutilizáveis em outros shells

Existem apenas alguns shells populares (bash, zsh, fish, ksh, tcsh, cmd, Windows PowerShell, etc.) e eles são mais semelhantes do que diferentes, tornando mais fácil alternar entre eles.

Por exemplo, os comandos bash que você conhece funcionarão em máquinas baseadas em Unix, como Macs e computadores Linux. Mas muitos dos mesmos comandos também funcionam no Windows no Prompt de Comando e / ou no Windows PowerShell.

Essa compatibilidade cruzada é particularmente útil quando você está usando serviços online que requerem algum tipo de interface de linha de comando. Mesmo que o sistema deles não use o bash, ele usará um CLI semelhante o suficiente para que você consiga trabalhar com nenhum ou mínimos ajustes.

8. A execução de um grande número de ações será mais rápida na digitação do que em cliques

A pesquisa “Hidden Costs of Graphical User Interfaces: Failure to Make the Transition from Menus and Icon Toolbars to Keyboard Shortcuts” - “Custos ocultos de interfaces gráficas de usuário: Falha ao fazer a transição de menus e barras de ferramentas de ícones para atalhos de teclado”, mostra que o uso do mouse se estabiliza muito rapidamente, enquanto o uso do teclado, apesar de sua curva de aprendizado inicial, tende a ser mais eficiente.

251 usuários experientes do Microsoft Word receberam um questionário avaliando sua escolha de métodos para os comandos que ocorrem com mais frequência. Ao contrário das expectativas, a maioria dos usuários experientes raramente usava os atalhos de teclado eficientes, preferindo o uso de barras de ferramentas de ícones.

Um segundo estudo foi feito para verificar se os atalhos de teclado são, de fato, o método mais eficiente. Seis participantes executaram comandos comuns usando seleção de menu, barras de ferramentas de ícones e atalhos de teclado. Os atalhos de teclado foram, como esperado, os mais eficientes.

Em outras palavras: mesmo se você sentir que está trabalhando rapidamente por meio de uma GUI, há uma boa chance de que, pelo menos para algumas tarefas, você seja mais eficiente na linha de comando.

9. Auditar e depurar é mais fácil

Como é muito fácil rastrear todas as suas atividades executadas na linha de comando, a auditoria e a depuração (testes) são muito mais fáceis.

Você pode facilmente examinar o registro de histórico (log) para rastrear cada ação realizada no shell, ao passo que, se um clique errado levar a um erro ao trabalhar com uma GUI, provavelmente não haverá registro disso.

Auditoria e depuração de erros são tarefas essenciais no dia a dia de administradores de servidores, programadores e cientistas de dados. Desta maneira, o uso de interfaces gráficas tende a prejudicar tanto a qualidade quanto à análise de segurança nos ambientes destes profissionais.

Além disto, auditoria está intimamente relacionada à segurança, e gerir segurança por meio de usuários e grupos de usuários em Linux e Unix usando bash é muito simples.

10. O Shell do Linus / Unix está disponível todo lugar

Embora seja integrado apenas em máquinas Mac e Linux, os usuários do Windows ainda podem utilizar ferramentas como SWL (Subsistema do Windows para Linux), Cygwin e MinGW - e, como mencionado anteriormente, muitos dos comandos bash que você aprenderá funcionam nas opções nativas do Windows, como o prompt de comando.

Isso significa que os conhecimentos de linha de comando que você aprende podem ser usadas em praticamente todos os computadores que você encontrar (incluindo sua máquina pessoal, independentemente do sistema operacional que você usa).

11. A linha de comando é mais simples do que você pensa e dará um grande poder ao seu dia a dia

Em geral há um grande equívoco por parte de iniciantes de que usar a linha de comando, ou programar para terminal, requer que você conheça várias centenas de comandos. Na verdade, embora existam centenas de comandos disponíveis para uso, é provável que você precise apenas de uma pequena porcentagem desses comandos para realizar a maioria das tarefas comuns no seu dia a dia como administrador de sistemas ou cientista de dados.

Segue um trecho do excelente Livro The Linux Command Line:

Quando sou solicitado a explicar a diferença entre o Windows e o Linux, costumo usar uma analogia com brinquedos.

O Windows é como um Game Boy. Você vai à loja e compra um novinho em folha na caixa. Você o leva para casa, liga e brinca com ele. Gráficos bonitos, sons legais. Depois de um tempo, porém, você se cansa do jogo que veio com ele, então volta à loja e compra outro. Este ciclo se repete indefinidamente.

Por fim, você volta à loja e diz à pessoa atrás do balcão: “Quero um jogo que faça isso!” apenas para ser informado de que tal jogo não existe porque não há “demanda de mercado” para ele. Então você diz: “Mas eu só gostaria que mudasse uma coisa!”. A pessoa atrás do balcão diz que você não pode mudar isso no jogo. Os jogos são todos lacrados em seus cartuchos. Então você descobre que seu brinquedo está limitado aos jogos que outros decidiram que você precisa.

O Linux, por outro lado, é como o maior conjunto "de montar" do mundo. Você o abre e é apenas uma enorme coleção de peças. Há muitos suportes de aço, parafusos, porcas, engrenagens, polias, motores e algumas sugestões sobre o que construir. Então, você começa a brincar com isso. Você constrói uma das sugestões e depois outra.

Depois de um tempo, você descobre que tem suas próprias ideias sobre o que fazer. Você não precisa mais voltar para a loja, pois você já tem tudo que precisa. O Conjunto de Montar assume a forma da sua imaginação. Ele faz o que você quiser. Sua escolha de brinquedos é, obviamente, uma coisa pessoal, então qual brinquedo você consideraria mais satisfatório?

Pronto para aprender a “linha de comando” ?

Agora que lhe apresentei os motivos, o porque aprender bash / shell, vou lhe avisar que estou preparando um excelente curso do básico ao avançado, que vai encaixar para as suas necessidades, não importando se você é um usuário avançado, um desenvolvedor, um administrador de sistemas ou um cientista de dados.