ls -al に突然非常に長い時間がかかるようになったのはなぜですか?

ls -al に突然非常に長い時間がかかるようになったのはなぜですか?

突然ls -alイライラするほど長い時間がかかるようになりますが、通常はls通常と同じくらい速いです。

何が問題なのでしょうか?

答え1

実行するとls、ファイルのリストが表示されるだけで、他には何も表示されません。ls -al一方、より多くの情報が表示されますが、そのためには統計(1)それらのファイル。

また、ファイルに問題がある場合、その操作には長い時間がかかる可能性があります。

私の問題は、いくつかのファイルのグループが存在しなくなったことです

-rw-------   1 nifle   10001    21499 Jan 25 14:31 .bash_history
-rw-r--r--   1 nifle   10001      304 Dec  6  2004 .bash_logout
-rw-r--r--   1 nifle   10001      222 Dec 16 14:05 .bash_profile
-rw-r--r--   1 nifle   10001      124 Dec  6  2004 .bashrc

簡単にchown nifle:nifle .bash*問題を解決しました。

答え2

場合によっては、エイリアスの問題、シェルによる追加処理、またはストレージ デバイスへのアクセスが遅いことが原因である可能性があります。

私の場合は、別名として次のようにしています:

$ type ls
ls is aliased to `ls $LS_OPTIONS'

その場合は、 as を実行すると\ls -al直接呼び出すことができます。

シェル処理については、シェルトレースを有効にすることで確認できます。例:

$ set -x
$ ls
+ ls -G -h
README.txt index.php
++ update_terminal_cwd
++ local url_path=
++ local i ch hexch LC_CTYPE=C LC_ALL=
++ (( i = 0 ))
++ (( i < 26 ))
++ ch=/
++ [[ / =~ [/._~A-Za-z0-9-] ]]
++ url_path+=/
++ (( ++i ))
++ (( i < 26 ))
++ ch=U
++ [[ U =~ [/._~A-Za-z0-9-] ]]
++ url_path+=U
++ (( ++i ))
++ (( i < 26 ))
++ ch=s
... hundred of other lines
$ set +x
$ echo $PROMPT_COMMAND
update_terminal_cwd

最後にls時間をチェックします:

$ time ls -la
...
real    0m0.025s
user    0m0.001s
sys     0m0.004s

sys時間が長すぎる場合は、コマンドload avgtop、現時点でマシンの速度を低下させているものがないか確認してください。または、ハード ドライブのベンチマークを実行してください。大量の I/O 要求が発生している可能性があります (iotopまたはで確認してくださいvmstat)。

これが頻繁に発生する場合は、常に別のシェルまたは tmpfs パーティション ( ) で確認してください/tmp。これにより、はるかに高速になります。

関連情報