我想确切地知道“Is”命令在Linux和Unix中是如何工作的。
据我所知,ls forks&执行到Linux / Unix shell,然后获取(当前文件树的输出。例如/home/ankit/)。我需要更详细的解释,因为我不确定调用fork后会发生什么。
有人可以详细解释'ls'命令的功能吗?
答案 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。