1色建、用shell腳本實(shí)現(xiàn)自動(dòng)登錄機(jī)器
1 #!/bin/bash
13 pass='123456'
14
15 expect <<EOF
16 set timeout 10
17 spawn ssh $1@$2
18 expect {
19 "yes/no" { send "yes\n";exp_continue }
20 "password" { send "$pass\n" }
21 }
22 expect eof
23 EOF
2、shell 判斷一個(gè)值bone是否在數(shù)組arrayZ=( one two three four five five )中
13 arrayZ=( one two three four five five )
14 bone="bone"
15 num=$((${#arrayZ[@]}-1))
16 for((i=0;i<=$num;i++));do
17 if [ "$bone" = "${arrayZ[$i]}" ];then
18 k=1
19 break
20 fi
21 done
22
23 if [ "$k" ];then
24 echo "$bone在arrayZ數(shù)組中"
25 else
26 echo "$bone不在arrayZ數(shù)組中"
27 fi
3宦棺、用命令或者腳本實(shí)現(xiàn) 0057AF051EFF 變?yōu)?00:57:AF:05:1E:FF 。
13 var="0057AF051EFF"
14 length="${#var}"
15 for((i=0;i<$length;i+=2));do
16 if [ ! "$mac" ];then
17 mac="${var:$i:2}"
18 else
19 mac="$mac:${var:$i:2}"
20 fi
21 done
22
23 echo $mac
4黔帕、a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 ! @ # $ % ^ & * ( ) - _ = + \ / ' " ; : [ ] { } , . ?
用以上字符代咸,結(jié)合數(shù)組,實(shí)現(xiàn)一個(gè)隨機(jī)生成20位密碼的腳本
13 var=( a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X
Y Z 1 2 3 4 5 6 7 8 9 0 \! \@ \# \$ \% \^ \& \* \( \) \- \_ \= \+ \\ \/ \' \" \; \: \[ \] \{ \} \, \. \? )
14
15 num=${#var[@]}
16 pass_length=20
17
18 for i in `seq 1 ${pass_length}`;do
19 ran=$((${RANDOM}%${num}))
20 [ ! $pass ] && { pass="${var[$ran]}"; continue; }
21 pass="${pass}${var[$ran]}"
22 done
23 echo $pass
5成黄、詳細(xì)敘述centos7開機(jī)流程
1. post(Power-On-Self-Test) 加電自檢
主要實(shí)現(xiàn)的功能是檢測(cè)各個(gè)外圍硬件設(shè)備是否存在而且能夠正常運(yùn)行起來(lái)呐芥,實(shí)現(xiàn)這一自檢功能的是固化在主板上的ROM(主要代表為CMOS)芯片上的BIOS(Basic Input/Output System)程序;例如BIOS會(huì)檢測(cè)CPU奋岁、Memory以及I/O設(shè)備是否能夠正常運(yùn)行思瘟,如果是個(gè)人計(jì)算機(jī)的話可能還會(huì)檢測(cè)一下顯示器。只要一通電闻伶,CPU就會(huì)自動(dòng)去加載ROM芯片上的BIOS程序滨攻,是這樣來(lái)實(shí)現(xiàn)的。而檢測(cè)完成之后就進(jìn)行硬件設(shè)備的初始化。
2. bootsequence(BIOS,選擇啟動(dòng)設(shè)備)
主要實(shí)現(xiàn)的功能是選擇要啟動(dòng)的硬件設(shè)備光绕,選擇了之后就可以讀取這個(gè)設(shè)備上位于MBR里頭的bootloader了女嘲。這一步的實(shí)現(xiàn)是這樣的:根據(jù)BIOS中對(duì)啟動(dòng)順序的設(shè)定,BIOS自己會(huì)依次掃描各個(gè)引導(dǎo)設(shè)備诞帐,然后第一個(gè)被掃描到具有引導(dǎo)程序(bootloader)的設(shè)備就被作為要啟動(dòng)的引導(dǎo)設(shè)備欣尼。
3. bootloader(MBR)
這一步實(shí)現(xiàn)起來(lái)的步驟比較多,前面的BIOS通過(guò)讀取并執(zhí)行啟動(dòng)設(shè)備的MBR中的bootloader停蕉,而bootloader要實(shí)現(xiàn)的功能就是提供一個(gè)菜單給用戶愕鼓,讓用戶去選擇要啟動(dòng)的系統(tǒng)或不同的內(nèi)核版本,然后把用戶選擇的內(nèi)核版本加載至RAM中的特定空間慧起,接著在RAM中解壓菇晃、展開,而后把系統(tǒng)控制權(quán)移交給內(nèi)核完慧。
grub是bootloader中的一種谋旦,就grub來(lái)說(shuō),為了打破在MBR中只有446Bytes用于存放bootloader這一限制屈尼,所以這一步的實(shí)現(xiàn)是這樣的:grub是通過(guò)分成三個(gè)階段來(lái)實(shí)現(xiàn)加載內(nèi)核這一功能的册着,這三個(gè)階段分別是:stage1, stage1.5以及stage2。其中:
stage1:存放于MBR的前446Bytes脾歧,用于加載stage1.5階段甲捏,目的是為了識(shí)別并驅(qū)動(dòng)stage2(或者/boot)所在分區(qū)的文件系統(tǒng);
stage1.5:存放于MBR之后的扇區(qū)鞭执,加載stage2所在分區(qū)的文件系統(tǒng)驅(qū)動(dòng)司顿,讓stage1中的bootloader能識(shí)別stage2所在分區(qū)的文件系統(tǒng);
stage2:存放于磁盤分區(qū)之上兄纺,具體存放于/boot/grub目錄之下大溜,主要用于加載內(nèi)核文件(vmlinuz-VERSION-RELEASE)以及ramdisk這個(gè)臨時(shí)根文件系統(tǒng)(initrd-VERSION-RELEASE.img或initramfs-VERSION-RELEASE.img)。
概述:假如要啟動(dòng)的是硬盤設(shè)備估脆,首先我們的硬件平臺(tái)主板BIOS必須能夠識(shí)別硬盤钦奋,然后BIOS才能加載硬盤中的bootloader,而bootloader自身加載后就能夠直接識(shí)別當(dāng)前主機(jī)上的硬盤設(shè)備了疙赠;不過(guò)付材,能夠識(shí)別硬盤設(shè)備不代表能夠識(shí)別硬盤設(shè)備中的文件系統(tǒng),因?yàn)槲募到y(tǒng)是額外附加的一層軟件組織的文件結(jié)構(gòu)圃阳,所以要對(duì)接一種文件系統(tǒng)厌衔,就必須要有對(duì)應(yīng)的能夠識(shí)別和理解這種文件系統(tǒng)的驅(qū)動(dòng),這種驅(qū)動(dòng)就稱為文件系統(tǒng)驅(qū)動(dòng)捍岳。而stage1.5就是向grub提供文件系統(tǒng)驅(qū)動(dòng)的富寿,這樣stage1就能訪問(wèn)stage2及內(nèi)核所在的分區(qū)(/boot)了睬隶。
注意:kernel和initramfs的文件路徑均以grub的"根"作為起始目錄,且存放于stage2所在分區(qū)上作喘;
需要注意的是理疙,stage2、內(nèi)核以及ramdisk文件通常放置于一個(gè)基本磁盤分區(qū)之上泞坦,因?yàn)間rub無(wú)法驅(qū)動(dòng)lvm窖贤、高級(jí)軟raid等復(fù)雜邏輯設(shè)備,除非提供一個(gè)復(fù)雜的驅(qū)動(dòng)接口贰锁,否則如果stage2及內(nèi)核等文件都存放在lvm等復(fù)雜邏輯設(shè)備上將無(wú)法被stage1所識(shí)別赃梧,更別說(shuō)加載了!
4. kernel初始化
Kerenl在得到系統(tǒng)控制權(quán)之后豌熄,首先要進(jìn)行自身初始化授嘀,而初始化的主要作用是:
(1)探測(cè)可識(shí)別到的所有硬件設(shè)備;
bootloader將系統(tǒng)控制權(quán)移交給內(nèi)核就好比如后朝推翻前朝锣险,統(tǒng)治者(內(nèi)核)當(dāng)權(quán)之后蹄皱,首先要檢查一下有哪些是前朝所留下的,例如有哪些領(lǐng)土芯肤、人力巷折、財(cái)力、兵力可用等等崖咨。
(2)加載硬件驅(qū)動(dòng)程序锻拘,即加載真正的根文件系統(tǒng)所在設(shè)備的驅(qū)動(dòng)程序(有可能會(huì)借助于ramdisk加載驅(qū)動(dòng));
這就像統(tǒng)治者(內(nèi)核)在得知底下存在的人力击蹲、財(cái)力之后署拟,開始將可以“為我所用”的人力納入麾下,聽自己使喚歌豺,而不聽使喚的殺掉推穷;
(3)以只讀方式掛載根文件系統(tǒng);
如果有借助于ramdisk這個(gè)臨時(shí)文件系統(tǒng)(虛根)类咧,則在這一步之后會(huì)執(zhí)行根切換缨恒;否則不執(zhí)行根切換。
(4)運(yùn)行用戶空間的第一個(gè)應(yīng)用程序:systemd.
到這里內(nèi)核空間的啟動(dòng)流程就結(jié)束了轮听,而接下來(lái)是用戶空間完成后續(xù)的系統(tǒng)啟動(dòng)流程。
5. init管理用戶空間服務(wù)進(jìn)程
systemd執(zhí)行默認(rèn)target配置岭佳,配置文件/etc/systemd/system/default.target
systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
systemd啟動(dòng)multi-user.target下的本機(jī)與服務(wù)器服務(wù)
systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
Systemd執(zhí)行multi-user.target下的getty.target及登錄服務(wù)
systemd執(zhí)行g(shù)raphical需要的服務(wù)
6血巍、編寫Nginx的systemd配置文件, 實(shí)現(xiàn)nginx進(jìn)程開機(jī)啟動(dòng)
[root@localhost ~]#vim /etc/systemd/system/nginx.service
[Unit]
Description=NGINX
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
[Install]
WantedBy=multi-user.target
[root@localhost ~]#systemctl enable nginx.service