Почему 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 avgв topкоманде, нет ли чего-либо, что замедляет работу вашей машины в данный момент, или протестируйте ваш жесткий диск, возможно, у вас происходит много запросов ввода-вывода (проверьте по: iotopили vmstat).

Если это происходит довольно часто, всегда проверяйте с помощью другой оболочки или на разделе tmpfs ( /tmp), что должно быть намного быстрее.

Связанный контент