1

Linux para desenvolvedores (basico - medio)

#Linux
Lucas Cruz
Lucas Cruz


Sou usuário linux há alguns anos e observando alguns colegas de faculdade em suas primeiras experiencias em sistemas linux, tive a iniciativa de ajuda-los com alguns truques pra facilitar a vida de quem tá se aventurando na linha de comando. Hoje em dia tem muitos recursos graficos pra diversas tarefas, mas é impossível escapar completamente da "maldita" tela preta.


Nada disso é uma grande descoberta ou algum conhecimento super avançado, é só um compilado de coisas que aprendi e sigo aprendendo. Por tanto a idéia é que esse documento aqui seja constantemente evoluído. E obviamente, aberto a contribuiçao a correçoes.


A idéia aqui é apresentar alguns dicas pra galera usar no terminal. Recomendo que tenha um conhecimento basicao dos comandos linux (cd, rm, apt/dnf/..., ls, etc).


- ZSH + Oh My Zsh


ZSH é um interpretador shell que oferece alguns recursos extras em relaçao ao Bash. Tem um pessoal mais tradicional que nao curte, mas pra nós que somos desenvolvedores, eu julgo que seja uma ferramenta que contribua bastante com a produtividade e customizaçao.

Oh My Zsh! é um framework pro nosso interpretador que abusa dessa customizaçao pra nos trazer facilitadores incriveis.

* https://www.zsh.org/

* https://ohmyz.sh/

 $ sudo apt install zsh
 $ sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"


Agora com o Zsh e o OhMyZsh instalados o próximo passo é determinar ele como padrao no lugar do bash, mas pra gente já pegar o pique, nao vou postar aqui como faz e deixar pra cada um ir no site oficial ou no pai de nós todos (Google) e descobrir. Lembrando que a premissa desse artigo é que já saibam o basico do basico.



- Um breve review pra gente refrescar a memória e eventualmente aprender alguma coisa legal

- $ pwd - caminho do diretorio atual

 [lucas@cruz platforms]$ pwd
 /usr/bin/platforms


- $ touch nome.txt - cria um arquivo em branco


- $ cat nome.txt - exibe o conteudo de um arquivo

 [lucas@cruz santander_bootcamp]$ cat docker-compose.yml 
 version: '2'
 services:
 elasticsearch:
 container_name: "elasticsearch"
 image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
 ports:
 - 9200:9200
 - 9300:9300


- $ tac nome.txt - exibe o conteudo de um arquivo na ordem inversa

 [lucas@cruz santander_bootcamp]$ tac docker-compose.yml 
 - 9300:9300
 - 9200:9200
 ports:
 image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
 container_name: "elasticsearch"
 elasticsearch:
 services:

 version: '2'

https://i.pinimg.com/originals/3a/a0/ae/3aa0ae67c682b46662591cc21ece6e46.gif



- $ wc nome.txt - contador de letras, linhas, bytes

 [lucas@cruz]$ wc -l /var/log/dnf.log
 8728 /var/log/dnf.log

Nosso arquivo possui 8728 linhas.


- $ tail nome.txt - exibe as últimas linha de um arquivo

 [lucas@cruz]$ tail -f /var/log/dnf.log
 2021-09-09T00:44:52Z DEBUG Fazendo cache de arquivos para todos os metadados.
 2021-09-09T00:44:52Z INFO Cache de metadados atualizado recentemente.
 2021-09-09T00:44:52Z DDEBUG Cleaning up.
 ...


Esse aqui fiquei de fazer um gif pra mostrar direitinho como faz, mas segue a explicaçao até eu gerar o gif:


Com a flag -f de follow, ele fica assistindo aquele arquivo e exibindo as ultimas linhas caso adicionadas. Ótima combinaçao pra usar em arquivos de log, podemos jogar o conteúdo do dmesg num arquivo e ficar assistindo com o tail por exemplo :).

Também tem o oposto dele, que é o comando head.


Esse aqui parece bobo, mas tem umas coisas legais...bora lá

- $ echo >entrada< - Exibe o texto na saida, tipo um printf(), System.out.print()

 [lucas@cruz ~]$ echo oi
 oi
 [lucas@cruz ~]$ echo "oi"
 oi
 [lucas@cruz ~]$ echo $PATH
 /home/lucas/.nvm/versions/node/v12.16.3/bin:
/home/darkzera/.local/bin:/home/darkzera/bin/
 [lucas@cruz ~]$ echo $(date)
 qui 09 set 2021 00:05:28 -03
 [lucas@cruz ~]$ echo $(date) > data.txt
 [lucas@cruz ~]$ cat data.txt 
 qui 09 set 2021 00:07:43 -03
 [lucas@cruz ~]$ echo $(date) >> data.txt
 [lucas@cruz ~]$ cat data.txt 
 qui 09 set 2021 00:08:11 -03
 qui 09 set 2021 00:08:17 -03
 ...

Aqui trouxe alguns exemplos da forma com que podemos usar o comando echo e de quebra inseri a idéia de direcionarmos a resposta de um comando a um arquivo.


Quando usamos o '>', o arquivo é integralmente substituido pelo novo input. Mas, se usarmos '>>' ele vai concatenando e aumentando o arquivo

Esses operadores podem ser usados em DIVERSOS comandos. Try it by yourself!


#

- $ whoami nome.txt - contador de letras, linhas, bytes

 [lucas@cruz]$ wc -l /var/log/dnf.log
 8728 /var/log/dnf.log


- $ whereis nome_programa - mostra onde um binario tá localizado

 [lucas@cruz]$ whereis gedit
 gedit: /usr/bin/gedit /usr/lib64/gedit 
       /usr/share/gedit /usr/share/man/man1/gedit.1.gz


<b>disclaimer: </b> Everything in linux is a file


- $ whatis nome_programa - Na pratica ele pega uma linha do manual ($man) pra descrever o programa</i>

 [lucas@cruz]$ whatis gedit
 gedit (1) - text editor for the GNOME Desktop


- $ history - exibe o historico dos comandos usados no terminal


- $ find . -iname 'sentence' - busca no diretorio apontado (.) por arquivos com a sentença de texto passada.

 [lucas@cruz]$ find . -iname '*.java'
 ./Starter/ErrorHandling.java
 ./Starter/one_.java

O find é bem legal, mas acredito que a melhor alternativa hoje em dia é usar o fd (que usa o find debaixo dos panos)

- https://github.com/sharkdp/fd


E pra usar é mais simples ainda


[lucas@cruz]$ fd java Starter/
 /Starter/ErrorHandling.java
 /Starter/one_.java



- $ du >arquivo ou pasta< - verifica o tamanho de um arquivo ou pasta

- $ alias - como o nome diz, é um apelido..ou seja, podemos dar apelidos pra determinados comandos. Bora ver na pratica:


O comando ls é bastante versatil, tem varias formas de exibiçao como podemos verificar no manual dele ($man ls).

* ls -l * exibe os arquivos da pasta com suas permissoes.


Mas é meio chato ficar digitando isso tudo toda hora né...Entao podemos criar um apelido, ou seja, um alias!


$ alias abacaxi='ls -l'
$ banana
   . 'Engenharia Software_FIM'
   .. 'EQUAÇÕES DIFERENCIAIS PARA FÍSICOS E'
   25d4af5a-0161-4013-9d6d-2fe381fd7e41.pdf estudos
   63219d68-6e2d-425f-821c-dbdae22e1241.jpeg .idea
   apache-maven-3.8.1-bin.zip JavaFXSocketProgramming.zip
   arquivo_srag.csv Livros
   aulas mspeed-layer-ck6x-US.tar.gz
   bkp_HDD python-dominant-image-colour


Agora quando executamos o "comando" abacaxi, ele significa um <i>ls -l</i>

Lembra do ZSH que instalamos? Ele é MUITO mais do que um programinha q deixa seu terminal mais bonito. Ele é carregadissimo com scripts e aliases.

Se voce instalou ou ja tinha o zsh instalado, verifique voce mesmo pelas aliases que vem nele

- $ alias


Se vc foi curioso o bastente pra abrir e ver, sim..tem MUITOS aliases de git (muito uteis por sinal) <B> TOME CUIDADO NESSA AVENTURA </B>.


- $ !! - <i>repete o comando anterior</i>

- $ ../.. = cd ../..

- $ cat yarn.log G bcrypt = $ cat yarn.log | grep bcrypt

- $ ll = $ ls -lh

- $ ls = $ ls --color=tty'

- $ lsa = $ ls -lah'



#

Use e abuse da tecla TAB - TAB SPAMMING


Da mesma forma como o autocomplete numa IDE é fundamental pro workflow, no terminal nao é muito diferente.

No bash tradicional é possível mostrar as possibilidades pra completar o comando, mas bora aproveitar as features boladas do zsh!


- Bash style

<div style="text-align:center"><img width=400px src="https://i.imgur.com/6kzgNLm.gif/"></div>


- Zsh!!!!!

<div style="text-align:center"><img width=400px src="https://i.imgur.com/AmL7m8x.gif"></div>



- $ kill PID - mata um processo recebendo o ID do processo</i>

 [lucas@cruz]$ ps aux | grep gedit
 lucas 43058 0.0 0.0 216124 708 pts/11 S+ 23:56 0:00 grep --color=auto gedit
 [lucas@cruz]$ kill 43058



Com essa abordagem no bash, parece um pouco trabalhoso, pegarmos o ID do processo que queremos matar e aí sim performar o kill. Entao o zsh nos permite essa abordagem aqui:

<div style="text-align:center"><img width=400px src="https://i.imgur.com/F9RxOIL.gif"></div>

Easy peasy!



## Magicas


- Com esses truques de magica podemos inverter a ordem de determinadas coisas no terminal. Sem muito lero:


### CTRL + T

<div style="text-align:center"><img width=400px src="https://i.imgur.com/grcFMbH.gif

"></div>


### ALT + T


<div style="text-align:center"><img width=400px src="https://i.imgur.com/IrbvtgA.gif

"></div>

2
43

Comentários (3)

0
Lucas Cruz

Lucas Cruz

09/09/2021 12:00

Showwww, Carlos. Tambem to nessa familia Red Hat ai! Tamo junto ;)

1
CARLOS SILVA

CARLOS SILVA

09/09/2021 04:11

Aprender Linux, é uma experiência impar.

O bom do Linux não é sua GUI, mas o seu terminal que é incomparável. No windows até temos o PowerShell, mas no quesito produtividade o shell Linux está muito além. E para devs que queiram ter produtividade de verdade no Linux, o terminal será seu maior aliado, dificilmente você vai querer utilizar uma interface gráfica, falo isso por experiência própria e ter a feliz experiência de aprender esse SO incrível. Sou usuário do nicho baseado em RPM e principalmente meu foco estar mais na Red Hat e seus produtos.


Um abraço,


Um ótimo artigo,

0
Diego Marcelino

Diego Marcelino

09/09/2021 02:36

Sensacional hermano, também curto muito o Linux e o terminal dele é uma delicinha! Obrigado pelo material!!

Linux Fanboy

Brasil