“ls”命令在Linux / Unix中如何工作?

我想知道“Is”命令在Linux和Unix中是如何工作的。

据我所知,ls fork&exec到linux / unix shell,然后获取当前文件树的输出(eg./home/ankit/)。 我需要更详细的解释,因为我不确定在调用fork之后会发生什么。

任何人都可以详细解释'ls'命令的function吗?

Solutions Collecting From Web of "“ls”命令在Linux / Unix中如何工作?"

ls不分叉。 shell为了运行任何不是内置的命令而分叉和执行,其中一个可以运行的命令是ls。

ls使用opendir()和readdir()来遍历目录中的所有文件。 如果需要更多关于其中之一的信息,则调用stat()。

为了增加答案,在C编程语言手册(K&RC)中,他们给出了一个关于如何实现ls的小例子。 他们已经很好地解释了数据结构和功能。

要了解ls的功能,可以在OpenSolaris源代码中使用: https : //hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c 。

如果这太令人难以置信,那么在Solaris上,首先使用truss来查看系统调用,以了解它的功能。 使用桁架,尝试:

truss -afl -o ls.out / bin / ls

然后在ls.out中查看输出

我相信跟踪在Linux中相当于桁架。

如果您真的想了解ls的详细内容,请查看源代码。 您可以按照tpgould链接到Solaris源代码,也可以从任何Linux或BSD发行版在线查找源代码。

我会特别推荐4.4BSD源代码。

我记得,ls从解析它的许多选项开始,然后从命令行上列出的文件或目录开始(默认是“。”)。 子目录通过递归处理到目录列表例程中。 我记得没有fork()或exec()。

这是一个古老的线索,但我仍然在评论,因为我相信已被提出并接受的答案部分是不正确的。 @Mark说ls被内置到shell中,因此shell不会执行和fork。 当我在bash上学习tldp文档时(我已经链接了该链接),“ ls ”没有列为build in命令。

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_01_03.html

Bash内置的命令:

别名,绑定,内建,命令,声明,回声,启用,帮助,让,本地,注销,printf,阅读,shopt,类型,排版,ulimit和unalias。