Um link físico é definido como um ponteiro para um inode. Um link virtual , também conhecido como link simbólico , é definido como um arquivo independente que aponta para outro link sem as restrições de links físicos.
Qual é a diferença entre um arquivo e um link físico? Um link rígido aponta para um inode, então o que é um arquivo? A entrada do inode em si? Ou um inode com um link físico?
Digamos que eu crie um arquivo com toque. Em seguida, uma entrada de inode é criada na tabela de inodes . E eu crio um link físico, que tem o mesmo número de inode que o arquivo. Então, eu criei um novo arquivo? Ou o arquivo é definido apenas como um inode?
files
filesystems
symlink
hard-link
Levent Divilioglu
fonte
fonte
Respostas:
A resposta muito curta é:
Arquivos e diretórios Unix funcionam exatamente como arquivos e diretórios no mundo real (e não como pastas no mundo real); Os sistemas de arquivos Unix são (conceitualmente) estruturados assim:
Manter essa metáfora em mente e, especificamente, ter em mente que os diretórios Unix funcionam como diretórios do mundo real e não como pastas do mundo real explica muitas das "esquisitices" que os recém-chegados costumam encontrar, como: por que posso excluir um arquivo que não possuo? não tem acesso de gravação? Bem, por um lado, você não está excluindo o arquivo, está excluindo um dos muitos nomes possíveis para o arquivo e, para fazer isso, precisa apenas de acesso de gravação ao diretório, não ao arquivo. Assim como no mundo real.
Ou, por que posso ter links simbólicos pendentes? Bem, o link simbólico simplesmente contém um nome de caminho. Não há nada que diga que realmente precisa haver um arquivo com esse nome.
A diferença entre um arquivo e um link físico é a mesma entre você e a linha com seu nome na lista telefônica.
Um arquivo é um dado anônimo. É isso aí. Um arquivo não é um inode, um arquivo tem um inode, assim como você não é um Número de Seguro Social, você tem um SSN.
Um link físico é um nome para um arquivo. Um arquivo pode ter muitos nomes.
Sim.
Não. Um link físico não possui um número de inode, pois não é um arquivo. Somente arquivos têm números de inode.
O hardlink associa um nome a um número de inode.
Sim.
Não. O arquivo tem um inode, não é um inode.
fonte
Um link físico é uma entrada de diretório. Um arquivo pode ter várias entradas de diretório, se estiver presente com nomes diferentes ou em diretórios diferentes. Uma entrada de diretório é chamada de "link físico" quando é colocada em relação a outras entradas de diretório para o mesmo arquivo.
O inode contém outros metadados do arquivo, além do nome e do conteúdo (local do conteúdo, permissões, registros de data e hora, etc.). Há um inode por arquivo. (Nem todos os sistemas de arquivos colocam os metadados em um espaço claramente identificável no disco que você poderia chamar de "inode", mas é uma arquitetura comum.) Uma entrada de diretório vincula um nome a um inode. É possível que mais de uma entrada de diretório se vincule ao mesmo inode, daí o termo "link". Esse link é chamado de "hard link" por oposição a "soft links" ou "links simbólicos" que não dizem "para esse nome, use este inode", mas "para esse nome, procure esse outro nome".
Pense nos arquivos como salas e nas entradas do diretório como portas. "Abrir o arquivo
/foo/bar
" significa "ir para o corredor/foo
e ir para o quartobar
". “Ir para o quartobar
” realmente significa “abrir a porta marcadabar
e entrar no quarto”, mas “ir para o quartobar
” é uma maneira normal de dizer a mesma coisa de maneira mais curta. É possível ter mais de uma porta que leva à mesma sala.Ao criar um link físico para um arquivo existente (
ln existing new
), você cria um segundo link para o mesmo arquivo, ou seja, está criando uma nova entrada de diretório que se vincula ao arquivo já existente. Após a criação, as duas entradas de diretório têm status igual: não há uma que seja "primária" e uma que seja "secundária", elas são apenas os dois links para o mesmo arquivo.Você também pode remover todos os links para um arquivo sem remover o próprio arquivo. Isso acontece se você excluir um arquivo (ou seja, você remover todas as suas entradas de diretório) enquanto um programa ainda tiver o arquivo aberto. O arquivo permanece no sistema de arquivos, na verdade, é removido apenas quando o último processo que abriu o arquivo o fecha. Na metáfora da sala e portas, uma sala que não tem portas ainda ocupa espaço.
fonte
Além de todas as outras respostas, quero destacar as seguintes propriedades importantes:
Um softlink é uma referência verdadeira, ou seja, é um arquivo pequeno que contém um nome de caminho. A resolução de um vínculo virtual acontece de maneira transparente com o aplicativo: se um processo abrir um arquivo, diga
/this/path/here
qual é um link simbólico apontando para/that/other/path
, todo o tratamento da abertura/that/other/path
é feito pelo sistema operacional. Além disso, se/that/other/path
for um link simbólico, isso também está sendo tratado pelo sistema operacional. De fato, o sistema operacional segue a cadeia de links simbólicos até encontrar outra coisa (por exemplo, um arquivo comum) ou até atingirSYMLOOP_MAX
(versysconf(3)
) muitas entradas; nesse caso, o sistema operacional (mais precisamente: a chamada do sistema) retorna um erro e defineerrno
paraELOOP
. Assim, uma referência circular comoxyz -> xyz
não irá parar o processo. (Para sistemas Linux, vejapath_resolution(7)
detalhes completos.)Observe que um processo pode verificar se um nome de caminho é um link simbólico ou não através do uso de
lstat(2)
e pode modificar seus atributos de arquivo (armazenados na tabela de inodes) por meio delchown(2)
outros (vejasymlink(7)
a história completa).Agora, em termos de permissão, você notará que os links simbólicos sempre têm permissões 777 (
rwxrwxrwx
em notação simbólica). Isso se deve ao fato de que qualquer outra permissão pode ser ignorada acessando o arquivo real, de qualquer maneira. Por outro lado, o 777 para um link simbólico não torna o arquivo vinculado acessível se não estiver acessível em primeiro lugar. Por exemplo, um link simbólico com permissões 777 apontando para um arquivo com permissões 640 não torna o arquivo acessível para "outro" (público em geral). Em outras palavras, um arquivo podexyz
ser acessado através de um link simbólico, se e somente se estiver diretamente acessível, ou seja, sem indicação indireta. Portanto, as permissões do link simbólico não têm nenhum efeito de segurança.Uma das principais diferenças visíveis entre links físicos e links simbólicos (também conhecidos como links flexíveis) é que os links simbólicos funcionam nos sistemas de arquivos, enquanto os links físicos estão confinados a um sistema de arquivos. Ou seja, um arquivo na partição A pode ser vinculado a partir da partição B, mas não pode ser vinculado a partir daí. Isso fica claro pelo fato de que um hardlink é realmente uma entrada em um diretório, que consiste em um nome de arquivo e um número de inode, e que os números de inode são exclusivos apenas por sistema de arquivos.
O termo hardlink é realmente um tanto enganador. Embora a origem e o destino dos links simbólicos sejam claramente distinguíveis (o link simbólico tem sua própria entrada na tabela de inodes), isso não é verdade para os links físicos. Se você criar um hardlink para um arquivo, a entrada original e o hardlink serão indistinguíveis em termos do que estava lá primeiro. (Como eles se referem ao mesmo inode, eles compartilham seus atributos de arquivo, como proprietário, permissões, carimbos de data e hora, etc.) Isso leva à afirmação de que toda entrada de diretório é na verdade um link físico e que vincular um arquivo significa apenas criar um segundo ( ou terceiro ou quarto ...) hardlink. De fato, cada inode armazena um contador para o número de hardlinks para esse inode.
Por fim, observe que usuários comuns podem não vincular diretórios. Isso ocorre porque isso deve ser feito com extrema cautela: um usuário incauto pode introduzir ciclos na árvore de arquivos estritamente hierárquica, com a qual todas as ferramentas usuais (como
fsck
) e o próprio sistema operacional não estão preparados para lidar.fonte
Uma resposta simples:
Uma entrada de arquivo em um diretório é um link físico para esse arquivo.
Alguns arquivos têm mais de um link físico, pois vários links físicos para o mesmo arquivo são permitidos.
fonte
Nos primeiros dias do Unix, os arquivos internamente eram inodes em uma unidade de disco específica. Os nomes dos arquivos eram uma maneira mais amigável de acessá-los.
Um link físico estava atribuindo mais de um nome de arquivo a um inode. Você pode criar um arquivo, vincular um segundo nome a ele e excluir o primeiro nome e era indistinguível de simplesmente criar o arquivo com o segundo nome em primeiro lugar.
De fato, a chamada do sistema que um programa precisa usar para excluir um arquivo é 'unlink (2) `. Os dados não desaparecem até que o sobrenome seja desvinculado do inode. (e o inode não é aberto por um processo em algum lugar)
É isso que torna mais fácil para o Linux atualizar as coisas enquanto ainda executa os programas. Se um processo estiver executando um executável e ocorrer uma atualização, o nome do programa será reutilizado, mas o inode que contém a versão antiga ainda existe para que possa continuar em execução. E quando o último processo executando essa versão antiga é interrompido, esse armazenamento da versão antiga é liberado.
Os links flexíveis surgiram porque, quando você tem uma árvore de arquivos unitária, com vários pontos de montagem, não era possível criar um link físico de um disco rígido para um inode em outro. Então, os links flexíveis foram inventados.
fonte
early days
por que está diferente agora? sua resposta parece não refletir essa visão?Um arquivo são os dados gravados no disco. Esses dados são referenciados por seu inode, que contém metadados sobre o arquivo informando ao sistema quais blocos no disco são usados por esse arquivo, entre outras coisas. Um link físico aponta para o número de inode desse arquivo.
Portanto, tecnicamente, sim, você está criando um novo arquivo, mas todo esse arquivo contém é o número do inode do arquivo que ele faz referência e o nome. É melhor pensar nisso como criar um ponteiro para o inode ou um ponteiro para o arquivo.
fonte
Arquivo é um conceito amplamente usado sobre entradas em um sistema de arquivos.
Geralmente inclui Diretório , Arquivo Regular (link físico) e Link Simbólico (link virtual). E pode até incluir dispositivo e soquete.
Como até mesmo o link simbólico é normalmente contado como arquivo, um link físico também pode ser contado como um arquivo. Você pode dizer que é um arquivo, independentemente de ser um link físico ou físico.
O conceito é um pouco ambíguo, portanto, também é bom dizer que uma entrada de inode é um arquivo, embora você possa realmente querer se referir aos dados.
Se você é um programador C ++ ou Java, pode ler sobre std :: filesystem :: file_type , java.io.File e java.nio.file.Files .
Detalhes sobre as diferenças entre o link físico e o link virtual podem ser encontrados no link no comentário do infixed.
fonte
A diferença entre um "arquivo" com um nome determinado e um "link físico" é histórica. Um arquivo (regular) com um determinado nome é criado usando uma chamada do sistema de criação, um link físico é criado usando uma chamada do sistema de link.
No entanto, enquanto os humanos falam e se lembram do histórico de entradas de diretório e os chamam de arquivos e links físicos de acordo, o sistema de arquivos não. As entradas de diretório de "arquivo original" e "link físico" são totalmente indistinguíveis em qualidade: ambas estabelecem uma referência entre um nome de arquivo e o inode de um arquivo e depois que a última referência se for (as referências não são apenas nomes de arquivos para um arquivo, mas também descritores de arquivo com os quais um arquivo aberto pode ser acessado), o arquivo para o inode não referenciado é considerado excluído e o inode e o espaço no arquivo associado são recuperados.
Então, quando os humanos contrastam "arquivos" e "links físicos", o primeiro surgiu com uma "contagem de links de 1", e todos os outros passaram a existir com uma contagem maior de links. A diferença é acadêmica e, na verdade, renomear um arquivo ao mesmo tempo consistiu em criar um link físico para o nome de destino e remover o link para o nome de origem. Atualmente, geralmente é usada uma única chamada do sistema que faz isso atomicamente.
fonte