Answers:
您的理解大体上是正确的,但还需要考虑一些其他事项:
/lib
都将是编译成机器代码的库。cat
的东西在外壳脚本中使用,例如对库中的代码的调用,但它们并不是FHS的库,因为它们可以自己运行。由于上述几点,在不编写标准文档的人们中,更常见的术语是:
目标文件:这些是本机编译的机器代码,但是甚至无法运行或不可调用。它们通常具有.o
扩展名,除非它们属于其他类别之一,并且除构建软件外,在大多数系统上几乎从未见过。我在这里列出了它们,因为它们对于理解以下几条内容很重要。
可执行文件:这些文件主要由可直接运行的自包含代码组成。它们可以是可以由内核直接加载的特殊格式的目标文件(诸如cat
,bash
和python
,都是这种类型的可执行文件),也可以由本身是可执行文件的某些中间程序来解释(Minecraft pydoc
,和cowsay
都是示例)这类可执行文件)。第一种可执行文件在UNIX系统上几乎没有文件扩展名,而第二种可执行文件则可能有也可能没有。这就是FHS所谓的“二进制文件”。他们可以从其他可执行文件运行,但需要调用特殊功能调用它们(fork()
以及exec()
在C和C ++,东西出来的subprocess
Python等模块),并作为单独的进程运行。
库:这些文件包含可重用的代码,这些代码可被另一个库或可执行文件调用。一旦加载了库(在谈论已编译的代码时称为“链接”),库中的代码就会(通常)被其他代码直接调用,并在与调用它的代码相同的过程中运行。共有三种类型的库:
.a
扩展名。静态库的概念在编译的编程语言之外并不存在。.so
在UNIX 上具有扩展名(.dll
Windows 上是标准扩展名),该文件在运行时由使用它的可执行文件加载。/lib
在生产系统上可以找到的大多数是动态库。http.server
有关示例,请参见Python标准库)。. Tow of the examples I listed for that (
pydoc` 解释的cowsay
脚本”。
bash
,python
)来运行。而且,in脚本/lib
可以被其他脚本使用。比较Python模块。