1

У меня есть программное обеспечение третьей стороны с внешней конфигурацией, которое принимает "путь к файлу" в качестве входного параметра. К сожалению, это программное обеспечение объединяет путь, указанный с каким-то предопределенным путем. Например, он ожидает «data /images» в качестве параметра и будет использовать «/Users /someuser /work /source /data /images». Я хочу указать и абсолютный путь, но если указать что-то вроде '/tmp /images' для этого программного обеспечения, то просто будет использоваться несуществующий путь /Users /someuser /work /source //tmp /images :(. Это какой-то трюк пути, который я могу использовать вместе с '..', чтобы я мог дать программам something что приведет к абсолютному пути после того, как программное обеспечение объединит его с предопределенным. Использование '..' работает, но это не очень хорошее решение, так как конфигурация пути является статической и использование предопределенного пути может измениться.

2 ответа2

2

Есть множество возможностей сделать так, чтобы /Users/someuser/work/source/XXX указывало куда угодно в Linux:

  • Используйте символические ссылки - делая что-то вроде:

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

    сделает /Users/someuser/work/source/XXX отображаться в виде каталога. Если какое-то программное обеспечение будет перемещаться туда и / или записывать туда файлы, они окажутся в /wherever/you/want .

  • Смонтируйте какую-нибудь другую файловую систему в XXX , т.е.

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

    Таким образом, ваше устройство / dev / что-то будет смонтировано прямо в каталоге, в который приложение будет писать.

  • Выполните "bind mount", то есть перепривязайте часть какой-либо другой файловой системы (уже смонтированной) к XXX:

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

    Он работает почти как символическая ссылка, но его гораздо сложнее обнаружить приложением. Приложение может легко проверить, является ли целевой каталог символической ссылкой, и отказаться от записи туда, в то время как метод bind mount предоставляет обычный каталог, но его содержимое

  • Используйте подобную unionfs файловую систему, такую как unionfs или aufs - таким образом, вы можете "объединить", то есть смонтировать одновременно несколько файловых систем в одном каталоге (то есть XXX)

  • Поиграйте с трюками с LD_PRELOAD и библиотеками, которые переопределяют методы, такие как open() , fopen() и т.д. - наиболее выдающимся из них является fuse , а именно, вы можете захотеть проверить файловые системы, подобные Union для FUSE .

0

Если вы используете символическую ссылку /Users/someuser/work/source/ to / (root)

work$ ln -s / source

Каждый путь будет основан на корне:

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

будет указывать на

/tmp/images

который вы можете проверить по

work$ ls source/tmp/images

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .