1、Lesson02 Linux引导与关机,内容提要,第一次登录 基本命令 正确的关机方式 Linux引导内幕 引导加载程序 启动脚本,第一次登录,第一行显示的是你的Linux Distribution与版本,第二行显示的是Linux内核版本,以及你的硬件等级 ( i686 ),主机名称,登录名称,要进入图形模式,输入startx再回车即可,注意密码的输入没有回显,第一次登录,如何退出? 输入exit,回车 输入logout,回车 注意:没有关机,只是结束当前作业,第一次登录,如果启动图形界面则看不到上面的文字登录框,如何使用命令? 图形模式与文字模式切换 Ctrl+Alt+F1F6 文字界面tt
2、y1tty6 Ctrl+Alt+F7/F8 图形界面 使用终端 屏幕上点击鼠标右键,选择“新建终端” 重启到文字模式 输入命令init 3回车即可 修改配置文件,使得默认启动到文字模式 在命令行输入gedit /etc/inittab回车,把第一行由id:5:initdefault:修改到id:3:initdefault:,保存后重启,基本命令,命令的输入格式为:command -options param1 param2 命令 选项 参数1 参数2 区分大小写 command为命令的名称 中括号不存在,只是表示可选,进行参数设定时,通常为“-”,若为完成参数名称,则输入“-”符号 参数可谓选
3、项的参数,或者命令的参数 command,-options,param这几项之间以空格隔开,空格无论多少,都视为1个 指令太长时,可以使用“”继续到下一行,基本命令,举例:空格与选项、参数roothexy # ls -al /root roothexy # ls -al /root举例:大小写 Date date DATE 有何不同?,基本命令,显示日期的命令:date 直接输入date hexyhexy $ date 2007年 08月 30日 星期四 05:02:12 CST 显示年月日 hexyhexy $ date +%y/%m/%d 07/08/30 hexyhexy $ date
4、+%Y/%m/%d 2007/08/30 显式小时和分钟 hexyhexy $ date +%H:%M 05:08 hexyhexy $ date +%h:%m8月:08,基本命令,在线求助命令:man 格式:man commandName 用法: 空格或者Page Down键向后翻页 Page Up键向前翻页 输入“/单词”来查询关键词或者词组,这里不区分大小写 通过SEE ALSO部分可以查看相关的命令 通过q键退出 Home键回到最前面 End键至末尾 回车键查看下一行 举例:man date,基本命令,日历显示命令:cal 直接输入cal显式当前月份的日历 hexyhexy doc$
5、cal输入cal 年份,显式某一年的日历 hexyhexy doc$ cal 2007输入cal 月份 年份,显式某年某月的日历 hexyhexy doc$ cal 8 2007,基本命令,错误信息的查看 万一输入了错误的指令怎么办?可以藉由屏幕上的错误信息发现问题所在。如: hexyhexy $ DATE bash: DATE: command not found 表明指令找不到,也就是系统上没有DATE这个指令 又如: hexyhexy $ cal 13 2002 cal: illegal month value: use 1-12 错误信息提示月份超出范围了。,基本命令,简单计算器:bc
6、 直接输入表达式,回车即计算结果,默认只显示整数值 输入quit回车即退出 基本运算符:+ 加法 - 减法 * 乘法 / 除法 指数 % 余数 输入scale=数字,控制小数点的位数为你需要的数字,基本命令,如何终止命令执行?q:很多命令的默认退出命令就是输入q键,如man或者more等命令 按下Ctrl+c 例如: hexyhexy $ find / -name “*a*“,正确的关机方式,Linux下面强烈建议不要通过直接关闭电源的方式来关机! Linux/Unix系统经常掉电可能比Windows还要严重!极有可能导致文件系统的损坏! 可以通过who命令查看当前使用系统的用户。 使用正确的
7、关机指令:如shutdown或者reboot 关机之前最好强制将缓存写入硬盘,正确的关机方式,命令:sync 在 Linux 系统中,为了加快数据的读写速度,默认的情况下,某些数据将不会直接被写入硬盘,而是先暂存在内存当中,如此一来,如果一个数据被你重复的改写, 那么由于他尚未被写入硬盘中,因此可以直接由内存当中读取出来,在速度上一定是快上相当多的。不过,万一当你重启或者是关机,或者是不正常断电的情况下,由于数据尚未被写入硬盘当中,所以就会造成数据的更新不正常。这个时候就需要sync命令来把缓存中的数据写入硬盘中。所以,在系统关机或重启之前,最好多执行几次sync。,正确的关机方式,命令:sh
8、utdown shutdown会通知系统内的各个进程,并且将通知系统中的系统run-level内的一些服务来关闭。 Shutdown可以实现: 可以自由选择关机模式:是要关机、重启或进入单用户模式均可。 可以设定关机时间: 可以设定成现在立刻关机, 也可以设定某一个特定的时间才关机。 可以设置关机信息:在关机之前,可以将自己设定的消息传送给在线用户。 可以仅发出警告信息:有时有可能你要进行一些测试,而不想让其它的使用者干扰,或者是明白的告诉使用者某段时间要注意一下!这个时候可以使用 shutdown来吓一吓使用者,但却不是真的要关机 可以选择是否要 fsck 检查文件系统 。,正确的关机方式,
9、命令:shutdown shutdown -t 秒数 -rkhcfF 时间 信息 -t 秒数 意思是动作在XX秒之后开始执行 -k 意思是不要真的关机,只是发送警告信息 -r 意思是在系统的服务停止之后重新启动 -h 意思是在系统的服务停止之后关机 -f 意思是重新启动后略过fsck工具的磁盘检查 -F 意思是重新启动后执行fsck工具的磁盘检查 -c 意思是取消已经在运行的shutdown命令 时间可以是 now代表立即执行 hh:mm 今天的几点几分 +mm mm分钟之后,now等价于+0,正确的关机方式,命令shutdown举例 shutdown -h now 立刻关机 shutdown
10、 -h 20:25 系统在今天的 20:25 分会关机 shutdown -h +10 系统再过十分钟后自动关机 shutdown -r now 系统立刻重启 shutdown -r +30 The system will reboot再过三十分钟系统会重新开机,并显示后面的信息。 shutdown -k now This system will reboot仅发出警告信息,吓唬人!,正确的关机方式,简单命令reboot halt poweroff reboot 其实与 shutdown -r now 几乎相同。不过,建议在关机之前还是将数据回填的指令下达一次再说: roottest root
11、# sync; sync; sync; reboot halt 和 poweroff 都是用来关机的,一般在忘记了shutdown怎么用的情况下使用。,Linux引导内幕,引导是开机的专业术语 引导的主要任务 加载内核到内存 执行各种初始化 Linux的引导方式 自动方式:无须管理员干预 手动方式:系统先自动执行一些过程,然后在运行大多数初始化脚本之前,把控制权力交给管理员。这时候计算机处于单用户模式。通常在系统出现故障时才使用手动方式。,Linux引导内幕,典型的引导过程: 加载并初始化内核 检测和配置设备 创建自发的系统进程 管理员参与(如果是手工引导) 执行系统初始化脚本 多用户使用,L
12、inux引导内幕,阶段1:加载并初始化内核 内核也是一个程序,它的路径通常是/vmlinuz或者/boot/vmlinuz,现在的Linux版本通常是在/boot/vmlinuz-内核版本号,然后让/boot/vmlinuz链接到它。 加载分为两个阶段: 计算机加电后,执行存储在ROM中的引导代码,然后ROM反过来从磁盘加载引导程序到内存。这里与Linux无关。 引导程序载入Linux内核,内核执行内存检测以确定有多少RAM可用。内核为自己划分一块固定大小的实际内存空间,这部分空间只有内核能够用。,Linux引导内幕,阶段2:检测和配置设备 内核的第一项任务是就检查机器的环境以确定计算机包含哪
13、些硬件。 内核开始执行时,它试图找到并初始化已经告诉它的每一个设备。大多数内核为它们所找到的每一个设备打印一条专门的信息。 现在的Linux内核,大多数都能够通过探测设备总线来自动检测硬件变化,并试图找到匹配的驱动程序。 那些没有检测到设备或者没有响应探测的驱动程序或者没有找到驱动程序的设备都将禁用。,Linux引导内幕,阶段3:创建自发的系统进程 一旦完成硬件配置,内核就会创建几个“自发”进程。也就是说,这些进程不是由系统的fork机制创建的。 在linux上,看不到进程ID号(PID)为0的进程。进程init的PID一定为1,其父进程的ID号(PPID)为0。其他的自发进程包括内存和硬盘数
14、据的处理进程,如kflushd kupdate kpiod kswapd等 一旦自发进程创建完毕,内核在引导阶段的任务就完成了。但是大多数Linux的daemon进程都没有创建,所以现在还不能处理如用户登录之类的事情。,Linux引导内幕,阶段4:管理员参与(如果是手工引导) 如果系统以单用户模式进行引导,那么在init启动时,内核会通知init实际要引导的是单用户模式。init进程最后会把控制权交给sulogin,sulogin提示用户输入root口令。如果密码输入正确,系统将生成一个root shell。用户可以按下Ctrl+D绕过单用户模式而继续进入到多用户模式。 在root shell
15、中,系统通常只安装了root分区,需要其他分区时管理员必须手工安装,而且可能还需要手工执行fsck命令以检查和修复文件系统。 退出该root shell时,系统将继续引导进入多用户模式。,Linux引导内幕,阶段5:执行系统初始化脚本 由init根据一定的算法来选择并运行启动脚本。,Linux引导内幕,阶段6:多用户使用 为了响应用户登录请求,必须有一个getty进程监听终端或者控制台。init进程直接生成这些getty进程,完成引导过程。init还可以根据需要,生成图形登录系统,例如xdm或者gdm。,引导加载程序,Linux有两种流行的引导加载程序: LILO:传统的Linux引导加载程序
16、,非常稳定而且有丰富的文档。LILO的安装与配置需要分成两个步骤 设定/etc/lilo.conf这个配置文件 用lilo命令改写MBR或者super block GRUB:Linux引导加载程序的新贵,更加灵活而复杂,基本垄断了新的Linux发行版本。 修改配置文件/boot/grub/grub.conf即可,LILO的开机信息写入到/dev/hda这块硬盘的MBR当中。如果是Super Block,那么必须使用逻辑分区的代号,如/dev/hda5,引导加载程序,配置文件/etc/lilo.conf详解:整体设置部分 prompt Compact delay=50 default=linux
17、-2.4.7 boot=/dev/hda map=/boot/map install=/boot/boot.b Linear Lba32 Password=1234567 message=/boot/message,强制出现boot的开机信息,可以整合一些读取的扇区,使得map较小,适合软盘启动时使用,等待用户输入的时间延迟,单位是0.1秒,超时则使用default启动,没有default则用第一个label,设置进入LILO的密码。,设置关于LILO的信息。,引导加载程序,配置文件/etc/lilo.conf详解:个性设置部分 image=/boot/vmlinuz-2.4.7-10 lab
18、el=linux-2.4.7 read-only root=/dev/hda1 other=/dev/hdb1 label=Windows2k,用来引导的内核,可以有多个,启动菜单显示的文本,注意用TAB隔开,开机扇区挂载为只读,装载为根目录的磁盘,如果是非Linux内核就以other来设定引导磁盘扇区,同样的要有label 来表示这个引导扇区的名称,引导加载程序,LILO的安装 在准备好配置文件之后,lilo的安装非常简单,只要在命令行输入lilo回车即可。该命令会自动寻找/etc/lilo.conf文件来进行安装,如果该文件不存在,则显示“/etc/lilo.conf : No such
19、file or directory”。如果找到则显示安装的label,并在默认label后面打“*”。如: root hexy # lilo Added linux-2.4.7 * Added Windows2k,引导加载程序,LILO的使用 如果安装好了LILO,当系统引导时,LILO会打印如下的提示符: LILO: 用户可以按下TAB键以显示已经定义好的Label LILO: linux-2.4.7 Windows2k LILO: 可以直接输入label启动需要的系统,如果达到超时限制用户都没有如何输入,那么将直接采用default进行引导,引导加载程序,使用LILO注意事项 成功运行li
20、lo之前不要重启系统! 最好先运行lilo -t来测试配置而不是真正安装,如果一切正常,再用lilo命令进行安装,引导加载程序,使用GRUB的好处 GRUB可以让您在开机的时候自行编辑与修改启动配置项,有点像是bash的指令模式; GRUB可以自动动态寻找配置文件,亦即它可以依据/boot/grub/grub.conf的内容而改变其设置。因此,修改启动配置只要改/boot/grub/grub.conf即可,不需要再重新安装GRUB! 注意:很多Linux发行版本都建立了该配置文件的链接 /boot/grub/menu.lst /etc/grub.conf,引导加载程序,GRUB的硬盘代号 GR
21、UB里面的硬盘代号与LILO还有Linux传统的代号不一样,他的代号有点像如 (hd0,0) hd指的是IDE的硬盘,而里面的第一个0代表他是第一个IDE的master,而第二个0代表他是第一块分区,所以这个代号就是hda1,引导加载程序,GRUB的配置文件/boot/grub/grub.conf default=1 timeout=5 splashimage=(hd0,1)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-8.el5) root (hd0,1) kernel /vmlinuz-2.6.18-8.el5 ro root=LA
22、BEL=/ rhgb quiet initrd /initrd-2.6.18-8.el5.img title WindowsXP rootnoverify (hd0,0) chainloader +1,设置默认系统,第一个为0,超时设置 单位为秒,背景图片 设置,隐藏引导加载选择菜单,第一个启动配置,启动根目录所在磁盘,内核位置,引导扇区所在磁盘,引导加载程序,GRUB的安装过程 输入grub开始配置过程 使用 root 磁盘代号 选择启动根目录所在磁盘代号 使用 setup 磁盘代号 选择MBR或Super block直接安装 使用quit离开 grub,引导加载程序,GRUB安装实例:Su
23、perBlock,引导加载程序,GRUB安装实例:MBR,引导加载程序,常见引导问题的处理: 问题1:安装好了 Linux 之后,在开机的过程中却只出现”LI”就不动了!怎么办? 这个问题可能发生的原因是LILO没有设定好,或者是由于Linux安装在非/dev/hda ( MBR )的硬盘之中, 解决的方法可以如下: 1. 用 Linux 光盘开机,然后在出现 boot: 处输入linux root=/dev/hda1(记得linux安装在哪个分区?)顺利开机之后,以 vi 修改 /etc/lilo.conf 将linear这一行取消(如果没有这一行的话,那就在 lilo.conf 中加入吧!
24、)然后执行lilo再取出光盘并重新开机试试看; (待续),引导加载程序,常见引导问题的处理: 问题1(续) 2. 进入 BIOS ,将硬盘的 mode 改成 LBA 试看看; 3. 将Linux往前面一点的扇区安装,例如你可能安装在 /etc/hdc1 ,那你可以重新安装Linux在/dev/hda2 试看看 制作启动盘的办法: 安装时制作 采用命令 root hexy root# mkbootdisk -device /dev/fd0 uname -r Insert a disk in /dev/fd0. Any information on the disk will be lost. P
25、ress to continue or C to abort:,引导加载程序,常见引导问题的处理 问题2:我不要玩Linux了,如何移除LILO ? 只要以Windows或者DOS启动盘启动系统,然后输入:fdisk /mbr就可以将LILO自MBR当中移除。 问题3:无法正常的进入LILO怎么办? 使用Linux启动盘启动,在出现boot: 的时候,输入linux -s就可以启动了。这里请特别注意,那个linux指的是 LILO中配置的label名称。-s指的是进入单人维护模式登入。,启动脚本,init执行 内核加载之后,由内核执行的第一个程序就是 /sbin/init。而这个程序第一个目标
26、当然就是确定主机是要以那种模式(通常叫run level)登录。这个时候就必须要以/sbin/init来加载/etc/inittab的信息。 Linux到底有那些run level(运行级别)? 可以打开/etc/inittab来看看,启动脚本,执行级别(来自/etc/inittab) # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode (类似于安全模式) # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3
27、 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) id:5:initdefault: #设置默认执行级别 常用的就是3和6,千万别把initdefault设置到0和6,启动脚本,机器引导时,init从运行级0开始一级一级往上运行到/etc/inittab中所设置的默认级别。/etc/inittab定义了系统进入每一个级别时要运行的命令,并且为相邻运行级别的过渡进行了控制。,启动脚本,init的第一个执行内容 /etc/rc.d/rc.sysinit 设置主机名称
28、 设置PATH 设置网络状态 启动SWAP 检查文件系统(上次是否正常关机?) 设置系统参数(/proc) 检查、挂载文件系统 设置时钟 将启动信息用dmesg写入到/var/log/dmesg中,启动脚本,init执行运行级的各脚本 在/etc/rc.d目录下面可以看到8个目录和3个文件,目录rc0.drc6.d 分别代表了各个run-level需要执行的脚本。而在这些目录中的文件都是以S或者K开头,并接两位数的数字与该服务的名称所组合而成的。这些文件全部是链接文件,均指向到/etc/rc.d/init.d这个目录下的系统服务名文件。这些脚本都能识别start stop restart参数。
29、 S开头表示启动该服务,K开头表示杀死该服务,而两位数字则代表执行顺序。例如S12syslog会比S90crond更早被执行。,启动脚本,init执行运行级的各脚本 当init从低的运行级别向高的运行级别过渡时,它安装数字递增地运行所有以S开头的、带有start参数的脚本。 当init从高的运行级别向低的运行级别过渡时,它按照数字递减地运行所有以K开头的、带有stop参数的脚本。 脚本的目录由当前运行级别决定,例如运行级别为3,则目录是/etc/rc3.d/ 初始化脚本执行之后,最后执行/etc/rc.d/rc.local,通常进行个性化设置。可以说,rc.local是作为启动过程的一部分最后运行的脚本。,启动脚本,RedHat系列的特殊功能 一旦看到“Welcome to Red Hat Linux”这则消息,用户可以按下“i”键进入确认模式,控制启动过程 注意:Red Hat并没有让用户确认是否已经按下了正确的键,它继续安装本地文件系统、激活SWAP分区、加载键映射文件并定位它的内核模块,只有当它运行到级别3时,才真正提示用户进行确认。,启动脚本,切换运行级别的命令 telinit init 命令之后直接跟目标运行级别即可。 举例:(除了不太友好之外,跟reboot功能几乎一样),小结,如何正确开关机 引导过程,