发布网友 发布时间:2022-04-24 01:16
共1个回答
热心网友 时间:2023-10-17 19:53
如果你用过BSD,autoconf,就很容易组合出这几个目录的原始逻辑是什么了。
autoconf很大程度上代表了传统的unix应用程序设计逻辑,autoconf有一个prefix的概念,指定这个工具(被编译的应用程序)的根在什么地方,基于这个根:
1. 一般可执行程序放在bin中
2. 系统可执行程序放在sbin中
3. 全局配置文件放在etc中
4. 库放在lib中
……
当你编译这些程序的时候,一般是先:
./configure --prefix=/usr/local
然后
make
make install
这样对应的文件就被安装到对应的目录中了。
所以,/usr, /usr/local,都是prefix。
然后我们看看这些prefix是怎么选择的。如果你编译过FreeBSD一类的系统,你会发现,这些系统的系统库,基础工具和内核是放到一套代码树中的,编译这个代码,内核和核心库,工具是一同完成的,这些都被认为是操作系统的一部分。这些核心文件,就以根目录作为prefix。所以,/是所有操作系统核心程序的prefix。
在这个核心之外增加新的程序,构成一个发行版,这个发行版增加的程序就用/usr作为prefix。
你把发行版安装好了,安装发行版之外应用程序,那些程序通常用/opt, /srv作为prefix。
但如果你自己从源代码开始编译一个应用程序,这些程序是专门向你这个Site编译的,这种情况下,默认的prefix是/usr/local。
但这些仅仅是个习惯,我们无法保证每个人都用一样习惯使用这些目录。Filesystem Hierarchy Standard尝试把这个定义为一个标准(CGL也有自己的标准,现在两者是否已经合并我就懒得查了),但现在来说,没有什么标准是被所有发行版都赞成的。当然,更约束不了你。
建议看看刘遄老师的另外就是刘遄老师的《linux就该这么学》,书籍当中有详细的描述
热心网友 时间:2023-10-17 19:53
如果你用过BSD,autoconf,就很容易组合出这几个目录的原始逻辑是什么了。
autoconf很大程度上代表了传统的unix应用程序设计逻辑,autoconf有一个prefix的概念,指定这个工具(被编译的应用程序)的根在什么地方,基于这个根:
1. 一般可执行程序放在bin中
2. 系统可执行程序放在sbin中
3. 全局配置文件放在etc中
4. 库放在lib中
……
当你编译这些程序的时候,一般是先:
./configure --prefix=/usr/local
然后
make
make install
这样对应的文件就被安装到对应的目录中了。
所以,/usr, /usr/local,都是prefix。
然后我们看看这些prefix是怎么选择的。如果你编译过FreeBSD一类的系统,你会发现,这些系统的系统库,基础工具和内核是放到一套代码树中的,编译这个代码,内核和核心库,工具是一同完成的,这些都被认为是操作系统的一部分。这些核心文件,就以根目录作为prefix。所以,/是所有操作系统核心程序的prefix。
在这个核心之外增加新的程序,构成一个发行版,这个发行版增加的程序就用/usr作为prefix。
你把发行版安装好了,安装发行版之外应用程序,那些程序通常用/opt, /srv作为prefix。
但如果你自己从源代码开始编译一个应用程序,这些程序是专门向你这个Site编译的,这种情况下,默认的prefix是/usr/local。
但这些仅仅是个习惯,我们无法保证每个人都用一样习惯使用这些目录。Filesystem Hierarchy Standard尝试把这个定义为一个标准(CGL也有自己的标准,现在两者是否已经合并我就懒得查了),但现在来说,没有什么标准是被所有发行版都赞成的。当然,更约束不了你。
建议看看刘遄老师的另外就是刘遄老师的《linux就该这么学》,书籍当中有详细的描述