Introdução ao uso da Shell em sistemas Unix

Descrição

Este tutorial tem como objetivo demonstrar alguns dos comandos básicos necessários para utilização de sistemas Unix (mais precisamente Linux) através de sua Shell (terminal).
Como por exemplo navegar, criar, apagar e renomear diretórios e arquivos utilizando a linha de comando.
Algumas definições e idéias foram tiradas de [1] LinuxCommands.org, recomendo uma leitura completa deste site para um melhor entendimento do uso do Linux através de um terminal.


Por que usar modo texto?

Não irei destacar todos os pontos de por que utilizar uma interface tipo texto, é possível utilizar um sistema operacional somente via interface gráfica, mas se tiver interesse em ir além, continue lendo.

Parte dos sistemas computacionais possuem acesso somente via texto (e.g. Roteadores/Switches, Servidores, sistemas embarcados), devido a sua natureza ou capacidade de processamento, ainda, programas que não possuem interface gráfica são tradicionalmente mais rápidos.

Quando estamos familiarizados com a interface via texto (i.e. conhecendo os comandos), a velocidade de execução das tarefas por parte de um usuário é muito superior quando comparado a interface gráfica, principalmente devido ao fato de não ser necessário procurar na tela aonde devemos clicar/arrastar o mouse.

Além disso, grande parte dos softwares que possuem interface via texto permitem a execução automatizada de scripts, sendo possível por exemplo, executar um procedimento completo com um só comando que invoca o script. Utilizar scripts para executar tarefas pode ajudar ainda a evitar erros nos procedimentos, pois os scripts sempre farão o mesmo trabalho, quando comparado com a interface gráfica podemos eventualmente esquecer de marcar alguma opção no software durante a execução.

Se ainda não está convencido, alguns dos links nas referências podem ajudar:
[2], [3], [4]


O que é uma "shell"?

Traduzido de [1] LinuxCommands.org :

Simplificando, o shell é um programa que leva os comandos do teclado e os entrega para o sistema operacional para executar. Nos velhos tempos era a única interface de usuário disponível em um computador Unix. Hoje em dia temos interfaces gráficas de usuário (GUIs), além de interfaces de linha de comando (CLIs), como o shell.

Na maioria dos sistemas Linux um programa chamado bash (que significa Bourne Again SHell, uma versão melhorada do programa original Bourne shell, sh, escrito por Steve Bourne) atua como o programa shell. Existem vários programas de shell adicionais disponíveis em um sistema Linux típico. Estes incluem: ksh , tcsh e zsh.

O que é um xterm, gnome-terminal, konsole , etc?
Estes são chamados de "emuladores de terminal". Eles são programas que colocam uma janela para deixá-lo interagir com o shell. Há um monte de diferentes emuladores de terminal você pode usar. A maioria das distribuições Linux fornecer vários, tais como: xterm , rxvt , konsole , kvt , gnome-terminal, nxterm e eterm.


Iniciando um Terminal

Traduzido de [1] LinuxCommands.org :

Seu gerenciador de janelas, provavelmente, tem uma maneira de abrir programas a partir de um menu. Procure na lista de programas para ver se alguma coisa se ​​parece com um programa emulador de terminal. No KDE, você pode encontrar "konsole" e "terminal" no menu Utilities. No Gnome, você pode encontrar "xterm color", "xterm regular" e "gnome-terminal" no menu Utilities. Você pode abrir quantos destes você quiser e brincar com eles. Embora existam diversos emuladores de terminal diferentes, todos fazem a mesma coisa. Eles dão acesso a uma sessão de shell. Você provavelmente vai desenvolver uma preferência por um, com base nas configurações que cada um oferece.


Testando o teclado

Traduzido de [1] LinuxCommands.org :

Ok, vamos tentar alguma digitação. Abra um terminal. Você deverá ver uma janela de comandos que contém o nome de usuário e o nome da máquina seguido por um cifrão. Algo parecido com isto:

[user@linux ~]$

Excelente! Agora digite alguns caracteres sem sentido e pressione a tecla Enter.

[user@linux ~]$ kdkjflajfks

Se tudo ocorreu bem, você deve ter obtido uma mensagem de erro reclamando que o terminal não pode compreendê-lo:

[user@linux ~]$ kdkjflajfks

bash: kdkjflajfks: command not found

Maravilhoso! Agora pressione a tecla de seta para cima. Observe como o nosso comando "kdkjflajfks" aparece novamente. Sim, temos histórico de comandos. Pressione a seta para baixo e temos a linha em branco novamente.

Utilize o comando "kdkjflajfks" usando a tecla de seta para cima, se necessário. Agora, tente as teclas esquerda e direita-seta. Você pode posicionar o cursor de texto em qualquer lugar na linha de comando. Isso permite que você facilmente corrigir erros.


O Manual

[user@linux ~]$ man

Este comando traz o manual do comando desejado. Pode ser utilizado para cada um dos comandos que seguem. Exemplo:

[user@linux ~]$ man pwd

O manual com a descrição do comando pwd deve aparecer na tela. Para sair pressione a tecla 'q'.


Navegando em Diretórios (pastas)

[user@linux ~]$ pwd

Mostra qual diretório (pasta) que você está. No Linux, cada usuário tem uma home onde pode colocar seus arquivos, localizado em /home/user (user é o nome do usuário que está logado na máquina). Exemplo:

[user@linux ~]$ pwd

/home/user

Dica: o diretório home do usuário é representado, normalmente, pelo símbolo ~.

Como você pode ver, cada barra (/) indica um sub-diretório. Por exemplo, o diretório user está dentro do diretório home.

Para troca de diretório é utilizado o comando cd (change directory). Exemplo:

[user@linux ~]$ cd Documents

[user@linux ~/Documents]$

No exemplo anterior, foi alterado para um diretório relativo, pois já estavamos na home (/home/user ou ~) e movemos para o diretório Documents em relação ao atual. É possível mudar para diretamente para outros diretórios usando o caminho completo:

[user@linux ~/Documents]$ cd /usr/local/

[user@linux /usr/local]$

Dica: A última barra depois no nome do diretório é opcional.

Existem também dois nomes de diretórios especiais: '.' e '..', que representam o diretório atual (usado mais tarde) e o diretório acima (pai), respectivamente. Para voltar (subir) um diretório pode-se digitar:

[user@linux ~/usr/local]$ cd ..

[user@linux /usr]$


Criando e Removendo diretórios

O comando para criar diretórios é mkdir. O comando abaixo cria um diretório com o nome de mydir:

[user@linux ~]$ mkdir mydir

[user@linux ~]$

E para remoção usamos o rmdir. Logo para apagar o diretório recém criado:

[user@linux ~]$ rmdir mydir

[user@linux ~]$

Note que se não houver erro na digitação dos nomes, não é apresentado nenhuma informação.


Olhando e verificando arquivos e diretórios

Para mostrar o conteúdo de um diretório utiliza-se o comando ls (list):

[user@linux ~]$ ls

Desktop     Xrootenv.0    linuxcmd
Documents   bin           nedit.rpm
GUILG00.GZ  hitni123.jpg  nsmail
	

O comando ls aceita vários parâmetros, alguns deles são:

  • a - mostra todos os arquivos e pastas (incluindo os ocultos)
  • l - apresenta uma lista com os detalhes dos arquivos (permissões, modificação, etc)
  • t - ordena por data de modificação

Tente executar ls -a ou ls -lt. Para uma lista completa, verifique o manual do comando (man ls)

Para verificar o conteúdo de um arquivo texto pode ser utilizado os comandos cat, more ou less.

O comando cat pode ser usado para imprimir o conteúdo do arquivo na tela, como no exemplo:

[user@linux ~]$ cat a.c

#include <stdio.h>
main()
{
printf("hello\n");
}
	

Execute os comandos less e more para um arquivo texto e verifique a execução.


Movendo, Copiando e apagando arquivos e diretórios

Para copiar ou mover arquivos e pastas utilizamos os comandos cp (copy) e mv (move), respectivamente, apresentado no exemplo abaixo:

[user@linux ~]$ ls

bbsort.c  main.c
	

[user@linux ~]$ cp main.c main2.c

[user@linux ~]$ ls

bbsort.c  main.c  main2.c
	

O comando mv funciona da mesma maneira, porém o arquivo é movido (e não criado uma cópia), logo pode ser utilizado para renomear os arquivos.

Dica: A sintaxe geral destes comandos é <comando> <origem> <destino>, onde comando pode ser cp ou mv, origem é o arquivo/pasta de origem e destino é o arquivo/pasta de destino.
Dica2: Quando está se copiando pastas deve-se usar o parâmetro -r logo após o comando cp, mas não é necessário para mover.

Para apagar um arquivo execute o comando rm (remove):

[user@linux ~]$ rm main.c

[user@linux ~]$ ls

bbsort.c  main2.c
	

Atenção: O comando rm não pede confirmação para apagar, portanto tome cuidado.
Dica: É possível apagar diretórios usando o rm, basta adicionar o parâmetro -r.


Sucesso!

A partir deste ponto você já deve ser capaz de realizar algumas tarefas a partir de um terminal, mas na dúvida sempre consulte o manual (RTFM).


TODO

O que deve ser adicionado neste tutorial:
Informações detalhadas de arquivos (ls -l), extensão de arquivos, chmod, gcc/g++, Redirecionamento de entrada e saída (>, >>, <, <<), pipes (|), top/ps, grep, tail.
Algo mais?


Referências/Links


Dicas, Sugestões e Correções são sempre bem vindas, envie um email para: prcvilla at gmail dot com
Última atualização: 2014-03-10

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.