Resumo
Em comparação ao Windows® e muitos outros sistemas operacionais, o tratamento de arquivos é bem diferente do utilizado no GNU/Linux. Nesta seção iremos cobrir a grande maioria das diferenças. Para mais informações, por favor veja o Capítulo 4, O Sistema de Arquivo do Linux.
As maiores diferenças são resultado direto do fato de que o Linux é um sistema multiusuário: cada arquivo é propriedade exclusiva de um usuário e um grupo. Um fato que não havíamos mencionado a respeito dos usuários é que cada um tem um diretório pessoal (chamado de diretório home). O usuário é o proprietário desse diretório e de todos os arquivos criados nele. Também vale notar que esses arquivos também pertencem a um grupo e que esse é o grupo primário ao qual o usuário pertence. Como mencionado anteriormente (veja Seção 1, “Usuários e Grupos”), um usuário pode pertencer a mais de um grupo ao mesmo tempo.
Entretanto, não seria de muita utilidade se essa fosse a única idéia de posse de arquivo. Como dono dos arquivos, o usuário pode (e deve) atribuir permissões aos arquivos. Essas permissões distingüem tres categorias de usuários: o dono (owner) do arquivo, qualquer usuário pertencente ao grupo associado ao arquivo (também chamado de grupo do dono (owner group)) porém não sendo o dono, e outros, que inclui qualquer usuário que não o dono do arquivo, nem um membro do grupo pertence ao dono do arquivo.
Existem três tipos de permissões diferentes:
Leitura (Read)
(r
): permite ao usuário ler o conteúdo de um
arquivo. No caso de um diretório, permite que o usuário liste seu
conteúdo (i.e. os arquivos contidos no diretório).
Escrita (Write)
(w
): permite a modificação do conteúdo do arquivo.
Para um diretório, a permissão de escrita permite que o usuário
acrescente ou remova arquivos desse diretório, mesmo não sendo o dono
dos arquivos.
eXecução (eXecute)
(x
): permite que um arquivo seja executado
(normalmente só arquivos executáveis tem essa permissão atribuída). Para
um diretório, essa permissão faz com que o usuário possa percorrer o diretório, ou seja, entrar e sair
do diretório. Observe que essa permissão é diferente da permissão de
leitura: você pode ser capaz de percorrer um diretório embora continue
incapaz de ler seu conteúdo!
Cada uma das combinações de permissão é possível. Por exemplo, você pode permitir que somente você leia um arquivo enquanto restringe o acesso a todos os outros usuários. Como dono do arquivo, também pode modificar o grupo atribuído ao arquivo (se e somente for membro do novo grupo).
Vejamos um exemplo com um arquivo e um diretório. A seguir pode ser visto o resultado do comando ls -l executado na linha de comando:
$ ls -l total 1 -rw-r----- 1 usuario1 users 0 Jul 8 14:11 um_arquivo drwxr-xr-- 2 usuario2 users 1024 Jul 8 14:11 um_diretorio/ $
Os resultados do comando ls -l (da esquerda para a direita):
Os primeiros dez caracteres
representam o tipo de arquivo e as permissões associadas a ele. O
primeiro caracter é o tipo do arquivo: se for um arquivo regular, será
representado por um hífen (-
). No caso de um
diretório, o caracter mais à esquerda será um
d
. Existem outros tipos de arquivo, que serão
discutidos mais tarde. Os próximos nove caracteres representam as
permissões associadas com aquele arquivo. Esses nove caracteres
representam três grupos de três permissões cada. O primeiro grupo
representa as permissões associadas ao dono do arquivo; o segundo as
permissões associadas aos usuários do grupo ao qual o arquivo está
associado; e as últimas três permissões se aplicam a todos os outros
usuários. Um hífen (-
) indica que a permissão não
está atribuída.
A seguir temos o número de links para o arquivo. Mais tarde veremos que o identificador único de um arquivo não é o seu nome, mas sim um número (o número do inode), e que é possível que um arquivo no disco tenha vários nomes. No caso de um diretório, o número de links tem um significado especial, que será discutido mais para frente.
Os próximos dados encontrados são o nome do proprietário seguido pelo nome do grupo ao qual o arquivo está associado.
Ao final, são mostrados o tamanho do arquivo (em bytes) e a data da sua última modificação, seguidos do nome do arquivo ou diretório.
Vejamos com mais detalhes as
permissões associadas a cada um desses arquivos. Inicialmente, precisamos
remover o primeiro caracter que representa o tipo, então, para o arquivo um_arquivo
, temos as seguintes permissões:
rw-r-----
. Dividindo as permissões em grupos, temos:
Os três primeiros caracteres
(rw-
) representam as permissões do dono do arquivo,
neste caso, usuario1. Sendo assim, o usuário usuario1 tem permissão para
ler o arquivo (r
) e modificar seu conteúdo
(w
) porém, não tem permissão para executá-lo
(-
).
os próximos três caracteres
(r--
) são aplicáveis para qualquer usuário que não
usuario1, mas que seja membro do grupo users
. Estes
usuário têm permissão para ler o arquivo (r
),
entretanto não poderão alterá-lo nem mesmo executá-lo
(--
).
os últimos três caracteres
(---
) representam as permissões para todos os
usuários que não usuario1 e os membros do grupo
users
. Estes usuários não possuem permissão alguma
sobre o arquivo, para eles o arquivo estará
“invisível”.
Para o diretório
a_directory
, temos as permissões
rwxr-xr--
, então:
usuario2, sendo o proprietário do
diretório, pode listar os arquivos contidos nele (r
),
adicionar ou remover arquivos do diretório (w
), e
também pode percorrê-lo (atravessá-lo) (x
).
Qualquer usuário que não usuario2, porém
membro do grupo users
, será capaz de listar os
arquivos nesse diretório (r
), porém não poderá
adicionar e/ou remover arquivos (-
), e ainda será
capaz de percorrê-lo (x
).
Qualquer outro usuário será capaz de
listar o conteúdo do diretório (r
). Uma vez que não
têm as permissões wx
, não serão capazes de escrever
arquivos ou entrar no diretório.
Existe
uma exceção à essas regras: root
.
O usuário root
pode mudar os atributos (permissões, dono e grupo do
dono) de todos os arquivos, mesmo que ele não seja o proprietário, sendo
assim, pode tornar-se dono do arquivo! O usuário root
pode ler
arquivos que não tem permissão de leitura para ele, percorrer diretórios que
normalmente não teria acesso, e assim por diante. E se o usuário
root
precisar de uma permissão, ele simplesmente pode adicioná-la a
si mesmo. O usuário root
tem o controle completo do sistema, o que
envolve uma dose de confiança na pessoa que possui a senha de
root
.
Por final, é importante notar as diferenças entre os nomes de arquivos presentes nos mundos UNIX® e Windows®. Para alguns, o UNIX® possui uma maior flexibilidade e menos limitações.
Um nome de arquivo pode
conter quaisquer caracteres, incluindo os não imprimíveis, exceto pelo
caracter ASCII 0, que denota o final de uma string, e da
/, que é o separador de diretórios. Além disso,
pelo fato de o UNIX® ser sensível à capitulação (case sensitive), os
arquivos readme
e Readme
são
diferentes, porque r
e R
são
considerados dois caracteres diferentes nos
sistemas baseados no UNIX®.
Como pudemos observar, o
nome de arquivo não necessáriamente deve conter uma extensão, a não ser
que seja de sua preferência colocá-la. As extensões de arquivo não
identificam o conteúdo do arquivo no GNU/Linux, nem na maioria dos
outros sistemas operacionais. As chamadas
“extensões de arquivos” são bastante convenientes. O ponto
(.
) no UNIX® é tão somente um caracter como os
outros, porém tendo também um significado especial. No UNIX®, nomes
de arquivo começando com um ponto são considerados
“arquivos ocultos”[1], que também incluem nomes de diretórios que começam com um
".
"
[1] Por padrão, arquivos ocultos
não serão mostrados em um gerenciador de arquivos, a não ser que você
configure-o para tal. Em um terminal, você deve digitar o comando ls -a
para ver todos os arquivos ocultos juntos com os arquivos
normais. Essencialmente esses arquivos contém informações de
configuração. A partir do seu diretório home
, veja
os arquivo
.mozilla
ou
.openoffice
como exemplo.