Bourne Again SHell (BASH) vs PowerShell

Conheça as diferenças e semelhanças entre o Terminal BASH do Linux e o PowerShell do Windows


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


1. Introdução

Usuários de Linux sempre ouvem falar do PowerShell do Windows; e da mesma forma o pessoal do Windows em algum ponto possa ter ouvido falar do BASH.

Agora, vou esclarecer quem é quem, suas diferenças e semelhanças e quais vantagens cada um deles traz para seu ambiente.

Escolhi o BASH por ser o terminal (shell) linux mais popular dentre os diversos sistemas e diferenciar pouco de outros shells, basicamente em layout e atalhos. Também é o shell padrão do macOS e igualmente disponível para FreeBSD. E o PowerShell, por ser uma versão renovada do antigo CMD.exe, suportando os scripts mais recentes e ser o shell padrão do Windows 10 e parte do Terminal do Windows 11.

2. O que é o BASH?

O GNU BASH é uma evolução muito mais interativa do Bourne Shell (sh) do sistema FreeBSD. A familia de shells Bourne permitem a execução de sequências de comandos inseridos diretamente no terminal ou ainda lidos de arquivos de texto conhecidos como shell scripts. Neles se podem invocar comandos internos aos próprios shells – conhecidos como comandos “builtins” – ou ainda arquivos binários ou scripts de terceiros arquivados nos dispositivos de armazenamento do sistema.

Apresenta recursos e características de uma linguagem de programação de alto nível além de ser compatível com as normas POSIX, de forma que os scripts bash podem ser executados em diversos sistemas “tipo UNIX”, como um padrão.

O BASH executa scripts em formato .sh e funciona como interface global de usuário, chamada CLI – CommandLine Interface – Interface de Linha de Comando. Ou seja, tudo que o usuário faria num desktop com ícones, mouse e menus, faz via terminal de comandos, desde navegar entre pastas, até acessar a internet.

Observações:
O shell do linux existe desde o momento em que o sistema nasceu. Quando Linus Torvalds criou o linux em 1991, ele criou um pequeno sistema que consistia do kernel (módulos e drivers de hardware), instalou o compilador GNU GCC, que compilava programas escritos em C para que o pequeno sistema de Torvalds pudesse funcionar nos computadores da época e com ele portou o shell BASH para o Linux. É por isso que o sistema base se chamava “GNU/Linux”: Era composto do GCC e do Shell do GNU + o kernel Linux, um dependia diretamente do outro.

Bourne Again SHell do EndeavourOS

3. O que é o PowerShell?

PowerShell é um framework da Microsoft para automação de tarefas e gerenciamento de configuração, consistindo de um shell de linha de comando e linguagem de script associada embutida do .NET Framework.

Consequentemente, os comandos via PowerShell são compostos de instruções para comunicar com o .NET Framework e fornecem acesso completo ao COM e o WMI, permitindo que linguagens de script como Visual C++, VBScript ou Windows PowerShell gerenciem computadores pessoais e servidores Microsoft Windows, tanto localmente quanto remotamente.

Curiosamente, o PowerShell tambem é OpenSource e funciona no Linux! Pode ser baixado aqui disponivel em .deb, .appimage, .rpm, além de .pkg para macOS.

Observações:

  1. O PowerShell nasceu em 2006 e só ganhou espaço nos últimos 6~8 anos.
  2. O CMD.exe nasceu junto do Windows como base do MS-DOS, era a interface de manipulação do sistema em modo texto á sua época. O PowerShell tem o mesmo poder e é basicamente uma evolução do cmd.
Prompt de Comando, mais conhecido como cmd.exe, era a antiga
interface por linha de comandos do Microsoft Windows
Power Shell, interface por linha de comandos do Microsoft Windows 10

Comparar o BASH e o PowerShell não é uma tarefa simples. Cada uma dessas interfaces por linha de comando nasceu com um objetivo bem definido e possui suas particularidades, que destaquei logo abaixo.

4. Semelhanças entre os shells

4.1 Funcionamento

Ambos são utilizados para comandar o computador pois são interfaces por linha de comando; Isto é, quando há a ausência de uma interface gráfica de usuário (desktop, mouse, janelas e menus) como no caso de servidores, é por ele que você faz o computador funcionar.

4.2 Comandos Básicos

Tanto o BASH quanto o PowerShell compartilham comandos em comum que possuem a mesma funcionalidade. Entre eles, destaco:

  1. ls -> listar arquivos de uma pasta
  2. mkdir -> cria uma pasta no diretório atual
  3. cd -> muda o diretório ativo no momento
  4. rm -> remove arquivos ou pastas de um diretório
  5. diff -> lista a diferença entre 2 arquivos
  6. vim -> editor de textos
  7. ps -> mostrar os processos atuais
  8. kill -> mata um processo
  9. man -> exibe o manual de um comando ou programa
  10. cat -> exibe o conteúdo de um documento de texto ou script
  11. cp -> copia um arquivo ou pasta de um diretório a outro

5. Diferenças entre os shells

5.1 Funcionamento

O PowerShell possui mais suporte que o BASH, por questões programáticas. Da maneira que:

  1. O PowerShell tira proveito dos scripts dos frameworks da Microsoft, em destaque para o .NET. Isso auxilia e agiliza na programação e gerenciamento do sistema. Por exemplo, você pode usar um get-adobject e determinar quais propriedades devem ser carregadas desses objetos e atribuir tudo isso dentro de uma variável, e posteriormente realizar diversas ações diretamente na variável que todos os objetos dentro dela serão tratados. Se fossemos fazer o mesmo no BASH, teríamos que criar uma matriz, um loop, tratar as propriedades com sed, validar com um tipo de test ou If e etc, de maneira mais granular e um pouco mais complicada.
  2. Ao contrário do BASH, o PowerShell utiliza Programação Orientada a Objetos, que tornam a programação do mesmo facilitada. Apesar dos sysadmins do Windows optarem em sua maioria por gerenciadores gráficos como o IIS, o PowerShell é igualmente prático.

Já o BASH, possui um maior ecossistema de aplicações que funcionam por interface de linha de comandos. De forma direta, você se sentirá mais independente da interface gráfica ao usar o BASH do que usando PowerShell, já que o BASH suporta por exemplo exibição de imagens, reprodução de multimídia como músicas e navegação na internet usando um browser por CLI.

O PowerShell possui vantagens para programadores ativos, que lidam diretamente com os frameworks da Microsoft e não necessariamente com outras aplicações instaladas na máquina.
Enquanto que o BASH não possui um “alvo” e te dá mais maleabilidade no controle do sistema.

5.2 Comandos básicos comuns e diferentes entre Linux / Windows

  1. chmod no Linux / attrib no Windows -> mudar permissões e atributos
  2. chown no Linux / icacls no Windows – mudar quem é o proprietário
  3. du no Linux / measure no Windows – mostrar o consumo de disco
  4. find no Linux / gci no Windows – busca por um arquivo
  5. df no Linux / gdr no Windows – mostrar volumes montados

5.3 Comandos exclusivos do Linux:

  1. ln – criar um link
  2. top – exibir processos do sistema
  3. bg – coloca um processo ativo em segundo plano
  4. fg – trás um processo de volta á primeiro plano
  5. w – quem está logado e o que está fazendo
  6. whereis – exibe o caminho completo de um comando
  7. suporte a exibir imagens em .jpg ou .png diretamente no terminal
  8. diversos programas que executam somente via linha de comando:
    ranger, w3m, links, arp-scan, etc;

5.4 Comandos exclusivos do Windows:

  1. mklink – cria um link
  2. where – exibe o caminho completo de um comando

5.5 Lógica de Comandos do Sistema Linux

No Linux não existe bem uma regra para os comandos existentes.
O que temos são nomes que se assemelham á sua função. Por exemplo:

Temos comandos para parar, iniciar e reiniciar processos:
$ sudo systemctl reload PROCESS
(superusuário controle-do-sistema reiniciar PROCESSO)
Ou comando para reiniciar um módulo do kernel:
$ sudo modprobe -r psmouse
(superusuario configurar-modulo reiniciar mouse)

5.6 Lógica de Comandos do Sistema Windows

Há uma convenção de nomeação para os cmdlets que compõe o padrão do PowerShell. A convenção é “Verb-SingularNoun” (verbo-nome-singular). Por exemplo:

Para parar um serviço:
C:\user\folder\> stop-service SERVICE-NAME
(pare-serviço NOME-DO-SERVIÇO)

Para iniciar um trabalho em segundo plano:
C:\user\folder\> start-job -ScriptBlock {Get-Process}
(iniciar-trabalho -código processo)

Para coletar todas as regras de firewall do Active Store:
C:\user\folder\> get-netfirewallrule -PolicyStore ActiveStore
(pegar-regras-firewall politica-da-Store ActiveStore)

6. Disponibilidade de Ambos Shells em Ambos Sistemas

O Bourne Again SHell está disponível para Windows através do Windows 10 após a parceria entre a Canonical e a Microsoft. Há também a possibilidade de executá-lo sob o Cygwin, um pacote de programas de software livre que visam aumentar a compatibilidade de programas do Linux no Windows.

Mas em ambos os casos, há algumas limitações:

  1. Ele não funcionará com softwares de servidor gráfico, como o X.Org.
  2. É destinado a desenvolvedores que desejam executar utilitários de linha de comando Linux no Windows.
  3. Esses aplicativos recebem acesso ao sistema de arquivos do Windows, mas você não pode usar os comandos do Bash para automatizar programas normais do Windows ou iniciar comandos do Bash a partir da linha de comando padrão do Windows.
  4. Nem todo aplicativo de linha de comando funcionará nele.
  5. Não existe um acesso aos frameworks da Microsoft através do BASH.

Enquanto que do lado pinguim, o PowerShell está disponível no GitHub em formato .deb, em .rpm, em .appimage ou .pkg para macOS, permitindo que você dê todos os comandos que daria normalmente, remotamente, num servidor Windows mas através de um sistema Linux; lembrando que o PowerShell não tem poder no Linux.

7. Conclusões

O BASH desde o início foi projetado para ser uma interface de usuário por linha de comando completa em alternativa ao uso de servidor gráfico; da mesma forma que o PowerShell foi concebido para tarefas de manutenção de servidores Windows e não propriamente para usar o sistema de maneira “cotidiana”.

Na prática, isso implica que, enquanto que pelo PowerShell podemos dar diversos comandos para iniciar ou parar processos do sistema, executar scripts específicos dos frameworks da Microsoft para manutenção ou programação no sistema, ou seja, comandos e ações mais restritivas aos sysadmins, o Linux segue a filosofia dos demais sistemas baseados em UNIX de possuir programas com suporte á serem controlados e executados via linha de comando, por esta ser a interface universal.

Portanto o BASH possui uma maior quantidade de programas suportados que o torna uma interface por linha de comandos independente da parte gráfica, possuindo desde browser para navegar na internet (w3m), gerenciador de arquivos e pastas (ranger), exibir imagens no terminal (fbi), até cliente de e-mails (mutt).

De tal maneira o Linux possui nativamente os TTY’s, servidores de interfaces de terminal disponíveis por padrão em basicamente todos seus sistemas, funcionando como alternativa prática quando a interface gráfica der algum problema e não iniciar; ou fechar inesperadamente.

TTY (TeleTypewriter) cujo acesso é com CTRL+ALT+F1.
Para voltar troque F1 por F7

Você substitui uma interface de usuário com janelas, mouse e menus pelo BASH; Mas não troca facilmente a interface do Windows somente pelo PowerShell; você poderá ficar limitado nesse aspecto.

Inverter isso também não é cômodo, pois o BASH não tem tantos poderes no Windows; enquanto que o PowerShell se restringe á programação de VisualBasic ou mesmo Visual C++ e não dará comandos diretamente ao Linux. Cada shell opera melhor em seu ambiente original.

8. Análise Opinativa

Não existe bem um vencedor, já que o Windows nunca foi originalmente concebido para suportar massivamente programas por linha de comando e o PowerShell se mostra um poderoso software para programação e manutenção em servidores Windows. Temos softwares diferentes para propósitos diferentes.
Além disso, os usuários normais não veem produtividade em usar telas de comando. – Apesar que o uso do MS-DOS somente pelo prompt de comando era normal em 1990 e na época não víamos ninguém reclamando!

Mas a limitação de uso do PowerShell, em diversos aspectos além do fato do próprio sistema ter sido concebido com foco na interface gráfica, impedem que seu uso seja maior e melhor difundido, tornando-o a simples e temerosa tela preta com letras brancas (hoje tela azul e letras brancas) que os usuários Windows querem manter distância, longe do sucesso e das facilidades que uma interface por linhas de comando (como o BASH) promovem no universo UNIX.

#UrbanCompassPony

Fontes:
Dados gentilmente cedidos pelo usuário Patrick Costa da Silva, na página Linux Universe. Muito obrigado!
DocsMicrosoft
cecsWrightEdu
mcseSolution
Wikipedia: BASH e PowerShell

2 comentários em “Bourne Again SHell (BASH) vs PowerShell”

  1. Minha caminhada na informática começou com um DX4 75MHz, 8MB de RAM e HD de 350 MB, rodando Windows 3.11. Lembro bem das velhas telas pretas com letras brancas que me fascinavam (a mais de vinte anos) e, logo depois, a interfáce gráfica.
    Quando migrei do Windows 7 pro Debian (a 3 anos), aquela telinha preta com letras brancas voltou a me fascinar. Hoje, sempre que posso, evito a interface gráfica, não por não gostar, pelo contrário, acho excelentes (principalmente a grande variedade de DEs para Linux), mas, tanta coisa pode ser feito mais rapidamente com o terminal que prefiro fazer via CLI.
    Já no Windows, apesar de algumas (pouquíssimas) coisas eu preferir ir direto para o CMD (ou executar), a grande maioria faço pela interface gráfica mesmo.
    O PowerShell pra mim ainda é um grande mistério.
    Uma coisa que “acidentalmente” descobri, pesquisando por “*.ps1″ no HD, para localizar um script de mineração de bitcoins na máquina, é que alguns dos comandos em comum entre BASH e PowerShell são apenas aliases (como alias fucking=”sudo” xD), conforme pode ser observado no arquivo profile.ps1, no diretório C:\Windows\System32\WindowsPowerShell\v1.0\Examples.
    Sei de seu grande poder, mas, para mim, o PowerShell não é tão atrativo como end user como é o BASH.

    Responder
  2. Sistemas do tipo UNIX foram concebidos para operarem em modo texto, sem depender de forma alguma de GUI. Ao contrário do Windows – como o próprio nome diz: “Janelas” – que foi concebido para operar com GUIs e a depender totalmente dela.

    Por isso o BASH (e outros shells) se torna tão poderoso. Existem infinitas possibilidades de se fazer scripts em bash, inclusive manipular recursos dos DEs apenas por comandos, como por exemplo, dar play em uma faixa no Amarok (player de música do KDE).

    Já não é possível dizer o mesmo para sistemas Windows, cujos aplicativos dependem de cliques para startar procedimentos. Posso estar enganado, mas acho que o PowerShell não chega no mesmo nível do BASH para operações em linha de comando.

    No Linux em geral, a maioria dos aplicativos gráficos possuem opções em linha de comando (GIMP por exemplo), que possibilitam flexibilizar operações em scripts e a criar complexos sistemas apenas usando shell scripts.

    Essa flexibilidade dos *nix é a “graça” de se usar Linux. Para desenvolvedores como eu, usar Linux e macOS é uma mão na roda, me poupa tempo e me permite focar 100% no código sem precisar me preocupar com configurações de ambiente de desenvolvimento.

    Responder

Deixe um comentário