Hugo Cisneiros (Eitch), hugo arroba devin ponto com ponto br
Versão 4.0, 2006

The Linux Manual

3.3. Comandos

Índice

3.3.1. Comandos para manipulação de arquivos
3.3.2. Comandos sobre processos no sistema
3.3.3. Outros comandos diversos

Prontos para colocar as mãos no teclado e cansar os dedos com um monte de comandos de Linux? Pois é, como expliquei anteriormente, o Linux possui uma interface texto, que é o console e permite que você use diversos comandos para fazer as mais variadas tarefas no sistema. Desde fazer um despertador, até completos programas com múltiplas funções... Apenas algumas palavras: poder e controle total sobre o sistema operacional!

E é por essa razão que procuro sempre mostrar o lado por de trás das interfaces bonitinhas e gráficas: controle a aprendizado do sistema. Nos sistemas Unix em geral (isso inclui o Linux), a filosofia é criar sempre vários programinhas (ou comandos, se preferir) que fazem determinadas tarefas específicas. Com isso, você pode tanto usar apenas um comando para fazer uma simples coisa, ou então combinar vários comandos e fazer um programa super complexo!

Tá na hora da gente começar a conhecer os comandos do Linux ;) Começando pelo básico preciso para se virar com a interface texto. Como existem centenas de comandos, não vou mostrá-los totalmente aqui. Mais comandos estarão disponíveis em outras seções deste manual: principalmente a parte de shell-script, que mexe muito com isso.

3.3.1. Comandos para manipulação de arquivos

A primeira coisa que sempre vem em mente no uso de um sistema operacional é como lidar com os arquivos dentro dele... Nesta seção eu vou mostrar alguns comandos básicos para mexer com os arquivos.

3.3.1.1. cd - Navegando entre diretórios

cd [nome_do_diretório]

Este comando acima mudará o diretório atual de onde o usuário está. Há também algumas abreviações de diretórios no Linux para a facilitação, estes são:

Abreviação Significado
. (ponto) Diretório atual
.. (dois pontos) Diretório anterior
~ (til) Diretório HOME do usuário
/ (barra) Diretório Raiz
- (hífen) Último diretório

Tabela 3.2. Parâmetros do comando cd

Por exemplo, se eu quero ir para o meu diretório home, faço o seguinte:

$ pwd
/usr/games
$ cd ~
$ pwd
/home/hugo

Ou seja, eu estava no diretório /usr/games e com um simples cd para o diretório ~, fui para o meu diretório home (/home/hugo). Quando você deseja saber o caminho completo do diretório em que você está, utilize o comando pwd. Se você deseja ir para um diretório que está na raiz diretamente, você usa o / antes, exemplo:

$ pwd
/usr/local/bin
$ cd /etc/rc.d
$ pwd
/etc/rc.d
$ cd -
$ pwd
/usr/local/bin

Eu estava no diretório /usr/local/bin e quis ir para o diretório /etc/rc.d que está na raiz. Note depois que eu usei o hífen e fui de volta para o último diretório em que eu estava.

3.3.1.2. ls - Listar arquivos

ls [opções] [arquivo/diretório]

Este comando lista os arquivos, nada mais que isso. Se você executar apenas o ls sozinho, ele vai mostrar todos os arquivos existentes no diretório atual. Há também as opções extras:

Parâmetro Significado
-l Lista os arquivos em formato detalhado.
-a Lista os arquivos ocultos (que começam com um .)
-h Exibe o tamanho num formato legível (combine com -l)
-R Lista também os subdiretórios encontrados

Tabela 3.3. Parâmetros do comando ls

Exemplo de uma listagem detalhada:

$ ls -l

total 9916
drwxrwxr-x   5 hugo hugo    1302 Aug 16 10:15 CursoC_UFMG
-rw-r--r--   1 hugo hugo  122631 Jul 12 08:20 Database.pdf
-rw-r--r--   1 hugo hugo 2172065 Jul 12 08:20 MySQL.pdf
-rw-r--r--   1 hugo hugo 2023315 Jul 12 08:20 PHP.pdf

Podemos também usar no ls os wildcards, ou seja, caracteres que substituem outros. Exemplo: eu quero listar todos os arquivos que têm a extensão .txt, faço o seguinte:

$ ls *.txt

debian-install.txt  manualito.txt  named.txt           plip.txt  seguranca.txt
ipfw.txt            mouse.txt      placa_de_video.txt  rede.txt  sis.txt

O wildcard é o *, que representa "tudo".txt. Existem outros wildcards, exemplo disso é o ponto de interrogação (?), que substitui apenas 1 caractere, exemplo:

$ ls manual?.txt

manual1.txt  manual2.txt  manual3.txt  manualx.txt  manualP.txt

Existe outro wildcard, que envolve os colchetes. Por exemplo:

$ ls manual[3-7].txt

manual3.txt  manual4.txt  manual6.txt  manual7.txt

Lista todos os arquivos que tiverem como manual?.txt, onde o ? pode ser substituído por 3, 4, 5, 6 e 7.

3.3.1.3. mkdir - Cria um diretório

mkdir <nome_do_diretório>

Cria um diretório. Exemplo:

$ mkdir ~/paginas

Esse comando cria um diretório dentro do HOME do usuário que o executou.

3.3.1.4. rmdir - Remove um diretório vazio

rmdir <nome_do_diretorio>

Apaga um diretório que esteja vazio. Exemplo:

$ rmdir /tmp/lixo

Isto apagará o diretório /tmp/lixo apenas se ele estiver vazio. Para apagar um diretório com seu conteúdo, use o comando rm.

3.3.1.5. cp - Cópia de arquivos e diretórios

cp [opções] <arquivo_origem> <arquivo_destino>

O comando cp copia arquivos e diretórios. Como opções dele, podemos ver:

Parâmetro Significado
-i Modo interativo. Pergunta se você quer sobrescrever ou não (confirmações)
-v Mostra o que está sendo copiado.
-R Copia recursivamente (diretórios e subdiretórios)

Tabela 3.4. Parâmetros do comando cp

Exemplos:

Quero copiar brasil.txt para livro.txt, com a opção de modo interativo.

$ cp -i brasil.txt livro.txt

cp: sobrescrever `livro.txt'?

Como o arquivo livro.txt já existia, ele pergunta se quer sobrescrever, responda y (sim) ou n (não). Agora eu quero copiar o diretório /home/ftp com tudo dentro (até seus subdiretórios) para /home/ftp2, faço o seguinte:

$ cp -R /home/ftp /home/ftp2

3.3.1.6. mv - Move arquivos e diretórios

mv <arquivo_origem> <arquivo_destino>

Este comando simplesmente move algum arquivo para outro lugar. Ele também é usado para renomear um arquivo. Por exemplo, se eu quero renomear o industria.txt para fabrica.txt, eu faço o seguinte:

$ mv industria.txt fabrica.txt

Se eu quiser mover o industria.txt para /home/usuario com o mesmo nome, faço:

$ mv industria.txt /home/usuario

3.3.1.7. rm - Deleta arquivos e diretórios

rm [opções] <arquivo>

Este comando apaga definitivamente o arquivo ou diretório. Exemplo:

$ rm arquivo.bin

Para apagar um diretório com todo seu conteúdo, usa-se a opção -r, assim:

$ rm -r /tmp/lixo
[Cuidado] Cuidado

O comando rm -rf / é muito perigoso. Tente nunca usá-lo, senão todo seu sistema será apagado ;)

3.3.1.8. find - Procurando arquivos

find <diretorio> [-name nomedoarquivo]

O comando find procura por arquivos no diretório especificado. Em seu uso mais simples, ele procura pelos nomes dos arquivos, mas pode também procurar por permissões, última modificação, etc. Como base, usaremos um exemplo para procurar o nome de um arquivo:

$ find /home/eitch -name arquivo.txt

Isso irá procurar o arquivo.txt dentro do diretório /home/eitch. Os wildcards mostrados no comando ls (Seção 3.3.1.2, “ls - Listar arquivos”) também podem ser usados:

$ find /home/eitch -name documento*.odp

O find irá procurar todos os arquivos que tem o nome que começam com documento e terminam com .odp.

3.3.1.9. ln - Linkando arquivos

ln -s <arquivo_origem> [link simbólico]

Este comando é usado para gerar links simbólicos, ou seja, que se comportam como um arquivo ou diretório, mas são apenas redirecionadores que mandam seu comando para outro arquivo ou diretório, por exemplo:

$ ln -s /manual /home/linux-manual

Este comando criará o link /home/linux-manual, se você der um ls -l você verá que o diretório /home/linux-manual está apontando para /manual. Se você ir para o /home/linux-manual, você na verdade estará no /manual, mas como é um link, não há diferença.

3.3.1.10. cat - Exibe o conteúdo de um arquivo ou direciona-o para outro

cat <arquivo>

Este comando existe para mostrar o conteúdo de um arquivo, ou para fazer a cópia deste arquivo, ou uma junção. Vejamos um exemplo, se eu quiser mostrar o conteúdo de /home/usuario/contato, eu digito:

$ cat /home/hugo/contato

Aparecerá o conteúdo do arquivo contato:


Hugo Cisneiros
hugo_arroba_devin_ponto_com_ponto_br
http://www.devin.com.br/eitch/

Este comando pode também servir de direcionador para outro arquivo. Indicadores são usados para isso.

Indicador > faz uma cópia, exemplo:

$ cat contato1 > contato2

Indicador >> acrescenta um arquivo ao outro, exemplo:

$ cat contato1 > contato2

O cat pode fazer coisas que nem você imagina, como tocar sons. Para fazer isso é simples, ele direciona o arquivo som para o dispositivo de áudio (que no linux é representado por um arquivo). Primeiro vamos gravar com um microfone o seu som:

$ cat gravacao.au < /dev/audio

Agora escute o som que voce gravou com o comando:

$ cat gravacao.au > /dev/audio

3.3.1.11. file - Indicando o tipo de arquivo

file <arquivo>

Este comando identifica o tipo de arquivo ou diretório indicado pelo usuário conforme os padrões do sistema operacional. Há varios tipos de retorno, vamos aqui ver alguns mais importantes:


ASCII text      C Program source
directory       ELF-Executable
data            Bourn-again shell-script

Apenas um exemplo deste comando:

$ file linux.txt

ASCII Text

3.3.2. Comandos sobre processos no sistema

Cada programa executado no Linux gera um processo no sistema. Cada um desses processos tem um número de identificação próprio, chamado de PID (Process ID). Neste tópico, aprenderemos alguns comandos para mexer com esses processos.

3.3.2.1. ps - Listando processos

ps [opções]

Quando um programa é executado no sistema, ele recebe um número de identificação, o chamado PID. Este comando lista esses processos executados e apresenta o PID. Além do PID, ele também mostra o comando executado (CMD) e também o STAT (status atual do processo executado, veja nota abaixo), além de outros.

O status do processo é identificado por letras, aqui segue uma tabela com as definições de cada letra:

Letra Definição
0 (Zero) Não existente (Fruto da sua imaginação ou horas sem dormir)
S Descansando, não ativo (Sleeping)
R Rodando (Running)
I Intermediando (Intermediate)
Z Terminando (Zumbi, muito sinistro)
T Parado (Stopped)
W Esperando (Waiting)

Tabela 3.5. Status dos processos no comando ps

Agora um exemplo para este comando:

$ ps aux

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME
COMMAND
root         1  0.0  0.0  1120   52 ?        S    Dec25   0:05 init
root         2  0.0  0.0     0    0 ?        SW   Dec25   0:00 [kflushd]
root         3  0.0  0.0     0    0 ?        SW   Dec25   0:00 [kupdate]
root         4  0.0  0.0     0    0 ?        SW   Dec25   0:00 [kpiod]
root      1004  0.0  0.0 10820   48 ?        SN   Dec25   0:00 [mysqld]
root      1007  0.0  0.0  2852    0 ?        SW   Dec25   0:00 [smbd]
hugo      1074  0.0  0.0  1736    0 tty1     SW   Dec25   0:00 [bash]
hugo      1263  0.0  0.0  1632    0 tty1     SW   Dec25   0:00 [startx]
hugo      1271  0.0  0.0  2304    0 tty1     SW   Dec25   0:00 [xinit]
hugo      1275  0.0  2.4  4312 1360 tty1     S    Dec25   0:16 wmaker
hugo      2461  0.0  0.0  1636    0 tty1     SW   07:09   0:00 [netscape]
hugo      9618  0.9  4.9  5024 2688 pts/1    S    09:56   0:06 vim d03.html
hugo     12819  6.7  6.9  5580 3796 ?        S    10:03   0:13 mpg123 King Diam

3.3.2.2. top - Listando processos em tempo real

top

O comando top é um programinha que mostra ao usuário os processos ativos no sistema. Ele é uma interface para o ps, ou seja, ele mostra as mesmas informações que o ps, só que em tempo real e na ordem de uso (quanto mais em cima, mais o processo está gastando processamento e memória). Experimente!

3.3.2.3. kill - Matando um processo

kill [-SINAL] <PID>

O comando kill é bastante importante. A função deste comando é muito conhecida de quem usa Windows: ela mata um processo existente, principalmente quando o processo está travado (por isso os usuários Windows utilzam bastante). Este comando pode ser usado não apenas para forçar o término de um processo, como também enviar sinais para ele (Reiniciar, recarregar os arquivos de configuração, terminar normalmente, etc).

Por exemplo, eu tenho um programa rodando (vim) e quero que ele seja morto natoralmente, sem confirmação, nem nada. Eu forço essa ação com o seguinte comando:

$ ps aux | grep vim

hugo      4213  0.1  0.6   9364  3544 pts/4    S+   12:46   0:02 vim tlm4.0-pt_BR.xml

Uma vez obtido o PID do processo, mato com o comando:

$ kill -9 4213

Com esse segundo comando, o sinal -9 foi mandado para o processo, matando-o sem piedade!

Agora vamos usar o comando kill para mandar terminar normalmente um processo:

$ kill -15 666

Ao invés do sinal 9, enviei o sinal 15, que significa terminar normalmente. Se fosse num ambiente gráfico por exemplo, isso é o equivalente a clicar em um Fechar Janela ou algo do gênero :)

[Dica] Dica

Ao invés de usar uma numeração para os sinais, é possível também usar os sinais escritos. Por exemplo, o nome equivalente ao sinal -9 é -KILL, o -15 é -TERM.

Para obter uma lista dos sinais, use o comando:

$ man 7 signal

3.3.2.4. killall - Matando processos pelo nome

killall [-SINAL] <comando>

Faz a mesma coisa que o kill, só que a vantagem aqui é que você não precisa saber o PID do processo e sim o nome. A desvantagem é que se tiver dois processos com o mesmo nome, os dois são finalizados. Seguindo o exemplo do comando kill:

$ ps aux | grep vim

hugo      4213  0.1  0.6   9364  3544 pts/4    S+   12:46   0:02 vim tlm4.0-pt_BR.xml

Uma vez obtido o PID do processo, mato com o outro comando:

$ killall -9 vim

E lá se vai nosso vim de novo, coitado :)

3.3.2.5. w - Lista os usuários logados

w

Com este comando, é possível você ver quais usuários estão atualmente logados no seu sistema, além de informações como "O que ele está fazendo", "aonde está fazendo", "desde quando está logado", etc. Vejamos um exemplo aqui da minha máquina:

$ w

15:16:47 up  6:28,  7 users,  load average: 0.15, 0.27, 0.26
 USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
 hugo     :0       -                08:49   ?xdm?  40:10   0.06s /bin/sh  /usr/bin/startkde
 hugo     pts/0    -                08:49    6:26m  0.00s 22.68s kded
 hugo     pts/1    -                13:07   57:46   0.02s  0.00s man 7 signal
 hugo     pts/2    -                14:05   41:48   0.05s  0.03s ssh aeris
 hugo     pts/3    -                15:16    0.00s  0.02s  0.00s w
 hugo     pts/4    -                12:26   10.00s  0.45s  0.43s vim tlm4.0-pt_BR.xml
 hugo     pts/5    -                12:56   55:37   0.26s  0.23s vim tlm4.0-pt_BR.xml

3.3.3. Outros comandos diversos

A seguir alguns comandos diversos que é bem útil saber, mas que não se encaixam em alguma categoria que defini acima :)

3.3.3.1. Descompactar arquivos

Para arquivos .tar.gz:

$ tar zxpvf arquivo.tar.gz

Para arquivos .tar:

tar xpvf arquivo.tar

Para arquivos .gz:

gunzip arquivo.gz

Para arquivos .tar.bz2:

tar jxpvf arquivo.tar.bz2

Para arquivos .bz2:

bunzip2 arquivo.bz2

Para arquivos .zip:

unzip arquivo.zip

Para arquivos .rar:

unrar e arquivo.rar
[Nota] Nota

Para a extensão .rar, é necessário um programa especial: o unrar. Ele é proprietário (mas gratuito) e pode ser encontrado no endereço:

http://www.rarlab.com

3.3.3.2. Compactar arquivos

Empacotando um diretório em .tar:

tar cvf arquivo.tar diretorio/

Empacotando e compactando um diretório em .tar.gz:

tar zcvf arquivo.tar.gz diretorio/

Empacotando e compactando um diretório em .tar.bz2:

tar jcvf arquivo.tar.bz2 diretorio/

Compactando um arquivo para .gz:

gzip arquivo

Compacta um arquivo para .bz2:

bzip2 arquivo

3.3.3.3. Espaço em disco

Comando Descrição
df -h Mostra o espaço em disco das partições montadas
du -hs Mostra o espaço ocupado pelo diretório atual

Tabela 3.6. Comandos de Espaço em Disco

3.3.3.4. Informações do sistema

Comando Descrição
date Mostra a data e hora atual
cal Mostra um calendário com o dia atual
uptime Mostra quanto tempo seu sistema está rodando
free Exibe a memória livre, a usada e os buffers da memória RAM
uname -a Mostra informações de versão do kernel

Tabela 3.7. Comandos para informações do sistema