Shell

為什麼我必須從已刪除的目錄中 cd 出來?

  • September 20, 2018

在我的伺服器上,我的目錄結構如下所示:

/myproject/code

我通常與伺服器建立 ssh 連接並在該目錄中“站立”:

root@machine:/myproject/code#

當我部署新版本的程式碼時,程式碼目錄被刪除,所以我只剩下:

root@machine:/myproject/code# ./run
-bash: ./run: No such file or directory

我發現的唯一解決方案是 cd 退出並重新進入:

root@machine:/myproject/code# cd ../code
root@machine:/myproject/code# ./run
Running...

我可以避免這種情況嗎?這是一個有點奇怪的行為。如果您有一個很好的解釋為什麼會發生這種情況,我將不勝感激。

對我來說,“cd ../code”是個小問題。我很想知道為什麼它不是。

因為文件和目錄本質上是文件系統 inode,而不是名稱——這可能是特定於文件系統類型的實現細節,但對於所有 ext 系統都是如此,所以我會在這裡堅持。

當一個目錄code被創建時,它與一個新的 inode 相關聯,這就是它所在的位置。沒有保存以前刪除的文件和目錄的記錄,因此系統無法檢查它曾經佔用的 inode 並可能打亂它以使其再次相同;這樣的系統很快就會變得不可行,而且無論如何,可能無法保證您會再次回到那裡——這有點不受歡迎,因為這意味著如果創建了目錄,您也可能意外地落到其他地方這需要您的(目前未使用的)inode。

我不確定這最後一種可能性是否存在,或者是否跟踪目前分配給您目前工作目錄的已刪除目錄的 inode,以便在此期間不會分配任何內容等。

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