¿Cómo forzar que lo relativo sea absoluto en Linux?

¿Cómo forzar que lo relativo sea absoluto en Linux?

Tengo un software de terceros con configuración externa que toma "ruta al archivo" como parámetro de entrada. Desafortunadamente, este software concatena la ruta proporcionada con alguna ruta predefinida. Por ejemplo, espera 'datos/imágenes' como parámetro y utilizará '/Usuarios/algún usuario/trabajo/fuente/datos/imagenes'. Quiero especificar una ruta absoluta, pero dar algo como '/tmp/images' a este software solo dará como resultado que se utilice una ruta inexistente '/Users/someuser/work/source//tmp/images' :(. ¿Es alguna truco de ruta que puedo usar junto con '..' para poder proporcionar un software somethingque dé como resultado una ruta absoluta después de que el software la concatene con una predefinida. El uso de '..' funciona, pero no es una muy buena solución ya que la configuración de la ruta es estática y predefinida. El uso del software de ruta puede cambiar.

Respuesta1

Hay innumerables posibilidades para /Users/someuser/work/source/XXXapuntar a donde quieras en Linux:

  • Utilice enlaces simbólicos, haciendo algo como:

    ln -s /wherever/you/want /Users/someuser/work/source/XXX
    

    haría /Users/someuser/work/source/XXXaparecer como un directorio. Si algún software viajara allí y/o escribiera archivos allí, terminarían en formato /wherever/you/want.

  • Monte algún otro sistema de archivos en XXX, es decir

    mount /dev/something /Users/someuser/work/source/XXX
    

    De esta manera, montará su dispositivo /dev/something directamente en el directorio en el que escribiría la aplicación.

  • Realice un "montaje vinculado", es decir, vuelva a vincular una parte de algún otro sistema de archivos (ya montado) a XXX:

    mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
    

    Funciona de manera muy similar a un enlace simbólico, pero es mucho más difícil de detectar por aplicación. La aplicación podría comprobar fácilmente si el directorio de destino es un enlace simbólico y negarse a escribir allí, mientras que el método de montaje enlazado proporciona un directorio normal, pero su contenido sería

  • Utilice un sistema de archivos similar a unionfs, comosindicatosoaufs- de esta manera puedes "unificar", es decir, montar simultáneamente varios sistemas de archivos en un directorio (es decir XXX)

  • Haga algunos trucos con LD_PRELOAD y bibliotecas que anulan métodos, como open(), fopen(), etc.; la más destacada esfusible, es decir, es posible que desees consultarSistemas de archivos tipo unión para FUSE.

Respuesta2

Si establece un enlace simbólico /Users/someuser/work/source/a /(root)

work$ ln -s / source

Cada ruta se basará en la raíz:

/Users/someuser/work/source/tmp/images 

apuntará a

/tmp/images

que puedes comprobar por

work$ ls source/tmp/images

información relacionada