Unix和Linux关系
UNIX是最早的商业操作系统之一,由贝尔实验室(AT&T Bell Laboratories)于 1970 年代开发。UNIX 是一个多用户、多任务的操作系统,具有强大的命令行界面和可扩展性。
Linux 是一个开放源代码的类 UNIX 操作系统内核,最早由芬兰的林纳斯·托瓦兹(Linus Torvalds)在 1991 年开发。Linux 内核是由 C 语言编写的,被设计为可运行在各种硬件平台上,并提供了现代操作系统所需的核心功能。
Linux 内核受到 UNIX 设计和哲学的影响,并从 UNIX 中借鉴了许多思想和概念。因此,Linux 在许多方面与 UNIX 相似,包括具有类似的文件系统层次结构、进程管理、权限模型等。
然而,由于历史原因和许可证问题,Linux 并未直接继承自 UNIX 操作系统。Linux 内核是在自由软件许可证(GPL)下发布的,因此它可以自由地使用、修改和分发。而商业的 UNIX 操作系统有不同的许可证和专有实现。
尽管 Linux 内核与 UNIX 并非直接衍生关系,但它与 UNIX 在设计和功能上具有很高的相似性,并且遵循了 UNIX 的哲学和思想。因此,Linux 通常被认为是 UNIX 的克隆或替代品,并且它成为了一个广泛使用的类 UNIX 操作系统。
1.linux系统
Linux系统可以划分为以下四个部分:
1.Linux内核
2.GNU工具
3.图形化桌面环境
4.应用软件
1.1 Linux内核
内核包括如下功能
1.1.1系统内存管理
内核通过硬盘上的存储空间来实现虚拟内存,这块区域被称为交换空间。内核不断地在交换空间和实际物理内存之间反复交换虚拟内存中的内容,使得系统以为它拥有比物理内存更多的可用内存。
1.1.2.软件程序管理
Linux操作系统将运行中的程序叫做进程。内核控制着Linux如何管理运行在系统上的所有进程。(init进程启动系统上所有其他进程)
进程与线程的关系
1.1.3.硬件内存管理
内核的另一职责是管理硬件设备。任何Linux系统需要与之通信的设备,都需要在内核代码中加入其驱动代码。驱动代码允许内核与设备之间交换数据。
1.1.4.文件系统管理
不同于其他操作系统,Linux内核支持通过不同类型的文件系统从硬盘中读写数据。
1.2 GNU工具
Linux和GNU的关系
GNU(GNU’s Not Unix)是一个自由软件运动的项目,旨在创建一个完全自由、开放源代码的类Unix操作系统。
Linux 是一个开放源代码的操作系统内核,最早由芬兰的林纳斯·托瓦兹(Linus Torvalds)在1991年开发,并且后来成为了广泛使用的操作系统内核。
GNU 项目和 Linux 内核结合在一起,形成了现代的 GNU/Linux 操作系统。这个操作系统将 GNU 提供的大部分工具、库和用户空间程序与 Linux 内核结合在一起,提供了完整的操作系统功能。
尽管 Linux 内核是操作系统的核心组件,但它自身并不能构成一个完整的操作系统。因此,GNU 项目提供了大量的工具和应用程序,包括 GNU C 编译器(GCC)、GNU Bash shell、GNU Core Utilities 等,使 Linux 内核具备了完整的操作系统功能。
所以,GNU 和 Linux 是密切相关的,GNU 提供了大部分的用户空间程序,而 Linux 提供了操作系统的内核。二者的结合使得我们通常所说的 Linux 系统成为可能。因此,通常我们称这个操作系统为 GNU/Linux。
1.2.1 shell
GNU/Linux shell是一种特殊的交互式工具,它的核心是命令行提示符。命令行提示符是shell负责交互的部分,它允许你输入文本命令,然后解释命令,并在内核中执行。
在Linux系统上,通常有好几种Linux shell可用,不同shell有不同的特性。默认的是bash shell
1.3 桌面环境
目前用的比较多的应该是Unity桌面。
动态库和静态库
linux下库分为两种:静态库和动态库。
静态库:
静态库的命名方式是“libxxx.a”,库名前面加lib,后缀为.a,xxx为静态库名。
链接时间:静态库的代码是在编译的过程中被载入到程序中。
链接方式:静态库的链接是将整个函数库的所有数据都整合进了目标代码。优点就是编译后的执行程序不需要外部的函数库的支持(所用的函数已经被编进去了),缺点就是所使用的静态库发生更新改变,程序必须重新编译。
动态库:
动态库的命名方式与静态库相似,前缀相同为“lib”,后缀为“.so”。
链接时间:动态库在编译的时候并没有被编译进目标代码,而是当你的程序执行到相关函数的时候才调用函数库里相关的函数。
优点:动态库的改变不影响你的程序,动态函数库升级比较方便。
缺点:函数库没有整合进程序,程序的运行环境必须提供相应的库。
不同点:
当一个程序分别使用动态库和静态库两种方式生成两个可执行文件时候,静态链接生成的文件所占用的内存要比动态链接生成的文件所占用的内存要大。(静态链接在编译的时候把所有的函数都编译进了程序,动态链接在运行的时候才调用库里的函数)
详细参见:Linux下浅谈静态库和动态库
参考资料:《Linux命令行与shell脚本编程大全(第三版)》第一章初识Linux shell