第十七章、认识系统服务 (daemons)

总结: 
1. 早期的服务管理使用 systemV 的机制,透过 /etc/init.d/*, service, chkconfig, setup 等指令来管理服务的启动
/关闭/预设启动;
 从 CentOS 7.x 开始,采用 systemd 的机制,此机制最大功能为平行处理,并采单一指令管理 (systemctl),
开机速度加快!
 systemd 将各服务定义为 unit,而 unit 又分类为 service, socket, target, path, timer 等不同的类别,方便管理
与维护
 启动/关闭/重新启动的方式为: systemctl [start|stop|restart] unit.service
 设定预设启动/预设不启动的方式为: systemctl [enable|disable] unit.service
 查询系统所有启动的服务用 systemctl list-units --type=service 而查询所有的服务 (含不启动) 使用
systemctl list-unit-files --type=service
 systemd 取消了以前的 runlevel 概念 (虽然还是有兼容的 target),转而使用不同的 target 操作环境。常见
操作环境为 multi-user.targer 与 graphical.target。 不重新启动而转不同的操作环境使用 systemctl isolate 
unit.target,而设定预设环境则使用 systemctl set-default unit.target
 systemctl 系统默认的配置文件主要放在 /usr/lib/systemd/system,管理员若要修改或自行设计时,则建议放
在 /etc/systemd/system/ 目录下。
 管理员应使用 man systemd.unit, man systemd.service, man systemd.timer 查询 /etc/systemd/system/ 底下配置
文件的语法, 并使用 systemctl daemon-reload 加载后,才能自行撰写服务与管理服务喔!
 除了 atd 与 crond 之外,可以 透过 systemd.timer 亦即 timers.target 的功能,来使用 systemd 的时间管
理功能。
 一些不需要的服务可以关闭喔!

第十八章、认识与分析登录档

总结: 
1. 登录文件可以记录一个事件的何时、何地、何人、何事等四大信息,故系统有问题时务必查询登录档;
 系统的登录文件默认都集中放置到 /var/log/ 目录内,其中又以 messages 记录的信息最多!
 登录文件记录的主要服务与程序为: systemd-journald.service, rsyslog.service, rsyslogd
 rsyslogd 的配置文件在 /etc/rsyslog.conf ,内容语法为:『 服务名称.等级 记载装置或文件』
 透过 linux 的 syslog 函数查询,了解上述服务名称有 kernel, user, mail...从 0 到 23 的服务序号
 承上,等级从不严重到严重依序有 info, notice, warning, error, critical, alert, emergency 等
 rsyslogd 本身有提供登录文件服务器的功能,透过修改 /etc/rsyslog.conf 内容即可达成;
 logrotate 程序利用 crontab 来进行登录文件的轮替功能;
 logrotate 的配置文件为 /etc/logrotate.conf ,而额外的设定则可写入 /etc/logrotate.d/* 内;
 新的 CentOS 7 由于内建 systemd-journald.service 的功能,可以使用 journalctl 直接从内存读出登录文件,
查询效能较佳
 logwatch 为 CentOS 7 预设提供的一个登录文件分析软件。

第十九章、开机流程、模块管理与 Loader

Linux 不可随意关机,否则容易造成文件系统错乱或者是其他无法开机的问题;
 开机流程主要是:BIOS、MBR、Loader、kernel+initramfs、systemd 等流程
 Loader 具有提供选单、加载核心文件、转交控制权给其他 loader 等功能。
 boot loader 可以安装在 MBR 或者是每个分区槽的 boot sector 区域中
 initramfs 可以提供核心在开机过程中所需要的最重要的模块,通常与磁盘及文件系统有关的模块;
 systemd 的配置文件为主要来自 /etc/systemd/system/default.target 项目;
 额外的装置与模块对应,可写入 /etc/modprobe.d/*.conf 中;
 核心模块的管理可使用 lsmod, modinfo, rmmod, insmod, modprobe 等指令;
 modprobe 主要参考 /lib/modules/$(uanem -r)/modules.dep 的设定来加载与卸除核心模块;
 grub2 的配置文件与相关文件系统定义档大多放置于 /boot/grub2 目录中,配置文件名为 grub.cfg
 grub2 对磁盘的代号设定与 Linux 不同,主要透过侦测的顺序来给予设定。如 (hd0) 及 (hd0,1) 等。
 grub.cfg 内每个选单与 menuentry 有关,而直接指定核心开机时,至少需要 linux16 及 initrd16 两个项目
 grub.cfg 内设定 loader 控制权移交时,最重要者为 chainloader +1 这个项目。
 若想要重建 initramfs ,可使用 dracut 或 mkinitrd 处理
 重新安装 grub2 到 MBR 或 boot sector 时,可以利用 grub2-install 来处理。
 若想要进入救援模式,可于开机选单过程中,在 linux16 的项目后面加入『 rd.break 』或『 init=/bin/bash 』
等方式来进入救援模式。
 我们可以对 grub2 的个别选单给予不同的密码。

第二十章、基础系统设定与备份策略

因特网 (Internet) 就是 TCP/IP ,而 IP 的取得需与 ISP 要求。一般常见的取得 IP 的方法有:(1)手动直
接设定 (2)自动取得 (dhcp) (3)拨接取得 (4)cable 宽带 等方式。
 主机的网络设定要成功,必须要有底下的数据:(1)IP (2)Netmask (3)gateway (4)DNS 服务器 等项目;
 本章新增硬件信息的收集指令有: lspci, lsusb, iostat 等;
 备份是系统损毁时等待救援的救星,但造成系统损毁的因素可能有硬件与软件等原因。
 由于主机的任务不同,备份的数据与频率等考虑参数也不相同。
 常见的备份考虑因素有:关键文件、储存媒体、备份方式(完整/关键)、备份频率、使用的备份工具等。
 常见的关键数据有:/etc, /home, /var/spool/mail, /boot, /root 等等
 储存媒体的选择方式,需要考虑的地方有:备份速度、媒体的容量、经费与媒体的可靠性等。
 与完整备份有关的备份策略主要有:累积备份与差异备份。
 累积备份可具有较小的储存数据量、备份速度快速等。但是在还原方面则比差异备份的还原慢。
 完整备份的策略中,常用的工具有 dd, cpio, tar, xfsdump 等等。

第二十一章、软件安装:原始码与 Tarball

原始码其实大多是纯文本档,需要透过编译程序的编译动作后,才能够制作出 Linux 系统能够认识的可执
行的 binary file ;
 开放原始码可以加速软件的更新速度,让软件效能更快、漏洞修补更实时;
 在 Linux 系统当中,最标准的 C 语言编译程序为 gcc ;
 在编译的过程当中,可以藉由其他软件提供的函式库来使用该软件的相关机制与功能;
 为了简化编译过程当中的复杂的指令输入,可以藉由 make 与 makefile 规则定义,来简化程序的更新、编
译与连结等动作;
 Tarball 为使用 tar 与 gzip/bzip2/xz 压缩功能所打包与压缩的,具有原始码的文件;
 一般而言,要使用 Tarball 管理 Linux 系统上的软件,最好需要 gcc, make, autoconfig, kernel source, kernel 
header 等前驱软件才行,所以在安装 Linux 之初,最好就能够选择 Software development 以及 kernel 
development 之类的群组;
 函式库有动态函式库与静态函式库,动态函式库在升级上具有较佳的优势。动态函式库的扩展名为 *.so 而
静态则是 *.a ;
 patch 的主要功能在更新原始码,所以更新原始码之后,还需要进行重新编译的动作才行;
 可以利用 ldconfig 与 /etc/ld.so.conf /etc/ld.so.conf.d/*.conf 来制作动态函式库的链接与快取!
 透过 MD5/SHA1/SHA256 的编码可以判断下载的文件是否为原本厂商所释出的文件。

第二十二章、软件安装 RPM, SRPM 与 YUM

为了避免使用者自行编译的困扰,开发商自行在特定的硬件与操作系统平台上面预先编译好软件, 并将软
件以特殊格式封包成文件,提供终端用户直接安装到固定的操作系统上,并提供简单的查询/安装/移除等流
程。 此称为软件管理员。常见的软件管理员有 RPM 与 DPKG 两大主流。
 RPM 的全名是 RedHat Package Manager,原本是由 Red Hat 公司所发展的,流传甚广;
 RPM 类型的软件中,所含有的软件是经过编译后的 binary program ,所以可以直接安装在用户端的系统上,
不过,也由于如此,所以 RPM 对于安装者的环境要求相当严格;
 RPM 除了将软件安装至用户的系统上之外,还会将该软件的版本、名称、文件与目录配置、系统需求等等
均记录于数据库 (/var/lib/rpm) 当中,方便未来的查询与升级、移除;
 RPM 可针对不同的硬件等级来加以编译,制作出来的文件可于扩展名 (i386, i586, i686, x86_64, noarch) 来
分辨;
 RPM 最大的问题为软件之间的相依性问题;
 SRPM 为 Source RPM ,内含的文件为 Source code 而非为 binary file ,所以安装 SRPM 时还需要经过
compile ,不过,SRPM 最大的优点就是可以让使用者自行修改设定参数 (makefile/configure 的参数) ,以
符合使用者自己的 Linux 环境;
 RPM 软件的属性相依问题,已经可以藉由 yum 或者是 APT 等方式加以克服。 CentOS 使用的就是 yum 
机制。
 yum 服务器提供多个不同的软件库放置个别的软件,以提供客户端分别管理软件类别。

第二十三章、X Window 设定介绍

Unix Like 操作系统上面的 GUI 使用的是最初由 MIT 所开发的 X window system,在 1987 释出 X11 版,
并于 1994 更改为 X11R6 ,故此 GUI 界面也被称为 X 或 X11
 X window system 的 X server 最初由 XFree86 计划所开发,后来则由 Xorg 基金会所持续开发;
 X window system 主要分为 X server 与 X client ,其中 X Server 在管理硬件,而 X Client 则是应用程序。
 在运作上,X Client 应用程序会将所想要呈现的画面告知 X Server ,最终由 X server 来将结果透过他所
管理的硬件绘制出来!
 每一支 X client 都不知道对方的存在,必须要透过特殊的 X client ,称为 Window Manager 的, 来管理
各窗口的重迭、移动、最小化等工作。
 若有需要登入图形接口,有时会有 Display Manager 来管理这方面的动作
 startx 可以侦测 X server / X client 的启动脚本,并呼叫 xinit 来分别执行;
 X 可以启动多个,各个 X 显示的位置使用 -display 来处理,显示位置为 :0, :1...
 Xorg 是一个 X server ,配置文件位于 /etc/X11/xorg.conf ,里面含有 Module, Files, Monitor, Device 等设
定阶段。目前较新的设定中, 会将额外的设定放置于 /etc/X11/xorg.conf.d/*.conf

第二十四章、Linux 核心编译与管理

其实核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块;
 上述的核心模块放置于:/lib/modules/$(uname -r)/kernel/
 『驱动程序开发』的工作上面来说,应该是属于硬件发展厂商的问题
 一般的用户,由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,
不太需要编译核心
 编译核心的一般目的:新功能的需求、原本的核心太过臃肿、与硬件搭配的稳定性、其他需求(如嵌入式系
统)
 编译核心前,最好先了解到您主机的硬件,以及主机的用途,才能选择好核心功能;
 编译前若想要保持核心原始码的干净,可使用 make mrproper 来清除暂存盘与配置文件;
 挑选核心功能与模块可用 make 配合:menuconfig, oldconfig, xconfig, gconfig 等等
 核心功能挑选完毕后,一般常见的编译过程为:make bzImage, make modules
 模块编译成功后的安装方式为: make modules_install
 核心的安装过程中,需要移动 bzImage 文件、建立 initramfs 文件、重建 grub.cfg 等动作;
 我们可以自行由硬件开发商之官网下载驱动程序来自行编译核心模块!