我猜你正在使用 Linux。
如果您的ls命令具有别名以便以颜色显示文件和文件夹,那么它需要按顺序找出每个项目的权限(stat() 调用)以及它是否具有任何“文件功能”集(getxattr() 调用)选择正确的颜色。根据文件系统,如果所需的元数据尚未缓存在 RAM 中,这些调用可能会相当慢。[扩展属性通常存在于数据区中,因此每个 getxattr 都会导致 HDD 搜索。]
另一方面,ls |当重定向到管道时会自动禁用着色,所以它不再需要做任何额外的检查——只是一个简单的 readdir() 循环,它返回文件名和类型,内核甚至可能实现预读那。
通常ls将其输出分列,这意味着它必须先读取整个目录,然后才能输出任何内容。当通过管道运行时,它会自动禁用列模式并且不再需要这种缓冲。(总运行时间不一定更快,但输出开始得更早,让它感觉更灵敏。)
使用strace或perf trace检查哪些系统调用(如果有)花费了很长时间。
| 归档时间: |
|
| 查看次数: |
8011 次 |
| 最近记录: |