一.有关硬盘的理论知识
1.# cat /proc/partitions --->这是用来查看磁盘分区的情况,这是系统启动时读取的系统分区信息
2.磁盘要想用,必须要挂载到系统的倒状树上,才能使用。
3.磁盘要想使用,必须要低格,就是创造磁道的,要想存数据,还需要高格。
4.每一个文件都对应一个inode号,系统是通过inode号来查找文件的
5.gnome-mount -t -d /dev/hdc --->关在设备
解释:gnome-mount 是以图形界面的形式挂载的
-t 是以文本形式挂载的,不让其弹出对话款
-d 是指定挂载那个设备的
6.cat /etc/mtab --->这是一个动态的文件,用来记录系统的挂载设备信息的,mtab:mount table
二.系统初始化
1.cat /etc/redhat-release --->可以查看系统的版本号
2.uname -a --->查看当前系统的版本的所有信息
uname -r --->只查看内核的版本
uname -n --->查看主机名
uname -v --->显示内核的版本
uname -p --->显示cpu的版本
3. rpm -qa kernel\* ---->查看安装的内核
4.runlevel,运行级别 [0-6]7个级别
# runlevel --->查看上一次运行级别和当前级别
# who -r --->查看当前运行级别
5.级别的意义
0: halt 关机
6: reboot 重启
3: 字符界面下的正常级别
5: 图形界面下的正常级别
1:single user mode 单用户模式,相当于windows的安全用户模式,不需要用户认证登陆
s,S,single:单用户,和1的意义是一样的,在/etc/rc.d/rc.sysinit定义的
2:和3差不多,但,不启动NFS
4:没定义的模式,
6.init N 可以切换级别
eg:init 5 启用5级别
init 0 关机
7./etc/inittab ---->定义默认运行级别
eg:id:5:initdefault:
8.chkconfig --list ---->显示出开机启动的默认级别
关闭或开启某个运行级别的方法
chkconfig --level 24 ip6tables off|on
其实,服务的开启与关闭都是靠放在/etc/init.d/的对应脚本来控制的,脚本的名字和服务的名字相同
eg:/etc/init.d/ip6tables status ---->查看状态
ntsysv --->这个命令是在文本模式下的图形界面来控制的
eg:ntsysv --level 2345 ---->控制那些级别
三.引导流程
1.开机自检(BIOS)-->MBR引导-->GRUB菜单-->加载内核(kernel)-->运行INIT进程-->读取/etc/inittab配置文件
MBR:boot loader引导加载器
grub分两段,
第一段放在MBR的引导程序中,grub其实就是一个boot loaeder,
第二段放在操作系统安装程序内核所在的分区上,在这里放置着一个initrd-2.6.18-164.el5.img,它可以启动grubc菜单
加载内核时去读取根分区,需要展开initrd-2.6.18-164.el5.img,它就是一个小系统
运行INIT进程,就是要运行PID为1的进程,这个进程需要读取/etc/inittab配置文件,根据这个配置文件去执行相关动作
2.读取/etc/inittab配置文件-->执行/etc/rc.d/rc.sysinit脚本
在/etc/inittab配置文件中定义了默认启动级别、系统初始化脚本是谁(/etc/rc.d/rc.sysinit)。
到这步,主要是硬件初始化,下面是系统初始化
3.读取/etc/inittab配置文件-->执行/etc/rc.d/rc脚本-->/etc/rcn.d/*(n代表数字)
这里,主要是根据/etc/inittab定义的默认运行级别,运行下面的/etc/rc.d/rc n 脚本
在/etc/rc.d/目录里,有许多rcn.d目录(n代表数字),在rcn.d目录下有许多脚本,根据运行级别会执行这里面的相关脚本,在/etc/rc.d/rcn.d/内的链接都指向/etc/init.d/* 内的文件
/etc/rc.d/rc脚本就只执行/etc/rc.d/rcn.d/(n代表数字)目录内对应的的脚本,以k开头的就kill掉,以s开头的就start
4.读取/etc/inittab配置文件-->执行/etc/rc.d/rc.local
这一步,就是在系统初始化快要结束时,读取这个文件,执行里面定义的相关命令
5.读取/etc/inittab配置文件-->启动mingetty进程
这一步就是启动一个虚拟终端的
mingetty是在/etc/inittab 中定义的
在/etc/inittab配置文件的最后面定义了x:5:respawn:/etc/X11/prefdm -nodaemon,是为了帮助我们启动图形界面的
x:id字段 -->就是一个标志,没什么意义
5:runlevels字段 -->表示运行级别为5时才执行后面的脚本
respawn:action字段 --->就是为了定后面的脚本如何执行的
/etc/X11/prefdm -nodaemon:prcocess字段 --->是要执行的脚本,
id :用于在inittab文件中唯一标识一个配置记录
runlevels :用于指定该记录在哪些运行级别中运行
action :用于描述记录将执行哪种类型的动作
process :用于设置启动进程所执行的命令
四.查看grub的工作流程
1.grub分两部分:
第一部分放在MBR里面
第二部分放在kernel所在的分区上面,即/boot/grub/里面
第一段就是为了引导第二段的
2.grub.conf是grub的配置文件
/etc/grub.conf 是/boot/grub/grub.conf的链接
3.有关grub.conf的内容分析
title 定义默认启动的操作系统的个数
default 表示默认的启动操作系统是哪个
timeout 等待用户去编译的时间
splashimage=(hd0,0)/grub/splash.xpm.gz 只是指定启动时的图片的
hiddenmenu 定义隐藏菜单
title Red Hat Enterprise Linux Server (2.6.18-164.el5) -->这里主要是定义菜单中显示的名字
root (hd0,0) --->用于指定kernel所在的分区,即/boot分区,grub识别的所有硬盘都是hd格式的,第一个0表示第几块硬盘,第二个0表示第几个分区
kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/vol0/root rhgb quiet -->读取上面分区中的内核
initrd /initrd-2.6.18-164.el5.img -->是个小linux,为系统提供加载驱动
注意:上面的/都是以/boot分区为基础的,所以/实际就是指/boot/
4.解压缩initrd-2.6.18-164.el5.img的步骤,它是cpio压缩的
1)mkdir /root/initrd
2)cp /boot/initrd-2.6.18-164.el5.img /root
3)mv initrd-2.6.18-164.el5.img initrd-2.6.18-164.el5.gz --->改名字,为了解压缩
4)gzip -d initrd-2.6.18-164.el5.gz
5)cd initrd
6)cpio -id < ../initrd-2.6.18-164.el5
第二种解压方法:
cd initrd
zcat /boot/initrd-2.6.18-164.el5.img | cpio -id
五.当grub破坏了之后,就不能启动了,解决方法
1.root (hd0,0) --->指定分区,
2.find /vmlinuz- 查找内核
3.kernel /vmlinuz-2.6.18-164.el5 ---->加载内核
4.initrd /initrd-2.6.18-164.el5.img --->加载小linux
5.boot 启动
六.如何给我们的grub加密码
1.grub -md5-crypt 加密码
2.复制生成的乱码
3.vim /boot/grub/grub.conf
在hiddenmenu后面添加:
password --md5 ___ 后面是上面复制的乱码
这样就给grub加密码了
七.有关linux内核的详细信息
1.grub-->kernel(initrd)-->init(/etc/inittab)
2.linux内核组键是有三个部分组成的
第一个是/boot/vmlinuz-version --->真正的内核
第二个是/boot/initrd-version.img ---->提供驱动的小linux,可以解压
第三个是/lib/modules/version/ --->这里是真正的模块
除了上面的linux启动还需要内核模块,叫kernel object
内核是支持模块化的,内核只是提供核心的功能,其它的都靠/lib/modules/`uname -r`/内放置的模块来执行的
3.lsmod 显示加载的内核模块
modprobc abc --->加载模块abc的命令
modprobc -r abc --->卸载模块的
4.ldd 可以查看某个命令所依赖的库文件
eg:ldd /bin/ls
八.做小linux的步骤
1.加一个硬盘
2.分区,格式化,挂载硬盘等
3.我们的新硬盘需要启动需要如下:
MBR-bootloader
grub
/boot,kernel,initrd
4.mkdir /mnt/boot
mkdir /mnt/sysroot
5.# mount /dev/sdb1 /mnt/boot/
# mount /dev/sdb2 /mnt/sysroot/
6.# grub-install --root-directory=/mnt /dev/sdb --->生成grub的
7.# cd /mnt/boot/
# cp /boot/vmlinuz-2.6.18-164.el5 ./vmlinuz
8.下面拷贝initrd的步骤
# cd /tmp
# mkdir initrd
# cd initrd/
# zcat /boot/initrd-2.6.18-164.el5.img | cpio -id
-i表示要展开了
-d表示如果需要目录,就自动创建
这时就会生成一个小系统了,
# file init 查看init文件的shell类型,是nash
# vim init
注释掉:#echo "Loading dm-mirror.ko module"
#insmod /lib/dm-mirror.ko
#echo "Loading dm-zero.ko module"
#insmod /lib/dm-zero.ko
#echo "Loading dm-snapshot.ko module"
#insmod /lib/dm-snapshot.ko
#echo Scanning and configuring dmraid supported devices
#echo Scanning logical volumes
#lvm vgscan --ignorelockingfailure
#echo Activating logical volumes
#lvm vgchange -ay --ignorelockingfailure vol0
#resume LABEL=SWAP-sda3
修改成:mkrootdev -t ext3 -o defaults,ro sda2
下面删除上面注释掉的模块
# cd lib/
# rm dm-mirror.ko dm-zero.ko dm-snapshot.ko
下面重新封装initrd
# cd ..
# find . | cpio --quiet -H newc -o | gzip -9 -n > /mnt/boot/initrd.gz
这是就会在/mnt/boot/目录下生成initrd.gz
9.下面给grub编辑配置文件
# cd /mnt/boot/
# vim grub/grub.conf
内容如下:
default=0
timeout=3
title MyLinux
root (hd0,0)
kernel /vmlinuz ro root=/dev/sd2 -->这是我们上面cp的内核
initrd /initrd.gz --->这是我们上面封装成的initrd.gz
10.下面我们需要真正的根文件系统
# cd /mnt/sysroot/
# mkdir etc lib bin sbin dev tmp proc sys
# chmod 1777 tmp
# cp /sbin/init sbin
# cp /bin/bash bin/
拷贝我们上面拷贝的两个命令的库文件
# ldd /sbin/init
# cp /lib/libsepol.so.1 lib/
# cp /lib/libselinux.so.1 lib/
# cp /lib/libc.so.6 lib/
# cp /lib/libdl.so.2 lib/
# ldd /bin/bash
cp的方法同上
11.上面拷贝的两个命令想要真正的运行,需要配置文件
编写init的配置文件
# vim etc/inittab
内容如下:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit ---->定义系统初始化得脚本
创建我们上面定义的初始化脚本文件
# cd etc/
# mkdir rc.d
# cd rc.d/
# vim rc.sysinit
内容如下:
#!/bin/bash
#
echo -e "\tWelcome to \033[31mMy033[0m Linux"
/bin/bash
# chmod a+x rc.sysinit
本文出自 “linux小窝” 博客,转载请与作者联系!