Básico de terminal pra devs
Muitas vezes quando você estiver instalando pacotes de JavaScript ou configurando algumas funcionalidades, você vai precisar fazer uso do terminal. Então é bom que se saiba pelo menos o básico.
Nota: esses comandos consideram que você faz uso de uma das 3 seguintes alternativas: terminal no Linux ou Mac (ou qualquer software que você use para acessar os recursos do sistema via linha de comando) ou o WSL no Windows.
Nota 2: se você não faz uso do do WSL, dê uma chance. É o mais perto que um desenvolvedor que gosta de navegar usando Windows consegue ficar de um sistema estável pra desenvolvimento de software. Ele cria um sistema em Linux que tem interfaces definidas pra que você possa interagir com seus programas no Windows. Por exemplo, você pode criar uma aplicação dentro do WSL e editar o conteúdo usando seu VSCode e rodar a aplicação no Chrome ambos instalados no Windows.
Entendendo o terminal
Digite os comandos a seguir pra você ver o terminal em ação. Não copie e cole os comandos, escrevê-los vai te ajudar a lembrar com mais facilidade deles no futuro. Use esse artigo como referência até que esses comandos se tornem mais naturais pra você.
Toda vez que você abre o terminal, ele carrega dentro de uma pasta.
- Digite
pwd
para mostrar o caminho completo da pasta em que você se encontra.- Por padrão, você abre o terminal na pasta
/home/Thiago
ou/Users/Thiago
ondeThiago
é o nome do seu usário. Essa pasta é comumente abreviada com~
.
- Por padrão, você abre o terminal na pasta
- Digite
ls
para ver os conteúdos dessa pasta. Esse comando vai mostrar todos os arquivos e pastas contidos na pasta atual.- Se você adicionar a flag
-l
, você vai ver os arquivos e pastas em lista e com mais informações sobre eles. Tentels -l
. - Se você adicionar a flag
-a
, você vai ver os arquivos e pastas ocultos. Eles são identificados por conter um.
no início de seus nomes. Tentels -a
. - Você pode combinar flags. Tente
ls -la
.
- Se você adicionar a flag
- Digite
mkdir teste
para criar (make) um diretório/pasta (dir) com o nome deteste
. - Digite
cd teste
para acessar a pasta teste.- Quando você digita
ls -la
você vai sempre ver no início da lista, duas pastas especias o.
(ponto) e o..
(ponto ponto). O.
representa a pasta atual e o..
representa a pasta anterior. - Ao dar um
cd .
você permanece na própria pasta. - Ao dar um
cd ..
você volta para a pasta anterior.
- Quando você digita
- Digite
cd teste
novamente, case tenha dadocd ..
. - Digite
mkdir projeto && cd projeto
assim você pode combinar comandos dizendo pro terminal: primeiro crie a pastaprojeto
e depois acesse a pastaprojeto
. - Digite
ls
e vai ver que nada acontece. Faz sentido já que a pasta foi recém criada e está vazia. - Vamos criar um arquivo com
touch terminal.txt
.touch <nome-do-arquivo>.<extensão>
e você vai criar um arquivo em branco com aquelo extensão. - Agora , ao dar
ls
vemos o nosso arquivo. Vamos adicionar conteúdo nesse arquivo, mas vamos fazer isso através do nosso próprio terminal. Isso pode ser muito útil ao executarmos a instalação de algumas ferramentas de terminal. - O primeiro passo é aprendermos sobre o comando
echo
. O comandoecho
printa textos no terminal. Por exemplo,echo javascript
vai produzir o resultado javascript no terminal. Se quisermos imprimir um texto que contenha espaços, usamos aspas no pra indicar o textoecho 'hello world'
. Aqui algumas dicas extras para lidar com echo:- Se você precisar usar aspas simples no conteúdo, use aspas duplas para indicar a string. Por exemplo:
echo “copo d’água”
. - Se precisa usar ambas as aspas, use aspas duplas ao redor da string e use
\
para “escapar” as aspas duplas de dentro do texto. Por exemplo:echo “Ele me disse: \”Por favor, me vê um copo d’água?\””
.
- Se você precisar usar aspas simples no conteúdo, use aspas duplas para indicar a string. Por exemplo:
- O legal do comando
echo
é que ele pode não só escrever no terminal, mas também em arquivos. Useecho ‘hello world’ >> terminal.txt
e o conteúdo é inserido ao final do arquivoterminal.txt
ao invés de ser inserido no terminal. - Você pode ler o conteúdo do arquivo usando o comando
cat
assim:cat terminal.txt
. - Isso é muito útil pra gente fazer instalação de scripts. Abaixo temos um script que faz parte da instalação de um programa chamado NVM (node version manager).
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
- No momento, isso não é importante, mas vamos jogar o conteúdo desso arquivo dentro do nosso
terminal.txt
.
echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> terminal.txt
- Agora podemos mostrar nossas alterações usando o
cat
denovocat terminal.txt
. - Uma outra opção que temos para editar arquivos é usar um editor de texto de terminal. Um exemplo é o
vim
. Para acionar ovim
digitevim terminal.txt
.- Vim é um editor de texto de terminal. Ele te permite scrollar pelo conteúdo, mas movimentar o cursor é algo que só é possível com o teclado.
- Como vim é muito complicade e caso você tenha o atalho do VSCode instalado você pode abrir um arquivo usando
code <nome-do-arquivo>
, eu vou ser breve aqui. - Para movimentar o cursor pro cima e pra baixo, você usa a tecla
k
ej
repectivamente. - Para movimentar o cursor pra esquerda e pra direita, você usa as teclas
h
el
respectivamente. - Para inserir texto você aperta a tecla
i
e digita a seu texto. Experimente apertari
com o vim aberto e digite o seu nome. - Aperte
ESC
para sair do modo de inserção. - Digite
:wq
após apertarESC
pra sair e salvar. Se quiser sair e abortar as alterações, digite:q!
.
- Agora, vamos aprender a mover arquivos.
mv
move o arquivo de uma pasta pra outra. A anatomia do comando émv <caminho-do-que-mover> <caminho-pra-onde-mover>
. Tentemv terminal.txt ..
para mover o arquivo da pasta atual para a pasta anterior.cd ..
e depoisls
e você vai ver o arquivo na pasta anterior. mv
também pode ser usado para renomear arquivos, pra isso basta informar o mesmo caminho. Tentemv terminal.txt sample.txt
.- Agora vamos aprender a copiar arquivos.
cp <caminho-do-que-copiar> <caminho-pra-onde-copiar>
é o comando. Vamos testar copiando o arquivosample.txt
pra pastaprojeto
.cp sample.txt projeto
. Ao acessar a pastacd projeto
, vemos o arquivo dentro ao dar umls
. - Pra finalizar vamos aprender a remover.
rm
é o comando para remover arquivos e pastas. Vamos experimentar remover o arquivosample.txt
dentro deprojeto
. Digiterm sample.txt
.ls
pra verificar que ele foi mesmo removido. Agora vamos remover a pastaprojeto
.cd ..
e depoisrm projeto
.- Como
projeto
é uma pasta a gente precisa adicionar a flag-r
para remover a pasta e todos os arquivos aos quais o usuário tenha permissão de excluir. - Você pode usar a opção
rm -ri projeto
e pra cada item a ser removido dentro deprojeto
você terá um prompt de confirmação e poderá autorizar a remoção do arquivo comy
ou negar comn
.
- Como
- A versão mais perigosa do comando
rm
é arm -rf projeto
que remove toda a pasta junto de seu conteúdo sem preguntar e sem se importar com as permissões do usuário. Apesar disso tudo, a gente usa bastante esse comando pra remover a pasta de módulos npm do projeto comrm -rf node_modules
em uma pasta que contenha um projeto node. - Vamos voltar pra home
cd ~
e remover tudo o sobrou da pasta teste comrm -rf teste
. - Pra fechar, você pode sempre limpar o terminal quando tiver muita coisa em tela com o comando
clear
.
Isso cobre os pontos básicos. Eventualmente, você vai ter dúvidas quando estiver rodando comandos no terminal, mas saber e ter habilidade para rodar esses comandos já vai te dar o contexto necessário pra 90% dos problemas relacionados a terminal e desenvolvimento web.
Pro tip: você pode sempre aprender mais sobre um comando usando o comando man
. Exemplos: man ls
, man mkdir
. Aperte q
a qualquer momento pra sair do manual.
Se algo não funcionar ou se algo puder ser melhor aqui, deixe seu feedback.
Sumário dos comandos listados aqui
pwd
ls
ls -l
ls -a
ls -la
mkdir teste
cd teste
cd .
cd ..
cd teste
mkdir projeto && cd projeto
ls
touch terminal
echo
echo javascript
echo 'hello world'
echo "copo d'água"
echo "Ele me dise: \"Por favor, me vê um copo d'água?\""
echo 'hello world' >> terminal.txt
cat terminal.txt
echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> terminal.txt
cat terminal.txt
vim terminal.txt
# movimentando dentro do vim e saindo do editor
mv terminal.txt ..
cd ..
ls
mv terminal.txt sample.txt
cp sample.txt projeto
cd projeto
ls
rm sample.txt
cd ..
rm projeto
rm -r projeto # opcinalmente rm -ri projeto ou rm -rf projeto
cd ~
rm -rf teste
clear
man rm
# q pra sair do manual
man ls
# q pra sair do manual