Ubuntuを実行して端末を開き、次の操作を行います。
sudo bash
cd /
ls | head -n 1000
約20個のディレクトリが返されると予想されます。
ただし、lsを実行して何もパイプしないと、lsは他の端末で終了するまでそこで停止します。何が起こりますか?
編集する:
> type ls
ls is aliased to `ls --color=auto`
編集する:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
lsの出力色を指定すると、コマンドが中断されるのはなぜですか?
答え1
lsを正常に実行すると、ファイルに対してstat(2)を実行せずにファイルのリストのみが表示されます。つまり、ファイル自体にはアクセスせず、ファイルを含むディレクトリにのみアクセスします。
--colorオプションを追加したり、ファイル自体を調べる必要がある他のlsオプションを使用している場合は、lsはファイルをstat(2)する必要があります。
おそらく、ディレクトリ内のファイルの少なくとも1つは、実際にはNFSまたは同様のものを介してリモートシステムからマウントされています。そして、パーティションをマウントしたサーバーが起動しないか、応答しません。したがって、lsがディレクトリに関する情報を取得しようとすると、サーバーが応答するまでカーネルで停止します。
他の人が述べたように、straceを使用すると、lsが停止したときにどのディレクトリにアクセスしようとしているかを判断できます。その後、マウントされたパーティションなどをアンマウントできます。