1、編寫腳本,接受二個位置參數(shù),magedu和/www,判斷系統(tǒng)是否有magedu,如果沒有則自動創(chuàng)建magedu用戶,并自動設(shè)置家目錄為/www
[root@localhost scripts]# vim magedu.sh
#!/bin/bash
#
USERNAME=$1
USERHOME=$2
if [ $# -ne 2 ];then
echo -e "please give me two arguments,one is username,one is u
serhome\n"
fi
if [ $# -eq 2 ];then
if id $USERNAME &> /dev/null;then
echo "$USERNAME is exist"
exit 3
else
useradd -m -d $USERHOME $USERNAME
grep "$USERNAME" /etc/passwd
fi
fi
~
"magedu.sh" 17L, 316C written
[root@localhost scripts]# bash magedu.sh magedu /www
magedu:x:1001:1001::/www:/bin/bash
2、使用expect實現(xiàn)自動登錄系統(tǒng)。
#首先用expect實現(xiàn)自動登陸
#!/usr/bin/expect
spawn ssh root@192.168.44.129
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "magedu\n"}
}
interact
#expect腳本
[root@localhost scripts]# vim expect2.ext
#!/usr/bin/expect
#expect中的變量聲明要用set
set ip 192.168.44.129
set user root
set password magedu
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$password\n"}
}
interact
~
"expect2.ext" 12L, 207C written
[root@localhost scripts]# expect expect2.ext
spawn ssh root@192.168.44.129
root@192.168.44.129's password:
Last login: Sat Mar 28 20:43:25 2020 from 192.168.44.10
#如何在shell中調(diào)用expect實現(xiàn)自動登陸
#!/bin/bash
#
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 20
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue}
"password" { send "$password\n" }
}
#expect eof一定要加,要不然會出錯
expect eof
EOF
3、簡述linux操作系統(tǒng)啟動流程
首先來說一說操作系統(tǒng)的啟動流程,主要分為硬件層次啟動,BootLoader層次啟動和操作系統(tǒng)層次啟動。先來說一說硬件層次的啟動過程,這也是所有計算機通用的啟動過程:
硬件層次啟動過程
1. POST過程
給計算機通電,按下電源開關(guān),主板上電,讀取CMOS上的BIOS程序,做如下動作:
? A: 檢測硬件配置信息,完成硬件初始化;
? B:根據(jù)BIOS設(shè)置好的啟動順序去尋找啟動設(shè)備,并發(fā)起硬中斷INT13;
2. MBR過程
根據(jù)在BIOS設(shè)置中設(shè)置好的啟動設(shè)備,例如:第一啟動順序為硬盤,這時候硬中斷INT13直接讀取
其硬盤中第一個扇區(qū)里代碼,這個第一個扇區(qū)中的代碼真的很重要,沒有它你的硬盤分區(qū)找不到,你的硬盤就不能啟動操作系統(tǒng)。這小小的512字節(jié)的MBR的主要內(nèi)容是這樣的:
A:446字節(jié)的引導(dǎo)記錄,也稱作為Boot Loader
B:64字節(jié)的分區(qū)表,Partion Table
C:55AA 狀態(tài)位,也可以稱為停止位,稱為狀態(tài)位是因為,沒有55AA就不被識別為MBR,55AA也標識了MBR到此為止。
到此整個硬件層次啟動過程就結(jié)束了,接下來就是要啟動Boot Loader了。
BootLoader層次啟動過程
在硬件層次這個446字節(jié)的BootLoader啟動代碼里,不需要裝載任何驅(qū)動程序就能執(zhí)行;BootLoader主要有以下幾種Grub、LiLo和spfdisk,BootLoader是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核做好一切準備。最初的BootLoader的主要功能:
A:引導(dǎo)至另一個loader或內(nèi)核;
到了后來硬盤接口,從IDE,演變成SCSI,SATA,USB等,而其文件系統(tǒng)也發(fā)生了變化,windows的
fat16/32 ntfs,linux的ext2 ext3 ext4 xfs等等。446字節(jié)代碼了,太小了,只有將其在后續(xù)的文件系統(tǒng)里找個地方存放,所以有了stage1,stage1_5,stage2階段:
stage1階段:就可以看成這446字節(jié)的代碼;
stage1_5階段:其實就是loader所在分區(qū)存放的的驅(qū)動程序;
stage2階段:真正的Loader代碼,主要是為了加載內(nèi)核;
所以一個完整的BootLoader的功能有:
A:引導(dǎo)至另一個loader或內(nèi)核;
B:提供菜單選擇功能;
C:管理菜單;
D:加載內(nèi)核,以及內(nèi)核所在文件系統(tǒng)驅(qū)動;
操作系統(tǒng)層次啟動
BootLoader將控制權(quán)轉(zhuǎn)交給操作系統(tǒng)或者內(nèi)核以后,其基本需要如下過程,才能將一個真正意義上的操作系統(tǒng)啟動完畢:
A:硬件初始化,加載各硬件所需驅(qū)動;
B:運行初始化操作系統(tǒng)過程,例如:IP地址,主機名,開機啟動那些服務(wù)等等。
C:提供用戶交互界面。
有了上述的鋪墊,我們再來說一說Linux的啟動過程
1、POST : 加電自檢
2、加載BootLoader
linux系統(tǒng)里BootLoader就是GRUB,C6的GRUB0.97程序是,C7是GRUB2.0
[root@centos6 ~]# rpm -qi grub
Name : grub Relocations: (not relocatable)
Version : 0.97 Vendor: CentOS
Release : 99.el6 Build Date: Thu 23 Mar 2017 08:34:51 PM CST
Install Date: Mon 27 Jan 2020 11:44:13 AM CST Build Host: c1bm.rdu2.centos.org
Group : System Environment/Base Source RPM: grub-0.97-99.el6.src.rpm
Size : 2496968 License: GPLv2+
Signature : RSA/SHA1, Thu 23 Mar 2017 11:03:24 PM CST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.gnu.org/software/grub/
Summary : Grand Unified Boot Loader.
Description :
GRUB (Grand Unified Boot Loader) is an experimental boot loader
capable of booting into most free operating systems - Linux, FreeBSD,
NetBSD, GNU Mach, and others as well as most commercial operating
systems.
#c7 GRUB2.X
[root@centos7 scripts]# rpm -qi grub2
Name : grub2
Epoch : 1
Version : 2.02
Release : 0.2.10.el7.centos.1
Architecture: x86_64
Install Date: Mon 27 Jan 2020 08:03:27 PM CST
Group : System Environment/Base
Size : 7390102
License : GPLv3+
Signature : RSA/SHA256, Fri 04 Jul 2014 09:46:10 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : grub2-2.02-0.2.10.el7.centos.1.src.rpm
Build Date : Tue 01 Jul 2014 12:17:46 AM CST
Build Host : kbuilder.dev.centos.org
Relocations : (not relocatable)
URL : http://www.gnu.org/software/grub/
Summary : Bootloader with support for Linux, Multiboot and more
Description :
The GRand Unified Bootloader (GRUB) is a highly configurable and customizable
bootloader with modular architecture. It support rich varietyof kernel formats,
file systems, computer architectures and hardware devices. This subpackage
provides support for PC BIOS systems.
stage1: 加載Bootloader的主程序(位于MBR中)用于加載stage 1.5的代碼;
? stage1.5: 位于MBR之后的扇區(qū),讓statge1中的bootloader能夠識別stage2所在的分區(qū)文件系統(tǒng);
? stage2:通過Bootloader加載所有的配置文件及相關(guān)參數(shù),這些參數(shù)都位于磁盤/boot/grub中;
3、內(nèi)核初始化
? 此時BootLoader需要將內(nèi)核程序加載至內(nèi)存,并進行解壓,展開,控制權(quán)也移交給內(nèi)核;內(nèi)核需要檢測硬件設(shè)備,并加載硬件驅(qū)動;但是內(nèi)核程序本身也是放在硬盤的/boot分區(qū)上,這就需要先加載硬盤驅(qū)動;
? 此時就需要一個臨時根文件系統(tǒng)代替一個真正的文件系統(tǒng)行使權(quán)力,即initrd. Bootloader會將initrd程序加載至內(nèi)存,initrd會模擬出一個虛擬的根文件系統(tǒng),這樣就可以加載硬件驅(qū)動等啟動過程中需要的程序,加載完成后,并完成根切換;然后內(nèi)核運行用戶空間第一個程序/sbin/init ,至此,系統(tǒng)將交由init進行管理;
4、init 初始化
? init 主要是進行軟件環(huán)境初始化,它會讀取配置文件/init/inittab(cent5/6)讀取默認運行級別;運行 /etc/rc.d/rc.sysinit 進行系統(tǒng)初始化;關(guān)閉相應(yīng)級別的需要停止的服務(wù),啟動對應(yīng)級別下需要開啟的服務(wù)--->設(shè)置登錄終端;整個啟動過程如圖所示:

4、破解centos7 密碼
方法1
a. 啟動時任意鍵暫停啟動

b.按e鍵進入編輯模式,將光標移動linux16開始的行,添加內(nèi)核參數(shù)rd.break,按ctrl-x啟動


c.重新掛在真正的根mount –o remount,rw /sysroot 并且切換到根里chroot /sysroot

d.修改密碼重啟即可。
方法2
同樣的方法,只不過在linux16開始的行,改為rw init=/sysroot/bin/sh,也就是相當于
mount –o remount,rw /sysroot 這一步。

