Linux 是安装在电脑硬体系统上面的一套作业系统,目的是用来管理电脑硬体的!所以我们得要先了解一下硬体的常见组成,以及常见的硬体分类, 这样才好入门Linux 喔!
目前的电脑硬体系统主要经由底下的元件所组成:
上述主机部份是整体系统最重要的部份,该部份的组成为:控制单元、算术逻辑单元以及记忆体单元(含主记忆体、外部储存装置)等。
例题:
请说明:
|
目前的电脑硬体架构主要均由中央处理单元(CPU) 所定义的各项连结元件所组成,而目前世界上消费市场中,最常见到的CPU 架构大概可以分为两大类:
为了简化硬体的资源操作,因此后来有开发作业系统来管理硬体资源的分配。因此程式设计师仅须考量程式的运作流程,而无须考量记忆体配置、 档案系统读写、网路资料存取等,在程式开发上面较为简易。硬体、作业系统、作业系统提供的开发界面以及应用程式的相关性,可以使用底下的图示来说明:
例题:
运用图1.1-1 的四个同心圆,尝试说明当年为何从windows XP 转到Vista 时,很多应用程式无法运作?
|
例题:
除了云端软体之外(一般云端软体,如office 365) ,大部分的作业系统软体在贩售时,会告知适合的硬体等级, 而一般应用软体则会告知适用的作业系统,其主要的原因为何?
|
现代的作业系统主要的目的就是在控管硬体的资源,并且提供一组开发环境让其他第三方协力厂商可以方便的在该作业系统上面开发相关的软体。故作业系统主要包含的部份是:『核心+系统呼叫』。
现代的Linux 作业系统主要以可跨硬体平台的C 程式语言所写成,且Linux 自从3.x 以来的核心版本已经支援了ARM 的CPU 架构, 因此Linux 可以轻松的在不同的硬体平台间编译后安装。但你依旧不可以直接拿x86 架构的编译好的Linux 去安装在ARM 的平台上!因为两者对个别硬体的设计还是不太相同的!
Linux 并非凭空撰写而来,其发展有一定的历史背景。由于这些历史背景,目前Linux 是自由软体,可以自由的使用、学习、修改、编译、再发行, 而且是相对稳定的作业系统。
例题:
上网找出多元程式处理系统需要可以I/O 与CPU 分离运作的主要架构,是透过记忆体内的哪些程序状态达成的?且这些程序的状态运作情况为何?
|
例题:
昵称『最纯种的UNIX 』指的是那两套Unix 作业系统?
|
例题:
上网找出: (1)GNU 计画的全名; (2)GNU 计画的官网; (3)GNU 的吉祥物; (4)GNU 的核心名称为何?
|
GNU 的GPL 授权主要强调自由的学习,Free Software(自由软体)是一种自由的权力,并非是『价格!』 举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力,但是,这并不代表你可以到处喝『免费的啤酒!(free beer)』, 也就是说,自由软体的重点并不是指『免费』的,而是指具有『自由度, freedom』的软体,史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软体。
GNU 的GPL 授权有底下的权力与义务:
由于自由软体使用的英文为free software,这个free 在英文是有两种以上不同的意义,除了自由之外,免费也是这个单字!因为有这些额外的联想,因此许多的商业公司对于投入自由软体方面确实是有些疑虑存在的!许多人对于这个情况总是有些担心~
为了解决这个困扰,1998 年成立的『开放原始码促进会(Open Source Initiative)』提出了开放原始码(Open Source,亦可简称开源软体) 这一名词!另外,并非软体可以被读取原始码就可以被称为开源软体喔!该软体的授权必须要符合底下的基本需求,才可以算是open source 的软体。
例题:
如果你自己开发的软体未来可能会有商业化的可能,但目前你希望使用Open source 的方式来提供大家使用。另外,也希望未来能够有一支保有开放源码软体的分支,那最好使用GPL 还是BSD 呢?
|
Linux kernel 主要由http://www.kernel.org 维护,目前的版本已经出现到4.x 版。Linux kernel 1.0 在1994 年释出, 在1996 年释出2.0 版,在2.0 之后,核心的开发分为两个部份,以广为使用的2.6 来说明的话,主要的分类有:
这种奇数、偶数的编号格式在2011 年3.0 核心推出之后就失效了。从3.0 版开始,核心主要依据主线版本(MainLine) 来开发,开发完毕后会往下一个主线版本进行。例如4.9 就是在4.8 的架构下继续开发出来的新的主线版本。
旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发(End of Live, EOL),亦即该程式码已经结束, 不会有继续维护的状态。另外一种机制为保持该版本的持续维护,亦即为长期维护版本(Longterm)!例如4.9 即为一个长期维护版本,这个版本的程式码会被持续维护,若程式码有bug 或其他问题, 核心维护者会持续进行程式码的更新维护。
例题:
使用google 搜寻引擎或wiki 等,找出底下的相关资料:
|
为了让使用者能够接触到Linux,于是很多的商业公司或非营利团体,就将Linux Kernel(含tools)与可运行的软体整合起来, 加上自己具有创意的工具程式,这个工具程式可以让使用者以光碟/DVD或者透过网路直接安装/管理Linux系统。这个『Kernel + Softwares + Tools + 可完整安装程序』的咚咚,我们称之为Linux distribution, 一般中文翻译成可完整安装套件,或者Linux发布商套件等。
常见的Linux distributions 分类有:
RPM 软体管理 | DPKG 软体管理 | 其他未分类 | |
商业公司 | RHEL (Red Hat公司) SuSE (Micro Focus) |
Ubuntu (Canonical Ltd.) | |
社群单位 | Fedora CentOS OpenSuSE |
Debian B2D |
Gentoo |
一般用途在个人电脑(包括笔记型电脑) 的使用,建议可以使用Ubuntu / Fedora / OpenSuSE 等,若用在Server 上, 建议可以使用CentOS 或Debian。
CentOS 的产生较为有趣,他是取自Red Hat 的RHEL 作业系统,将原始码中与Red Hat 相关的注册商标或其他著作相关的资料移除, 改以自己的『企业商用社群版本作业系统』取名,然后再次发行。因此CentOS 的版本与RHEL 是亦步亦趋的!(包括Oracle Linux 与Scientific Linux 也是同样的作法)。
例题:
为什么CentOS 社群可以直接取用RHEL 的程式码来修改后释出?这样做有没有任何法律的保护呢?
|
用在企业环境与学术环境中,最常见到的应用有:
个人的使用则有:
例题:
超级电脑可以说是一个国力的展现,而top500 每年会有两次去调查全世界跑得最快的超级电脑。请上网查询后回答下列问题: (1) top500 的官网网址?(2)超级电脑的比较排序方式,是以那一种计算来考虑的?(3)根据现在的时间,找到最近一次排序的结果, 第一名的超级电脑使用了多少个CPU 核心(cores), (4)该系统最快可达到多快的计算(说明其单位)?(5)若以一度电5 元台币计算, 该系统开机一天要花费多少钱?
|
例题:
前往Dell 官网,调查其支援的Linux distribution 主要是那几种?另外,请思考这个查询的意义为何?(http://linux.dell.com/files/supportmatrix/)
|
为方便教师/学生可以在任何地方学习Linux 作业系统,一个教学环境是需要事先建置的。除了使用实体机器原生的Linux 之外, 虚拟化的环境更方便教师制作教学单元。因为虚拟化的环境软/硬体可以模拟的完全一致,对于教师与学生的实作练习以及错误重现,都有很大的帮助。
本教材预设使用Gocloud 这套云端系统来进行教与学的任务,请教师事先于Gocloud 上建置好学生需要的实际操作环境, 该环境的取得请参考本教材的电子资料,或与作者/出版社联系。
请依据贵单位的环境设定(网际网路IP 或主机名称),直接以浏览器来连线到Gocloud 系统,系统示意图如下所示:
如果是第一次使用的学生,那就请先来注册一下!按下如上图的箭头指向的地方,点下去就会出现注册的项目了,如下所示:
一般来说,如果是学校单位,鸟哥建议如上述画面所示,最好请学生依据自己的学号作为帐号,真实姓名作为姓名填写, 这样老师比较知道学生与帐号的对应,在考试出题与作答时,会比较清楚对应。如果没有强调这一点,那学生注册的姓名可能会比较伤脑筋。等到注册完毕后,还要等老师将你的帐号开通之后才能够使用。因此,此时请稍微等待一小段时间喔!
等到老师将你的帐号开通,并且假设老师已经将硬碟制作好给你了,此时请回到图1.2.1去输入帐号与密码栏位,并按下登入系统或[Enter],那就能够登入系统了。登入系统会出现如下的图示:
画面中最上方为学生可以操作的系统功能,其中比较常用的是:
例题:
请登入系统后,根据你自己家用(或电脑教室中) 的作业系统,下载正确的remote-viewer 软体,并且安装后启动该软体。
答:
图1.2.4、学生端电脑连线到Gocloud 的remote viewer 软体示意图
当学生开启虚拟机器后,将虚拟机器所在的网址复制到上述箭头所指定的方框中,即可达成连线。
|
在你登入Gocloud 网站系统后,点选『启动/关闭主机』后,应该会得到如下的画面。如果一切顺利的话,那么你应该会取得至少一个以上的硬碟环境。如下图的2 号箭头处。如果找不到任何硬碟,请与您的授课教师联系。选择正确的磁碟后,请按下『开启机器』的按钮来启动云端虚拟机器。
如果一切顺利,那么你就会得到如下的画面示意图,基本上,我们最重要的是取得如下图1号箭头指的方框处的URL (spice开头那项),请复制该项目,并且将他贴上图1.2.4所需要指定的URL方框中,按下连线(Connect)即可取得如 图1.2.7的云端虚拟机器视窗了!
remote viewer 软体左上方主要有两个基本功能可以选择:
另外请注意,由于目前你应该有两个完全独立的系统,一个是你自己的系统,一个是Gocloud 的云端虚拟机器, 若要操作Gocloud 的云端虚拟机器时,你应该要将滑鼠移动到remote viewer 的视窗内,这样才能够完整的使用虚拟机器的资源!
取得云端Linux 机器后,就能够开始操作Linux 系统了。接下来先来学习如何登入Linux、了解图形界面、文字界面的操作差异, 并建立好『良好的操作行为』,这对于未来的帮助会很大的
本教材预计在训练学员们了解Linux 在伺服器的使用上,应该如何操作与学习,因此使用了CentOS 这套Linux 作业系统来学习。请大家依据教材的内容慢慢实做练习,以理解整个系统的使用!
在图1.2.7的画面中,使用滑鼠左键将萤幕向上拉动,就会出现等待登入的画面,如下所示:
你可以:
本教材提供虚拟机的帐号与密码为『student/student@linux』,请依据此帐号密码来登入系统。
例题:
请第一次登入系统,并且处理好中文的操作界面!同时,家目录底下的档案档名,最好不要有中文存在。
答:
|
如果一切处理顺利,那就可以出现图形化视窗。你可以先到『应用程式』-->『喜好』-->『终端机』点选,点出一个终端机界面, 然后再到画面右上角的三角形点选,就能够看到一些设定值的项目,如下所示:
例题:
在图形界面下先尝试进行目录与档案的管理,这时请使用在最上方工作列『应用程式』隔壁的『位置』选单,点选『家目录』的项目,之后进行如下的动作测试:
|
例题:
预设的中文输入法似乎怪怪的,没有办法正确的输入中文。你该如何设定中文输入法呢?
|
例题:
|
Linux预设的情况下会提供六个Terminal来让使用者登入, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。
系统会将[F1] ~ [F6]命名为tty1 ~ tty6的操作介面环境。也就是说,当你按下[ctrl] + [Alt] + [F1]这三个组合按钮时(按着[ctrl]与[Alt]不放,再按下[F1]功能键), 就会进入到tty1的terminal介面中了。同样的[F2]就是tty2!按下[Ctrl] + [Alt] + [F1]就可以回到原本的X 图形界面中。整理一下登入的环境如下:
例题:
请使用student 的身份在tty2 的画面中登入系统
|
上面显示的内容为:
上述比较重要的资料在第6 行,CentOS 的bash 提示字元通常的格式就是『 [使用者帐号@本主机名工作目录]提示字元』。其中比较重要的项目是:
另外,文字界面等待登入画面的第一、第二行的内容其实是来自于/etc/issue这个档案!
那么如何离开系统呢?其实应该说『登出Linux』才对!登出很简单,直接这样做:
[student@localhost ~]$ exit
|
就能够登出Linux了。但是请注意:『离开系统并不是关机!』基本上,Linux本身已经有相当多的工作在进行,你的登入也仅是其中的一个『工作』而已,所以当你离开时,这次这个登入的工作就停止了,但此时Linux其他的工作是还是继续在进行的!
例题:
请分别以图形界面以及文字界面登入系统(使用tty1 及tty2 登入),登入后,请使用w 这个指令查询谁在系统上?并请以你看到的资料说明哪些使用者透过哪些tty 登入系统。(有个:0 的终端机,那个是什么?)
|
站在伺服器角度的立场来看,使用纯文字模式来进行系统的操作是很重要的!毕竟伺服器通常不会启用图形界面。因此,第一堂课接触过Linux 与登入过Linux 之后,让我们来使用简单的指令查询一下用户家目录里面有哪些资料,以及如何查询自己曾经下达过的指令吧!
请使用一般用户的身份登入Linux 系统,同时启动一个终端机在桌面上。现在让我们来执行两只指令,确认一下如何操作系统与观察输出的资料。
[student@localhost ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
|
使用ls 可以单纯的列出档名,就是上面列出的『Desktop Documents Downloads...』等等的资料。不过并没有显示这个档名相关的各项档案权限资讯,包括时间、容量等等。若需要查阅比较详细的资讯,需要使用ll (LL 的小写) 来处置。
[student@localhost ~]$ ll drwxr-xr-x. 2 student student 6 3月7 19:18 Desktop drwxr-xr-x. 2 student student 6 3月7 19:18 Documents drwxr-xr-x. 2 student student 6 3月7 19:18 Downloads drwxr-xr-x. 2 student student 6 3月7 19:18 Music drwxr-xr-x. 2 student student 6 3月7 19:18 Pictures drwxr-xr-x. 2 student student 6 3月7 19:18 Public drwxr-xr-x. 2 student student 6 3月7 19:18 Templates drwxr-xr-x. 2 student student 6 3月7 19:18 Videos |
第一堂课的此时,你需要注意的是最右边的三个参数,分别是档案容量、档案最后被修改的日期、档名资讯。以『Pictures』档名为例,该档名的容量有6bytes,而最后被修改的日期为『 3月7 19:18 』。至于年份则是本年度的意思。
如果想要查阅根目录(类似windows 的『电脑』项目),则使用如下的指令:
[student@localhost ~]$ ll /
总计32
lrwxrwxrwx. 1 root root 7 2月18 02:54 bin -> usr/bin
dr-xr-xr-x. 4 root root 4096 2月18 03:01 boot
drwxr-xr-x. 20 root root 3320 4月19 03:59 dev
drwxr-xr-x. 129 root root 8192 4月19 03:59 etc
drwxr-xr-x. 3 root root 20 4月14 19:46 home
lrwxrwxrwx. 1 root root 7 2月18 02:54 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 2月18 02:54 lib64 -> usr/lib64
......
|
此时萤幕上显示的为根目录底下的档名,而不是student 的家目录了。这个练习在让操作者了解到,指令后面可以加参数(parameters)。而如果想要知道student 家目录底下有没有『隐藏档』时,可以使用如下的指令:
[student@localhost ~]$ ll -a
总计24
drwx------. 14 student student 4096 3月7 21:32 .
drwxr-xr-x. 3 root root 21 1月3 22:27 ..
-rw-r--r--. 1 student student 18 8月3 2016 .bash_logout
-rw-r--r--. 1 student student 193 8月3 2016 .bash_profile
-rw-r--r--. 1 student student 231 8月3 2016 .bashrc
drwx------. 11 student student 226 3月7 22:12 .cache
drwxr-xr-x. 15 student student 276 3月7 21:29 .config
drwxr-xr-x. 2 student student 6 3月7 19:18 Desktop
......
|
可以发现多了相当多以小数点开头的档名,这些档名在ls 或ll 时并不会出现,但加上『 -a 』这个『 选项(Option) 』之后, 就会开始出现了。这个练习在让操作者了解到,指令后面可以加『选项』来改变指令的处理行为。
最后,如果你想要知道根目录本身的权限,而不是根目录底下的档名,则应该要使用底下的指令:
[student@localhost ~]$ ll -d /
dr-xr-xr-x. 17 root root 4096 2月18 03:01 /
|
你将在萤幕上发现到只有根目录(/) 这个档名存在,而不像刚刚『 ll / 』出现一堆档名资料。亦即一般情况下,ll 是『浏览目录内的档名资讯』,而不是看目录本身。
Tips 以windows 的档案总管来说,通常档名的浏览画面中,左侧为『目录』而右侧为『该目录下的档名』,所以,『 ll 』代表滑鼠点左边的目录, 而萤幕输出右边的档名资料之意。例题:
在终端机界面中输入『 clear 』会有什么效果?
|
例题:
检查一下/var/spool/mail 这个目录(1)里面有几个档案?(2)这个目录本身所修改的时间是什么时候?
|
Linux 的文字界面中,可以用几个简单的方式去检查你曾经下达过的指令,最简单的方法就是使用方向键『上与下』, 不但能够呼叫出之前的指令,也能够再透过方向键『左与右』,与键盘上的『home/end』按键,直接在一行指令的最前面与最后面直接再修改。熟悉这个作法,可以让你快速的编辑一行指令。
但是如果是太久之前做的指令,此时就能够透过历史命令『 history 』来呼叫出来。
例题:
让student 呼叫出历史命令,观察一下曾经执行过ll / 的指令是『第几个』,若想要再次执行,应该如何处理?
|
除了『 !数字』可以重复执行某个指令外,也能够直接透过底下的方式来重复执行历史命令:
例题:
student 曾经输入过ls 这个指令,那我想要重新执行一次以ls 为开头的指令该如何处理?
|
在CentOS 7 底下,预设历史命令会纪录1000 笔,你下次登入后,系统会将上次的历史命令汇入,亦即,上次你下达过50 笔纪录, 则下次启用终端机后,第一个指令会纪录在51 笔。因此,经常查询history 可以让操作者了解以前曾经下达过哪些指令。
离开系统,以终端机界面来说,直接输入exit 或者logout 都可以。以图形界面来说,画面中右上角三角形部份点选后, 出现登入者(student) 的文字,点选后选择『登出』即可。但登出不是关机。关机时,最好能够确认系统上面没有其他工作的用户。因此关机前,建议检查系统上面的用户状态。
[student@localhost ~]$ w
04:59:07 up 1:53, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
student :0 :0 03:59 ?xdm? 23.56s 0.14s gdm-session-worker
student pts/0 :0 03:59 59:31 0.03s 0.03s bash
|
上面表格中,『USER』栏位为登入的使用者,『TTY』就是前面小节谈到的终端机,通常为tty1~tty6。但是在tty1 使用图形界面登入时, 会显示为『 :0 』,亦即图形界面使用终端机名称为:0 之意。另外,每行最后的『WHAT』为该终端机目前使用的指令为何。所以图形界面为透过gdm-session-worker 指令而来,而终端机则使用bash 这个程式。
至于pts/0 则可能是(1)在图形界面启动的终端机,或(2)透过网路连线进来的终端机。并非本机的tty1~tty6 。
从上表看来,目前确实仅有student 在线上,若本机器并非伺服器,则此时应该可以进行关机的行为。关机可以使用如下的指令:
[student@localhost ~]$ poweroff [student@localhost ~]$ halt [student@localhost ~]$ shutdown -h now [student@localhost ~]$ systemctl poweroff |
上述的任何一个指令均可关机。但无论使用哪个指令关机,其实最终都是呼叫最后一个,亦即『 systemctl poweroff 』进行关机的行为。