Linux学习(1)

前言

自从搭了个博客后,学习的欲望特别强烈。恰好这次赶上春招了,而实习岗位的要求基本都是需要熟练操作Linux。虽然我在一些课程中有接触过linux的操作,但是都是简单的基本操作,算不上所谓熟练。因此就索性从头开始学习,并且将学习过程记录于此。

参考资料是我偶然发现的一个博客,本是打算从鸟哥的私房菜看起,但毕竟书本看起来不免乏味,而且内容也有些陈旧了。恰巧发现此博客也是根据鸟哥来学习,并且也比较精炼,索性根据此博客来学习。特此感谢该博主。下面开始正式学习啦!每次的学习不会刻意分哪一次学什么,基本就是学了什么就记什么,比较随性。(估计也没人能看得到我写的,哈哈哈哈)

Linux历史发展

Linux是一套可免费使用和自由传播的类UNIX操作系统。1991年,芬兰赫尔辛基大学学生Linus开发了Linux内核。此后,一大批程序爱好者、软件技术专家对Linux进行修改和完善。Linux操作系统从诞生到现在,其开放、安全、稳定的特性得到越来越多用户的认可,又由于其低成本、自由开发以及安全可靠等优势,促使各国政府和企业纷纷对Linux提供强有力的支持。更详细历史发展可自行百度或谷歌。

Linux相关准备工作

由于在之前的课程中有使用虚拟机安装过Ubuntu,因此索性就使用原有的Ubuntu系统。云计算课程中有使用过3个来进行hadoop的相关操作,因此为了不影响其内部的设置(不容易啊),便使用在嵌入式课堂上安装的具有图形界面的系统。不过,为了使学习能够有更好的效果,因此本次学习基本只在终端进行相关操作。

Linux初步学习

PS.由于这块偏理论,文字很多,因此还是自行阅读比较好。因此这个部分我基本看着博主的内容来学习,下面仅摘抄一些关键点。附上链接:http://www.92csz.com/study/linux/4.htm

Linux系统启动过程

Linux的启动与Windows类似,但Windows我们无法看到启动信息,而Linux则可以看到。Linux系统的启动过程大体分为5个部分:内核的引导、运行init、系统初始化、建立终端、用户登录系统。由于这部分涉及较为底层的知识,与后台维护的联系比较紧密,而我所意向的职业与之关联不大,因此此处也只是做简单了解。

内核引导

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。紧接着由启动设备上的grub程序开始引导linux,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权,然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程**。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的,我们就当它是一个黑匣子,反正是linux内核做了一些列工作,最后内核调用加载了init程序,至此内核引导的工作就完成了。

运行init

init进程是系统所有进程的起点,没有此进程,系统中任何进程都不会启动。而如今init进程也有了不同的发展。

在博客作者所介绍的centos7系统中,其使用的是较早的init系统,首先读取的配置文件为/etc/inittab。(博客链接:http://www.92csz.com/study/linux/4.htm)

而由于旧版本的init系统存在一些问题,因此Ubuntu开发人员重新开发了init系统,称为Upstart的一种新型init系统。(参考博客链接:http://blog.csdn.net/darling757267/article/details/52356354)

由于时间较紧张,而上述的两个init系统在短时间内是无法解释清楚的,并且目前也没有耐心看完,因此init系统的研读暂且告一段落,之后闲暇时应该会重新整理学习。

旧init系统相关重要概念:id(入口标识符)、runlevel(init所处于的运行级别的标识)、action(描述其后的process的运行方式)、process(具体执行程序)。

ps.这里有两个init启动系统的对比,写得很好,下次重点研读:http://www.cnblogs.com/cassvin/archive/2011/12/25/ubuntu_init_analysis.html

系统初始化

此块针对博客作者所介绍的System V initialization的init方式进行学习。(基本照抄)

在init的配置文件中有这么一行:si::sysinit:/etc/rc.d/rc.sysinit,它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。其主要完成工作有:激活交换分区,检查磁盘,加载硬件模块以及其他一些需要优先执行任务。

当rc.sysinit程序执行完毕后,将返回init继续下一步。通常接下来会执行到/etc/rc.d/rc程序。以运行级别3为例,init将执行配置文件inittab中的以下这行:
  l5:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以S开头的启动脚本,将以start参数来运行。而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。

(这里就是该init系统的一个缺点了,System V init需要“拐弯抹角”转好多圈才到达目的地,而Upstart init只需要/etc/init这么一个目录,性能更快更优)

建立终端

init系统初始化结束后,此时基本系统环境已经配置好了,各种初始进程也已经启动。init接下来会打开6个终端,以便用户登录系统。运行mingetty程序能打开终端、设置模式,同时它会显示一个文本登录界面。在该登录界面中会提示用户输入用户名(如有登录密码也需输入),用户输入的用户名将作为参数传给login程序来验证身份。

用户登录系统

当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。Linux的账号验证程序是login,login会接收mingetty传来的用户名作为用户名参数。

命令行界面与图形界面切换

以我使用的Ubuntu为例。其默认进入图形界面,如下图:

image.png

命令窗口切换的快捷键为Ctrl+Alt+F1~F6,可切换至tty1~tty6的命令行窗口。例如:

image.png

如果想切换为图形界面,对应快捷键为Ctrl+Alt+F7。