Linux Sysadmin–part4

一、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)

A.POST加电自检

主板在接通电源后,系统首先由POST程序来对内部各个设备进行检查,自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。

B.BIOS Sequence启动引导阶段

自检通过之后,按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备。一般电脑是按”F2″或”Del”键等等进入BIOS,在里面我们可以调整硬盘的启动顺序。找到第一个有引导程序的设备后,BIOS会找到设备中的MBR,读取其中的Bootloader。

C.GRUP引导阶段

这时候就可以看到我们的Centos系统了,但是一般都不需要操作,会自动启动系统。其实我们也可以自己手动启动系统的。

1).手动在grub命令行接口启动系统:

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

2).grub的命令行接口:

e: 编辑模式,用于编辑菜单;

c: 命令模式,交互式接口;

help: 获取帮助列表

help KEYWORD: 详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#) 设定grup的根设备

kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

例如:init=/path/to/init, selinux=0

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;

boot: 引导启动选定的内核;

3).配置文件:/boot/grub/grub.conf

配置项:

default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;

timeout=#:指定菜单项等待选项选择的时长;

splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

hiddenmenu:隐藏菜单;

password [–md5] STRING: 菜单编辑认证;

title TITLE:定义菜单项“标题”, 可出现多次;用来引导多个内核或者操作系统

root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

password [–md5] STRING: 启动选定的内核或操作系统时进行认证

D.kernel加载内核阶段内核会自身初始化

探测可识别到的所有硬件设备;加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)以只读方式挂载根文件系统;运行用户空间的第一个应用程序:/sbin/init5.init初始化阶段内核加载完毕,会运行init程序,init进程起来后,系统启动的控制权移交给init进程/sbin/init进程是所有进程的父进程,当init起来之后,它首先会读取配置文件/etc/inittab,进行以下工作:

1).执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统基本算运行起来了,后面需要进行运行级别的确定及相应服务的启动;

2).确定启动后进入的运行级别;

3).执行/etc/rc.d/rc,该文件定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rcn.d(n=0~6)目录下,所有的文件均链接至/etc/init.d下的相应文件。

4).有关key sequence的设置

5).有关UPS的脚本定义

6).启动虚拟终端/sbin/mingetty

7).在运行级别5上运行X配置文件:/etc/inittab每行定义一种action以及与之对应的processid:runlevels:action:processid:一个任务的标识符;runlevels:在哪些级别启动此任务;#,###,可以为空,表示所有级别;action:在什么条件下启动此任务;process:任务;(脚本或程序)action:wait:等待切换至此任务所在的级别时执行一次;respawn:一旦此任务终止,就自动重新启动之;initdefault:设定默认运行级别;此时,process省略;sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;K*:要停止的服务;K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的;S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;chkconfig命令:管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;查看:chkconfig –list [name]添加:chkconfig –add name删除:chkconfig –del name修改指定的链接类型:chkconfig [–level LEVELS] name–level LEVELS:指定要控制的级别;默认为2345;

init命令:

级别切换:init #

级别查看:who -r

注:正常级别下,最后启动的一个服务S99local没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local (/etc/rc.local)脚本;因此,不便或不需写为服务脚本的程序期望能开机自动运行时,直接放置于此脚本文件中即可。

二、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区; 

(1) 为硬盘新建两个主分区;并为其安装grub; 

(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

 (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件; 

(4) 为grub提供配置文件; 

(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

~]# cat /proc/partitions

major minor  #blocks  name

8      16  83886080 sdb

8      17  10485760 sdb1

8      18          1 sdb2

8      21    5242880 sdb5

8      22    5242880 sdb6

8      23    5242880 sdb7

8      24    5242880 sdb8

8      25    5242880 sdb9

8        0  125829120 sda

8        1    1048576 sda1

8        2  124779520 sda2

8      32    5242880 sdc

8      33    2097152 sdc1

8      34    2097152 sdc2

8      48    5242880 sdd

8      49    5241856 sdd1

8      64    5242880 sde

8      65    5241856 sde1

11        0    8086528 sr0

253        0  52428800 dm-0

253        1    2097152 dm-1

253        2  70246400 dm-2

[root@ronny1 ~]# mke2fs -t ext4 /dev/sdc1

[root@ronny1 ~]# mke2fs -t ext4 /dev/sdc2

###准备boot目录###

[root@ronny1 ~]# mkdir /mydata/boot

[root@ronny1 ~]# mount /dev/sdc1 /mydata/boot

[root@ronny1 ~]# ls /mydata/boot

lost+found

###安装grub###

[root@ronny1 ~]# grub-install –root-directory=/mnt /dev/sdc

Probing devices to guess BIOS drives. This may take a long time.

Installation finished. No error reported.

[root@ronny1 ~]# ls /mydata/boot

grub  lost+found

###复制内核文件和initramfs###

[root@ronny1 ~]# cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mydata/boot/vmlinuz

[root@ronny1 ~]# cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mydata/boot/initramfs.img

###添加grub配置文件###

[root@ronny1 ~]# vim /mydata/boot/grub/grub.conf

default=0

timeout=5

title CentOS-HAN

root(hd0,0)

kernel /vmlinuz ro root=/dev/sdc2

initrd /initramfs.img

###此处: root配置rootfs根分区###

###准备根目录结构和程序###

[root@ronny1 ~]# mkdir /mydata/sysroot

[root@ronny1 ~]# mount /dev/sdc2 /mydata/sysroot

[root@ronny1~]# cd /mydata/sysroot

[root@ronny1 sysroot]# mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media

mkdir: created directory `etc’

mkdir: created directory `bin’

mkdir: created directory `sbin’

mkdir: created directory `lib’

mkdir: created directory `lib64′

mkdir: created directory `dev’

mkdir: created directory `proc’

mkdir: created directory `sys’

mkdir: created directory `tmp’

mkdir: created directory `var’

mkdir: created directory `usr’

mkdir: created directory `home’

mkdir: created directory `root’

mkdir: created directory `mnt’

mkdir: created directory `media’

[root@ronny1 sysroot]# cp /bin/bash /mydata/sysroot/bin/

[root@ronny1 sysroot]# ldd /bin/bash

linux-vdso.so.1 =>  (0x00007ffdb9371000)

libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003787200000)

libdl.so.2 => /lib64/libdl.so.2 (0x000000377f600000)

libc.so.6 => /lib64/libc.so.6 (0x000000377fa00000)

/lib64/ld-linux-x86-64.so.2 (0x000000377f200000)

[root@ronny1 sysroot]# cp /lib64/libtinfo.so.5 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libdl.so.2 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libc.so.6 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/ld-linux-x86-64.so.2 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /bin/ls /mydata/sysroot/bin/

[root@ronny1 ~]# ls /mydata/sysroot/bin

bash  ls

[root@ronny1 sysroot]# cp /lib64/libselinux.so.1 /mydata/sysroot/lib64/  [root@ronny1 sysroot]# cp /lib64/libacl.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libattr.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libpcre.so.1 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# cp /lib64/libpthread.so.0 /mydata/sysroot/lib64/

[root@ronny1 sysroot]# ls /mydata/sysroot/lib64

ld-linux-x86-64.so.2  libc.so.6    libpthread.so.0

libacl.so.1          libdl.so.2    libselinux.so.1

libattr.so.1          libpcre.so.1  libtinfo.so.5

###测试命令###

[root@ronny1 sysroot]# chroot /mydata/sysroot

bash-4.1# ls

bin  etc  lib    lost+found  mnt  root  sys  usr

dev  home  lib64  media      proc  sbin  tmp  var

bash-4.1# exit

exit

[root@ronny1 sysroot]# sync

[root@ronny1 sysroot]# sync

[root@ronny1 sysroot]# sync

###修改init程序,指定init程序(bash)###

default=0

timeout=5

title CentOS-HAN

root(hd0,0)

kernel /vmlinuz ro root=/dev/sdc2 selinux=0 init=/bin/bash

initrd /initramfs.img

[root@ronny1 sysroot]# sync

三、制作一个kickstart文件以及一个引导镜像。描述其过程

1. 准备系统iso镜像目录(centos7.2)

[root@ronny1 ~]# mkdir /mnt/cdrom

[root@ronny1 ~]# mount /dev/sr0 /mnt/cdrom

mount: /dev/sr0 is write-protected, mounting read-only

[root@ronny1 ~]# mkdir /mnt/iso

[root@ronny1 ~]# cd /mnt/cdrom

[root@ronny1 cdrom]# cp -frav * /mnt/iso

[root@ronny1 cdrom]# cp .discinfo /mnt/iso

2. 定制kickstart

[root@ronny1 ~]# yum -y install system-config-kickstart

[root@ronny1 ~]# system-config-kickstart

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

Linux Sysadmin--part4

[root@ronny1 ~]# ksvalidator ks.cfg

3. 整合镜像文件和ks文件,并修改相关配置

[root@ronny1 ~]# cd /mnt/iso

[root@ronny1 iso]# vim isolinux/isolinux.cfg

定制启动标签 ,指定ks位置

label custom

menu label ^Install CentOS 7

menu default

kernel vmlinuz

append initrd=initrd.img inst.ks=cdrom:/isolinux/ks.cfg inst.stage2=hd:LABEL=CENTOS7 quiet

其中,需要把其它启动项中的menu default去掉,加在上面的自定义启动项中,这样当你从光盘启动时,才会默认选择该项,并且有倒计时,由于默认的光盘倒计时时间太久了,为600秒,我们把timeout 600改成timeout 100,这样默认就是10秒倒计时了。

拷贝ks文件到光盘根目录

[root@ronny1 iso]# cp /root/ks.cfg isolinux/

[root@ronny1 iso]# ls isolinux/

boot.cat  grub.conf  isolinux.bin  ks.cfg  splash.png  upgrade.img  vmlinuz

boot.msg  initrd.img  isolinux.cfg  memtest  TRANS.TBL  vesamenu.c32

4. 重新打包ISO

[root@ronny1 iso]mkisofs -R -J -T -v –no-emul-boot –boot-load-size 4 –boot-info-table -V “CentOS 7 x86_64 boot” -c isolinux/boot.cat -b isolinux/isolinux.bin -o  /root/boot.iso  iso/

5. 加载新生成的镜像,并启动

使用Xshell 将生成的boot.iso  copy到windows系统下,就可以用虚拟机引导启动了。

四、写一个脚本

(1) 能接受四个参数:start, stop, restart, status start: 输出“starting 脚本名 finished.” …

(2) 其它任意参数,均报错退出;

#!/bin/bash

#description:

case $1 in

start)

echo “staring $0 finished”

;;

stop)

echo “stop $0 finished”

;;

restart)

echo “restart $0 finished”

;;

status)

echo “status  $0 finished”

;;

*)

echo “error”

exit 1

;;

esac

五、写一个脚本,判断给定的用户是否登录了当前系统;

(1) 如果登录了,则显示用户登录,脚本终止;

(2) 每3秒钟,查看一次用户是否登录;

#!/bin/bash

#description:

while true; do

if who |grep $1 &> /dev/null;then

echo “$1 is login”

exit 0

fi

sleep 3

done

6、写一个脚本,显示用户选定要查看的信息;

cpu) display cpu info

mem) display memory info

disk) display disk info

quit) quit

非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

#!/bin/bash

#description:display cpu,memory,disk info

cat << EOF

cpu)display cpu info

mem)display memory info

disk)display disk info

quit)quit

EOF

read -p “please input your choice ” choice

while true;do

case $choice in

cpu)

lscpu

exit 0

;;

mem)

free -m

exit 0

;;

disk)

fdisk -l

exit 0

;;

quit)

echo “quit”

exit 0

;;

*)

echo “Error please input cpu,mem,disk,quit”

read -p “please input your choice ” choice

;;

esac

done

7、写一个脚本

(1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

(2) 提示用户输入一个用户名或输入“quit”退出;

当输入的是用户名,则调用函数显示用户信息;

当用户输入quit,则退出脚本;

进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

userinfo() {

if id “$username” &> /dev/null; then

grep “^$username\>” /etc/passwd | cut -d: -f3,7

else

echo “No such user.”

fi

}

read -p “please input one username or quit: ” username

while true;do

if [ $username == “quit” ];then

exit

else

userinfo

read -p “please input one username or quit: ” username

fi

done

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/87723

(0)
上一篇 2017-10-10 09:56
下一篇 2017-10-10 15:02

相关推荐

  • 软件管理

    rpm:操作复杂、编译时间长、极易出现问题、依赖关系复杂、管理方便、 保存依赖关系,需要手工解决。
    yum:自动解决依赖关系、可以对rpm进行分组,基于组进行安装操作、引入仓库概念,支持多个仓库、配置简单

    2018-03-21
  • 6.vim编辑器使用方法总结

    vi: visual interface,文本编辑器 vim: vi improved,vi的增强版 文本:ASCII,Unicode, 文本编辑器种类: 行编辑器:sed, 全屏编辑器:nano,vi vim:模式化的编辑器 基本模式: 编辑模式,也叫命令模式 输入模式 末行模式:内置的命令行接口 模式转换: 编辑模…

    Linux干货 2017-08-06
  • 第十周

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 1.开启电源后,POST自检:检查硬件设备,通过后交给BIOS 2.BIOS加载可选择的启动设备,寻找可引导的启动设备的记录:MBR 3.MBR:硬盘的主引导记录,存在于0磁道0扇区,共512字节.其中Bootloader占用446字节,分区表占用64字节,magic nu…

    Linux干货 2016-10-17
  • sed使用小结

    sed使用小结 Stream EDitor  行编辑器       sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”( pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,…

    Linux干货 2016-08-12
  • linux cluster—-lvs

    一. Linux Cluster:           Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统;      Linux Cluster类型:      &nbs…

    Linux干货 2016-10-29
  • shell脚本编程

    Shell脚本是包含一些命令或声明,并符合一定格式的文本文件。 程序:指令+数据 程序编程风格 过程式  以指令为中心,数据服务于指令。 对象式  以数据为中心,指令服务于数据。 Shell程序:提供了编写和能力,解释执行。 编程逻辑处理方式:           顺序执行   …

    Linux干货 2016-08-15