![Почему ls -al вдруг занимает очень много времени?](https://rvso.com/image/1481852/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20ls%20-al%20%D0%B2%D0%B4%D1%80%D1%83%D0%B3%20%D0%B7%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D0%B5%D1%82%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8%3F.png)
Внезапно все 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
), что должно быть намного быстрее.