runlevel (启动级别):    查看命令 :who -r 或 runlevel

        0:halt 关机

        1:单用户模式,直接以管理员身份登录,不需要密码

        2:多用户模式,但是不能挂载nfs

        3:多用户模式

        4:保留未用

        5:图形界面

        6:reboot重启

    默认运行级别在/etc/inittab:

    id:3:initdefault:    默认为3

    我们知道bootloader有lilo、grub、spfdisk等,目前最常用的就是grub;

    grub是放在MBR中,但是MBR总共只有512Bytes,分区表占64Bytes,grub只能用到446Bytes

    grub被分为2个阶段:

        stage 1 :存放grub主程序

        stage 2 :主要配置文件,一般为/boot/grub/menu.lst ————> 其实是链接/boot/grub/grub.conf

来看一下grub.conf:

	default=0			#设定默认启动的title编号,读秒时间结束后,就会启动第一个title
timeout=5 #设置默认读秒为5秒,给用户选择
splashimage=(hd0,0)/grub/splash.xpm.gz #grub背景图片在磁盘的位置
hiddenmenu #隐藏菜单
password --md5 $1$ImLrM$VqU.vu9UCq.M7M.Q0hN6c1 #给grub设定密码
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64) #内核标题,系统名等,可以修改
root (hd0,0) #内核所在的磁盘,(hd0,0)表示第一块盘,第一个分区
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=e39a2639-0c77-4b7e-8c6b-bb34bd658eb4
#内核文件及路径
initrd /initramfs-2.6.32-431.el6.x86_64.img
#虚拟根文件系统

当root用户密码忘记时,我们可以选择单用户模式来修改密码,但是什么人都可以重启然后进入单用户模式

    再就轻易的修改root密码,那是绝对不行的。所以我们可以给grub设置一个密码,先生成密码,然后再加到title上面那一行

	[root@Linux ~]# grub-md5-crypt
Password:
Retype password:
$1$ImLrM$VqU.vu9UCq.M7M.Q0hN6c1

我们可以尝试修复和安装一个grub:

	[root@Linux ~]# grub
grub> root (hd0,0) #判断内核在磁盘的位置
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0) #检查并修复grub
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

我们也可以尝试模拟grub引导加载内核:

先创建两个分区:/dev/hda1、/dev/hda2
[root@Linux ~]# mkdir /mnt/{boot,root} #创建两个目录,boot做引导区,root为根目录
[root@Linux root]# mkdir bin dev home proc sbin tmp var etc lib mnt root selinux sys usr
[root@Linux ~]# mke2fs -j /dev/hda1 #初始化磁盘为ext3格式
[root@Linux ~]# mke2fs -j /dev/hda2
[root@Linux ~]# mount /dev/hda1 /mnt/boot #分别挂载
[root@Linux ~]# mount /dev/hda2 /mnt/root
[root@Linux ~]# grub-install --root-directory=/mnt /dev/hda #安装grub指定安装目录
[root@Linux ~]# cp /boot/vmlinuz-2.6.18-194.el5 /mnt/boot/vmlinuz #将内核和虚拟根目录直接复制过来
[root@Linux ~]# cp /boot/initrd-2.6.18-194.el5.img /mnt/boot/
[root@Linux boot]# mv initrd-2.6.18-194.el5.img initrd-2.6.18-194.el5.img.gz #用file查看initrd文件类型并修改,再解压
[root@Linux boot]# gzip -d initrd-2.6.18-194.el5.img.gz
[root@Linux boot]# cpio -id <initrd-2.6.18-194.el5.img #再用file查看,用 cpio 解压
[root@Linux boot]# vim init #修改init,指定真的根目录,这一步本来是启动过程中,执行程序的结果
mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00 ——> /dev/hda2
[root@Linux boot]# find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz #改完后再用cpio压缩为initrd.gz
[root@Linux boot]# vim grub/grub.conf #配置自己的grub.conf
default=0
timeout=5
title Linux (LFL Computer)
root (hd0,0)
kernel /vmlinuz
initrd /initrd.gz
[root@Linux root]# cp /sbin/init /mnt/root/sbin #复制系统init和bash
[root@Linux root]# cp /bin/bash /mnt/root/bin
并用ldd命令查看他们所依赖的库文件,然后复制到/mnt/root/lib里面
[root@Linux ~]# chroot /mnt/root #测试
[root@Linux root]# vim etc/inittab #设置init配置文件
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
[root@Linux root]# vim etc/rc.d/rc.sysinit #设置默认运行环境
echo -e "Welcome to LFLong Computer "
/bin/bash
[root@Linux root]# chmod +x etc/rc.d/rc.sysinit

续  cpio 命令的用法:

cpio(copy in/out)主要是用来建立或者还原备份档的工具

        -i或--extract  执行copy-in模式,还原备份档。
        -d或--make-directories  如有需要cpio会自行建立目录
        -H<备份格式>  指定备份时欲使用的文件格式。
        --quiet  不显示复制了多少区块。
        -o或--create  执行copy-out模式,建立备份档。
        -c:使用旧ASCII备份格式;
            cpio -id < initrd-2.6.18-194.el5.img    #将该文件(输入重定向)还原
            find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz    #将当前目录下所有文件已newc格式建立备份并压缩为.gz格式

将这个配置好的磁盘拿下来,装在别的没有系统的主机上,开机就会出现自己配置的界面了,这就是基本的开机过程。这只是一个简单的模拟,而真正的启动过程会比这个复杂很多值得我们去学习和研究。

参考:鸟哥Linux私房菜,马哥Linux教学视频。

Linux启动(续)的更多相关文章

  1. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  2. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  3. Linux启动过程详述

    http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...

  4. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  5. Linux启动与登陆环境

    linux启动流程 参考:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 加载内核,首先读入/boot 目录下的内核文件. ...

  6. linux启动流程

    看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...

  7. Linux 启动过程分析

    本文仅简单介绍Linux的启动过程,在此基础上做简要的分析.对于Linux启动过程中内部详细的函数调用不做介绍,只是希望本文能给新手起到一个抛砖引玉的作用,以便深入研究Linux的启动过程.下图基本展 ...

  8. [转载] Linux启动过程详解-《别怕Linux编程》之八

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...

  9. python实现Linux启动守护进程

    python实现Linux启动守护进程 DaemonClass.py代码: #/usr/bin/env python # -*- coding: utf-8 -*- import sys import ...

  10. Linux启动盘制作

    1.下载Universal-USB-Installer软件,在电脑上插入空U盘,打开软件,依下列所示步骤进行 2.点击同意 3.点击版本选择框,会出现它支持的系统镜像文件的版本,包括win7.win8 ...

随机推荐

  1. cocos2d-x《农场模拟经营养成》游戏完整源代码

    cocos2d-x农场模拟经营养成游戏完整源代码,cocos2d-x引擎开发,使用JSON交互,支持IOS与 Android,解压后1016MB. 非常强大的游戏源代码         完整游戏源代码 ...

  2. HIT 2255 Not Fibonacci(矩阵高速幂)

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; cons ...

  3. Centos7 网络出错(failed to start LSB: Bring up/down networking )

    这是我更换了VM虚拟机内存,重启后无法连接网络. 然后这是因为NetworkManager.service这个程序造成 解决方法: systemctl disable NetworkManager.s ...

  4. Django 框架篇(四) : 视图(view)详解 以及 路由系统(url)

    |--Django的View(视图) |-- CBV和FBV: |-- 给视图增加装饰器: |-- request对象: |-- response对象: |-- Django的路由系统(url): | ...

  5. 日天的终生大事(dp)

    日天的终生大事 题目描述 日天学长向妹子表白了,妹子说:“日天你那么聪明,回答我一个问题就答应你.你告诉我,L位K进制数有多少个?”日天表示这个问题太简单了,要求提高难度.妹子想了想说:“那么我增加一 ...

  6. Oracle数据库IP访问限制(IP白名单黑名单)

    1.编辑sqlnet.ora 内容为: #允许访问的IP(白名单) TCP.INVITED_NODES=(127.0.0.1,192.168.56.109,ip2,ip3,..,..本地IP..)若使 ...

  7. chgrp---改变文件或目录所属的用户组

    chgrp命令用来改变文件或目录所属的用户组.该命令用来改变指定文件所属的用户组.其中,组名可以是用户组的id,也可以是用户组的组名.文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描 ...

  8. java web应用调用python深度学习训练的模型

    之前参见了中国软件杯大赛,在大赛中用到了深度学习的相关算法,也训练了一些简单的模型.项目线上平台是用java编写的web应用程序,而深度学习使用的是python语言,这就涉及到了在java代码中调用p ...

  9. 使用bitmap处理海量数据

    bitmap是一个十分实用的结构.所谓的Bit-map就是用一个bit位来标记某个元素相应的Value, 而Key即是该元素.因为採用了Bit为单位来存储数据,因此在存储空间方面,能够大大节省.  适 ...

  10. JNI之——Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform错误的解决

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46605003 在JNI开发中,Java程序须要调用操作系统动态链接库时,报错信息: ...