4. Uma Breve Introdução à Linha de Comando

A linha de comando é a maneira mais direta de enviar comandos à sua máquina. Ao utilizar a linha de comando no GNU/Linux, você perceberá rapidamente que ela é muito mais poderosa e funcional que outros prompts de comando que pode ter encontrado anteriormente. Essa superioridade é devido ao fato de ter acesso não somente a todos os programas do ambiente X, mas também a milhares de outros utilitários no modo texto (em contrapartida ao modo gráfico) que não tem equivalentes gráficos, com suas várias opções e possíveis combinações, que seriam sobremaneira difíceis de serem acessadas na forma de botões ou menus.

Reconhecidamente a grande maioria das pessoas precisa de um pouco de ajuda para começar. Se você ainda não estiver trabalhando no console e estiver utilizando uma interface gráfica, a primeira coisa a fazer é iniciar um emulador de terminal. Acesse o menu principal do GNOME, KDE ou qualquer outro gerenciador de janelas que estiver utilizando e irá encontrar um número de emuladores no menu Sistema+Terminais. Escolha um, por exemplo Konsole ou RXvt. Dependendo da sua interface de usuário, haverá um ícone que identifica claramente o terminal no painel (Figura 1.2, “O Ícone do Terminal no Painel do KDE ”).

Figura 1.2. O Ícone do Terminal no Painel do KDE

O Ícone do Terminal no Painel do KDE

Quando você iniciar esse emulador de terminais, estará na realidade utilizando um shell, este é o nome do programa com o qual estará interagindo. Após iniciar o shell, você se encontrará diante do prompt de comando:

[usuario1@localhost usuario1]$

Assumimos que o nome do seu usuário é usuario1 e o nome de sua máquina é localhost (que é o caso quando sua máquina não faz parte de nenhuma rede). Após o prompt existe o espaço para que você digite seus comandos. Note que quando você entrou no sistema como usuário root, o caracter do prompt $ passa a ser um # (isso é verdade somente quando utilizar a configuraçào padrão, uma vez que pode configurar todos esses detalhes no GNU/Linux). Para se tornar o usuário root, execute o comando su após iniciar um shell.

[usuario1@localhost usuario1]$ su
# Enter the root password; (a senha não será mostrada na tela)
Password:
# exit (or Ctrl-D) volta à conta de usuário comum
[root@localhost usuario1]# exit
[usuario1@localhost usuario1]$

Quando você executa um shell pela primeira vez, normalmente estará no seu diretório home/. Para mostrar o nome do diretório corrente, execute o comando pwd (que quer dizer Print Working Directory - Mostre o Diretório Corrente):

$ pwd
/home/usuario1

A seguir veremos alguns comandos básicos que são muito úteis.

4.1. cd: Change Directory (Mude de Diretório)

O comando cd é semelhante ao utilizado no DOS, só que com mais funcionalidades. Ele faz exatamente o que seu acrônimo indica, muda o diretório corrente. Você pode utilizar o . e .., para indicar o diretório corrente e o diretório pai respectivamente. Digitando o comando cd sozinho você voltará ao seu diretório home. Executando cd - voltará ao último diretório visitado. E finalmente, pode especificar o diretório home do usuário usuario2 digitando cd ~usuario2 (o ~ sozinho indica seu próprio diretório home/). Observe que, como usuário comum, você não pode entrar no diretório home/ de outro usuário (a não ser que ele autorize explicitamente ou esta seja a configuração padrão do sistema), até que se torne o usuário root. Sendo assim, mude para o usuário root e pratique:

$ su -
Password:
# pwd
/root
# cd /usr/share/doc/HOWTO
# pwd
/usr/share/doc/HOWTO
# cd ../FAQ-Linux
# pwd
/usr/share/doc/FAQ-Linux
# cd ../../../lib
# pwd
/usr/lib
# cd ~usuario2
# pwd
/home/usuario2
# cd
# pwd
/root

Agora, volte ao usuário normal executando o comando exit e pressionando a tecla Enter (ou simplesmente pressionando Ctrl-D).

4.2. Variáveis de ambiente e o comando echo

Todos os processos tem suas variáveis de ambiente e o shell permite que você visualize-as diretamente utilizando o comando echo. Algumas variáveis de ambiente interessantes:

  1. HOME: essa variável de ambiente contém uma string que representa o caminho para o seu diretório home.

  2. PATH: ela contém a lista de todos os diretórios nos quais o shell irá procurar por executáveis quando você digitar um comando. Note que, diferentemente do DOS, por padrão, o shell não irá procurar por comandos no diretório corrente, a não ser que ele esteja listado nessa variável!

  3. USERNAME: esta variável contém o nome de login.

  4. UID: essa variável contém o ID do usuário.

  5. PS1: determina como o seu prompt irá ser mostrado, é freqüentemente uma combinação de seqüências especiais de caracteres. Para mais informações você pode ler a página de manual bash(1) página de manual digitando o comando man bash em um terminal.

Para que o shell mostre o valor de uma variável, você deve colocar um $ na frente do nome da variável. Vejamos um exemplo com o comando echo:

$ echo Hello
Hello
$ echo $HOME
/home/usuario1
$ echo $USERNAME
usuario1
$ echo Hello $USERNAME
Hello usuario1
$ cd /usr
$ pwd
/usr
$ cd $HOME
$ pwd
/home/usuario1

Como pode ver, o shell substitui o valor da variável antes que execute o comando. De outra maneira, o comando cd $HOME do exemplo não teria funcionado. De fato, o shell substitui primeiro a variável $HOME com o seu valor (/home/usuario1), então a linha se torna cd /home/usuario1, que é o que queríamos. A mesma coisa acontece com o exemplo do comando echo $USERNAME.

[Dica]Dica

Se uma das variáveis de ambiente não existir, você pode criá-la temporariamente digitando export NOME_VAR_AMB=value. Uma vez feito isso, pode verificar se ela foi criada da seguinte maneira:

$ export USERNAME=usuario1
$ echo $USERNAME
usuario1

4.3. cat: Mostre o Conteúdo de Um ou Mais Arquivos na Tela

Sem muito mais para explicar, esse comando simplesmente faz o seguinte: ele mostra o conteúdo de um ou mais arquivos para a saída padrão, normalmente a tela:

$ cat /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
/dev/hda2 / ext3 defaults 1 1
/dev/hdc /mnt/cdrom auto umask=0022,user,iocharset=utf8,noauto,ro,exec,users 0 0
none /mnt/floppy supermount dev=/dev/fd0,fs=ext2:vfat,--,umask=0022,iocharset=utf8,sync 0 0
none /proc proc defaults 0 0
/dev/hda3 swap swap defaults 0 0
$ cd /etc
$ cat modprobe.preload
# /etc/modprobe.preload: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
# this file is for module-init-tools (kernel 2.5 and above) ONLY
# for old kernel use /etc/modules

nvidia-agp
$ cat shells
/bin/bash
/bin/csh
/bin/sh
/bin/tcsh

4.4. less: um Paginador

O nome é uma brincadeira com a palavra relacionada ao primeiro paginador utilizado no UNIX® chamado more. Um paginador é um programa que permite ao usuário visualizar arquivos longos página por página (mais precisamente, tela por tela). O motivo de examinarmos o comando less ao invés do comando more é que less é mais intuitivo. Você pode utilizar o comando less para visualizar aquivos grandes que não caibam em uma única tela. Por exemplo:

less /etc/termcap

Para navegar no arquivo, utilize as teclas cima e baixo. Pressione a tecla Q para terminar a execução. O comando less pode fazer mais coisas que isso: pressione H para uma tela de ajuda ser mostrada com as possíveis opções.

4.5. ls: Listing Files - Listando Arquivos

O comando ls (LiSt) é equivalente ao comando dir do DOS, porém com muito mais funcionalidades. De fato, ele pode fazer mais porque os arquivos também podem. A sintaxe do comando ls é:

ls [opções] [arquivo|diretorio][arquivo|diretorio...] 

Se nenhum arquivo ou diretório for especificado na linha de comando, o ls irá listar os arquivos no diretório corrente. Existe um grande número de suas opções, iremos descrever apenas algumas delas:

  • -a: lista todos os arquivos, incluindo arquivos ocultos. Lembre-se que no UNIX®, os arquivos ocultos são aqueles que começam com um .; a opção -A lista “quase” todos os arquivos, ou seja, lista todos os arquivos que a opção -a listar, com exceção do “.” e “..

  • -R: lista recursivamente, i.e todos os arquivos e subdiretórios de diretórios digitados na linha de comando.

  • -h: se o tamanho do arquivo for mostrado, será mostrado em um formato legível, perto de cada arquivo. Isso quer dizer que você irá ver os tamanhos dos arquivos utilizando sufixos para os tamanhos, como “K”, “M” and “G”, por exemplo, “234K” e “132M”. Note que esses tamanhos se referem a potência de 2 e não potência de 10. Sendo assim 1K é realmente 1024 bytes ao invés de 1000 bytes.

  • -l: mostra informações adicionais sobre os arquivos, como as permissões associadas a ele, o dono e grupo do dono, o tamanho do arquivo e a data da última modificação.

  • -i: mostra o número do inode (o número único do arquivo no sistema de arquivos, veja mais em Capítulo 4, O Sistema de Arquivo do Linux) perto de cada arquivo.

  • -d: trata diretórios na linha de comando como se fossem arquivos normais ao invés de listar seu conteúdo.

Alguns Exemplos:

  • ls -R: lista recursivamente o conteúdo do diretório corrente.

  • ls -ih imagens/ ..: lista o número do inode e o tamanho em um formato legível para cada arquivo no diretório imagens/, no diretório pai e no diretório corrente.

  • ls -l imagens/*.png: lista todos os arquivos no diretório imagens/ cujos nomes terminem em .png, incluindo o arquivo .png, se ele existir.

4.6. Atalhos de Teclado Úteis

Existe um grande número de atalhos disponíveis, a sua principal vantagem é que eles economizam bastante tempo de digitação. Essa seção assume que você está utilizando o shell fornecido com o Mandriva Linux, bash, embora essas teclas de atalho também funcionem em outros terminais.

Primeiro: as setas. O bash mantém um histórico dos comandos anteriores, que podem ser vistos utilizando-se das teclas para cima e para baixo. Você pode voltar um número máximo de linhas definido na variável de ambiente HISTSIZE. Além disso, o histórico é perene entre uma e outra sessão, sendo assim, não irá perder os comandos digitados nas sessões anteriores.

As setas para esquerda e direita movimentam o cursor para a esquerda e direita na linha corrente, permitindo editar os comandos. Porém, existe mais a ser editado do que simplemente mover um caracter por vez: Ctrl-A e Ctrl-E, por exemplo, movem o cursor para o início e fim da linha corrente. As teclas Backspace e Del agem como esperado. Ctrl-K irá apagar da posição corrente até o final da linha, e Ctrl-W irá apagar a palavra imediatamente antes do cursor (assim como Alt-Backspace).

Digitando Ctrl-D em uma linha em branco irá fechar a sessão corrente, o que é bem menor que ter que digitar exit. Ctrl-C irá interromper o comando em execução, exceto se você estiver editando a linha de comando, caso no qual o processo de edição será cancelado e você retornará ao prompt. Ctrl-L limpa a tela. Ctrl-Z interrompe temporariamente uma tarefa, suspendendo-a. Esse atalho é muito útil quando esquecemos de digitar o caracter “&” após o comando. Por exemplo:

$ xpdf MyDocument.pdf

Conseqüentemente você não poderá utilizar mais seu shell, uma vez que a tarefa de interface foi alocada para o processo do xpdf. Para colocar a tarefa em segundo plano e recuperar seu shell, simplesmente digite Ctrl-Z e, a seguir, o comando bg.

Finalmente, as teclas Ctrl-S e Ctrl-Q, que são utilizadas para suspender e restaurar a saída para a tela. Elas não são utilizadas freqüentemente, porém você pode digitar por engano Ctrl-S (além do mais, S e D estão perto uma da outra no teclado). Então, se você se encontrar em uma situação onde digita e não consegue ver nenhum caracter aparecendo no Terminal, tente pressionar Ctrl-Q. Note que todos os caracteres que foram digitados entre o Ctrl-S não desejado e o Ctrl-Q serão mostrados de uma vez só.