No sistema de arquivos ext
, que é usado no Linux, inodes são usados para descrever os arquivos armazenados. Um inode contém atributos de um arquivo, assim como seus locais de blocos de dados (esses são os blocos que contêm o conteúdo real do arquivo). O que se segue é brevemente o que é armazenado em um inode:
Número do inode
Acesso a arquivos, modificação e alteração de timestamps
Tamanho do arquivo
Permissões
Proprietário
Grupo
Locais de Bloqueio de Dados
Então, para responder a sua pergunta, o Unix armazena as permissões de um arquivo em seu inode, que está no sistema de arquivos, por exemplo ext4
.
Se você quiser ver as informações do inode de um arquivo, você pode usar o comando stat
:
$ stat /bin/bash
File: ‘/bin/bash’
Size: 635933 Blocks: 624 IO Block: 65536 regular file
Device: 2e208854h/773883988d Inode: 281474976901122 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 1000/ Alaa) Gid: ( 513/ None)
Access: 2014-10-18 13:45:13.375853300 -0400
Modify: 2014-10-08 16:54:16.000000000 -0400
Change: 2014-10-18 13:45:13.438253400 -0400
Birth: 2014-10-18 13:45:13.375853300 -0400
Para apontar algo em sua pergunta: por padrão, quando você copia um arquivo de uma distribuição Linux para outra, as permissões não são copiadas. O que acontece é que os blocos de dados (o conteúdo real) são copiados, mas todos os outros atributos não são. Assim, por exemplo, se você estiver copiando arquivos do disco rígido interno para o externo (ambos formatados como ext4
), o proprietário dos dados copiados no disco rígido externo se tornará (acho) o usuário que fez o comando de cópia. Se você quisesse preservar as permissões (e outros atributos) de um arquivo, teria que usar um sinalizador extra, como -p
(ou --preserve
) no comando cp
:
-p same as --preserve=mode,ownership,timestamps
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,owner-
ship,timestamps), if possible additional attributes: context,
links, xattr, all
Em que mode
são as permissões. Usando opções como -p
copia os atributos do inode para o novo arquivo.
O Windows usa o FAT32 ou NTFS, que são sistemas de arquivos completamente diferentes que não entendem inodes. É por isso que, quando você copia algo do Linux ( ext4
) para o Windows (NTFS ou FAT32), o Windows aplica seus próprios atributos ao arquivo.
Quando você monta um sistema de arquivos NTFS no Ubuntu, ele define permissões em tudo na partição usando o comando umask
(ou as opções fmask
e dmask
in fstab
). Quando você copia algo para essa partição montada, esses arquivos aceitam o que o comando umask
implica, e as permissões não podem ser alteradas a menos que você remonte a partição inteira com novas opções.
Para mais informações, leia a manpage do ntfs-3g aqui: link .