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 something
que 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/XXX
apuntar 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/XXX
aparecer 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 decirmount /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