'ls'命令如何在Linux / Unix中运行?
-
03-07-2019 - |
题
我想确切知道“Is”是怎么回事。命令适用于Linux和Unix。
据我所知,ls forks&执行到Linux / Unix shell,然后获取(当前文件树的输出。例如/home/ankit/)。我需要更详细的解释,因为我不确定调用fork后会发生什么。
有人可以详细解释'ls'命令的功能吗?
解决方案
ls不分叉。 shell forks和execs是为了运行任何没有内置的命令,它可以运行的命令之一是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来查看ls所做的系统调用以了解它的作用。使用truss,尝试:
truss -afl -o ls.out / bin / ls
然后查看ls.out
中的输出我相信trace在Linux中等同于truss。
如果你真的想了解ls的详细内部,请查看源代码。您可以关注tpgould链接到Solaris源代码,也可以从任何Linux或BSD发行版中在线查找源代码。
我特别推荐4.4BSD源码。
我记得,ls首先解析其众多选项,然后从命令行中列出的文件或目录开始(默认为“。”)。子目录通过递归到目录列表例程来处理。我记得没有fork()或exec()。
这是一个旧帖子,但我仍在评论,因为我相信赞成和接受的答案部分不正确。 @Mark说ls内置于shell中,因此shell不执行exec和fork。当我在bash上学习tldp文档时(我已经附上了链接) "的 LS 强>"未列为命令构建。
http://tldp.org/LDP/Bash-Beginners-导向/ HTML / sect_01_03.html
Bash内置命令:
alias,bind,builtin,command,declare,echo,enable,help,let,local,logout,printf,read,shopt,type,typeset,ulimit和unalias。