AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 748182
Accepted
dr_
dr_
Asked: 2023-06-07 16:13:27 +0800 CST2023-06-07 16:13:27 +0800 CST 2023-06-07 16:13:27 +0800 CST

É '..' realmente um link físico?

  • 772

Esta é uma questão um pouco teórica, mas é importante usar nomes próprios para as coisas.

Em sistemas de arquivos UNIX/Linux, ..aponta para o diretório pai.

No entanto, sabemos que hard links não podem apontar para diretórios , porque isso tem o potencial de quebrar a estrutura gráfica acíclica do sistema de arquivos e fazer com que os comandos sejam executados em um loop infinito.

Então, é ..realmente um hard link ( tipo. )? Isso o tornaria um tipo especial de hard link, não sujeito à restrição de diretório, mas que, para todos os propósitos, se comporta como um.

Ou é um mapeamento de inode especial, codificado no sistema de arquivos, que não deveria ser chamado de hard link?

filesystems
  • 4 4 respostas
  • 1083 Views

4 respostas

  • Voted
  1. Best Answer
    Gilles 'SO- stop being evil'
    2023-06-07T16:51:19+08:002023-06-07T16:51:19+08:00

    Depende do sistema de arquivos. A maioria dos sistemas de arquivos segue o design tradicional do Unix, onde .e ..são hard link. A contagem de hard link de um diretório é 2 + n onde n é o número de subdiretórios: essa é a entrada no pai do diretório, a própria .entrada do diretório e ..a entrada de cada subdiretório. A contagem de hard link é atualizada cada vez que um subdiretório é criado, removido ou movido para dentro ou fora do diretório. Consulte Por que um novo diretório tem uma contagem de hard link de 2 antes que qualquer coisa seja adicionada a ele? para uma explicação mais detalhada.

    Alguns sistemas de arquivos se desviam dessa tradição, em particular o btrfs .

    sabemos que hard links não podem apontar para diretórios

    Este é um texto impreciso. Mais precisamente, você não pode criar um link físico para um diretório usando o lnutilitário ou a linkchamada do sistema ou um método semelhante, porque o kernel o impede. A chamada mkdircria um link físico para o pai do novo diretório. É a única maneira de criar um novo link físico para um diretório em um sistema de arquivos (e, inversamente, remover um diretório é a única maneira de remover um link físico para um diretório).

    Além disso, observe que é enganoso pensar em links físicos em termos de “apontar para” um arquivo principal. Os links físicos não são direcionais, ao contrário dos links simbólicos. Quando um arquivo tem vários links físicos, eles são equivalentes. Após a seguinte sequência:

    mkdir a b
    touch a/file
    ln a/file b/file
    

    não há nada no sistema de arquivos que se torne b/filesecundário para a/file. As duas entradas de diretório referem-se ao mesmo arquivo. Ambos são links físicos para o arquivo.

    • 14
  2. user10489
    2023-06-07T19:32:24+08:002023-06-07T19:32:24+08:00

    Este é um detalhe de implementação.

    Em sistemas de arquivos compatíveis com POSIX, ..atua como um hard link.

    No entanto, alguns sistemas de arquivos apenas emulam isso e não o armazenam em disco.

    Para fins funcionais, a distinção é discutível, supondo que você não tenha corrupção do sistema de arquivos. (Se você fizer isso, o fsck foi projetado para corrigir isso.)

    Uma das falhas não-posix para emular totalmente os hard links é que a contagem do hardlink não indica o número correto de subdiretórios dentro de um diretório. A findopção -noleafopção desativa uma otimização que usa essa contagem de links.

    • 4
  3. Philip Couling
    2023-06-07T20:07:59+08:002023-06-07T20:07:59+08:00

    Como complemento à resposta de Gilles , acho que vale a pena chamar a atenção para estas palavras e expandi-las:

    Além disso, observe que é enganoso pensar em links físicos em termos de “apontar para” um arquivo principal.

    É muito importante entender o modelo conceitual de arquivos no linux onde cada nome dentro de um diretório é um "link" apontando para um "inode" que pode apontar para dados.

    O que é confuso aqui é a convenção de nomenclatura de "Hard Link" e "Symbolic Link" soando como dois sabores da mesma coisa. Eles não são!

    Um arquivo normal é:

    link -> x 
            | Inode -> Data
    

    Um "arquivo com link físico" não é diferente:

    link_a -> x
              | Inode -> Data
    link_b -> x
    

    Mas um link simbólico é:

    original_file_name -> x
                          | Inode -> Data
    
    sym_link_name      -> x
                          | Inode -> File name "original_file_name"
    

    Então, por que você não pode vincular diretórios?

    A melhor explicação que eu vim é derivada disso . A ..entrada deve ser mantida dentro do diretório. Se você tivesse mais de um único nome apontando para o próprio diretório, poderia ter mais de um pai e isso seria impossível porque ..só pode existir uma vez, como todos os outros nomes possíveis só podem existir uma vez dentro de um diretório.

    • 4
  4. CodeGnome
    2023-06-08T06:34:56+08:002023-06-08T06:34:56+08:00

    .e ..são Hard Links Especiais para Inodes

    De um ponto de vista puramente pragmático, .. é um hard link. No Linux, ele é tratado como um link físico para o ponto de montagem quando chamado a partir do nível superior de um volume montado, e no Linux e macOS /links físicos para ambos .e ..para o inode 2 como um caso especial.

    Mais detalhes

    Como outros apontaram, .ambos ..são links físicos para inodes em sistemas de arquivos que suportam inodes. Existem alguns sistemas de arquivos que não possuem inodes , mas isso é um problema secundário. Para fins práticos, quer um sistema suporte inodes diretamente ou não, um hard link apenas aponta para o mesmo bloco de metadados em um determinado sistema de arquivos. Às vezes, o hard link é um link real no sistema de arquivos e, às vezes, é sintetizado porque os sistemas POSIX esperam .e ..existem por razões históricas. De qualquer forma, é tratado como um link físico para diretórios, e alguns sistemas de arquivos, como o HFS+, permitem que você faça links físicos de diretórios que não cruzam os limites do sistema de arquivos.

    Hard Linking de Diretórios

    O MacOS permite que hard links em sistemas de arquivos HFS+ apontem para diretórios, porque essa foi historicamente a maneira como o Time Machine otimizou o uso do disco. No entanto, as versões mais recentes do Time Machine usam sistemas de arquivos APFS e instantâneos do sistema de arquivos, portanto, não há necessidade dessa exceção, exceto a compatibilidade com versões anteriores, e não funciona no APFS. Não confie nisso.

    Portanto, geralmente é o próprio sistema de arquivos que determina se um diretório pode ou não ter um link físico ou não. No Ubuntu 22.04, man 1 lndiz que o utilitário ln suporta links de diretório se o sistema permitir:

           -d, -F, --directory
                  allow  the  superuser to attempt to hard link directories (note:
                  will probably fail due to system restrictions, even for the  su‐
                  peruser)
    
    

    A parte que provavelmente confunde a maioria das pessoas são os pontos de montagem. Se você tiver um disco montado como /mnt/foo, cd /mnt/foo; ls -ld ..aponta para o inode do ponto de montagem, que neste caso seria o inode para /mnt. Ou o link físico para o ..diretório em uma montagem realmente não cruza os limites do sistema de arquivos porque está apenas olhando para o link físico de /mnt/foo (que existe independentemente de um volume estar montado lá ou não) ou é tratado especialmente pelo kernel para suportar volumes montados. Este é provavelmente um detalhe de implementação e não posso apontar para nenhuma fonte de kernel relacionada a ele, mas funcionalmente ainda é tecnicamente um link físico porque ..aponta para um inode em vez de um link suave apontando para um nome de arquivo.

    Você pode testar isso por si mesmo com:

    cd /
    stat .
    stat ..
    

    No Linux e no macOS, quando chamado com o -xsinalizador, você verá que ambos .apontam ..consistentemente para o inode 2. Muitos sistemas de arquivos reservam o inode 1 para blocos defeituosos .

    Como você pode criar links físicos para diretórios em alguns sistemas de arquivos, incluindo EXT3/4 com debugfs , não é verdade que você não pode vincular diretórios físicos. Geralmente não é suportado para garantir que o gráfico do diretório seja acíclico, e ferramentas como fsck reclamarão sobre diretórios com links físicos diferentes de .e ..em sistemas de arquivos que não suportam links físicos de diretórios para qualquer coisa que não seja o diretório de trabalho atual ( .) e o pai diretório ( ..) como um caso herdado especial.

    • 1

relate perguntas

  • Qual sistema de arquivos devo usar em um cartão SD em um NAS?

  • Como saber antecipadamente se um .zip tem um diretório pai dentro

  • Disco alocado dinamicamente do Virtualbox *.vdi continua crescendo

  • du/df e ls relatando diferentes usos de disco

  • Como os desenvolvedores do kernel Linux lidam com seu trabalho com milhões de linhas de código? É um método? [fechado]

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve