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)
N27_ronnyN27_ronny
上一篇 2017-10-10 09:56
下一篇 2017-10-10 15:02

相关推荐

  • 计算机相关简介和linux相关简介

    一、计算机相关简介与linux的一些概念 计算机系统 由硬件(Hardware)系统和软件(Software)系统两大部分构成: 硬件系统 :CPU(控制器、运算器),内存储器(RAM、ROM),外存储器(硬盘等),输入设备(键盘、鼠标等),输出设备(显示器等),其他设备相关设备。  软件系统 :系统软件(操作系统,数…

    Linux干货 2017-02-18
  • 五.Linux博客-2016年7月28日索引、硬链接、软连接、inode表、file、重定向、tr、管道、用户、组

    格式说明: 操作 概念 命令 说明及举例 五.索引、硬链接、软连接、inode表、file、重定向、tr、管道、用户、组 索引节点 原数据保存在inode table表中每个文件或目录都有一个独立的inode number(节点编号在一个分区中是唯一的,每个分区都有自己的inode table) ls -i 查看节点编号 硬链接 ln&n…

    Linux干货 2016-08-23
  • 文件系统结构

    -文件系统结构
    -应用程序的组成部分
    -文件类型

    2018-03-13
  • Linux基本知识之Vim编辑器

    vim文本编辑器:    vim是Linux系统上的最著名的文本/代码编辑器,也是早年的vi编辑器的加强版,而gVim则是其windows版。它的最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘流的各种巧妙组合操作却能带来极大幅度的效率的提升。 (1)打开文件与关闭文件:     …

    Linux干货 2016-08-10
  • Nginx专题: 从编译安装到URL重写

    Nginx专题: 从编译安装到URL重写 前言 环境介绍 Nginx介绍 编译安装Nginx 配置文件解释 main和event{}的配置 http{}的基本配置 配置Nginx 搭建一个基本的Nginx Web服务器 实现https 创建CA并签署Nginx证书 修改配置文件 测试https 实现URL Rewrite将不同浏览器的请求响应不同页面 URL…

    Linux干货 2016-04-04
  • 文件查找工具之——find

        前言:Linux一切皆文件,在linux的系统中如果我们需要找到所需的文件,除了一步一步慢慢找,还有一种办法就是要使用Linux中查找文件工具命令,能让我们很快定位到我们所需的文件。所以我们必须要学好文件查找工具 一、首先我们先要了解文本搜索和文件查找的区别     文本…

    Linux干货 2015-07-06