'ls'命令如何在Linux / Unix中运行?

时间:2008-10-15 09:55:59

标签: linux unix open-source operating-system solaris

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

据我所知,ls forks&执行到Linux / Unix shell,然后获取(当前文件树的输出。例如/home/ankit/)。我需要更详细的解释,因为我不确定调用fork后会发生什么。

有人可以详细解释'ls'命令的功能吗?

5 个答案:

答案 0 :(得分:38)

ls不分叉。 shell forks和execs是为了运行任何没有内置的命令,它可以运行的命令之一是ls。

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

答案 1 :(得分:10)

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

答案 2 :(得分:4)

要了解ls的作用,您可以对OpenSolaris源代码:https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c

如果压倒性的话,在Solaris上你首先要使用truss来查看ls所做的系统调用以了解它的作用。使用truss,尝试:

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

然后查看ls.out

中的输出

我相信trace在Linux中等同于truss。

答案 3 :(得分:3)

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

我特别推荐4.4BSD源码。

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

答案 4 :(得分:0)

这是一个旧帖子,但我仍在评论,因为我相信赞成和接受的答案部分不正确。 @Mark说ls内置于shell中,因此shell不执行exec和fork。当我在bash上学习tldp文档时(我已经附上了链接) “ ls ”未列为内置命令。

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

Bash内置命令:

alias,bind,builtin,command,declare,echo,enable,help,let,local,logout,printf,read,shopt,type,typeset,ulimit和unalias。