Linha de comando

De Wiki-II

A linha de comando é a interface de interação com o usuário tradicionalmente usada em sistemas Unix. Este artigo pretende ser uma introdução à linha de comando, explicando conceitos e comandos básicos e indicando onde se pode obter mais informações a respeito. O texto assume o shell Bash e o sistema GNU/Linux, que é o usado nas máquinas do Instituto de Informática.

Tabela de conteúdo

Conceitos básicos

O que se costuma chamar de pastas no Windows chamam-se diretórios no Unix.

Ao contrário do Windows, no Unix não existem unidades (C:, D:, etc.). Existe apenas um único diretório raiz, / (barra), sob o qual se encontram todos os sistemas de arquivo acessíveis, sejam eles locais (discos, etc.) ou remotos. Diz-se que esses sistemas de arquivos são montados em um diretório do sistema de arquivos raiz.

O shell

Ao se logar em uma máquina Unix, você se depara com um prompt mais ou menos assim:

fulano@portal ~$ 

Onde fulano é o nome do usuário, portal é o nome da máquina em que você está logado, e ~ é o diretório em que você está (~ é uma abreviação do seu diretório pessoal). Esse prompt é emitido pelo shell. O shell é o programa que interpreta os comandos que o usuário digita e executa as devidas operações.

Uma linha de comando (ou simplesmente comando) é, em geral, formada por um nome de programa (o comando propriamente dito), possivelmente seguido de um ou mais parâmetros, ou argumentos, que podem ser opções, nomes de arquivo, etc., dependendo do comando em questão.

Um exemplo de comando:

ls -la /home

Nesta linha, ls é o programa a ser executado. ls é uma abreviação de LiSt; sua função é listar os arquivos contidos em um diretório. -la são opções; -la é uma notação abreviada para -l -a. A opção -l indica que se quer uma listagem detalhada do diretório, contendo os nomes do usuário e grupo que possuem cada arquivo, data de modificação, etc., e não apenas os nomes dos arquivos. A opção -a (de all), mostra todos os arquivos, incluindo os ocultos [no Unix, arquivos ocultos são aqueles cujo nome começa com um . (ponto)]. O parâmetro /home indica o diretório que se quer listar. Caso não seja especificado, o ls lista o diretório atual.

A função do shell não é simplesmente passar os parâmetros intactos para o programa; o shell expande os parâmetros antes de passá-los. Uma das expansões mais usadas são os chamados caracteres curinga (wildcards), que são usados para selecionar arquivos segundo um determinado padrão. Por exemplo: existe um comando echo, cuja função é mostrar seus parâmetros (o echo é usado principalmente em shell scripts, programas escritos na linguagem do shell). Se você digitar echo algo, o comando imprimirá algo. Mas se você digitar echo p*, o shell substituirá o p* por todos os nomes de arquivo no diretório atual cujo nome comece com "p". O echo receberá os nomes dos arquivos, não o p*.

fulano@portal:~$ ls
Identities  Windows Config  profile_nt  public_html
fulano@portal:~$ echo algo
algo
fulano@portal:~$ echo p*
profile_nt public_html

Você poderia usar a expressão *.html para selecionar todos os arquivos .html em um diretório, por exemplo.

O shell por padrão interpreta cada palavra separada por espaço como um parâmetro. Assim, caso você queira digitar um nome de arquivo com espaços, deverá pôr o nome entre aspas, ou pôr uma barra invertida (\) antes de cada espaço:

fulano@portal:~$ ls Windows Config  
ls: Windows: No such file or directory
ls: Config: No such file or directory
fulano@portal:~$ ls "Windows Config" 
Dados de aplicativos  Desktop  Favoritos  Meus documentos
fulano@portal:~$ ls Windows\ Config 
Dados de aplicativos  Desktop  Favoritos  Meus documentos

(O primeiro comando tenta listar o conteúdo de dois diretórios, "Windows" e "Config", que não existem. Os outros dois comandos funcionam e são equivalentes.)

O shell possui uma função chamada filename completion: se você digitar parte do nome de um arquivo e teclar <TAB>, o shell completará o nome do arquivo automaticamente. Se houver mais de um arquivo começando com o texto que você digitou, teclando <TAB> novamente o shell listará todas as possibilidades. Isto também funciona para nomes de comandos.

Para cancelar um comando em execução, tecle <Ctrl-C>; para sair do shell, use o comando exit, ou tecle <Ctrl-D>.

Comandos básicos

  • pwd: Mostra o diretório atual, sem abreviações, ao contrário do prompt. [Print Working Directory]
  • ls: Lista os arquivos em um diretório [LiSt]. Como a maior parte dos comandos, o ls aceita parâmetros e opções. ls diretório lista o diretório especificado. As opções mais usadas são -l (lista detalhada) e -a (lista todos os arquivos, incluindo os ocultos [All]).
  • cd diretório: Entra no diretório especificado. [Change Directory]
  • cp origem destino: Copia o arquivo origem para destino, que pode ser um outro nome de arquivo ou um diretório (neste caso mais de um arquivo de origem pode ser especificado). Se o arquivo de destino já existir, ele será sobrescrito. As opções mais usadas são -R, que serve para copiar diretórios inteiros [Recursive], e -v, que emite mensagens para cada arquivo copiado [Verbose]. Estas opções são freqüentemente usadas em conjunto (-Rv).
    • cp algum.txt outro.txt: Copia algum.txt para outro.txt no diretório atual.
    • cp algum.txt textos: Copia algum.txt para o diretório textos (supondo que ele já exista).
    • cp -Rv textos textos-bkp: Copia o diretório inteiro textos para textos-bkp.
    • cp -v *.txt textos: Copia todos os arquivos com a extensão .txt para o diretório textos (supondo que ele já exista).
  • mv origem destino: Move o arquivo origem para destino. A sintaxe é similar à do cp. Também é usado para renomear arquivos (mv nome-antigo.txt nome-novo.txt).
  • mkdir diretório: Cria o diretório especificado [MaKe DIRectory].
  • rmdir diretório: Remove o diretório especificado, se estiver vazio.
  • rm arquivo: Remove o arquivo especificado. As opções mais usadas são -R, que serve para remover diretórios inteiros, incluindo subdiretórios, e -v, que emite mensagens para cada arquivo removido.
    • rm texto.txt: Remove o arquivo texto.txt.
    • rm -Rv textos: Remove o diretório textos.
    • CUIDADO: Exclusões de arquivo no Unix são irreversíveis! (Exceto com o uso ferramentas especializadas, às quais você não terá acesso pela conexão remota.)

Quase todos os comandos aceitam um parâmetro -h ou --help, que mostra sua sintaxe. Além disso, a maioria dos programas possui uma página de manual detalhada (manpage), acessível através do comando man nome_do_comando. (Tecle q para sair do man.)

Visualizadores e editores de texto

Para visualizar arquivos curtos, você pode usar o comando cat arquivo. Ele mostra todo o conteúdo do arquivo na tela. [O nome cat vem de CATenate, pois sua função original é concatenar arquivos; você pode digitar cat file1.txt file2.txt file3.txt >todos.txt para juntar o conteúdo dos três arquivos em todos.txt. (O >todos.txt não é um parâmetro, e sim um operador de redirecionamento; mas isso é outra história...)]

Para arquivos cujo conteúdo não cabe todo na tela, você pode usar o more (visualizador simples) ou o less (muito melhor). Tecle q para sair de qualquer um deles. Uma função útil desses visualizadores é a procura por texto: o comando /texto, com o visualizador aberto, procura pelo texto especificado. Você pode teclar n para repetir a pesquisa para a frente [Next], ou N (shift-N) para pesquisar para trás.

Você pode utilizar esses comandos em uma pipeline para visualizar a saída de outros comandos. Por exemplo, se você tem um diretório com muitos arquivos, pode usar o comando ls diretório | less para visualizar a listagem no less.

O Nano é um editor de texto bem simples e fácil de usar. Para editar um arquivo, use o comando nano arquivo. O nano é um editor com poucos recursos, portanto você provavelmente não vai querer utilizá-lo por muito tempo, especialmente se estiver pretendendo programar.

O Vim é um editor mais completo. No início ele pode ser um tanto quanto complicado, mas é só uma questão de hábito. O Vim possui recursos úteis para programação, como syntax highlighting, indentação automática, entre outros. Queira ver o artigo relacionado.

O Emacs é um programa freqüentemente descrito como "um sistema operacional disfarçado de editor". Ele possui uma infinidade de recursos, incluindo um leitor de e-mail e news e um navegador Web. Ele não está disponível na máquina portal (ainda).

Outros comandos

  • du arquivos: Calcula o espaço ocupado pelos arquivos e diretórios especificados, ou o diretório atual se nenhum arquivo for especificado [Disk Usage]. As opções mais usadas são -h, (mostra o tamanho em unidades mais legíveis -- kB, MB, etc. [Human-readable]; por padrão o du dá os tamanhos em kilobytes), -s (saída resumida [Summary]), -c (soma os tamanhos dos arquivos especificados [Count]).
  • grep padrão arquivos: Procura por um padrão (texto) em um ou mais arquivos. As opções mais usadas são -i (não diferencia maiúsculas e minúsculas [Ignore case]) e -r (permite a procura em diretórios e subdiretórios [Recursive]). O padrão é uma expressão regular; veja a manpage do grep para informação a respeito.
  • find diretórios expressão: Procura por arquivos que coincidam com a expressão especificada nos diretórios indicados (use . para o diretório atual). As expressões são muitas; veja a manpage para mais detalhes. Alguns exemplos:
    • find ~ -name "*.html": Encontra todos os arquivos com a extensão .html no seu diretório pessoal. Note as aspas envolvendo o *.html: elas são necessárias para evitar que o shell expanda a expressão, passando-a intacta para o find. Você também poderia usar find ~ -name \*.html.
    • find ~ -name "*.txt" -mtime -3: Encontra todos os arquivos com a extensão .txt que tenham sido modificados nos últimos 3 dias.

Mais informações

Ferramentas pessoais