Mini-Guia do Linux

[Vasco Pedro DI/UE v1.0c (4MAI11)]

Noções e comandos que convém conhecer para usar Linux nos laboratórios da UE.

Índice

Noções básicas

A interacção de um utilizador com o Linux baseia-se na noção de sessão de trabalho. Para iniciar uma sessão de trabalho, o utilizador deve fornecer ao sistema o seu nome de utilizador e a password que lhe está associada. Depois de executados estes dois passos, é iniciada a sessão de trabalho, que toma corpo num interpretador de comandos, que lê e executa os comandos que o utilizador introduz. O interpretador de comandos utilizado nos laboratórios é o Bash.

O modo como o interpretador de comandos se apresenta é através de uma prompt, que pode conter diversa informação e que termina com o símbolo $, seguido de um espaço e do símbolo _, a piscar. Este piscar é o modo de o sistema indicar ao utilizador que está à espera de alguma acção da sua parte. Neste contexto, o utilizador introduzirá os comandos que entender, através do teclado, comandos que são lidos e executados pelo interpretador de comandos. (No remanescente deste guia, a notação "$ " introduz exemplos de comandos que poderão ser usados.)

No fim da sessão de trabalho, e para a terminar, o utilizador poderá usar os comandos exit ou logout. Em alternativa, a combinação das teclas Control e d (escrita C-d e lida control-dê), quando pressionada numa linha que não contenha mais nada introduzido pelo utilizador, também provoca o fecho da sessão de trabalho. (Esta combinação de teclas é usada em numerosas situações para terminar a execução de comandos que interagem com o utilizador de modo semelhante ao do interpretador de comandos.)

Se, no decorrer da sessão de trabalho, a execução de um comando se estender por um tempo inesperadamente longo, essa execução pode ser interrompida através da combinação de teclas C-c.

Nomes e padrões

Muitos dos comandos operam sobre ficheiros e/ou directorias, cujos nomes são indicados escrevendo-os a seguir ao nome do comando.

Sintaxe

Estes nomes podem conter praticamente todos os símbolos que se podem obter através do teclado. No entanto, e porque alguns destes símbolos têm um significado particular para o interpretador de comandos, só é seguro usar, nos nomes de ficheiros e de directorias: Embora o símbolo . (ponto) não seja um dos que tem um significado particular, é prática corrente usá-lo para estruturar o nome dos ficheiros em duas partes: parte-principal.extensão, onde a parte-principal dá alguma indicação sobre o conteúdo do ficheiro e a extensão diz qual é o tipo, ou formato, do conteúdo do ficheiro.

Por exemplo, o ficheiro aula1.hs estaria relacionado com a primeira aula de Programação I (aula1) e o seu conteúdo seria código Haskell (extensão hs). Outros exemplos serão o ficheiro index.html, que conterá um índice, escrito em código HTML, e o ficheiro xutos+pontapes.png, que conterá algo relacionado com os Xutos & Pontapés, em formato PNG. Também é possível usar o ponto no nome de uma directoria, embora não seja costume. Os nomes começados por ponto são frequentemente tratados de modo especial, nomeadamente nas listagens e na expansão dos padrões.

É de notar que o Linux não considera as minúsculas equivalentes às maiúsculas, i.e., os nomes aula1.hs e Aula1.hs correspondem a dois ficheiros distintos.

Nomes relativos e absolutos

Quando, num comando, é mencionado o ficheiro aula1.hs, este nome deve ser entendido como relativo à directoria corrente, ou seja, refere-se ao ficheiro chamado aula1.hs dentro da directoria corrente. Se a directoria corrente mudar, o mesmo nome referir-se-á a outro ficheiro.

Cada ficheiro e directoria tem, também, um nome absoluto, obtido concatenando os nomes de todas as directorias que é necessário percorrer, desde a raiz do sistema (a directoria /) até à directoria onde está o ficheiro ou directoria, e o nome do ficheiro ou directoria. Por exemplo, o nome absoluto da directoria l00000, existente dentro da directoria aluno que, por sua vez, está contida na directoria home, que se encontra na directoria / é /home/aluno/l00000. O nome absoluto do ficheiro aula1.hs dentro desta directoria é /home/aluno/l00000/aula1.hs.

Existem dois nomes com significado especial que são . (ponto) e .. (ponto-ponto). O primeiro refere-se sempre à directoria corrente e o segundo à directoria que contém a directoria corrente. Se a directoria corrente for /home/aluno/l00000, .. refere-se à directoria /home/aluno, mas se a directoria corrente for /home/aluno, .. refere-se à directoria /home.

O nome .. é útil para construir nomes relativos: se a directoria corrente for /home/aluno/l00000 e for necessário referir o ficheiro /home/aluno/l00001/aula1.hs, é possível fazê-lo através do nome (relativo) ../l00001/aula1.hs. A leitura deste nome é a seguinte: para, a partir da directoria corrente, chegar ao ficheiro /home/aluno/l00001/aula1.hs, começa-se por subir (..) para a directoria que contém a directoria corrente, entra-se na directoria l00001 aí contida, e é aí que está o ficheiro aula1.hs.

Padrões

Através de nomes especiais, chamados padrões, pode-se referir vários ficheiros ou directorias de uma forma compacta. Os padrões distinguem-se dos outros nomes por poderem incluir os símbolos * e ?. Num padrão, o símbolo * representa uma sequência qualquer, possivelmente vazia, de símbolos (excepto o símbolo /), e ? representa uma ocorrência de um símbolo qualquer (mais uma vez, exceptuando /). Ao acto de determinar os nomes que um padrão representa chama-se expansão do padrão.

A expansão de um padrão só inclui nomes começados por ponto se o padrão também começa por ponto (ou tem um ponto a seguir a uma ocorrência de /). (Nos exemplos abaixo, o pronome todos exclui os nomes começados por ponto, excepto quando mencionados explicitamente.)

Exemplos de padrões
Padrão Significado
*.hs todos os ficheiros com extensão hs na directoria corrente
aula?.hs todos os ficheiros, na directoria corrente, cujo nome começa por aula e a seguir tem um símbolo qualquer (eg., 2, x, .) seguido de .hs
* todos os ficheiros e directorias na directoria corrente
l00000/* todos os ficheiros e directorias na directoria l00000
../????? todos os ficheiros e directorias, na directoria que contém a corrente, cujo nome tem comprimento cinco
/??*n todos os ficheiros e directorias, na directoria /, cujo nome tem comprimento pelo menos três e acaba em n
/bin/*f* todos os ficheiros e directorias, na directoria /bin, cujo nome inclui um f
.?* todos os ficheiros e directorias, na directoria corrente, cujo nome começa por . e tem pelo menos mais um símbolo

Consolas virtuais

A instalação do Linux dos laboratórios suporta 6 consolas virtuais, que permitem ao utilizador ter outras tantas sessões de trabalho em simultâneo.

Quando o computador arranca em Linux, a consola virtual cujo conteúdo é visível no ecrã é a número 1. Para aceder às outras consolas virtuais, o utilizador deverá pressionar a tecla Alt e, sem a libertar, uma das teclas F2, F3, F4, F5 ou F6. Estas combinações de teclas, vulgarmente representadas por, por exemplo, Alt-F2, correspondem às consolas virtuais de 2 a 6, respectivamente. Para regressar à consola virtual 1, deverá ser utilizada a combinação Alt-F1.

As combinações de teclas Shift-PageUp e Shift-PageDown servem para ver o conteúdo da consola que desapareceu pela parte de cima do ecrã, para ser substituído pelo conteúdo corrente, desde a última mudança de consola virtual.

Comandos úteis

Eis alguns comandos úteis do Linux, organizados por temas.

Directorias

Muitos comandos ou aplicações, em Linux, interpretam ~ (til) como a directoria principal (home directory) do utilizador. Quando isso acontece, para o utilizador aluno, ~ e /home/aluno são sinónimos.

ls - lista o conteúdo de directorias

$ ls
Na sua forma mais simples, o comando ls apresenta uma lista, ordenada alfabeticamente, de todos os ficheiros e directorias contidos na directoria corrente (exceptuando aqueles cujo nome começa por ponto).
$ ls -l
Com a opção -l, o comando ls apresenta uma lista mais pormenorizada do conteúdo da directoria. Nesta lista, cada linha corresponde a um ficheiro ou directoria e apresenta, além do seu nome, informação que inclui os direitos de acesso, o nome do utilizador a que pertence, o tamanho e a data da última modificação.
$ ls -l /home/aluno ../../etc/debian_version
Também é possível indicar, explicitamente, qual(is) a(s) directoria(s) (ou ficheiros) cuja informação se pretende obter.
$ ls -l ~/l00000/*.hs
E também é possível usar padrões como argumentos.

cd - muda a directoria corrente

Cada sessão de trabalho está associada, em cada momento, a uma directoria: a directoria de trabalho corrente (ou directoria corrente). O comando cd permite associar a sessão de trabalho a outra directoria, ou seja, mudar a directoria corrente.
$ cd l00000
A directoria corrente passa a ser l00000, se esta existir na directoria corrente.
$ cd
Nesta forma, muda a directoria corrente para a directoria principal do utilizador.
$ cd ~
Tem o mesmo efeito que o comando anterior.
$ cd ..
Muda a directoria corrente para a directoria que contém a directoria corrente.
$ cd .
Muda a directoria corrente para a directoria corrente, ou seja, não tem qualquer efeito.

pwd - indica a directoria corrente

$ pwd
Escreve, no terminal, o nome absoluto da directoria de trabalho corrente.

mkdir - cria directorias

$ mkdir l00000
Cria, dentro da directoria de trabalho corrente, a directoria l00000.

rmdir - apaga directorias

$ rmdir l00000
Apaga a directoria l00000, se estiver vazia.

Ficheiros

cp - copia ficheiros

O comando cp permite criar cópias de um ou mais ficheiros. O último argumento do comando indica o destino da cópia: na criação de uma cópia de um único ficheiro, cujo nome é indicado no primeiro argumento, o segundo e último argumento poderá ser o nome do ficheiro que conterá essa cópia ou o nome de uma directoria em que a cópia será criada, com o mesmo nome que o original; na cópia de vários ficheiros, o último argumento será o da directoria em que as cópias serão criadas.

Se já existir um ficheiro com o nome indicado para uma cópia, esse ficheiro será apagado e a cópia será criada.

$ cp aula1.hs aula2.hs
Cria uma cópia do ficheiro aula1.hs, chamada aula2.hs.
$ cp aula1.hs ..
Cria uma cópia do ficheiro aula1.hs, chamada aula1.hs, na directoria que contém a directoria corrente.
$ cp aula1.hs aula2.hs copias-seguranca
Cria uma cópia dos ficheiros aula1.hs e aula2.hs na directoria copias-seguranca.
$ cp -i aula1.hs aula2.hs
Quando já existe um ficheiro com o nome de uma cópia a criar, a opção -i do comando cp diz-lhe para perguntar ao utilizador se deseja efectivamente criar a cópia, destruindo o conteúdo desse ficheiro.

mv - move e renomeia ficheiros

Com o comando mv pode-se mudar o nome de um ficheiro (ou de uma directoria) e mudar ficheiros (ou directorias) de directoria.

Tal como com o comando cp, se já existir um ficheiro com o novo nome que se quer dar ao ficheiro que se pretende renomear, esse ficheiro é apagado e a renomeação é efectuada. O mesmo acontece se existir, na directoria para onde se pretende mover um ficheiro, um outro ficheiro com o mesmo nome que aquele que se quer mover.

$ mv aula1 aula1.hs
Muda o nome do ficheiro aula1 para aula1.hs.
$ mv aula1.hs aula2.hs l00000
Move os ficheiros aula1.hs e aula2.hs para a directoria l00000.
$ mv -i aula1 aula1.hs
Com a opção -i, se já existir um ficheiro chamado aula1.hs o comando mv pergunta ao utilizador se o quer destruir, só executando a renomeação se a resposta for afirmativa.

rm - apaga ficheiros

Sem opções, este comando não pede confirmação ao utilizador antes de apagar um ficheiro, excepto se os direitos de acesso do utilizador sobre o ficheiro, o impedem de o alterar.
$ rm aula1.hs~
Apaga o ficheiro aula1.hs~.
$ rm -i aula1.hs~
Com a opção -i, o comando rm pede confirmação ao utilizador antes de apagar o ficheiro aula1.hs~.
$ rm ./-i
Apaga o ficheiro -i da directoria corrente.

cat - mostra o conteúdo de ficheiros

É usado para ficheiros pequenos, visto que o conteúdo do ficheiro é enviado de um só fôlego para o ecrã.
$ cat aula1.hs
Mostra o conteúdo do ficheiro aula1.hs no ecrã.

less - mostra o conteúdo de ficheiros

Mostra o conteúdo de ficheiros, um ecrã de cada vez. Permite avançar e recuar no ficheiro e procurar texto. As teclas h e H permitem aceder ao modo de ajuda, em que são mostradas as acções possíveis e as teclas que as invocam.
$ less aula1.hs
Mostra o conteúdo do ficheiro aula1.hs interactivamente.

Acesso remoto

lynx - navegar, navegar

O lynx é um navegador (browser) para a World Wide Web que funciona em modo texto.
$ lynx http://www.di.uevora.pt/~vp/p1/
Acede a uma página com informação sobre as aulas práticas de Programação I 2006/2007.
Quando uma página está a ser mostrada, os links nela presentes são seleccionados usando as teclas seta-para-cima e seta-para-baixo, e as páginas para onde eles apontam são acedidas usando a tecla seta-para-a-direita. A página anterior é recuperada através da tecla seta-para-a-esquerda.

wget - transfere páginas

Este comando transfere o conteúdo de uma página (ou páginas) WWW para o disco local.
$ wget http://www.di.uevora.pt/~vp/p1/mini-linux.html
Transfere este guia para o ficheiro mini-linux.html na directoria de trabalho corrente.

ssh - cria sessão de trabalho remota

Com o ssh é possível obter uma sessão de trabalho numa máquina remota, através da infraestrutura de rede. Toda a informação, incluindo a password, é transmitida cifrada, pelo que só é legível para o utilizador a quem a sessão de trabalho pertence.
$ ssh alunos.di.uevora.pt
Cria uma sessão de trabalho na máquina alunos.di.uevora.pt. O nome do utilizador na máquina remota é o mesmo que o da sessão de trabalho em que o comando é executado.
$ ssh -l l00000 alunos.di.uevora.pt
$ ssh l00000@alunos.di.uevora.pt
Criam uma sessão de trabalho para o utilizador l00000 na máquina alunos.di.uevora.pt.

scp - copia ficheiros através da rede

Este comando, baseado no ssh, permite a cópia de ficheiros entre máquinas. Os ficheiros são transferidos cifrados, de modo a só serem legíveis pelo utilizador que executa o comando.
$ scp aula1.hs l00000@alunos.di.uevora.pt:aulas/p1/
Copia o ficheiro aula1.hs na directoria corrente para a directoria ~/aulas/p1 do utilizador l00000 na máquina alunos.di.uevora.pt.
$ scp l00000@alunos.di.uevora.pt:aulas/p1/trabalho.hs .
Copia o ficheiro ~/aulas/p1/trabalho.hs do utilizador l00000 na máquina alunos.di.uevora.pt para a directoria corrente.

Direitos de acesso

Cada ficheiro e directoria tem associados direitos de acesso, também chamados permissões.

Existem três tipos de direitos de acesso, aplicados a três categorias de utilizadores. Os direitos de acesso podem ser de leitura (r), de escrita (w) e de execução (x). As categorias de utilizadores são: o utilizador a quem o ficheiro ou a directoria pertence; os utilizadores que pertencem ao mesmo grupo que o dono do ficheiro ou directoria; todos os outros utilizadores do sistema. (Cada utilizador pertence a, pelo menos, um grupo. A cada ficheiro e directoria, além de estar associado um utilizador, está também associado um grupo.)

Suponhamos que o resultado do comando ls -l aula1.hs era o seguinte:

-rw-r-----  1 l00000 aluno 459 Jul 26 13:35 aula1.hs
Os nove símbolos a partir da coluna 2 descrevem os direitos de acesso do ficheiro: Para o comando ls -l /bin/ls, o resultado será parecido com:
-rwxr-xr-x  1 root root 75948 Jul 16 12:37 /bin/ls
Este ficheiro, que corresponde ao comando ls, pode ser lido e executado por todos os utilizadores do sistema (os símbolos r e x aparecem nos símbolos correspondentes ao dono do ficheiro, aos membros do grupo root e aos restantes utilizadores), mas só o seu dono o pode modificar (só os seus direitos de acesso contêm o símbolo w).

No que respeita às directorias, ter direito de leitura significa que é possível listar o seu conteúdo (através do comando ls). O direito de escrita representa a possibilidade de criar e apagar ficheiros dentro da directoria e o direito de execução corresponde à permissão para ler o conteúdo dos ficheiros e directorias que lá se encontram.

Documentação

Sistemas de documentação

Nas instalações Linux dos laboratórios existe documentação que descreve o funcionamento de todos os comandos mencionados neste guia. Esta documentação encontra-se, geralmente, num de dois formatos e é consultada usando o comando apropriado: o formato manual, consultado com o comando man, e o formato info, acedido através do comando info. Alguns comandos pertencem ao interpretador de comandos, e a sua documentação é fornecida pelo comando help.

man

É o comando mais antigo para consultar documentação. Os manuais são constituídos por texto formatado e são apresentados pelo less ou por um comando semelhante. A grande maioria dos comandos tem documentação neste formato, independentemente de a ter também em outro.
$ man ssh
Mostra a página de manual do comando ssh.
$ man man
Mostra a página de manual do comando man.

info

info é um comando interactivo de consulta de documentação. A documentação escrita neste sistema organiza-se de forma hierárquica, em nós, entre os quais se pode navegar, e inclui menus e referências cruzadas, que são formas primitivas de hyperlinks.
$ info ls
Acede à documentação do comando ls.
$ info info
Acede à documentação do comando info.
$ info
Acede ao topo da hierarquia do sistema info. A partir daí é possível aceder aos restantes documentos que o integram.

help

Dado ser possível utilizar vários interpretadores de comandos, a documentação dos seus comandos internos (comandos built-in) está integrada na documentação do próprio interpretador de comandos.

O interpretador de comandos utilizado nos laboratórios, Bash, possui o comando help, que dá uma descrição breve dos comandos internos. A documentação do Bash, acessível através dos comandos man bash (secção "SHELL BUILTIN COMMANDS") e info bash (nó "Shell Builtin Commands"), contém descrições mais pormenorizadas desses comandos.

$ help cd
Descrição do comando cd.
$ help help
Descrição do comando help.
$ help
Apresenta uma lista dos comandos internos do Bash.

Programas auto-documentados

Muitos comandos correspondem a programas que têm, internamente, alguma forma de se documentarem, em geral de forma sucinta. Nos programas não interactivos, essa documentação é acedida através de uma opção, como --help, -help ou -h.
$ ls --help
Com esta opção, o comando ls mostra uma breve descrição do seu funcionamento e a lista das opções que reconhece.
$ wget -h
Lista as opções do comando wget.
Alguns programas interactivos também têm alguma forma de documentação interna, acessível durante o seu funcionamento. No less e no lynx, a tecla H invoca a visualização da documentação, enquanto que no info, essa função corresponde à tecla ?.

Por vezes, estes comandos apresentam, nas últimas linhas do ecrã, pistas quanto ao modo de aceder à sua documentação. Noutros, é necessário ler a restante documentação, através dos comandos man ou info, para saber como obter documentação durante o seu funcionamento.


Quaisquer comentários, sugestões ou correcções poderão ser enviados para vp (seguido de @di.uevora.pt).