Ls

指向另一個驅動器塊ls的路徑中的符號連結

  • July 4, 2021

我最近從我的目錄中取出了一些特定的目錄,並將它們放在安裝在另一個路徑 ( )/home上的外部硬碟驅動器上。/mnt

在我的主目錄中,我創建了一些舊目錄的符號連結,以便無縫訪問它們(例如,我將我的移動~/media/music/mnt/media/music)。

現在,如果我cd進入一個包含這些符號連結之一的目錄(例如,我為/mnt/media/musicinto創建了一個符號連結~/media/)然後我發出一個ls命令,外部硬碟驅動器開始旋轉並且輸出ls被阻塞,直到一些數據(不要知道什麼)從磁碟讀取(我想,因為旋轉)。

我想知道它發生的原因。似乎沒有必要從外部硬碟驅動器載入任何內容來顯示符號連結(cd進入符號連結然後ls是另一回事,儘管這不是我在這裡指的)。那麼為什麼會這樣呢?

提前致謝

--group-directories-first要求ls解析符號連結是否指向目錄或文件。

為此,它需要訪問目標文件系統,即您的外部硬碟驅動器。

所以,這就是為什麼ls你使用它需要很長時間。

@Kusalananda 提出了一個非常有效的問題,即著色是否不需要相同的訪問權限:它不需要;著色(就我的ls8.32 而言,使用我目前非常預設的 dircolors)不檢查目標的類型。我檢查的方法是執行

cd /tmp
mkdir dir
cd dir
touch testthing
ln -s /doesnotexist deadlink
strace -o /tmp/withlink ls --color
rm deadlink
strace -o /tmp/withoutlink ls --color

然後diff /tmp/withlink /tmp/withoutlink。除了隨機記憶體地址之外,所有內容都與 相同getdents64,它返回一個目錄列表,其中已經包含“這是一個符號連結嗎?” 資訊。永遠不會檢查目標(或其類型)的存在。

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