1、描述centos6系統開機啓動流程;mysql
(1):首先按下開機按鈕,POST:電源加電,計算機經過BIOS來調用CMOS中各個硬件設備的配置信息。linux
CMOS:CMOS是集成在主板上的一塊可讀寫的RAM芯片,主要是用來保存當前系統硬件配置和操做人員對某些參數的設定,因爲主板給CMOS提供也一塊單獨供電的電池,因此不管系統是關機仍是忽然斷電,CMOS的設定是不會丟失的。正則表達式
BIOS:因爲CMOS芯片只是一塊存儲器,只具備保存數據的功能,因此計算機廠商把CMOS設置程序作到了BIOS裏面,開機按下特定的按鈕就能進入其中進行查看和設置,因此CMOS設置人們也叫作BIOS設置。sql
(2):BIOS會執行開機自檢,而後開始執行硬件檢測和初始化,以後BIOS根據boot Sequence按次序查找各引導設備有沒有MBR,第一個找到MBR的設備即爲本次啓動要用到的設備shell
MBR:MBR即主引導記錄,硬盤的0柱面、0磁頭、1扇區稱爲主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT和分區有效標誌。在總共512字節的主引導扇區裏主引導程序(boot loader)佔446個字節,第二部分是分區表,即DPT,佔64個字節。第三部分是magicnumber,佔2個字節。express
(3):讀取並執行第一個啓動設備內MBR的bootLoader(即grub等程序)。apache
GRUB:他的做用提供一個菜單,容許用戶選擇要啓動系統或不一樣的內核版本,把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,並把系統控制權移交給內核;vim
GRUB分爲三個階段:stage 1,stage1.5, stage 2centos
當進入系統秒讀的時候,按下任意鍵就能進入GRUB選擇菜單界面,以下圖數組
提示按下e健能夠進入編輯模式,以下圖
方框內第一行表明boot目錄所在的位置,此處爲第一個磁盤第一個分區,
方框內第二行表示內核所在位置以及版本號
方框內第三行是一個虛擬文件系統,可經過這個文件系統可找到根分區位置 以方便內 核找到根分區、init程序、以及必要的驅動程序、庫文件
在這個見面中,選擇一個選項按下e健,表示對你選擇的選項進行修改,好比選擇第一 行以下圖:
在圖一和圖二界面中直接按下c健能夠直接進入GRUB命令行界面,這裏能夠手動指定內核和initrd。
(4)GRUB經過GRUB2找到內核,GRUB將CPU的控制權交給內核,CPU將控制器轉交給內核,內核首先進行自身初始化,包括探測可識別到的全部硬件設備;加載硬件驅動程序;(有可能會藉助於ramdisk加載驅動);以只讀方式掛載根文件系統;運行用戶空間的第一個應用程序:/sbin/init;
由於kernel沒法識別磁盤,因此要藉助ramdisk(虛擬文件系統)的獲取磁盤的驅動程序。CentOS 6中的虛擬文件系統是initramfs,內核經過該程序加載啓動過程當中所須要的內核模塊,也就是USB,RAID,LVM。SCSI等文件系統與硬盤接口的驅動程序,等加載完成以後,內核就會調用/sbin/init來開始後續的正常啓動流程
(5)調用/sbin/init程序
/sbin/init最主要的功能就是主板軟件執行的環境,其配置文件是/etc/inittab和/etc/init/*.conf
/etc/inittab:這裏面定義了系統啓動的執行等級,系統初始化流程的文件,七個運行等級須要啓動的服務路徑;
run level 運行等級:
init 0:表示關機
init 1:單用戶模式(root, 無須登陸),系統出問題時的維護
init 2:多用戶模式,會啓動網絡功能,但不會啓動NFS
init 3:多用戶模式,純文本界面;
init 4:預留級別;
init 5:多用戶模式,圖形界面;
init6:表示重啓
id:3:initdefault: 表示默認開機級別爲3,自動進入命令行界面
si::sysinit:/etc/rc.d/rc.sysinit 系統初始化環境執行的腳本文件路徑
七個不一樣級別要啓動的script路徑
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
(6)系統初始化
(a) 設置主機名
(b) 設置歡迎界面
(c) 激活udev和selinux
(d) 掛載/etc/fstab文件中定義的文件系統
(e) 檢測根文件系統,並以讀寫方式從新掛載根文件系統
(f) 設置系統時鐘
(g) 激活swap設備
(h) 根據/etc/sysctl.conf文件設置內核參數
(i) 激活lvm及software raid設備(硬raid是在開機時啓動的)
(j) 加載額外設備驅動程序
(k) 清理操做
(7)執行 /etc/rc.d/rc 腳本
此腳本用來來控制系統啓動的時候啓動或者關閉那些服務,這些腳本是否開機自啓動,可由 chkconfig 命令來管理。
(8)最後會執行 /bin/login 登陸用戶。至此係統啓動過程完成。
2、描述/etc/rc.d/rc.sysinit腳本功能;
(1)、獲取主機名,讀取/etc/sysconfig/network配置文件,獲取主機的默認網關的網絡環境
(2)、測試與掛在內核設備/proc記憶USB設備/sys,若是有USB設備則會主動加載USB設備的驅動程序,而且掛在USB的文件系統
(3)、是否啓動SELinux
(4)、啓動系統的隨機數生成器,隨機數生成器能夠幫助系統進行一些密碼演算的功能,在此須要啓動兩次隨機數生成器。
(5)、設置屏幕的默認字體
(6)、設置啓動是的歡迎界面
(7)、設置系統時間和時區
(8)、設備接口的檢測
(9)、用戶自定義模塊的加載
用戶可在/etc/sysconfi.modules/*.modules中加入自定義的模塊
(10)、加載內核相關信息
系統會主動讀取/etc/sysctl.conf配置文件裏面的設置值
(11)、設置主機名和初始化電源管理模塊
(12)、初始化軟件磁盤陣列,主要經過/etc/mdadm.conf來設置
(13)、初始化LVM的文件系統功能
(14)、以fsck檢測磁盤文件系統
(15)、從新以可讀寫模式掛載系統磁盤
(16)、啓動quota(顯示磁盤使用狀況和配額)功能,
(17)、啓動系統僞隨機數生成器
(18)、清楚系統啓動過程的臨時文件
(19)、將啓動相關信息加載/va/log/dmesg文件中
3、總結文本處理工具sed及awk的用法;(必須附帶示例)
這裏以/data/sed.test文件爲例
cat /data/sed.test
Hello word!
My name is LouIS
Never forget to say 「thanks」.
Believe in yourself.
I can because i think i can.
Never say die.
sed:
sed是一個行編輯器,他不會編輯原文件,而是一次讀取一行到sed本身的緩存空間,這個緩存空間叫作模式空間,sed在模式空間完成編輯以後,將編輯以後的內容打印至屏幕或者指向目標文件,他不作原地編輯。若是不是刪除命令,大多數編輯的內容都會打印至屏幕。
sed還有一個保持空間,前一個sed編輯沒有完成要處理下一個sed編輯,把以前一個保存在sed的保持空間裏。
語法格式:sed [OPTION]... ‘sed腳本’ inputfile...
[OPTION]: 經常使用選項
-n:靜默模式,默認sed會輸出模式空間裏面的內容,-n是不輸出模式空間類容至屏幕,除非單獨指定的類容
-e:多點編輯功能,在一個sed命令實現過個編輯操做
-f:-f/path/to/script_file:從指定文件中讀取編輯腳本
-r:支持使用擴展的正則表達式
-i:原處編輯,就是修改原文件
地址定界原理:
1、不給地址:對全文進行處理
若是不給指定的行,或者範圍,sed命令將對全文進行處理
2、只給一個地址:單地址
#:數字,指定的行
這個地方指數字,表明行
/pattern/:被此處模式所可以匹配到的每一行
這裏表示匹配的字符串所在的行
3、地址範圍:
#,#
指定行之間,例如1,5 表示第一行到第五行
#,+#
例如:1,+3表示第一行到加上3的行數之間
4、~步進
1~2,顯示基數行
2~2,顯示偶數行
sed腳本的編輯子命令
1、d:表示刪除給定的行
示例:
刪除/data/sed.test文件中以Never開頭的行
[root@localhost data]# sed'/^Never/d' /data/sed.test Helloword! Myname is LouIS Believein yourself. I can because i think i can.
刪除/data/sed.test文件中第2行
[root@localhostdata]# sed '2d' /data/sed.test Helloword! Neverforget to say 「thanks」. Believein yourself. Ican because i think i can. Never say die.
刪除/data/sed.test文件中第2-5行
[root@localhostdata]# sed '2,5d' /data/sed.test Helloword! Never say die.
2、p:顯示模式空間中匹配到的行的內容
示例:
sed '/^root/p' /data/sed.test [root@localhostdata]# sed '/^Never/p' /data/sed.test Helloword! Myname is LouIS Neverforget to say 「thanks」. Neverforget to say 「thanks」. Believein yourself. Ican because i think i can. Neversay die. Never say die.
這個命令顯示文件全部內容,而且把匹配到的行打印兩遍,由於他是打印命令,不過不知名須要打印內容,默認所有顯示,因此p命令通常跟-n參數一塊兒使用
[root@localhostdata]# sed -n '/^Never/p' /data/sed.test Neverforget to say 「thanks」. Never say die.
3、a :追加文本之符合條件行的下一行,支持多行追加 格式:a \text
示例:
在/data/sed.test文件中Never開頭的行下面追加Long live China
[root@localhostdata]# sed '/^Never/a \Long live China' /data/sed.test Helloword! Myname is LouIS Neverforget to say 「thanks」. Longlive China Believein yourself. Ican because i think i can. Neversay die. Long live China
4、i:在符合條件行的上一行添加一行,支持多行添加 格式:i \text
示例
在/data/sed.test文件中Never開頭的行上面面追加Long live China
sed '/^Never/i \Long live China' /data/sed.test [root@localhost~]# sed '/^Never/i \Long live China' /data/sed.test Helloword! Myname is LouIS Longlive China Neverforget to say 「thanks」. Believein yourself. Ican because i think i can. Longlive China Never say die.
5、c:把符合條件的行替換成指定的行,支持多行替換 格式:c \text
示例:
把/data/sed.test文件中以Never開頭的行替換成Long live China
[root@localhost~]# sed '/^Never/c \Long live China' /data/sed.test Helloword! Myname is LouIS Longlive China Believein yourself. Ican because i think i can. Long live China
6、w:把符合條件內容的行另存爲指定文件中 格式:w /path/to/some
示例:
把/data/sed.test文件以Never開頭的行另存爲/data/sed.test1裏面
[root@localhost data]# sed -n '/^Never/w /data/sed.test1'/data/sed.test [root@localhostdata]# cat /data/sed.test1 Neverforget to say 「thanks」. Never say die.
7、r:讀取指文件的內容,放置符合條件行的後面 格式:r /path/to/some
示例:
把/etc/sysconfig/network-scripts/ifcfg-eth0文件內容放置/data/sed.test文件中以Never開頭行的後面
[root@localhostdata]# sed '/^Never/r /etc/sysconfig/network-scripts/ifcfg-eth0' /data/sed.test Helloword! Myname is LouIS Neverforget to say 「thanks」. DEVICE=eth0 HWADDR=00:0C:29:E7:CA:5F TYPE=Ethernet UUID=5004c3f9-33d7-42e9-9e6d-5a947988174d ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp Believein yourself. Ican because i think i can. Neversay die. DEVICE=eth0 HWADDR=00:0C:29:E7:CA:5F TYPE=Ethernet UUID=5004c3f9-33d7-42e9-9e6d-5a947988174d ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=dhcp
8、=:顯示符合條件行的行號
顯示/data/sed.test文件有Never字符串行的行號
[root@localhostdata]# sed '/Never/=' /data/sed.test Helloword! Myname is LouIS 3 Neverforget to say 「thanks」. Believein yourself. Ican because i think i can. 6 Never say die.
只顯示行號則能夠加上-n參數
9、!:取反條件,他是對地址定界去反
示例:
刪除/data/sed.test文件中不是以Never開頭的全部行
[root@localhostdata]# sed '/^Never/!d' /data/sed.test Neverforget to say 「thanks」. Never say die.
10、s:查找和替換
格式:s/原內容/替換後的內容/ 也能夠是用其餘分隔符@@@,###等
把/data/sed.test內容中Never字符刪了
[root@localhostdata]# sed 's#Never##' /data/sed.test Helloword! Myname is LouIS forget to say 「thanks」. Believein yourself. Ican because i think i can. saydie.
把/data/sed.test內容中name改成大寫
[root@localhostdata]# sed 's@name@NAME@' /data/sed.test Helloword! MyNAME is LouIS Neverforget to say 「thanks」. Believein yourself. Ican because i think i can. Never say die.
把/data/sed.test內容Never字符串後面加空格和China
[root@localhostdata]# sed 's/Never/& China/' sed.test Helloword! Myname is LouIS NeverChina forget to say 「thanks」. Believein yourself. Ican because i think i can. Never China say die.
&表示原內容
sed高級編輯命令:
h:把模式空間中的內容行覆蓋至保持空間中,保持空間的內容行會丟失
H:把模式空間中的內容行追加至保持空間中,保持空間的內容行不會丟失
g:從保持空間取出內容行覆蓋至模式空間
G:從保持空間取出內容行追加至模式空間
x:把模式空間的內容行與保持空間的內容行進行互換
n:讀取匹配到行的下一行至模式空間
N:追加匹配到行的下一行至模式空間
d:刪除模式空間中的行,
D:刪除多行模式空間中的全部行
一些表達式
sed-n 'n;p' /etc/passwd 顯示偶數行
sed '1!G;h;$!d' /etc/passwd 逆向顯示文件內容
sed'$!N;$!D' /etc/passwd 顯示文件後兩行
sed '$!d' /etc/passwd想· 顯示文件最後一行
sed 'G' /etc/passwd 在每一行後面添加空白行
sed 'g' /etc/passwd 全部行都用空白代替
sed '/^$/d;G' /etc/passwd 在每一行添加一個空白行,多個空白行合併成一個空白行
sed 'n;d' /etc/passwd 顯示基數行
sed -n '1!G;h;$p' /etc/passwd 逆向顯示文件內容
awk:
awk是一個強大的文本分析工具, 簡單來講awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各類分析處理.
awk有三個版本,通常未作說明的默認是gawk,也就是GNU版本的awk,在linux上使用awk默認就是gawk,awk是個符號鏈接,指向gawk。
基本用法:awk [option] 'program' FILE...
option:選項
-F:指明分隔符,若是不知名默認分隔符是空白字符
-v:var=value自定義變量
program:awk語句
pattern:模式,(後面再說)
action:動做
print:打印
printf:格式化打印
輸出命令:
1、print:打印
格式:print item1,itme2...
print後面接字段item,這些item能夠是數值也能夠是字符串,變量或awk的表達式,多個字段要用都好隔開,若是不指定字段,默認全文打印。
示例:
打印/etc/passwd文件中第一字段和第四字段
awk -F: '{print $1,$4}' /etc/passwd root0 bin1 daemon2 adm3 lp 4 ...
2、變量
2.1、內建變量
FS:input field seperator 默認爲空白字符
輸入時使用的字段分隔符,也就是文件中要使用什麼做爲字段分隔的字符
顯示/etc/passwd中第一字段和第六字段
awk -v FS=':' '{print $1,$6}' /etc/passwd,和-F的意思差很少 root/root bin/bin daemon/sbin adm/var/adm lp /var/spool/lpd
OFS:output field seperator 默認爲空白字符
輸出時使用的字段分隔符,輸入至屏幕時用什麼分隔符來分隔字段
顯示/etc/passwd中第一字段和第六字段,而且用冒號分割輸出內容
awk -v FS=':' -v OFS=':' '{print $1,$6}' /etc/passwd root:/root bin:/bin daemon:/sbin adm:/var/adm lp:/var/spool/lpd
RS:input record seperator
輸入時的換行符
ORS:output record seperator
輸出時的換行符
NF:number of field 默認分隔符爲空白
每一行的字段數量
查看/etc/passwd每一行的字段數量
awk -F: '{print NF}' /etc/passwd cord 7 7 7 7 7 NR:number of record
文件中的行數
awk '{print NR}' /etc/passwd 1 2 3 4 5 6 ....
FNR:各文件分別計數,後面能夠接不一樣文件
FILENAME:當前正在處理的文件的文件名
awk -F: '{print FILENAME }' /etc/passwd
ARGC:命令行參數的個數
awk -F: '{print ARGC}' /etc/passwd
ARGV:數組,保存的是命令行所給定的各參數,
查看你輸入命令中參數,要用ARGV[0|1|2...]來實現
awk '{print ARGV[0]}' /etc/passwd awk awk ....
2.2、自定義變量
2.2.1、-v var=value變量名區分字符大小寫
(2)在program中直接定義
3、printf命令
安裝給定的格式輸出匹配到的字段內容
格式:printf FORMAT,item1,item2...
3.1、FORMAT必須給出
3.2、printf不會自動換行,須要顯示給出換行控制符:\n
3.4、FORMAT中須要分別給後面的每一個item指定一個格式化符號
格式符:
%c:顯示字符的ASCII碼
%d,%i:顯示十進制整數
%e,%E:科學計數法數值顯示
%f,顯示浮點數
%g,%G:以科學計數法或浮點形式顯示數值
%s: 顯示字符串
%u:無符號整數
%%:顯示%自身
修飾符:是來修飾格式符的
#[.#]: 第一個數字用來控制顯示的寬度,第二個字符表示小數點後的精度
3.1f
-: 左對齊
+:顯示數值的符號
示例:
一、awk -F ':' '{printf "Username: %s\n",$1}' /etc/passwd Username:root Username: bin Username: daemon Username: adm ... 若是不給換行符:\n,顯示內容以下: Username: rootUsername: binUsername: daemonUsername:admUsername: lpUsername: syncUsername: shutdownUsername: haltUsername:mailUsername: uucpUsername: operatorUsername: gamesUsername: gopherUsername:ftpUsername: nobodyUsername: dbusUsername: usbmuxdUsername: vcsaUsername: rpcUsername:rtkitUsername: avahi-autoipdUsername: abrtUsername: rpcuserUsername: nfsnobodyUsername: haldaemonUsername:gdmUsername: ntpUsername: apacheUsername: saslauthUsername: postfixUsername:mysqlUsername: pulseUsername: sshdUsername: tcpdump
默認是不帶換行的,因此必要的時候必定要加換行符
二、awk -F ':' '{printf"Username: %15s, UID: %d\n",$1,$3}' /etc/passwd Username: root, UID: 0 Username: bin, UID: 1 Username: daemon, UID: 2 Username: adm, UID: 3 默認是作對齊,若是要由對齊,以下 awk -F ':' '{printf"Username: %-15s, UID: %d\n",$1,$3}' /etc/passwd Username: root , UID: 0 Username: bin , UID: 1 Username: daemon , UID: 2 Username: adm , UID: 3 Username: lp , UID: 4
4、操做符
算術操做符:
x+y,x-y,x*y,x/y,x^y,x%y
-x
+x: 轉換爲數值
字符串操做符:沒有符號操做符,表示字符串鏈接
賦值操做符:
=,+=,-=,*=,/=,%=,^=
++,--
比較操做符:
>,>=,<,<=,!=,==
模式匹配符:
~:左側字符串是否能被右側模式匹配
!~:相反
邏輯操做符:
&&:與
||:或
!:非
函數調用:
function_name(argu1,argu2...)
條件表達式:
selector?if-true-expression:if-flse-expression
示例:
判斷是不是系統用戶
awk -F ':''{$3>=500?usertype="Common User":usertype="Sysadmin orSysUser";printf "%15s:%-s\n",$1,usertype}' /etc/passwd root:Sysadmin or SysUser bin:Sysadmin or SysUser daemon:Sysadmin or SysUser adm:Sysadmin or SysUser lp:Sysadmin or SysUser
5、PATTERN
5.1、empty:空模式,匹配每一行,以上示例用的都是這個模式
5.2、/regular expression/: 僅處理可以被此處模式匹配到的行
示例:僅處理root開頭的行
awk '/^root/{print $1}'/etc/passwd root:x:0:0:root:/root:/bin/bash
還能夠取反
awk '!/^root/{print $1}'/etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync ....
5.3、relational expression:關係表達式,結果有真有假
結果爲真才被處理,結果爲假被過濾掉
真:結果爲非0值,非空字符串
假:1,空字符串
示例:
判斷用戶是不是系統用戶
awk -F: '$3>=500{print$1,$3}' /etc/passwd nfsnobody 65534 user1 500 user2 501 user3 502 user4 503 user5 504 user6 505 user7 506 user8 507 user9 508 user10 509
顯示shell爲/bin/bash的用戶名
awk -F: '$NF=="/bin/bash"{print$1,$NF}' /etc/passwd 或 awk -F: '$NF~/bash$/{print$1,$NF}' /etc/passwd root /bin/bash mysql /bin/bash user1 /bin/bash user2 /bin/bash user3 /bin/bash user4 /bin/bash user5 /bin/bash user6 /bin/bash user7 /bin/bash user8 /bin/bash user9 /bin/bash user10 /bin/bash
5.4、line ranges:行範圍
/pat1/,/pat2/ 只支持字符串格式,
注意:不支持直接給出數字的格式
示例:
以root開頭行開始到以tcp開頭的行結束
awk -F: '/^root/,/^tcp/{print $1}'/etc/passwd或 awk -F: '(NR>=2&&NR<=10){print$1}' /etc/passwd
5.5、BEGIN/DEN模式
BEGIN{}:僅在開始處理文件中的文本以前執行一次
在執行咱們處理以前給出一個模式,他只執行一次,後面跟着執行的內容
示例
awk -F: 'BEGIN{print " username uid \n--------------------"}{print $1,$3}' /etc/passwd
END{}:僅在文件處理完成以後執行一次
awk -F: 'BEGIN{print " username uid \n--------------------"}{print $1,$3}END{print"==================\n end "}' /etc/passwd
這個有點自定義格式的意思
6、經常使用的action
6.1、Expressions
6.2、Control statements:if,while等
6.3、Conpound statements:組合語句:
6.4、input statements 輸入語句
6.5、output statements 輸出語句
4、寫一個腳本,生成10個隨機數,並按從小到大進行排序(要求至少使用2中方法);
[root@localhost data]# vim paixu1.sh #!/bin/bash for ((for i=1; i<=10; i++)); do echo $RANDOM done | sort -n [root@localhost data]# bash -n paixu1.sh [root@localhost data]# bash paixu1.sh 2771 5516 10587 14848 17526 22253 22798 23120 27576 32670
5、在每週二的凌晨1點5分執行腳本/data/get_username.sh,並將腳本的輸出至/tmp/get_username.log日誌文件中;
[root@localhost data] 5 1 * * 2 /data/get_username.sh >>/tmp/get_username.log
6、寫一個腳本:若是某路徑不存在,則將其建立爲目錄;不然顯示其存在,並顯示內容類型;
[root@localhost data]# vim directroy .sh #!/bin/bash read -p 'Enter a directroy:' directroy if [ !-e "$directroy" ]; then mkdir -r $directroy else echo "$directroy is existence"\n ll -d $directroy \n ls fi [root@localhost data]# bash -n directroy.sh [root@localhost data]# bash directroy.sh Enter a directroy: /data /data is existencen drwxr-xr-x. 2 root root 4096 1月 2922:00 /data 99for.sh cjuser.sh ml.txt passwd passwd.sed ping.sh sed.test text.txt 99while.sh directroy.sh o ai menglei passwdlist ping2.sh plt.txt sed.test1 userlist [root@localhost data]# [root@localhost data]# bash directroy.sh Enter a directroy: /panlitao/LouIs /panlitao/LouIs create success [root@localhost data]# ls / bin data etc lib lost+found misc net panlitao root selinux sys usr boot dev home lib64 media mnt opt proc sbin srv tmp var [root@localhost data]# ls /panlitao LouIs
7、寫一個腳本,打印9X9乘法表;
[root@localhost data]#vim 99for.sh #!/bin/bash for j in [1..9]; do for i in $(seq 1 $j); do echo -e -n "${i}X${j}=$[$i*$j]\t" done echo done [root@localhost data]#bash -n 99for.sh [root@localhost data]#bash 99for.sh 1X1=1 1X2=2 2X2=4 1X3=3 2X3=6 3X3=9 1X4=4 2X4=8 3X4=12 4X4=16 1X5=5 2X5=10 3X5=15 4X5=20 5X5=25 1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36 1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49 1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64 1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81
8、描述dns的工做流程,以及完整搭建一套dns主從服務器,相關域名和ip可自行設定。
工做流程:
Client(請求) --> hosts文件 --> DNS Server(recursion)
Local Cache(本地緩存) --> DNS Server(遞歸)--> Server Cache(服務緩存) --> iteration(迭代)--> 根 --> 頂級域 --> 二級域 --> 三級域 --> ......
首先不管是Linux或者Windows,客戶端發起請求,系統不會第一個請求DNS服務器,而是查找hosts文件,若是hosts文件沒有請求的內容,他就會請求DNS服務器,DNS服務器首先會去查找本地DNS服務器的緩存,緩存也沒有結果就會請求本身定義的主DNS服務器,而主DNS服務器也不會直接當即把請求轉發出去,而是轉給Server本身的緩存,若是裏面尚未的話纔會把請求轉發出,作迭代處理。
服務器搭建
正向解析
一、配置緩存名稱服務器
主要是修改主配置文件:/etc/named.conf
[root@CentOS6 named]#cp /etc/named.conf /etc/named.conf.bat [root@CentOS6 named]#vim /etc/named.conf options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
更改內容:
第一部分:
listen-on port 53 { 127.0.0.1; };
listen-on port 53 { 192.168.0.105; 127.0.0.1; };
第二部分:
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
這些內容註釋掉
第三部分:
allow-query { localhost; };
allow-query { any; }; 或者註釋掉
二、配置主DNS服務器
(1)、在緩存名稱服務器中添加自定義zone
[root@CentOS6 named]#vim /etc/named.rfc1912.zone zone "hongying.com" IN { type master; file "hongying.com.zone" };
檢查語法:named-checkconf
(2)、定義區域解析庫文件
[root@CentOS6 named]#cd /var/named [root@CentOS6 named]#vim hongying.com.zone 建立一個文件 $TTL 86400 $ORIGIN hongying.com. @INSOAns1.hongying.com. admin.hongying.com ( 201602052200 1H 5M 7D 1D ) INNSns1 INNSns2 INMX 10 mx1 IN MX 20 mx2 ns1INA192.168.0.105 ns2 IN A 192.168.0.106 mx1 IN A 192.168.0.107 mx2 IN A 192.168.0.108 www IN A 192.168.0.105
檢查語法:
[root@CentOS6 named]# named-checkzone "hongying.com" /var/named/hongying.com.zone zone hongying.com/IN: loaded serial 4033556584 OK 更改權限,不容許其餘用戶訪問解析庫文件: [root@CentOS6 named]# chmod 640 hongying.com.zone 在把屬組改回來: [root@CentOS6 named]# chown :named hongying.com.zone 重啓服務: [root@CentOS6 named]# service named restart 中止 named: [肯定] 啓動 named: [肯定]
測試解析:
[root@CentOS6 named]#dig -t A www.hongying.com @192.168.0.105 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.6 <<>> -t A www.hongying.com @192.168.0.105 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16832 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.hongying.com.INA ;; ANSWER SECTION: www.hongying.com.86400INA192.168.0.105 ;; AUTHORITY SECTION: hongying.com.86400INNSns1.hongying.com. hongying.com.86400INNSns2.hongying.com. ;; ADDITIONAL SECTION: ns1.hongying.com.86400INA192.168.0.105 ns2.hongying.com.86400INA192.168.0.106 ;; Query time: 0 msec ;; SERVER: 192.168.0.105#53(192.168.0.105) ;; WHEN: Fri Feb 5 05:22:47 2016 ;; MSG SIZE rcvd: 118
反向解析
第一步:添加自定義zone
[root@CentOS6 named]#vim /etc/named.rfc1912.zone zone "0.168.192.in-addr.arpa" IN { type master; file "192.168.0.zone"; };
檢查語法:named-checkconf
第二步:建立反向區域解析庫
[root@CentOS6 named]#cd /var/named [root@CentOS6 named]#vim -o hongying.com.zone 192.168.0.zone 根據正向解析庫內容建立一個反向解析庫文件192.168.0.zone $TTL 86400 $ORIGIN 0.168.192.in-addr.arpa. @INSOAns1.hongying.com. admin.hongying.com. ( 201602052200 1H 5M 7D 1D ) INNSns1.hongying.com. INNSna2.hongying.com. 11INPTRns1.hongying.com. 11INPTRwww.hongying.com. 12INPTRmx1.hongying.com. 12INPTRwww.hongying.com. 13INPTRmx2.hongying.com. 檢查語法是否有錯 [root@CentOS6 named]# named-checkzone "0.168.192.in-addr.arpa" 192.168.0.zone zone 0.168.192.in-addr.arpa/IN: loaded serial 4033556584 OK 從新載入 [root@CentOS6 named]# service named reload 中止 named: [肯定] 啓動 named: [肯定]