Como obter uma lista de todos os "aliases" de um arquivo (incluindo o tipo de diretório) de forma eficiente?

1

Como se pode obter a lista de todos os aliases de um arquivo (incluindo o tipo diretório) de forma eficiente, dado que um arquivo:

  1. pode ter vários links físicos, links suaves de várias faixas, links suaves de vários níveis
  2. pode estar presente em um diretório montado em outro local no mesmo sistema de arquivos
  3. pode estar presente em um diretório que tenha link (es) apontando para ele; novamente os links com recursos mencionados em 1

Uma possível solução poderia estar usando inodes?

    
por gr3ymatt3r 03.05.2012 / 12:26

1 resposta

1

Os links físicos podem ser identificados comparando o número do inode e o número do dispositivo (dois sistemas de arquivos montados diferentes podem ter um arquivo com o mesmo número de inode, mas terão números de dispositivos diferentes) . Você pode ler o dispositivo / inode manualmente com stat $file , ou find pode fazer isso com -samefile . Você pode tornar a pesquisa por links físicos mais eficiente pesquisando apenas no mesmo dispositivo:

find $fsroot/. -mount -samefile $myfile

Os links suaves são mais difíceis, pois podem estar localizados em qualquer lugar. Você precisa desreferencia-los para identificar o inode / dispositivo. Você pode fazer isso manualmente com stat -L ou automaticamente com find -L :

find -L / -samefile $myfile

Note que isso também encontrará links físicos. Eu não acho que find tenha uma maneira fácil de procurar apenas links que apontam para um inode específico.

Pode ser que alguns sistemas de arquivos possam informar essas informações com mais eficiência, mas acho que, no caso geral, você precisa verificar todos os arquivos.

    
por 03.05.2012 / 15:45