O poder por trás do terminal Linux
Anderson Bosa
Posted on March 15, 2021
Choose your preferred language:
🇧🇷 Brazilian
Table of contents
- Introdução
- Comandos básicos
- Comandos que nos ajudam a se ajudar
- Tenha seus próprios snippets
- Prática!
Introdução
Procurar, diferenciar, analisar, compartilhar, descompactar, criptografar um arquivo, acessar computador na nuvem, converter um vídeo em gif e etc. Essas são algumas das coisas possíveis de se fazer com a linha de comando.
O terminal é uma varinha de condão para interagir com os recursos do computador. Permitindo a interação de maneira prática e flexível, o que a torna uma ferramenta muito poderosa.
Basicamente em todos os sistemas operacionais (e.g., Windows, Android, Mac and etc) a linha de comando é uma interface de texto para se comunicar com o computador (ou dispositivo).
Também conhecida como shell
, console
, prompt
, terminal
e entre outros nomes, o terminal pode assustar e deixar confuso em um primeiro contato. Como todo novo conhecimento, no início pode haver mais dificuldades. Porém, conforme vencemos essas barreiras vamos nos deparando com a nossa evolução.
Saber usar o terminal pode ser essencial ao tentar lidar com os problemas que pipocam no dia-a-dia como professional de TI. Eu li um post outro dia em que o autor disse uma coisa que me coçou:
Se você é um usuário Linux, o Terminal é provavelmente a ferramenta mais poderosa que você já teve. Mas o problema do Terminal é que você precisa aprender a usá-lo se quiser se beneficiar dele. - Mauro Garcia
aí eu: SIMMMMMMMMMM
Isso me coçou a querer compartilhar um pouco do que aprendi por aí com os meus colegas, e então trouxe para cá também. Saber de algumas dessas coisas fazem diferença no meu dia-a-dia como desenvolvedor de software.
Espero que possa ajudá-los a se sentirem um pouco mais confortáveis da próxima vez que precisarem abrir o terminal.
Mas antes de começarmos... uma dica para não-nativos do inglês:
Pensar em inglês ajuda a assimilar os comandos!
Se você for como eu, não-nativo do inglês, acredito que entenderá melhor o que quero dizer. Vamos entender com um exemplo, o comando pwd
é para Print Working Directory
. O que no meu idioma (braziliano) seria algo como edt
(Escrever o Diretório de Trabalho
).
Acho que esse exemplo ajuda a deixar claro que pensar sobre o que você quer fazer em inglês ajuda a assimilar o que está sendo feito. Ajudando a internalizar o que você deseja fazer. Tal como acontece com ls
(list) oucd
(change directory).
Comandos básicos
Aqui alguns comandos práticos a se saber. Utilizei um comando para descrever eles, veremos a frente qual.
- mv - mover (renomear) arquivos
- cp - copia arquivos e diretórios
- rm - remove arquivos ou diretórios
- ls - lista o conteúdo do diretório
- pwd - imprime o nome do diretório atual / de trabalho
- mkdir - cria diretórios, cria um diretório
- rmdir - remove diretórios vazios, exclui um diretório
- cat - concatena arquivos e imprime na saída padrão
- tac - concatena e imprime arquivos ao contrário
- more - filtro de leitura de arquivo para visualização de crt
- less - oposto de mais
- chown - altera o proprietário e o grupo do arquivo, altera a propriedade de um arquivo
- chmod - altera bits de modo de arquivo, altera as permissões de um arquivo
- chattr - altera atributos de arquivo em um sistema de arquivos Linux
- curl - transferir um URL
- wget - O downloader de rede não interativo.
- tar - um utilitário de arquivamento
- gzip - comprime ou expande arquivos, uma espécie de Linux 'WinRar'
- ping - envia ICMP ECHO_REQUEST para hosts de rede
- sort - classificar linhas de arquivos de texto
- filter - interface de filtro de conversão de arquivo do Cups
- uniq - relatar ou omitir linhas repetidas
- history - Biblioteca de História GNU
- top - exibe processos Linux
- ps - relata um instantâneo dos processos atuais.
- pkill - procura ou sinaliza processos com base no nome e outros atributos
- ssh - cliente de login remoto OpenSSH
- git - o rastreador de conteúdo idiota
Todos comandos podem ser concatenados no terminal, é uma questão de saber como fazê-los. O poder de concatenar comandos nos dá um poder incrível com a linha de comando.
Por exemplo, digamos que queremos encontrar quais comandos estão no histórico, mas existem muitas repetições e informações irrelevantes no momento (como os parâmetros)... Poderiamos fazer unificando 4 comandos na seguinte ordem: history | cut --delimiter=" " -f 4 | sort | uniq
.
Ou talvez você queira usar uma imagem como ícone... Você poderia:
# 1) baixar a imagem e 2) encodá-la na hora.
curl https://duckduckgo.com/i/bfc48a09.jpg --output - | base64 -
# agora está pronta para utilizar em uma tag HTML 😎
Aqui está uma bruxaria preciosa para a próxima vez que sua memória virtual se esgotar:
- xkill - matar um cliente por seu recurso X. Basicamente, quando você proclama este comando, a ponta do seu querido mouse se torna a varinha de Alvo Dumbledore, onde quer que você clique (com o botão esquerdo), aquilo onde você clicou, morre 😱.
Comandos que nos ajudam a se ajudar
- whatis - exibir descrições de página de manual de uma linha. Ajuda a identificar a finalidade de qualquer comando em segundos. Foi este o comando que citei acima.
- which - localize um comando.
- whereis - localize os arquivos binários, de origem e de página de manual para um comando.
- man - o manual do programa. Uma interface para os manuais de referência do sistema. This's the way! para qualquer coisa. As informações relevantes sobre o programa estarão no manual.
# Tente no seu terminal
$ whatis whatis which whereis man
Tenha seus próprios snippets
Um snippet é uma função criada para servir a um propósito. Em Bash/shellscript nós temos os famosos "one-liners". Recomendo tê-los por dois motivos:
Medo: eles obviamente assustam. Uma cadeia de comandos interligados para servir a um propósito? Eu acho incrível e aterrorizante.
Sempre que me vejo rodando um penso que se quebrar na metade vai deletar meu sistema todo 😅.Com isso você vai ficando cautelo-so com o terminal, pois, até um martelo faz mal se não for utilizado da forma correta.E novidades: você sera expostos a novas soluções e também a novas formas de utilizar o que já conhece.
Vou deixar no roda-pé algumas referências, lugares em que podemos dar uma conferida nesses "one-liners". 😆
Prática!
A melhor forma de aprender e assimilar é fazendo. Então vamos coloca em prática o que vimos até agora por meio de alguns exercícios. Para isso vamos utilizar o Capture The Flag Bandit da OverTheWire.
O Capture The Flag é um estilo de competição que envolve diversas competências para a resolução de desafios relacionados à infosec
, com o objetivo de capturar a bandeira (normalmente um código) e pontuar. No Bandit os níveis do CTF acontecem em uma máquina remota, no qual nos conectaremos pelo terminal através da ssh.
O Bandit nos ajudará a colocar em prática e lapidar nossas habilidades com o Terminal. Daqui em diante, é com vocês. Boa sorte!
Feedbacks 💙
- Faltou alguma coisa, ou estava errada, ou você tem alguma sugestão? Por favor, me deixe saber suas opiniões!
One-liners
- ⭐ https://linuxcommandlibrary.com/
- ⭐ http://www.bashoneliners.com/
- https://catonmat.net/top-ten-one-liners-from-commandlinefu-explained
- https://www.stefanjudis.com/notes/1025-shell-command-one-liners-on-one-page/
- https://rosettacode.org/wiki/Shell_one-liner
Credits, fonts and articles:
- https://dev.to/maurogarcia_19/linux-terminal-the-ultimate-cheat-sheet-2g5b
- https://ubuntu.com/tutorials/command-line-for-beginners#1-overview
- https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/
- https://ctf-br.org/sobre/
- https://wiki.archlinux.org/index.php/Dash
- https://wiki.archlinux.org/index.php/Bash
- https://wiki.archlinux.org/index.php/Command-line_shell
- https://en.wikipedia.org/wiki/Bourne_shell
Posted on March 15, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.