[Vasco Pedro DI/UE v1.0a (20SET05)]
Noções e comandos que convém conhecer para usar Linux nos laboratórios
da UE.
Índice
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
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), 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.
Muitos dos comandos operam sobre ficheiros e/ou
directorias, cujos nomes são indicados escrevendo-os a seguir
ao nome do comando.
Este 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:
- as letras maiúsculas e minúsculas;
- os algarismos;
- o símbolo _ (underscore); e
- os símbolos - (sinal menos) e + (sinal mais),
que não devem ser o primeiro símbolo do nome.
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.
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.
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
|
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.
Eis alguns comandos úteis do Linux, organizados por temas.
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.
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.
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 2005/2006.
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-frente. A página anterior
é recuperada através da tecla seta-para-trás.
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.
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:
-
os símbolos rw- (colunas 2 a 4) dizem respeito ao dono do
ficheiro, neste caso o utilizador l00000, que pode ler o
ficheiro (r), modificá-lo (w), mas não o pode
executar (-);
-
o grupo associado ao ficheiro é o grupo aluno e os direitos
de acesso dos utilizadores pertencentes a este grupo, indicados
pelos símbolos das colunas 5 a 7, são: podem ler (r) o
ficheiro, mas não o podem alterar (primeiro -) nem executar
(segundo -);
-
os restantes utilizadores do sistema não podem ver o conteúdo do
ficheiro, alterá-lo ou executá-lo, dado que os símbolos que
representam os seus direitos de acesso (nas colunas 8 a 10) serem
todos -.
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.
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.
É 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 é 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.
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.
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).