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

问题描述 投票:13回答:5

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

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

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

linux unix open-source operating-system solaris
5个回答
38
投票

ls不叉。 shell分叉和执行以运行任何未内置的命令,并且它可以运行的命令之一是ls。

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


10
投票

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


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
投票

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

我特别推荐4.4BSD源码。

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


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 and unalias。

© www.soinside.com 2019 - 2024. All rights reserved.