Escolar Documentos
Profissional Documentos
Cultura Documentos
SISTEMAS OPERATIVOS I
Ficheiros e Directrios
baseado no livro
UNIX For Application Developers
William A. Parrete
Abril de 2002
Lino Oliveira
Sugestes e participaes de erros para: lino@dei.isep.ipp.pt
ISEP - DEI - SISTEMAS OPERATIVOS I Textos de Apoio s Aulas Prticas
FICHEIROS E DIRECTRIOS
ndice
1.2 Ficheiros................................................................................................................................. 5
1 FICHEIROS E DIRECTRIOS
1.1 DIRECTRIOS
utilizado para guardar ficheiros relacionados num mesmo local
Analogia com as pastas
Pode conter ficheiros ou outros directrios (seguindo a analogia, podemos ter pastas com
documentos e/ou outras pastas que, por sua vez podem ter documentos e/ou outras pastas, e assim
sucessivamente)
tratado pelo Unix com um tipo especial de ficheiro
No h limite para o nmero de nveis de directrios
Directrio
Ficheiros
lib - bibliotecas (conjunto de ficheiros relacionados contidos num nico ficheiro) usadas por
compiladores, processadores de texto e outros comandos Unix
lost+found - usado pelo fsck, programa especial usado pelo administrador do sistema para verificar o
sistema; se o fsck encontra algum ficheiro que parea no estar ligado a nenhum
directrio, o programa liga-o ao lost+found, para que posteriormente o administrador do
sistema decida o que fazer com ele
tmp - usado por diversos comandos Unix para criao de ficheiros temporrios; pode ser usado por
qualquer utilizador; este directrio limpo regularmente
usr - a parte do sistema de ficheiros pertencente aos utilizadores; a partir deste directrio que
se estendem os directrios de todos os utilizadores do sistema
pwd
que nos apresenta o caminho completo desde a raiz (/) at ao nosso directrio de trabalho. Por exemplo:
$ pwd
/users/2/lino
$
1.1.4 PATHNAMES
Tipos de Pathnames:
Simple pathname - caminho simples: nome do ficheiro ou directrio que est directamente
abaixo, ou no interior, do directrio corrente de trabalho
cd [ directrio ]
O directrio deve existir e temos de ter permisso para l estar. Se no usarmos nenhum directrio, isto ,
se executarmos cd sem nenhum parmetro, mudamos para a nossa home directory.
possvel organizarmos os nossos ficheiros no nosso home directory da mesma maneira que o Unix o faz na
root directory. Para tal ser possvel necessrio termos a possibilidade de criarmos directrios.
Tal conseguido com o comando mkdir (make directory) cuja sintaxe a seguinte:
Se tentarmos criar um directrio que j existe ou num stio no qual no temos permisso para o fazer, mkdir
apresentar uma mensagem de erro.
Os nomes a utilizar na criao de directrios seguem as mesmas regras que os nomes dos ficheiros: existe
distino entre maisculas e minsculas. Algumas pessoas seguem a conveno de criar os directrios em
maisculas o que permite uma mais fcil distino dos ficheiros.
Quando j no precisamos do directrio podemos elimin-lo com o comando rmdir cuja sintaxe a seguinte:
Para que um directrio possa ser eliminado, duas condies devem ser respeitadas:
o directrio tem de estar vazio: necessrio apagar os ficheiros contidos dentro do directrio a
eliminar antes de proceder operao
o directrio corrente no pode ser o directrio que estamos a tentar eliminar; o que faz sentido: em
que parte do sistema de ficheiros seramos colocados se eliminssemos o nosso directrio de
trabalho corrente ?
O rmdir no pede confirmao antes de proceder eliminao. Como muitos outros comandos de Unix, o
rmdir assume que sabemos o que estamos a fazer e deixa-nos fazer quase tudo o que queremos sem nos
interromper com mensagens triviais!
1.2 FICHEIROS
Para vermos os ficheiros contidos nos directrios usamos o comando ls. Quando usado sem parmetros,
permite ver os ficheiros e os directrios do directrio corrente. Eis alguns exemplos:
O comando file usado para determinar que tipo de dados esto contidos num ficheiro. A sintaxe a
seguinte:
O file examina o contedo dos ficheiros indicados como parmetros do comando, juntamente com outros
dados armazenados pelo sistema de ficheiros em cada ficheiro, no sentido de determinar o tipo de
informao guardado em cada ficheiro.
Se a opo f usada, o file examina os ficheiros cujos nomes aparecem em linhas separadas no ficheiro
nome_ficheiro.
O comando cat (abreviatura de concatenate and print ) recolhe um mais nomes de ficheiros da linha de
comando, l o seu contedo e apresenta-o no ecr, um a seguir ao outro. A sintaxe do comando a
seguinte:
O comando cat despeja tudo para o ecr, sem qualquer pausa ou separao entre os contedos dos
diversos ficheiros.
A opo s suprime quaisquer mensagens de erro ou aviso que possam ser geradas pelo comando.
O comando cat usado para apresentar o contedo de ficheiros de texto (ASCII). Se, no entanto, houver
caracteres de controlo invisveis, eles podem ser vistos usando a opo v, que faz com que esses
caracteres sejam precedidos do acento circunflexo (^). Este modo visual pode ser usado com mais duas
outras opes. A opo t permite ver os caracteres tab com Control-I (^I). A opo e podemos ver a
posio de fim de linha (end of line) com o cifro ($).
Embora seja til em muitas situaes, no o comando que normalmente usado para ver o contedo de
um ficheiro.
Um comando que mais til para ver o contedo de um ficheiro o pg. Permite verificar o contedo do
ficheiro, um ecr de cada vez. A forma mais simples do comando
pg ficheiro ...
Deste modo o pg permite ver o ficheiro 23 linhas (1 ecr) de cada vez. Depois de apresentar as linhas, o pg
fica espera de um comando por parte do utilizador indicando o que fazer a seguir. Tal assinalado pela
apresentao do prompt :. Podemos abandonar a visualizao do ficheiro pressionando a letra q seguido
de <Enter>. Para continuar para a prxima pgina, pressionamos a tecla <Enter>. Quando atingido o fim
do ficheiro, o pg apresenta (EOF):.
Outro comando til o more. Este comando apresenta basicamente as mesmas caractersticas do comando
pg. A principal diferena entre eles reside no formato do prompt --More-- em vez de : e no facto do
more no esperar pelo <Enter> para introduzirmos um comando, simples carregamos na tecla
correspondente ao comando. Por exemplo, h para help, q para quit, etc.
Para avanar para a pgina seguinte pressionamos a barra de espaos e <Enter> para ver linha a linha.
Como para qualquer comando apresentado neste texto, podemos encontrar toda a informao consultando
o manual atravs do comando man comando.0
Outro comando til para ver o contedo de um ficheiro o tail. Por defeito, o tail apresenta as ltimas 10
linhas do ficheiro. A sintaxe do comando :
Por defeito, o tail executa o equivalente a tail -10l. O nmero fornecido com parmetro indica o nmero de
linha que queremos ver. Se usarmos o sinal -, as linhas so contadas do fim para o princpio, para
determinar o ponto a partir do qual comea a apresentar as linhas. Se usarmos o sinal +, as linhas so
contadas do incio para o fim.
ficheiro
9 linhas
A seguir ao nmero indicamos l para linhas, b para blocos (1024 bytes) e c para caracteres (ou bytes). Se
omitirmos a letra, o Unix assume que pretendemos linhas.
Por defeito, o comando head apresenta as 10 primeiras linhas. O nmero passado como parmetro permite-
nos indicar o nmero de linhas que queremos ver. Por exemplo, para vermos as primeiras 6 linhas do
ficheiro:
$ head -6 ficheiro
Quando se copia um ficheiro para outro, o primeiro ficheiro lido e copiado para o segundo ficheiro. Se o
segundo ficheiro no existir, criado. Se existir, substitudo. Como na maior parte dos comandos Unix, cp
no pede confirmao antes de efectuar a cpia.
Quando se copia um ou mais ficheiros para um directrio, cada ficheiro lido individualmente e copiado
para um ficheiro com o mesmo nome no directrio indicado. O directrio tem de existir. Se o ficheiro no
existir nesse directrio, criado. Se existir substitudo.
O Unix permite mover um ficheiro ou alterar o seu nome atravs do comando mv.
Mover ou alterar nome dum ficheiro para outro: mv [-f] fich_orig fich_dest
Mover vrios ficheiros para directrio: mv [-f] fich_orig1 fich_orig2 ... dir_dest
Quando se move um ficheiro para outro, o primeiro ficheiro lido e copiado para o segundo. O primeiro
ficheiro removido. Se o segundo ficheiro no existir, criado. Se existir, substitudo. Como na maior
parte dos comandos Unix, mv no pede confirmao.
Quando se move um ou mais ficheiros para um directrio, cada ficheiro lido individualmente e copiado
para um ficheiro com o mesmo nome no directrio indicado. Os ficheiros originais so removidos. O
directrio tem de existir. Se o ficheiro no existir nesse directrio, criado. Se existir substitudo.
Se se tentar mover um ficheiro para outro ficheiro ou directrio que nos pertence mas para o qual no
temos permisso para alterar, o mv pede confirmao para completar a operao. A opo f elimina estas
mensagens de aviso e confirmao bem como quaisquer outras mensagens de erro ou aviso que possam
ocorrer durante uma operao de move.
O Unix permite criar nomes alternativos (aliases) para ficheiros atravs do comando ln . A terminologia Unix
para um nome alternativo link.
Linkar vrios ficheiros para directrio: ln [-f] fich_orig1 fich_orig2 ... dir_dest
Quando se cria um link para um ficheiro j existente, uma nova entrada no directrio criada que se refere
aos meus dados do ficheiro original. Se o segundo nome de ficheiro no existir, criado. Se existir,
substitudo.
Quando se cria um link de um ou mais ficheiros para um directrio, cada ficheiro lido individualmente e
linkado para um ficheiro com o mesmo nome no directrio indicado. O directrio tem de existir. Se o
ficheiro no existir nesse directrio, criado. Se existir substitudo.
Se se tentar linkar um ficheiro para outro ficheiro ou directrio que nos pertence mas para o qual no
temos permisso para alterar, o ln pede confirmao para completar a operao. A opo f elimina estas
mensagens de aviso e confirmao bem como quaisquer outras mensagens de erro ou aviso que possam
ocorrer durante uma operao de move.
Existem algumas limitaes na utilizao do comando ln. O Unix no permite links entre file systems. Em
determinadas verses de Unix, esta limitao pode ser ultrapassada pela utilizao de links simblicos.
Da explicao anterior deu para perceber que os trs comandos so parecidos. Tm a mesma sintaxe.
Para perceber as diferenas entre eles, preciso saber um pouco mais acerca do modo como o Unix
armazena os ficheiros no sistema de ficheiros.
Um directrio uma espcie de ficheiro que contm duas pequenas informaes acerca dos ficheiros que
esto dentro. Essas informaes so o nome do ficheiro, claro, e o seu nmero de i-node.
O nmero de i-node um ndice duma lista de i-nodes (nmeros internos). Existe apenas um, e um s,
i-node para um ficheiro no file system. No o nome do ficheiro num directrio que define o ficheiro. a
existncia de um i-node que define os atributos dum fiheiro e o local do disco onde est guardado. O i-node
contm o endereo do blocos de disco que contm os dados do ficheiro. Ver figura da pgina seguinte.
cp Cria uma nova entrada no directrio, destina-lhe um novo i-node e depois copia os
dados dum ficheiros para o outro
mv Na sua forma mais simples, cria numa entrada no directrio para o novo ficheiro usando
o mesmo i-node do ficheiro antigo. O nome antigo retirado do directrio.
ln Cria uma entrada no directrio para o novo ficheiro, usando o mesmo i-node do ficheiro
antigo. O ficheiro antigo mantm-se de tal forma que existem duas entrada com nomes
diferentes no directrio que respondem ao mesmo i-node e aos meus dados.
Cada ficheiro indicado no comando removido do sistema de ficheiros. Mais uma vez, o Unix assume que
sabemos o que estamos a fazer pelo que no efectua qualquer confirmao antes de proceder execuo
do comando.
Algumas opes podem ser usadas para modificar a execuo do comando rm:
-f Esta opo, de maneira semelhante ao que acontece nos comandos mv e ln, fora a execuao do
comando, isto , neste caso, a eliminao do ficheiro. Nenhumas perguntas so feitas, nem so
apresentados quaisquer avisos ou mensagens de erro.
-i Esta opo a opo de interactividade. Informa o rm para interagir com o utilizador durante a
operao de eliminao. Antes do ficheiro ser efectivamente eliminado, o rm apresenta o nome do
ficheiro seguido de um ?. Se se pretende eliminar, pressiona-se o y seguindo de Enter.
Qualquer outra resposta, salta a eliminao do ficheiro.
-r Esta opo permite ultrapassar a limitao do rmdir na eliminao de directrios no vazios. Com
esta opo, o rm elimina qualquer directrio indicado bem como os ficheiros neles contidos. O rm
desce recursivamente ao longo da estrutura de directrios comeando no directrio indicado e
elimina todos os ficheiros e directrios rvore acima, incluindo o directrio inicial.
Devido ao facto do Unix ser um sistema multiutilizador com utilizadores a criar e a eliminar ficheiros
constantemente, praticamente impossvel recuperar um ficheiro eliminado. Logo que um ficheiro
eliminado, o sistema de ficheiros verifica que existe algum espao livre que pode usar. No prximo pedido
de espao que algum faa, o sistema de ficheiros provavelmente usar o espao acabado de ser libertado.
A nica possibilidade de recuperao de um ficheiro eliminado obter a cpia a partir de uma cpia de
segurana efectuada recentemente.
Cuidado, pois, com o comando rm. Com apenas 5 teclas podemos colocar o nosso sistema de ficheiros Unix
em apuros. O comando rm * remove tudo no directrio corrente, e no nos ser pedida qualquer
confirmao.
Pior do que isto, se estivermos logged in como administradores do sistema, nunca deveremos experimentar
o comando rm r / . Se removermos tudo a partir da raiz, perderemos o nosso sistema de ficheiros por
inteiro.
Como se pode imaginar, o comando rm no remove efectivamente os dados. Remove uma entrada (um link)
na tabela de ficheiros representativa do sistema de ficheiros (conhecida com FAT File Allocation Table).
Quando o sistema de ficheiros verifica que no h mais links para o i-node em particular, liberta esse i-node
e os blocos de disco a ele alocados para poder ser usado por outro ficheiro.
Qualquer comando que opere com ficheiros no sistema de ficheiros Unix pode especificar esse ficheiro
atravs do seu full pathname (caminho completo), relative pathname (caminho relativo) ou simple pathname
(caminho simples).
O tipo de representao do ficheiro fica a nosso cargo. Usamos aquele que mais nos convier em funo da
posio relativa do directrio corrente e do directrio onde se encontra o ficheiro em causa.
No necessrio efectuar um cd para o directrio do ficheiro s para usar o caminho simples. Podemos
especificar o caminho completo ou o caminho relativo ao directrio corrente.
1.3 QUESTES
1. Como que o sistema de ficheiros (file system) de um sistema UNIX se encontra estruturado ?
3. Diga o nome de trs directrios existentes num file system UNIX, e refira-se ao seu contedo.
5. Qual o comando que pode utilizar para ver os nomes dos ficheiros em UNIX.
14. Qual o comando para copiar um ficheiro ? E para mudar o seu nome ?
18. Dentro do directrio PROGRAMS, crie mais dois directrios chamados DATABASE e C_LANGUAGE.
19. Faa com que o directrio C_LANGUAGE se torne o seu directrio corrente, e determine o seu
pathname completo.
20. Faa com que o seu directrio home se torne o seu directrio corrente, e determine o seu
pathname completo.
21. Copie o ficheiro fortunes.txt que se encontra no directrio /users/2/jpl/bach/so1 para o directrio
DOCUMENTS.
22. Crie uma cpia do ficheiro copiado em 21. para o nome cars.txt no directrio PROGRAMS.
25. Crie no directrio DATABASE, um link para o ficheiro old_cars chamado cars.
26. Diga qual o pathname completo do ficheiro old_cars. Diga tambm qual o seu pathname
relativamente ao seu directrio home, ao pai do seu directrio home, ao directrio DOCUMENTS e
ao directrio PROGRAMS.
27. Liste todos os ficheiros e directrios que esto dentro do seu directrio home.