Ich habe eine Drittanbietersoftware mit externer Konfiguration, die als Eingabeparameter „Pfad zur Datei“ verwendet. Leider verknüpft diese Software den angegebenen Pfad mit einem vordefinierten Pfad. Beispielsweise erwartet sie „data/images“ als Parameter und verwendet „/Users/someuser/work/source/data/images“. Ich möchte einen absoluten Pfad angeben, aber wenn ich dieser Software etwas wie „/tmp/images“ gebe, wird nur der nicht vorhandene Pfad „/Users/someuser/work/source//tmp/images“ verwendet :(. Gibt es einen Pfadtrick, den ich neben „..“ verwenden kann, damit ich der Software einen absoluten something
Pfad angeben kann, nachdem die Software ihn mit dem vordefinierten verknüpft hat? Die Verwendung von „..“ funktioniert, ist aber keine sehr gute Lösung, da die Pfadkonfiguration statisch ist und sich der von der Software verwendete vordefinierte Pfad ändern kann.
Antwort1
Es gibt unzählige Möglichkeiten, /Users/someuser/work/source/XXX
in Linux einen Punkt zu setzen, wo immer Sie möchten:
Verwenden Sie symbolische Links, beispielsweise:
ln -s /wherever/you/want /Users/someuser/work/source/XXX
würde
/Users/someuser/work/source/XXX
als Verzeichnis erscheinen. Wenn Software dorthin wandern und/oder Dateien schreiben würde, würden diese in landen/wherever/you/want
.Mounten Sie ein anderes Dateisystem in
XXX
, z. B.mount /dev/something /Users/someuser/work/source/XXX
Auf diese Weise wird Ihr /dev/something-Gerät direkt in dem Verzeichnis gemountet, in das die Anwendung schreiben würde.
Führen Sie ein „Bind Mount“ durch, d. h. binden Sie einen Teil eines anderen (bereits gemounteten) Dateisystems erneut an
XXX
:mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
Es funktioniert ähnlich wie ein Symlink, ist aber für Anwendungen viel schwieriger zu erkennen. Anwendungen können leicht prüfen, ob das Zielverzeichnis ein Symlink ist und das Schreiben dort verweigern, während die Bind-Mount-Methode ein normales Verzeichnis bereitstellt, dessen Inhalt jedoch
Verwenden Sie ein unionfs-ähnliches Dateisystem, wie zum Beispielunionfsoderauf- auf diese Weise können Sie mehrere Dateisysteme gleichzeitig in einem Verzeichnis "vereinheitlichen", d. h. mounten (dh
XXX
)Probieren Sie einige Tricks mit LD_PRELOAD und Bibliotheken aus, die Methoden überschreiben, wie
open()
,fopen()
, usw. - der bekannteste istSicherung, nämlich, möchten Sie vielleicht überprüfenUnion-ähnliche Dateisysteme für FUSE.
Antwort2
Wenn Sie einen symbolischen Link /Users/someuser/work/source/
zu /
(root) erstellen
work$ ln -s / source
Jeder Pfad dort basiert auf der Wurzel:
/Users/someuser/work/source/tmp/images
wird verweisen auf
/tmp/images
Dies können Sie überprüfen, indem Sie
work$ ls source/tmp/images