基础
电脑的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、存储单元五大
部分。其中CPU占有控制、算术逻辑单元,存储单元又包含内存与辅助内存;
计量单位
进位制 | Kilo | Mega | Giga | Tera | Peta | Exa | Zetta |
二进制 | 1024 | 1024K | 1024M | 1024G | 1024T | 1024P | 1024E |
十进制 | 1000 | 1000K | 1000M | 1000G | 1000T | 1000P | 1000E |
系统调用(System Call)
- 操作系统的核心层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的 硬件架构下运行。举例来说,个人电脑版的Windows8.1 不能直接在 ARM 架构 (手机 与平板硬件) 的电脑下运行。
- 操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统文件。如果没有其他的应用程序辅助,操作系统只能让电脑主机准备妥当(Ready)而已!并无 法运行其他功能。所以你现在知道为何Windows上面要达成网页影像的运行还需要类似 PhotoImpact或Photoshop之类的软件安装了吧?
- 应用程序的开发都是参考操作系统提供的开发接口, 所以该应用程序只能在该操作系统 上面运行而已,不可以在其他操作系统上面运行的。
现在您知道为何去购买线上游戏的 光盘时,光盘上面会明明白白的写着该软件适合用于哪一种操作系统上了吧? 也该知道某些游戏为何不能够在Linux上面安装了吧? - 核心功能
既然核心主要是在负责整个电脑系统相关的资源分配与管理,那我们知道其实整部电脑系统
最重要的就是CPU与内存, 因此,核心至少也要有这些功能的:
- 系统调用接口(System call interface) 刚刚谈过了,这是为了方便程序开发者可以轻易的通过与核心的沟通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便 程序开发者。
- 程序管理(Process control) 总有听过所谓的“多任务环境”吧?一部电脑可能同时间有很 多的工作跑到CPU等待运算处理,核心这个时候必须要能够控制这些工作,让CPU的资 源作有效的分配才行!另外, 良好的CPU调度机制(就是CPU先运行那个工作的排列顺序)将会有效的加快整体系统性能呢!
- 内存管理(Memory management) 控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序码与数据都必须要先存放在内存当中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存交换(swap)的功能哩。
- 文件系统管理(Filesystem management) 文件系统的管理,例如数据的输入输出(I/O)等等的工作啦!还有不同文件格式的支持啦等等, 如果你的核心不认识某个文件系统,那么您将无法使用该文件格式的文件啰!例如:Windows 98就不认识NTFS文件 格式的硬盘;
- 设备的驱动(Device drivers) 就如同上面提到的,硬件的管理是核心的主要工作之一,当然啰,设备的驱动程序就是核心需要做的事情啦! 好在目前都有所谓的“可载入模块”功能,可以将驱动程序编辑成模块,就不需要重新的编译核心啦!
GNU计划与FSF基金会的成立
- 1984年由Richard Stallman提倡GNU(GNU's Not Unix)计划,
这个计划的目的是:创建一个自由、开放的Unix操作系统(Free Unix)。 - 成立自由软件基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软件。
- 为了避免GNU所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的**通用公共许可证(General Public
License, GPL)**, 并且称呼他为copyleft(相对于专利软件的copyright!)。 - 1991年由芬兰人Linus Torvalds开发出Linux操作系统。简而言之,Linux成功的地方主要 在于:
Minix(Unix), GNU, Internet, POSIX 及虚拟团队的产生。 -
GNU所开发的几个重要软件,如:
- Emacs
- GNU C (GCC)
- GNU C Library (glibc)
- Bash shell
- Linux本身就是个最阳春的操作系统,其开发网站设立在http://www.kernel.org,我们亦称Linux操作系统最底层的数据为“核心(Kernel)”。
- 从 Linux kernel 3.0 开始,已经舍弃奇数、偶数的核心版本规划,新的规划使用主线版本 (MainLine) 为依据,并提供长期支持版本 (longterm) 来加强某些功能的持续维 护。
- Linux distributions的组成含有:“Linux Kernel + Free Software + Documentations(Tools) + 可完整安装的程序”所制成的一套完整的系统。
- 相同:(1)同样使用 http://www.kernel.org 所释出的核心; (2)支持同样的标准,如 FHS(File system Hierarchy Standard)、LSB(Linux Standard Base) 等; (3)使用几乎相同的自由软件 (例如 GNU 里面的 gcc/glibc/vi/apache/bind/sendmail... );(4)几乎相同的操作接口 (例如均使用 bash/KDE/GNOME 等等)。 不同:使用的 kernel 与各软件的版本可能会不同;各开发商加入的应用工具不同,使用的套件管理模 式不同(dpkg 与 RPM)
其实鸟哥买科技类书籍比较喜欢买基础书耶,因为基础学好了,其他的部份大概找个
keyword ,再 google 一下,一大堆数据就可以让你去分析判断了! 你会说,既然如此,那基
础书籍内的项目不是 google 也是一大堆?不要忘记了,“最开始你是要用什么关键字去
google 啊?”! 所以,阅读基础书籍的重点,就是让自己能够掌握住那些“ keyword ”啰!加
油!
鸟哥上课时,常常有学生问到:“老师,到底要听过你的课几次之后,才能学的会?”鸟
哥的标准答案是:“你永远学不会!” 因为你是用“听”的,没有动手做,那么永远不会知道“经
验”两个字怎么写!很多时候计算机/网络都会有一些莫名其妙的突发状况, 没有实际碰触过,
怎么可能会理解呢?所以“永远是不可能听会的!”为啥要实验?因为实验过后你才会有经验来
记下来? 否则实验结果课本都有啊!不是背一背就好了,干麻实验呢?浪费钱吗? ^_^
以下列出一些有用的FAQ与How-To网站给您参考一下:
- Linux自己的文件数据:
/usr/share/doc
(在你的Linux系统中) - CLDP 中文文件计划 http://www.linux.org.tw/CLDP/
- The Linux Documentation Project:http://www.tldp.org/
上面比较有趣的是那个TLDP(The Linux Documentation Project), 他几乎列出了所有
Linux上面可以看到的文献数据,各种How-To的作法等等,虽然是英文的,不过,很有参考价
值!
硬件/磁盘
基础
这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。 由于磁盘里面可能会有多个盘片,因此在所有盘片上面的同一个磁道可以组合成所谓的柱面 (cylinder)。其中扇区的物理量设计有两种大小,分别是 512Bytes
与 4KBytes
。
通常数据的读写会由外圈开始往内写的
那么是否每个扇区都一样重要呢?其实整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息! 早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master BootRecord) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分区格式与限制不太相同啦!
MSDOS(MBR) 与 GPT 磁盘分区表(partition table)
在前一小节的图示中, 我们有看到“开始与结束磁道”吧?而通常磁盘可能有多个盘片,所有盘片的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区的最小单位啦!为什么说“通常”呢?因为近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector) 号码来作为分区单位哩!厉害了! 所以说,我们就是利用参考对照柱面或扇区号码的方式来处理啦!
MSDOS (MBR) 分区表格式与限制
早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 (旧的磁盘扇区都是 512Bytes 喔!),所以说,第一个扇区 512Bytes 会有这两个数据:
- 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有
446 Bytes
-
分区表(partition table):记录整颗硬盘分区的状态,有
64 Bytes
由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。 若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:
- P1:/dev/sda1
- P2:/dev/sda2
- P3:/dev/sda3
- P4:/dev/sda4
由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。 根据上面的图示与说明,我们可以得到几个重点信息:
- 主要分区与延伸分区最多可以有四笔(硬盘的限制)
- 延伸分区最多只能有一个(操作系统的限制)
- 逻辑分区是由延伸分区持续切割出来的分区;
- 能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
- 逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的 分区限制;
- P1:/dev/sda1
- P2:/dev/sda2
- L1:/dev/sda5
- L2:/dev/sda6
- L3:/dev/sda7
- L4:/dev/sda8
- L5:/dev/sda9
前面四个号码都是保留给Primary或Extended用的嘛! 所以逻辑分区的设备名称号码就由5号开始了
实际上延伸分区并不是只占一个区块,而是会分佈在每个分区的最前面几个扇区来记载分区信息的!
GUID partition table, GPT 磁盘分区表
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical BlockAddress, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。
与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!
详细的结构有点像下面的模样:
- LBA0 (MBR 相容區塊)
與 MBR 模式相似的,這個相容區塊也分為兩個部份,一個就是跟之前 446 bytes 相似的區塊,儲存了第一階段的開機管理程式! 而在原本的分割表的紀錄區內,這個相容模式僅放入一個特殊標誌的分割,用來表示此磁碟為 GPT 格式之意。而不懂 GPT 分割表的磁碟管理程式, 就不會認識這顆磁碟,除非用戶有特別要求要處理這顆磁碟,否則該管理軟體不能修改此分割資訊,進一步保護了此磁碟喔!
- LBA1 (GPT 表頭紀錄)
這個部份紀錄了分割表本身的位置與大小,同時紀錄了備份用的 GPT 分割 (就是前面談到的在最後 34 個 LBA 區塊) 放置的位置, 同時放置了分割表的檢驗機制碼 (CRC32),作業系統可以根據這個檢驗碼來判斷 GPT 是否正確。若有錯誤,還可以透過這個紀錄區來取得備份的 GPT(磁碟最後的那個備份區塊) 來恢復 GPT 的正常運作!
- LBA2-33 (實際紀錄分割資訊處)
從 LBA2 區塊開始,每個 LBA 都可以紀錄 4 筆分割紀錄,所以在預設的情況下,總共可以有 4*32 = 128 筆分割紀錄喔!因為每個 LBA 有 512bytes,因此每筆紀錄用到 128 bytes 的空間,除了每筆紀錄所需要的識別碼與相關的紀錄之外,GPT 在每筆紀錄中分別提供了 64bits 來記載開始/結束的磁區號碼,因此,GPT 分割表對於單一分割槽來說, 他的最大容量限制就會在『 2^64 * 512bytes = 2^63 * 1Kbytes = 2^33*TB = 8 ZB 』,要注意 1ZB = 2^30TB 啦! 你說有沒有夠大了?
現在 GPT 分割預設可以提供多達 128 筆紀錄,而在 Linux 本身的核心裝置紀錄中,針對單一磁碟來說,雖然過去最多只能到達 15 個分割槽,不過由於 Linux kernel 透過 udev 等方式的處理,現在 Linux 也已經沒有這個限制在了! 此外,GPT 分割已經沒有所謂的主、延伸、邏輯分割的概念,既然每筆紀錄都可以獨立存在, 當然每個都可以視為是主分割!每一個分割都可以拿來格式化使用喔!
GPT 分区已经没有延伸与逻辑分区的概念,你可以想像成所有的分区都是主分区!
- 每个分区都拥有自己的开机扇区(boot sector)
- 图中的系统盘为第一及第二分区,
- 实际可开机的核心文件是放置到各分区内的!
- loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
- 开机的流程由:BIOS-->MBR-->-->boot loader-->核心文件;
- boot loader的功能主要有:提供菜单、载入核心、转交控制权给其他loader
- boot loader可以安装的地点有两个,分别是 MBR 与 boot sector
- Linux操作系统的文件使用目录树系统,与磁盘的对应需要有“挂载”的动作才行;
- 新手的简单分区,建议只要有/及swap两个分区即可
分区格式
“设备类型”其实共有 3 种,我们的练习机实际使用标准分区与 LVM 而已。那三种设备类型的意义分别如下:
-
标准分区区
:就是我们一直谈的分区啊!类似 /dev/vda1 之类的分区就是了。 -
LVM
:这是一种可以弹性增加/削减文件系统容量的设备设置,我们会在后面的章节持续 介绍 LVM 这个有趣的东西! -
LVM 紧张供应
:这个名词翻译的超奇怪的!其实这个是 LVM 的进阶版!与传统 LVM 直 接分配固定的容量不同, 这个“ LVM紧张供应”的项目,可以让你在使用多少容量才分配 磁盘多少容量给你,所以如果 LVM 设备内的数据量较少,那么你的磁盘其实还可以作更多的数据储存! 而不会被平白无故的占用!这部份我们也在后续谈到 LVM 的时候再来强调!
另外,图中的文件系统就是实际“格式化”的时候,我们可以格式化成什么文件系统的意思。下面分别谈谈各个文件系统项目 (详细的项目会在后续章节说明)
-
ext2/ext3/ext4
:Linux早期适用的文件系统类型。由于ext3/ext4文件系统多了日志的记录,对于系统的复原比较快速。不过由于磁盘容量越来越大,ext 家族似乎有点挡不住了 ~所以除非你有特殊的设置需求,否则近来比较少使用 ext4 项目了! -
swap
:就是磁盘仿真成为内存,由于swap并不会使用到目录树的挂载,所以用swap就不需要指定挂载点喔。 -
BIOS Boot
:就是 GPT 分区表可能会使用到的项目,若你使用 MBR 分区,那就不需要 这个项目了! -
xfs
:这个是目前 CentOS 默认的文件系统,最早是由大型服务器所开发出来的! 他对于大容量的磁盘管理非常好,而且格式化的时候速度相当快,很适合当今动不动就是好几 个 TB 的磁盘的环境喔!因此我们主要用这玩意儿! -
vfat
:同时被Linux与Windows所支持的文件系统类型。如果你的主机硬盘内同时存在Windows与Linux操作系统,为了数据的交换, 确实可以创建一个vfat的文件系统喔!
各硬件设备在Linux中的文件名
选择好你所需要的硬件配备后,接下来得要了解一下各硬件在Linux当中所扮演的角色啰。 这里鸟哥再次的强调一下:“在Linux系统中,每个设备都被当成一个文件来对待” 举例来说,SATA接口的硬盘的文件名称即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个文件的意思。
Tips 这种中括号 [ ] 型式的表达式在后面的章节当中会使用得很频繁,请特别留意另外先提出来强调一下,在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内, 所以你会看到/dev/sda, /dev/sr0等等的文件名喔。
那么打印机与软盘呢?分别是/dev/lp0, /dev/fd0啰!好了,其他的周边设备呢? 下面列出几个常见的设备与其在Linux当中的文件名啰:
设备 | 设备在Linux内的文件名 |
SCSI/SATA/USB硬盘机 | /dev/sd[a-p] |
USB闪存盘 | /dev/sd[a-p] (与SATA相同) |
VirtI/O界面 | /dev/vd[a-p] (用于虚拟机内) |
软盘机 | /dev/fd[0-7] |
打印机 | /dev/lp[0-2] (25针打印机) /dev/usb/lp[0-15] (USB 接口) |
鼠标 | /dev/input/mouse[0-15] (通用) /dev/psaux (PS/2界面)/dev/mouse (当前鼠标) |
CDROM/DVDROM | /dev/scd[0-1] (通用) /dev/sr[0-1] (通用,CentOS 较常见)/dev/cdrom (当前 CDROM) |
磁带机 | /dev/ht0 (IDE 界面) /dev/st0 (SATA/SCSI界面) /dev/tape(当前磁带) |
IDE硬盘机 | /dev/hd[a-d] (旧式系统才有) |
时至今日,由于 IDE 界面的磁盘机几乎已经被淘汰,太少见了!因此现在连 IDE 界面的磁盘文件名也都被仿真成 /dev/sd[a-p] 了!此外, 如果你的机器使用的是跟网际网络供应商(ISP) 申请使用的云端机器,这时可能会得到的是虚拟机。为了加速,虚拟机内的磁盘是使用仿真器产生, 该仿真器产生的磁盘文件名为 /dev/vd[a-p] 系列的文件名喔!要注意!要注意!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。