Linux基础之一

来源:互联网 发布:网校视频下载软件 编辑:程序博客网 时间:2024/06/05 09:12

        在网上找几本书,最后决定《鸟哥Linux私房菜》做入门,第0~2章做简单的总结

CPU的架构

         两种主要 CPU 架构分别是:精简指令集(RISC)与复杂指令集(CISC)系统

        精简指令集 (Reduced InstructionSet Computer, RISC):

        这种CPU的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的动作也很单纯,指令的执行性能较佳;但是若要做复杂的事情,就要由多个指令来完成。常见的RISC微指令集CPU主要例如甲骨文(Oracle)公司的SPARC系列、IBM 公司的Power Architecture(包括 PowerPC)系列、与ARM公司(ARM Holdings)的ARM CPU系列等。

        在应用方面,SPARC CPU 的电脑常用于学术领域的大型工作站中,包括银行金融体系的主要服务器也都有这类的电脑架构;至于PowerPC架构的应用上,例如索尼(Sony)公司出产的Play Station3(PS3)就是使用PowerPC架构的Cell处理器;ARM呢?你常使用的各厂牌手机、PDA、导航系统、网络设备(交换器、路由器等)等,几乎都是使用ARM架构的CPU喔!老实说,目前世界上使用范围最广的CPU可能就是ARM这种架构的呢!

         复杂指令集(ComplexInstruction Set Computer, CISC):

          与RISC不同的,CISC在微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。

         由于AMD、Intel、VIA所开发出来的x86架构CPU被大量使用于个人电脑(Personalcomputer)用途上面,因此,个人电脑常被称为x86架构的电脑!那为何称为x86架构呢?这是因为最早的那颗Intel发展出来的CPU代号称为8086,后来依此架构又开发出80286,80386..., 因此这种架构的CPU就被称为x86架构了。

          在2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,为了区别两者的差异,因此64位的个人电脑CPU又被统称为x86_64的架构喔!

         所谓的位指的是CPU一次数据读取的最大量!64位CPU代表CPU一次可以读写64bits这么多的数据,32位CPU则是CPU一次只能读取32位的意思。 因为CPU读取数据量有限制,因此能够从内存中读写的数据也就有所限制。所以,一般32位的CPU所能读写的最大数据量大概就是4GB左右。

         那么不同的x86架构的CPU有什么差异呢?除了CPU的整体结构(如第二层高速缓存、每次运行可执行的指令数等)之外,主要是在于微指令集的不同。新的x86的CPU大多含有很先进的微指令集,这些微指令集可以加速多媒体程序的运行,也能够加强虚拟化的性能,而且某些微指令集更能够增加能源效率,让CPU耗电量降低呢!由于电费越来越高,购买电脑时,除了整体的性能之外,节能省电的CPU特色也可以考虑喔!

 

操作系统

         操作系统(OperatingSystem, OS)其实也是一组程序,这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。

          Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大!此外,由于这个优良的架构可以在目前的个人计算机(x86系统)上面跑,所以很多的软件开发者渐渐的将他们的工作心血移转到这个架构上面,所以Linux 操作系统也有很多的应用软件啦!

虽然Linux仅是其核心与核心提供的工具,不过由于核心、核心工具与这些软件开发者提供的软件的整合,使得Linux成为一个更完整的、功能强大的操作系统。

 

Linux 该如何学习

          1. 计算机概论与硬件相关知识: 因为既然想要走Linux这门路,信息相关的基础技能也不能没有啊! 所以先理解一下基础的硬件知识,不用一定要全懂啦!又不是真的要你去组计算机,但是至少要“听过、有概念”即可;

         2. 先从Linux的安装与指令学起:没有Linux怎么学习Linux呢?所以好好的安装起一套你需要的Linux吧!虽然说Linux distributions很多,不过基本上架构都是大同小异的,差别在于接口的友好度与软件的选择不同罢了!选择一套你喜欢的就好了,倒是没有哪一套特别好说~

         3.Linux操作系统的基础技能:这些包含了“使用者、群组的概念”、“权限的观念”,“程序的定义”等等,尤其是权限的概念,由于不同的权限设置会妨碍你的使用者的便利性,但是太过于便利又会导致入侵的可能!所以这里需要了解一下你的系统呦!

         4.务必学会vi文书编辑器: Linux的文书编辑器多到会让你数到生气!不过,vi却是强烈建议要先学习的!这是因为vi会被很多软件所调用,加上所有的Unix like系统上面都有vi,所以你一定要学会才好!

       5.Shell与Shell Script的学习:其实鸟哥上面一直谈到的“命令行”说穿了就是一个名为shell的软件啦!既然要玩命令行,当然就是要会使用shell的意思。但是shell上面的数据太多了,包括“正则表达式”、“管线命令”与“数据流重导向”等等,真的需要了解比较好呦!此外,为了帮助你未来的管理服务器的便利性,shell scripts也是挺重要的!要学要学!

        6. 一定要会软件管理员:因为玩Linux常常会面临得要自己安装驱动程序或者是安装额外软件的时候,尤其是嵌入式设备或者是学术研究单位等。这个时候Tarball/RPM/DPKG/YUM/APT等软件管理员的安装方式的了解,对你来说就重要到不行了!

         7.网络基础的创建:如果上面你都通过了,那么网络的基础就是下一阶段要接触的咚咚,这部份包含了“IP概念”“路由概念”等等;

         8. 如果连网络基础都通过了,那么网站的架设对你来说,简直就是“太简单啦!”

         9.选择一本易读的工具书

         10.实践再实践

磁盘分区

         设备设备在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](旧式系统才有)

MSDOS(MBR)与 GPT 磁盘分区表(partition table)

          MSDOS(MBR)分区表格式与限制

          早期的Linux 系统为了相容于Windows的磁盘,因此使用的是支持Windows的MBR(Master Boot Record, 主要开机纪录区)的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是512Bytes的大小(旧的磁盘扇区都是 512Bytes喔!),所以说,第一个扇区512Bytes会有这两个数据:主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes分区表(partitiontable):记录整颗硬盘分区的状态,有64 Bytes,由于分区表所在区块仅有64Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:

                                                    

                                                                                                               

                                                                                      图2.2.2、磁盘分区表的作用示意图          

         假设上面的硬盘设备文件名为/dev/sda时,那么这四个分区在Linux系统中的设备文件名如下所示,重点在于文件名后面会再接一个数字,这个数字与该分区所在的位置有关喔!

                   P1:/dev/sda1

                  P2:/dev/sda2

                  P3:/dev/sda3

                  P4:/dev/sda4

        上图中我们假设硬盘只有400个柱面,共分区成为四个分区,第四个分区所在为第301到400号柱面的范围。当你的操作系统为Windows时,那么第一到第四个分区的代号应该就是C,D,E,F。当你有数据要写入F盘时,你的数据会被写入这颗磁盘的301~400号柱面之间的意思。

         由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。根据上面的图示与说明,我们可以得到几个重点信息:

        1.其实所谓的“分区”只是针对那个64Bytes的分区表进行设置而已!

        2.硬盘默认的分区表仅能写入四组分区信息

        3.这四组分区信息我们称为主要(Primary)或延伸(Extended)分区

        4.分区的最小单位“通常”为柱面(cylinder)

        5.当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理

       基本上你可以这样思考分区的角度:

      1.数据的安全性:因为每个分区的数据是分开的!所以,当你需要将某个分区的数据重整

时,例如你要将计算机中Windows的C盘重新安装一次系统时,可以将其他重要数据移动到其他分区,例如将邮件、桌面数据移动到D盘去,那么C盘重灌系统并不会影响到D盘!所以善用分区,可以让你的数据更安全。

     2.系统的性能考虑:由于分区将数据集中在某个柱面的区段,例如上图当中第一个分区位

于柱面号码1~100号,如此一来当有数据要读取自该分区时,磁盘只会搜寻前面1~100的柱面范围,由于数据集中了,将有助于数据读取的速度与性能!所以说,分区是很重要的!

       既然分区表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分区出四个分区?当然不是啦!有经验的朋友都知道,你可以将一颗硬盘分区成十个以上的分区的!那又是如何达到的呢?在Windows/Linux系统中,我们是通过刚刚谈到的延伸分区(Extended)的方式来处理的啦!延伸分区的想法是:既然第一个扇区所在的分区表只能记录四笔数据,那我可否利用额外的扇区来记录更多的分区信息?实际上图示有点像下面这样:

                                     

       在上图当中,我们知道硬盘的四个分区记录区仅使用到两个,P1为主要分区,而P2则为延伸分区。请注意,延伸分区的目的是使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。然后我们可以通过延伸分区所指向的那个区块继续作分区的记录。

        如上图右下方那个区块有继续分区出五个分区,这五个由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)。同时注意一下,由于逻辑分区是由延伸分区继续分区出来的,所以他可以使用的柱面范围就是延伸分区所设置的范围喔!也就是图中的101~400啦!

        同样的,上述的分区在Linux系统中的设备文件名分别如下:

                  P1:/dev/sda1

                  P2:/dev/sda2

                  L1:/dev/sda5

                 L2:/dev/sda6

                 L3:/dev/sda7

                 L4:/dev/sda8

                 L5:/dev/sda9

        仔细看看,怎么设备文件名没有/dev/sda3与/dev/sda4呢?因为前面四个号码都是保留给Primary或Extended用的嘛!所以逻辑分区的设备名称号码就由5号开始了!这在MBR方式的分区表中是个很重要的特性,不能忘记喔!

         MBR 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义啰:

         主要分区与延伸分区最多可以有四笔(硬盘的限制)

         延伸分区最多只能有一个(操作系统的限制)

         逻辑分区是由延伸分区持续切割出来的分区;能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。因此,如果整颗硬盘的第一个扇区(就是MBR与partition table所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了!因为系统如果找不到分区表,怎么知道如何读取柱面区间呢?您说是吧!下面还有一些例题您可以思考看看:

         例题:如果我想将一颗大硬盘“暂时”分区成为四个partitions,同时还有其他的剩余容量可以让我在未来的时候进行规划,我能不能分区出四个Primary?若不行,那么你建议该如何分区?

        答:由于Primary+Extended最多只能有四个,其中Extended最多只能有一个,这个例题想要分区出四个分区且还要预留剩余容量,因此P+P+P+P的分区方式是不适合的。因为如果使用到四个P,则即使硬盘还有剩余容量,因为无法再继续分区,所以剩余容量就被浪费掉了。假设你想要将所有的四笔记录都花光,那么P+P+P+E是比较适合的。所以可以用的四个partitions有3个主要及一个逻辑分区,剩余的容量在延伸分区中。如果你要分区超过4个以上时,一定要有Extended分区,而且必须将所有剩下的空间都分配给Extended,然后再以logical的分区来规划Extended的空间。另外,考虑到磁盘的连续性,一般建议将Extended的柱面号码分配在最后面的柱面内。

       例题:假如我的PC有两颗SATA硬盘,我想在第二颗硬盘分区出6个可用的分区(可以被格式化来存取数据之用),那每个分区在Linux系统下的设备文件名为何?且分区类型各为何?至少写出两种不同的分区方式。答:由于P(primary)+E(extended)最多只能有四个,其中E最多只能有一个。现在题目要求6个可用的分区,因此不可能分出四个P。下面我们假设两种环境,一种是将前四号全部用完,一种是仅花费一个P及一个E的情况:

          P+P+P+E的环境:

        

           图2.2.5、分区示意图实际可用的是/dev/sdb1,/dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6,/dev/sdb7这六个,至于/dev/sdb4这个延伸分区本身仅是提供来给逻辑分区创建之用。

        P+E的环境:

               

         图2.2.6、分区示意图注意到了吗?因为1~4号是保留给主要/延伸分区的,此第一个逻辑分区一定是由5号开始的!再次强调啊!所以/dev/sdb3, /dev/sdb4就会被保留下来没有用到了!MBR 分区表除了上述的主分区、延伸分区、逻辑分区需要注意之外,由于每组分区表仅有16Bytes 而已,因此可纪录的信息真的是相当有限的! 所以,在过去MBR分区表的限制中经常可以发现如下的问题:

         操作系统无法抓取到 2.2T 以上的磁盘容量!

          MBR 仅有一个区块,若被破坏后,经常无法或很难救援。

          MBR 内的存放开机管理程序的区块仅446Bytes,无法容纳较多的程序码。

           这个2.2TB限制的现象在早期并不会很严重。但是,近年来硬盘厂商动不对推出的磁盘容量就高达好几个TB 的容量!目前(2015)单一磁盘最大容量甚至高达8TB了!如果使用磁盘阵列的系统,像鸟哥的一组系统中,用了24颗4TB磁盘搭建出磁盘阵列,那在 Linux 下面就会看到有一颗70TB 左右的磁盘!如果使用MBR 的话...那得要 2TB/2TB 的割下去,虽然Linux kernel现在已经可以通过某些机制让磁盘分区高过63个以上,但是这样就得要割出将近40个分区~真要命... 为了解决这个问题,所以后来就有GPT 这个磁盘分区的格式出现了!

         GUID partition table, GPT 磁盘分区表

         因为过去一个扇区大小就是512Bytes而已,不过目前已经有4K的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面,大多会使用所谓的逻辑区块位址(Logical Block Address, 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 笔分区纪录,所以在默认的情况下,总共可以有 432 =128笔分区纪录喔!因为每个LBA 有512Bytes,因此每笔纪录用到128Bytes  的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 每笔纪录中分别提供了64bits来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说,他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8ZB ”,要注意1ZB=230TB 啦!你说有没有够大了?

        现在GPT分区默认可以提供多达128笔纪录,而在Linux本身的核心设备纪录中,针对单一磁盘来说,虽然过去最多只能到达15个分区,不过由于Linux kernel通过udev等方式的处理,现在Linux也已经没有这个限制在了!此外,GPT分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在,当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!

 

        开机流程

        简单的说,整个开机流程到操作系统之前的动作应该是这样的:

             1. BIOS:开机主动执行的固件,会认识第一个可开机的设备;

             2. MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;

            3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;

            4. 核心文件:开始操作系统的功能...


原创粉丝点击