Linux

Linux 符號連結遍歷問題

  • September 20, 2017

我正在嘗試使用 USB PENDRIVE 來增加我目前建構大型庫的路徑。

所以,我有這個想法,在我的程序中創建一個符號連結到 Pendrive 中的文件夾。這樣它就使用了筆式驅動器中的空間,而不是我的主記憶體儲空間。

/home/me/opencv/ <– 這是我要建構的產品 /home/me/opencv/build/ <– 這是建構文件夾。

此時沒有足夠的記憶體來建構它,所以我創建了這個符號連結/home/me/opencv/

mkdir /media/me/pendrive/opencv/build/

ln -s /media/me/pendrive/opencv/build/  /home/me/opencv/ -s

/home/me/opencv/這在指向我的筆式驅動器的文件夾下創建了一個連結“build” 。

這裡的問題是目錄遍歷也指向筆式驅動器。

cd /home/me/opencv
ls

這會在 opencv 文件夾中呈現許多文件夾和文件

但如果我這樣做…

cd /home/me/opencv/build
ls ..

這將呈現一個空的 opencv 文件夾,其中只有一個名為 build 的文件夾。

假設您可以使用sudo或擁有 root 權限,您可以嘗試綁定掛載。例如,

mkdir /home/me/opencv/build
mkdir -p /media/me/pendrive/opencv/build
sudo mount -o bind /home/me/opencv/build /media/me/pendrive/opencv/build

然後,當在 中時/home/me/opencv/build,您應該看到 中..的內容/home/me/opencv/。用於sudo umount /home/me/opencv/build撤消安裝。

您遇到的邏輯目錄路徑和物理目錄路徑之間存在差異。

cd /home/me/opencv/build

這會將您放置在邏輯目錄中,但實際上,由於符號連結/home/me/opencv/build,您實際上是在中。/media/me/pendrive/opencv/build

ls ..將顯示物理父目錄的內容/media/me/pendrive/opencv

物理目錄路徑是一個邏輯目錄路徑,它的所有符號連結都已解析。如果邏輯目錄路徑不只包含符號連結,它們是相同的。

另請參閱該建構目錄中pwd -L和while之間的區別(並閱讀手冊)。pwd -P``pwd

cd也有-L-P標誌(並且-L是預設值)。

引用自:https://unix.stackexchange.com/questions/393201