'ls'命令非常慢

替丁

我的目录中大约有17k个文件。运行时ls directory,我必须等待约15-20秒才能显示结果。另一方面,当我运行ls directory | wc -l或时ls directory | grep .xyz,结果将立即显示。

为什么会发生这种情况,有没有办法解决?

用户名

我猜您正在使用Linux。

  1. 如果您的ls命令具有别名,以便它以彩色显示文件和文件夹,那么它需要找出每个项目的权限(一个stat()调用),以及它是否设置了任何“文件功能”(一个getxattr()调用)选择合适的颜色。如果文件所需的元数据尚未缓存在RAM中,则取决于文件系统,这些调用的速度可能会很慢。[扩展属性通常位于数据区域中,因此每个getxattr都会导致HDD搜索。]

    另一方面,ls |当重定向到管道时,它会自动禁用着色,因此它不再需要进行任何额外的检查–只需一个简单的readdir()循环即可返回文件名和类型,并且内核甚至可以实现预读那。

  2. 通常,ls将其输出分成列,这意味着它必须先读取整个目录,然后才能输出任何内容。通过管道运行时,它将自动禁用列模式,并且不再需要此缓冲。(总运行时间不一定会更快,但是输出会更早开始,从而使响应速度更快。)

使用straceperf trace检查哪些系统调用(如果有的话)花费的时间很长。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章