O poder por trás do terminal Linux
Tags: linux, terminal, bash, overthewire
Published: 2021-03-15 15:56:53

---
title: O poder por trás do terminal Linux
published: true
description: Vamos falar sobre o que é a linha de comando e como você pode lidar com ela quando precisar, na prática.
tags: linux,terminal,bash,overthewire
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e2ymn14orzpgtbny0wzt.png
---
 
#### Choose your preferred language:

- [🇧🇷 Brazilian](#brazilianVersion)
- [🏴󠁧󠁢󠁥󠁮󠁧󠁿 English]()

---

## 🇧🇷 Brazilian <a id="brazilianVersion"></a>

#### Table of contents

- [Introdução](#chapter-bra-1)
- [Comandos básicos](#chapter-bra-2)
- [Comandos que nos ajudam a se ajudar](#chapter-bra-3)
- [Tenha seus próprios snippets](#chapter-bra-4)
- [Prática!](#chapter-bra-5)

<!-- propaganda
#### Confira também:
+ [Linux: entendendo "permissão de arquivos"](https:// "Confira!")
-->

### Introdução <a id="chapter-bra-1"></a>

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).

![image](https://i.giphy.com/media/toXKzaJP3WIgM/giphy.webp "likeagod")

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][maurogarcia]


<p style="font-size:14px; color: #aaa; text-align: center;"> aí eu: SIMMMMMMMMMM </p>

![image](https://dev-to-uploads.s3.amazonaws.com/i/xkjs7elno05bdzdrn67i.png "SSSIIIIIIIIIMMMMMMMMMMMMMMMMMMMMMMMM")


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) ou` cd` (change directory).

### Comandos básicos <a id="chapter-bra-2"></a>

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:

```bash
# 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 😱.

![image](https://media.giphy.com/media/AhjXalGPAfJg4/giphy.gif)

### Comandos que nos ajudam a se ajudar <a id="chapter-bra-3"></a>

- **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!][mandaloriancreed] para qualquer coisa. As informações relevantes sobre o programa estarão no manual.

```bash
# Tente no seu terminal
$ whatis whatis which whereis man
```

### Tenha seus próprios snippets <a id="chapter-bra-4"></a>

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:

1. 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.

2. 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". 😆

<!-- propaganda
Confira também esta publicação que fiz com algumas referências
-->

### Prática! <a id="chapter-bra-5"></a>

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][overthewirebandit] da [OverTheWire][overthewiresite].

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][sshwiki].

O **Bandit** nos ajudará a colocar em prática e lapidar nossas habilidades com o Terminal. Daqui em diante, é com vocês. Boa sorte!

- [#Partiu][overthewirebandit]


### 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

<!-- links -->

[feedbackForm]: https://forms.gle/M3K8eaSun4oY4mjQ6
[maurogarcia]: https://dev.to/mauro_codes
[ultimatecheatsheet]: https://dev.to/maurogarcia_19/linux-terminal-the-ultimate-cheat-sheet-2g5b
[linuxcommandlibrary]: https://linuxcommandlibrary.com/
[felixfanoneliners]: https://felixfan.github.io/shell-script/
[sshwiki]: https://en.wikipedia.org/wiki/SSH_(Secure_Shell)
[overthewiresite]: https://overthewire.org/wargames
[overthewirebandit]: https://overthewire.org/wargames/bandit/
[mandaloriancreed]: https://youtu.be/uelA7KRLINA?t=8
[kalirevealed]: https://kali.training/downloads/Kali-Linux-Revealed-1st-edition.pdf
[bashoneliners]: http://www.bashoneliners.com/oneliners/popular/