第0章 计算机概论
0.1 电脑:辅助人脑的好工具
0.1.1 电脑硬体的五大单元
所有data都要经过Memory,所以Memory的大小会对整体速度影响很大。
0.1.2 一切设计的起点: CPU 的架构
CPU 其实内部已经含有一些微指令,我们所使用的software都要经过CPU 内部的微指令集来达成。
指令集的设计主要又被分为两种设计理念:
- 精简指令集(Reduced Instruction Set Computer, RISC):
每个指令的执行时间都很短,完成的动作也很单纯
常见的RISC 微指令集CPU: Oracle的SPARC 系列(学术+金融领域), IBM 公司的Power Architecture 和 PowerPC 系列(Sony)、与ARM的ARM CPU 系列(手机、路由器) - 复杂指令集(Complex Instruction Set Computer, CISC):
x86架构的CPU(用于Personal Computer)
word size(32位,64位):CPU一次资料读取的最多Bit数。CPU读取量 --> memory读取量 ==> 32位CPU --> memory 最大读取量4GB
0.2 个人电脑架构与相关设备元件
0.2.1 执行脑袋运算与判断的CPU
Intel主板架构:
SouthBridge(南桥) 被设计用来处理低速信号。NorthBridge(北桥)用来处理高速信号(CPU <--> Main memory)现在已经被整合到CPU内
Hyper-Threading, HT : CPU内把regiter 分成两部分,像是两个线程。
0.2.2 Memory
0.2.3 显卡
0.2.4 disk与储存设备
转圈的方式读写
组成:圆形磁碟盘、机械手臂、 磁碟读取头与主轴马达
传输接口: SATA接口,USB接口
0.3 data表示方式
0.4 软件运行
0.4.2 OS
- Kernel: OS其实也是一组程序,这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。
OS的功能就是让CPU可以开始判断逻辑与运算数值、让main memory可以开始载入/读出data/functions、让disk可以开始被存取、让网卡可以开始传输data、让所有周边可以开始运转等等。 <=== Kernel
Kernel functions所放置到记忆体当中的区块是受保护的!并且开机后就一直常驻在memory当中。
主要用于管理硬件,提供合理的电脑系统资源分配。
Kernel是处于硬件和system call 之间的位置。
至少包括以下功能:
System call interface
Process control:安排多个process的执行先后顺序
Memory management
Filesystem management
第1章 Linux是什么与如何学习
POSIX: (Portable Operating System Interface)重点在规范kernel与application之间的interface
uname -r 查阅kernel版本
Kernel + Softwares + Tools +可完整安装程序 = Linux distribution
distributions主要分为两大系统:
- 一种是使用RPM方式安装软体的系统,包括Red Hat, Fedora, SuSE等都是这类
- 一种则是使用Debian的dpkg方式安装软件的系统,包括Debian, Ubuntu, B2D等等
第2章 主机规划与disk分割
2.1 Linux与硬件的搭配
2.1.3 各硬件装置在Linux中的文件夹名称
在Linux系统中,每个 装置 都被当成一个 文件夹 来对待, 几乎所有的硬件装置文件夹都在/dev这个目录内
2.2 disk分割
2.2.2 MBR 与partition table
主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 bytes
分割表(partition table):记录整个disk分割的状态,有64 bytes
2.2.3 开机流程中的BIOS 与UEFI 开机检测程序
- (早期)BIOS 搭配MBR/GPT 的开机流程
CMOS是记录各项硬件参数且嵌入在主机板上面的储存器。
(1) BIOS:开机主动执行的firmware,会认识第一个可开机的装置;写入到硬件上的一个软件程序,在开机的时候,电脑系统会主动执行的第一个程序。
(2) MBR:第一个可开机装置的第一个磁区内的主要开机记录区块,内含开机管理程序;
(3) 开机管理程序(boot loader):一支可读取kernel file来执行的软体;写在MBR(446bytes)上;也可以安装在每个partition 的boot sector上
(4) Kernel file:开始OS的功能...
loader的主要任务:
(1) 提供选择。
(2) load OS。
(3) 转交给loader:
- (近期)UEFI BIOS搭配GPT开机的流程
UEFI (Unified Extensible Firmware Interface) :取代BIOS,低端版OS,载入OS后,UEFI 就停止工作
2.2.4 Linux安装模式下,disk分割的选择
directory tree
root: "/"
如何结合 directory tree 的架构与disk内的资料: mount
mount: 利用一个目录当成进入点,将disk partition的资料放置在该目录下;也就是说,进入该目录就可以读取该partition。如:
第4章 首次登入与线上求助
- man + command 后出现的右上角的代号:
代号 代表内容
1 使用者在shell环境中可以操作的指令或可执行档
2 系统核心可呼叫的函数与工具等
3 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4 装置档案的说明,通常在/dev下的档案
5 设定档或者是某些档案的格式
6 游戏(games)
7 惯例与协定等,例如Linux档案系统、网路协定、ASCII code等等的说明
8 系统管理员可用的管理指令
9 跟kernel有关的文件
man -f XXX: 所有名为XXX的说明文件,指令必须是XXX
e.g.
man -f man 得到很多man(1), man(7)等
然后用man 7 man 就可以得到代号为7的man的说明文件
man -k XXX: 只要description中有man这个关键字就将该说明列出来。
info + command
查询方法Summary:
- 知道command 忘了参数, --help
- 查command 的说明, man, info
- software文档,/usr/share/doc
4.5 正确的关机方法
正常情况下,要关机时需要注意底下几件事:
观察系统的使用状态:
who :目前有谁在线
ps -aux: 背景执行的程序
netstat -a: 查看网络情况正确的关机指令使用:
将data同步写入disk中的指令: sync ==> memory --> disk
惯用关机:shutdown
重新开机,reboot
关机:poweroff
第5章 Linux 的档案权限与目录配置
多人多工环境 --> 权限问题
file 存取分为3种身份: owner/group/others
3种身份各有 read/write/execute 三种权限
5.1 owner + group
Linux里面,任何一个file都具有User, Group及Others 三种身份的权限设定
所有的系统上的帐号与一般身份user,还有那个root的相关info, 都是记录在/etc/passwd这个档案内的。
个人的密码记录在/etc/shadow这个档案下
Linux所有的群组名称都纪录在/etc/group内
5.2 Linux file permission 概念
5.2.1 Linux file属性
ls -al
==> -rw-rw-r-- 1 xin xin 10 Sep 13 2015 dx
(1) permission control:
-rwxr--r-- 这种
10位(1+3+3+3):(-)(---)(---)(---) ==> (file type)(owner)(group)(others)
第一位:表示这个file是
d: dir
-: file
l: link file
b: block device,随机读写block型设备,如disk
c: character device,一次性读取型设备,如键鼠
(2) 第二栏的数字 表示有多少 file name 连结到此节点(i-node)
每个file都会将他的permission 与 属性 记录到file system的i-node中,不过,我们使用的dir tree 却是使用file name来记录,因此每个file name 就会连结到一个i-node啰!这个属性记录的,就是有多少不同的file name连结到相同的一个i-node number.
(3) 第三栏表示这个file(或dir)的 owner
(4) 第四栏表示这个file的所属group
(5) file size, unit = bytes
(6) create date or last modify date
(7) file name .ABC
这种前面有.
的是隐藏file, 用-a
可以显示
5.2.2 如何改变档案属性与权限
(1)chgrp :改变file 的 group
要被改变的group name 必须要在/etc/group file 内存在
(2)chown :改变file 的 owner
owner必须是已经存在系统中的account,也就是在/etc/passwd 这个file中有记录的owner才行
(什么时候需要改变Owner? 比如你把file copy 给别人的时候)
(3)chmod :改变file的permission, SUID, SGID, SBIT等等的特性
数字类型改变file permission
r:4 w:2 x:1符号类型改变file permission
chmod
+
u(user),g(group),o(others),a(all)
+
+, -, =
+
r, w, x
e.g.chmod u+x,g=rwx test.file
5.2.3 dir与file 之 permission意义:
对file的重要性:
(1) 为什么要用x
:
不像windows系统,Linux下的file是否能被执行是由这个x
这个权限来决定的
(2) 有w
并没有删除file的权限,rwx都是针对于file 内容来说的,与file name 无关。对dir 的重要性:
(1) file是存放content的,dir是存放file name的。所以,针对于dir的rwx
:
r
: 可ls
w
: dir里面的东西增删改移
x
:能否进入该dir成为working dir. PS:cd=change dir
5.2.4 Linux file type 与 后缀名
file type
- regular file
-
- ASCII。纯文字。如configuration等。
- binary。可执行scripts。
- data。有些程序在运作的过程当中会读取某些特定格式的file,那些特定格式的file可以被称为data file。
e.g. Linux在user log in时,都会将登录的data记录在/var/log/wtmp 这个file内,该file是一个data file,他能够透过last这个指令读出来!但是使用cat时,会读出乱码~因为他是属于一种特殊格式的file.
directory d
link l
类似于windows里的快捷方式? 是一个->
这样的Map
device。通常集中在/dev下
- block device
b
: 如disk,可以随机的在disk的不同block读写,这种device就是block device - character device
c
:如keyboard/mouse,一次性读取。
sockets s
主要用于Network。通过这个socket来进行data transfer。
FIFO, pipe p
特殊类型。主要用于解决多个程序同时存取一个档案所造成的错误问题。
5.3 Linux目录配置
5.3.1 Linux目录配置的依据--FHS(Filesystem Hierarchy Stardard)
可分享的(shareable) | 不可分享的(unshareable) | |
---|---|---|
不变的(static) | /usr (软体放置处) | /etc (设定档) |
/opt (第三方协力软体) | /boot (开机与核心档) | |
可变动的(variable) | /var/mail (使用者邮件信箱) | /var/run (程序相关) |
/var/spool/news (新闻群组) | /var/lock (程序相关) |
可分享的:可以分享给其他系统mount使用的目录。
不可分享的:自己机器上面运作的device file 或者是与程序有关的socket file 等,由于仅与自身机器有关,所以不适合分享给其他主机了。
不变的:如函式库、文件说明file、admin所管理的主机服务configuration file 等
可变动的:经常变动的东西。
其实,FHS针对dir tree架构仅定义出三层dir底下应该放置什么:
- / (root, 根目录):与开机系统有关;
- /usr (unix software resource):与software安装/执行有关;
- /var (variable):与系统运作过程有关。
/
root(根目录)
/
也与开机/还原/系统修复等动作有关。
FHS标准建议:根目录(/)所在partition(分割槽)应该越小越好,且应用程式所安装的software最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的档案系统也较不容易发生问题。<== 联系mount的概念。
/
下应该有以下这些dir, 即使没有实体dir,FHS也希望至少有link file存在:
FHS要求必须存放:
dir | for what |
---|---|
/bin | 单人维护模式下还能执行的command,可以被所有permission使用 |
/boot | 存放开机所需的file,包括Linux kernel file 以及开机选单与开机所需config file。 Linux kernel常用的file name为:vmlinuz-*,如果使用的是grub这个开机管理程序,则还会存在/boot/grub/这个dir。 |
/dev | 存放所有devices |
/etc | 存放config file. 一般是所有人r ,但只有root w 。 FHS建议不要放binary file在这里面。几个重要的dir建议放在这个下面:(1) /etc/opt : 放第三方software相关的config |
/lib | /lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库。/lib/modules/ 必须存在:这个目录主要放置changable的kernel相关modules(驱动程式) |
/media | 存在可移除装置 |
/mnt | 存放暂时mount的额外device |
/opt | 存放第三方software |
/run | 存放开机后产生的各种东西 |
/sbin | 为开机过程中所需要的bin,里面包括了开机、修复、还原系统所需要的指令。 |
/tmp | 暂时存放file的地方 |
/usr | 后续介绍 |
/var | 后续介绍 |
建议存放:
dir | for what |
---|---|
/home | 每增加一个user,都会增加一个相应的home dir。~ 表示当前user的/home, ~AAA 表示AAA的home dir |
/root | root的home dir |
/lib<qual> | 与/lib格式不同之外的函数库,如/lib64 |
以上是FHS标准,以下的也重要:
dir | for what |
---|---|
/lost_found | file system 发生错误时,把遗失的放在此 |
/proc | virtual filesystem,此dir下放的东西都是存在memory中,存放如kernel, process, devices status and network |
/sys | 也是virtual file system 主要记录kernel和hardware相关的东西 |
mount 的时候 /etc, /bin, /dev , /lib, /sbin 必须跟 /
放在一起,用于救援模式。
/usr 的意义和内容
FHS建议所有developer,应该将他们的资料合理的分别放置到这个目录下的次目录,而不要自行建立该software自己独立的目录。
FHS要求必须:
dir | for what |
---|---|
/usr/bin/ | |
/usr/lib/ | |
/usr/local/ | 自己安装的software安装在这个下面 |
/usr/sbin/ | 非系统正常运作所需要的系统command,如server 中的damon |
/usr/share/ |
FHS建议:
dir | for what |
---|---|
/usr/include/ | c/c++等程序语言的header与include放置处 |
/usr/src/ | 源代码 |
/var 的意义与内容:
如果/usr是安装时会占用较大disk容量的目录,/var就是在系统运作后才会渐渐占用disk容量的目录。
只要针对常态性变动型file,如cache,log等
5.3.2 directory tree
注意:图中的Link不一定适用于所有distribution。