Linux学习

Linux学习

开放源代码的,可以自由传播的类Unix操作系统软件

计算机 硬件 (CPU、主板、内存、硬盘、键盘、鼠标、显示器等) 软件 (操作系统、应用软件等)

操作系统 文件系统 设备驱动程序 用户接口 系统服务程序

服务器和PC端 Linux/Unix Windows macOS

手机端 Android iOS Windows Phone (WP)

嵌入式 Windows CE Linux …

历史

Unix诞生于20世纪60年代末 Windows诞生于20世纪80年代中期 Linux诞生于20世纪90年代初

Unix - 由肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)发明

批处理操作系统 分时操作系统

Multics 工程计划目标是开发一种交互式的、具有多道程序处理能力的分时操作系统,以取代当时广泛使用的批处理操作系统。 想一下英文中的前缀 Multi 和 Uni,就明白了 UNIX 的隐意。Multi 是大的意思,大而且繁;而 Uni 是小的意思,小而且巧。这是 UNIX 开发者的设计初衷,这个理念一直影响至今。

1971-1972 年,肯•汤普森的同事丹尼斯•里奇发明了传说中的C语言,这是一种适合编写系统软件的高级语言 到了 1973 年,UNIX 系统的绝大部分源代码都用C语言进行了重写

20 世纪 70 年代初,计算机界还有一项伟大的发明——TCP/IP 协议

这为 UNIX 系统、C语言、TCP/IP 协议的发展拉开了序幕,它们分别在操作系统、编程语言、网络协议这三个领域影响至今

FreeBSD 源于美国加利福尼亚大学伯克利分校开发的 UNIX 版本 苹果公司的 OS X 就是基于 FreeBSD 的操作系统

Linux 内核最初是由李纳斯•托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。第 1 版本于 1991 年 9 月发布,当时仅有 10 000 行代码。

类Unix操作系统 传统的Unix操作系统: FreeBSD, OpenBSD, NetBSD, Solaris, … 相似的系统: Linux, QNX, Minix

脚本: Shell, awk, sed, Perl, TCL, Python, Ruby

Richard Stallman,理查德·马修·斯托曼,自由软件运动的领袖、GNU 计划的创立者。 1984 年, 发起了 GNU 源代码开放计划并制定了著名的 GPL 许可协议。

组成

Binutils 包含汇编器、链接器以及其他用于处理目标文件的工具。 GCC 软件包包含 GNU 编译器集合,其中有 C 和 C++ 编译器。 Linux API 头文件 (在 linux-5.8.3.tar.xz 中) 导出内核 API 供 Glibc 使用。 Glibc 软件包包含主要的 C 语言库。它提供用于分配内存、检索目录、打开和关闭文件、读写文件、字符串处理、模式匹配、算术等用途的基本子程序 Libstdc++ 是 C++ 标准库。我们需要它才能编译 C++ 代码 (GCC 的一部分用 C++ 编写)。但在构建第一遍的 GCC时我们不得不暂缓安装它,因为它依赖于当时还没有安装到目标目录的 Glibc M4 软件包包含一个宏处理器。 Ncurses 软件包包含终端无关的字符屏幕处理库。 Bash 软件包包含 Bourne-Again SHell。 Coreutils 软件包包含用于显示和设定系统基本属性的工具。 Diffutils 软件包包含显示文件或目录之间差异的程序。 File 软件包包含用于确定给定文件类型的工具。 Findutils 软件包包含用于查找文件的程序。这些程序能够递归地搜索目录树,以及创建、维护和搜索文件数据库 (一般比递归搜索快,但在数据库最近没有更新时不可靠)。 Gawk 软件包包含操作文本文件的程序。 Grep 软件包包含在文件内容中进行搜索的程序。 Gzip 软件包包含压缩和解压缩文件的程序。 Make 软件包包含一个程序,用于控制从软件包源代码生成可执行文件和其他非源代码文件的过程。 Patch 软件包包含通过应用 “补丁” 文件,修改或创建文件的程序,补丁文件通常是 diff 程序创建的。 Sed 软件包包含一个流编辑器。 Tar 软件包提供创建 tar 归档文件,以及对归档文件进行其他操作的功能。Tar 可以对已经创建的归档文件进行提取文件,存储新文件,更新文件,或者列出文件等操作。 Xz 软件包包含文件压缩和解压缩工具,它能够处理 lzma 和新的 xz 压缩文件格式。使用 xz 压缩文本文件,可以得到比传统的 gzip 或 bzip2 更好的压缩比。 Gettext 软件包包含国际化和本地化工具,它们允许程序在编译时加入 NLS (本地语言支持) 功能,使它们能够以用户的本地语言输出消息。 Bison 软件包包含语法分析器生成器。 Perl 软件包包含实用报表提取语言。 Python 3 软件包包含 Python 开发环境。它被用于面向对象编程,编写脚本,为大型程序建立原型,或者开发完整的应用。 Texinfo 软件包包含阅读、编写和转换 info 页面的程序。 Man-pages 软件包包含 2,200 多个 man 页面。 Tcl 软件包包含工具命令语言,它是一个可靠的通用脚本语言。Except 软件包是用 Tcl 语言编写的. Expect 软件包包含通过脚本控制的对话,自动化 telnet,ftp,passwd,fsck,rlogin,以及 tip 等交互应用的工具。Expect 对于测试这类程序也很有用,它简化了这类通过其他方式很难完成的工作。DejaGnu 框架是使用 Expect 编写的。 DejaGnu 包含使用 GNU 工具运行测试套件的框架。它是用 expect 编写的,后者又使用 Tcl (工具命令语言)。 Iana-Etc 软件包包含网络服务和协议的数据。 Zlib 软件包包含一些程序使用的压缩和解压缩子程序。 Bzip2 软件包包含用于压缩和解压缩文件的程序。使用 bzip2 压缩文本文件可以获得比传统的 gzip 优秀许多的压缩比。 Zstandard 是一种实时压缩算法,提供了较高的压缩比。它具有很宽的压缩比/速度权衡范围,同时支持具有非常快速的解压缩。 Readline 软件包包含一些提供命令行编辑和历史记录功能的库。 Bc 软件包包含一个任意精度数值处理语言。 Flex 软件包包含一个工具,用于生成在文本中识别模式的程序。 GMP 软件包包含提供任意精度算术函数的数学库。 MPFR 软件包包含多精度数学函数。 MPC 软件包包含一个任意高精度,且舍入正确的复数算术库。 Attr 软件包包含管理文件系统对象扩展属性的工具。 Acl 软件包包含管理访问控制列表的工具,访问控制列表能够更细致地自由定义文件和目录的访问权限。 Libcap 软件包为 Linux 内核提供的 POSIX 1003.1e 权能字实现用户接口。这些权能字是 root 用户的最高特权分割成的一组不同权限。 Shadow 软件包包含安全地处理密码的程序。 pkg-config 软件包提供一个在软件包安装的配置和编译阶段,向构建工具传递头文件和/或库文件路径的工具。 Psmisc 软件包包含显示正在运行的进程信息的程序。 Libtool 软件包包含 GNU 通用库支持脚本。它在一个一致、可移植的接口下隐藏了使用共享库的复杂性。 GDBM 软件包包含 GNU 数据库管理器。它是一个使用可扩展散列的数据库函数库,工作方法和标准 UNIX dbm 类似。该库提供用于存储键值对、通过键搜索和获取数据,以及删除键和对应数据的原语。 Gperf 根据一组键值,生成完美散列函数。 Expat 软件包包含用于解析 XML 文件的面向流的 C 语言库。 Inetutils 软件包包含基本网络程序。 XML::Parser 模块是 James Clark 的 XML 解析器 Expat 的 Perl 接口。 Intltool 是一个从源代码文件中提取可翻译字符串的国际化工具。 Autoconf 软件包包含生成能自动配置软件包的 shell 脚本的程序。 Automake 软件包包含自动生成 Makefile,以便和 Autoconf 一同使用的程序。 Kmod 软件包包含用于加载内核模块的库和工具。 Libelf 是一个处理 ELF (可执行和可链接格式) 文件的库。 Libffi 库提供一个可移植的高级编程接口,用于处理不同调用惯例。这允许程序在运行时调用任何给定了调用接口的函数。 OpenSSL 软件包包含密码学相关的管理工具和库。它们被用于向其他软件包提供密码学功能,例如 OpenSSH,电子邮件程序和 Web 浏览器 (以访问 HTTPS 站点)。 Ninja 是一个注重速度的小型构建系统。 Meson 是一个开放源代码构建系统,它的设计保证了非常快的执行速度,和尽可能高的用户友好性。 Check 是一个 C 语言单元测试框架。 Groff 软件包包含处理和格式化文本的程序。 GRUB 软件包包含 “大统一” (GRand Unified) 启动引导器。 Less 软件包包含一个文本文件查看器。 IPRoute2 软件包包含基于 IPv4 的基本和高级网络程序。 Kbd 软件包包含按键表文件、控制台字体和键盘工具。 Libpipeline 软件包包含用于灵活、方便地处理子进程流水线的库。 Man-DB 软件包包含查找和阅读 man 页面的程序。 Texinfo 软件包包含阅读、编写和转换 info 页面的程序。 Vim 软件包包含强大的文本编辑器。 Eudev 软件包包含动态创建设备节点的程序。 Procps-ng 软件包包含监视进程的程序。 Util-linux 软件包包含若干工具程序。这些程序中有处理文件系统、终端、分区和消息的工具。 E2fsprogs 软件包包含处理 ext2 文件系统的工具。此外它也支持 ext3 和 ext4 日志文件系统。 Sysklogd 软件包包含记录系统消息的程序,例如在意外情况发生时内核给出的消息。 Sysvinit 软件包包含控制系统启动、运行和关闭的程序。