第十二周作业

1、简述linux操作系统启动流程

1、硬件启动:机器上电,主板上的ROM中的自检程序开始对硬件自检,接着bios检测启动设备,并将启动设备的MBR读到内存的控制区。
2、GRUB启动引导:分为三个阶段,分别是state1、state1.5、state2。
state1:MBR的前446个字节,主要作用是引导加载程序bootloader
state1.5:MBR之后的扇区,为了到达2阶段,找到/boot分区的grub配置文件,就需要识别/boot分区的文件系统,1.5阶段就是这个作用
state2:目的是找到内核文件所在的位置,通过initrd文件建立虚拟文件系统,便于内核加载真正的根文件系统。进入/boot/grub下,读取grub的配置文件/boot/grub/grub.conf,首先显示内核菜单,并找到内核文件所在。因为根分区的文件系统驱动在根分区里,导致进入死循环,此时通过/boot中的微型内核文件initrdramfs文件提供文件系统驱动,建立虚拟的文件系统,便于后面内核加载真正的根。
3、内核初始化阶段:加载驱动模块初始化系统中的硬件设备,以只读的形式挂载内核真正的根文件系统(grub.conf中所指定的),协助内核呼叫根文件系统第一个应用程序/sbin/init
4、系统初始化阶段:通过/etc/inittab获取用户级别;根据/etc/rc.sysinit脚本初始化系统的相关配置;根据/etc/rc.d/rc#.d和/etc/rc.local加载系统的开机服务
5、启动终端:执行/sbin/mingetty打开6个纯文本终端,在这个终端上可以输用户名和密码来验证登陆;如果用户级别为5则打开界面模式。

2、制作一个只运行shell的linux系统

1、给虚拟机添加一块硬盘20Gsdb,重启虚拟机
[20:56:43 root@CentOS6 ~]$lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    2G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sdb      8:16   0   20G  0 disk 
sr0     11:0    1  4.5G  0 rom 
2、对新增硬盘sdb进行分区,一个主分区/boot分区,另一个主分区/分区,并对两个分区创建文件系统
[21:03:08 root@CentOS6 ~]$echo -e 'n\np\n1\n\n+1G\nw\n' | fdisk /dev/sdb
[21:04:35 root@CentOS6 ~]$echo -e 'n\np\n2\n\n\n\nw\n' | fdisk /dev/sdb
[21:05:35 root@CentOS6 ~]$lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    2G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sdb      8:16   0   20G  0 disk 
├─sdb1   8:17   0    1G  0 part 
└─sdb2   8:18   0   19G  0 part 
sr0     11:0    1  4.5G  0 rom 
[21:07:57 root@CentOS6 ~]$mkfs.ext4 /dev/sdb1
[21:08:56 root@CentOS6 ~]$mkfs.ext4 /dev/sdb2
[21:09:56 root@CentOS6 ~]$blkid
/dev/sda1: UUID="7050d8d6-4b69-4cc6-803f-9d4ae7e4789d" TYPE="xfs" 
/dev/sda2: UUID="7b65e69d-bcab-4dae-87cc-e50b4401a01a" TYPE="xfs" 
/dev/sda3: UUID="9bbc06d0-f15c-4b32-b318-9bd36a7b64fb" TYPE="swap" 
/dev/sda5: UUID="0254a8eb-c926-41b1-bbe4-1e1751b73c73" TYPE="xfs" 
/dev/sdb1: UUID="6fe50929-1097-4469-88a5-c459cf07b81f" TYPE="ext4" 
/dev/sdb2: UUID="61cdc58c-193c-41e5-a8d3-077ee8038e49" TYPE="ext4" 
/dev/sr0: UUID="2020-04-22-00-54-00-00" LABEL="CentOS 6 x86_64" TYPE="iso9660" PTTYPE="dos" 
3、创建两个文件夹/mnt/boot和/mnt/sysroot,并将创建好的文件系统挂载在这两个目录下,充当自制linux系统的/boot和/分区。
[21:11:38 root@CentOS6 /mnt]$mkdir /mnt/boot
[21:11:45 root@CentOS6 /mnt]$mkdir /mnt/sysroot
[21:12:02 root@CentOS6 /mnt]$ls -l
total 0
drwxr-xr-x 2 root root 6 Mar  8 21:11 boot
drwxr-xr-x 2 root root 6 Mar  8 21:12 sysroot
[21:12:06 root@CentOS6 /mnt]$mount /dev/sdb1 /mnt/boot
[21:16:59 root@CentOS6 /mnt]$mount /dev/sdb2 /mnt/sysroot
4、安装grub,自动生成1、1.5、2阶段所需文件
[21:17:58 root@CentOS6 /mnt]$grub-install --root-directory=/mnt /dev/sdb
5、将内核文件和initramfs文件拷贝到新的boot文件夹下
[21:18:28 root@CentOS6 /boot]$cp -p 
[21:18:53 root@CentOS6 /mnt]$cp -p
6、创建并编写grub.cfg文件
[21:20:25 root@CentOS6 /mnt/boot]cat grub.cfg
7、依照/下的文件夹在/mnt/sysroot下的创建相关文件夹
[21:20:25 root@CentOS6 /mnt/sysroot]mkdir /mnt/sysroot/{boot,sys,etc,proc,dev,bin,sbin,lib,lib64,mnt,media,opt,home,root,tmp,var}
8、在新根下准备bash shell的程序和库

[20:53:49 root@CentOS6 ~/script]$cat copycmd.sh 
#!/bin/bash

while read -p "请输入要拷贝的命令:" cmd;do
    if [[ "$cmd" =~ [Qq][Uu][Ii][Tt] ]];then
        break
    elif [ -z "$cmd" ];then
        echo "输入的命令不能为空"
        continue
    else
        dir=`which --skip-alias $cmd`;
        if [ -z "$dir" ];then
            echo "输入的命令不存在"
            continue
        else
            ldd "$dir" | sed -nr 's/.* (\/.*) .*/\1/p' > .tmp.lib
        fi
        cp $dir /mnt/sysroot$dir
        while read so
        do
            if [ ! -d /mnt/sysroot`dirname $so` ]
            then
                mkdir /mnt/sysroot`dirname $so`
            fi
            cp $so /mnt/sysroot$so
        done < .tmp.lib
    fi
done
运行此拷贝脚本,将bash命令拷贝到/mnt/sysroot下
[20:56:04 root@CentOS6 /mnt/sysroot/bin]$ls -ltr
total 924
-rwxr-xr-x. 1 root root 942200 Mar 11 20:53 bash
[20:56:23 root@CentOS6 /mnt/sysroot/bin]$cd ..
[20:56:26 root@CentOS6 /mnt/sysroot]$cd lib64
[20:56:29 root@CentOS6 /mnt/sysroot/lib64]$ls -ltr
total 2044
-rwxr-xr-x. 1 root root  134792 Mar 11 20:53 libtinfo.so.5
-rwxr-xr-x. 1 root root   23088 Mar 11 20:53 libdl.so.2
-rwxr-xr-x. 1 root root 1930416 Mar 11 20:53 libc.so.6


3、总结systemctl管理命令及system unit文件格式

命令格式:systemctl COMMAND servicename
COMMAND:start :启动服务
stop:停止服务
restart:重启服务
status:查看服务状态
mask:禁止自动和手动启动
unmask:取消禁止
is-active:查看服务当前是否激活
enable:设置服务开机自启(加--now表示服务立即启动并且设置开机自启)
disbale:设置禁止服务开机自启(加--now表示服务立即停止并且设备开机不自启)
list-dependencies :查看服务的依赖关系
systemctl list-unit --type service:列出所有已经激活的服务,加-a表示查看所有服务,包括各种状态
systemctl --failed --type service:列出所有失败的服务
systemctl list-unit-files --type service :查看所有服务开机自启状态
systemctl list-dependencies targetname:查看模式下包含的服务情况
systemctl isolate targetname:切换模式
systemctl default:进入默认的target模式
systemctl get-default:查看默认启动模式
systemctl set-default targetname:设置默认的target模式
systemctl rescue/emergency:进入紧急救援/emergency模式
system unit文件格式
unit文件一般存放在/etc/systemd/system

开头的部分为注释。布尔值为1/true/yes/on时表示开启,值为0/false/no/off时表示关闭。文件一般分为三部分

[unit]部分:定义一些unit的相关信息,行为和依赖关系
常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应晚于哪些unit
Requires:依赖到的unit,此为强依赖,即被依赖的unit未启动,则此Unit也无法激活
Wants:依赖到的Unit,此为弱依赖
Conflicts:定义units间的冲突关系,表明不能共同运行
[service]部分:与特定类型相关的专用选项,对于不同的unit类型的配置,此处名称不一样,有socket、target等
常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程的启动类型
simple:默认值,表明这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
forking:由ExecStart启动的程序通过spawns延伸出其他子程序来作为此daemon的主要服务,原生父进程在启动结束后就会停止
oneshot:与simple类似,但是启动后不会常驻于内存中
dbus:与simple类似,但是要设定BusName=才行
notify:服务启动后会发出一个消息,需要配合NotifyAccess来让systemd接收消息
idle:与simple类似,但是一般是开机到最后才执行的服务
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行的命令或脚本的绝对路径
ExecStartPre:ExecStart前执行
ExecStartPost:ExecStart后执行
ExecStop:停止unit要执行的命令或脚本
Restart:当为1时,表示unit意外停止后,会再次自动启动此服务
PrivateTmp:为yes时,会在/tmp/systemd-private-UUID-NAME.service目录下生成临时文件
[Install]部分:定义由sysemctl命令来启用和禁用服务时用到的一些选项
常用选项:
Alais:服务别名
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的服务

4、破解centos7 密码

方法一:
1、启动时按e键进入grub,在linux16这一行后加入rd.break后,按ctrl+x
2、进入系统后,重新挂载/sysroot文件系统为可写模式
switch_root:/#mount -o remount,rw /sysroot
3、切根:chroot /sysroot
4、此时已经进入到了root用户下,利用passwd命令重新生成root口令
方法二:
1、启动时按e键进入grub,在linux16这一行后加入rw init=/sysroot/bin/sh后,按ctrl+x
2、进入系统后,切根:chroot /sysroot
3、此时已经进入到了root用户下,利用passwd命令重新生成root口令

你可能感兴趣的:(第十二周作业)