日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

linux sis启动命令,Linux系统开机过程详细分析

發(fā)布時(shí)間:2023/12/16 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux sis启动命令,Linux系统开机过程详细分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Linux系統(tǒng)開機(jī)過(guò)程詳細(xì)分析

各位是否曾經(jīng)對(duì)電腦整個(gè)開機(jī)的流程感到好奇呢???這一次?,?我們所要討論的

主題?,?就是?Linux?從開機(jī)的一瞬間到?login?為止?,?到底發(fā)生了什么事情??

想必各位都知道?,?在剛開機(jī)時(shí)?,?由于?80x86?的特性?,?CS?(?Code?Segment?)

這個(gè)寄存器中全部都放著?1?,?而?IP?(?Instruction?Pointer?)?這個(gè)寄存器

中全部都放著?0?,?換句話說(shuō)?,?CS=FFFF?而?IP=0000?,?此時(shí)?,?CPU?就依據(jù)

CS?及?IP?的值?,?到?FFFF0H?去執(zhí)行那個(gè)地方所放的指令?.?這時(shí)候?,?由于

FFFF0H?已經(jīng)到了高位址的頂端?,?所以?,?FFFF0H?這個(gè)地方?,?總是會(huì)放一個(gè)

JMP?指令?,?跳到比較低的位址?.?接著?,?ROM?BIOS?就會(huì)作一些檢查的動(dòng)作

像內(nèi)存?,?鍵盤?等......?并在我們俗稱的?UMB?(?Upper?Memory?Block?)

之中掃描?,?看看是否有合法的?ROM?存在?(?比如?SCSI?卡上的?ROM?)?.

假如有?,?就到里面去執(zhí)行一些東西?,?執(zhí)行完之后再繼續(xù)剛才的行程?.?到了

最后?,?讀取硬盤上的第一個(gè)?sector?.?在這里?,?我假設(shè)各位由硬盤啟動(dòng)

因此?,?就硬盤的構(gòu)造而言?,?它的第一個(gè)?sector?稱為?MBR?(?Master?Boot

Record?)?.?因?yàn)橐粋€(gè)?sector?是?512?bytes?,?而?MBR?這?512?bytes?可分

為兩個(gè)部份?,?第一個(gè)部份為?Pre-Boot?區(qū)?,?占了?446?bytes?;?第二部份

是?Partition?Table?,?占了?66?bytes?.?Pre-Boot?區(qū)的作用之一?,?就是

去看看那個(gè)?Partition?被標(biāo)成?Active?,?然後去讀那個(gè)?Partition?的?Boot

區(qū)?.

在?Linux?的啟動(dòng)方面?,?一般人最常把?LILO?放在?MBR?或?Superblock

假如你把?LILO?放在?MBR?,?那很明顯的?,?當(dāng)讀取到?MBR?的時(shí)候?,?LILO

就被執(zhí)行?,?此時(shí)?,?你的屏幕上會(huì)出現(xiàn)?boot:?接著?,?就進(jìn)行?Load?Kernel

的動(dòng)作?.?在另一方面來(lái)說(shuō)?,?假如你把?LILO?安裝在?Superblock?,?通常你

還會(huì)有一個(gè)管理開機(jī)的程序?,?也許是放在?MBR?(?像?OSBS?)?或者是放在一

個(gè)單獨(dú)的?Partition?(?像?OS/2?的?Boot?Manager?)?.?再由這個(gè)管理開機(jī)

的程式去讀取?LILO?,?進(jìn)而做?Load?Kernel?的動(dòng)作?.

好了?,?到了目前為止?,?我們已經(jīng)講到?Load?Kernel?的動(dòng)作?.?Kernel?被

load?到?memory?中之后?,?接著進(jìn)行一連串?probe?周邊的動(dòng)作?,?像串口

并口?,?軟盤?,?聲卡?,?硬盤?,?光驅(qū)?等?......?接著?mount?root

partition?.?在這之后?,?kernel?會(huì)起動(dòng)?init?這個(gè)?process?.?init?這

個(gè)?process?的?PID?為?1?,?它是所有?process?的祖先?.

接下來(lái)呢???系統(tǒng)就開始執(zhí)行?/rc.d/rc.S?,?在這里?,?我們暫時(shí)打住?,

先對(duì)大概的?initialization?script?執(zhí)行的順序作一個(gè)瀏覽?,?請(qǐng)看下面

的流程?:

init[1]

rc.S?begin?

rc.serial?begin

rc.serial?end

rc.S?end

init[1]?enter?runlevel?5

rc.M?begin

rc.inet1?begin

rc.inet1?end

rc.inet2?begin

rc.inet2?end

rc.font?begin

rc.font?end

rc.local?begin

rc.local?end

rc.M?end

login

上面的流程清楚的指出?,?在?rc.S?這個(gè)?shell?script?中?,?會(huì)去執(zhí)行?rc.serial

接著再執(zhí)行?rc.M?,?rc.M?中又包含了?rc.inet1?,?rc.inet2?,?rc.font?,?rc.local

最后執(zhí)行?login?.?在下面的內(nèi)容中?,?將為各位介紹這幾個(gè)?shell?script

從下面開始?,?凡是每一列之前有一個(gè)?#?的?,?為原來(lái)?shell?script?中的注釋

有兩個(gè)?#?的?,?為筆者加上的注釋?,?當(dāng)然啦?,?沒(méi)有任何?#?的為?shell?script

的內(nèi)容?,?而對(duì)命令或內(nèi)容的解釋?,?一律都寫在命令或內(nèi)容的前面?.

首先由?rc.S?開始?:

*****************************?rc.S?**********************************

#!/bin/sh

#

#?/etc/rc

#

#?These?commands?are?executed?at?boot?time?by?init(8).

#?User?customization?should?go?in?/etc/rc.local.

echo?'========?rc.S?is?running?!?System?Initializing?Now?!!!?========'

PATH=/sbin:/usr/sbin:/bin:/usr/bin

##?打開所有?swap?!?下面?/sbin/swapon?-a?的意思是?:?使得?/etc/fstab?中被記錄

##?成?swap?的?device?全部啟動(dòng)?.

/sbin/swapon?-a

?

##?喔?!?下面這個(gè)指令?update?就很重要了?,?它負(fù)責(zé)每隔一段固定的時(shí)間?,?就將

##?buffer?中的資料?,?利用?sync?寫回磁盤上?,?并將?superblock?做?update

##?的動(dòng)作?.?使用?ps?這個(gè)指令看看有那些?process?,?就可看到?update?還有一個(gè)

##?bdflush?,?這兩個(gè)?process?都是必然要存在的?,?可不要隨便砍掉?,?要不然?,

##?萬(wàn)一系統(tǒng)?crash?了?,?那磁盤里面的資料就不是最新的了?......

/sbin/update?&

?

##?利用?echo?-n?>;>;?制造一個(gè)文件?,?并用?rm?-f?這個(gè)檔案來(lái)測(cè)試?root?partition

##?是不是?read-only?或者是可讀寫

READWRITE=no

if?echo?-n?>;>;?"Testing?filesystem?status";?then

rm?-f?"Testing?filesystem?status"

READWRITE=yes

fi

?

##?假如?root?partition?是?read-only?就作?fsck?的動(dòng)作?,?假如不是?read-only

##?而是?read-write?的話?,?就做下面?else?之后的動(dòng)作

if?[?!?$READWRITE?=?yes?];?then

##?利用?fsck?做檢查及修復(fù)文件系統(tǒng)的工作?,?后面接的兩個(gè)參數(shù)?-A?,?-a?.

##?-A?的意思是?:?fsck?會(huì)依據(jù)?/etc/fstab?中的記錄?,?去檢查所有的文件

##?系統(tǒng)?;?而?-a?就是?auto?的意思?,?當(dāng)?fsck?有修復(fù)的動(dòng)作時(shí)?,?它不會(huì)問(wèn)

##?你問(wèn)題?,?而直接修復(fù)?.

/sbin/fsck?-A?-a

?

##?假如?fsck?有?error?,?[?$??-gt?1?]?括號(hào)里面的意思是?:?若上個(gè)命令的

##?傳回值大于?1?,?而上個(gè)命令就是?fsck?.?讓我們看看?fsck?的傳回值?:

##?0?-?No?errors

##?1?-?File?system?errors?corrected

##?2?-?File?system?errors?corrected,?system?should

##?be?rebooted?if?file?system?was?mounted

##?4?-?File?system?errors?left?uncorrected

##?8?-?Operational?error

##?16?-?Usage?or?syntax?error

##?128?-?Shared?library?error

##?很明顯的?,?若有任何錯(cuò)誤產(chǎn)生的話?,?那?fsck?的傳回值都大于?1?.?其實(shí)

##?就我的觀點(diǎn)認(rèn)為?,?應(yīng)該寫成?if?[?$??-ge?1?]?比較好?.?既然有錯(cuò)呢?,?系統(tǒng)

##?應(yīng)該就要跳至單用戶模式?,?在單用戶模式中主要就是?/etc/rc.d/rc.K

##?中的兩件事?:?關(guān)掉?swap?及?卸下所有的文件系統(tǒng)?,?而最后重新?login?.

##?一般正常的情況下?,?if?下面這一大段是不會(huì)執(zhí)行的?,?而會(huì)跳至下面

##?標(biāo)有?*************************?Normal?1?*************************?處

if?[?$??-gt?1?]?;?then

echo

echo

echo?"**************************************"

echo?"fsck?returned?error?code?-?REBOOT?NOW!"

echo?"**************************************"

echo

echo

/bin/login

fi

##?******************************?Normal?1?**************************

##?當(dāng)?fsck?檢查沒(méi)有錯(cuò)誤之后?,?就把?root?partition?重新?mount?上來(lái)

##?下面指令的參數(shù)有三個(gè)?,?-w?代表mount?成可讀寫?,?-n?代表把一個(gè)?file-

##?system?mount?上來(lái)?,?但不會(huì)把記錄寫到?/etc/mtab?中?,?在上次對(duì)?/etc/mtab

##?介紹時(shí)有提到?,?當(dāng)我們使用?mount?這個(gè)指令把一個(gè)?filesystem?mount?上來(lái)

##?的時(shí)候?,?/etc/mtab?就會(huì)記錄?!?利用?-n?這個(gè)?option?可使得做?mount?的動(dòng)

##?作?,?卻不會(huì)記錄?.?-o?后面可以接許多的選項(xiàng)?,?在這里?,?我們給它的選項(xiàng)是

##?remount?.?remount?的意思是?:?重新?mount?一個(gè)已經(jīng)被?mount?的?filesystem

##?這個(gè)選項(xiàng)通常被用來(lái)改變?cè)?filesystem?的讀寫標(biāo)志?,尤其是把?filesystem

##?從?read-only?的狀態(tài)?,?改變成?read-write?的狀態(tài)?.

echo?"Remounting?root?device?with?read-write?enabled."

/sbin/mount?-w?-n?-o?remount?/

?

##?在前面的情況中?,?都是?root?partition?為?read-only?的狀態(tài)下?,?所做的一些

##?工作?,?到了最后一個(gè)指令?/sbin/mount?-w?-n?-o?remount?/?,?才把?root

##?partition?mount?成?read-write?.?各位有沒(méi)有看到前面那行?:

##?if?[?!?$READWRITE?=?yes?];?then?.....?下面這個(gè)?else?就是與這個(gè)?if?對(duì)應(yīng)

##?也就是說(shuō)?,?前面那個(gè)?if?的區(qū)塊中?,?所作的工作都是在?root?partition?為

##?read-only?的條件成立下所作的事?,?那很明顯的?,?下面這個(gè)?else?就是?root

##?partition?為?read-write?的條件下所作的工作?.?假如你的?root?partition

##?為?read-writeable?的話?,?那么系統(tǒng)就會(huì)顯示下面的信息?.?cat?<

##?事?,?就是把?EOF?之前的信息全部顯示在屏幕上?:

##?我想?,?下面的信息寫得很明顯了?,?它說(shuō)?:?你的?root?partition?被?mount?成

##?read-write?,?沒(méi)有辦法檢查?,?要使檢查的動(dòng)作能夠順利的進(jìn)行?,?你必須把

##?root?partition?mount?成?read-only?!?那要怎么做呢???很容易?,?只要利用

##?rdev?-R?/?1?就可以了?......

else

cat?<

***?Root?partition?has?already?been?mounted?read-write.?Cannot?check!

For?filesystem?checking?to?work?properly,?your?system?must?initially?mount

the?root?partition?as?read?only.?Please?modify?your?kernel?with?'rdev'?so

that

it?does?this.?If?you're?booting?with?LILO,?type:

rdev?-R?/vmlinuz?1

(^^^^^^^^?...?or?whatever?your?kernel?name?is.)

If?you?boot?from?a?kernel?on?a?floppy?disk,?put?it?in?the?drive?and?type:

rdev?-R?/dev/fd0?1

This?will?fix?the?problem?*AND*?eliminate?this?annoying?message.?:^)

EOF

?

##?下面這個(gè)指令沒(méi)什么好說(shuō)的?,?就是暫停?10?秒鐘?,?讓?user?能夠有充足的

##?時(shí)間看完上面的信息

sleep?10

fi

?

##?刪除?/etc/mtab?/etc/nologin?/etc/utmp

/bin/rm?-f?/etc/mtab*?/etc/nologin?/etc/utmp

?

##?制造?/etc/utmp?,?這是一個(gè)很典型制造空文件的寫法?.?/dev/null?這個(gè)?node

##?蠻有趣的?,?在某一方面來(lái)說(shuō)?,?它有點(diǎn)像是一個(gè)?"?黑洞?"?.?怎么說(shuō)呢??

##?各位可以試試看下面的指令?ls?>;>;?/dev/null?,?當(dāng)你使用這個(gè)指令之后會(huì)

##?發(fā)生什么事呢???什么也沒(méi)發(fā)生?,?而且?ls?的輸出就好像被丟到黑洞里?,?無(wú)

##?影無(wú)蹤了?.?那也許你會(huì)想?:?那這有什么用???我的回答是?:?的確沒(méi)有什么

##?很大的用處?,?但當(dāng)你想抑制輸出的信息時(shí)?,?你就會(huì)用得到了?.

cat?/dev/null?>;>;?/etc/utmp

?

##?依據(jù)?fstab?(?filesystem?table?)?中的描述?,?自動(dòng)的掛上文件系統(tǒng)

##?但此時(shí)因?yàn)?TCP/IP?還沒(méi)有設(shè)定?,?故不用?NFS

echo?'Mount?Filesystem?!!!'

/sbin/mount?-avt?nonfs

?

##?設(shè)定系統(tǒng)的時(shí)鐘?.?下面這幾行所做的事就是?:?看看?/sbin/clock?這個(gè)文件是

##?不是可執(zhí)行的?,?假如可以執(zhí)行?,?就把?CMOS?中的時(shí)間設(shè)定為系統(tǒng)的時(shí)間?.

if?[?-x?/sbin/clock?];?then

echo?'Set?System?Clock'

/sbin/clock?-s

fi

?

##?下面的四行若沒(méi)有?mark?,?則每次開機(jī)?issue?及?motd?都會(huì)被改變?,?這應(yīng)該

##?可算是?FAQ?級(jí)的問(wèn)題了?......?因?yàn)槲矣凶约涸O(shè)計(jì)的?issue?及?motd?,?所以

##?下面的四行前面都有?#?,?被注釋掉?.

##?假如你要有自己的設(shè)定?,?下面一定都要?mark?起來(lái)

#echo?>;?/etc/issue

#echo?Welcome?to?Linux?/bin/uname?-a?|?/bin/cut?-d\?-f3.?>;>;?/etc/issue

#echo?>;>;?/etc/issue

#echo?"/bin/uname?-a?|?/bin/cut?-d\?-f1,3.?(Posix)."?>;?/etc/motd

?

##?接下來(lái)?,?將執(zhí)行?rc.serial?,?顧名思義?,?rc.serial?是作串口設(shè)定的工作

##?在?rc.serial?中?,?內(nèi)容雖然也是很簡(jiǎn)單?,?但并不像?rc.S?那樣直接?.?換句話

##?說(shuō)?,?讀者至少要?"?稍微?"?懂一點(diǎn)?shell?programming?,?所以說(shuō)呢?,?假如

##?還不會(huì)?shell?programming?的讀者呢?,?都應(yīng)該趕快去找一本書來(lái)看一下?,?在

##?這篇文章的結(jié)尾?,?我會(huì)提出一些書單?,?各位可以去找找這幾本書?......

/bin/sh?/etc/rc.d/rc.serial

echo?'=================?rc.S?is?finish?NOW?!!!?========================='

?

?

到了這里?,?rc.S?的最後一步?,?是去執(zhí)行?rc.serial?.?大家可以看一看

/rc.d/rc.serial?.?好像很長(zhǎng)的樣子?,?但實(shí)際上呢?,?各位必然發(fā)現(xiàn)到了?,?這個(gè)

shell?script?大部份指令的前面都有一個(gè)?'#'?號(hào)?,?這代表著?,?這些指令完全

不會(huì)被執(zhí)行?.?所以呢?,?真正有用的只不過(guò)寥寥十幾行吧?!?在另一方面來(lái)說(shuō)?,

假如你是用網(wǎng)卡連上網(wǎng)絡(luò)?,?那?rc.serial?對(duì)你并沒(méi)有什么大用處?.

?

****************************?rc.serial?******************************

#!/bin/sh

#

#?/etc/rc.serial

#?Initializes?the?serial?ports?on?your?system

#

#?Version?2.01

echo?'=======================?rc.serial?is?begin?!!!?====================='

cd?/dev

##?下面三行中的前兩行是設(shè)定一些變量?,?由于在這個(gè)?shell?script?中?,?需要

##?用到?/bin/setserial?-b?這個(gè)指令?,?或是需要用到所有以?cua?開頭的?node

##?的次數(shù)太多了?,?因此?,?把它們?cè)O(shè)定為一個(gè)變量?,?是一個(gè)不錯(cuò)的方法?.?尤其

##?PORTS=`echo?cua??cua??`?這是一個(gè)聰明的寫法?,?那為什么不寫成?PORT=

##?`echo?cua*`?呢???各位可以在?/dev?下分別使用這兩個(gè)指令?,?觀察輸出到底

##?有什么不同?......

SETSERIAL="/bin/setserial?-b"

PORTS=`echo?cua??cua??`

echo?-n?"Configuring?serial?ports...."

?

##?下面這行?,?沒(méi)有學(xué)過(guò)?shell?programming?的人很可能會(huì)看不懂?,?不過(guò)沒(méi)有

##?關(guān)系?,?這行中的?${SETSERIAL}?會(huì)被換成?/bin/setserial?-b?,?而?${PORTS}

##?會(huì)被換成?cua0?cua1?cua2?.......?cua31?,?所以整句翻譯就是?:

##?/bin/setserial?-b?-W?cua0?cua1?cua2?cua3?cua4?cua5?cua6?......?cua31

##?那這行指令到底在做什么呢???其實(shí)只是在做中斷偵測(cè)的工作?.

${SETSERIAL}?-W?${PORTS}

?

##?各位看到下面原來(lái)的注釋了吧?.?當(dāng)你有一些特殊的卡時(shí)?,?你可以把相對(duì)應(yīng)部

##?份前面的?'#'?去掉?,?以便能做自動(dòng)設(shè)定的工作?.?其實(shí)呢?,?這種情況實(shí)在

##?不多?,?大部份人的設(shè)備都差不了多少?,?說(shuō)到關(guān)于串口?,?差異就更少了?.

#

#?AUTOMATIC?CONFIGURATION

#

#?Uncomment?the?appropriate?lines?below?to?enable?auto-configuration

#?of?a?particular?board.?Or?comment?them?out?to?disable?them....

#

?

##?好了?,?這下我們又多了一個(gè)變量?:?AUTO_IRQ?,?這在下面會(huì)用到?.

AUTO_IRQ=auto_irq

?

##?下面幾行非常整齊?,?它們可以分別被換成?:

##?/bin/setserial?-b?/dev/cua??auto_irq?skip_test?autoconfig

##?setserial?說(shuō)穿了也沒(méi)什么?,?這個(gè)指令可以讓你對(duì)?serial?port?做設(shè)定及回報(bào)

##?的動(dòng)作?,?像?IRQ?,?I/O?port?啦等等的事情?.?一般的情況下?,?大家的電腦中

##?通常只有?COM1-COM4?,?但假如你想增加新的?port?,?那?setserial?就派上用

##?場(chǎng)了?.

#?These?are?the?standard?COM1?through?COM4?devices

#

#?If?you?have?an?internal?modeme?with?a?Rockwell?Chipset,?add?a?"skip_test"

#?to?the?/dev/cua3?line?below.?(It's?not?added?by?default?because?it?will

#?screw?up?people?with?8514?displays).

#

${SETSERIAL}?/dev/cua0?${AUTO_IRQ}?skip_test?autoconfig

${SETSERIAL}?/dev/cua1?${AUTO_IRQ}?skip_test?autoconfig

${SETSERIAL}?/dev/cua2?${AUTO_IRQ}?skip_test?autoconfig

${SETSERIAL}?/dev/cua3?${AUTO_IRQ}?autoconfig

#?These?are?for?the?first?AST?Fourport?board?(base?address?0x1A0)

#

${SETSERIAL}?/dev/cua4?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua5?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua6?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua7?${AUTO_IRQ}?autoconfig

#?These?are?for?the?second?AST?Fourport?board?(base?address?0x2A0)

#

${SETSERIAL}?/dev/cua8?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua9?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua10?${AUTO_IRQ}?autoconfig

${SETSERIAL}?/dev/cua11?${AUTO_IRQ}?autoconfig

?

##?從這里以下?,?我省略了一大段?,?因?yàn)檫@一大段都是支持特殊的卡

#?These?are?the?3rd?and?4th?ports?on?the?Accent?Async?board.

#

#${SETSERIAL}?/dev/cua12?${AUTO_IRQ}?autoconfig

#${SETSERIAL}?/dev/cua13?${AUTO_IRQ}?autoconfig

#

?

.

.

.

.

.

.

.

?

##?好了?,?我們跳掉了一大段?,?直到這里?.?各位看到下面的注解了?.

##?假如你想用手動(dòng)的方法指定?IRQ?,?I/O?port?,?及指定?chip?的型號(hào)

##?那你可以拿掉下面對(duì)應(yīng)那行前面的?'#'?并作適當(dāng)?shù)男薷?,?比如說(shuō)

##?你用的是比較新的?16550?或?16550A?,?而不是?16450?,?那你就可以

##?在下面用手動(dòng)的方法指定?.?實(shí)際上?,?用?autoconfig?及?autoirq

##?的選項(xiàng)就可以了?,?沒(méi)有必要用手動(dòng)的方式?.?除非偵測(cè)不到?.

###############################################################

#

#?MANUAL?CONFIGURATION

#

#?If?you?want?to?do?manual?configuration?of?one?or?more?of?your

#?serial?ports,?uncomment?and?modify?the?relevant?lines.

#

###############################################################

#?These?are?the?standard?COM1?through?COM4?devices

#

#${SETSERIAL}?/dev/cua0?uart?16450?port?0x3F8?irq?4

#${SETSERIAL}?/dev/cua1?uart?16450?port?0x2F8?irq?3

#${SETSERIAL}?/dev/cua2?uart?16450?port?0x3E8?irq?4

#${SETSERIAL}?/dev/cua3?uart?16450?port?0x2E8?irq?3

.

.

.

.

.

.

.

.

##?Ok?,?到此?,?rc.S?及?rc.serial?已經(jīng)結(jié)束?,?因?yàn)榻馗鍟r(shí)間的關(guān)系?,?rc.M

##?rc.inet1?,?rc.inet2?,?rc.font?,?rc.local?將在以后為各位介紹?.

echo?"done."

${SETSERIAL}?-bg?${PORTS}

echo?'?======================?rc.serial?is?complete?!!!?==================='

?

?

*?關(guān)于?Shell?Programming?的書單?:

Title:?The?Unix?C?Shell?Field?Guide

Authors:?Gail?Anderson?and?Paul?Anderson

Publisher:?Prentice?Hall

Edition:?1986

ISBN:?0-13-937468-X

這本是?C-Shell?的?Bible?,?想學(xué)?C-Shell?的人?,?可以去看這本書?.

?

Title:?Unix?Shell?Programming

Authors:?Stephen?Kochan?and?Patrick?Wood

Publisher:?Hayden

Edition:?1990

ISBN:?0-672-48448-X

喔?!?這本書以?Bourne?Shell?為主?,?內(nèi)容深入淺出?,?讀者很容易就可以了解

這本書的內(nèi)容?,?進(jìn)而掌握?Bourne?Shell?的精髓?.?此外?,?這本書也有提到

Korn?Shell?,?大體上來(lái)說(shuō)?,?是一本值得看的好書?.

?

*如何聯(lián)系作者?:

E-Mail?Address?:?[email]jhhsu@csie.nctu.edu.tw[/email]

[email]u8217017@cc.nctu.edu.tw[/email]

Dormitory?:?交通大學(xué)十舍?317R

..

?

?

Linux?開機(jī)程序之研討

CCCA?資工86?許景華

在上次的介紹中?,?我們已經(jīng)看完了?rc.S?及?rc.serial?這兩個(gè)?shell?script?.

現(xiàn)在?,?我們將把剩下的?shell?script?再作一個(gè)介紹?.

首先還是看看全部的流程?:

?

init[1]

rc.S?begin

rc.serial?begin

rc.serial?end

rc.S?end?

init[1]?enter?runlevel?5

rc.M?begin

rc.inet1?begin

rc.inet1?end

rc.inet2?begin

rc.inet2?end

rc.font?begin

rc.font?end

rc.local?begin

rc.local?end

rc.M?end

login

?

這次主要的部份可分為兩項(xiàng)?:?因?yàn)?init?將會(huì)去讀取?inittab?,?所以?inittab

將被列為第一部份的重點(diǎn)?,?而第二部份就是?rc.M?,?rc.font?,?rc.local

這幾個(gè)?shell?script?的說(shuō)明?.?(?rc.inet1?,?rc.inet2?這兩個(gè)關(guān)于網(wǎng)絡(luò)的

shell?script?將在以后單獨(dú)說(shuō)明?)

好了?,?我們先從?inittab?看起吧?!?看看上面的流程?,?在第一行?:?init[1]

也就是?init?這個(gè)?process?被啟動(dòng)之后?,?它會(huì)去讀取?/etc/inittab?這個(gè)文件

以完成系統(tǒng)的啟動(dòng)?.?從這里?,?我們看到了?LINUX?的確融合了?SVR4?及?SunOS

的一些特性?,?inittab?這個(gè)文件?,?在?SunOS?系統(tǒng)中是不存在的?,?但是它卻是

SVR4?典型的文件?.?init?這個(gè)?process?會(huì)依據(jù)?/etc/inittab?中所記載的內(nèi)容

進(jìn)入不同的?run-level?并啟動(dòng)不同的?process?.?所以?inittab?的重要性

可見一斑?.?那什么叫?run-level?呢???所謂?run-level?就是系統(tǒng)中定義了許多

不同的?level?,?而系統(tǒng)會(huì)隨著?level?的不同而去啟動(dòng)不同的資源?.

現(xiàn)在就讓我們來(lái)看一下?/etc/inittab?中的內(nèi)容?:

在?/etc/inittab?這個(gè)文件中?,?每一列是一個(gè)進(jìn)入點(diǎn)?,?假如我們仔細(xì)觀察每一列

的話?,?那我們就會(huì)很容易的發(fā)現(xiàn)?,?/etc/inittab?的每一列可以被?"?:?"?這個(gè)

字符分成好幾個(gè)欄位?.?這幾個(gè)欄位的格式如下?:

id:runlevels:action:process

而它們代表的意義分別如下?:

id?:?由兩個(gè)獨(dú)特的字符所組成的辨示符號(hào)?,?在比較新的?UNIX?系統(tǒng)中?,?已不

受只能有兩個(gè)字符的限制?.

runlevels?:?指出下面一個(gè)欄位中的?action?以及?下下個(gè)欄位中的?process

會(huì)在那些?runlevel?中被執(zhí)行?.?這一欄的合法值有?0,1,2...6

s?以及?S?.?而在正常的啟動(dòng)程序之后?,?Superuser?可以使用

telinit?這個(gè)指令來(lái)改變系統(tǒng)的?runlevel?.?又因?yàn)樵?LINUX?中

,?runlevel?的預(yù)設(shè)值是?5?(?等一下就會(huì)看到?)?所以?,?只有

那些每一列中?runlevel?那欄有?5?這個(gè)值的?,?后面的?process

才會(huì)被啟動(dòng)?.?所以?,?我們就可以想像的到?:?"?由于系統(tǒng)的

runlevel?不同?,?所起動(dòng)的?process?也不盡相同?,?所以系統(tǒng)

起動(dòng)的資源在每個(gè)不同的?runlevel?就會(huì)有差異存在?.

action?:?這個(gè)欄位有一點(diǎn)復(fù)雜?,?在這個(gè)欄位中記錄著?init?在啟動(dòng)相對(duì)應(yīng)的

process?時(shí)?,?對(duì)?process?所采取的動(dòng)作?,?而合法的動(dòng)作有下面幾項(xiàng):

initdefault?:?指出系統(tǒng)在啟動(dòng)時(shí)?,?預(yù)設(shè)進(jìn)入的?run-level?值?,

比如說(shuō)?,?我們可以在?/etc/inittab?中找到下面這

一列?:?id:3:initdefault:

很明顯的?,?系統(tǒng)將在啟動(dòng)時(shí)?,?進(jìn)入?runlevel?為?3

的模式?.?當(dāng)然?,?你可以把?3?改成?4?試試看?,?如

果你改成了?4?,?那將會(huì)執(zhí)行?/etc/rc.d/rc.4?,?也

就是?run?xdm?.?xdm?在以后有機(jī)會(huì)的話?,?將為各

位介紹?......

sysinit?:?在系統(tǒng)起動(dòng)時(shí)?,?這個(gè)?process?會(huì)被執(zhí)行?.?而所有?process

前的?action?中有?boot?及?bootwait?的?process?,?必

須等到這些?action?為?sysinit?的?process?執(zhí)行完之后

它們才能夠執(zhí)行?.

wait?:?在起動(dòng)一個(gè)?process?之后?,?若要再起動(dòng)另一個(gè)?process?,?則

必需等到這個(gè)?process?結(jié)束之后才能繼續(xù)?.

respawn?:?代表這個(gè)?process?即使在結(jié)束之后?,?也會(huì)重新被啟動(dòng)?,

最典型的例子就是?getty?(?在?LINUX?中為?agetty?)?.

看看下面的循環(huán)?:

--?getty?-->;?login?-->;?shell?-->;?logout?--

^?|????????????????????????????????????????|

??|

即使在?getty?結(jié)束之后?,?它也會(huì)重新被啟動(dòng)?.

ctrlaltdel?:?想必有人會(huì)以鍵盤上的?Ctrl?,?Alt?,?及?Del?這三個(gè)

鍵來(lái)達(dá)到使系統(tǒng)?shutdown?的目的?,?現(xiàn)在我們果然在

/etc/inittab?中看到了這一列?:

ca::ctrlaltdel:/sbin/shutdown?-t3?-rf?now

所以說(shuō)?,?當(dāng)我們按下這三個(gè)鍵的時(shí)候?,?init?會(huì)收到

SIGINT?這個(gè)?signal?,?接著就執(zhí)行?shutdown?的動(dòng)作

不過(guò)?,?我們最好不要養(yǎng)成按?Ctrl-Alt-Del?來(lái)使系統(tǒng)

shutdown?的習(xí)慣?,?尤其在單用戶多任務(wù)的操作系統(tǒng)?,?像

OS/2?,?甚至?Windows?95?,?shutdown?幾乎都是標(biāo)準(zhǔn)

的關(guān)機(jī)程序了?,?更何況是多用戶多任務(wù)的?LINUX?,?所以?,

shutdown?這個(gè)指令是一定要熟悉的?.

除了上面的幾個(gè)?action?之外?,?另外還有一些合法的?action?,?但這

些?action?并不需要太注意?,?要用的時(shí)候再利用?man?init?去查詢就

可以了?.

process?:?這一欄中可以是?shell?script?或是可執(zhí)行的程序?.

好了?,?當(dāng)我們了解?/etc/inittab?中每一欄的意義之后?,?要看懂?/etc/inittab

就是一件輕松愉快的工作了?.?在?/etc/inittab?檔中?,?我們可以看到下面這一段

c1:12345:respawn:/sbin/agetty?38400?tty1

c2:12345:respawn:/sbin/agetty?38400?tty2

c3:45:respawn:/sbin/agetty?38400?tty3

c4:45:respawn:/sbin/agetty?38400?tty4

c5:45:respawn:/sbin/agetty?38400?tty5

c6:456:respawn:/sbin/agetty?38400?tty6

簡(jiǎn)單來(lái)說(shuō)?,?系統(tǒng)在起動(dòng)之后會(huì)制造出六個(gè)虛擬的?console?.?我想大家應(yīng)該有試過(guò)

用?Ctrl-Alt?+?F1?-?F6?可在這六個(gè)?console?之間切換?;?若你使用?XWindows?時(shí)

想暫時(shí)回到?console?下時(shí)?,?可用?Ctrl-Alt?+?F1?-?F6?這三個(gè)鍵來(lái)選擇?,?若想

回到?XWindows?下時(shí)?,?只要以?Ctrl-Alt-F7?就可以回到?XWindows?下了?.?基本

上?,?對(duì)於?memory?比較少的人?,?可以不要開那么多的虛擬?console?,?那么就可

以去掉上面的幾列?.?還有?,?在前面我們也提過(guò)?,?可以把預(yù)設(shè)的?runlevel?從?5

改成?6?,?對(duì)於?beginner?來(lái)說(shuō)?,?系統(tǒng)一啟動(dòng)完就直接進(jìn)入?XWindows?也許是一個(gè)

不錯(cuò)的設(shè)定方法?......

介紹完?/etc/inittab?之后?,?我們接著看?rc.M?!?由前面的流程當(dāng)中?,?我們看到

rc.M?中又包含了四個(gè)?shell?script?,?其中?rc.inet1?及?rc.inet2?是有關(guān)于網(wǎng)絡(luò)

的設(shè)定?;?rc.font?是作字體的設(shè)定?,?而?rc.local?中可以放一些想要起動(dòng)的

daemon?.

我們現(xiàn)在就來(lái)看看?rc.M?,?依照往例?,?前面有兩個(gè)?"#"?的為加上去的注釋?.

只有一個(gè)?"#"?的為原來(lái)的注釋?:

#!/bin/sh

#

#?rc.M?This?file?is?executed?by?init(8)?when?the?system?is?being

#?initialized?for?one?of?the?"multi?user"?run?levels?(i.e.

#?levels?1?through?6).?It?usually?does?mounting?of?file

#?systems?et?al.

#

#?Version:?@(#)/etc/rc.d/rc.M?2.02?02/26/93

#

#?Author:?Fred?N.?van?Kempen,

#?Heavily?modified?by?Patrick?Volkerding

#

##?顯示進(jìn)入多用戶模式

echo?"Going?multiuser..."

?

##?下面一列的意思是?:?假如你在文字模式的?console?下?,?在15分鐘內(nèi)都沒(méi)有動(dòng)作

##?的話?,?屏幕就會(huì)自動(dòng)暗下來(lái)?,?簡(jiǎn)單的說(shuō)?,?就是?screen?saver?的功能?.

/bin/setterm?-blank?15

?

##?執(zhí)行?crond?這個(gè)?daemon?.?不用說(shuō)?,?crond?在系統(tǒng)中扮演了很重要的角色?,

##?它負(fù)責(zé)每過(guò)一段時(shí)間后?,?就去看看?/var/spool/cron/crontabs?中有那些?file

##?要運(yùn)行?,?這些?file?往往有一個(gè)固定的時(shí)間?,?比如說(shuō)?:?每個(gè)月的?1?號(hào)?,?每

##?天凌晨等?......?我們可以用平常的編輯器編好一個(gè)文件?,?里面的格式如下?:

##

##?分?時(shí)?日?月?星期?命令

##

##?舉例來(lái)說(shuō)?,?59?23?31?12?*?/etc/wall?happy_new_year

##?在每年的?12?月?31?號(hào)晚上?11?點(diǎn)?59?分?會(huì)對(duì)每個(gè)系統(tǒng)上的?user?送出

##?happy_new_year?中的內(nèi)容

##

##?接著我們可以利用?crontab?;?這個(gè)指令來(lái)把此文件放到

##?/var/spool/cron/crontabs中.?我們可以看看?/var/spool/cron/crontab?下

##?有一個(gè)?root?的文件?,?看看里面的內(nèi)容?:

##

##?0,5,10,15,20,25,30,35,40,45,50,55?*?*?*?*?/usr/lib/atrun

##

##?所以各位看到了?,?在前兩期提到的?at?命令是五分鐘才被?run?一次的

##

##?再舉一個(gè)簡(jiǎn)單的例子好了?:?我們先用一般的文本編輯器造出一個(gè)名為?crontest

##?的檔案?,?內(nèi)容如下?:

##

##?5?*?*?*?*?ls?-la?~/?>;>;?~/hehehaha

##

##?接著?,?我們鍵入下面的命令?:?crontab?crontest

##?此時(shí)?,?從內(nèi)容得知?,?每五分鐘?crond?就會(huì)執(zhí)行?ls?-la?,?把你?home?directory

##?的內(nèi)容加入?hehehaha?這個(gè)文件中?.

##

##?當(dāng)然啦?!?這個(gè)例子簡(jiǎn)直是毫無(wú)意義可言?:)?但是?,?大家既然知道了基本原理?,

##?利用?crontab?,?at?這些指令?,?就可以簡(jiǎn)化一些系統(tǒng)管理的動(dòng)作?,?同時(shí)在執(zhí)行

##?一些工作時(shí)?,?也會(huì)比較有彈性?.

/usr/sbin/crond?-l10?>;>;/var/adm/cron?2>;&1

?

##?假如?/etc/HOSTNAME?不能讀取的話?,?就把?darkstar.frop.org?當(dāng)成?HOSTNAME

##?中的內(nèi)容?.?老實(shí)說(shuō)?,?下面這三列去掉也不打緊?......

if?[?!?-r?/etc/HOSTNAME?];?then

echo?"darkstar.frop.org"?>;?/etc/HOSTNAME

fi

?

##?下面從?if?到?fi?夾起來(lái)的部份?,?主要就是在執(zhí)行?rc.inet1?,?rc.inet2?.?這

##?些都是網(wǎng)絡(luò)設(shè)定的工作?,?尤其是?rc.inet2?,?啟動(dòng)了一大堆?daemon?,?這部份

##?要牽扯到的東西太多了?.?像?subnet?與?netmask?等?......?類似這種觀念?,

##?都不是三言兩語(yǔ)就可以玩完的?,?所以就留待以后再說(shuō)?.

if?[?-x?/etc/rc.d/rc.inet1?];

then

/bin/hostname?`cat?/etc/HOSTNAME?|?cut?-f1?-d?.`

/bin/sh?/etc/rc.d/rc.inet1

/bin/sh?/etc/rc.d/rc.inet2

else

/sbin/hostname_notcp?`cat?/etc/HOSTNAME?|?cut?-f1?-d?.`

/usr/sbin/syslogd

/usr/sbin/klogd

/usr/sbin/lpd

fi

?

##?在某些資源獨(dú)占的情況下?,?一些應(yīng)用程序往往會(huì)制造出?lock?文件?.?假如這些

##?lock?文件在重新開機(jī)以后還是存在的話?,?那就很不好了?.?所以?,?下面就是在

##?作這些刪除?lock?文件的動(dòng)作?,?并把一些輸出的信息丟到?/dev/null?去?.

##?在上一期的內(nèi)容中?,?我們就有提到?/dev/null?了?,?也有提到抑制信息輸出的

##?方法?.?現(xiàn)在我們果然看到了一個(gè)實(shí)例?......

/bin/rm?-f?/var/spool/locks/*?/var/spool/uucp/LCK..*?/tmp/.X*lock?1>;?/dev/null?2>;?/dev/null

?

##?假如你有玩?hunt?這個(gè)?game?的話?,?那在?/tmp?下會(huì)有一個(gè)?socket?類型的文件

##?我們要把它刪除之后才能開始另一個(gè)?game?......

if?[?-r?/tmp/hunt?-o?-r?/tmp/hunt.stats?];?then

echo?"Removing?your?stale?hunt?sockets?from?/tmp..."

/bin/rm?-f?/tmp/hunt*

fi

?

##?設(shè)定?share?library?的?link?及?cache?.?這個(gè)指令只有?Superuser?才能使用

##?的?,?它也相當(dāng)?shù)闹匾?.?萬(wàn)一你的?/etc/ld.so.cache?很不幸的?corrupt?了?,

##?那我們也可以利用這個(gè)指令來(lái)讓它重新?link?,?先刪除?/etc/ld.so.cache?,

##?再以?ldconfig?-v?重新制造就可以了?.

/sbin/ldconfig

?

##?起動(dòng)?sendmail?daemon?,?并且讓它?15?分鐘就去看一看?spool?,?處理收發(fā)信件

if?[?-x?/usr/sbin/sendmail?];?then

echo?"Starting?sendmail?daemon?(/usr/sbin/sendmail?-bd?-q?15m)..."

/usr/sbin/sendmail?-bd?-q?15m

fi

?

##?假如?/etc/rc.d/rc.font?是可讀的話?,?就執(zhí)行?rc.font?這個(gè)?shell?script?,

##?而這個(gè)?shell?script?主要是設(shè)定?text?mode?下屏幕的字體

if?[?-r?/etc/rc.d/rc.font?];?then

/etc/rc.d/rc.font

fi

?

##?在系統(tǒng)管理中?,?我們常常把一些?local?的東西另外放在一個(gè)地方?,?這樣才不

##?會(huì)與原來(lái)的東西混淆?.?同時(shí)?,?因?yàn)?local?的東西更新版本的速度總是也比較

##?快?,?在這種情況下?,?常常會(huì)變動(dòng)的東西也可以放在?local?的區(qū)域中?,?這樣

##?管理起來(lái)比較方便?.?也許各位也注意到了?:?為什么會(huì)有?/usr/bin?及

##?/usr/local/bin?之分?.?就個(gè)人認(rèn)為?,?像自己?compile?出來(lái)的東西?,?假如

##?覺(jué)得還不錯(cuò)?,?就可以把它放在?/usr/local/bin?,?因?yàn)樗切略龅?,?所以我

##?把它放在?/usr/local/bin?.?當(dāng)然啦?,?這只是個(gè)人喜好罷了?,?你要放那里

##?都是可以的?,?只要找得到?,?易于使用及管理就好?.

##?同樣的?,?若我們要起動(dòng)一些新增的?daemon?或?shell?script?,?那放在

##?是不錯(cuò)的選擇?.

##?下面一列就是去執(zhí)行?rc.local?中的設(shè)定?,?通常是一些?daemon?或是?shell

##?script

/etc/rc.d/rc.local

?

#?All?done.

?

到這里?,?rc.M?已經(jīng)結(jié)束了?,?我們來(lái)看看從?rc.M?之中執(zhí)行的?rc.font?及

rc.local?......

下面是?rc.font?的內(nèi)容?:

#!/bin/sh

#

#?This?selects?your?default?screen?font?from?among?the?ones?in

#?/usr/lib/kbd/consolefonts.

#

##?我想下面這一列的命令非常明顯了?,?就是設(shè)定?console?中的字體?,?你可以

##?改成自己喜歡的字體?.?或者你也可以利用?fontconfig?這個(gè)指令來(lái)改變?.

setfont?/usr/lib/kbd/consolefonts/default8x16

?

?

看完了?rc.font?后?,?我們來(lái)看看?rc.local?的內(nèi)容?.?我所要說(shuō)的是?:?rc.local

畢竟是自己設(shè)定的區(qū)域?,?所以每個(gè)人的可能都不一樣?,?就我而言?,?因?yàn)槲叶?run

了一些?daemon?,?所以與大家的可能不太相同?.?所以?,?rc.local?作參考就可以了.

下面是我的?rc.local?:

#!?/bin/sh

#?Put?any?local?setup?commands?in?here

#?Running?selection

?

##?lpd?是控制打印機(jī)的?daemon?,?要想在?LINUX?下用打印機(jī)?,?這個(gè)?daemon?必需

##?要被起動(dòng)?,?此外還要修改?/etc/printcap?.?詳細(xì)的情況要去看?PRINT-HOWTO

echo?-n?"lpd"

/etc/lpd

?

##?httpd?就是?WWW?server?的?daemon?.?想必大家都用過(guò)?Mosaic?,?Netscape?等

##?的瀏覽器?.?但假如我們想建立自己的?WWW?server?,?httpd?必須要執(zhí)行?.

echo?-n?"?httpd"

/usr/local/etc/httpd/src/httpd

?

##?在?WWW?的時(shí)代還沒(méi)來(lái)臨以前?,?gopher?可說(shuō)是具有最方便的信息索引功能?,?即使

##?到了現(xiàn)在?,?gopher?仍然占有一席之地?,?在這里?,?因?yàn)槲矣薪⒆约旱?gopher

##?server?,?所以?gopherd?必需被起動(dòng)?.

echo?-n?"?gopherd"

/usr/local/sbin/gopherd?-u?nobody

?

##?下面這個(gè)指令是?mouse?在?console?下做?cut?&?paste

echo?-n?"Running?selection..."

selection?-t?ms?&

echo?'?'

總結(jié)

以上是生活随笔為你收集整理的linux sis启动命令,Linux系统开机过程详细分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 边添小泬边狠狠躁视频 | 人人爽人人爽人人片 | 国产 日韩 欧美 成人 | 国产第一页在线播放 | 久草三级 | 成人污在线观看 | 国产白浆在线观看 | 亚洲区小说区图片区 | 国产古装艳史毛片hd | 国产高清在线免费观看 | 中文字幕8 | 国产男男gay体育生网站 | 欧美久久久久久久久久久久久久 | 黄色激情毛片 | 国产色av | 国产人妖在线视频 | 福利精品在线 | 在线se| 小蝌蚪av| 海角国产乱辈乱精品视频 | 在线观看一区视频 | 已满18岁免费观看电视连续剧 | 中文字幕av一区二区三区人妻少妇 | 欧美亚州国产 | 青青草激情视频 | av色成人 | 91桃色免费视频 | 久久精品久久久久久久 | 九九久久国产 | 国产人伦精品一区二区三区 | 久久噜 | 久色伊人 | 日本欧美www | 香蕉网址 | www.亚色| 亚洲黄色在线视频 | 大陆农村乡下av | 天天射天天 | 牛人盗摄一区二区三区视频 | www.狠狠操 | 波多野结衣中文字幕在线 | 亚洲永久免费网站 | 精品亚洲一区二区三区 | 国内爆初菊对白视频 | 手机av电影在线 | 免费的理伦片在线播放 | 韩国无码av片在线观看网站 | 欧美一级性 | 亚洲三级a | 亚洲一区二区三区久久 | 小嫩嫩12欧美 | 呦呦精品| y11111少妇| 中文字幕线人 | 日韩avxxx| 天天射天天草 | 日本中文字幕在线免费观看 | 激情五月综合色婷婷一区二区 | 久久婷婷av | 欧美一区二区国产 | 国产精品第一国产精品 | 中文字幕Av日韩精品 | 欧美性潮喷xxxxx免费视频看 | 久草视频免费播放 | 最好看的2019年中文在线观看 | 波多野结衣在线观看一区二区 | www.色就是色.com| 91免费视频网址 | 成人在线视频一区 | 欧美有码在线观看 | 一级黄色电影片 | 四虎永久在线视频 | 91黑人精品一区二区三区 | 少妇无码吹潮 | 特级丰满少妇一级aaaa爱毛片 | 3级av| 中文字幕一区二区三区5566 | 青草视屏 | 国产亚洲自拍一区 | 亚洲黄色激情 | 免费看欧美片 | 亚洲激情一区 | 麻豆成人入口 | 性色av一区二区 | 色爱色 | 91精品成人| 欧美日韩另类视频 | 欧美图片自拍偷拍 | 日韩精品视频免费看 | 一本一道久久a久久精品综合 | 222aaa| 91视频最新入口 | 国产第一毛片 | 国内精品人妻无码久久久影院蜜桃 | 成片免费观看视频 | 精品国产一区二区在线 | 无码人妻精品一区二区50 | 亚洲 欧美 国产 另类 | 男女啪啪毛片 |