Linux系统启动流程· BIOS MBR:Boot Code. 执行引导程序- GRUB 加载内核。 执行init runlevel. Unux系统的启动过程大体上可分为五部分:内核的引导、运行int、系统初始化、建立 终端、用户登录系统。 Unux系统的init进程经历了两次重大的演进,传统的sysvinit已经逐渐出历史舞台,新 的UpStart和systemd各有特点,越来越多的Unux发行版采纳了systemd。.Systemd的 目的是取代Uix时代以来一直在使用的init系统,以便于能够在进程启动的过程中更有效 地引导加载服务。Systemd之所以更快是因为它使用的脚本更少,并且尽量并行运行更多的 任务。自20i0年推出Fedora15版本以来Red Hat就将Systemd作为默认功能。作为其操作 系统计划的一部分 m中 ystemd加强G cker的支持方式。 Centos7的第三 己经提供了XFS的选项,但是默认还是使用ext4。FS支持高达500TB的容量,而xt4仅支 持50TB。不幸的是,除了备份和恢复之外目前还没有方法可以让用户从ext4或btis文件系 统上迁移到XFS。 具体参见文章htp:/w.linuxidc.com/Linux/2014-12/110383.htm www.linuxidc.com
Linux 系统的启动过程大体上可分为五部分:内核的引导、运行 init、系统初始化、建立 终端、用户登录系统。 Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新 的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 systemd。Systemd 的 目的是取代 Unix 时代以来一直在使用的 init 系统,以便于能够在进程启动的过程中更有效 地引导加载服务。Systemd 之所以更快是因为它使用的脚本更少,并且尽量并行运行更多的 任务。自 2010 年推出 Fedora 15 版本以来 Red Hat 就将 Systemd 作为默认功能。作为其操作 系统计划的一部分,Red Hat 希望通过 Systemd 加强 CentOS 7 对 Docker 的支持方式。 CentOS 7 的第三个重大变化是使用 XFS 替代 ext4 作为默认的文件系统。虽然在 CentOS 6 中 已经提供了 XFS 的选项,但是默认还是使用 ext4。XFS 支持高达 500TB 的容量,而 ext4 仅支 持 50TB。不幸的是,除了备份和恢复之外目前还没有方法可以让用户从 ext4 或 btrfs 文件系 统上迁移到 XFS。 具体参见文章 http://www.linuxidc.com/Linux/2014-12/110383.htm www.linuxidc.com
Systemd SysVinit Service Related Co Miscellancous Commands ystemd New Comman rought to you hy L LNOX DE 内核引导 当计算机打开电源后,首先是B1OS开机自检,按照B1Os中设置的启动设备(通常是硬 盘)来启动。紧接着由启动设备上的grub程序开始引导Uux,当引导程序成功完成引导任 务后,Linux从它们手中接管了CpU的控制权,然后CpU就开始执行Linux的核心映象代码, 开始了iux启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的, 我们就当它是一个黑厘子,反正是iux内核做了一些列工作,最后内核调用加载了init程 序,至此内核引导的工作就完成了。交给了下一个主角iit. 运行init it进程是系统所有进程的起点,您可以把它比拟成系统所有进程的老祖宗,没有这个 进程,系统中任何进程都不会启动。init程序首先是需要读取配置文件/etc/inittab.inittab 是一个不可执行的文本文件,它有若干行指令所组成。关于各指令的具体说明这里不想阐述, 因为对于初学者的您来说,可能搞不明白。不过没有关系,您也不需要去搞明白,以后iux 用的多了,自然会明白。 www.linuxidc.com
内核引导 当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬 盘)来启动。紧接着由启动设备上的 grub 程序开始引导 Linux,当引导程序成功完成引导任 务后,Linux 从它们手中接管了 CPU 的控制权,然后 CPU 就开始执行 Linux 的核心映象代码, 开始了 Linux 启动过程。也就是所谓的内核引导开始了,在内核引导过程中其实是很复杂的, 我们就当它是一个黑匣子,反正是 Linux 内核做了一些列工作,最后内核调用加载了 init 程 序,至此内核引导的工作就完成了。交给了下一个主角 init. 运行 init init 进程是系统所有进程的起点,您可以把它比拟成系统所有进程的老祖宗,没有这个 进程,系统中任何进程都不会启动。init 程序首先是需要读取配置文件 /etc/inittab. inittab 是一个不可执行的文本文件,它有若干行指令所组成。关于各指令的具体说明这里不想阐述, 因为对于初学者的您来说,可能搞不明白。不过没有关系,您也不需要去搞明白,以后 Linux 用的多了,自然会明白。 www.linuxidc.com
系统初始化 在init的配置文件中有这么一行:“s:sysinit:/etc/rc.d/rc.sysinit”它调用执行了 “etc/rc.dr .sysinit 文件,而 一个bash shell的脚本,它主要是完成 些系统初 始化的工作,r心5 ysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有: 激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。 当rc.sysinit程序执行完毕后,将返回init继续下一步.通常接下来会执行到“/etc/rc.drc” 程序。以运行级别3为例,init将执行配置文件inittab中的以下这行: I5:5:wait:/etc drc5这一行表示以5为参数运行 c.d/re",“/etc/rc.drc”是一个shel 脚本,它接受5作为参数,去执行“/Vetc/rc.drc5.d 目录下的所有的c启动脚本 “/etc/rc.drc5.d/”目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启 动脚本,真正的rc启动脚本实际上都是放在“/etc/rc.d/int.d/”目录下。而这些rc启动脚 本有着类似的用法,它们一般能接受start、stoD、restart、status等参数。“Jetc/rc,d/rc5.d/" 中的rc启动脚本通常是K或S开头的连接文件,对于以以S开头的启动脚本,将以sat参 数来运行。而如果发现存在相应的脚本也存在K打头的连接 而且已经处于运行态了(以 “var/lock/subsys/”下的文件作为标志),则将首先以stop为参数停止这些已经启动了的 守护进程,然后再重新运行。这样做是为了保证是当iit改变运行级别时,所有相关的守护 进程都将重启。 建立终端 rc执行完毕后,返回iit。这时基本系统环境已经设置好了,各种守护进程也已经启动 nt接下来会打开6个终端,以便用户登录系统。在nab中的以下6行就是定义了6 个终端 1:4355:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:espawn:/sbin/mingettytty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序, mingetty程序能打开终端、设置模式。同时它会显示 个文本录界面这个界面就是我有们 经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为 参数传给ogin程序来验证用户身份。 用户登陆系统 对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登 录成功后可以直接进入KDE、Gome等窗口管理器。而本文主要讲的还是文本方式登录的 www.linuxidc.com
系统初始化 在 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 改变运行级别时,所有相关的守护 进程都将重启。 建立终端 rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动 了。init 接下来会打开 6 个终端,以便用户登录系统。在 inittab 中的以下 6 行就是定义了 6 个终端: 1:4355:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 从上面可以看出在 2、3、4、5 的运行级别中都将以 respawn 方式运行 mingetty 程序, mingetty 程序能打开终端、设置模式。同时它会显示一个文本登录界面,这个界面就是我们 经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为 参数传给 login 程序来验证用户身份。 用户登陆系统 对于运行级别为 5 的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登 录成功后可以直接进入 KDE、Gnome 等窗口管理器。而本文主要讲的还是文本方式登录的 情况:当我们看到 mingetty 的登录界面时,我们就可以输入用户名和密码来登录系统了。 Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。然 www.linuxidc.com
后login会对用户名进行分析:如果用户名不是root,且存在“/etc/nologin”文件,login 将输出nologin文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。只有 “/etc/se 文件,则没有其他限制。 在分析完用户名后,login将搜索“/etc/passwd”以及“/etc/shadow”来验证密码 以及设置账户的其它信息,比如:主目录是什么、使用何种shl。如果没有指定主目录, 将默认为根目录:如果没有指定shell,将默认为“bin/bash”。 login程序 功月 ,会向对应的终端在输出最近一次登录的信息(在“ar/log//lastlog 中有 记录),并检查用户是否有新邮件(在“/us/5pol/mai/”的对应用户名目录下)。然后开始 设置各种环境变量:对于bash来说,系统首先寻找“/etc/profile”脚本文件,并执行它: 然后如果用户的主目录中存在.bash_profile文件,就执行它,在这些文件中又可能调用了 其它配置文件,所有的配置文件执行后后,各种环境变量也设好了,这时会出现大家熟悉的 命令行提示符,到此整个启动过程就结束了。 图形界面与命令行界面切换 Uu默认提供了六个命令窗口终端机让我们来登录。默认我们登录的就是第一个窗口,也 就是tty1,这个六个窗口分别为ttyl,ty2.ty6,您可以按下Ctl+At+F1~F6来切换它 们。如果您安装了图形界面,默认情况下是进入图形界面的,此时您就可以按Ct+At+F1 ~F6来进入其中一个命令窗口界面。当您进入命令窗口界面后再返回图形界面只要按下C +At+F7就回来了。如果您用的vmware虚拟机,命令窗口切换的快捷键为At+Space F1F6。如果您在图形界面下请按At+Sht+Ct+F1F6切换至命令窗口。 学会使用快捷键 ·C+C:这个是用来终止当前命令的快捷键,当然您也可以输入一大串字符,不想让它 运行直接Ctl+C,光标就会跳入下一行。 ·Tb:这个键是最有用的键了,也是我敲击概率最高的一个键。因为当您打一个命令打 一半时,它会帮您补全的。不光是命令,当您打一个目录时,同样可以补全,不信您试 。Ct+D:退出当前终端,同样您也可以输入exit。 ·Ct+Z:暂停当前进程,比如您正运行一个命令,突然觉得有点问题想暂停一下,就 可以使用这个快捷键。暂停后,可以使用g恢复它。 。Ct+L:清屏,使光标移动到第一行。 学会查询帮助文档一man 个man通常是用来看一个命令的帮助文档的。格式为”man命令”例如输入命令: man Is则会显示如下结果 LS(1) User Commands LS(1) www.linuxidc.com
后 login 会对用户名进行分析:如果用户名不是 root,且存在 “/etc/nologin” 文件,login 将输出 nologin 文件的内容,然后退出。这通常用来系统维护时防止非 root 用户登录。只有 “/etc/securetty” 中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 可 以在任何终端上登录。”/etc/usertty” 文件用于对用户作出附加访问限制,如果不存在这个 文件,则没有其他限制。 在分析完用户名后,login 将搜索 “/etc/passwd” 以及 “/etc/shadow” 来验证密码 以及设置账户的其它信息,比如:主目录是什么、使用何种 shell。如果没有指定主目录, 将默认为根目录;如果没有指定 shell,将默认为 “/bin/bash”。 login 程序成功后,会向对应的终端在输出最近一次登录的信息(在 “/var/log/lastlog” 中有 记录),并检查用户是否有新邮件(在 “/usr/spool/mail/” 的对应用户名目录下)。然后开始 设置各种环境变量:对于 bash 来说,系统首先寻找 “/etc/profile” 脚本文件,并执行它; 然后如果用户的主目录中存在 .bash_profile 文件,就执行它,在这些文件中又可能调用了 其它配置文件,所有的配置文件执行后后,各种环境变量也设好了,这时会出现大家熟悉的 命令行提示符,到此整个启动过程就结束了。 图形界面与命令行界面切换 Linux 默认提供了六个命令窗口终端机让我们来登录。默认我们登录的就是第一个窗口,也 就是 tty1,这个六个窗口分别为 tty1,tty2 . tty6,您可以按下 Ctrl + Alt + F1 ~ F6 来切换它 们。如果您安装了图形界面,默认情况下是进入图形界面的,此时您就可以按 Ctrl + Alt + F1 ~ F6 来进入其中一个命令窗口界面。当您进入命令窗口界面后再返回图形界面只要按下 Ctrl + Alt + F7 就回来了。如果您用的 vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果您在图形界面下请按 Alt + Shift + Ctrl + F1~F6 切换至命令窗口。 学会使用快捷键 Ctrl + C:这个是用来终止当前命令的快捷键,当然您也可以输入一大串字符,不想让它 运行直接 Ctrl + C,光标就会跳入下一行。 Tab: 这个键是最有用的键了,也是我敲击概率最高的一个键。因为当您打一个命令打 一半时,它会帮您补全的。不光是命令,当您打一个目录时,同样可以补全,不信您试 试。 Ctrl + D: 退出当前终端,同样您也可以输入 exit。 Ctrl + Z: 暂停当前进程,比如您正运行一个命令,突然觉得有点问题想暂停一下,就 可以使用这个快捷键。暂停后,可以使用 fg 恢复它。 Ctrl + L: 清屏,使光标移动到第一行。 学会查询帮助文档 — man 个 man 通常是用来看一个命令的帮助文档的。格式为 ” man 命令 ” 例如输入命令: man ls 则会显示如下结果: LS(1) User Commands LS(1) www.linuxidc.com
NAME Is-list directory contents SYNOPSIS Is [OPTION].[FILE]. DESCRIPTION List information about the FILEs(the current directory by default). Sort entries alphabetically if none of-cftuvSUX nor-sort. Mandatory arguments to long options are mandatory for short options too. aal训 do not ignore entries starting with. -A,-almost-all do not list implied.and. -author with-山,print the author of each file这样可以查看“ls”这个命令的帮助文档 进入后按‘g'健退出 inux系统目录结构 一般的Liux系统的文件结构如下图所示。 www.linuxidc.com
NAME ls - list directory contents SYNOPSIS ls [OPTION]. [FILE]. DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor -sort. Mandatory arguments to long options are mandatory for short options too. -a, -all do not ignore entries starting with . -A, -almost-all do not list implied . and . -author with -l, print the author of each file 这样可以查看 “ls” 这个命令的帮助文档, 进入后按 ‘q’ 键退出 Linux 系统目录结构 一般的 Linux 系统的文件结构如下图所示。 www.linuxidc.com