我有一個帶有外部配置的第三方軟體,它將“文件路徑”作為輸入參數。不幸的是,該軟體將給定的路徑與某些預先定義的路徑連接起來。例如,它需要“data/images”作為參數,並將使用“/Users/someuser/work/source/data/images”。我想指定絕對路徑,但是向該軟體提供諸如“/tmp/images”之類的內容只會導致使用不存在的路徑“/Users/someuser/work/source//tmp/images”:(。是嗎?something
,因為路徑配置是靜態的且是預先定義的。
答案1
在 Linux 中,您可以透過多種方式/Users/someuser/work/source/XXX
到達任何您想去的地方:
使用符號連結 - 執行以下操作:
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/something 裝置安裝在應用程式將寫入的目錄中。
執行“綁定掛載”,即將其他檔案系統(已掛載)的一部分重新綁定到
XXX
:mount -o bind /wherever/you/want /Users/someuser/work/source/XXX
它的工作原理很像符號鏈接,但應用程式檢測它要困難得多。應用程式可能很容易檢查目標目錄是否是符號連結並拒絕在那裡寫入,而綁定掛載方法提供了一個普通目錄,但它的內容會
使用類似 unionfs 的檔案系統,例如聯盟或者奧夫斯- 這樣你就可以“統一”,即在一個目錄中同時安裝多個檔案系統(即
XXX
)使用 LD_PRELOAD 和覆蓋方法的庫玩一些技巧,例如
open()
、fopen()
等 - 最突出的是保險絲,也就是說,您可能想查看FUSE 的類別聯合檔案系統。
答案2
如果您符號連結/Users/someuser/work/source/
到/
(root)
work$ ln -s / source
每條路徑都基於根:
/Users/someuser/work/source/tmp/images
將指向
/tmp/images
你可以透過以下方式檢查
work$ ls source/tmp/images