一.系统开关机的的流程:
1.Post(加电自检)-->BOOT sequence(启动设备,去找boot device)--->usb(找不到前面的设备,就找这个)-->lan(PXE,指本地网卡)-->MBR(设备主引导记录,512bytes,446:bootloader,)-->kernel(读内核到内存中)-->initrd(ramfs,ramdisk)-->rootfs(kernel加载根文件系统设备:SCSI,RAID,LVM,ISCSI)-->/sbin/init(/etc/inittab:指定默认启动级别,做系统初始化)-->
boot device通常有U盘,光盘,硬盘...
grub:(Great Unified Bootloader)是两段式的bootloader,第一段在那446个字节中,用来加载第二段,别的事情它都不干,第二段放在内核所在的分区上,即:boot目录中的grub目录中,
sysinit:系统初始化是靠/etc/rc.d/rc.sysinit文件来完成的,主完成加载键盘,鼠标等设备
/etc/rc.d/rc[0-6] 在inittab配置文件中指定执行哪个
二.做一个小Linux
1.加一个小硬盘,分区格式化,挂载
2.# mkdir /mnt/boot /mnt/sysroot
3.# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb2 /mnt/sysroot/
下面就是为了装grub
4.# grub-install --root-directory=/mnt /dev/sdb -->安装grub
5.# cd /mnt/boot
# cp /boot/vmlinuz-2.6.18-164.el5 /mnt/boot/vmlinuz --->拷贝内核
6.这一步是为了拷贝initrd,但是,initrd不能直接拷贝,需要先解压,再拷贝
# cd /tmp
# mkdir initrd/
# cd initrd/
# zcat /boot/initrd-2.6.18-164.el5.img | cpio -id -->解压在根目录下的小Linux
这时候,会在当前目录下出现一个小系统,可以看一下
下面是为了修改init文件
# 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
修改mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
成为:mkrootdev -t ext3 -o defaults,ro sda2
注释掉下面的几行:
#echo Scanning and configuring dmraid supported devices
#echo Scanning logical volumes
#lvm vgscan --ignorelockingfailure
#echo Activating logical volumes
#lvm vgchange -ay --ignorelockingfailure vol0
7.重新封装上面修改后的initrd文件
# find . | cpio -H newc -o --quiet | gzip -9 -n >/mnt/boot/initrd
8.删除我们前面在init文件中注释掉的模块
# cd lib/
# rm -f dm-mirror.ko dm-zero.ko dm-snapshot.ko
9.下面为我们的grub创建配置文件
# cd /mnt/boot/grub
# vim grub.conf
grub配置文件的内容:
default=0
timeout=5
title MyLinux-0.01
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2
initrd /initrd
解释:root (hd0,0):系统在识别grub配置文件时,都是以hd设备来时别的,第一个0表示第几块设备,第二个0表示,第几个分区,下面的kernel和initrd都是以根分区/boot所在的分区为启始点,所以他们的/就是值/boot目录地方
10.下面我们去准备真正的根文件系统/sbin/init
# cd /mnt/sysroot/
# mkdir proc sys dev bin sbin lib etc tmp 创建系统必要的系统目录
# chmod 1777 tmp
# cp /sbin/init sbin/ 拷贝真正的系统文件
# ldd /sbin/init 查看init所依赖的库
# ls -l /lib/libsepol.so.1 用这种方法查看init库是否为连接文件,然后,cp它的连接文件和源文件
查看完成之后,开始cp上面的库的连接文件和源文件
# cp /lib/libsepol.so.1 lib
# cp /lib/libselinux.so.1 lib
# cp -d /lib/libc.so.6 /lib/libc-2.5.so lib
# cp -d /lib/libdl.so.2 /lib/libdl-2.5.so lib/
# cp -d /lib/ld-linux.so.2 /lib/ld-2.5.so lib/
11./sbin/init命令想要执行,需要/etc/inittab 配置文件,下面我们就去写配置文件
# vim etc/inittab
内容:
#Inittab
#default run level
id:3:initdefault 指定默认运行级别
#System initial script
si::sysinit:/etc/rc.d/rc.sysinit 这是定义系统初始化用到哪个脚本
12.下面创建我们上面定义的系统初始化脚本rc.sysinit,但是,这个脚本是bash脚本,需要依赖bash,所以还要拷贝bash
# mkdir etc/rc.d -v
# vim etc/rc.d/rc.sysinit 这两不是创建我们需要的文件
下面是拷贝bash
# which bash
# cp /bin/bash bin/
# ldd /bin/bash 查看依赖的库文件
下面开始拷贝库文件的连接文件和源文件,同上
# cp -d /lib/libtermcap.so.2 /lib/libtermcap.so.2.0.8 lib/ 这里只需要拷贝一个,其它的都在上面拷贝过了,
验证一下,我们的bash可以用了吗?
# chroot /mnt/sysroot chroot就是切换真正的根文件系统,就是说我们的/mnt/sysroot下必须有一个根文件系统
如果出现bash-3.2#表示成功
下面编写我们的初始化脚本
# vim etc/rc.d/rc.sysinit
内容:
#!/bin/bash
#
echo -e "\tWelcom to \033[31mMy\033[0m Linux" -->欢迎信息
#
/bin/bash --->让系统直接执行bash
给上面的脚本执行权限
# chmod a+x etc/rc.d/rc.sysinit
13.到这里,我们的小linux已经可以运行了,
# sync 用这个命令同步一下,记得多同步几次,操作慢一点
14.下面,我们扩展小linux的命令,因为上面的小linux没有可用命令,下面我们移植ls和hostname命令
1)下面是拷贝ls命令的步骤
# which ls
# ldd /bin/ls
# cp /bin/ls /mnt/sysroot/bin/
下面拷贝库文件的连接和源文件
# ll /lib/librt.so.1 /lib/libacl.so.1 /lib/libpthread.so.0 /lib/libattr.so.1
上面的这一步我们可以明白,有的库文件我们已经拷贝过,这里不需要在拷贝了
# cp -d /lib/librt.so.1 /lib/librt-2.5.so /lib/libacl.so.1 /lib/libacl.so.1.1.0 /lib/libattr.so.1 /lib/libattr.so.1.1.0 /lib/libpthread.so.0 /lib/libpthread-2.5.so /mnt/sysroot/lib/ 这是一条命令
2)下面拷贝hostname命令的步骤
# which hostname
# ldd /bin/hostname 这时候,我们可以和lib目录的库对比一下,发现我们都拷贝过了
# cp /bin/hostname /mnt/sysroot/bin/
# sync
3)给我们的小linux命一个名字
# cd /mnt/sysroot/
# mkdir etc/sysconfig
# vim etc/sysconfig/network
内容:
HOSTNAME=www.a.com
4)让我们命的名字生效:下面的是帮助理解,我们这里不用这个脚本,用第5)个
# vim etc/rc.d/rc.sysinit -->这是初始化脚本,我们将命名规则写在这里面
添加的内容:
# for hostname
. /etc/sysconfig/network -->这里是source下network这个文件,读取信息
[ -z $HOSTNAME ] || /bin/hostname $HOSTNAME -->做判断:-z表示$HOSTNAME为空,||表示前面的为假时,即,$HOSTNAME为不为空时,执行后面的命令。
5)这是我们改进后的rc.sysinit脚本文件
#!/bin/bash
#
echo -e "\tWelcom to \033[31mMy\033[0m Linux"
# for hostname
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
if [-z $HOSTNAME -o $HOSTNAME='(none)'];then
$HOSTNAME=localhost
fi
/bin/hostname $HOSTNAME
#
/bin/bash
6)做到这里就可有名字了,
在小linux中# hostname可以查看
三.给我们的小linux作一张开机启动照片
1.下一张图片,我们需要修改一下
2.有一个修改图片的软件在:Applications-->Graphics-->The GIMP-->然后一路continue安装上软件,
3.打开图片:file-->open(找图片)-->双击 ,找到我们下的图片,对于linux来说,格式必须是640 x 480格式的图片
4.编辑图片大小:image-->Scale image ,然后开始编辑宽和高
5.编辑色素:image-->mode-->indexed ,这里我们需要的图片是14位色素的
6.保存图片:File-->Save as..-->然后打开Select File Type (By Extension){在这里找到xpm格式,点save,就好了}
7.这时候,我们需要压缩图片了
# gzip tupian.xpm
8.# mv tupian.xpm.gz /mnt/boot/grub/
# cd /mnt/boot/grub/
9.编辑配置文件
# vim grub.conf
加内容:splashimage=(hd0,0)/grub/tupian.xpm.gz --->到这里就好了
10.# sync
四.了解系统的日志文件
1.在/var/log目录里有相关的日志文件
dmesg --->用于查看系统引导时产生的日志
2./var/log/dmesg --->kernel boot messages
/var/log/messages --->standard system messages
/var/log/maillog --->mail system messages
/var/log/secure --->Security,authentication,and xinetd messages(关于安全,认证,xined相关的日志)
/var/log/audit/audit.log --->Kernel auditing messages(审计日志)
3./etc/syslog.conf 这个文件中定义了相关的日志文件的位置和作用
当我们改了这个文件之后,要reload,就是重新读取着配置文件
# service syslog reload
reload就是向系统发送一个SIGUP信号,这个信号可以用kill -l查看到
4.# chkconfig --list syslog -->查看syslog在那些级别下开启服务
eg:syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
我们可以看到在3级别下syslog是启动的,所以在/etc/rc.d/rc3.d/下,一定会有一个以s开头的syslog文件,如:在这里有一个S12syslog文件。 这里的12是在 /etc/init.d/syslog 中定义的,如:# chkconfig: 2345 12 88,这里定义了以s开头的是s12****文件,以k开头的是k88****的文件
5.如何将一台主机配置成为一台记录日志的服务器:即可以记录别人的日志信息
# vim /etc/sysconfig/syslog
在SYSLOGD_OPTIONS后面添加一个 -r 选项,就会记录别人的日志
SYSLOGD_OPTIONS="-m 0 -r"
五.任务
1.cron,定时任务,每隔一段时间就会执行以下
cron分两类
1)system cron 系统crom
配置文件在/etc/crontab --->在这个文件中定义了相关的系统脚本
该文件由7个字段组成的,比用户cron多一个用户字段
eg:01 * * * * root run-parts /etc/cron.hourly
分 时 天 月 周 用户 执行的命令 --->这是几个字段的表示意义
2)user cron 用户cron
配置文件:/var/spool/cron/username 会在/var/spool/cron/目录下产生与用户同名的文件
该文件由6个字段组成
3)定义cron的可用字符
*:每
-:取连续范围的,eg:4-7
,:表示离散范围的,eg:4,7
/:取频率
eg:*/2 * * * * --->表示每周,每月,每天,每小时,每2分钟就执行一次这个命令
2.crontab 命令的用法
crontab 的选项
-e -->创建cron命令
-l -->查看cron的任务
3.# vim /etc/crontab --->在这里定义了哪些脚本在什么时候执行以下
4.查看cron的相关文件
[root@server42 ~]# ls /etc/ | grep cron
anacrontab
cron.d
cron.daily
cron.deny ---->定义黑名单
cron.hourly
cron.monthly
cron.weekly
crontab
5.cron Access Control
1)If neither /etc/cron.allow nor /etc/cron.deny exist only root is allowed to install new crontab files
2)If only /etc/cron.deny exists,all users expect those listd in cron.deny can install crontab files
3)If only /etc/cron.allow exists,root and all listed users can install crontab files
4)If files exist cron.deny is ignored
6.因为cron定义任务,到了定义的时间点,就会执行,如果在那个时间点关机了,就不会执行了,这时,我们引入了anacron,但是,anacron不能单独执行,它是cron的补充,当错过了cron定义的时间点后,anacron会在开机时检查过去没执行的命令,如果没执行,过一段时间会执行这些命令
7.# vim /etc/anacrontab --->这是anacron的配置文件
在该文件内有4个字段,如下:
1 65 cron.daily run-parts /etc/cron.daily
第一字段:1:表示在过去一天没有执行的任务
第二字段:65:表示开机等待65分钟后执行每天的任务
第三字段:cron.daily:是描述信息,没什么意义
第四字段:run-parts /etc/cron.daily:表示执行的任务
8.cron服务默认是启动起来的,而anacron默认是关闭的
# service crond status --->查看cron的开启状态
开启anacron的方法:
# chkconfig anacron on
# chkconfig --list anacron --->查看anacron开启的级别
六.NTP:网络时间服务
1.配置文件:/etc/ntp.conf
七.编辑内核
1.# cat /proc/cpuinfo --->查看cpu的信息
# lspci --->查看PCI设备的
# free -m --->查看内存使用情况
# lsusb --->查看usb接口的使用情况
2.编译内核的步骤:
1)准备编译环境
# yum groupinstall "Development Tools" "Development Libraries" -y --->一个是开发工具,一个是开发库
2)准备好内核源码包
# tar zxvf linux-2.6.30.10.tar.gz -C /usr/src/ -->对准备好的内核解压
# cd /usr/src/
# ln -sv linux-2.6.30.10/ linux --->目的就是去掉版本号
# cd arch/ ---->arch是与我们的cpu和平台相关的,里面有许多支持cpu平台选一个适合本机的
3)开始编译
(1)先配置内核的几种方法
make oldconfig --->这是系统自带的比较老的
make menuconfig --->这是最常用的配置方法
make xconfig --->这是kde的开发环境下的图形界面
make gconfig --->这是gnom的开发环境下的图形界面
注意:这些命令都是在内核的目录中执行,即:linux目录中执行
(2)make menuconfig 之后,进入了配置界面
连按两次Esc建,会退到上一个界面
* 是加进内核
M 是加进模块
(3)当我们选择了以后,就会在内核目录中生成一个.config文件
有时,我们的选择是靠不住的,我们需要拷贝系统的样板
# rm .config
# cp /boot/config-2.6.18-164.el5 ./.config
这时候,在make menuconfig,这是在原来的基础上进行配置的
(4)# vim .config
找到CONFIG_LOCALVERSION="",在" "内添加版本后缀,用uname -r可以查看到
(5)这时候,可以make了,需要的时间比较长,耐心等待
# make
# make install
(6)编辑完成之后,我们# vim /etc/grub.conf ,会发现在该文件内多一个title,
(7)重启,加载我们添加的内核
本文出自 “linux小窝” 博客,谢绝转载!