パスのシンボリックリンクは他のドライブブロック「ls」を指します。

パスのシンボリックリンクは他のドライブブロック「ls」を指します。

私は最近、私のディレクトリからいくつかの特定のディレクトリを取り出し、/home別のパス()にマウントされた外付けハードドライブに配置しました/mnt

私のホームディレクトリからシームレスにアクセスできるように、以前のディレクトリのいくつかへのシンボリックリンクを作成しました(たとえば、ディレクトリをに移動しました~/media/music/mnt/media/music

cdこれらのシンボリックリンクの1つを含むディレクトリに移動し(たとえば、/mnt/media/musicintoへのシンボリックリンクを作成します~/media/)、コマンドを実行するとls外付けハードドライブが回転を開始し、一部lsのデータが表示されるまでの出力がブロックされます。 )がディスクから読み取られたかどうかはわかりません(回転のためそうです)。

なぜそのようなことが起こったのか知りたいです。シンボリックリンクを表示するために外部ハードドライブから何もロードする必要はないようです(cdシンボリックリンクに接続することはls別の問題ですが、ここでは言うことではありません)。それでは、なぜこれが起こるのですか?

事前にありがとう

ベストアンサー1

--group-directories-firstlsシンボリックリンクがディレクトリまたはファイルを指していることを確認する必要があります。

これには、外部ハードドライブであるターゲットファイルシステムへのアクセスが必要です。

そのため、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/withoutlinkgetdents64すでに「これはシンボリックリンクですか?」を含むディレクトリのリストを返すランダムメモリアドレスを除いて、すべてが同じです。情報。ターゲット(またはそのタイプ)の存在は確認されません。

おすすめ記事