Ls指向另一個驅動器塊
指向另一個驅動器塊ls
的路徑中的符號連結
我最近從我的目錄中取出了一些特定的目錄,並將它們放在安裝在另一個路徑 ( )
/home
上的外部硬碟驅動器上。/mnt
在我的主目錄中,我創建了一些舊目錄的符號連結,以便無縫訪問它們(例如,我將我的移動
~/media/music
到/mnt/media/music
)。現在,如果我
cd
進入一個包含這些符號連結之一的目錄(例如,我為/mnt/media/music
into創建了一個符號連結~/media/
)然後我發出一個ls
命令,外部硬碟驅動器開始旋轉並且輸出ls
被阻塞,直到一些數據(不要知道什麼)從磁碟讀取(我想,因為旋轉)。我想知道它發生的原因。似乎沒有必要從外部硬碟驅動器載入任何內容來顯示符號連結(
cd
進入符號連結然後ls
是另一回事,儘管這不是我在這裡指的)。那麼為什麼會這樣呢?提前致謝
--group-directories-first
要求ls
解析符號連結是否指向目錄或文件。為此,它需要訪問目標文件系統,即您的外部硬碟驅動器。
所以,這就是為什麼
ls
你使用它需要很長時間。@Kusalananda 提出了一個非常有效的問題,即著色是否不需要相同的訪問權限:它不需要;著色(就我的
ls
8.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
,它返回一個目錄列表,其中已經包含“這是一個符號連結嗎?” 資訊。永遠不會檢查目標(或其類型)的存在。