据我了解,该ls
命令调用getdents
,它返回最多 x 个目录条目。是否还涉及其他系统调用?如果我运行ls -l
,还会有更多的系统调用吗?我试图确定是否ls -l
比 更昂贵,因此更慢ls
。
答案1
/bin/ls
通常对输出进行排序。我不确定您的“高效”问题是否只是系统调用或已完成的整个工作,但/bin/ls -f
可能会做最少的工作。它仅按目录顺序返回文件名。没有排序,没有额外的索引节点查找来获取元数据(就像ls -l
会做的那样)。
另外,如果您的默认设置ls
是着色,那么它可能会执行相当于ls -l
无论如何的操作,以便它可以告诉如何为输出着色。
答案2
ls -l
肯定更昂贵,因为它必须查询文件系统的元数据,例如所有者、组、权限、访问时间等。Vanilla/bin/ls
只需要查找名字列出的目录中的条目数。
请注意,ls
在您的系统上, 可能会被别名为比 更不普通的东西/bin/ls
。跑去type ls
看看是不是这样。