1、计算机概论

 

· 计算器的定义为:『接受用户输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息』;

· 计算机的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、记忆单元五大部分。其中 CPU占有控制、算术逻辑单元,记忆单元又包含主存储器与辅助内存;

· 数据会流进/流出内存是 CPU 所发布的控制命令,而 CPU 实际要处理的数据则完全来自于主存储器;

· CPU 依设计理念主要分为:精简指令集(RISC)与复杂指令集(CISC)系统;

· 关于 CPU 的频率部分:外频指的是 CPU 与外部组件进行数据传输时的速度,倍频则是 CPU 内部用来加速工作效能的一个倍数, 两者相乘才是 CPU 的频率速度;

· 新的 CPU 设计中,已经将北桥的内存控制芯片整合到 CPU 内,而 CPU 与主存储器、显示适配器沟通的总线通常称为系统总线。 南桥就是所谓的输入输出(I/O)总线,主要在联系硬盘、USB、网络卡等接口设备;

· CPU 每次能够处理的数据量称为字组大小(word size),字组大小依据 CPU 的设计而有 32 位与 64 位。 我们现在所称的计算机是 32 或 64 位主要是依据这个 CPU 解析的字组大小而来的!

· 个人计算机的主存储器主要组件为动态随机存取内存(Dynamic Random Access Memory, DRAM),至于 CPU内部的第二层快取则使用静态随机存取内存(Static Random Access Memory, SRAM);

· BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM);

· 目前主流的外接卡界面大多为 PCIe 界面,且最新为 PCIe 3.0,单信道速度高达 1GBytes/s

· 常见的显示适配器连接到屏幕的界面有 HDMI/DVI/D-Sub/Display port 等等。HDMI 可同时传送影像与声
音。

· 传统硬盘的组成为:圆形磁盘盘、机械手臂、 磁盘读取头与主轴马达所组成的,其中磁盘盘的组成为扇区、磁道与磁柱;

· 磁盘连接到主板的界面大多为 SATA 或 SAS,目前桌机主流为 SATA 3.0,理论极速可达 600Mbytes/s。

· 常见的文字编码为 ASCII,繁体中文编码主要有 Big5 及 UTF8 两种,目前主流为 UTF8

· 操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。

· 计算机主要以二进制作为单位,常用的磁盘容量单位为 bytes,其单位换算为 1 Byte = 8bits。

· 最阳春的操作系统仅在驱动与管理硬件,而要使用硬件时,就得需要透过应用软件或者是壳程序(shell)的功能, 来呼叫操作系统操纵硬件工作。目前称为操作系统的,除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。


2、Linux是什么与如何学习

 

· 操作系统(Operation System)主要在管理与驱动硬件,因此必须要能够管理内存、管理装置、 负责行程管理以及系统呼叫等等。因此,只要能够让硬件准备妥当(Ready)的情况, 就是一个阳春的操作系统了。

· Unix 的前身是由贝尔实验室(Bell lab.)的 Ken Thompson 利用汇编语言写成的, 后来在 1971-1973 年间由Dennis Ritchie 以 C 程序语言进行改写,才称为 Unix。

· 1977 年由 Bill Joy 释出 BSD (Berkeley Software Distribution),这些称为 Unix-like 的操作系统。

· 1984 年由 Andrew Tanenbaum 开始制作 Minix 操作系统,该系统可以提供原始码以及软件;

· 1984 年由 Richard Stallman 提倡 GNU 计划,倡导自由软件(Free software), 强调其软件可以『自由的取得、复制、修改与再发行』,并规范出 GPL 授权模式, 任何 GPL(General Public License)软件均不可单纯仅贩卖其软件,也不可修改软件授权。

· 1991 年由芬兰人 Linus Torvalds 开发出 Linux 操作系统。简而言之,Linux 成功的地方主要在于:Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。

· 符合 Open source 理念的授权相当多,比较知名的如 Apache / BSD / GPL / MIT 等。

· Linux 本身就是个最阳春的操作系统,其开发网站设立在 http://www.kernel.org,我们亦称 Linux 操作系统最底层的数据为『核心(Kernel)』。

· 从 Linux kernel 3.0 开始,已经舍弃奇数、偶数的核心版本规划,新的规划使用主线版本 (MainLine) 为依据, 并提供长期支持版本 (longterm) 来加强某些功能的持续维护。

· Linux distributions 的组成含有:『Linux Kernel + Free Software + Documentations(Tools) + 可完全安装的程序』所制成的一套完整的系统。

· 常见的 Linux distributions 分类有『商业、社群』分类法,或『RPM、DPKG』分类法

· 学习 Linux 最好从头由基础开始学习,找到一本适合自己的书籍,加强实作才能学会


3、主机规划与磁盘分区

 

· 新添购计算机硬件配备时,需要考虑的角度有『游戏机/工作机』、『效能/价格比』、『效能/消耗瓦数』、『支持度』等;

· 旧的硬件配备可能由于保存的问题或者是电子零件老化的问题,导致计算机系统非常容易在运作过程中出现不明的当机情况

· Red Hat 的硬件支持:https://hardware.redhat.com/?pagename=hcl

· 在 Linux 系统中,每个装置都被当成一个文件来对待,每个装置都会有装置文件名。

· 磁盘装置文件名通常分为两种,实际 SATA/USB 装置文件名为/dev/sd[a-p],而虚拟机的装置可能为/dev/vd[a-p]

· 磁盘的第一个扇区主要记录了两个重要的信息,分别是: (1)主要启动记录区(Master Boot 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 两个分区槽即可


4、安装centos 7.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,因为那是给核心开发者查阅当机数据的;

· 尽量使用一般用户来操作 Linux,有必要再转身份成为 root 即可。

· 即使是练习机,在建置 root 密码时,建议依旧能够保持良好的密码规则,不要随便设定!


5、首次登入与在线求助

 

· 为了避免瞬间断电造成的 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 等指令关机


6、Linux的文件权限与目录配置

 

· Linux 的每个文件中,可分别给予使用者、群组与其他人三种身份个别的 rwx 权限;

· 群组最有用的功能之一,就是当你在团队开发资源的时候,且每个账号都可以有多个群组的支持;

· 利用 ls -l 显示的文件属性中,第一个字段是文件的权限,共有十个位,第一个位是文件类型, 接下来三个为一组共三组,为使用者、群组、其他人的权限,权限有 r,w,x 三种;

· 如果档名之前多一个『 . 』,则代表这个文件为『隐藏档』;

· 若需要 root 的权限时,可以使用 su - 这个指令来切换身份。处理完毕则使用 exit 离开 su 的指令环境。

· 更改文件的群组支持可用 chgrp,修改文件的拥有者可用 chown,修改文件的权限可用 chmod

· chmod 修改权限的方法有两种,分别是符号法与数字法,数字法中 r,w,x 分数为 4,2,1;

· 对文件来讲,权限的效能为:
o r:可读取此一文件的实际内容,如读取文本文件的文字内容等;
o w:可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
o x:该文件具有可以被系统执行的权限。

· 对目录来说,权限的效能为:
o r (read contents in directory)
o w (modify contents of directory)
o x (access directory)

· 要开放目录给任何人浏览时,应该至少也要给予 r 及 x 的权限,但 w 权限不可随便给;

· 能否读取到某个文件内容,跟该文件所在的目录权限也有关系 (目录至少需要有 x 的权限)。

· Linux 档名的限制为:单一文件或目录的最大容许文件名为 255 个英文字符或 128 个汉字字符;

· 根据 FHS 的官方文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下

· FHS 订定出来的四种目录特色为:shareable, unshareable, static, variable 等四类;

· FHS 所定义的三层主目录为:/, /var, /usr 三层而已;

· 绝对路径文件名为从根目录 / 开始写起,否则都是相对路径的文件名。


7、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 可以加入许多选项来直接查询文件系统,以获得自己想要知道的档名。


8、Linux磁盘与文件系统管理

· 一个可以被挂载的数据通常称为『文件系统, filesystem』而不是分区槽 (partition) 喔!

· 基本上 Linux 的传统文件系统为 Ext2 ,该文件系统内的信息主要有:
o superblock:记录此 filesystem 的整体信息,包括 inode/block 的总量使用量、剩余量, 以及文件系统的格式与相关信息等;
o inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码;
o 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 测试语法正确否;


9、文件与文件系统的压缩、打包与备份

· 压缩指令为透过一些运算方法去将原本的文件进行压缩,以减少文件所占用的磁盘容量。 压缩前与压缩后的文件所占用的磁盘容量比值, 就可以被称为是『压缩比』

· 压缩的好处是可以减少磁盘容量的浪费,在 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 建置的备份档;

· 可透过 wodim 来写入 CD 或 DVD 刻录机

· dd 可备份完整的 partition 或 disk ,因为 dd 可读取磁盘的 sector 表面数据
· cpio 为相当优秀的备份指令,不过必须要搭配类似 find 指令来读入欲备份的文件名数据,方可进行备份动作。


10、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 可以变更文件每一列的行尾断行字符。


11、认识与学习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 等。


12、正规表示法与文件格式化处理

 

· 正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为;

· 正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字符串的处理程序;

· 只要工具程序支持正规表示法,那么该工具程序就可以用来作为正规表示法的字符串处理之用;

· 正规表示法与通配符是完全不一样的东西!通配符 (wildcard) 代表的是 bash 操作接口的一个功能, 但正规表示法则是一种字符串处理的表示方式!

· 使用 grep 或其他工具进行正规表示法的字符串比对时,因为编码的问题会有不同的状态,因此, 你最好将 LANG 等变量设定为 C 或者是 en 等英文语系!

· grep 与 egrep 在正规表示法里面是很常见的两支程序,其中, egrep 支持更严谨的正规表示法的语法;

· 由于编码系统的不同,不同的语系 (LANG) 会造成正规表示法撷取资料的差异。因此可利用特殊符号如[:upper:] 来替代编码范围较佳;

· 由于严谨度的不同,正规表示法之上还有更严谨的延伸正规表示法;

· 基础正规表示法的特殊字符有: *, ., [], [-], [^], ^, $ 等!

· 常见的支持正规表示法的工具软件有: grep , sed, vim 等等

· printf 可以透过一些特殊符号来将数据进行格式化输出;

· awk 可以使用『字段』为依据,进行数据的重新整理与输出;

· 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本文件方面的新旧版本比对

· patch 指令可以将旧版数据更新到新版 (主要亦由 diff 建立 patch 的补丁来源文件)


13、学习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


14、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 传送邮件!


15、磁盘配额(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 指令,可以弹性的调整文件系统的大小


16、例行性工作排程(crontab)

 

· 系统可以透过 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 任务!


17、进程管理与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 值去微调 PRI

· nice 的给予可以有: 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 来管理!


18、认识服务系统

 

· 早期的服务管理使用 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 的时间管理功能。
· 一些不需要的服务可以关闭喔!


19、认识与分析登录档

 

· 登录文件可以记录一个事件的何时、何地、何人、何事等四大信息,故系统有问题时务必查询登录档;

· 系统的登录文件默认都集中放置到 /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 预设提供的一个登录文件分析软件。


20、开机流程、模块管理与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

· 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 的个别选单给予不同的密码。


21、基础系统设定与备份策略

 

· 因特网 (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 等等。


22、软件安装:原始码与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 的编码可以判断下载的文件是否为原本厂商所释出的文件。


23、软件安装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 服务器提供多个不同的软件库放置个别的软件,以提供客户端分别管理软件类别。


24、X Windows设定介绍

 

· 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


25、Linux核心编译与管理

 

· 其实核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块;

· 上述的核心模块放置于:/lib/modules/$(uname -r)/kernel/

· 『驱动程序开发』的工作上面来说,应该是属于硬件发展厂商的问题

· 一般的用户,由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,不太需要编译核心

· 编译核心的一般目的:新功能的需求、原本的核心太过臃肿、与硬件搭配的稳定性、其他需求(如嵌入式系统)

· 编译核心前,最好先了解到您主机的硬件,以及主机的用途,才能选择好核心功能;

· 编译前若想要保持核心原始码的干净,可使用 make mrproper 来清除暂存盘与配置文件;

· 挑选核心功能与模块可用 make 配合:menuconfig, oldconfig, xconfig, gconfig 等等

· 核心功能挑选完毕后,一般常见的编译过程为:make bzImage, make modules

· 模块编译成功后的安装方式为: make modules_install

· 核心的安装过程中,需要移动 bzImage 文件、建立 initramfs 文件、重建 grub.cfg 等动作;
· 我们可以自行由硬件开发商之官网下载驱动程序来自行编译核心模块!
 

Logo

更多推荐