私は最近、私のディレクトリからいくつかの特定のディレクトリを取り出し、/home
別のパス()にマウントされた外付けハードドライブに配置しました/mnt
。
私のホームディレクトリからシームレスにアクセスできるように、以前のディレクトリのいくつかへのシンボリックリンクを作成しました(たとえば、ディレクトリをに移動しました~/media/music
)/mnt/media/music
。
cd
これらのシンボリックリンクの1つを含むディレクトリに移動し(たとえば、/mnt/media/music
intoへのシンボリックリンクを作成します~/media/
)、コマンドを実行するとls
外付けハードドライブが回転を開始し、一部ls
のデータが表示されるまでの出力がブロックされます。 )がディスクから読み取られたかどうかはわかりません(回転のためそうです)。
なぜそのようなことが起こったのか知りたいです。シンボリックリンクを表示するために外部ハードドライブから何もロードする必要はないようです(cd
シンボリックリンクに接続することはls
別の問題ですが、ここでは言うことではありません)。それでは、なぜこれが起こるのですか?
事前にありがとう
答え1
--group-directories-first
ls
シンボリックリンクがディレクトリまたはファイルを指していることを確認する必要があります。
これには、外部ハードドライブであるターゲットファイルシステムへのアクセスが必要です。
そのため、ls
使用するのに長い時間がかかります。
@Kusalanandaは非常に有効な質問をしました。色付けに同じアクセスは必要ありません。いいえ。色付け(私の場合は、ls
現在デフォルトのdircolorを使用している8.32)はターゲットタイプをチェックしません。私がこれを確認する方法は実行することです
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
すでに「これはシンボリックリンクですか?」を含むディレクトリのリストを返すランダムメモリアドレスを除いて、すべてが同じです。情報。ターゲット(またはそのタイプ)の存在は確認されません。