Sim, várias maneiras.
- Links físicos:
ln file1 file2
. Agorafile2
será outro nome parafile1
, e não importa o nome para o qual você renomeoufile1
, ou mesmo se você excluí-lo,file2
sempre funcionará para acessá-lo (a menos que você renomeie / exclua também) obviamente). Isso funciona apenas para arquivos, não para diretórios, e todos os links precisam estar no mesmo sistema de arquivos. - Vincular montagens:
mount --bind file1 file2
. Isso funciona como hard links, exceto que ele também funciona para diretórios e não possui a mesma restrição de sistema de arquivos. A desvantagem é que é uma operação privilegiada, portanto, você precisa ser raiz (ou estar em seu próprio usuário e nos namespaces de montagem). - Descritores de arquivos:
exec {foo}</some/file
. Uma vez que você fizer isso,/proc/self/fd/$foo
será um link simbólico "mágico" para o arquivo (é "mágico" no sentido de que ele não quebrará como os links simbólicos regulares seriam, e é possível devido ao pseudo-sistema de arquivos especial / proc) . Isso funciona para arquivos e diretórios, não requer privilégios especiais e é automaticamente herdado e utilizável por processos filhos. As desvantagens são que isso dura apenas até o processo que saiu e você não tem muito controle sobre o caminho para ele. - name_to_handle_at / open_by_handle_at : atende aos seus requisitos literais, mas é mais complicado do que qualquer um dos acima e é uma operação privilegiada. A única vantagem é que o identificador é um dado regular e não requer nenhum estado para ser mantido.