Mam oprogramowanie trzeciej części z konfiguracją zewnętrzną, która przyjmuje „ścieżkę do pliku” jako parametr wejściowy. Niestety, to oprogramowanie łączy ścieżkę z określoną ścieżką. Na przykład oczekuje „danych / obrazów” jako parametru i użyje „/ Users / someuser / work / source / data / images”. Chcę określić i bezwzględną ścieżkę, ale podanie czegoś takiego jak „/ tmp / images” do tego oprogramowania spowoduje po prostu użycie nieistniejącej ścieżki „/ Users / someuser / work / source // tmp / images” :(. sztuczka ścieżki, której mogę używać obok '..', więc mogę dać oprogramowanie something
spowoduje to bezwzględną ścieżkę po powiązaniu oprogramowania ze wstępnie zdefiniowanym. Używanie „..” działa, ale nie jest to bardzo dobre rozwiązanie, ponieważ konfiguracja ścieżki jest statyczna, a predefiniowane użycie oprogramowania ścieżki może się zmienić.
1
Odpowiedzi:
Istnieje mnóstwo możliwości do wykonania
/Users/someuser/work/source/XXX
wskazać gdziekolwiek chcesz w Linuksie:Użyj dowiązań symbolicznych - robiąc coś takiego:
zrobiłby
/Users/someuser/work/source/XXX
pojawiać się jako katalog. Gdyby jakieś oprogramowanie podróżowało tam i / lub zapisywało tam pliki, trafiałyby do niego/wherever/you/want
.Zamontuj inny system plików w
XXX
, tj.W ten sposób otrzymasz urządzenie / dev / coś zamontowane bezpośrednio w katalogu, do którego aplikacja będzie zapisywać.
Wykonaj „bind mount”, czyli ponownie powiąż część innego systemu plików (już zamontowanego) z
XXX
:Działa podobnie jak dowiązanie symboliczne, ale jest znacznie trudniejsze do wykrycia przez aplikację. Aplikacja może łatwo sprawdzić, czy katalog docelowy jest dowiązaniem symbolicznym i odmawia tam zapisu, podczas gdy metoda bind mount zapewnia normalny katalog, ale jego zawartość
Użyj systemu plików podobnego do unionfs, takiego jak unionfs lub aufs - w ten sposób można „unifikować”, tj. montować jednocześnie kilka systemów plików w jednym katalogu (tj.
XXX
)Odtwórz kilka sztuczek za pomocą LD_PRELOAD i bibliotek, które zastępują metody, takie jak
open()
,fopen()
, itp. - najważniejszym jest bezpiecznik , a mianowicie, możesz chcieć sprawdzić Unijne systemy plików dla FUSE .źródło
Jeśli dowiązanie symboliczne
/Users/someuser/work/source/
do/
(korzeń)Każda ścieżka będzie oparta na katalogu głównym:
wskaże
które możesz sprawdzić
źródło
rootdir
zamiastsource
.mount --bind
oparte na rozwiązaniach nie są tak elastyczne jak moje.