目录

  • autoreconf 命令的作用是什么?
  • aclocal
  • automake -a
  • autoconf
  • 一条命令搞完三面三步
  • 既然有其他的「编译控制软件」为何还是使用 make 来进行编译控制?
  • Module-Init-Tools 软件包的作用是什么?
  • Patch 软件包的作用是什么?
  • Psmisc 软件包的作用是什么?
  • Rsyslog 软件包的作用什么?
  • sysvint 软件包的作用是什么?
  • Udev 软件包的作用是什么?
  • DHCPCD 软件包的作用是什么?
  • Xz-Utils 软件包的作用是什么?
  • openssl 软件包的作用是什么?
  • openssh 软件包的作用是什么?
  • Bootscript 软件包的作用是什么?
  • 启动脚本是什么?
  • sysvinit 的运行级是什么概念?
  • 系统运行时如何改变运行级?P233
  • GRUB 软件包的作用是什么?
  • Linux 内核软件包的作用是什么?

autoreconf 命令的作用是什么?

大多数软件包在发布源代码的时候会提供 configure 配置脚本,该配置脚本多数是由 autoconf 软件包提供的命令根据 configure.ac 或 configure.in 文件所产生的。

个别软件包发布时未提供如 configure 等编译相关的配置文件,在编译前需要使用 automake 和 autoconf 软件包中提供的命令来生成相关的文件。

装备好配置编译脚本文件的过程是

aclocal
automake -a
autoconf

aclocal

这个命令是根据 configure.ac 文件产生 aclocal.m4 文件,该文件是使用 m4 命令进行解析的宏文件,其中定义了配置过程中需要测试的内容。

automake -a

根据 makefile.am 文件生成 makefile.in 文件,makefile.in 文件会在 configure 脚本处理后生成编译控制文件 makefile,GNU 软件发布代码中通常需要包含 License、README、TODO 和 Changelog 文件,通常情况下这些文件与软件包的编译无关,但是如果缺少这些文件 automake 命令不会生成 makefile.in 文件,automake 软件包中提供了这些文件的模板,automake 命令使用 -a 参数将自动用模板文件补全缺少的文件。

autoconf

这个命令根据 configure.ac 或 configure.in 模板文件来生成 configure 配置脚本文件。

一条命令搞完三面三步

上述几条明林够可以合并为一条命令来完成,命令如下:

autoreconf -i

通过这个命令将完成符合编译条件的源代码目录,接着就可以进行配置、编译和安装等常规步骤了。

既然有其他的「编译控制软件」为何还是使用 make 来进行编译控制?

软件编译大多使用 make 命令控制完成,虽然目前也有其他的编译控制软件,如 cmake 和 qmake 等,但是目前 make 命令依然是使用最为广泛的编译控制软件。

make 命令不仅用于编译,还可以用于处理控制相关的工作,比如并行化的系统启动以及软件包依赖管理控制等。

Module-Init-Tools 软件包的作用是什么?

这个软件包中包含了可以处理 Linux 内核 2.5.47 以上版本模块所需要的命令。

Patch 软件包的作用是什么?

这个软件包中包含了一个根据补丁文件的内容来修改或者创建文件的程序。

补丁文件通常是用 diff 明林个创建的文本文件,用于修正现有文件的问题或者错误。

Psmisc 软件包的作用是什么?

这个软件包包含了用于显示进程信息的相关的程序。

Rsyslog 软件包的作用什么?

这个软件包中包含了饿记录系统日志信息(如发生异常事件时内核发出的消息)的程序。

大多数 linux 系统都具有记录系统以及软件运行状态、错误类型等信息报告的功能,以便出现了问题可以进行跟踪和排查。

sysvint 软件包的作用是什么?

这个软件包中包含了饿一组控制系统启动、运行、关闭的程序。

Udev 软件包的作用是什么?

这个软件中包含了一组用于动态创建设备文件的程序,可以将这些程序一并称呼为 Udev 系统。

大多数 linux 系统都使用 udev 系统来管理 /dev 目录中的设备文件,Udev 系统会自动检测计算机并生成设备文件,udev 系统还具有热插拔设备的管理能力,能够根据设备的实际使用情况来动态的创建和删除设备文件,几大的节省了管理设备文件的难度。

DHCPCD 软件包的作用是什么?

许多局域网的网络管理会使用自动分配 IP 的方式,DHCPCD 软件包提供了自动获取并分配 IP 地址的功能(需要网络存在 DHCP 服务),省去了手工去设置 IP 的麻烦。

Xz-Utils 软件包的作用是什么?

这个软件包提供了对于 lzma 和 xz 压缩格式的支持。

目前越来越多的文件采用 lzma 或 xz 的压缩格式,该格式的压缩率非常高。

openssl 软件包的作用是什么?

这个软件包包含了大量的加密和认证相关的算法,是一个非常重要和基础的加密算法函数库,目前有大量的开源软件使用的加密算法基于该软件包提供的函数库,比如安装了这个软件包后 wget 可以提供对 HTTPS 等加密协议的支持。

openssh 软件包的作用是什么?

这个软件包中包含了使用安全加密算法的网络链接客户端(ssh)和服务端(sshd)程序,是网络中进行数据安全传输中最为常用的工具。

他提供的 ssh 和scp 命令几乎出现在现在所有的 Linux 系统中。

Bootscript 软件包的作用是什么?

大多数 linux 系统都会包含一套启动和关闭系统的脚本,bootscripts 软件包中包含了一套脚本专门用于启动/关闭本次完成的目标系统。

启动脚本是什么?

大多数 linux 系统使用的是基于运行级(run-levles)概念的启动工具(sysvinit),在不同的运行级上使用不同的脚本集合,这些脚本集合完成了对应运行级所需要的任务。

不同 linux 系统所包含的启动脚本大多数情况下是不同的,每个系统根据其自身的规则来定制脚本,这使得在某个 linux 系统发行版上可以正常工作的脚本不一定能够在另一个 linux 发行版上正常工作。

虽然脚本不同,但是基于 sysvinit 软件包提供的启动功能还是具有一定的规范的。

sysvinit 的运行级是什么概念?

sysvinit(从现在开始我们称之为 init)以运行几的模式来工作,一般定义了七个运行级(从 0 到 6,实际上还可以有更多的运行级,参考 man 8 init 获得更多信息),每个运行级对应于一套设定好的任务,当启动某个运行级时,操作系统就需要执行相应的任务,下面是不同运行级的任务描述:

0,关闭计算机

1,启动到单用户模式

2,启动到无网络的多用户模式

3,启动到有网络的多用户模式

4,保留的启动级别,可用作自定义,默认同运行级 3

5,同运行级 4,一般用于图形界面(GUI)登录任务(如启动到 X 的 xdm、KDE 的 kdm)

6,重新启动计算机

启动时根据 /etc/inittab 中的设置来确定使用哪个级别的启动,该配置文件中有一行内容如下 id:3:initdefault: 这里的数字 3 就代表了默认使用运行级为 3 的启动任务。

系统运行时如何改变运行级?P233

系统运行时改变运行级的命令是

init <运行级别>

例如要重启计算机,用户可以直接运行 init 6 命令,reboot 命令其实知识这个命令的别名,同样 halt 命令是 init 0 的一个别名。

在 /etc/rc.d 目录下有一些类似于 rc?.d (这里 ? 是运行级的数字表示)及 rcsysinit.d 目录,目录中都包含了许多链接文件,以 K 和 S 字幕开头后跟数字和任务名称,他们的含义是: K 字母表示是停止一个服务, S 字母表示是启动一个服务,数字则确定脚本的执行顺序,从 00 到 99(数字越小执行的越早),当 init 转换到某个运行级时,响应的任务就会停止(K 开头),另一些服务就会启动(S 开头)

在 /etc/rc.d/rc?.d 以及 rcsysinit.d 目录中的都是链接文件,真正的脚本文件存放在 /etc/rc.d/init.d 目录中,每个文件完成一组实际任务。

一般情况下,任务名称相同的停止脚本和启动脚本的链接都是指向 /etc/rc.d/init.d 目录中同一个脚本,启动控制程序会根据链接文件的名称使用不同参数调用脚本,参数包括 start、stop、restart、reload 和 status 等,以 K 开头的链接文件,使用 stop 参数调用运行,以 S 开头的链接文件,调用 start 参数调用运行。

例外的是 rc0.d 和 rc6.d 目录中以 S 开头的链接文件使用 stop 参数调用,用来停止某些服务,这背后的逻辑是:重启或者关闭系统时,不会是启动服务,只会停止。

以下是脚本参数的描述:

start,启动服务

stop,停止服务

restart,停止服务,然后再启动

reload,该服务的配置已经更新,在修改了某服务的配置文件后,不想重启服务的死后可以使用该参数

status,显示服务的状态,如果服务正在运行,会显示该服务进程的 PID 编号

GRUB 软件包的作用是什么?

这个软件包是一个可以在 x86 平台上用于启动常见操作系统的启动器。

Linux 内核软件包的作用是什么?

这个软件包中包含了饿一个类 UNIX 操作系统内核的实现——Linux

为什么不实用 make install 命令来安装内核?

因为会导致如 /usr/include 目录中的头文件丢失的问题。

《手把手教你构建自己的 Linux 系统》学习笔记(9)的更多相关文章

  1. 《手把手教你构建自己的 Linux 系统》学习笔记(10)

    目录 /etc/fstab 文件的作用是什么? Linux 内核的图形化启动是怎么回事? Linux 系统中的文件名是否以大小写来进行区别? 「GRUB 中无法找到硬盘」怎么解决? 「GRUB 及配置 ...

  2. 《手把手教你构建自己的 Linux 系统》学习笔记(8)

    目录 Binutils 软件包有什么用? make -k 的作用是什么? man-pages 里有几种文档?分别表示什么意思? 如何查询指定目录的 man-pages ? 如何使用 make 命令的同 ...

  3. 《手把手教你构建自己的 Linux 系统》学习笔记(6)

    目录 /dev 目录是干什么的? /proc 和 /sys 目录是干什么的? udev 这个软件是干什么用的? 目录映射是临时性的,还是永久性的? 命令行里大括号 "{}" 的作用 ...

  4. 《手把手教你构建自己的 Linux 系统》学习笔记(5)

    交叉编译是什么? 交叉编译就是在一个系统上,编译生成另外一个系统运行的程序文件. 「硬件体系结构」和「操作系统」的关系是什么? 硬件体系结构也可以称为架构,主要是通过 CPU 的指令集来进行区分的,操 ...

  5. 《手把手教你构建自己的 Linux 系统》学习笔记(2)

    Linux 系统定制原理 虚拟根目录 我们的目标是为了完成目标系统(也就是我们要做的系统),他是一个可以独立运行的系统,不依赖雨主系统和临时系统,根据 Linux 系统的特点它需要存放在根目录下面,但 ...

  6. 《手把手教你构建自己的 Linux 系统》学习笔记(1)

    第二章.基础准备--Linux 系统定制原理 Linux 系统的组成及架构 共享库和静态库 在 Linux 系统中,函数库包含两种形式:共享库和静态库. 共享库 共享库在程序运行时,为其提供所需要的函 ...

  7. 《手把手教你构建自己的 Linux 系统》学习笔记(7)

    目录 tee 命令的缺陷是什么?如何解决这个缺陷? /etc/ld.so.conf 文件的作用是什么? 动态链接和静态链接有什么不同? 动态编译 静态编译 共享库为什么会有版本?共享库的版本升级原理是 ...

  8. 《手把手教你构建自己的 Linux 系统》学习笔记(4)

    汇编链接器(Binutils) 这是一个软件包,这个软件包其实是一个工具集,里面含有了大量的用于汇编程序活着读取二进制文件相关的程序. CC 它是一条命令的别名,这条命令的作用是使用 GCC 的 C ...

  9. 《手把手教你构建自己的 Linux 系统》学习笔记(3)

    需要注意的是,制作操作系统权限全程都要用 root pushd 和 popd 为了方便目录管理,所以出现了这种两个命令,他们的原理就是利用堆栈来实现目录管理. 这两个命令,pushd 负责将指定的目录 ...

随机推荐

  1. AI初探

    看东西应该记笔记,不然如过眼云烟,如只逛商场,不买东西,不留下带走什么,就是浪费时间,没有收获,仅此开始,定期梳理看过的东西. 人工智能的目的是什么呢? 答:让机器表现得更像人类,甚至在某些技能上超越 ...

  2. Linux环境下的network IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  3. CSRF攻击原理

    CSRF CSRF(Cross-site request forgery)跨站请求伪造,CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式.相比于XSS,CSRF是利用了系统 ...

  4. Docker扩展内容之容器环境变量

    介绍 docker容器设置环境变量除了可以在容器层面的变量文件中加载也可以在容器运行之初进行预加载环境变量,下面介绍在Dockerfile中编写环境变量的方式 ENV TZ=Asia/Shanghai ...

  5. Shell重定向与exec

    前言 首先我们需要知道exec是什么,exec是linux下面一个创建进程的方法,详情请参考:https://www.cnblogs.com/guge-94/p/11016176.html 重定向 概 ...

  6. windows配置Lua开发环境

    官网上下载的不靠谱,很多库不能用,你如 require "socket" 如果没有vc那些编译也麻烦,摸索了很久,直接下载安装文件安装即可: 安装这两个就行: 先安装C++2005 ...

  7. Mavn 项目 引入第三方jar包 导致ClassNotFoundException

    案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...

  8. 线程池之 Executors

    线程池之 Executors + 面试题 线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors,上一节学习了 ThreadPoolExecutor 的使用方式,本节重 ...

  9. ubuntu-14.04.6配置IP

    配置环境与要求: 网卡列表如下: eth0:DHCP模式 eth1:静态模式 网络概况与要求: 192.168.2.0/24为外网(获取网络资源) 10.5.1.0/24为内网(终端服务管理) 系统默 ...

  10. 《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

    一.概述 程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个有设计点问题,因为.NET Core 非Web怎么处理?),然后交由IWebHostEnvir ...