马哥教育网络班21期+第10周课程练习

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

POST -->Boot Sequence(BIOS) --> Boot Loader(MBR) --> Kernel(ramdisk) -->rootfs --> switchroot --> /sbin/init -->(/etc/inittab,/etc/init/*.conf) --> 设定默认运行级别 -->系统初始化脚本 -->关闭或启动对应级别下的服务 -->启动终端
第一阶段:BIOS启动引导阶段;在该过程中实现硬件的初始化以及查找启动介质;从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理
第二阶段:GRUB启动引导阶段;装载stage1,装载stage1.5,装载stage2,读取/boot/grub.conf文件并显示启动菜单,装载所选的kernel和initrd文件到内存中
第三阶段:内核阶段:运行内核启动参数;解压initrd文件并挂载initd文件系统,装载必须的驱动;挂载根文件系统
第四阶段:Sys V init初始化阶段:启动/sbin/init程序;运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统;读取/etc/inittab文件,运行在/et/rc.d/rc.d中定义的不同运行级别的服务初始化脚本;打开字符终端1-6号控制台/打开图形显示管理的7号控制台

马哥教育网络班21期+第10周课程练习

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

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

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

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

  4. 为grub提供配置文件;

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

[root@www boot]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
First cylinder (1-522, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-522, default 522): +200M
 
Command (m for help): n
Partition number (1-4): 2
First cylinder (27-522, default 27): 
Using default value 27
Last cylinder, +cylinders or +size{K,M,G} (27-522, default 522): +3G
 
Command (m for help): p
Disk /dev/sdb: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb38f53ee
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          26      208813+  83  Linux
/dev/sdb2              27         419     3156772+  83  Linux
 
Command (m for help): w
The partition table has been altered!
[root@www boot]# cat /proc/partitions
major minor  #blocks  name
 
   8        0    8388608 sda
   8        1     204800 sda1
   8        2    6144000 sda2
  ...
[root@www ~]# mke2fs -t ext4 /dev/sdb1
[root@www ~]# mke2fs -t ext4 /dev/sdb2
[root@www ~]# mkdir /mnt/boot
[root@www ~]# mount /dev/sdb1 /mnt/boot
[root@www ~]# grub-install --root-directory=/mnt /dev/sdb
Probing devices to guess BIOS drives. This may take a long time.
...
 
(fd0)   /dev/fd0
(hd0)   /dev/sda
(hd1)   /dev/sdb
[root@www ~]# cd /mnt
[root@www mnt]# ll
总用量 5
drwxr-xr-x  4 root root 1024 8月  16 22:14 boot
drwxr-xr-x. 4 root root 4096 8月  14 19:21 sysroot
[root@www mnt]# ll boot
总用量 13
drwxr-xr-x 2 root root  1024 8月  16 22:14 grub
drwx------ 2 root root 12288 8月  16 22:08 lost+found 
[root@www mnt]# cp /boot/vmlinuz-2.6.32-642.el6.i686 /mnt/boot/vmlinuz-2.6.32-l42.el6.i686
[root@www mnt]# cp /boot/initramfs-2.6.32-642.el6.i686.img /mnt/boot/initramfs-2.6.32-642.el6.i686.img
[root@www mnt]# vim /mnt/boot/grub/grub.conf
  编辑如下:
defaut=0
timeout=5
title CenOS
        root (hd0,0)
        kernel /vmlinuz-2.6.32-l42.el6.i686 ro root=/dev/sda2 selinux=0 init=/bin/bash
        initrd /initramfs-2.6.32-642.el6.i686.img
[root@www ~]# mount -t ext4 /dev/sdb2 /mnt/sysroot 
[root@www boot]#cd /mnt/sysroot
[root@www sysroot]# mkdir -p bin sbin usr tmp root dev proc sys var mnt media lib lib64 home 
[root@www sysroot]# ll
总用量 56
drwxr-xr-x. 2 root root 4096 8月  14 19:25 bin
drwxr-xr-x  2 root root 4096 8月  16 22:32 dev
...
drwxr-xr-x  2 root root 4096 8月  16 22:32 var 
执行库文件复制

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

系统安装完成后,anaconda一般都会在root 家目录生成一个当前系统的kickstart 文件,我参考这个文件制作我自己的kickstart文件。
[root@www ~]# cp anaconda-ks.cfg myks.cfg
[root@www ~]# vim myks.cfg 
编辑是myks.cfg 内容:
# Kickstart file automatically generated by anaconda.and I modify it by myself
 
#version=DEVEL
install
cdrom
lang zh_CN.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$IjI6cJDojRCvIVR6$I59v2xYd8ikloSXoQH6MVZdUv/ikm0yNqBhrO8jXrlHY7iqbnE86sPPJ8sg.yfqs6oYCuG8TvogX.kjGY15nI1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="nomodeset crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all
part /boot --fstype=ext4 --size=200
part / --fstype=ext4 --size=6000
part swap --size=600
repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
%packages --nobase
@core
%end
 
制作引导镜像的过程:
1.把安装光盘放入光驱
2.
[root@www ~]# mkdir /media/cdrom
[root@www ~]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@www ~]# ls /media/cdrom
CentOS_BuildTag  GPL     isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL
EULA             images  Packages  repodata                  RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6
[root@www ~]# mkdir /tmp/myiso
[root@www myiso]#cd /tmp/myiso
[root@www myiso]# cp /media/cdrom/isolinux /tmp/myiso -a -r
[root@www myiso]# cp -r -a /root/myks.cfg /tmp/myiso
[root@www myiso]# ll
总用量 8
dr-xr-xr-x. 2 root root 4096 5月  22 12:17 isolinux
-rw-------. 1 root root  903 8月  17 19:20 myks.cfg
[root@www myiso]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 
boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/
这样我们就在/root目录下创建了名为boot.iso的光盘引导镜像

4、写一个脚本

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

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

#!/bin/bash
#	
if [ $# -lt 1 ];then
cat << EOF
Usage:service.sh start|stop|restart|status
EOF
	exit 1
fi
case $1 in
start)
	echo "start $0 finish"
;;
stop)
	echo "stop $0 finish"
;;
restart)
	echo "stop $0 fiish."
	echo "start $0 fiish."
;;
status)
	echo "$0 status"
;;
*)
	echo "Erro command."
	exit 2
;;
esac

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

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

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

#!/bin/bash
read -p "Enter a user name: " username
until who | grep "^$username" &> /dev/null; do
    sleep 3
done    
echo "$username logged on." 
    exit 0

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

  • cpu) display cpu info

  • mem) display memory info

  • disk) display disk info

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

#!/bin/bash
#
info() {
cat << EOF
cpu) display cpu info
mem) display memory info
disk) display disk info
quit) quit
EOF
}
info
read -p "Enter command:" cmd
case $cmd in
cpu)
	cat /proc/cpuinfo
;;
mem)
	cat /proc/meminfo
;;
disk)
	fdisk -l
;;
quit)
	echo "quiting"
	exit 0
;;
*)
	echo "Erro command."
	info			
read -p "Enter command.": $1
;;
esac

7、写一个脚本

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

  2. 提示用户输入一个用户名或输入“quit”退出;
    当输入的是用户名,则调用函数显示用户信息;
    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit:

#!/bin/bash
#
userinfo() {
   uid=`cat /etc/passwd | grep "^$user" |cut -d: -f3`
   bs=`cat /etc/passwd | grep "^$user" |cut -d: -f7`
	echo "$user uid:$uid bash:$bs"
}
qt() {
			if [ $cmd == "quit" ];then
				break
			else
				echo "No exist $cmd user."
				read -p "Enter username or quit :" cmd
			fi	
}
cs() {
	while `id $cmd &>/dev/null` ;do
		user=$cmd
		userinfo
		read -p "Enter username or quit :" cmd
		until `id $cmd &> /dev/null`;do
			qt
		done
			cs
	done
}
read -p "Enter username or quit :" cmd
if [ $cmd != '' ];then
	until `id $cmd &> /dev/null`;do
		qt
	done
		cs
else
	read -p "Enter username or quit :" cmd
	cs
fi

8、写一个脚本,完成如下功能(使用函数)

  1. 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

  2. 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

  3. 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求;

#!/bin/bash
#
syspath=/mnt/sysroot
[ -d $syspath ] || mkdir /mnt/sysroot
 
read -p "please input a command:" cmd 
libcp() {
    for lib in $(ldd $1 |  grep -o "[^[:space:]]*/lib[^[:space:]]*"); do
        libdir=$(dirname $lib)
        [ -d $syspath$libdir ] || mkdir -p $syspath$libdir
        [ -f $syspath$lib ] || cp $lib $syspath$lib
    done
}
 
while [ "$cmd" != 'quit' ]; do
    if ! which $cmdname &> /dev/null; then
        read -p "No such command, enter again: " cmd
        continue
    fi
    cmd=$(which --skip-alias $cmdname)
    cmnddir=$(dirname $cmd)
 
    [ -d $syspath$cmnddir ] || mkdir -p $syspath$cmnddir
    [ -f $syspath$cmd ] || cp $cmdname $syspath$cmd
    libcp $cmd
    read -p "Another command(quit): " cmd
done

   

原创文章,作者:Net21_Lion,如若转载,请注明出处:http://www.178linux.com/45210

(0)
Net21_LionNet21_Lion
上一篇 2016-09-19 13:49
下一篇 2016-09-19 13:49

相关推荐

  • LINUX课堂笔记(第一周)

    2018.03.05 LINUX: 切换虚拟终端:CTRL+ALT+F[1-6] 查看当前得终端设备命令:tty 查看内存: cat /proc/meminfo free -h 查看分区: cat /proc/partitions lsblk 查看CPU: lscpu cat /proc/cpuinfo 查看版本 cat /etc/centos-releas…

    Linux干货 2018-03-15
  • 运筹帷幄之中,决胜与千里之外!

           运筹帷幄之中,决胜与千里之外,决定改变一生。        自从2016年年后学校要求产参加毕业实习,但对linux一窍不通的我,阴差阳错的被一家网络公司给录取了。        安排在一家企业做驻场运维工程师,刚去驻场的时候并没有给我分配相应的工作只是给了一些关于数据库,网络,和系统的一些资料,要求进行自学。我想了想,就决定选择了系统进行了解…

    2018-03-26
  • HA Cluster-主备模型(项目实战)

    主机环境:主机A和主机B使用的是CentOS7.2的系统:    主机A IP地址为:192.168.1.103     主机B IP地址为:192.168.1.106     向外界提供的服务的地址为:192.168.1.100配置过程:…

    Linux干货 2016-11-01
  • 一起学DNS系列(十四)DNS查询工具之DIG的使用(2)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/240243    上节谈到了利用DIG的+trace参数追踪域名解析的过程,其实除此之外,DIG还有一些其他的参数,这节会涉及到这…

    2015-03-17
  • History,Help——Linux基本命令(6)

    1.     history   当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效率获得极大提升。 history是shell的内置命令,其内容在系统默认的shell的man手册中。 一些用法: history[-c] [-d offset] [n] …

    2017-07-15
  • 文件查找locate和find

    locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 依赖于事先构建的索引 索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb) 索引构建过程需要遍历整个根文件系统,极消耗资源 工作特点: •查找速度快 •模糊查找 •非实时查找 •搜索的是文件的全路径,不仅仅是文件名 •…

    2017-08-11