一.系统开关机的的流程:
  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.编辑图片大小:p_w_picpath-->Scale p_w_picpath  ,然后开始编辑宽和高
   5.编辑色素:p_w_picpath-->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
     加内容:splashp_w_picpath=(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)重启,加载我们添加的内核