计算机种类多种多样,常见的如台式机、笔记本、一体机、移动电话等,甚至如GPS导航、门禁系统等,都是一种计算机,简单来说,计算机就是用来接受用户输入的指令与数据,经由CPU中央处理器的算术逻辑单元运算处理后,以输出或存储一定的信息。
计算机由五大单元组成,它们是输入单元、输出单元、算术逻辑单元、控制单元、主存储器,其中后三者又称为系统单元,常说的CPU由算术逻辑单元和控制单元组成,为计算机的核心部件。输入单元如鼠标、键盘,输出单元如显示器、打印机,算术逻辑单元所需的数据来自主存储器,主存储器中的数据可通过输入单元或外部存储器获得,控制单元则控制着这些单元的交互,它们之间的数据流必然要经过主存储器。计算机中的各部件协同工作时,必须通过一定的接口把它们连接起来,最重要的一个接口设备便是主板。
CPU的运行依赖于其内部的微指令集,分为RISC精简指令集和CISC复杂指令集,精简指令集类型的CPU如SUN的SPARC系列、IBM的POWER系列、ACORN的ARM系列,ARM系列的CPU主要用于移动终端、嵌入式系统,复杂指令集类型的CPU如AMD、INTEL、VIA的X86架构系列,X86系列的CPU主要用于个人电脑。之所以称为X86,是因为INTEL最早研发的CPU代号为8086,后来又依此架构开发出80286、80386,CPU从8位升级到16位、32位,再后来AMD在X86架构的基础上又研发出64位的CPU,为了区别,称为X86_64。对于32位的X86架构,可能有不同的针角和设计,为了统一规范,于是便出现了常见的i386、i586、i686,有些程序可能针对不同的CPU等级作了优化处理,它们向下兼容。在Linux上,查询CPU架构可使用“lscpu”或“uname”命令。
在计算机中,一切都是二进制0和1,最小单位为bit,8bit=1Byte,1024Byte=1K,1024K=1M,1024M=1G,1024G=1T,1024T=1P,等等,一般用于表示磁盘用量、文件大小,但有些地方则用十进制表示,如表示网速的8M/1M ADSL,表示上传、下载速度为每秒8M、1Mbit,换算成Byte即每秒1M、125KByte。日常中经常可以遇到买了U盘在电脑上查看容量不足的问题,这是因为U盘制造商把1K当作1000,而电脑计算U盘容量时把1K当作1024。
INTEL与AMD的X86架构的CPU互不兼容,因此它们所需的主板芯片组也有差异。INTEL的芯片组通常分为两个网桥即北桥和南桥来控制各组件的沟通,北桥负责连接速度较快的CPU、主存储器、显示适配器等组件,南桥负责连接速度较慢的周边接口如硬盘、USB、网卡等。而AMD为了加速CPU与主存储器的沟通,直接把主存储器整合到了CPU中,不同于INTEL要通过北桥完成。
CPU的频率即CPU每妙工作的次数,单位为Hz赫兹,它等于外频与倍频的乘积,其中外屏表示CPU与外部设备进行数据传输的速度,倍频是CPU内部提升其工作性能的一个倍数,这个倍数通常被CPU厂商锁定。
CPU运算的数据来源于主存储器,主存储器与CPU的数据传输速度靠的是外频,数据传输总量还要看总线,INTEL的芯片组分为北桥和南桥,北桥的总线称为系统总线,南桥的总线称为IO总线,前者传输速度块,其频率称为前端总线速度,乘以每次数据传输的位数即总线宽度,如32、64,便是总线带宽,总线带宽表示单位时间内传输的数据总量。可以看出,32位与64位为总线宽度,表示每次数据传输的位数,但是,处理器的32位与64位表示的是字组大小,也就是CPU每次能够处理的数据量,总线宽度和字组大小一般相同,但也可以不同,对于32位的字组来说,所支持的最大内存为4GB,即2的32次方个字节。
主存储器的主要部件为DRAM,Dynamic Random Access Memory,动态随机存取存储器,只能将数据保存很短的时间,使用电容存储,需要不断刷新以保持数据,没有刷新如电脑关机断电时数据就会丢失;对应的有SRAM,S为Static静态,不需要刷新电路保持数据,性能高而集成度低,用于CPU与主存储器间的高速缓存。于RAM对应的有ROM,后者只读。SDRAM是DRAM的一种技术,S即Synchronous同步,内存工作需要同步时钟,内部的指令发送与数据传输都以它为基准,后来升级为DDR,Double Date Rate,双倍数据传输速度,在一个工作周期中传输两次数据。
由于CPU的数据来源于主存储器,所以主存储器的总线宽度越大越好,一般为64位,为了加大这个宽度,主板芯片组厂商将两个主存储器放置在一起,如果一个内存为64位,两个内存便是128位,这就是双通道的设计理念。使用双通道时,最好在成对的插槽上安装型号相同的两个内存。
VGA(Video Graphics Array)显示适配器是显示图形图像的一个重要组件,分辨率与颜色深度为两个很重要的指标,颜色要占用一定的内存,这个内存便是常说的显存,显存会影响图形图像的显示效果。随着技术的更新迭代,3D游戏、画面的显示要求越来越高,这需要可观的数据运算量,起初是由CPU完成的,但CPU也是高负荷工作,有许多事情需要处理,于是GPU出现了,是一个嵌入在VGA的3D加速芯片,专门用于图像处理。GPU的规格常见的有AGP(Accelerated Graphic Port)、PCI(Peripheral Component Interconnect)。
硬盘的最小存储单位为扇区,大小固定为512Byte,多个扇区组成一个柱面,柱面为划分硬盘空间的最小单位,多个柱面组成一个磁盘头,所以磁盘的容量为“磁盘头个数 x 每个磁盘头的柱面数 x 每个柱面的扇区数 x 512Byte”。
说起Linux的发展,就要谈一谈几号关键人物。首先是Ken Thompson,一开始Bell实验室、MIT学院和GE公司共同发起了Multics计划,目的是大型主机能够支持300个以上的终端设备联机使用,后来由于种种原因,Bell退出了Multics计划,但Bell的Ken Thompson为了自己的需要,用汇编语言编写了一组核心程序,这便是Unix的前身,Linux源于Unix。汇编语言编写的程序依赖于硬件架构,移植性差,于是,Bell的Dennis Retchie开发出了C语言并用C语言重新编写了Unix内核。Bell属于AT&T
公司,AT&T
对Unix的态度是开放的,Berkeley大学的Bill Joy(Sun公司创始人)在获取了Unix内核的源代码之后,开始对其进行修改以适应自己的机器,并添加了一些应用程序,最终命名为BSD(Berkeley Software Distribution),由于Unix的高度可移植性与强大的功能,许多商业公司开始发展Unix,都开发出了自己的Unix版本,然而好景不长,后来AT&T
出于商业环境的考虑,收回了Unix版权,在其第七版System V系统中还特别提出了“不可对学生提供源代码”,为此也引发了不少商业纠纷。由于Unix的版权问题,谭宁邦教授独自写了一版类似于Unix的Minix,用以教授学生认识Unix,主要用于教育领域。下一个重要的人物是Richard Stallman,最主要的贡献是发起了GNU计划,目的是建立一个自由、开放的Unix系统,单打独斗不可能,于是便先开发了一些实用的程序以吸引更多的开发者加入GNU阵营,其中包括gcc、emacs、libc、bash,以及GPL(General Public License)版权协议,而且还创立了自由软件基金会FSF(Free Software Foundation)。最后是Linus Torvalds,得益于Minix及GNU,先编写了一个Linux内核,为了让Unix的软件能够在Linux上运行,Linux开始参考标准的POSIX(Portable Operating System Interface)规范,Linux为Open Source,其成功源于世界各地的参与者,通过网路进行协作开发。通常所说的Linux即Linux Distribution,包括Linux Kernel、软件,以及一些使用工具和说明文档。
在Linux中,一切都是文件,从根目录“/”开始。硬件设备通常位于“/dev”目录下,它们有一定的命名规则,例如,IDE接口的设备名为“/dev/hd[a-d]”,SCSI、SATA、USB接口的设备名为“/dev/sd[a-p]”,软盘设备名为“/dev/fd[0-1]”,25针接口的打印机名为“/dev/lp[0-2]”,USB接口的打印机名为“/dev/usb/lp[0-15]”,PS2接口的鼠标名为“/dev/psaux”,USB接口的鼠标名为“/dev/usb/mouse[0-15]”,当前的CDROM、DVDROM名为“/dev/cdrom”,当前的鼠标名为“/dev/mouse”,IDE接口的磁带机名为“/dev/ht0”,SCSI接口的磁带机名为“/dev/st0”。对于一块硬盘来说,最小的物理分割单位为512Byte,即一个扇区,其中最重要的是第一个扇区,记录了两条重要信息,一个是MBR(Master Boot Record),446Byte,可以安装开机管理程序,另一个是分割表,64Byte,记录整个硬盘的分割状态。那么,这个64Byte的分割表是如何记录分割状态的呢?它支持最多四个分区,包括主分区和延伸分区,延伸分区最多一个,这四个分区保留了从1到4的分区号码,延伸分区还可以分割成多个逻辑分区,这些逻辑分区的号码从5开始记录。
ext2/ext3:是Linux适用的文件系统类型,ext3文件系统多了日志功能,可加快系统的复原。
physical volume(LVM):是用来弹性调整文件系统容量的一种机制,可以让文件系统容量变大或变小而不改变原有的文件数据内容。
software RAID:是利用Linux操作系统的特性,用软件仿真出磁盘阵列的功能。
swap:是内存交换空间,不挂载到目录树上,当有数据存放在物理内存里,但这些数据又不是常被CPU所使用时,那么这些不是常被使用的数据将会被放置到硬盘的swap中,而将速度较快的物理内存留出来,swap一般为物理内存的2到3倍。
vfat:是同时被Linux和Windows所支持的文件系统类型。如果主机硬盘内同时存在Windows和Linux操作系统,为了数据的交换,可建立一个vfat文件系统。
GNOME,KDE。
LILO(LInux LOader),GRUB(GRab Unified Boot loader)。
“Ctrl + Alt + F1~F6”切换到文本模式,分别对应于tty1~tty6,对应的runlevel为3,“Ctrl + Alt + F7”切换到X Window,对应于tty7,对应的runlevel为5。
有7个runlevel,从数字0到6,命令“runlevel”显示当前等级,命令“init level_number”切换指定等级。
0:所有进程将被终止,机器将有序的停止,关机时系统处于这个运行级别。
1:单用户模式,用于系统维护,只有少数进程运行,同时所有服务也不启动。
2:多用户模式,和运行级别3一样,只是网络文件系统NFS没有启动。
3:多用户模式,允许多用户登录系统,是系统默认的启动级别。
4:留给用户的自定义运行级别。
5:多用户模式,并且在系统启动后运行X Window,给出一个图形化的登录界面。
6:所有进程被终止,系统重新启动。
在Linux上寻求帮助的一个常用手段是使用命令man或info,man给出的结果中在左上角或右上角有一个数字表示不同的类别,这些分类如下。
1:用户在shell环境中可以操作的指令或可执行文件。
2:系统核心可调用的函数与工具等。
3:一些常用的函数function与函数库library,大部分为C的函数库 ibc。
4:配置文件的说明,通常在/dev下的文件。
5:配置文件或者是某些文件的格式。
6:游戏games。
7:惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明。
8:系统管理员可用的管理指令。
9:跟kernel有关的文件。
在Linux上一切都是文件,每个文件都有自己的权限,包括owner、group、others三种,它们都有三个权限read(r)、write(w)、executable(x),通过命令“ls -l”可查看文件权限,chmod修改文件权限,chown修改文件的owner,chgrp修改文件的group。除了这九个权限外,还有三个特殊权限,它们是SUID、SGID、SBIT,其中SUID(s)出现在owner的executable(x),SUID权限仅对二进制程序有效,执行者对于该程序需要有x的可执行权限,仅在执行该程序的过程中有效,执行者将具有该程序owner的权限;SGID(s)类似于SUID,不同的是出现在group中,可用于可执行文件和目录;SBIT仅用于目录,当用户在这个目录下建立文件时,只能由root和用户本身删除这个文件,这三个特殊权限的修改由命令chmod设定。除此之外,文件还有隐藏属性,由命令lsattr、chattr管理,在ext2/ext3文件系统下有效,多用于系统安全方面。
在Linux上一切都是文件,其中有几个特殊的文件名,以“.”开头的表示隐藏文件,“.”表示当前目录,“..”表示上一级目录,“/”表示根目录,文件名大小写敏感,文件名和完整的路径名有一定的长度限制,这个需要注意。通过命令“ls -l”可查看文件种类,其中“-”为普通文件,“d”为目录,“l”为链接文件,“b”为block块设备,“c”为character字符设备,“s”为socket数据通信文件,“p”为pipe管道。
在Linux上一切都是文件,它们都从根目录“/”开始,FHS(Filesystem Hierarchy Standard)规定了一些必须存在的目录,而不同的Linux发行版也有其它不同的目录,每个目录存放不同类别的文件,分为能否分享、能否变动,如下所示。
/bin:系统有很多放置执行文件的目录,但/bin比较特殊,因为/bin放置的是在单人维护模式下还能被操作的命令, 可以被root和一般账号使用。
/sbin:Linux有非常多的命令是用来设定系统环境的,这些命令只有root才能够使用来设定系统,其他用户最多只能用来查询。放在/sbin下的命令为开机过程中所需要的,里面包括开机、修复、还原系统所需要的命令。至于某些服务器软件程序,一般则放置到/usr/sbin/中。本机自行安装的软件所产生的系统执行文件,则放置到/usr/local/sbin当中。
/lib:系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin下的命令会使用的函式库。
/dev:在Linux系统上,任何装置和接口设备都是以文件的型态存在于这个目录中的。
/etc:系统主要的配置文件几乎都放置在这个目录内,一般来说,这个目录下的各文件属性是可以让一般使用者查阅的,但是只有root有权力修改。
开机时,根目录自动挂载,其它的开机后陆续挂载,所以根目录下与开机过程相关的目录就不能与根目录放在不同的分割区,例如上面的几个目录。
/boot:这个目录主要放置开机会使用到的文件,包括 Linux核心文件以及开机选项和开机所需的配置文件等等。
/media:media即媒体,这个目录下放置的是可移除的装置。
/mnt:如果你想暂时挂载某些额外的装置,一般建议放置到这个目录中。早些时候,这个目录的用途同/media,只是有了/media之后,这个目录就用来暂时挂载了。
/opt:这个是给第三方协议软件放置的目录。
/root:系统管理员root的家目录,之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们希服root的家目录要同根目录放置在同一个分割槽中。
/srv:srv即service,是一些网络服务启动之后,这些服务所需要取用的数据目录。
/tmp:这是让一般用户或者是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存取的,所以重要数据不建议放置在此目彔,需要按需清理。
/lost+found:这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下,这个目录通常会在分割槽的最顶层。
/proc:这个目录本身是一个虚拟文件系统,放置的数据都在内存中,不占任何硬盘空间。
/sys:类似于/proc。
/usr:unix software resource。
/var:如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运作后才会渐渐占用硬盘容量的目录,这个目录主要针对常态性变动的文件。
/home:用户主目录。
文件系统通常会将文件的权限和属性放置到inode中,实际的数据则放置到data block中,还有一个superblock用于记录文件系统的整体信息,包括inode和block的总量、使用量、剩余量等。为了便于管理,文件系统又分为多个block组,每个block组有自己的superblock、文件系统描述、区块对照表、inode对照表、inode table、data block。data block大小固定,如1k、2k、4k等,因此限制了单一文件的最大长度和整个文件系统的最大容量,一个block只能存放一个文件,大文件可以存放在多个block中。inode除了记录文件属性外,还记录了block号,inode固定为128Byte,一个文件对应一个inode,对于大文件来说,一个inode必定要记录大量的block号,仅仅128Byte是不够的,于是inode分为12个直接、1个间接、1个双间接、1个三间接来指向block,直接的意思是inode直接记录block号,间接的意思是通过另外的block来记录block号。superblock是非常重要的一个block,记录了所有inode和block的信息,还有文件系统的挂载信息。文件系统描述记录了开始与结束的block号。block对照表用于查找可用的block号。inode对照表用于查询可用的inode号。
Ctrl + C:终止目前的命令
Ctrl + D:输入结束EOF
Ctrl + M:即Enter
Ctrl + S:暂停屏幕的输出
Ctrl + Q:恢复屏幕的输出
Ctrl + U:在提示字符下将整列命令删除
Ctrl + Z:暂停目前的命令
RAID即Redundant Arrays of Inexpensive Disks磁盘阵列,通过硬件或软件技术,把多个小的硬盘整合为一个大的硬盘,用于存储、保护数据,考虑到IO性能和数据安全性,RAID又有不同的使用形式。
LVM即Logical Volume Manager,用于弹性地调整磁盘容量。
Linux中的各进程运行时根据priority来决定执行顺序,priority数值越小,进程优先级越高,这个priority与nice值有关,但是通过内核动态调整的。
a. 加载BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置。
b. 读取并执行第一个开机装置内MBR的boot loader(grub等)。
c. 依据boot loader的设定加载kernel,kernel会开始侦测硬件与加载驱动程序。
d. 在硬件驱动成功后,kernel会主动呼叫init程序,而init会取得run-level信息。
e. init执行/etc/rc.d/rc.sysinit文件来准备软件执行的作业环境(如网络、时区等)。
f. init执行run-level的各个服务之启动(script方式)。
g. init执行/etc/rc.d/rc.local文件。
h. init执行终端机仿真程序mingetty来启动login程序,最后就等待用户登录啦。