Índice
Resumo
As interfaces gráficas de usuário estão ficando cada vez mais importantes para o Linux, mas usar o mouse nem sempre é a melhor forma de realizar as tarefas diárias. A linha de comando oferece alta flexibilidade e eficiência. Os aplicativos baseados em texto são principalmente importantes para controlar computadores em links de rede lentos ou se você deseja executar tarefas como root na linha de comando em um xterm. O shell Bash é o interpretador de linha de comando padrão no SUSE Linux.
Linux é um sistema multiusuário e o acesso a arquivos é controlado pelas permissões do usuário. Independentemente de usar a linha de comando ou uma interface gráfica de usuário, é útil entender o conceito de permissão. Ao usar a linha de comando, um número de comandos são importantes. O editor de textos vi geralmente é usado ao configurar um sistema a partir da linha de comando. Ele também é conhecido por vários administradores do sistema e desenvolvedores.
Na barra de tarefas do KDE, existe um ícone que ilustra um monitor com uma concha. Quando você clica nesse ícone, uma janela de terminal é aberta para a digitação de comandos. O Konsole, o programa de terminal, normalmente executa o Bash (Bourne again shell), um programa desenvolvido como parte do projeto GNU. Na área de trabalho GNOME, clique no ícone de monitor de computador no painel superior para iniciar um terminal que normalmente executa o Bash.
Depois de abrir o shell, veja a primeira linha do prompt. O prompt geralmente consiste no nome do usuário, nome do host e no caminho atual, mas pode ser personalizado. Quando o cursor está depois desse prompt, você pode enviar comandos diretamente ao seu sistema de computador.
Um comando é composto de vários elementos. O primeiro elemento é sempre o comando real, seguido por parâmetros e opções. Os comandos são executados quando você pressiona Enter. Antes disso, você pode editar a linha de comando, adicionar opções ou corrigir erros de digitação com facilidade. Um dos comandos mais usados é o ls, que pode ser usado com ou sem argumentos. Digitar o comando ls simples no console mostra o conteúdo do diretório atual.
As opções são prefixadas com hífen. O comando ls -l, por exemplo, mostra o conteúdo do mesmo diretório em detalhes (formato de listagem longa). Ao lado de cada nome de arquivo, você pode ver sua data de criação, seu tamanho em bytes e mais detalhes, que serão abordados mais adiante. Uma opção muito importante que existe para vários comandos é --help. Quando você digita ls --help, todas as opções do comando ls são exibidas.
É importante usar as “aspas” corretamente. Se um nome de arquivo contiver um espaço, anule o espaço usando uma barra invertida (\) ou delimite o nome do arquivo entre aspas simples ou duplas. Caso contrário, o Bash interpretará um nome de arquivo como Meus Documentos como os nomes de dois arquivos ou diretórios. A diferença entre as aspas simples e duplas é que a expansão de variáveis ocorre dentro de aspas duplas. As aspas simples garantem que o shell veja a string com aspas de forma literal.
Para usar o shell de forma eficaz, é muito útil conhecer um pouco sobre as estruturas de arquivos e diretórios do sistema Linux. Você pode considerar os diretórios como pastas eletrônicas nas quais são armazenados arquivos, programas e subdiretórios. O diretório de nível superior na hierarquia é o diretório raiz, indicado como /. É a partir dele que todos os outros diretórios podem ser acessados.
O diretório /home contém os diretórios em que os usuários individuais podem armazenar seus arquivos pessoais. Figura 27.1, “Exemplo de uma árvore de diretórios padrão” mostra a árvore de diretórios padrão no Linux, com os diretórios pessoais dos usuários de exemplo xyz, linux e tux. A árvore de diretórios do sistema Linux tem uma estrutura funcional que segue o FHS (Filesystem Hierarchy Standard - Padrão da Hierarquia do Sistema de Arquivos). A lista abaixo oferece uma breve descrição dos diretórios padrão do Linux.
/Diretório raiz, ponto inicial da árvore de diretórios
/homeDiretórios pessoais de usuários
/devArquivos de dispositivos que representam componentes de hardware
/etcArquivos importantes para a configuração do sistema
/etc/init.dScripts de boot
/usr/binProgramas genericamente acessíveis
/binProgramas necessários anteriormente no processo de boot
/usr/binProgramas reservados ao administrador do sistema
/sbinProgramas reservados ao administrador do sistema e necessários para inicialização
/usr/includeArquivos de cabeçalho para o compilador C
/usr/include/g++Arquivos de cabeçalho para o compilador C++
/usr/share/docArquivos de documentação variados
/usr/share/manPáginas do manual do sistema (páginas de manual)
/usr/srcCódigo-fonte do software do sistema
/usr/src/linuxCódigo-fonte do kernel
/tmp, /var/tmpArquivos temporários
/usrTodos os programas aplicativos
/varArquivos de configuração (por exemplo, aqueles vinculados de /usr)
/var/logArquivos de registro do sistema
/var/admDados do administrador do sistema
/libBibliotecas compartilhadas (para programas vinculados dinamicamente)
/procSistema de arquivos de processamento
/sysSistema de arquivos do sistema em que são reunidas todas as informações sobre dispositivos do kernel
/usr/localLocal, extensões independentes de distribuição
/optSoftware opcional, pacotes de programas complementares maiores (como KDE, GNOME, Netscape)
Há dois recursos importantes do shell que podem facilitar o seu trabalho:
Para repetir um comando que tenha sido digitado anteriormente, pressione ↑ até o comando anterior aparecer no prompt. Mova para o próximo da lista de comandos digitados anteriormente pressionando ↓. Para editar a linha de comando, mova o cursor até a posição desejada usando as teclas de seta e inicie a digitação. Use Ctrl-R para pesquisar o histórico.
Finalize o nome do arquivo após digitar suas primeiras letras até que ele possa ser identificado com exclusividade. Para isso, digite as primeiras letras e pressione Tab. Se houver vários nomes de arquivo iniciando com as mesmas letras, obtenha uma lista de tais nomes pressionando Tab duas vezes.
Agora que você já sabe qual é a aparência de um comando, conhece os diretórios do SUSE Linux e sabe como agilizar procedimentos usando o Bash, coloque esse conhecimento em prática neste pequeno exercício.
Abra um console na área de trabalho do KDE OU GNOME clicando no ícone de concha.
Digite o comando ls para ver o conteúdo do seu diretório pessoal.
Use o comando mkdir (que significa criar diretório) para criar um novo subdiretório chamado test digitando mkdir test.
Agora, inicie um editor pressionando Alt-F2 e digitando kate Kate para KDE gedit para Gedit no GNOME. Digite algumas letras no editor e salve o arquivo como Testfile no seu diretório pessoal. O Linux diferencia maiúsculas de minúsculas. Por exemplo, use um T maiúsculo.
Exiba o conteúdo do seu diretório pessoal novamente. Em vez de digitar ls mais uma vez, pressione ↑ duas vezes e o comando ls reaparecerá no prompt. Para executar o comando, pressione Enter. O diretório test recém-criado deverá aparecer em letras azuis e Testfile em letras pretas. É dessa forma que diferenciamos diretórios de arquivos em um console.
Mova Testfile para o subdiretório test com o comando mv. Para agilizar o processo, use a função de expansão: digite mv T e pressione Tab. Se não houver outro arquivo cujo nome comece com essa letra no diretório, o shell expandirá o nome do arquivo e adicionará a string estfile. Caso contrário, adicione uma ou duas letras por conta própria e experimente pressionar Tab todas as vezes para ver se o shell expande o nome. Por fim, digite um espaço e test após o nome do arquivo expandido e pressione Enter para executar o comando.
Nesse momento, o Testfile provavelmente não estará mais no diretório. Digite ls novamente para verificar se realmente não está.
Para ver se o arquivo foi de fato movido, vá para o diretório test com o comando cd test. Digite ls novamente. Você deverá ver Testfile na listagem. Volte para o seu diretório pessoal em qualquer ponto digitando apenas cd.
Para fazer cópia de um arquivo, use cp. Por exemplo, digite cp Testfile Testbackup para copiar o Testfile para o Testbackup. Mais uma vez, o comando ls pode ser usado para constatar se os arquivos estão nos diretórios.
Quando você estiver trabalhando com arquivos ou diretórios, é importante especificar o caminho correto. Entretanto, você não precisa digitar o caminho completo (absoluto) desde o diretório raiz até o respectivo arquivo. Você pode iniciar no diretório atual. Acesse seu diretório pessoal diretamente com ~. Isso significa que há duas maneiras de listar o arquivo Testfile no diretório test: digitando o caminho relativo com o comando ls test ou especificando o caminho absoluto com ls ~/test.
Para relacionar o conteúdo dos diretórios pessoais dos outros usuários, digite ls ~nomedousuário. Na árvore de diretórios mencionada acima, um dos usuários de exemplo é tux. Nesse caso, ls ~tux relacionaria o conteúdo do diretório pessoal de tux.
Faça referência ao diretório atual com um ponto (.). O próximo nível superior na árvore é representado por dois pontos (..). Digitando ls .., veja o conteúdo do diretório pai do diretório atual. O comando ls ../.. mostra o conteúdo do diretório dois níveis acima na hierarquia.
Veja aqui outro exemplo que ilustra como percorrer os diretórios do sistema SUSE Linux.
Vá para o seu diretório pessoal com o comando cd. Em seguida, crie um diretório com o nome test2 digitando mkdir test2.
Vá para o novo diretório com o comando cd test2 e crie nele um subdiretório com o nome subdirectory. Para ir até ele, use a função de expansão: digite cd su e pressione Tab. O shell expandirá o restante do nome do diretório.
Agora tente mover o arquivo criado anteriormente Testbackup para o diretório atual (subdirectory) sem mudar o diretório novamente. Para isso, especifique o caminho relativo desse arquivo: mv ../../test/Testbackup . (observe o ponto no final). O ponto no fim do comando é necessário para informar ao shell que o diretório atual é o destino do arquivo. ../../, neste exemplo, refere-se ao seu diretório pessoal.
Outra vantagem oferecida pelo shell são os curingas para a expansão de nomes de caminho. Existem três tipos diferentes no Bash:
Corresponde exatamente a um caractere arbitrário.
Corresponde a qualquer número de caracteres
Corresponde a um dos caracteres do grupo especificado entre os colchetes, que aqui é representado pela string set. Com parte de set , você também pode especificar as classes de caractere usando a sintaxe [:classe:], onde a classe pode ser alnum, alpha, ascii etc.
Se você usar ! ou ^ no início do grupo ([!set]), haverá correspondência com um caractere diferente daqueles identificados por set.
Pressupondo-se que o diretório test contenha os arquivos Testfile, Testfile1, Testfile2 e datafile, o comando ls Testfile? listará os arquivos Testfile1 e Testfile2. Com ls Test*, a lista também incluirá Testfile. ls *fil* mostra todos os arquivos de exemplo. Por fim, você pode usar o curinga set para acessar todos os arquivos de exemplo cujo último caractere é um número: ls Testfile[1-9] ou, usando classes, ls Testfile[[:digit:]].
Dos quatro tipos de curingas, o mais inclusivo é o asterisco. Ele pode ser usado para copiar todos os arquivos contidos em um diretório para outro diretório ou apagar todos os arquivos com um único comando. O comando rm *fil*, por exemplo, apaga todos os arquivos do diretório cujo nome inclua a string fil.
O Linux inclui dois programas pequenos para a exibição de arquivos de texto diretamente no shell. Em vez de iniciar um editor para ler um arquivo como Readme.txt, basta digitar less Readme.txt para exibir o texto na janela de console. Use Space para rolar uma página para baixo. Use as teclas Page Up e Page Down para mover o texto para frente ou para trás. Para sair do programa less, pressione Q.
Em vez de less, você também pode usar o programa mais antigo more. Entretanto, é menos conveniente porque ele não permite que você role para trás.
O programa less recebeu esse nome devido ao preceito de que menos é mais. Ele também pode ser usado para ver a saída de comandos de forma conveniente. Para verificar como isso funciona, leia Seção 27.1.7, “Pipes e redirecionamento”.
Normalmente, a saída padrão no shell é a sua tela ou a janela de console, e a entrada padrão é o teclado. Para encaminhar a saída de um comando para um aplicativo como less, use um pipeline.
Para ver os arquivos no diretório test, digite o comando ls test | less. O conteúdo do diretório test será exibido por meio do less. Isso é recomendável quando a saída normal com ls é muito extensa. Por exemplo, se você vir o conteúdo do diretório dev com ls /dev, apenas uma pequena parte da janela estará visível. Exiba a lista toda com ls /dev | less.
Também é possível salvar a saída de comandos em um arquivo. Por exemplo, echo "test one" > Content genera um novo arquivo chamado Content que contém as palavras test one. Exiba o arquivo com less Content.
Você também pode usar um arquivo como a entrada de um comando. Por exemplo, com tr, substitua os caracteres da entrada padrão redirecionada do arquivo Content e grave o resultado na saída padrão: substitua t por x chamando tr t x < Content. A saída do comando tr é enviada para a tela.
Se você precisar de um novo arquivo que contenha a saída, direcione a saída do comando tr para um arquivo. Para testar isso, vá para test e digite o comando tr t x < ../Content > new. Por fim, exiba new com less new.
Assim como na saída padrão, a saída de erro padrão é enviada para o console. Entretanto, para redirecionar a saída de erro padrão para um arquivo chamado errors, acrescente 2> errors ao comando correspondente. A saída padrão e o erro padrão serão salvos em um arquivo chamado alloutput se você acrescentar >& alloutput. Por fim, para acrescentar a saída de um comando a um arquivo já existente, o comando deve ser seguido por >> em vez de um único >.
Agora que você já criou vários arquivos e diretórios, pense em criar pacotes e compactar dados. Suponhamos que você queira que o diretório test inteiro seja compactado em um arquivo que possa ser salvo em um chaveiro USB como uma cópia de backup ou enviado por e-mail. Para isso, use o comando tar (para o copiador em fita). Com tar --help, exiba todas as opções do comando tar. As opções mais importantes serão explicadas aqui:
(para criação) Cria um novo arquivo.
(para tabela) Exibe o conteúdo de um pacote.
(para extração) Descompacta o pacote.
(para detalhes) Mostra na tela todos os arquivos durante a criação do pacote.
(para arquivo) Escolhe um nome para o arquivo do pacote. Quando você estiver criando um pacote, esta opção deverá ser sempre a última a ser especificada.
Para compactar o diretório test com todos os arquivos e subdiretórios em um arquivo denominado testarchive.tar, use as opções -c e -f. Para fins de teste, adicione também -v para continuar com o empacotamento, embora esta opção não seja obrigatória. Depois de usar cd para mudar para o seu diretório pessoal, onde o diretório test está localizado, digite tar -cvf testarchive.tar test. Em seguida, exiba o conteúdo do arquivo do pacote com tar -tf testarchive.tar. O diretório test com todos esses arquivos e diretórios permaneceu inalterado no disco rígido. Para descompactar o arquivo, digite tar -xvf testarchive.tar, mas não faça isso ainda.
No caso de compactação de arquivos, a escolha óbvia é gzip ou, para uma taxa de compactação ainda melhor, bzip2. Digite apenas gzip testarchive.tar (ou bzip2 testarchive.tar, mas gzip é usado neste exemplo). Com o comando ls, observe que o arquivo testarchive.tar não existe mais e que o arquivo testarchive.tar.gz foi criado. Esse arquivo é bem menor e, portanto, mais adequado para transferência por e-mail ou armazenamento em um chaveiro USB.
Agora, descompacte o arquivo no diretório test2 criado anteriormente. Para isso, digite cp testarchive.tar.gz test2 para copiar o arquivo para esse diretório. Mude para o diretório usando cd test2. Um arquivo compactado com a extensão .tar.gz pode ser descompactado com o comando gunzip. Digite gunzip testarchive.tar.gz,
que resulta no arquivo testarchive.tar, e depois extraia ou descompacte o tar usando o comando tar -xvf testarchive.tar. Você também pode descompactar e extrair o arquivo compactado em uma única etapa com tar -xvf testarchive.tar.gz (não é mais necessário adicionar a opção -z). Com ls, observe que um novo diretório test foi criado com o mesmo conteúdo do diretório test no seu diretório pessoal.
mtools consiste em um conjunto de comandos para se trabalhar com os sistemas de arquivos do MS-DOS. Os comandos incluídos em mtools permitem que você se refira à primeira unidade de disquete como a:, assim como no MS-DOS. Além disso, os comandos se assemelham aos do MS-DOS, exceto pelo fato de que eles são iniciados com o prefixo m:
Exibe o conteúdo do disquete na unidade a:
Copia o arquivo Testfile para o disquete
Apaga o Testfile em a:
Formata o disquete no formato MS-DOS (usando o comando fdformat)
Faz com que a: seja seu diretório atual
Cria o subdiretório test no disquete
Apaga o subdiretório test do disquete
Após este curso rápido, você deverá estar familiarizado com as noções básicas sobre a linha de comando ou o shell do Linux. Convém limpar o seu diretório pessoal apagando vários arquivos de teste e diretórios com os comandos rm e rmdir. Em Seção 27.3, “Comandos importantes do Linux”, localize uma lista dos comandos mais importantes e uma breve descrição de suas funções.