在碰到系统资源紧张,海量文件的情况下,执行ls命令,特别是ls -laRt命令,会很慢,笔者就碰到在几百万~几千万个海量小文件的情况下,执行ls -laRt命令要花1分钟到数个小时的情况。这种情况因属正常,要解释为什么会这么慢,就必须先说明下Linux中的内部命令和外部命令


内部命令 VS 外部命令

内部命令:所谓内部命令是指写在bash源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。 比如:exit,history,cd,jobs,bg,fg,echo

外部命令:bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin等等 
比如:ls,vi,cat

用type命令可以分辨内部命令与外部命令,带builtin命令的就是内部命令
# type cd                       
cd is a shell builtin
# type echo
echo is a shell builtin
# type ls                       
ls is aliased to `ls --color=tty'
# type vi
vi is aliased to `vim'


有了上面的认识,接着就必需了解ls命令的详细执行步骤:

ls命令执行步骤
第一步: 通过$PATH找到ls命令的存放路径,默认是/bin/ls,并执行ls命令.
第二步: 扫描所要打印的目录
第三步: 获取该目录下的所有文件的所有信息
第四步: 将获取的上述信息读取到内存
第五步: 最后将内存中相关的信息输出到屏幕中

所有ls的最终执行结果主要取决于:
1. ls目录下子目录,子文件的数目
2. 所用磁盘速度大小,比如说: SSD盘的速度> NL_SAS盘 > SATA盘
3. 内存大小
4. 内核个数和大小,处理能力

备注:
1)  一般固态盘: 200-800MB/s
2)  一般机械盘: 20-120MB/s

3)  一般内存速度: DDRIII1333的读取速度 8-9G/s,写的速度:7-8G


最后总结

综合上面来看,一般ls命令执行个几分钟,几个小时都属于正常,取最终执行结果,取决于文件个数,硬盘速度,内存大小,CPU个数和性能(这个在处理并行执行ls命令,效果尤其明显),需要用top,free, iostat等性能分析工具,看具体瓶颈出现在哪里。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐