Um pouco sobre o terminal do Linux
Autor: Sidnei | Publicado: 2011-04-05T09:51:00-03:00

Este é um tutorial básico sobre o uso do terminal do Linux. Espero que ajude nunca usou, ou quem tenha usado pouco ele.
Tudo  vai ser explicado de forma um pouco superficial e talvez teoricamente  errada em alguns casos, mas na prática vocês vão perceber a o que as  explicações indicam.
Lembre-se, esse é um material introdutório,  então depois de pegar as manhas com essa parte básica não deixe de  pesuisar coisas novas e também explicações mais a fundo sobre assuntos  abordados aqui e que podem não terem ficado claros.

O que é o terminal?

Em  síntese, é uma ferramenta bem ampla para conversar com o sistema.  Através dele é possível navegar pelas pastas, mover, apagar e nomear  arquivos, fazer pesquisas, executar programas e scripts, etc. Tudo isso  de uma forma mais prática do que pelo gerenciador de janelas,  possibilitando até mesmo executar tarefas mais complexas que exigiriam  muito trabalho pela interface gráfica. Mas usar o terminal não é  intuitivo como usar a interface gráfica para navegar pelo computador.  Essa é uma tarefa que exige conhecimento e, como qualquer outra coisa,  TREINO. Então sugiro que vá se despedindo da interface gráfica.

Os terminais

Geralmente,  vem mais de um terminal instalado. Alguns mais pesados e com mais  funções(ou mais firulas), outros simples e leves. Qual usar vai depender  do que você tem disponível e do seu gosto. Exemplos: konsole, xterm,  eterm, etc.
O xterm é bem comum e conhecido.

Abrindo o terminal

Você  pode procurar por algum terminal dentro no "menu iniciar" ou pode rodar  o "Run Program..." através do mesmo menu ou com o atalho ALT+F2, e  então digitar o nome do terminal que deseja usar, caso saiba o nome  dele. Por exemplo, abra o Run Program... e escreva xterm.
O  terminal incia no diretório do usuário, exceto se você abri-lo apartir  da interface gráfica em alguma pasta que estiver navegando.

Antes de começar com os "comandos"...

Acredito que todos os terminais tenham em comum os pontos que apresentarei a seguir.
Nem tudo nessa seção é algo exclusivo ao terminal, mas é bom conhecer.

Case Sensitive
Existe  diferença entre letras maiúsculas e minúsculas, então escreva o nome  dos arquivos e comandos da forma correta, respeitando a caixa.

Histórico de comandos
Conforme  você vai executando tarefas pelo terminal, esses comandos escritos vão  ficando armazenados na memória para que possa reutiliza-los, o que é  comum quando se usar o terminal. Para "navegar" esse histórico, basta  usar as setas cima e baixo do teclado.

Tecla TAB
Um  recurso muito bom que economiza tempo ao digitar no terminal, e até  ajuda a lembrar-se do nome de algum comando ou arquivo. Basicamente,  baseado no PATH e no diretório atual, ao apertar a tecla TAB o terminal  tenta completar o que está escrevendo, e se houverem muitas  possibilidades combinando, se pressionar 2 vezes o TAB, será listado as  possibilidades.
Ex: dentro do diretório atual existe os arquivos  "recado" e "reprovados", fora outros(nenhum começando com "r"). Se você  digitar no terminal "r" e pressionar TAB, será completado com a letra  "e", porque é até onde o nome dos dois arquivos é comum, daí ao  pressionar duas vezes a tecla TAB esses dois arquivos serão listados na  tela. A partir daí, se desejar escrever "recado", por exemplo, basta  digitar "c" e apertar TAB novamente, que o restante da palavra será  completada.

PATH
Isso não é algo particular do  terminal, mas é bom ter o conhecimento. O PATH é uma variável do sistema  que guarda os "caminhos" onde o sistema de procurar aplicativos e  scripts para executar. Isso significa, por exemplo, que se o endereço da  pasta onde existe um programa está no PATH, para executá-lo basta  escrever seu nome, caso contrário teria que escrever todo o endereço de  onde o programa está, junto ao nome dele para poder executá-lo.  Resumindo, o PATH é uma coleção de endereços(em ordem) onde o  programa/script será procurado para poder ser executado. O endereço da  pasta atual é o último a ser avaliado.
*A variável PATH pode ser editada.

O "."
A  "." indica o diretório atual. Então, por exemplo, quando queremos  executar um programa/script que está no diretório atual e não queremos  que seja procurado no PATH(até porque pode existir algum aplicativo com o  mesmo nome no PATH), usamos junto(antes) do nome da aplicação o "."(não  esquecendo da barra para indicar diretório, então "./")
Ex: ./cp

O ".."
Esse, ao contrário do anterior, indica o diretório "acima", ou seja, um antes do atual na hierarquia.
Ex:  Suponha que você está em um diretório chamado /home/eu/musicas/, e quer  executar um programa chamado "nada" localizado no diretório anterior,  ou seja, /home/eu/
Então:  ../nada

A "/"
Quando  usamos a barra sozinha ou no começo(extremo esquerdo) de um endereço do  computador, estamos nos referênciando à pasta raiz do sistema. Amesma  que você acessa quando abbre pela interface gráfica o "File System".
Exemplos:
entrar no diretório raiz
cd /
entrar no diretório usr/bin que está localizado na raiz.
cd /usr/bin/

"~" 
Esse  símbolo indica o diretório home do usuário. Se estiver logado como  super usuário(root), por exemplo, ~ será igual a /root. Já se estiver  logado como um usuário comum chamado "eu", por exemplo, o ~ valerá  /home/eu/.

Alguns comandos básicos e de uso frequente

*Não  deixe de testar os comandos para visualizar seus efeitos. Afinal é só  escrever o comando, e as opções e parametros caso necessário, e apertar  enter. Então não seja preguiçoso.

pwd
print working directory escreve na tela do terminal o endereço do diretório atual. Alguns terminais deixam essa informação à vista.

ls
list  mostra os arquivos e pastas existentes no diretório atual. É possível  utiliza-lo de várias formas para obter diferentes resultados na  listagem. Por exemplo, usando a opção -l, que listará os arquivos junto  com algumas informações sobre cada um. Outro exemplo é a opção é a -a,  que fará que diretório escondidos sejam listados(para criar um diretório  escondido no linux, basta coloca um "." no começo do nome. EX:  ".imagens").
Exemplos:







mkdir
make directory  cria um novo diretório. É preciso definir um nome para ele com ou sem o  caminho completo, caso não coloque o caminho o diretório será criado na  pasta atual, mas independente da pasta em que estiver você pode definir  o caminho para criar o diretório em qualquer lugar(desde que seu  usuário tenha permissão).
Exemplos:



rmdir
remove directory  remove um diretório. Funciona de forma análoga ao comando anterior. Uma  observação imporante a ser feita é que o diretório a ser removido deve estar vazio, caso contrário não será removido.
Exemplos:



cd
change directory muda o diretório de atual. Funciona de forma análoga ao comando anterior.
Exemplos:



*Experimente usar o pwd para verificar o diretório atual quando mudar de diretório, para confirmar se está onde queria.

pushd e popd
Assim comoco cd, essa dupla de comando servem para mudar de diretório, mas com algumas diferenças.
Usa-se o pushd(push directory) extamente da mesma forma que o cd,  porém ele grava ele guarda o endereço da pasta atual numa memória em  formato de "pilha", para poder voltar para o diretório depois. A cada  diretório trocado usando o pushd vai para essa pilha.
Para voltar para esse diretório guardados, usa-se o popd(pop  directory). Basta escrever popd para acessar o diretório trocado mais  recente. Então, depois de usar o popd para voltar ao diretório, esse  endereço é retirado da pilha.
Exemplos:



Porque push e pop?
Geralmente  em programação, funções/métodos/comandos/whatever que foram nomeados  assim, costumam ter a característica para trabalhar com pilha, ou seja, a  última informação adicionada será a primeira a ser recuperada.

cp
copy copia um arquivo/diretório especificado na fonte para o destino especificado. a sintaxe básica é a seguinte:

cp fonte destino

onde fonte é o nome do arquivo(com o caminho completo se necessário) a ser copiado e destino é o local onde a cópia será gerada.
Uma  opção interessante dele é -r, que faz trabalhar de forma recursiva.  Isso significa que ao mandar copiar um diretório, caso existam outros  diretórios dentro deste, eles também seram copiados e assim  sucessivamente. Normalmente isso não ocorreria.
cp -r fonte destino

Exemplos:



*Existem mais opções para esse comando, mas não serão abordadas.

mv
move funciona da mesma forma que o cp, mas ao invés de copiar ele move arquivos/pastas
Outra  ponto interessante é que usamos esse comando para renomear arquivos  também. Isso porque quando definimos o destino podemos mudar o nome do  arquivo/pasta, então podemos simplesmente mover o arquivo para o mesmo  diretório que ele está, porém mudando o nome.

Exemplos:



*O mv não precisa(e não tem) da opção de recursividade para funcionar de tal forma.
*Existem mais opções para esse comando, mas não serão abordadas.

rm
remove funciona da mesma forma que o cp, mas ao invés de copiar ele apaga arquivos/pastas
Claro que ele não precisa de uma fonte e um destino, pasta espeficar o arquivo/pasta com ou sem o caminho completo.
Assim como o cp, para afetar subdiretórios, é necessário usar a opção -r, que indica comportamento recursivo.

Exemplos:



*Perceba  que ao contrário do rmdir, o rm não precisa que o diretório esteja  vazio para removê-lo, mas é preciso usá-lo com recursividade para isso.
*Existem mais opções para esse comando, mas não serão abordadas.

Executando aplicativos e scripts

Os  comandos que vimos, são aplicativos ou scripts, então você pode  executar qualquer programa pelo terminal. Por exemplo, se você estiver  com o firefox instalado, basta escrever o firefox no terminal para abrir  o navegador.
Uma observação importante a fazer é que ao executar uma  tarefa no terminal, ele fica "ocupado" até que ela seja finalizada.  Seguindo esse raciocínio, seria necessário abrir vários terminais para  poder ir executando várias tarefas que demandam tempo ou que precisam  ficar em segundo plano, como editores de texto, navegadores, etc. Mas  existe uma forma de executar o aplicativo sem congestionar seu terminal.  Basta inserir o símbolo &amp; no final do comando. Quando digo final é  final mesmo, depois do comando, opções, parametros e tudo que tiver  direito, ou seja, no extremo direito da linha.

help, man e info

O  help é uma opção que a maioria dos aplicativos/comandos/whatever têm, e  serve para explicar sobre ele. Lá geralmente tem a sintaxe, opções,  etc.
Geralmente para acessar essa ajuda, faz-se:
comando --help
ou as vezes ainda é possível acessar dessa forma:
comando -h

Só  que fica difícil visualizar esse help sem utilizar algum aplicativo  para ajudar. Então podemos jogar a saída do help(o texto que será  exibido) dentro de um programa que permita usar esse recurso de ler um  texto como entrada, como por exemplo o "more" e o "less". Para jogar  essa saída para um desses aplicativos usamos o "|" (lê-se pipe). Então  ficaria, por exemplo:

rm --help | more
ou se preferir o less
rm --help | less

O  more e o less permitem visualizar texto dentro do próprio terminal, e o  usuário tem controle sobre o texto inteiro, para poder navegar por ele.  Mas eles são diferentes.
O more é mais simples. É exibido o início  do texto e basta ir pressionando enter para ler "mais"(por isso more).  Esse recurso está disponível no windows também.
Já o less permite  fazer mais coisas. É possível navegar pelo documentos, subindo e  descendo a página e, se não me engano, é possível até fazer pesquisa de  palavra no texto. Perceba que "less" é o antônimo de "more". É uma  brincadeira que o criador fez com o nome do programa, talvez para dizer  que é do contra XD. 

O man e o info têm o mesmo objetivo do help,  porém eles são aplicativos para a leitura dos textos de ajuda de  aplicações, e não opções de um aplicativo como no caso do help. Para  usar basta seguir o modelo:
man aplicativo
ou
info aplicativo

A  diferença entre o man e o info é que o man te traz mais informações e  mais detalhadas do que o info. Outro ponto importante é que quando  desenvolvem aplicativos é mais frequente desenvolverem o conteúdo para o  man do que para o info junto com o pacote, então aplicativos que  retornaram alguma informação ao usar o info não são tantos quanto os que  usam o man.

*Lembrando que nem todo aplicativo terá esses recursos de ajuda, mas a maioria têm.

Dicas

-Ao nomear arquivos e pastas tente não usar espaços dentro do nome, não usar letras maiúsculas, não usar acentos e cedilha.
-Use e abuse dos recursos de ajuda que citei.
-Não use o perfil de root a menos que realmente seja necessário.
-Mesmo que pareça ser difícil, tente fazer a maioria das coisas pelo terminal, para acostumar.
-Mais  para frente, experimente aumentar a frequencia com que instala pacotes  no seu computador, pricipalmente drivers, e tente não usar gerenciadores  de pacote para isso. Assim você vai sentir realmente na prática como  resolver os problemas com compilação de pacotes para instalar nos eu PC.  É muito comum surgirem problemas para você resolver nessas situações.
*mesmo que desinstale os pacotes depois. É só para treino mesmo.

Veja também

Algumas coisas interessantes para aprender:

cat
head
tail
find
dmesg
mount
umount
vi
vim
chmod
Variáveis de ambiente no linux