Wie kann man in Linux einen relativen Wert in einen absoluten Wert umwandeln?

Wie kann man in Linux einen relativen Wert in einen absoluten Wert umwandeln?

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 somethingPfad 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/XXXin 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/XXXals 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

verwandte Informationen