1 主机规划与磁盘分区
新添购计算机硬件配备时,需要考虑的角度有“游戏机/工作机”、“性能/价格比”、“能/消耗瓦数”、“支持度”等;
旧的硬件配备可能由于保存的问题或者是电子零件老化的问题,导致计算机系统非常容易在运行过程中出现不明的死机情况
Red Hat的硬件支持:https://hardware.redhat.com/?pagename=hcl
在Linux系统中,每个设备都被当成一个文件来对待,每个设备都会有设备文件名。
磁盘设备文件名通常分为两种,实际SATA/USB设备文件名为/dev/sd[a-p],而虚拟机的设备可能为/dev/vd[a-p]
磁盘的第一个扇区主要记录了两个重要的信息,分别是: (1)主要开机记录区(MasterBoot Record, MBR):可以安装开机管理程序的地方,有446 Bytes (1)分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes;
磁盘的 MBR 分区方式中,主要与延伸分区最多可以有四个,逻辑分区的设备文件名号码,一定由5号开始;
如果磁盘容量大于 2TB 以上时,系统会自动使用 GPT 分区方式来处理磁盘分区。
GPT 分区已经没有延伸与逻辑分区的概念,你可以想像成所有的分区都是主分区!
某些操作系统要使用 GPT 分区时,必须要搭配 UEFI 的新型 BIOS 格式才可安装使用。
开机的流程由:BIOS–>MBR–>–>boot loader–>核心文件;
boot loader的功能主要有:提供菜单、载入核心、转交控制权给其他loader
boot loader可以安装的地点有两个,分别是 MBR 与 boot sector
Linux操作系统的文件使用目录树系统,与磁盘的对应需要有“挂载”的动作才行;
新手的简单分区,建议只要有/及swap两个分区即可
2 安装centos7.x
- 不论你要安装什么样的Linux操作系统角色,都应该要事先规划例如分区、开机管理程序等;
- 建议练习机安装时的磁盘分区能有/, /boot, /home, swap四个分区;
- 安装CentOS 7.x的模式至少有两种,分别是图形接口与命令行;
- CentOS 7 会主动依据你的磁盘容量判断要用 MBR 或 GPT 分区方式,你也可以强迫使用 GPT;
- 若安装笔记本电脑时失败,可尝试在开机时加入“linux nofb apm=off acpi=off”来关闭省电功能;
- 安装过程进入分区后,请以“自订的分区模式”来处理自己规划的分区方式;
- 在安装的过程中,可以创建逻辑卷轴管理员 (LVM);
- 一般要求swap应该要是1.5~2倍的实体内存量,但即使没有swap依旧能够安装与运行Linux操作系统;
- CentOS 7默认使用 xfs 作为文件系统
- 没有连上Internet时,可尝试关闭防火墙,但SELinux最好选择“强制”状态;
- 设置时不要选择启动kdump,因为那是给核心开发者查阅死机数据的;
- 可加入时间服务器来同步化时间,台湾可选择tock.stdtime.gov.tw这一部;
- 尽量使用一般用户来操作Linux,有必要再转身份成为root即可。
- 即使是练习机,在创建 root 密码时,建议依旧能够保持良好的密码规则,不要随便设置!
3 首次登录与线上求助
- 为了避免瞬间断电造成的Linux系统危害,建议做为服务器的Linux主机应该加上不断电系统来持续提供稳定的电力;
- 养成良好的操作习惯,尽量不要使用 root 直接登陆系统,应使用一般帐号登陆系统,有需要再转换身份
- 可以通过“活动总览”查看系统所有使用的软件及快速启用惯用软件
- 在X的环境下想要“强制”重新启动X的组合按键为:“[alt]+[ctrl]+[backspace]”;
- 默认情况下,Linux提供tty1~tty6的终端机界面;
- 在终端机环境中,可依据提示字符为$或#判断为一般帐号或root帐号;
- 取得终端机支持的语系数据可下达“echo $LANG”或“locale”指令;
- date可显示日期、cal可显示日历、bc可以做为计算机软件;
- 组合按键中,[tab]按键可做为(1)命令补齐或(2)文件名补齐或(3)参数选项补齐,
- [crtl]-[c]可以中断目前正在运行中的程序;
- Linux 系统上的英文大小写为不同的数据
- 线上说明系统有man及info两个常见的指令;
- man page说明后面的数字中,1代表一般帐号可用指令,8代表系统管理员常用指令,5代表系统配置文件格式;
- info page可将一份说明文档拆成多个节点(node)显示,并具有类似超链接的功能,增加易读性;
- 系统需正确的关机比较不容易损坏,可使用shutdown, poweroff等指令关机。
4 Linux 的文件权限与目录配置
● Linux的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;群组最有用的功能之一,就是当你在团队开发资源的时候,且每个帐号都可以有多个群组的支持;
● 利用ls -l显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有r,w,x三种;
● 如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”;
● 若需要root的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su的指令环境。
● 更改文件的群组支持可用chgrp,修改文件的拥有者可用chown,修改文件的权限可用chmod
● chmod修改权限的方法有两种,分别是符号法与数字法,数字法中r,w,x分数为4,2,1;
● 对文件来讲,权限的性能为:
○ r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
○ w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
○ x:该文件具有可以被系统执行的权限。
● 对目录来说,权限的性能为:
○ r (read contents in directory)
○ w (modify contents of directory)
○ x (access directory)
● 要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给;
● 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。
● Linux文件名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个中文字符;
● 根据FHS的官方文件指出, 他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下FHS订定出来的四种目录特色为:shareable, unshareable, static, variable等四类;
● FHS所定义的三层主目录为:/, /var, /usr三层而已;
● 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。
5 Linux 文件与目录管理
● 绝对路径:“一定由根目录 / 写起”;相对路径:“不由 / 写起,而是由相对当前目录写起”特殊目录有:., …, -, ~, ~account需要注意;
● 与目录相关的指令有:cd, mkdir, rmdir, pwd 等重要指令;
● rmdir 仅能删除空目录,要删除非空目录需使用“ rm -r ”指令;
● 使用者能使用的指令是依据 PATH 变量所规定的目录去搜寻的;
● ls 可以检视文件的属性,尤其 -d, -a, -l 等选项特别重要!
● 文件的复制、删除、移动可以分别使用:cp, rm , mv等指令来操作;
● 检查文件的内容(读档)可使用的指令包括有:cat, tac, nl, more, less, head, tail, od 等
● cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同;
● touch 的目的在修改文件的时间参数,但亦可用来创建空文件;一个文件记录的时间参数有三种,分别是 access time(atime), status time (ctime),modification time(mtime),ls 默认显示的是 mtime。
● 除了传统的rwx权限之外,在Ext2/Ext3/Ext4/xfs文件系统中,还可以使用chattr与lsattr设置及观察隐藏属性。 常见的包括只能新增数据的 +a 与完全不能更动文件的 +i 属性。
● 新建文件/目录时,新文件的默认权限使用 umask 来规范。默认目录完全权限为drwxrwxrwx, 文件则为-rw-rw-rw-。
● 文件具有SUID的特殊权限时,代表当使用者执行此一binary程序时,在执行过程中使用者会暂时具有程序拥有者的权限
● 目录具有SGID的特殊权限时,代表使用者在这个目录下面新建的文件之群组都会与该目录的群组名称相同。
● 目录具有SBIT的特殊权限时,代表在该目录下使用者创建的文件只有自己与root能够删除!
● 观察文件的类型可以使用 file 指令来观察;
● 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是通过 PATH 变量来搜寻文件名;
● 搜寻文件的完整文件名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统;
● 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的文件名。
6 磁盘与文件管理
● 一个可以被挂载的数据通常称为“文件系统, filesystem”而不是分区 (partition) 喔!
● 基本上 Linux 的传统文件系统为 Ext2 ,该文件系统内的信息主要有:
○ superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
○ inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block 号码;
○ block:实际记录文件的内容,若文件太大时,会占用多个 block 。
● Ext2 文件系统的数据存取为索引式文件系统(indexed allocation)
● 需要磁盘重组的原因就是文件写入的 block 太过于离散了,此时文件读取的性能将会变的很差所致。 这个时候可以通过磁盘重组将同一个文件所属的 blocks 汇整在一起。
● Ext2文件系统主要有:boot sector, superblock, inode bitmap, block bitmap, inode table,data block 等六大部分。
● data block 是用来放置文件内容数据地方,在 Ext2 文件系统中所支持的 block 大小有1K, 2K 及 4K 三种而已
● inode 记录文件的属性/权限等数据,其他重要项目为: 每个 inode 大小均为固定,有128/256Bytes 两种基本容量。每个文件都仅会占用一个 inode 而已; 因此文件系统能够创建的文件数量与 inode 的数量有关;
● 文件的 block 在记录文件的实际数据,目录的 block 则在记录该目录下面文件名与其inode 号码的对照表;
● 日志式文件系统 (journal) 会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间;
● Linux 文件系统为增加性能,会让内存作为大量的磁盘高速缓存;
● 实体链接只是多了一个文件名对该 inode 号码的链接而已;
● 符号链接就类似Windows的捷径功能。
● 磁盘的使用必需要经过:分区、格式化与挂载,分别惯用的指令为:gdisk, mkfs, mount三个指令
● 分区时,应使用 parted 检查分区表格式,再判断使用 fdisk/gdisk 来分区,或直接使用parted 分区
● 为了考虑性能,XFS 文件系统格式化时,可以考虑加上 agcount/su/sw/extsize 等参数较佳
● 如果磁盘已无未分区的容量,可以考虑使用大型文件取代磁盘设备的处理方式,通过 dd与格式化功能。
● 开机自动挂载可参考/etc/fstab之设置,设置完毕务必使用 mount -a 测试语法正确否;
7、文件与文件系统的压缩,打包与备份
● 压缩指令为通过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是“压缩比”
● 压缩的好处是可以减少磁盘容量的浪费,在 WWW 网站也可以利用文件压缩的技术来进行数据的传送,好让网站带宽的可利用率上升喔
● 压缩文件的扩展名大多是:“.gz, .bz2, .xz, .tar, .tar.gz, .tar.bz2, *.tar.xz”
● 常见的压缩指令有 gzip, bzip2, xz。压缩率最佳的是 xz,若可以不计时间成本,建议使用xz 进行压缩。
● tar 可以用来进行文件打包,并可支持 gzip, bzip2, xz 的压缩
○ 压 缩:tar -Jcv -f filename.tar.xz 要被压缩的文件或目录名称
○ 查 询:tar -Jtv -f filename.tar.xz
○ 解压缩:tar -Jxv -f filename.tar.xz -C 欲解压缩的目录
● xfsdump 指令可备份文件系统或单一目录
● xfsdump 的备份若针对文件系统时,可进行 0-9 的 level 差异备份!其中 level 0 为完整备份;
● xfsrestore 指令可还原被 xfsdump 创建的备份文件;
● 要创建光盘烧录数据时,可通过 mkisofs 指令来创建;
● 可通过 wodim 来写入 CD 或 DVD 烧录机
● dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据
● cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数据,方可进行备份动作。
8、vim 程序编辑器
● Linux 下面的配置文件多为文本文件,故使用 vim 即可进行设置编辑;
● vim 可视为程序编辑器,可用以编辑 shell script, 配置文件等,避免打错字;
● vi 为所有 unix like 的操作系统都会存在的编辑器,且执行速度快速;
● vi 有三种模式,一般指令模式可变换到编辑与命令行界面,但编辑模式与命令行界面不能互换;
● 常用的按键有i, [Esc], :wq 等;
● vi 的画面大略可分为两部份,(1)上半部的本文与(2)最后一行的状态+命令行界面;
● 数字是有意义的,用来说明重复进行几次动作的意思,如 5yy 为复制 5 列之意;
● 光标的移动中,大写的 G 经常使用,尤其是 1G, G 移动到文章的头/尾功能!
● vi 的取代功能也很棒! :n1,n2s/old/new/g 要特别注意学习起来;
● 小数点“ . ”为重复进行前一次动作,也是经常使用的按键功能!
● 进入编辑模式几乎只要记住: i, o, R 三个按钮即可!尤其是新增一列的 o 与取代的 R
● vim 会主动的创建 swap 暂存盘,所以不要随意断线!
● 如果在文章内有对齐的区块,可以使用 [ctrl]-v 进行复制/贴上/删除的行为
● 使用 :sp 功能可以分区窗口
● 若使用 vim 来撰写网页,若需要 CSS 元素数据,可通过 [crtl]+x, [crtl]+o 这两个连续组合按键来取得关键字
● vim 的环境设置可以写入在 ~/.vimrc 文件中;
● 可以使用 iconv 进行文件语系编码的转换
● 使用 dos2unix 及 unix2dos 可以变更文件每一列的行尾断行字符。
9、认识与学习BASH(管道命令)
● 由于核心在内存中是受保护的区块,因此我们必须要通过“ Shell ”将我们输入的指令与Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作
● 学习 shell 的原因主要有:命令行的 shell 在各大 distribution 都一样;远端管理时命令行
● 速度较快; shell 是管理 Linux 系统非常重要的一环,因为 Linux 内很多控制都是以 shell撰写的。
● 系统合法的 shell 均写在 /etc/shells 文件中;
● 使用者默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段;
● bash 的功能主要有:命令编修能力;命令与文件补全功能;命令别名设置功能;工作控 制、前景背景控制;程序化脚本;万用字符
● type 可以用来找到执行指令为何种类型,亦可用于与 which 相同的功能;
● 变量就是以一组文字或符号等,来取代一些设置或者是一串保留的数据
● 变量主要有环境变量与自订变量,或称为全域变量与区域变量
● 使用 env 与 export 可观察环境变量,其中 export 可以将自订变量转成环境变量;
● set 可以观察目前 bash 环境下的所有变量;
● $? 亦为变量,是前一个指令执行完毕后的回传值。在 Linux 回传值为 0 代表执行成功;
● locale 可用于观察语系数据;
● 可用 read 让使用者由键盘输入变量的值
● ulimit 可用以限制使用者使用系统的资源情况
● bash 的配置文件主要分为 login shell 与 non-login shell。login shell 主要读取 /etc/profile与 ~/.bash_profile, non-login shell 则仅读取 ~/.bashrc
● 在使用 vim 时,若不小心按了 [crtl]+s 则画面会被冻结。你可以使用 [ctrl]+q 来解除冻结
● 万用字符主要有: *, ?, [] 等等
● 数据流重导向通过 >, 2>, < 之类的符号将输出的信息转到其他文件或设备去;
● 连续命令的下达可通过 ; && || 等符号来处理
● 管线命令的重点是:“管线命令仅会处理 standard output,对于 standard error output 会予以忽略” “管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。”
● 本章介绍的管线命令主要有:cut, grep, sort, wc, uniq, tee, tr, col, join, paste, expand,split, xargs 等。
10 正则表达式与文件格式化处理
● 正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为;
● 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序;
● 只要工具程序支持正则表达式,那么该工具程序就可以用来作为正则表达式的字串处理之用;
● 正则表达式与万用字符是完全不一样的东西!万用字符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正则表达式则是一种字串处理的表示方式!
● 使用 grep 或其他工具进行正则表达式的字串比对时,因为编码的问题会有不同的状态,因此, 你最好将 LANG 等变量设置为 C 或者是 en 等英文语系!
● grep 与 egrep 在正则表达式里面是很常见的两支程序,其中, egrep 支持更严谨的正则表达式的语法;
● 由于编码系统的不同,不同的语系 (LANG) 会造成正则表达式撷取数据的差异。因此可利用特殊符号如 [:upper:] 来替代编码范围较佳;
● 由于严谨度的不同,正则表达式之上还有更严谨的延伸正则表达式;
● 基础正则表达式的特殊字符有: *, ., [], [-], , ^, $ 等!
● 常见的支持正则表达式的工具软件有: grep , sed, vim 等等
● printf 可以通过一些特殊符号来将数据进行格式化输出;
● awk 可以使用“字段”为依据,进行数据的重新整理与输出;
● 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本方面的新旧版本比对
● patch 指令可以将旧版数据更新到新版 (主要亦由 diff 创建 patch 的补丁来源文件)
11 学习Shell Scripts
● shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
● shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。
● 在 Shell script 的文件中,指令的执行是从上而下、从左而右的分析与执行;
● shell script 的执行,至少需要有 r 的权限,若需要直接指令下达,则需要拥有 r 与 x 的权限;
● 良好的程序撰写习惯中,第一行要宣告 shell (#!/bin/bash) ,第二行以后则宣告程序用途、版本、作者等
● 对谈式脚本可用 read 指令达成;
● 要创建每次执行脚本都有不同结果的数据,可使用 date 指令利用日期达成;
● script 的执行若以 source 来执行时,代表在父程序的 bash 内执行之意!
● 若需要进行判断式,可使用 test 或中括号 ( [] ) 来处理;
● 在 script 内,$0, $1, $2…, $@ 是有特殊意义的!
● 条件判断式可使用 if…then 来判断,若是固定变量内容的情况下,可使用 case $var in …esac 来处理
● 循环主要分为不定循环 (while, until) 以及固定循环 (for) ,配合 do, done 来达成所需任务!
● 我们可使用 sh -x script.sh 来进行程序的 debug
12.linux装好管理与ACL权限设置
● Linux 操作系统上面,关于帐号与群组,其实记录的是 UID/GID 的数字而已;
● 使用者的帐号/群组与 UID/GID 的对应,参考 /etc/passwd 及 /etc/group 两个文件
● /etc/passwd 文件结构以冒号隔开,共分为七个字段,分别是“帐号名称、密码、UID、GID、全名、主文件夹、shell”
● UID 只有 0 与非为 0 两种,非为 0 则为一般帐号。一般帐号又分为系统帐号 (1~999)及可登陆者帐号 (大于 1000)
● 帐号的密码已经移动到 /etc/shadow 文件中,该文件权限为仅有 root 可以更动。该文件分为九个字段,内容为“ 帐号名称、加密密码、密码更动日期、密码最小可变动日期、密码最大需变动日期、密码过期前警告日数、密码失效天数、 帐号失效日、保留未使用”
● 使用者可以支持多个群组,其中在新建文件时会影响新文件群组者,为有效群组。而写入 /etc/passwd 的第四个字段者, 称为初始群组。
● 与使用者创建、更改参数、删除有关的指令为:useradd, usermod, userdel等,密码创建则为 passwd;
● 与群组创建、修改、删除有关的指令为:groupadd, groupmod, groupdel 等;
● 群组的观察与有效群组的切换分别为:groups 及 newgrp 指令;
● useradd 指令作用参考的文件有: /etc/default/useradd, /etc/login.defs, /etc/skel/ 等等
● 观察使用者详细的密码参数,可以使用“ chage -l 帐号 ”来处理;
● 使用者自行修改参数的指令有: chsh, chfn 等,观察指令则有: id, finger 等
● ACL 的功能需要文件系统有支持,CentOS 7 默认的 XFS 确实有支持 ACL 功能!
● ACL 可进行单一个人或群组的权限管理,但 ACL 的启动需要有文件系统的支持;
● ACL 的设置可使用 setfacl ,查阅则使用 getfacl ;
● 身份切换可使用 su ,亦可使用 sudo ,但使用 sudo 者,必须先以 visudo 设置可使用的指令;
● PAM 模块可进行某些程序的验证程序!与 PAM 模块有关的配置文件位于 /etc/pam.d/ 及/etc/security/
● 系统上面帐号登陆情况的查询,可使用 w, who, last, lastlog 等;
● 线上与使用者交谈可使用 write, wall,离线状态下可使用 mail 传送邮件!
13.磁盘配额(Quota)与进阶文件统管理
● Quota 可公平的分配系统上面的磁盘容量给使用者;分配的资源可以是磁盘容量(block)或可创建文件数量(inode);
● Quota 的限制可以有 soft/hard/grace time 等重要项目;
● Quota 是针对整个 filesystem 进行限制,XFS 文件系统可以限制目录!
● Quota 的使用必须要核心与文件系统均支持。文件系统的参数必须含有 usrquota,grpquota, prjquota
● Quota 的 xfs_quota 实作的指令有 report, print, limit, timer… 等指令;
●
● 磁盘阵列 (RAID) 有硬件与软件之分,Linux 操作系统可支持软件磁盘阵列,通过mdadm 套件来达成;
● 磁盘阵列创建的考虑依据为“容量”、“性能”、“数据可靠性”等;
● 磁盘阵列所创建的等级常见有的 raid0, raid1, raid1+0, raid5 及 raid6
●
● 硬件磁盘阵列的设备文件名与 SCSI 相同,至于 software RAID 则为 /dev/md[0-9]
● 软件磁盘阵列的状态可借由 /proc/mdstat 文件来了解;
●
● LVM 强调的是“弹性的变化文件系统的容量”;
● 与 LVM 有关的元件有: PV/VG/PE/LV 等元件,可以被格式化者为 LV
● 新的 LVM 拥有 LVM thin volume 的功能,能够动态调整磁盘的使用率!
● LVM 拥有快照功能,快照可以记录 LV 的数据内容,并与原有的 LV 共享未更动的数据,备份与还原就变的很简单;
● XFS 通过 xfs_growfs 指令,可以弹性的调整文件系统的大小
14.例行性工作调度
● 系统可以通过 at 这个指令来调度单一工作的任务!“at TIME”为指令下达的方法,当 at进入调度后, 系统执行该调度工作时,会到下达时的目录进行任务;
● at 的执行必须要有 atd 服务的支持,且 /etc/at.deny 为控制是否能够执行的使用者帐号;
● 通过 atq, atrm 可以查询与删除 at 的工作调度;
● batch 与 at 相同,不过 batch 可在 CPU 工作负载小于 0.8 时才进行后续的工作调度;
● 系统的循环例行性工作调度使用 crond 这个服务,同时利用 crontab -e 及 /etc/crontab 进行调度的安排;
● crontab -e 设置项目分为六栏,“分、时、日、月、周、指令”为其设置依据;
● /etc/crontab 设置分为七栏,“分、时、日、月、周、执行者、指令”为其设置依据;
● anacron 配合 /etc/anacrontab 的设置,可以唤醒停机期间系统未进行的 crontab 任务!
15.程序管理与SELinux初探
● 程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘、光盘、软盘、磁带等),为实体文件的型态存在;
● 程序 (process):程序被触发后,执行者的权限与属性、程序的程序码与所需数据等都会被载入内存中, 操作系统并给予这个内存内的单元一个识别码 (PID),可以说,程序就是一个正在运行中的程序。
● 程序彼此之间是有相关性的,故有父程序与子程序之分。而 Linux 系统所有程序的父程序就是 init 这个 PID 为 1 号的程序。
● 在 Linux 的程序调用通常称为 fork-and-exec 的流程!程序都会借由父程序以复制(fork) 的方式产生一个一模一样的子程序, 然后被复制出来的子程序再以 exec 的方式来执行实际要进行的程序,最终就成为一个子程序的存在。
● 常驻在内存当中的程序通常都是负责一些系统所提供的功能以服务使用者各项任务,因此这些常驻程序就会被我们称为:服务 (daemon)。
● 在工作管理 (job control) 中,可以出现提示字符让你操作的环境就称为前景(foreground),至于其他工作就可以让你放入背景 (background) 去暂停或运行。
● 与 job control 有关的按键与关键字有: &, [ctrl]-z, jobs, fg, bg, kill %n 等;
● 程序管理的观察指令有: ps, top, pstree 等等;
● 程序之间是可以互相控制的,传递的讯息 (signal) 主要通过 kill 这个指令在处理;
● 程序是有优先顺序的,该项目为 Priority,但 PRI 是核心动态调整的,使用者只能使用nice 值去微调 PRInice 的给予可以有: nice, renice, top 等指令;
● vmstat 为相当好用的系统资源使用情况观察指令;
●
●
● SELinux 当初的设计是为了避免使用者资源的误用,而 SELinux 使用的是 MAC 委任式存取设置;
● SELinux 的运行中,重点在于主体程序 (Subject) 能否存取目标文件资源 (Object),这中间牵涉到政策 (Policy) 内的规则, 以及实际的安全性本文类别 (type);
● 安全性本文的一般设置为:“Identify:role:type”其中又以 type 最重要;
● SELinux 的模式有: enforcing, permissive, disabled 三种,而启动的政策 (Policy) 主要是 targeted
● SELinux 启动与关闭的配置文件在: /etc/selinux/config
● SELinux 的启动与观察: getenforce, sestatus 等指令
● 重设 SELinux 的安全性本文可使用 restorecon 与 chcon
● 在 SELinux 有启动时,必备的服务至少要启动 auditd 这个!
● 若要管理默认的 SELinux 布林值,可使用 getsebool, setsebool 来管理!
16、认识系统服务(重点)
● 早期的服务管理使用 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 的时间管理功能。
● 一些不需要的服务可以关闭喔!
17、认识与分析登录信息
● 登录文件可以记录一个事件的何时、何地、何人、何事等四大信息,故系统有问题时务必查询登录文件;
● 系统的登录文件默认都集中放置到 /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 默认提供的一个登录文件分析软件。
**
18、开机流程、模块管理与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 的个别菜单给予不同的密码。
19 基础系统设置与备份策略
● 网际网络 (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 等等。
20 软件安装:源代码与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 的编码可以判断下载的文件是否为原本厂商所释出的文件。
21 软件安装 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 服务器提供多个不同的软件库放置个别的软件,以提供用户端分别管理软件类别。