<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海納百川

    服務(wù)才是生產(chǎn)力第一要素!

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    朋友

    最新評(píng)論

    2006年5月13日 #

    XmlHttp 的目標(biāo)

    1、提交http請(qǐng)求,從而可以在頁(yè)面不刷新的情況下更新頁(yè)面數(shù)據(jù)。
    2、提交http請(qǐng)求,執(zhí)行submit行為,從而在不刷新頁(yè)面的情況下更新后臺(tái)數(shù)據(jù),并進(jìn)行友好的提示。
    3、模擬登錄行為,令人難以置信的是,此對(duì)象竟然會(huì)更改本地環(huán)境!太強(qiáng)大了。

    posted @ 2006-10-17 23:05 海納百川 閱讀(282) | 評(píng)論 (0)編輯 收藏

    定位

    到開(kāi)發(fā)部后白天忙得像熱鍋上的螞蟻團(tuán)團(tuán)轉(zhuǎn),回家后就頭重腳輕,覺(jué)得特別的累,就想趴下睡覺(jué),根本無(wú)法集中精力看書(shū)、學(xué)習(xí)!今天想想覺(jué)得真空虛,真要好好規(guī)劃下一步什么走了!

    這個(gè)世界真繁華,Program的世界也是五彩繽紛,語(yǔ)言層出不窮,各種語(yǔ)言庫(kù)也是前赴后繼,非不把前浪推在沙灘上不可;所以Program遇到的技術(shù)問(wèn)題是越來(lái)越少了,但業(yè)務(wù)需求變更問(wèn)題還是此起彼伏,沒(méi)有看到絲毫有消退的可能,真希望這個(gè)世界在這個(gè)領(lǐng)域也能百家爭(zhēng)鳴、百家齊放,將需求不確定問(wèn)題減少到盡量低的程度。目前編程首先要考慮已經(jīng)不是技術(shù)問(wèn)題了,而是代碼組織問(wèn)題了,盡量保證代碼的維護(hù)性好、重用性高。

    對(duì)出現(xiàn)的一些新語(yǔ)言很是不適,對(duì)他們搗鼓的一些概念覺(jué)得很煩;沒(méi)有最好的語(yǔ)言,只有對(duì)自己有錢(qián)途的語(yǔ)言才是好語(yǔ)言。下一步要花點(diǎn)時(shí)間搗鼓完ATL8相關(guān)新技術(shù),花點(diǎn)時(shí)間研究groovy。

    未來(lái)屬于IT,IT的未來(lái)在互聯(lián)網(wǎng)!

    posted @ 2006-10-17 22:51 海納百川 閱讀(216) | 評(píng)論 (0)編輯 收藏

    com的世界

    com本質(zhì)是二進(jìn)制兼容,提供了各種語(yǔ)言在二進(jìn)制基礎(chǔ)上互訪問(wèn)性的規(guī)范,圍繞著這個(gè)基礎(chǔ)而作的一系列包裝,提供了一系列的服務(wù)。主要有:
    1、com組件在內(nèi)存中的實(shí)體必須符合C++純抽象類(lèi)的內(nèi)存模型。
    2、要求組件必須實(shí)現(xiàn)相應(yīng)的接口及規(guī)定接口中方法的語(yǔ)義。
    3、要求組件所在宿主必須提供引出接口,以便訪問(wèn)組件。
    4、提供了com庫(kù)用來(lái)提供一系列服務(wù)及存取接口設(shè)施。

    com通過(guò)接口的方法隱藏了實(shí)際的實(shí)現(xiàn),圍繞作接口可以提供了很多具體實(shí)現(xiàn),可以很容易的實(shí)現(xiàn)服務(wù)的替換、替換皮膚等要求。

    posted @ 2006-09-25 22:27 海納百川 閱讀(198) | 評(píng)論 (0)編輯 收藏

    這段時(shí)間太忙了,好久沒(méi)寫(xiě)blog

    這幾天好好總結(jié)在省政府的工作情況及體會(huì)。

    posted @ 2006-07-22 13:48 海納百川 閱讀(147) | 評(píng)論 (0)編輯 收藏

    2006年6月21日 省政府電子政務(wù)項(xiàng)目驗(yàn)收了!

    付出了很多、得到了很多!

    posted @ 2006-07-22 13:45 海納百川 閱讀(381) | 評(píng)論 (2)編輯 收藏

    linux DNS 服務(wù)器配置

    linux DNS 服務(wù)器配置

    摘錄 “Redhat linux9下安裝DNS配置文檔中國(guó)IT實(shí)驗(yàn)室.htm”中的內(nèi)容
      
      1、所需系統(tǒng)資源 安裝bind-9.2.1-16.i386.rpm caching-nameserver-7.2-7.noarch.rpm
      2、 配置文件:文件名及來(lái)源 /etc/named.conf /var/named/named.local、/var/named/named.ca caching-nameserver-7.2-7.noarch.rpm

      /etc/resolv.conf 系統(tǒng)自帶
      3、安裝:
      A、安裝rpm軟件包!(bind-9.2.1-16.i386.rpm caching-nameserver-7.2-7.noarch.rpm )
      B、啟動(dòng)服務(wù)

       /etc/rc.d/init.d/named start
      
    service named start
      C、停止服務(wù)

      ps –ef |grep named #找到進(jìn)程號(hào)
      kill 進(jìn)程號(hào)
      D、檢測(cè)
      修改 /etc/resolv.conf
      
    Nslookup
      
    >127.0.0.1
      
    >localhost
      

      配置文件解析
      
      基本上, BIND 的主要配置都放在 /etc/named.conf 文件中 !但是對(duì)于 hostname <--> IP 的對(duì)應(yīng)關(guān)系,就需要由 zone 來(lái)設(shè)定了!但是這個(gè) zone 的文件名稱(chēng)是在 /etc/named.conf 里面規(guī)定的!所以,請(qǐng)注意,每一個(gè) zone 的名稱(chēng)都是可變的,但是需要在 /etc/named.conf 里面命名好!此外,最好將 zone 的文件直接放置到 BIND 的默認(rèn)目錄下,就是 /var/named 里面去!這樣比較好管理!
      配置文件實(shí)例:
      /etc/named.confDNS的主配置文件!
       [root@wljs root]#vi /etc/named.conf
      
    options {
      directory “/var/named”; //這個(gè)是在規(guī)定『正反解文件

      //放置的目錄』,默認(rèn)目錄
       };
      // 首先定義出 . (root) 這個(gè) typehint的文件內(nèi)容,一般不修改

      zone “.” {//定義根
      type hint; //選擇的 type hint (. 專(zhuān)用 )
      file “named.ca”; //默認(rèn)的文件名
    named.ca
      }; //有的時(shí)候也可能是 named.root

      //dns數(shù)據(jù)庫(kù)中,named.ca文件中列出了所有根dns服務(wù)器的地址!
      
      // /再來(lái)則是定義出 localhost 的正反解。
      zone “l(fā)ocalhost” { //這個(gè) zone是解析localhost域名而使用!
      type master; //主要的在本機(jī)的設(shè)定文件!
      file “named.localhost”; //正解文件名!可以隨自己高興隨便取!
       };
      
    zone "0.0.127.in-addr.arpa" {
      //反解的 IP 網(wǎng)段!那個(gè)
    in-addr.arp
      //是固定的 IP 段寫(xiě)法!

       type master;
      file “named.127.0.0”;//名稱(chēng)任意!

       };
      //注意:在書(shū)寫(xiě)反向地址解析時(shí),與通常書(shū)寫(xiě)

      //ip地址順序相反!
      // 然后定義自己域的正反解!
       zone “wljs.edu.cn" {
      //假設(shè)這是你想定義的域名

       type master;
      
    file "named.wljs.edu.cn";
      
    };
      
    zone “162.45.210.in-addr.arpa" {
      
    type master;
      
    file "named.210.45.162";
      
    };
      

      
      注意 :
      1、Directory:這個(gè)值就是在每一個(gè) zone 的文件放置的目錄。 舉例來(lái)說(shuō),在localhost 正解zone里,文件是 named.localhost 時(shí), 那么這個(gè)文件的路徑就在 /var/named/named.localhost

      2、關(guān)于 . (root) 的內(nèi)容:root 最重要的就是那個(gè) type的值為hint 啦!記得寫(xiě)對(duì)喔!
      3、關(guān)于 localhost 的正反解: 正反解文件的名稱(chēng)都可以隨意設(shè)定,不過(guò),要特別留意的就是那個(gè) zone 后的是 domain name!
      4、關(guān)于其它 domain 的正反解:其實(shí)與 localhost 沒(méi)有什么不同的,就只是domain name 不同而已!

      5、反解的寫(xiě)法:反解的 Zone 的寫(xiě)法較為特殊,它必須要將 IP 反過(guò)來(lái)寫(xiě)的,例如 127.0.0.0/24 這個(gè) C 類(lèi) 的網(wǎng)段,要寫(xiě)的話,則必須要反過(guò)來(lái)寫(xiě)成 0.0.127 這樣的形式!其中需要注意的是,最后面務(wù)必要加上in-addr.arpa!不要忘記了!
      
      
      配置文件 named.local
      Named.local存放的是localhost的正向解析,其內(nèi)容如下:

       [root@localhost root]# vi /var/named/named.local
      
    $TTL 86400
      
    @ IN SOA localhost. root.localhost. (
      
    2002120601; Serial
      
    28800 ; Refresh
      
    14400 ; Retry
      
    720000 ;Expire
      
    86400 ) ; Minimum
      
    @ IN NS localhost.
      
    localhost. IN A 127.0.0.1
      注釋?zhuān)?/font>
      1、$TTL 86400 ; 這個(gè)跟清除 cache 的時(shí)間有關(guān)系!單位是秒!它定義向外查詢(xún)的記錄可以在 DNS cache 中維持多久!這個(gè)值太大太小都不好! ttl time to live!
      2@ 這個(gè)表示zone 定義出的那個(gè)部分!以這個(gè)文件內(nèi)容為例,因?yàn)槲覀冊(cè)?span lang="EN-US"> /etc/named.conf
    當(dāng)中就是定義出 localhost 為一個(gè) zone 的,因此,在這里,這個(gè)符號(hào)就代表 localhost
      
      3SOA 這個(gè)是 Start of Authority 開(kāi)始設(shè)定內(nèi)容的意思!也就是接在后面的設(shè)定要開(kāi)始了!這個(gè)在每一個(gè)zone的文件中都存在!
      4、在 SOA 后面會(huì)接著兩個(gè)部分,第一個(gè)為主機(jī)名稱(chēng)( localhost. ),請(qǐng)?zhí)貏e留意那個(gè) localhost 后面有個(gè)小數(shù)點(diǎn) (.) 這個(gè)東西很重要!他代表『一個(gè)完整的 hostname + domain name 了』! 如果沒(méi)有加上 (.) 的話,那么就表示該文字『僅為 hostname ,還需要加上 domain name 』! 這里是新手最容易出現(xiàn)的錯(cuò)誤!第二個(gè)為管理員的 e-mail !因?yàn)椴荒苁褂?span lang="EN-US"> @ (已經(jīng)是特殊符號(hào)了), 所以這里也同樣的以 (.) 來(lái)取代!例如上面我以 root@localhost 來(lái)做為我的 e-mail ,所以就寫(xiě)成了 root.localhost. ,同樣的,最后面有個(gè) (.) !
      5、小刮號(hào) ( ) 括起了五個(gè)數(shù)字,這五個(gè)數(shù)字除了minimum TTL 有關(guān)之外, 其它的都跟 slave master 的資料同步運(yùn)作有關(guān)!
      ? Serial :這個(gè)數(shù)字僅是用來(lái)做為 master slave 之間的 update 的參考數(shù)值也就是說(shuō),當(dāng) Slave serial 小于 Master 時(shí), 那么 update 才會(huì)動(dòng)作!通常我們以時(shí)間來(lái)做為 Serial 的訂定依據(jù),例如2002 年 12 6 日第一次設(shè)定,可以寫(xiě)成 『2002120601』請(qǐng)注意,這個(gè)數(shù)字不可超過(guò) 10 個(gè)數(shù)字。
      Refresh slave 多久進(jìn)行主動(dòng)更新的時(shí)間
      Retry :如果到了 Refresh 的時(shí)間,但是 slave 卻無(wú)法連接到 master 時(shí), 那么在多久之后,slave 會(huì)再次的主動(dòng)嘗試與主機(jī)聯(lián)機(jī);
      Expire :如果 slave 一直無(wú)法與 master 連接上,那么經(jīng)過(guò)多久的時(shí)間之后, 則命令 slave 不要再連接 master 了!
      Minimum :這個(gè)其實(shí)就是 TTL 啦!如果您沒(méi)有定義 TTL ,那么 TTL 的值就以這個(gè)來(lái)設(shè)定!
      6、@ IN NS localhost. ; NS 表示 name server 的意思,后面接的都是『hostname FQDN』這個(gè)表示前面的 domain 是由后面的這個(gè)主機(jī)所管理的啦! 這一行的意思是說(shuō),@ ( zone ,亦即是 localhost 這個(gè) domain ) 管理的 Name Server localhost 這部主機(jī),請(qǐng)注意,那個(gè) localhost 后面一定要接 (.) 才行!為什么呢?因?yàn)槿绻麤](méi)有加上 (.) 的話,那么主機(jī)名稱(chēng)將會(huì)變成 localhost.localhost ! Why ? 這是因?yàn)?span lang="EN-US"> BIND 預(yù)設(shè)情況中,沒(méi)有寫(xiě) . 的話,那么則表示該名稱(chēng)為 Hostname 而已,需要再加上 domain name 才行!
      7、 localhost. IN A 127.0.0.1
      這句指定主機(jī)與ip地址的對(duì)應(yīng)關(guān)系!通常以A來(lái)表示正解;由于 Name Server 為主機(jī)的名稱(chēng),所以后續(xù)還要加上這個(gè) name server 的正解的

      
       /var/named/named.127.0.0
      /var/named/named.127.0.0文件是localhost 的反解文件!

       [root@localhost named]#vi named.127.0.0
      #這個(gè)文件名稱(chēng)是在/etc/named.conf里面設(shè)定的

       $TTL 600
      
    @ IN SOA localhost. root.localhost. ( 2002120601 ; Serial
      
    28800 ; Refresh
      
    14400 ; Retry
      
    720000 ; Expire
      
    86400 ) ; Minimum;
      
    @ IN NS localhost.
      1 IN PTR localhost. ;PTR 這是反解的符號(hào)!

     ??;ip->主機(jī)
      
      
       Named.wljs.edu.cn
      
    $TTL 86400
      
    @ IN SOA jsj1.wljs.edu.cn. root.wljs.edu.cn. (
      
    2004102901 ; Serial
      
    28800 ; Refresh
      
    14400 ; Retry
      
    720000 ; Expire
      
    86400 ) ; minimum
      @ IN NS jsj1.wljs.edu.cn. 

       @ IN MX 10 jsj1.wljs.edu.cn.
      
    jsj1 IN A 210.45.162.14
      
    Jsj2 IN A 210.45.162.30
      Jsj1 IN TXT “Red Hat Linux 9”   

       www IN CNAME jsj1.wljs.edu.cn.
      

      注釋 :
      1、MXMail eXchanger (MX) 的簡(jiǎn)寫(xiě),指定郵件分發(fā)服務(wù)器!指定一個(gè)代理郵件分發(fā)服務(wù)器接收從internet上來(lái)的郵件!然后再由代理郵件分發(fā)服務(wù)器將郵件分發(fā)給相應(yīng)的主機(jī)!

      2TXT:說(shuō)明部分!
      3CNAME:指定主機(jī)別名
      
       $TTL 86400
      
    @ IN SOA jsj1.edu.cn. root.jsj1.edu.cn. (
      

       2004102901 ; Serial
      
    28800 ; Refresh
      
    14400 ; Retry
      
    720000 ; Expire
      
    86400 ) ; minimum
      
    @ IN NS jsj1.wljs.edu.cn
      
    IN PTR jsj1.wljs.edu.cn.
      30 IN
    PTR jsj2.wljs.edu.cn.
      

      主dns服務(wù)器的/var/named/named.ca文件
      在dns數(shù)據(jù)庫(kù)中的named.ca文件提供了根DNS服務(wù)器的地址。當(dāng)一個(gè)DNS的請(qǐng)求超過(guò)了域的代理范圍時(shí),DNS服務(wù)器會(huì)將該請(qǐng)求交給根DNS。在named.ca文件中包含了根名字服務(wù)器的有關(guān)信息!
      這個(gè)文件通常情況下不需修改!但是對(duì)于一個(gè)好的系統(tǒng)管理員,應(yīng)當(dāng)經(jīng)常更新此文件,因?yàn)榇宋募械恼军c(diǎn)會(huì)隨網(wǎng)絡(luò)的變化而變化!
      
      測(cè) 試
      
      配置好文件后,應(yīng)當(dāng)測(cè)試一下:
      1、啟動(dòng)服務(wù) :/etc/rc.d/init.d/named start
      2、修改/etc/resolv.conf文件的name server
    210.45.162.14
      3
    nslookup
      
    >jsj1.wljs.edu.cn
      
    >jsj2.wljs.edu.cn
      
    >210.45.162.14
      
    >210.45.162.30
      >www.czt

    ?

    ?

    posted @ 2006-06-23 20:17 海納百川 閱讀(2529) | 評(píng)論 (0)編輯 收藏

    無(wú)聊的媒體-“五胞胎”始末

    在門(mén)戶(hù)網(wǎng)站上看到過(guò)五胞胎"的一些新聞,自己不了解當(dāng)事人的情況及所處的環(huán)境,只覺(jué)得很好玩,不是很在意這個(gè)事情,畢竟人家的行為對(duì)社會(huì)并沒(méi)有造成任何負(fù)面的影響。但今天晚上驟然看到遼寧臺(tái)兩級(jí)節(jié)目?jī)?nèi)容竟然是關(guān)于五胞胎的事情,就大概看了一下,在節(jié)目中竟然看到孕婦家里熙熙攘攘的人群,還圍著那么一群記者,感覺(jué)特別驚訝,一是驚訝這個(gè)事情竟然有這么大的社會(huì)影響力,受到如此多媒體的關(guān)注,二是驚訝這么多記者的日常工作就是來(lái)監(jiān)護(hù)這個(gè)孕婦,可孕婦只是一般的平民百姓,不是天皇歌后,我都感覺(jué)有點(diǎn)別扭,怪不得人家孕婦也不領(lǐng)情,哭哭鬧鬧的。在看的過(guò)程中我心里一直很別扭,因?yàn)槲抑肋@是個(gè)善意的謊言,由于她所處的環(huán)境及在各種社會(huì)因素的影響下加上由于現(xiàn)在社會(huì)被通訊事業(yè)壓榨成了小盒子,這個(gè)事情就演變成了對(duì)這個(gè)社會(huì)產(chǎn)生責(zé)任的事態(tài),成了眾多媒體獵取新聞的題材。在這個(gè)社會(huì)的信息光速的傳播下,很快變成了家喻戶(hù)曉的事情了。我個(gè)人覺(jué)得這個(gè)事情本身對(duì)社會(huì)實(shí)際上沒(méi)什么影響,有什么影響的話,也是那些好事多磨者自找的。但這個(gè)事情卻對(duì)當(dāng)事人產(chǎn)生了莫大的影響及心理創(chuàng)傷,這有她自己的因素,但更多的是那些無(wú)聊的人們、無(wú)聊的媒體記者所帶給人家的壓力??赐旰螅杏X(jué)特別的惡心,惡心這些記者就像嗡嗡叫的蒼蠅一邊發(fā)出煩人的聲音,一邊傳播惡心的味道。人家是個(gè)農(nóng)家孩子,又是個(gè)孕婦,你們就給人家一點(diǎn)清靜吧,真拜托你們安靜點(diǎn),給大家一個(gè)好的環(huán)境,拜托你們多點(diǎn)同理心、多點(diǎn)同情心。

    愿各位兄弟姐妹自強(qiáng)、自立、自信,你們就是最棒的!

    posted @ 2006-06-22 09:52 海納百川 閱讀(256) | 評(píng)論 (0)編輯 收藏

    LINUX下配置DNS全文

    LINUX下配置DNS全文
    ?
    作者: hew? 發(fā)布日期: 2006-5-30??? 查看數(shù): 231?? 出自: http://www.linuxsky.net
    @ ----這個(gè)符號(hào)意味著SOA與域是一樣的

    IN -----IN是提供IP地址的域名類(lèi)當(dāng),與A,PTR或CNAME記錄一起使用時(shí)可將域名映射為IP地址,反之一樣

    NS -----域名服務(wù)器指定的區(qū)域DNS服務(wù)器的域名或IP地址

    MX ----MX記錄定義何種機(jī)器來(lái)為域或單個(gè)主機(jī)傳送電子郵件,為域定義就是告訴每個(gè)人將郵件發(fā)送給該域中要與之通信的人或機(jī)器

    SOA-----Start Of Authority 指明其后的域名定義了主域名服務(wù)器及該域的聯(lián)系點(diǎn)的電子郵件地址。

    PTR---將IP地址映射為主機(jī)名,PTR記錄執(zhí)行與A及記錄相反的過(guò)程

    A----將主機(jī)名映射為其IP地址


    DNS簡(jiǎn)介

    在Linux 中,域名服務(wù)(DNS)是由柏克萊網(wǎng)間名域(Berkeley Internet Name Domain——BIND)軟件實(shí)現(xiàn)的。BIND是一個(gè)客戶(hù)/服務(wù)系統(tǒng),它的客戶(hù)方面稱(chēng)為轉(zhuǎn)換程序(resolver),它產(chǎn)生域名信息的查詢(xún),將這類(lèi)信息發(fā)送給服務(wù)器,DNS軟件回答轉(zhuǎn)換程序的查詢(xún)。BIND的服務(wù)方面是一個(gè)稱(chēng)為named(讀作“name”“d”)的守護(hù)進(jìn)程。

    我們將討論三種基本BIND配置任務(wù):

    配置BIND轉(zhuǎn)換程序。

    配置BIND域名服務(wù)。

    建立服務(wù)器數(shù)據(jù)庫(kù)文件,稱(chēng)為“區(qū)文件(zone file)。

    術(shù)語(yǔ)“區(qū)(zone)”往往可以與單詞“域(domain)”互換使用,但這里卻有一些區(qū)別,“區(qū)”是指域數(shù)據(jù)庫(kù)文件,而“域”則比較通用。在本書(shū)中,域是用域名定義的域結(jié)構(gòu)中的一部分,而區(qū)則是域數(shù)據(jù)庫(kù)文件中包含域信息的集合,包含域信息的文件稱(chēng)為“區(qū)文件”。

    DNS的作用是把IP地址轉(zhuǎn)化為代表主機(jī)、網(wǎng)絡(luò)和郵件別名的助記名。它把整個(gè)Internet IP地址和名字空間分解為不同的邏輯組來(lái)做這項(xiàng)工作。每個(gè)組對(duì)它所擁有的計(jì)算機(jī)和其他信息具有控制權(quán)。
    DNS服務(wù)器的類(lèi)型

    BIND可以配置成以幾種不同的方法運(yùn)行的DNS,常見(jiàn)的BIND配置是唯轉(zhuǎn)換程序系統(tǒng)、唯高速緩存系統(tǒng)、主服務(wù)器和輔助服務(wù)器。

    轉(zhuǎn)換程序是一段要求域名服務(wù)器提供域信息的程序,在Linux系統(tǒng)中,它是作為一個(gè)庫(kù)程序來(lái)實(shí)現(xiàn)的,不是一個(gè)單獨(dú)的客戶(hù)程序。在唯轉(zhuǎn)換程序系統(tǒng)中,僅使用轉(zhuǎn)換程序,并不運(yùn)行域名服務(wù)器。這種系統(tǒng)是很容易配置的,最多只需要設(shè)置/etc/resolv.conf文件。其它三個(gè)BIND配置選項(xiàng)都是用于 named服務(wù)軟件的。

    唯高速緩存服務(wù)器 唯高速緩存服務(wù)器(caching-only server)可運(yùn)行域名服務(wù)器軟件但是沒(méi)有域名數(shù)據(jù)庫(kù)軟件。它從某個(gè)遠(yuǎn)程服務(wù)器取得每次域名服務(wù)器查詢(xún)的回答,一旦取得一個(gè)答案,就將它放在高速緩存中,以后查詢(xún)相同的信息時(shí)就用它予以回答。所有的域名服務(wù)器都按這種方式使用高速緩存中的信息,但唯高速緩存服務(wù)器則依賴(lài)于這一技術(shù)提供所有的域名服務(wù)器信息。唯高速緩存服務(wù)器不是權(quán)威性服務(wù)器,因?yàn)樗峁┑乃行畔⒍际情g接信息。

    對(duì)于唯高速緩存服務(wù)器只需要配置一個(gè)高速緩存文件,但最常見(jiàn)的配置還包括一個(gè)回送文件,這或許是最常見(jiàn)的域名服務(wù)器配置。接著才是唯轉(zhuǎn)換程序配置,它是最容易配置的。

    主服務(wù)器 主服務(wù)器(primary name server)是特定域所有信息的權(quán)威性信息源。它從域管理員構(gòu)造的本地磁盤(pán)文件中加載域信息,該文件(區(qū)文件)包含著該服務(wù)器具有管理權(quán)的一部分域結(jié)構(gòu)的最精確信息。主服務(wù)器是一種權(quán)威性服務(wù)器,因?yàn)樗越^對(duì)的權(quán)威去回答對(duì)它域的任何查詢(xún)。

    配置主服務(wù)器需要一整套配置文件,包括正規(guī)域的區(qū)文件(named.hosts)和反向域的區(qū)文件(named.rev)、引導(dǎo)文件(named.conf)、高速緩存(named.ca)和回送文件(named.local),其它的配置都不需要這樣一整套文件。

    輔助域名服務(wù)器 輔助域名服務(wù)器(secondary name server)可從主服務(wù)器中轉(zhuǎn)移一整套域信息。區(qū)文件是從主服務(wù)器中轉(zhuǎn)移出來(lái)的,并作為本地磁盤(pán)文件存儲(chǔ)在輔助服務(wù)器中。這種轉(zhuǎn)移稱(chēng)為“區(qū)文件轉(zhuǎn)移”。在輔助域名服務(wù)器中有一個(gè)所有域信息的完整拷貝,可以有權(quán)威地回答對(duì)該域的查詢(xún),因此,輔助域名服務(wù)器也稱(chēng)作權(quán)威性服務(wù)器。

    配置輔助域名服務(wù)器不需要生成本地區(qū)文件,因?yàn)榭梢詮闹鞣?wù)器中下載該區(qū)文件。然而其它的文件是確是需要的,包括引導(dǎo)文件、高速緩存文件和回送文件。

    一個(gè)域名服務(wù)器可以是這類(lèi)配置中的任何一種,但經(jīng)常是將多種配置類(lèi)型的元素組合在一起。然而所有的系統(tǒng)都要運(yùn)行轉(zhuǎn)換程序。
     
    DNS常用術(shù)語(yǔ)

    DNS是一個(gè)很復(fù)雜的概念,表1列出了常用的DNS術(shù)語(yǔ)。

    表1 常用DNS術(shù)語(yǔ)

    術(shù)語(yǔ)

    說(shuō)明

    代表網(wǎng)絡(luò)一部分的邏輯實(shí)體或組織

    域名

    主機(jī)名的一部分,它代表包含這個(gè)主機(jī)的域。它可以和域交換使用

    主機(jī)

    網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)

    節(jié)點(diǎn)

    網(wǎng)絡(luò)上的一臺(tái)計(jì)算機(jī)

    域名服務(wù)器

    提供DNS服務(wù)的計(jì)算機(jī),它將DNS名字轉(zhuǎn)化為IP地址

    解析

    把一個(gè)DNS服務(wù)器轉(zhuǎn)化為與其相映的IP地址的過(guò)程

    解析器

    從域名服務(wù)器中提取DNS信息的程序或庫(kù)子程序

    反向解析

    將給出的IP地址轉(zhuǎn)化為其相映的DNS名字

    欺騙

    使網(wǎng)絡(luò)看上去好象具有不同的IP地址或域名的行為

    在概念上可以把DNS分為三個(gè)部分:

    域名空間這是標(biāo)識(shí)一組主機(jī)并提供他們的有關(guān)信息的樹(shù)結(jié)構(gòu)的詳細(xì)說(shuō)明。樹(shù)上的每一個(gè)節(jié)點(diǎn)都有它控制下的主機(jī)的有關(guān)信息的數(shù)據(jù)庫(kù)。查詢(xún)命令試圖從這個(gè)數(shù)據(jù)庫(kù)中提取適當(dāng)?shù)男畔?。?jiǎn)單地說(shuō),這只是所有不同類(lèi)型信息的列表,這些信息是域名、IP地址、郵件別名和那些在DNS系統(tǒng)中能查到的內(nèi)容。

    域名服務(wù)器它們是保持并維護(hù)域名空間中的數(shù)據(jù)的程序。每個(gè)域名服務(wù)器含有一個(gè)域名空間子集的完整信息,并保存其它有關(guān)部分的信息。一個(gè)域名服務(wù)器擁有它控制范圍的完整信息。控制的信息按區(qū)進(jìn)行劃分,區(qū)可以分布在不同的域名服務(wù)器上,以便為每個(gè)區(qū)提供服務(wù)。每個(gè)域名服務(wù)器都知道每個(gè)負(fù)責(zé)其他區(qū)的域名服務(wù)器。如果來(lái)了一個(gè)請(qǐng)求,它請(qǐng)求給定域名服務(wù)器負(fù)責(zé)的那個(gè)區(qū)的信息,那么這個(gè)域名服務(wù)器只是簡(jiǎn)單地返回信息。但是,如果請(qǐng)求是不同區(qū)的信息,那么這個(gè)域名服務(wù)器就要與控制該區(qū)的相映服務(wù)器聯(lián)系。

    解析器 解析器是簡(jiǎn)單的程序或子程序庫(kù),它從服務(wù)器中提取信息以響應(yīng)對(duì)域名空間中主機(jī)的查詢(xún)。
    配置轉(zhuǎn)換程序

    使用DNS的第一步是在用戶(hù)的計(jì)算機(jī)上配置轉(zhuǎn)換程序,即讓機(jī)器能夠能夠從DNS服務(wù)器中獲取域名解析/反解析服務(wù)。轉(zhuǎn)換程序不是一個(gè)單獨(dú)而明確的處理進(jìn)程,而是網(wǎng)絡(luò)進(jìn)程調(diào)用的一個(gè)標(biāo)準(zhǔn)C程序庫(kù)。如果本地系統(tǒng)不運(yùn)行named,就必須配置本地轉(zhuǎn)換程序。
    轉(zhuǎn)換程序控制文件/etc/host.conf

    /etc/host.conf是用來(lái)控制本地轉(zhuǎn)換程序的文件的設(shè)置。該文件告訴轉(zhuǎn)換程序使用哪些服務(wù)、按照什么順序進(jìn)行。該文件的字段可以用空格或制表符分隔。字符“#”表示注釋行。表2是可在host.conf中指定的選項(xiàng)。

    ?

    表2 /etc/host.conf文件的配置選項(xiàng)

    選項(xiàng)

    說(shuō)明

    order

    指定按照哪種順序來(lái)嘗試不同的名字解析機(jī)制。按列出的順序來(lái)進(jìn)行指定的解析服務(wù)。支持下面的名字解析機(jī)制:

    hosts 試圖通過(guò)查找本地/etc/hosts文件來(lái)解析名字

    bind 使用DNS域名服務(wù)器來(lái)解析名字

    nis 使用網(wǎng)絡(luò)信息服務(wù)(NIS)協(xié)議來(lái)解析主機(jī)名字

    multi

    以off和on為參數(shù)。與host查詢(xún)一起使用,用來(lái)確定一臺(tái)主機(jī)是否在/etc/hosts文件中指定了多個(gè)IP地址

    nospoof

    如果用逆向解析找出與指定的地址匹配的主機(jī)名,對(duì)返回的地址進(jìn)行解析以確認(rèn)它確實(shí)與您查詢(xún)的地址相配。為了防止“騙取”IP地址,通過(guò)指定nospoof on來(lái)允許這種功能

    alert

    以off和on為參數(shù)。如果打開(kāi),任何試圖騙取IP地址的行為都通過(guò)syslog工具進(jìn)行記錄

    trim

    以域名為參數(shù)。在/etc/hosts中查找名字前,trim刪除這個(gè)域名。著使你只把基本主機(jī)名放在/etc/host.conf中而不指定域名

    下面這個(gè)例子是主機(jī)vlager上的/etc/host.conf文件:

    # /etc/host.conf

    # We have named running, but no NIS (yet)

    order bind hosts

    # Allow multiple addrs

    multi on

    # Guard against spoof attempts

    nospoof on

    # Trim local domain (not really necessary).

    trim vbrew.com.

    這個(gè)例子給出了域vbrew.com的通用解析程序配置。該解析程序首先使用DNS然后使用/etc/hosts文件查找主機(jī)名。在解析查找中指定本地 /etc/hosts文件是一個(gè)好主意。如果由于某種原因不能使用域名服務(wù)器了,我們還可以使用主機(jī)文件中列出的那些主機(jī)名。該機(jī)器上允許使用多個(gè)IP地址,主機(jī)通過(guò)重新解析主機(jī)名字(從IP地址逆向查找返回的主機(jī)名字)來(lái)檢查IP欺騙。
    轉(zhuǎn)換程序/配置文件/etc/resolv.conf

    當(dāng)配置轉(zhuǎn)換程序使用BIND域名服務(wù)查詢(xún)主機(jī)時(shí),我們必須告訴轉(zhuǎn)換程序使用哪一個(gè)域名服務(wù)器。用來(lái)完成這項(xiàng)任務(wù)的工具就是/etc/resolv.conf 文件。/etc/resolv.conf控制轉(zhuǎn)換程序使用DNS解析主機(jī)名使用的方式,它可以明確地定義系統(tǒng)的配置,允許我們命名由于缺省服務(wù)器不響應(yīng)而使用的備份服務(wù)器。因此,盡管會(huì)增加系統(tǒng)負(fù)荷,但在某些場(chǎng)合使用resolv.conf是很受歡迎的。

    /etc/resolv.conf是一個(gè)簡(jiǎn)單而易讀的文件。在/etc/resov.conf中使用的命令,具有系統(tǒng)專(zhuān)用的形式,但一般都支持domain和nameserver兩項(xiàng)命令。

    nameserver 項(xiàng)利用IP地址去識(shí)別讓轉(zhuǎn)換程序去識(shí)別查詢(xún)域信息的那些服務(wù)器。我們可以多次使用nameserver選項(xiàng),可以使用多達(dá)三個(gè)域名服務(wù)器。這些名服務(wù)器是按照它們?cè)谖募械捻樞蜻M(jìn)行查詢(xún)的,如果沒(méi)有接收到一個(gè)服務(wù)器的響應(yīng),就去試表中的下一個(gè)服務(wù)器,直到所有服務(wù)器試完為止(如果在 /etc/resolv.conf文件中設(shè)置了三個(gè)以上的域名服務(wù)器,那么,即使前三個(gè)服務(wù)器都沒(méi)有響應(yīng)查詢(xún)請(qǐng)求,Linux也不會(huì)去請(qǐng)求后面的服務(wù)器)。我們應(yīng)該將最可靠的域名服務(wù)器列在最前面,以便在查詢(xún)時(shí)不會(huì)超時(shí)。如果resolv.conf文件中不包含nameserver項(xiàng),或者不存在 resolv.conf文件,就將所有名服務(wù)器查詢(xún)發(fā)送給本地主機(jī)。然而,如果有一個(gè)resolv.conf文件,它包含nameserver項(xiàng),除非有一項(xiàng)指向本地主機(jī),否則就不查詢(xún)本地主機(jī)。在配置唯轉(zhuǎn)換程序的主機(jī)中,resolv.conf文件包含nameserver項(xiàng),但沒(méi)有一個(gè)項(xiàng)指向本地主機(jī)。

    domain項(xiàng)用來(lái)定義缺省域名(主機(jī)的本地域名)。轉(zhuǎn)換程序會(huì)將缺省域名掛在任何不含點(diǎn)的主機(jī)名后面。例如,轉(zhuǎn)換程序接收到主機(jī)名 vale(它不含點(diǎn)),就將其缺省域名掛接在vale后面,構(gòu)成對(duì)它的查詢(xún)。如果domian域中的name值是vbrew.com,那么轉(zhuǎn)換程序就將查詢(xún)vale.vbrew.com。如果沒(méi)有出它,則轉(zhuǎn)換程序就試圖通過(guò)getdomainname()系統(tǒng)調(diào)用來(lái)獲得本地域名。

    如果聽(tīng)起來(lái)讓人迷惑不解的話,我們可以看看下面這個(gè)例子,這是Virtual Brewery中的resolv.conf文件:

    # /etc/resolv.conf

    # Our domain

    domain vbrew.com

    #

    # We use vlager as central nameserver:

    nameserver 191.72.1.1

    在該例中,通過(guò)domain指定缺省域名,并列出一個(gè)用于解析主機(jī)名的域名服務(wù)器。在這個(gè)例子中沒(méi)有指定查尋順序(使用search選項(xiàng)),因此如果要查詢(xún)一臺(tái)機(jī)器的地址(如vale),解析器則首先試圖查找vale,如果沒(méi)找到,則查找vale.vbrew.com,然后再查找vbrew.com。
    唯轉(zhuǎn)換程序配置

    配置唯轉(zhuǎn)換程序是非常簡(jiǎn)單的,下面是一個(gè)唯轉(zhuǎn)換程序的/etc/resolv.conf文件的例子:

    # /etc/resolv.conf

    # Our domain

    domain vbrew.com

    #

    # We use vlager as central nameserver:

    nameserver 191.72.1.1

    # netx try vale

    namesever 191.72.1.3

    該配置文件告訴轉(zhuǎn)換程序?qū)⑺械牟樵?xún)發(fā)送給主域名服務(wù)器vlager,如果失敗,就試vale。這些查詢(xún)是永遠(yuǎn)不能在本地轉(zhuǎn)換的。這一個(gè)簡(jiǎn)單的resolv.conf文件就可以滿(mǎn)足唯轉(zhuǎn)換程序配置的全部要求。
    設(shè)置域名服務(wù)器

    在Linux 上的域名服務(wù)是由named守護(hù)進(jìn)程來(lái)執(zhí)行的,named最早是為BSD向客戶(hù)機(jī)提供域名服務(wù)而開(kāi)發(fā)的。named守護(hù)進(jìn)程通常在系統(tǒng)啟動(dòng)時(shí)開(kāi)始工作,并一直工作到系統(tǒng)關(guān)閉。該進(jìn)程從被稱(chēng)作/etc/named.boot的配置文件中獲取有關(guān)信息和將主機(jī)名映射為IP地址的各種文件。

    為了運(yùn)行named,只要在命令行中輸入:

    # /etc/rc.d/init.d/named start

    named就會(huì)開(kāi)始運(yùn)行,讀取named.boot文件及其定義的任何區(qū)文件并將它的進(jìn)程ID以ASCII碼的形式寫(xiě)入/var/run/named.pid中,下載任何來(lái)自主服務(wù)器的區(qū)文件,如果有必要的話在端口53等待DNS請(qǐng)求。

    雖然轉(zhuǎn)換程序的配置只需要一個(gè)配置文件,但是在配置named時(shí)卻要使用多個(gè)文件,一整套named配置文件如表3所示。

    表3 named配置文件

    配置文件

    說(shuō)明

    named.conf

    設(shè)置一般的named參數(shù),指向該服務(wù)器使用的域數(shù)據(jù)庫(kù)信息的源,這類(lèi)源可以是本地磁盤(pán)文件或遠(yuǎn)程服務(wù)器

    named.ca

    指向根域名服務(wù)器

    named.local

    用于在本地轉(zhuǎn)換回送地址

    named.hosts

    將主機(jī)名映射為IP地址

    named.rev

    用于反向域的、將IP地址映射到主機(jī)名的區(qū)文件

    在下面各節(jié)中我們將探討如何利用其中的每一個(gè)文件去配置named。
    /etc/named.conf文件

    named.conf文件通常很小,只包括一些指向DNS信息源的信息。其中某些源是本地文件,其他則是遠(yuǎn)程服務(wù)器。下面我們將看到一個(gè)需要生成的每種文件類(lèi)型的例子。

    表4概括了named.conf文件中使用的各種配置語(yǔ)句,它提供的信息能幫助我們了解這一些例子:

    表4 named.boot文件的配置選項(xiàng)

    選項(xiàng)

    說(shuō)明

    Directory

    指定DNS文件所在的目錄。您可以重復(fù)此選項(xiàng)以指定幾個(gè)不同的目錄??梢越o出這些目錄相關(guān)的文件路徑名

    Master

    以一個(gè)域名和一個(gè)文件名為參數(shù)。此選項(xiàng)聲明named對(duì)指定的域具有控制權(quán),并使named從指定的區(qū)域加載信息

    Hint

    為named建立高速緩存信息。以一個(gè)域名和一個(gè)文件名為參數(shù)。域名通常用“.”指定。指定的文件包括一組稱(chēng)為服務(wù)器提示的記錄,這些記錄列出了根域名服務(wù)器的信息

    Forwarders

    以一個(gè)域名服務(wù)器的列表作為參數(shù)。告訴本地域名服務(wù)器:如果它不能從它的本地信息中解析出地址,那么就與該列表中的服務(wù)器聯(lián)系

    Slave

    把本地域名服務(wù)器變成一個(gè)從屬服務(wù)器。如果給出了此選項(xiàng),那么本地服務(wù)器就試著通過(guò)遞歸查詢(xún)來(lái)解析DNS名字。它只把請(qǐng)求傳遞給forwarders選項(xiàng)行列出的服務(wù)器中的一個(gè)

    配置named.conf文件所使用的方法,是用來(lái)控制將域名服務(wù)器作為主服務(wù)器、輔助服務(wù)器還是唯高速緩存服務(wù)器的。理解不同配置的最佳方法是討論各種named.conf的示例文件。
    1.唯高速緩存服務(wù)器

    配置唯高速緩存域名服務(wù)器是很簡(jiǎn)單的。必須有named.conf和named.ca文件,通常也要用到named.local文件。下面是用于唯高速緩存服務(wù)器的named.conf文件的例子,其中以“//”開(kāi)頭的是注釋?zhuān)?/p>

    // generated by named-bootconf.pl

    options {

    directory "/var/named";

    /*

    * If there is a firewall between you and nameservers you want

    * to talk to, you might need to uncomment the query-source

    * directive below. Previous versions of BIND always asked

    * questions using port 53, but BIND 8.1 uses an unprivileged

    * port by default.

    */

    // query-source address * port 53;

    };

    ?

    //

    // a caching only nameserver config

    //

    ?

    //

    // a caching only nameserver config

    //

    zone "." {

    type hint;

    file "named.ca";

    };

    ?

    zone "0.0.127.in-addr.arpa" {

    type master;

    file "named.local";

    directory 這一行告訴named到哪里去找尋文件。所有其后命名的文件都將是相對(duì)于此目錄的。該文件告訴named去維持一個(gè)域名服務(wù)器響應(yīng)的高速緩存,并利用 named.ca文件的內(nèi)容去初始化該高速緩存。該高速緩存初始化文件的名字可以是任何名字,但一般使用/var/named/named.ca。并不是在該文件中使用一個(gè)hint語(yǔ)句就能使它成為唯高速緩存配置,幾乎每一種服務(wù)器的配置都要用到cache語(yǔ)句,而是因?yàn)闆](méi)有master和slave語(yǔ)句才使它成為一個(gè)唯高速緩存配置。

    但是,在我們這個(gè)例子中卻有一個(gè)master語(yǔ)句。事實(shí)上,幾乎在每一個(gè)唯高速緩存的配置文件中都有這一個(gè)語(yǔ)句,它將本地服務(wù)器定義為它自己的回送域的主服務(wù)器,并假定該域的信息存儲(chǔ)在named.local文件中。這個(gè)回送域是一個(gè)in- addr.arpa域(in-addr.arpa域用于指定逆向解析,或IP地址到DNS名字解析),它將地址127.0.0.1映射為名字 localhost。轉(zhuǎn)換自己的回送地址對(duì)于大多數(shù)人都是有意義的,因?yàn)榇蠖鄶?shù)的named.conf文件都包含這一項(xiàng)。

    在大多數(shù)唯高速緩存服務(wù)器的配置文件中,這種directory、master和hint語(yǔ)句是唯一使用的語(yǔ)句,但也可以增加其他的語(yǔ)句,forwarders和slave等語(yǔ)句都可以使用。
    2.主服務(wù)器和輔助服務(wù)器的配置

    我們虛構(gòu)的vbrew.com是舉例說(shuō)明主服務(wù)器和輔助服務(wù)器的基礎(chǔ),下面是將vlager定義為vbrew.com域的主服務(wù)器的named.conf文件:

    // generated by named-bootconf.pl

    ?

    options {

    directory "/var/named";

    /*

    * If there is a firewall between you and nameservers you want

    * to talk to, you might need to uncomment the query-source

    * directive below. Previous versions of BIND always asked

    * questions using port 53, but BIND 8.1 uses an unprivileged

    * port by default.

    */

    // query-source address * port 53;

    };

    ?

    //

    // a caching only nameserver config

    //

    zone "." {

    type hint;

    file "named.ca";

    };

    zone "vbrew.com"{

    type master;

    file "named.hosts";

    };

    ?

    zone "0.0.127.in-addr.arpa" {

    type master;

    file "named.local";

    };

    ?

    zone "72.191.in-addr.arpa"{

    type master;

    file "named.rev";

    };

    上例中第一個(gè)master告訴我們這是vbrew.com域的主服務(wù)器。該域的數(shù)據(jù)是從named.hosts文件中加載的。在我們這個(gè)例子中,我們將文件名named.hosts作為區(qū)文件名,但也可以使用更有說(shuō)明性的文字,例如,vbrew.com區(qū)文件的名字使用vbrew.com.hosts則較好。

    第三個(gè)master語(yǔ)句指向能將IP地址191.72.0.0映射為主機(jī)名的文件。它假定本地服務(wù)器是反向域72.191.in-addr.arpa的主服務(wù)器,該域的數(shù)據(jù)從文件named.rev中加載。

    在上例配置中的hint語(yǔ)句和第二個(gè)用于回送域的primary語(yǔ)句我們前面在唯高速緩存配置中已經(jīng)討論過(guò)。在這些配置中,它們的作用是相同的,而且?guī)缀踉谌魏闻渲弥卸家褂盟鼈儭?/p>

    輔助服務(wù)器的配置與主服務(wù)器的配置不同,它使用slave語(yǔ)句代替master語(yǔ)句。slave語(yǔ)句指向用作域信息源的遠(yuǎn)程服務(wù)器,以替代本地磁盤(pán)文件。下面的named.conf文件可以將vale配置成為vbrew.com域的輔助服務(wù)器:

    // generated by named-bootconf.pl

    ?

    options {

    directory "/var/named";

    /*

    * If there is a firewall between you and nameservers you want

    * to talk to, you might need to uncomment the query-source

    * directive below. Previous versions of BIND always asked

    * questions using port 53, but BIND 8.1 uses an unprivileged

    * port by default.

    */

    // query-source address * port 53;

    };

    ?

    //

    // a caching only nameserver config

    //

    zone "." {

    type hint;

    file "named.ca";

    };

    ?

    zone "0.0.127.in-addr.arpa" {

    type master;

    file "named.local";

    };

    zone "vbrew.com"{

    type slave;

    file "named.hosts";

    masters { 191.72.1.3; };

    };

    zone "72.191.in-addr.arpa"{

    type slave;

    file "named.rev";

    masters {191.72.1.3;};

    };

    cache . named.ca

    secondary vbrew.com 191.72.1.3 named.hosts

    secondary 72.191.in-addr.arpa 191.72.1.3 named.rev

    primary 0.0.127.in-addr.arpa named.local

    第一個(gè)slave語(yǔ)句是使這個(gè)服務(wù)器成為vbrew.com的輔助服務(wù)器。它告訴named從IP地址為191.72.1.3的服務(wù)器中下載 vbrew.com的信息,并將其數(shù)據(jù)保存在/var/named/named.hosts文件中。如果該文件不存在,named就創(chuàng)造一個(gè),并從遠(yuǎn)程服務(wù)器中取得區(qū)數(shù)據(jù),然后將這些數(shù)據(jù)寫(xiě)入新創(chuàng)建的文件中。如果存在該文件,named就要檢查遠(yuǎn)程服務(wù)器,以了解該遠(yuǎn)程服務(wù)器的數(shù)據(jù)是否不同于該文件中的數(shù)據(jù),如果數(shù)據(jù)有變化,它就下載更新后的數(shù)據(jù),用新數(shù)據(jù)覆蓋該文件的內(nèi)容;如果數(shù)據(jù)沒(méi)有變化,named就加載磁盤(pán)文件的內(nèi)容,不必做麻煩的區(qū)轉(zhuǎn)移工作。

    將一個(gè)數(shù)據(jù)庫(kù)拷貝到本地磁盤(pán)文件中,就不必每次引導(dǎo)主機(jī)時(shí)都要轉(zhuǎn)移區(qū)文件;只有當(dāng)數(shù)據(jù)修改時(shí),才進(jìn)行這種區(qū)文件的轉(zhuǎn)移工作。

    該配置文件中的下一行表示該本地服務(wù)器也是反向域72.191.in-addr.arpa的一個(gè)輔助服務(wù)器,而且該域的數(shù)據(jù)也從191.72.1.3中下載。該反向域的數(shù)據(jù)存儲(chǔ)在named.rev中。
    DNS數(shù)據(jù)庫(kù)文件和資源記錄

    配置named所需的所有文件(named.hosts、named.rev、named.local和named.ca)中的信息是以稱(chēng)為資源記錄的形式存在的。每個(gè)資源記錄都有一個(gè)類(lèi)型,這個(gè)類(lèi)型說(shuō)明記錄的功能。這些記錄都是標(biāo)準(zhǔn)資源記錄,稱(chēng)為RR(resource records)。表5列出了最常見(jiàn)的資源記錄類(lèi)型,其余的類(lèi)型很少用到,如果感興趣的話。請(qǐng)參考相應(yīng)的RFC和man page。

    表5 常見(jiàn)標(biāo)準(zhǔn)資源記錄

    資源記錄名

    記錄類(lèi)型

    功能說(shuō)明

    地址

    A

    將主機(jī)名轉(zhuǎn)換為地址。這個(gè)字段保存以點(diǎn)分隔的十進(jìn)制形式的IP地址。任何給定的主機(jī)都只能有一個(gè)A記錄,因?yàn)檫@個(gè)記錄被認(rèn)為是授權(quán)信息。這個(gè)主機(jī)的任何附加地址名或地址映射必須用CNAME類(lèi)型給出

    規(guī)范名

    CNAME

    給定一個(gè)主機(jī)的別名,主機(jī)的規(guī)范名字是在這個(gè)主機(jī)的A記錄中指定的

    主機(jī)信息

    HINFO

    描述主機(jī)的硬件和操作系統(tǒng)

    郵件交換

    MX

    建立郵件交換器記錄。MX記錄告訴郵件傳送進(jìn)程把郵件送到另一個(gè)系統(tǒng),這個(gè)系統(tǒng)知道如何將它遞送到它的最終目的地

    名服務(wù)器

    NS

    標(biāo)識(shí)一個(gè)域的域名服務(wù)器。NS資源記錄的數(shù)據(jù)字段包括這個(gè)域名服務(wù)器的DNS名。我們還需要指定這個(gè)名字名字服務(wù)器的地址與主機(jī)名相匹配的A記錄

    指針

    PTR

    將地址變換成主機(jī)名。主機(jī)名必須是規(guī)范主機(jī)名

    管理開(kāi)始

    ?

    SOA

    ?

    告訴域名服務(wù)器它后面跟著的所有所有資源記錄是控制這個(gè)域的(SOA)表示授與控制權(quán))。其數(shù)據(jù)字段用()括起來(lái)并且通常是多行字段。SOA記錄的數(shù)據(jù)字段包含下面的項(xiàng):

    origin

    這個(gè)域的主域名服務(wù)器的規(guī)范主機(jī)名。用點(diǎn)“.” 結(jié)尾的絕對(duì)主機(jī)名,因此,它不能被named守護(hù)進(jìn)程修改

    contact

    負(fù)責(zé)維護(hù)這個(gè)域的人的電子郵件聯(lián)系地址。因?yàn)?#64;在資源記錄中有特殊的意義,所以用點(diǎn)“.”代替這個(gè)符號(hào)。如果負(fù)責(zé)維護(hù)vbrew.com的人是clfls,那么聯(lián)系地址就是clfls.vbrew.com

    serial

    這個(gè)區(qū)信息文件的版本號(hào),它是一個(gè)整數(shù)。輔助域名服務(wù)器用它來(lái)確定這個(gè)區(qū)信息的文件是何時(shí)改變的。每次改變信息文件時(shí)都應(yīng)該使這個(gè)數(shù)加一

    refresh

    輔助域名服務(wù)器在試圖檢查主域名服務(wù)器的SOA記錄之前應(yīng)等待的秒數(shù)。SOA記錄不經(jīng)常改變,因此可以把這個(gè)值設(shè)置為一天

    retry

    輔助服務(wù)器在主服務(wù)器不能使用時(shí),重試對(duì)主服務(wù)器的請(qǐng)求應(yīng)等待的秒數(shù)。通常,它應(yīng)該按分進(jìn)行設(shè)置

    expire

    這是輔助服務(wù)器在不能與主服務(wù)器取得聯(lián)系的情況下丟掉區(qū)信息之前應(yīng)等待的秒數(shù),一般應(yīng)該設(shè)置成30天左右

    minimum

    當(dāng)沒(méi)有指定ttl資源記錄時(shí)默認(rèn)的ttl值。如果網(wǎng)絡(luò)沒(méi)有太大的變化,那么這個(gè)數(shù)可以設(shè)得很大。可以在資源記錄中指定一個(gè)ttl值來(lái)代替它

    為了能看懂本章中使用的配置示例文件,有必要稍微介紹以下資源記錄的結(jié)構(gòu)。DNS資源記錄的格式是:

    [domain] [ttl] [class] type rdate

    各個(gè)字段之間有空格或指標(biāo)符分隔。表6討論了這些字段的含義。

    表6 資源記錄格式中的字段

    字段

    說(shuō)明

    domain

    資源記錄引用的域?qū)ο竺?。它可以是單臺(tái)主機(jī),也可以是整個(gè)域。作為domain輸入的字串除非不是以一個(gè)點(diǎn)結(jié)束,否則就與當(dāng)前域有關(guān)系。如果該domain字段是空的,那么該記錄適用于最后一個(gè)帶名字的域?qū)ο?/p>

    ttl

    生存時(shí)間記錄字段。它以秒為單位定義該資源記錄中的信息存放在高速緩存中的時(shí)間長(zhǎng)度。通常該字段是空字段,這表示使用SOA記錄中為整個(gè)區(qū)域設(shè)置的缺省ttl

    class

    指定網(wǎng)絡(luò)的地址類(lèi)。對(duì)于TCP/IP網(wǎng)絡(luò)使用IN。如果沒(méi)有給出類(lèi),就使用前一個(gè)資源記錄的類(lèi)

    type

    標(biāo)識(shí)這是哪一類(lèi)資源記錄

    rdata

    指定與這個(gè)資源記錄有關(guān)的數(shù)據(jù)。這個(gè)值是必要的。數(shù)據(jù)字段的格式取決于類(lèi)型字段的內(nèi)容
    named.ca文件

    named.boot 文件中的cache語(yǔ)句指向一個(gè)高速緩存初始化文件,具有高速緩存的服務(wù)器都有這樣一個(gè)文件。它包含著域名服務(wù)器啟動(dòng)時(shí)開(kāi)始創(chuàng)造一個(gè)域數(shù)據(jù)高速緩存所需的信息。在cache語(yǔ)句中,用一個(gè)指點(diǎn)其根域,在named.ca文件中至少包含根服務(wù)器的名字和地址。named的高速緩存操作是很重要的。幸運(yùn)的是,建立高速緩存的named.ca文件通常是最簡(jiǎn)單的named配置文件。

    基本的named.ca文件包含根服務(wù)器的NS記錄和提供根服務(wù)器地址的A記錄。下面就是基本的named.ca文件:

    ; named.ca file

    ; servers for the root domain

    . 99999999 IN NS NS.NIC.DDN.MIL.

    99999999 IN NS NS.NASA.GOV.

    99999999 IN NS KAVA.NISC.SRI.COM.

    99999999 IN NS TERP.UMD.EDU.

    99999999 IN NS C.NYSER.NET.

    99999999 IN NS NS.INTERNIC.NET.

    ;

    ; root servers by address

    ;

    NS.NIC.DDN.MIL. 99999999 IN A 199.112.36.4

    NS.NASA.GOV. 99999999 IN A 128.102.16.10

    KAVA.NISC.SRI.COM. 99999999 IN A 192.33.33.24

    TERP.UMD.EDU. 99999999 IN A 128.8.10.90

    C.NYSER.NET. 99999999 IN A 192.33.4.12

    NS.INTERNIC.NET. 99999999 IN A 198.41.0.4

    該記錄只包含各服務(wù)器記錄和地址記錄。首先是一組標(biāo)識(shí)根(.)域的各服務(wù)器的NS記錄,在NS記錄之后,是一組為每個(gè)根服務(wù)器提供地址的A記錄。雖然不需要ttl,但習(xí)慣上每個(gè)記錄的ttl是99999999(可能的最大值)。因?yàn)楦?wù)器是永遠(yuǎn)不會(huì)從高速緩存中刪除的。
    named.local文件

    named.local 文件可以將回送地址127.0.0.1轉(zhuǎn)換成本地主機(jī)名,它是反向域0.0.127.IN-ADDR.ARPA使用的區(qū)文件.由于所有系統(tǒng)都將 127.0.0.1作為回送地址,該文件實(shí)際上對(duì)于每一個(gè)系統(tǒng)都是相同的。下面是從vlager上獲取的一個(gè)典型的named.local文件:

    ;

    ; /var/named/named.local Reverse mapping of 127.0.0

    ; Origin is 0.0.127.in-addr.arpa.

    ;

    @ IN SOA vlager.vbrew.com. (

    joe.vbrew.com.

    1 ; serial

    360000 ; refresh: 100 hrs

    3600 ; retry: one hour

    3600000 ; expire: 42 days

    360000 ; minimum: 100 hrs

    )

    IN NS vlager.vbrew.com.

    1 IN PTR localhost.

    其中的SOA記錄的數(shù)據(jù)字段和包含主機(jī)名的NS記錄是隨系統(tǒng)不同而不同的。本例中SOA記錄將vlager.vbrew.com標(biāo)識(shí)為開(kāi)創(chuàng)該區(qū)的服務(wù)器,將電子郵件地址joe.vbrew.com標(biāo)識(shí)為解決該區(qū)問(wèn)題的聯(lián)系地點(diǎn)(在SOA記錄中,通常將電子郵件地址中用來(lái)分隔接收者名字和主機(jī)名的@修改成一個(gè)點(diǎn),其它字段則保持不變)。很多系統(tǒng)甚至不包含NS記錄,若要用它,就包含計(jì)算機(jī)的主機(jī)名。修改這三個(gè)字段我們就可以在任何主機(jī)中使用這個(gè)文件。

    到目前為止我們討論的文件named.boot、named.ca和named.local都是配置唯高速緩存服務(wù)器和輔助服務(wù)器時(shí)所需要的文件。大多數(shù)服務(wù)器將只需要這些文件,而且使用的這些文件在,每一個(gè)服務(wù)器上幾乎都包含相同的信息。

    其它的named配置文件比較復(fù)雜,但是使用這些文件的服務(wù)器數(shù)量比較少,只有主服務(wù)器需要所有的配置文件,而每個(gè)域只有一個(gè)主服務(wù)器。
    反向域文件named.rev

    named.rev與named.host文件非常類(lèi)似,都包含有PTR記錄,只是named.rev將地址映射為主機(jī)名。下面是named.rev的一個(gè)例子。

    ;

    ; /var/named/named.rev Reverse mapping of our IP addresses

    ; Origin is 72.191.in-addr.arpa.

    ;

    @ IN SOA vlager.vbrew.com. (

    joe.vbrew.com.

    16 ; serial

    86400 ; refresh: once per day

    3600 ; retry: one hour

    3600000 ; expire: 42 days

    604800 ; minimum: 1 week

    )

    IN NS vlager.vbrew.com.

    ; brewery

    1.1 IN PTR vlager.vbrew.com.

    2.1 IN PTR vstout.vbrew.com.

    3.1 IN PTR vale.vbrew.com.

    ; winery

    1.2 IN PTR vlager-if1.vbrew.com.

    2.2 IN PTR vbardolino.vbrew.com.

    3.2 IN PTR vchianti.vbrew.com.

    4.2 IN PTR vbeaujolais.vbrew.com.

    在這個(gè)例子中,包含了在named.hosts文件中見(jiàn)到的相同的SOA記錄。它只是為域建立控制信息。該SOA記錄的名字字段中的@是指向當(dāng)前域,本例是由named.boot示例文件中的primary定義的:

    primary 72.191.in-addr.arpa named.rev

    該SOA 記錄中的@允許primary語(yǔ)句去定義區(qū)文件域,vlager中每個(gè)區(qū)文件都使用相同一個(gè)SOA記錄;它總是引用正確的域名,因?yàn)樗玫亩际?named.boot為特定區(qū)文件定義的域。幾乎在每個(gè)區(qū)文件的開(kāi)頭,我們都可以看到相同的SOA格式。請(qǐng)修改主機(jī)名vlager.vbrew.com和管理員電子郵件地址joe.vbrew.com,并在我們?nèi)魏我粋€(gè)區(qū)文件中使用該SOA記錄。

    在SOA記錄后面的NS記錄可以該域的服務(wù)器,一般在其它任何記錄有機(jī)會(huì)去修改域名之前,將立即在SOA之后列出各域名服務(wù)器。請(qǐng)注意,一個(gè)空的名字字段意味著上一個(gè)域名仍然起作用,SOA的域應(yīng)用仍然有效,因?yàn)楹竺娴腘S記錄中的名字段是空的。

    PTR 記錄在named.rev文件中占有重要地位,因?yàn)樗鼈兛梢詫⒌刂忿D(zhuǎn)換為主機(jī)名。在我們的例子中,PTR記錄為網(wǎng)絡(luò)191.72中的主機(jī)1.1、1.2、 1.3、2.1、2.2、2.3和2.4提供地址到名字的轉(zhuǎn)換,由于它們不是以點(diǎn)結(jié)束,所以這些PTR記錄中名字字段的值都與當(dāng)前域有關(guān)。例如,值3.1 可以看作是3.1.72.191.in-addr.arpa。PTR記錄的數(shù)據(jù)數(shù)據(jù)字段中的主機(jī)名是全部限定的,以防止它和當(dāng)前域名相關(guān)。利用PTR中的信息,named就將3.1.72.191.in-addr.arpa轉(zhuǎn)換成vale.vbrew.com。
    named.hosts文件

    在named.boot 文件中,把named.hosts文件作為包含本地域信息的文件列出??梢栽趎amed.boot中的primary行上為這個(gè)文件起用戶(hù)想要的名字。 named.hosts文件包含大部分的域信息,它可以將主機(jī)名轉(zhuǎn)換成IP地址,因而A記錄占有重要的地位,而且它還包含MX、CNAME和其它的記錄。該named.hosts文件和named.rev文件一樣,只有主服務(wù)器才有,其它所有的服務(wù)器可從主服務(wù)器取得信息。下面給出了一個(gè)使用多資源記錄類(lèi)型的named.hosts文件的例子:

    ;

    ; /var/named/named.hosts Local hosts at the brewery

    ; Origin is vbrew.com

    ;

    @ IN SOA vlager.vbrew.com. (

    janet.vbrew.com.

    16 ; serial

    86400 ; refresh: once per day

    3600 ; retry: one hour

    3600000 ; expire: 42 days

    604800 ; minimum: 1 week

    )

    IN NS vlager.vbrew.com.

    ;

    ; local mail is distributed on vlager

    IN MX 10 vlager

    ;

    ; loopback address

    localhost. IN A 127.0.0.1

    ; brewery Ethernet

    vlager IN A 191.72.1.1

    vlager-if1 IN CNAME vlager

    ; vlager is also news server

    news IN CNAME vlager

    vstout IN A 191.72.1.2

    vale IN A 191.72.1.3

    ; winery Ethernet

    vlager-if2 IN A 191.72.2.1

    vbardolino IN A 191.72.2.2

    vchianti IN A 191.72.2.3

    vbeaujolais IN A 191.72.2.4

    和named.rev文件一樣,該文件以一個(gè)SOA記錄和定義域及服務(wù)器的NS記錄開(kāi)頭。但named.hosts文件包括的資源記錄品種多于named.rev。我們根據(jù)這些記錄在示例文件中的順序來(lái)討論每一種記錄。

    該文件的第一個(gè)記錄是域的SOA(授予控制權(quán))記錄。該記錄的第一行以@字符開(kāi)始,@字符表示這是當(dāng)前原點(diǎn)或域。原點(diǎn)由 named.boot文件中相應(yīng)的primary行上列出的域定義給出。此后是代碼IN和SOA,它告訴named這個(gè)資源記錄使用Internet (TCP/IP)編址并且是授予控制權(quán)記錄。

    這行接下來(lái)的兩項(xiàng)是這個(gè)域的主域名服務(wù)器的規(guī)范名字,和用點(diǎn)代替@的電子郵件聯(lián)系人的地址。然后列出SOA記錄要求的各種數(shù)據(jù)段,一行一個(gè)。

    在SOA記錄后,下一行是域名服務(wù)器資源記錄。它列出vlager.vbrew.com作為這個(gè)域的域名服務(wù)器。因?yàn)樵谟蜃侄沃袥](méi)有列出任何域,所以假設(shè)是最后一個(gè)指定的域,也就是在SOA記錄中列出的@。而且@字符確實(shí)是本地域。這是比較容易理解的。

    MX 記錄為整個(gè)域定義一個(gè)郵件服務(wù)器,該記錄假定vlager是vbrew.com域的郵件服務(wù)器,其優(yōu)先值是10。送給user@vbrew.com的郵件被重定向到vlager,以便進(jìn)行傳送。當(dāng)然,為了使vlager能夠成功地傳送郵件,就必須將它配置成郵件服務(wù)器。MX記錄只是整個(gè)事件中的一部分,我們將在第十一章中研究如何使用sendmail配置郵件服務(wù)器。

    該例中第一個(gè)A記錄定義本地主機(jī)地址,這恰好和named.rev文件中的PTR記錄相反,它允許vbrew.com域中的用戶(hù)輸入本地主機(jī)名(localhost)并由本地服務(wù)器將它轉(zhuǎn)換為地址127.0.0.1。

    接下來(lái)是定義子網(wǎng)brewery中的主機(jī)。第一個(gè)A記錄為網(wǎng)關(guān)vlager定義了IP地址,然后使用CNAME定義了vlager 的別名vlager-if1,接下來(lái)又說(shuō)明vlager還是新聞服務(wù)器(news)。之后為這個(gè)域的另外兩臺(tái)主機(jī):vstout和vale建立地址記錄。

    然后四個(gè)A記錄定義了子網(wǎng)winery中的四臺(tái)主機(jī)的IP地址:vlager-if2、vbardolino、vchianti和vbeaujilias。
    錯(cuò)誤查找

    在配置好named.boot文件和所需的區(qū)文件之后,我們就可以啟動(dòng)named了。Named通常是在系統(tǒng)引導(dǎo)時(shí)啟動(dòng)的,但是也可以使用下面命令啟動(dòng):

    # /etc/rc.d/init.d/named/restart

    或:

    # ndc restart

    在第一次運(yùn)行這些命令時(shí),請(qǐng)留意出錯(cuò)信息。DNS是一個(gè)很復(fù)雜的系統(tǒng)。用戶(hù)可能會(huì)做錯(cuò)很多事,并且會(huì)使系統(tǒng)不能正常運(yùn)行。伴隨DNS建立出現(xiàn)的許多問(wèn)題都會(huì)引起相同的結(jié)果,但起因卻不同。但大多數(shù)問(wèn)題是由于配置文件中的語(yǔ)法錯(cuò)誤而導(dǎo)致的。

    確保用戶(hù)的DNS配置文件中正確地指定了主機(jī)名。如果它是一個(gè)絕對(duì)主機(jī)名,要確保它以一個(gè)原點(diǎn)結(jié)尾。對(duì)在SOA和CNAME記錄中使用的名字要尤其小心。如果在這里弄錯(cuò)了,這些資源記錄會(huì)把主機(jī)名查詢(xún)重定向到不存在的計(jì)算機(jī)。要確保在改變配置文件后增加配置文件中的版本號(hào)。如果忘了,那么DNS將不能再讀取這些文件。確保為A記錄輸入了正確的IP地址,并檢查這個(gè)地址是否與您的/etc/hosts文件匹配。另外,確保DNS名字和IP地址與named.rev中的相應(yīng)的逆向解析信息匹配。

    查找錯(cuò)誤的最好工具是nslookup命令。使用該命令徹底檢查用戶(hù)的DNS服務(wù)器。對(duì)用戶(hù)的DNS數(shù)據(jù)庫(kù)中的每個(gè)地址都進(jìn)行定期逆向解析,以確保所有的地址和名字都正確。
    nslookup命令的使用

    nslookup是檢查我們的域名服務(wù)器配置的最好工具,它是由BIND軟件包提供的。它允許任何人直接查詢(xún)域名服務(wù)器,對(duì)于確定服務(wù)器是否正確地運(yùn)行和是否配置得和合適是很有幫助的。

    nslookup命令可以交互式的從命令行進(jìn)行查詢(xún),在命令行中它可以用來(lái)查詢(xún)IP地址,例如:

    $ nslookup hostname

    這條命令要求定義在resolv.conf中的域名服務(wù)器查詢(xún)給定主機(jī)名的IP地址(如果有不止一個(gè)服務(wù)器,nslookup將按列在 /etc/resolv.conf文件中的順序選取一個(gè)作為查詢(xún)對(duì)象)。當(dāng)不帶任何參數(shù)時(shí),nslookup將顯示所使用的域名服務(wù)器的信息。在 “>”提示符下,我們可以輸入所要請(qǐng)求的查詢(xún)的域名;在提示符下輸入exit命令將會(huì)終止一次查詢(xún)會(huì)話。默認(rèn)情況下,nslookup查詢(xún)A記錄。例如:

    $ nslookup

    Default Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    > sunsite.unc.edu

    Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    Non-authoritative answer:

    Name: sunsite.unc.edu

    Address: 152.2.22.81

    ?

    >exit

    但我們可以使用set type命令修改去查詢(xún)另一種資源記錄類(lèi)型,下面的例子將會(huì)可檢查SOA記錄。請(qǐng)注意,如果將查詢(xún)類(lèi)型設(shè)置成SOA。它將保持SOA不變,不會(huì)返回默認(rèn)的A型查詢(xún)。如果我們需要查詢(xún)A記錄,則還需要使用一次set type命令。

    $ nslookup

    Default Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    > unc.edu

    *** No address (A) records available for unc.edu

    Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    > set type=SOA

    > unc.edu

    Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    Non-authoritative answer:

    unc.edu

    origin = ns.unc.edu

    mail addr = shava.ns.unc.edu

    serial = 930408

    refresh = 28800 (8 hours)

    retry = 3600 (1 hour)

    expire = 1209600 (14 days)

    minimum ttl = 86400 (1 day)

    ?

    Authoritative answers can be found from:

    UNC.EDU nameserver = SAMBA.ACS.UNC.EDU

    SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

    >exit

    同樣,可以使用set type查詢(xún)MX記錄,或修改成專(zhuān)用查詢(xún)類(lèi)型ANY,ANY可以用來(lái)取得指定主機(jī)的所有可用資源記錄。

    > set type=MX

    > unc.edu

    Non-authoritative answer:

    unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu

    lambada.oit.unc.edu internet address = 152.2.22.80

    ?

    Authoritative answers can be found from:

    UNC.EDU nameserver = SAMBA.ACS.UNC.EDU

    SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

    >exit

    nslookup命令的另一個(gè)應(yīng)用為named.ca文件是獲取當(dāng)前根服務(wù)器的列表。我們可以使用set type=NS來(lái)查詢(xún)所有的根域名服務(wù)器:

    $ nslookup

    Default Name Server: rs10.hrz.th-darmstadt.de

    Address: 130.83.56.60

    ?

    > set typ=NS

    > .

    Name Server: fb0430.mathematik.th-darmstadt.de

    Address: 130.83.2.30

    ?

    Non-authoritative answer:

    (root) nameserver = NS.INTERNIC.NET

    (root) nameserver = AOS.ARL.ARMY.MIL

    (root) nameserver = C.NYSER.NET

    (root) nameserver = TERP.UMD.EDU

    (root) nameserver = NS.NASA.GOV

    (root) nameserver = NIC.NORDU.NET

    (root) nameserver = NS.NIC.DDN.MIL

    ?

    Authoritative answers can be found from:

    (root) nameserver = NS.INTERNIC.NET

    (root) nameserver = AOS.ARL.ARMY.MIL

    (root) nameserver = C.NYSER.NET

    (root) nameserver = TERP.UMD.EDU

    (root) nameserver = NS.NASA.GOV

    (root) nameserver = NIC.NORDU.NET

    (root) nameserver = NS.NIC.DDN.MIL

    NS.INTERNIC.NET internet address = 198.41.0.4

    AOS.ARL.ARMY.MIL internet address = 128.63.4.82

    AOS.ARL.ARMY.MIL internet address = 192.5.25.82

    AOS.ARL.ARMY.MIL internet address = 26.3.0.29

    C.NYSER.NET internet address = 192.33.4.12

    TERP.UMD.EDU internet address = 128.8.10.90

    NS.NASA.GOV internet address = 128.102.16.10

    NS.NASA.GOV internet address = 192.52.195.10

    NS.NASA.GOV internet address = 45.13.10.121

    NIC.NORDU.NET internet address = 192.36.148.17

    NS.NIC.DDN.MIL internet address = 192.112.36.4

    >exit

    利用nslookup的help命令或?,我們可以得到nslookup的完整命令列表。例如:

    >help

    Commands: (identifiers are shown in uppercase, [ ] means optional)

    NAME - print info about the host/domain NAME using default server

    NAME1 NAME2 - as above, but use NAME2 as server

    help or ? - print info on common commands; see nslookup(1) for details

    set OPTION - set an option

    all - print options, current server and host

    [no]debug - print debugging information

    [no]d2 - print exhaustive debugging information

    [no]defname - append domain name to each query

    [no]recurse - ask for recursive answer to query

    [no]vc - always use a virtual circuit

    domain=NAME - set default domain name to NAME

    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.

    root=NAME - set root server to NAME

    retry=X - set number of retries to X

    timeout=X - set initial time-out interval to X seconds

    querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR

    port=X - set port number to send query on

    type=X - synonym for querytype

    class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY

    [no]recurse - ask for recursive answer to query

    [no]vc - always use a virtual circuit

    domain=NAME - set default domain name to NAME

    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.

    root=NAME - set root server to NAME

    retry=X - set number of retries to X

    timeout=X - set initial time-out interval to X seconds

    querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR

    port=X - set port number to send query on

    type=X - synonym for querytype

    class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY

    server NAME - set default server to NAME, using current default server

    lserver NAME - set default server to NAME, using initial server

    finger [USER] - finger the optional USER at the current default host

    root - set current default server to the root

    ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)

    -a - list canonical names and aliases

    -h - list HINFO (CPU type and operating system)

    -s - list well-known services

    -d - list all records

    -t TYPE - list records of the given type(e.g.,A,CNAME,MX,etc.)

    view FILE - sort an 'ls' output file and view it with more

    exit - exit the program, ^D also exits
    當(dāng)我們使用nslookup這一工具時(shí),我們將會(huì)發(fā)現(xiàn)很多有幫助的功能。
    ?

    posted @ 2006-06-20 20:33 海納百川 閱讀(5464) | 評(píng)論 (0)編輯 收藏

    又回到起點(diǎn)!

    漳州地區(qū)項(xiàng)目推廣開(kāi)了個(gè)頭,真準(zhǔn)備大展身手,充分來(lái)檢驗(yàn)從各項(xiàng)目管理中獲取的經(jīng)驗(yàn)和知識(shí),從而進(jìn)一步深化自己對(duì)電子政務(wù)項(xiàng)目管理的經(jīng)驗(yàn),但世事難料,浙江省政府辦公廳電子政務(wù)項(xiàng)目中存在的一些遺留問(wèn)題遲遲無(wú)人解決,公司就又把我遣返浙江,過(guò)來(lái)后經(jīng)過(guò)溝通后,初步估計(jì)要呆一月左右,回去后肯定沒(méi)戲了,路已經(jīng)鋪好了,不管鋪的是羊腸小道還是高速路,都沒(méi)得選擇,項(xiàng)目最重要的時(shí)刻錯(cuò)過(guò)了。

    這次的工作重點(diǎn)是解決數(shù)據(jù)遷移、 LDAP 服務(wù)器部署、單點(diǎn)登陸、 Domino 全文檢索庫(kù)集成等問(wèn)題。

    posted @ 2006-06-14 22:34 海納百川 閱讀(268) | 評(píng)論 (1)編輯 收藏

    路漫漫

    ?

    我負(fù)責(zé)的漳州地區(qū)的辦公自動(dòng)化系統(tǒng)的推廣就要開(kāi)始了,從今天開(kāi)始記錄實(shí)施這項(xiàng)目的體會(huì)、心得、經(jīng)驗(yàn)和教訓(xùn),記錄項(xiàng)目每天的計(jì)劃和執(zhí)行情況。
    ?????????
    項(xiàng)目實(shí)施是個(gè)相當(dāng)繁瑣、復(fù)雜的任務(wù),在這過(guò)程中會(huì)必然出現(xiàn)很多事情,且有些事情會(huì)超出自己的思想范圍,所以一定要有好的思想準(zhǔn)備,要保持良好、樂(lè)觀的心態(tài),要有一顆平常、忍耐的心,要作懷不亂。

    明天就要開(kāi)始制定項(xiàng)目實(shí)施計(jì)劃了,聯(lián)系用戶(hù)方相關(guān)負(fù)責(zé)人溝通項(xiàng)目實(shí)施事宜了,今天談?wù)勛约簩?duì)項(xiàng)目實(shí)施計(jì)劃的認(rèn)識(shí)及對(duì)項(xiàng)目風(fēng)險(xiǎn)的看法。

    項(xiàng)目實(shí)施過(guò)程中風(fēng)險(xiǎn)無(wú)處不再,對(duì)此要保持極度的警覺(jué),要時(shí)時(shí)刻刻從項(xiàng)目的終極目標(biāo)“驗(yàn)收”為標(biāo)準(zhǔn)考慮問(wèn)題,不可敷衍客戶(hù),也不能嬌慣客戶(hù),一定要控制得體。項(xiàng)目的最大風(fēng)險(xiǎn)之一是用戶(hù)單位開(kāi)始就對(duì)項(xiàng)目不重視,把項(xiàng)目作為形象工程或只是單位向財(cái)政申請(qǐng)資金的一種手段,而不是想利用項(xiàng)目來(lái)解決問(wèn)題;碰到這種單位,就一定要努力說(shuō)服單位的負(fù)責(zé)人,讓他認(rèn)識(shí)到上這個(gè)項(xiàng)目的利益關(guān)系,如果自己解決不了這個(gè)問(wèn)題,就需要向公司申請(qǐng)更多的資源來(lái)解決這個(gè)問(wèn)題,如動(dòng)員公司領(lǐng)導(dǎo)過(guò)來(lái)進(jìn)行說(shuō)服工作等,反正要解決這個(gè)問(wèn)題,否則這個(gè)項(xiàng)目就沒(méi)辦法做;如果最終說(shuō)服不了,那就要一定要利用合同條款來(lái)保護(hù)自己,一句話,保護(hù)自己,利用各種方法來(lái)“獨(dú)善其身”。項(xiàng)目風(fēng)險(xiǎn)之二:制定的項(xiàng)目實(shí)施計(jì)劃不符合實(shí)際項(xiàng)目情況,一個(gè)現(xiàn)實(shí)的、具體的項(xiàng)目計(jì)劃是相當(dāng)重要的,因?yàn)檫@代表了項(xiàng)目負(fù)責(zé)人對(duì)此項(xiàng)目的認(rèn)識(shí)程度,代表了實(shí)施單位對(duì)用戶(hù)方的稱(chēng)諾,代表了實(shí)施小組的信譽(yù)度,所以編制項(xiàng)目實(shí)施計(jì)劃一定要認(rèn)真、謹(jǐn)慎,要仔細(xì)認(rèn)真與用戶(hù)商討每個(gè)細(xì)節(jié),落實(shí)好每個(gè)階段的安排計(jì)劃。不得體的項(xiàng)目計(jì)劃必然會(huì)造成項(xiàng)目的執(zhí)行出現(xiàn)差錯(cuò),規(guī)定的事情沒(méi)有完成,必然會(huì)使用戶(hù)方對(duì)實(shí)施單位、實(shí)施人員產(chǎn)生懷疑,最終不信任,以至不配合。項(xiàng)目風(fēng)險(xiǎn)之三:需求范圍控制不力,現(xiàn)在市場(chǎng)競(jìng)爭(zhēng)是相當(dāng)激烈,要求合同及方案內(nèi)容很到位是不現(xiàn)實(shí)的,實(shí)施人員就必然會(huì)面對(duì)這個(gè)問(wèn)題,我想一個(gè)負(fù)責(zé)的、合格的項(xiàng)目負(fù)責(zé)人是不會(huì)去怨天尤人的,最多大罵幾句 fuck ,解決這個(gè)問(wèn)題要一定要“知彼”,弄清楚用戶(hù)的類(lèi)型及項(xiàng)目對(duì)用戶(hù)負(fù)責(zé)人的重要清楚,一般都可分這幾種類(lèi)型的用戶(hù),“重要又精明型”(此單位對(duì)此項(xiàng)目很重視且負(fù)責(zé)人又很認(rèn)真)、“不重要但精明型”(此項(xiàng)目對(duì)單位來(lái)說(shuō)不是很重要但負(fù)責(zé)人很計(jì)較)、“糊涂型”;如果是“重要又精明型”的用戶(hù),就要直接、坦誠(chéng)與用戶(hù)溝通所有問(wèn)題,要引導(dǎo)用戶(hù)認(rèn)識(shí)到問(wèn)題的輕重緩急,首先解決重要的又緊急的問(wèn)題、然后解決重要的問(wèn)題,依次類(lèi)推,總之面對(duì)這種類(lèi)型的用戶(hù),一定要分階段實(shí)施這個(gè)項(xiàng)目,否則就夠嗆。對(duì)于屬于第二種類(lèi)型的用戶(hù),要坦誠(chéng)溝通相關(guān)問(wèn)題,要充分的尊重他們,要讓他們認(rèn)識(shí)到項(xiàng)目?jī)?nèi)容的多少對(duì)他們及單位不會(huì)有多大的影響,要通過(guò)一些方法說(shuō)服相關(guān)的負(fù)責(zé)人,盡量減少有難度的內(nèi)容。對(duì)于第三種用戶(hù),自己看著辦。項(xiàng)目的風(fēng)險(xiǎn)之四:需求變更頻繁,這個(gè)問(wèn)題是項(xiàng)目實(shí)施中經(jīng)常會(huì)遇到的敵人,對(duì)付這個(gè)敵人最有效的手段是項(xiàng)目開(kāi)始初,就要讓雙方認(rèn)識(shí)到需求變更頻繁對(duì)項(xiàng)目的影響,開(kāi)始初就要制定好變更控制的策略,比如用戶(hù)方指定某個(gè)人來(lái)承擔(dān)需求變更的管理員,所有的變更請(qǐng)求先提交到管理員處,安排某個(gè)時(shí)間雙方一起探討需求變更問(wèn)題的合理性,確定那是合理的是必須修改的,那些是操作習(xí)慣等等原因而不需修改的。如果用戶(hù)方無(wú)法指定某個(gè)人來(lái)承擔(dān)需求變更的管理員的角色,那項(xiàng)目組內(nèi)就要指定好某個(gè)人來(lái)承擔(dān)這個(gè)角色,變更問(wèn)題一定要集中控制。

    好的戰(zhàn)略如果沒(méi)有好的戰(zhàn)術(shù)就體現(xiàn)不出其非凡的思想

    好的戰(zhàn)術(shù)沒(méi)有好的執(zhí)行就如空中樓閣

    好的執(zhí)行需要好的人才

    沒(méi)有行動(dòng)的思想就好比沒(méi)有花粉的稻穗,結(jié)不出谷粒!

    posted @ 2006-05-30 00:36 海納百川 閱讀(196) | 評(píng)論 (0)編輯 收藏

    電子政務(wù)建設(shè)

    ????????

    國(guó)家在政府單位的電子政務(wù)建設(shè)上的投入可以說(shuō)是不遺余力,以期望通過(guò)電子化的手段來(lái)達(dá)到各級(jí)機(jī)關(guān)職能公開(kāi)、辦事透明、提高辦公效率、杜絕職能腐敗等;國(guó)家的想法是好的,但具體效果不佳,原因何在呢?國(guó)家每年投入如此大的金額,正常來(lái)說(shuō),各政府機(jī)關(guān)的信息化方面應(yīng)該建設(shè)得不錯(cuò),可事實(shí)情況是除了為每人配備一、兩臺(tái)電腦,用來(lái)上互聯(lián)網(wǎng)外,各政府機(jī)關(guān)有什么具體的應(yīng)用呢?各政府機(jī)關(guān)的外網(wǎng)改版是一年一小改、三年一大改,可是改來(lái)改去,還是那些業(yè)務(wù),無(wú)非是技術(shù)的升級(jí)、替換;花費(fèi)了那么金錢(qián),老百姓得到了什么實(shí)惠呢,這樣的不利國(guó)利民的事情,可各級(jí)政府機(jī)關(guān)為什么還如此熱衷,樂(lè)此不疲呢?

    首先個(gè)人認(rèn)為國(guó)家的信息化決策人犯了一廂情愿的錯(cuò)誤,認(rèn)為外部的刺激可以促使內(nèi)因的變化,從而達(dá)到黨中央對(duì)各級(jí)機(jī)關(guān)工作人員的期望;現(xiàn)在看來(lái)這是本末倒置,就好比一個(gè)人,如果真的想改變自己的行為,首先要自律起來(lái),從心改變起,其次在是接收外界的監(jiān)督,而我們國(guó)家的電子政務(wù)化建設(shè)就犯了這個(gè)本末倒置的毛病,不是先從體制上來(lái)進(jìn)行改造,而是匆忙就實(shí)行電子政務(wù)化,到現(xiàn)在,有多少公務(wù)員清楚電子政務(wù)化的目的?

    電子政務(wù)化是必要的,也是政務(wù)辦公的方向,但首先要要求各級(jí)政府機(jī)關(guān)內(nèi)部管理的規(guī)范化、制度化;一句話,制度先行。國(guó)家同時(shí)要配備相應(yīng)的法律法規(guī)來(lái)規(guī)范化電子政務(wù)建設(shè)。然后在一些鮮明特點(diǎn)的地區(qū)實(shí)現(xiàn)試點(diǎn),總結(jié)經(jīng)驗(yàn),繼而完善相關(guān)的法律法規(guī)。如果管理依舊、體制依舊及加上各政府機(jī)關(guān)人員的工作作風(fēng),認(rèn)為電子政務(wù)化后,能夠方便和幫助老百姓解決實(shí)際問(wèn)題簡(jiǎn)直是掩人耳目。

    信息化只是有助于解決問(wèn)題的一種手段和工具,不是解決問(wèn)題的根本手段。

    待續(xù)。


    posted @ 2006-05-15 21:26 海納百川 閱讀(216) | 評(píng)論 (0)編輯 收藏

    JS正則表達(dá)式

    JS的正則表達(dá)式

    //校驗(yàn)是否全由數(shù)字組成
    function isDigit(s)
    {
    var patrn=/^[0-9]{1,20}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)登錄名:只能輸入5-20個(gè)以字母開(kāi)頭、可帶數(shù)字、“_”、“.”的字串
    function isRegisterUserName(s)
    {
    var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)用戶(hù)姓名:只能輸入1-30個(gè)以字母開(kāi)頭的字串
    function isTrueName(s)
    {
    var patrn=/^[a-zA-Z]{1,30}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)密碼:只能輸入6-20個(gè)字母、數(shù)字、下劃線
    function isPasswd(s)
    {
    var patrn=/^(\w){6,20}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)普通電話、傳真號(hào)碼:可以“+”開(kāi)頭,除數(shù)字外,可含有“-”
    function isTel(s)
    {
    //var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
    var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)手機(jī)號(hào)碼:必須以數(shù)字開(kāi)頭,除數(shù)字外,可含有“-”
    function isMobil(s)
    {
    var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)郵政編碼
    function isPostalCode(s)
    {
    //var patrn=/^[a-zA-Z0-9]{3,12}$/;
    var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    //校驗(yàn)搜索關(guān)鍵字
    function isSearch(s)
    {
    var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;'\,.<>?]{0,19}$/;
    if (!patrn.exec(s)) return false
    return true
    }

    function isIP(s) //by zergling
    {
    var patrn=/^[0-9.]{1,20}$/;
    if (!patrn.exec(s)) return false
    return true
    }


    正則表達(dá)式
    "^\\d+$"  //非負(fù)整數(shù)(正整數(shù) + 0)
    "^[0-9]*[1-9][0-9]*$"  //正整數(shù)
    "^((-\\d+)|(0+))$"  //非正整數(shù)(負(fù)整數(shù) + 0)
    "^-[0-9]*[1-9][0-9]*$"  //負(fù)整數(shù)
    "^-?\\d+$"    //整數(shù)
    "^\\d+(\\.\\d+)?$"  //非負(fù)浮點(diǎn)數(shù)(正浮點(diǎn)數(shù) + 0)
    "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮點(diǎn)數(shù)
    "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮點(diǎn)數(shù)(負(fù)浮點(diǎn)數(shù) + 0)
    "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //負(fù)浮點(diǎn)數(shù)
    "^(-?\\d+)(\\.\\d+)?$"  //浮點(diǎn)數(shù)
    "^[A-Za-z]+$"  //由26個(gè)英文字母組成的字符串
    "^[A-Z]+$"  //由26個(gè)英文字母的大寫(xiě)組成的字符串
    "^[a-z]+$"  //由26個(gè)英文字母的小寫(xiě)組成的字符串
    "^[A-Za-z0-9]+$"  //由數(shù)字和26個(gè)英文字母組成的字符串
    "^\\w+$"  //由數(shù)字、26個(gè)英文字母或者下劃線組成的字符串
    "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址
    "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url

    "^[A-Za-z0-9_]*$"


    正則表達(dá)式使用詳解

    簡(jiǎn)介
    簡(jiǎn)單的說(shuō),正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力的工具。其作用如下:
    測(cè)試字符串的某個(gè)模式。例如,可以對(duì)一個(gè)輸入字符串進(jìn)行測(cè)試,看在該字符串是否存在一個(gè)電話號(hào)碼模式或一個(gè)信用卡號(hào)碼模式。這稱(chēng)為數(shù)據(jù)有效性驗(yàn)證。
    替換文本??梢栽谖臋n中使用一個(gè)正則表達(dá)式來(lái)標(biāo)識(shí)特定文字,然后可以全部將其刪除,或者替換為別的文字。
    根據(jù)模式匹配從字符串中提取一個(gè)子字符串??梢杂脕?lái)在文本或輸入字段中查找特定文字。

    基本語(yǔ)法
    在對(duì)正則表達(dá)式的功能和作用有了初步的了解之后,我們就來(lái)具體看一下正則表達(dá)式的語(yǔ)法格式。
    正則表達(dá)式的形式一般如下:  
    /love/  其中位于“/”定界符之間的部分就是將要在目標(biāo)對(duì)象中進(jìn)行匹配的模式。用戶(hù)只要把希望查找匹配對(duì)象的模式內(nèi)容放入“/”定界符之間即可。為了能夠使用戶(hù)更加靈活的定制模式內(nèi)容,正則表達(dá)式提供了專(zhuān)門(mén)的“元字符”。所謂元字符就是指那些在正則表達(dá)式中具有特殊意義的專(zhuān)用字符,可以用來(lái)規(guī)定其前導(dǎo)字符(即位于元字符前面的字符)在目標(biāo)對(duì)象中的出現(xiàn)模式。
    較為常用的元字符包括: “+”, “*”,以及 “?”。
    “+”元字符規(guī)定其前導(dǎo)字符必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)一次或多次。
    “*”元字符規(guī)定其前導(dǎo)字符必須在目標(biāo)對(duì)象中出現(xiàn)零次或連續(xù)多次。
    “?”元字符規(guī)定其前導(dǎo)對(duì)象必須在目標(biāo)對(duì)象中連續(xù)出現(xiàn)零次或一次。
    下面,就讓我們來(lái)看一下正則表達(dá)式元字符的具體應(yīng)用。
    /fo+/  因?yàn)樯鲜稣齽t表達(dá)式中包含“+”元字符,表示可以與目標(biāo)對(duì)象中的 “fool”, “fo”, 或者 “football”等在字母f后面連續(xù)出現(xiàn)一個(gè)或多個(gè)字母o的字符串相匹配。
    /eg*/  因?yàn)樯鲜稣齽t表達(dá)式中包含“*”元字符,表示可以與目標(biāo)對(duì)象中的 “easy”, “ego”, 或者 “egg”等在字母e后面連續(xù)出現(xiàn)零個(gè)或多個(gè)字母g的字符串相匹配。
    /Wil?/  因?yàn)樯鲜稣齽t表達(dá)式中包含“?”元字符,表示可以與目標(biāo)對(duì)象中的 “Win”, 或者“Wilson”,等在字母i后面連續(xù)出現(xiàn)零個(gè)或一個(gè)字母l的字符串相匹配。
    有時(shí)候不知道要匹配多少字符。為了能適應(yīng)這種不確定性,正則表達(dá)式支持限定符的概念。這些限定符可以指定正則表達(dá)式的一個(gè)給定組件必須要出現(xiàn)多少次才能滿(mǎn)足匹配。
    {n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。
    {n,} n 是一個(gè)非負(fù)整數(shù)。至少匹配 n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。
    {n,m} m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。

    除了元字符之外,用戶(hù)還可以精確指定模式在匹配對(duì)象中出現(xiàn)的頻率。例如,/jim {2,6}/ 上述正則表達(dá)式規(guī)定字符m可以在匹配對(duì)象中連續(xù)出現(xiàn)2-6次,因此,上述正則表達(dá)式可以同jimmy或jimmmmmy等字符串相匹配。
    在對(duì)如何使用正則表達(dá)式有了初步了解之后,我們來(lái)看一下其它幾個(gè)重要的元字符的使用方式。
    \s:用于匹配單個(gè)空格符,包括tab鍵和換行符;
    \S:用于匹配除單個(gè)空格符之外的所有字符;
    \d:用于匹配從0到9的數(shù)字;
    \w:用于匹配字母,數(shù)字或下劃線字符;
    \W:用于匹配所有與\w不匹配的字符;
    . :用于匹配除換行符之外的所有字符。
    (說(shuō)明:我們可以把\s和\S以及\w和\W看作互為逆運(yùn)算)
    下面,我們就通過(guò)實(shí)例看一下如何在正則表達(dá)式中使用上述元字符。
    /\s+/ 上述正則表達(dá)式可以用于匹配目標(biāo)對(duì)象中的一個(gè)或多個(gè)空格字符。
    /\d000/ 如果我們手中有一份復(fù)雜的財(cái)務(wù)報(bào)表,那么我們可以通過(guò)上述正則表達(dá)式輕而易舉的查找到所有總額達(dá)千元的款項(xiàng)。
    除了我們以上所介紹的元字符之外,正則表達(dá)式中還具有另外一種較為獨(dú)特的專(zhuān)用字符,即定位符。定位符用于規(guī)定匹配模式在目標(biāo)對(duì)象中的出現(xiàn)位置。 較為常用的定位符包括: “^”, “$”, “\b” 以及 “\B”。
    “^”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)字符串的開(kāi)頭
    “$”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)對(duì)象的結(jié)尾
    “\b”定位符規(guī)定匹配模式必須出現(xiàn)在目標(biāo)字符串的開(kāi)頭或結(jié)尾的兩個(gè)邊界之一
    “\B”定位符則規(guī)定匹配對(duì)象必須位于目標(biāo)字符串的開(kāi)頭和結(jié)尾兩個(gè)邊界之內(nèi),即匹配對(duì)象既不能作為目標(biāo)字符串的開(kāi)頭,也不能作為目標(biāo)字符串的結(jié)尾。同樣,我們也可以把“^”和“$”以及“\b”和“\B”看作是互為逆運(yùn)算的兩組定位符。舉例來(lái)說(shuō): /^hell/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“^”定位符,所以可以與目標(biāo)對(duì)象中以 “hell”, “hello”或“hellhound”開(kāi)頭的字符串相匹配。 /ar$/ 因?yàn)樯鲜稣齽t表達(dá)式中包含“$”定位符,所以可以與目標(biāo)對(duì)象中以 “car”, “bar”或 “ar” 結(jié)尾的字符串相匹配。 /\bbom/ 因?yàn)樯鲜稣齽t表達(dá)式模式以“\b”定位符開(kāi)頭,所以可以與目標(biāo)對(duì)象中以 “bomb”, 或 “bom”開(kāi)頭的字符串相匹配。/man\b/ 因?yàn)樯鲜稣齽t表達(dá)式模式以“\b”定位符結(jié)尾,所以可以與目標(biāo)對(duì)象中以 “human”, “woman”或 “man”結(jié)尾的字符串相匹配。
    為了能夠方便用戶(hù)更加靈活的設(shè)定匹配模式,正則表達(dá)式允許使用者在匹配模式中指定某一個(gè)范圍而不局限于具體的字符。例如:
    /[A-Z]/  上述正則表達(dá)式將會(huì)與從A到Z范圍內(nèi)任何一個(gè)大寫(xiě)字母相匹配。
    /[a-z]/  上述正則表達(dá)式將會(huì)與從a到z范圍內(nèi)任何一個(gè)小寫(xiě)字母相匹配。
    /[0-9]/  上述正則表達(dá)式將會(huì)與從0到9范圍內(nèi)任何一個(gè)數(shù)字相匹配。
    /([a-z][A-Z][0-9])+/  上述正則表達(dá)式將會(huì)與任何由字母和數(shù)字組成的字符串,如 “aB0” 等相匹配。這里需要提醒用戶(hù)注意的一點(diǎn)就是可以在正則表達(dá)式中使用 “()” 把字符串組合在一起?!?)”符號(hào)包含的內(nèi)容必須同時(shí)出現(xiàn)在目標(biāo)對(duì)象中。因此,上述正則表達(dá)式將無(wú)法與諸如 “abc”等的字符串匹配,因?yàn)椤癮bc”中的最后一個(gè)字符為字母而非數(shù)字。
    如果我們希望在正則表達(dá)式中實(shí)現(xiàn)類(lèi)似編程邏輯中的“或”運(yùn)算,在多個(gè)不同的模式中任選一個(gè)進(jìn)行匹配的話,可以使用管道符 “|”。例如:/to|too|2/ 上述正則表達(dá)式將會(huì)與目標(biāo)對(duì)象中的 “to”, “too”, 或 “2” 相匹配。
    正則表達(dá)式中還有一個(gè)較為常用的運(yùn)算符,即否定符 “[^]”。與我們前文所介紹的定位符 “^” 不同,否定符 “[^]”規(guī)定目標(biāo)對(duì)象中不能存在模式中所規(guī)定的字符串。例如:/[^A-C]/ 上述字符串將會(huì)與目標(biāo)對(duì)象中除A,B,和C之外的任何字符相匹配。一般來(lái)說(shuō),當(dāng)“^”出現(xiàn)在 “[]”內(nèi)時(shí)就被視做否定運(yùn)算符;而當(dāng)“^”位于“[]”之外,或沒(méi)有“[]”時(shí),則應(yīng)當(dāng)被視做定位符。
    最后,當(dāng)用戶(hù)需要在正則表達(dá)式的模式中加入元字符,并查找其匹配對(duì)象時(shí),可以使用轉(zhuǎn)義符“\”。例如:/Th\*/  上述正則表達(dá)式將會(huì)與目標(biāo)對(duì)象中的“Th*”而非“The”等相匹配。
    在構(gòu)造正則表達(dá)式之后,就可以象數(shù)學(xué)表達(dá)式一樣來(lái)求值,也就是說(shuō),可以從左至右并按照一個(gè)優(yōu)先級(jí)順序來(lái)求值。優(yōu)先級(jí)如下:
    1.\ 轉(zhuǎn)義符
    2.(), (?Smile, (?=), [] 圓括號(hào)和方括號(hào)
    3.*, +, ?, {n}, {n,}, {n,m} 限定符
    4.^, $, \anymetacharacter 位置和順序
    5.|“或”操作


    使用實(shí)例
    在java script 1.2中帶有一個(gè)功能強(qiáng)大的RegExp()對(duì)象,可以用來(lái)進(jìn)行正則表達(dá)式的匹配操作。其中的test()方法可以檢驗(yàn)?zāi)繕?biāo)對(duì)象中是否包含匹配模式,并相應(yīng)的返回true或false。
    我們可以使用java script編寫(xiě)以下腳本,驗(yàn)證用戶(hù)輸入的郵件地址的有效性。
    --------------------------------------------------------
    <html>
    <head>
      <script language="java script1.2">
         <!-- start hiding
         function verifyAddress(obj)
         {
          var email = obj.email.value;
          var pattern =
    /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
          flag = pattern.test(email);
          if(flag)
          {
           alert(“Your email address is correct!”);
           return true;
          }
          else
           {
            alert(“Please try again!”);
            return false;
            }
          }
         // stop hiding -->
        </script>
      </head>
      <body>
       <form onSubmit="return verifyAddress(this);">
        <input name="email" type="text">
        <input type="submit">
        </form>
      </body>
    </html>
    正則表達(dá)式對(duì)象
    本對(duì)象包含正則表達(dá)式模式以及表明如何應(yīng)用模式的標(biāo)志。
    語(yǔ)法 1 re = /pattern/[flags]
    語(yǔ)法 2 re = new RegExp("pattern",["flags"])
    參數(shù)
    re
    必選項(xiàng)。將要賦值為正則表達(dá)式模式的變量名。
    Pattern
    必選項(xiàng)。要使用的正則表達(dá)式模式。如果使用語(yǔ)法 1,用 "/" 字符分隔模式。如果用語(yǔ)法 2,用引號(hào)將模式引起來(lái)。

    Flags
    可選項(xiàng)。如果使用語(yǔ)法 2 要用引號(hào)將 flag 引起來(lái)。標(biāo)志可以組合使用,可用的有:
    g (全文查找出現(xiàn)的所有 pattern)
    i (忽略大小寫(xiě))
    m (多行查找)
    示例
    下面的示例創(chuàng)建一個(gè)包含正則表達(dá)式模式及相關(guān)標(biāo)志的對(duì)象(re),向您演示正則表達(dá)式對(duì)象的用法。在本例中,作為結(jié)果的正則表達(dá)式對(duì)象又用于 match 方法中:
    function MatchDemo()
    {
    var r, re; // 聲明變量。
    var s = "The rain in Spain falls mainly in the plain";
    re = new RegExp("ain","g"); // 創(chuàng)建正則表達(dá)式對(duì)象。
    r = s.match(re); // 在字符串 s 中查找匹配。
    return(r);
    }
    返回值: ain,ain,ain,ain
    屬性 lastIndex 屬性 | source 屬性
    方法 compile 方法 | exec 方法 | test 方法
    要求 版本 3
    請(qǐng)參閱 RegExp 對(duì)象 | 正則表達(dá)式語(yǔ)法 | String 對(duì)象

    exec 方法
    用正則表達(dá)式模式在字符串中運(yùn)行查找,并返回包含該查找結(jié)果的一個(gè)數(shù)組。
    rgExp.exec(str)
    參數(shù)
    rgExp
    必選項(xiàng)。包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。
    str
    必選項(xiàng)。要在其中執(zhí)行查找的 String 對(duì)象或字符串文字。
    說(shuō)明
    如果 exec 方法沒(méi)有找到匹配,則它返回 null。如果它找到匹配,則 exec 方法返回一個(gè)數(shù)組,并且更新全局 RegExp 對(duì)象的屬性,以反映匹配結(jié)果。數(shù)組的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出現(xiàn)的任意一個(gè)子匹配。這相當(dāng)于沒(méi)有設(shè)置全局標(biāo)志 (g) 的 match 方法。
    如果為正則表達(dá)式設(shè)置了全局標(biāo)志,exec 從以 lastIndex 的值指示的位置開(kāi)始查找。如果沒(méi)有設(shè)置全局標(biāo)志,exec 忽略 lastIndex 的值,從字符串的起始位置開(kāi)始搜索。
    exec 方法返回的數(shù)組有三個(gè)屬性,分別是 input、index 和 lastIndex。Input 屬性包含了整個(gè)被查找的字符串。Index 屬性中包含了整個(gè)被查找字符串中被匹配的子字符串的位置。LastIndex 屬性中包含了匹配中最后一個(gè)字符的下一個(gè)位置。
    示例
    下面的例子舉例說(shuō)明了 exec 方法的用法:
    function RegExpTest()
    {
    var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
    if (ver >= 5.5){ // 測(cè)試 JScript 的版本。
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g; // 創(chuàng)建正則表達(dá)式模式。
    var arr;
    while ((arr = re.exec(src)) != null)
    document.write(arr.index + "-" + arr.lastIndex + arr + "\t");
    }
    else{
    alert("請(qǐng)使用 JScript 的更新版本");
    }
    }
    返回值:0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain
    test 方法
    返回一個(gè) Boolean 值,它指出在被查找的字符串中是否存在模式。
    rgexp.test(str)
    參數(shù)
    rgexp
    必選項(xiàng)。包含正則表達(dá)式模式或可用標(biāo)志的正則表達(dá)式對(duì)象。
    str
    必選項(xiàng)。要在其上測(cè)試查找的字符串。
    說(shuō)明
    test 方法檢查在字符串中是否存在一個(gè)模式,如果存在則返回 true,否則就返回 false。
    全局 RegExp 對(duì)象的屬性不由 test 方法來(lái)修改。
    示例
    下面的例子舉例說(shuō)明了 test 方法的用法:
    function TestDemo(re, s)
    {
    var s1; // 聲明變量。
    // 檢查字符串是否存在正則表達(dá)式。
    if (re.test(s)) // 測(cè)試是否存在。
    s1 = " contains "; // s 包含模式。
    else
    s1 = " does not contain "; // s 不包含模式。
    return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。
    }
    函數(shù)調(diào)用:document.write (TestDemo(/ain+/ ,"The rain in Spain falls mainly in the plain."));
    返回值:'The rain in Spain falls mainly in the plain.' contains 'ain+'
    match 方法
    使用正則表達(dá)式模式對(duì)字符串執(zhí)行查找,并將包含查找的結(jié)果作為數(shù)組返回。
    stringObj.match(rgExp)
    參數(shù)
    stringObj
    必選項(xiàng)。對(duì)其進(jìn)行查找的 String 對(duì)象或字符串文字。
    rgExp
    必選項(xiàng)。為包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。也可以是包含正則表達(dá)式模式和可用標(biāo)志的變量名或字符串文字。
    說(shuō)明
    如果 match 方法沒(méi)有找到匹配,返回 null。如果找到匹配返回一個(gè)數(shù)組并且更新全局 RegExp 對(duì)象的屬性以反映匹配結(jié)果。
    match 方法返回的數(shù)組有三個(gè)屬性:input、index 和 lastIndex。Input 屬性包含整個(gè)的被查找字符串。Index 屬性包含了在整個(gè)被查找字符串中匹配的子字符串的位置。LastIndex 屬性包含了最后一次匹配中最后一個(gè)字符的下一個(gè)位置。
    如果沒(méi)有設(shè)置全局標(biāo)志 (g),數(shù)組的 0 元素包含整個(gè)匹配,而第 1 到 n 元素包含了匹配中曾出現(xiàn)過(guò)的任一個(gè)子匹配。這相當(dāng)于沒(méi)有設(shè)置全局標(biāo)志的 exec 方法。如果設(shè)置了全局標(biāo)志,元素 0 到 n 中包含所有匹配。
    示例
    下面的示例演示了match 方法的用法:
    function MatchDemo()
    {
    var r, re; // 聲明變量。
    var s = "The rain in Spain falls mainly in the plain";
    re = /ain/i; // 創(chuàng)建正則表達(dá)式模式。
    r = s.match(re); // 嘗試匹配搜索字符串。
    return(r); // 返回第一次出現(xiàn) "ain" 的地方。
    }
    返回值:ain
    本示例說(shuō)明帶 g 標(biāo)志設(shè)置的 match 方法的用法。
    function MatchDemo()
    {
    var r, re; // 聲明變量。
    var s = "The rain in Spain falls mainly in the plain";
    re = /ain/ig; // 創(chuàng)建正則表達(dá)式模式。
    r = s.match(re); // 嘗試去匹配搜索字符串。
    return(r); // 返回的數(shù)組包含了所有 "ain"
    // 出現(xiàn)的四個(gè)匹配。
    }
    返回值:ain,ain,ain,ain
    上面幾行代碼演示了字符串文字的 match 方法的用法。
    var r, re = "Spain";
    r = "The rain in Spain".replace(re, "Canada");
    return r;
    返回值:The rain in Canada
    search 方法
    返回與正則表達(dá)式查找內(nèi)容匹配的第一個(gè)子字符串的位置。
    stringObj.search(rgExp)
    參數(shù)
    stringObj
    必選項(xiàng)。要在其上進(jìn)行查找的 String 對(duì)象或字符串文字。
    rgExp
    必選項(xiàng)。包含正則表達(dá)式模式和可用標(biāo)志的正則表達(dá)式對(duì)象。
    說(shuō)明
    search 方法指明是否存在相應(yīng)的匹配。如果找到一個(gè)匹配,search 方法將返回一個(gè)整數(shù)值,指明這個(gè)匹配距離字符串開(kāi)始的偏移位置。如果沒(méi)有找到匹配,則返回 -1。
    示例
    下面的示例演示了 search 方法的用法。
    function SearchDemo()
    {
    var r, re; // 聲明變量。
    var s = "The rain in Spain falls mainly in the plain.";
    re = /falls/i; // 創(chuàng)建正則表達(dá)式模式。
    r = s.search(re); // 查找字符串。
    return(r); // 返回 Boolean 結(jié)果。
    }
    返回值:18


    正則表達(dá)式語(yǔ)法
    一個(gè)正則表達(dá)式就是由普通字符(例如字符 a 到 z)以及特殊字符(稱(chēng)為元字符)組成的文字模式。該模式描述在查找文字主體時(shí)待匹配的一個(gè)或多個(gè)字符串。正則表達(dá)式作為一個(gè)模板,將某個(gè)字符模式與所搜索的字符串進(jìn)行匹配。

    這里有一些可能會(huì)遇到的正則表達(dá)式示例:

    JScript VBScript 匹配
    /^\[ \t]*$/ "^\[ \t]*$" 匹配一個(gè)空白行。
    /\d{2}-\d{5}/ "\d{2}-\d{5}" 驗(yàn)證一個(gè)ID 號(hào)碼是否由一個(gè)2位數(shù)字,一個(gè)連字符以及一個(gè)5位數(shù)字組成。
    /<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一個(gè) HTML 標(biāo)記。


    下表是元字符及其在正則表達(dá)式上下文中的行為的一個(gè)完整列表:

    字符 描述
    \ 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè) 后向引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,'n' 匹配字符 "n"。'\n' 匹配一個(gè)換行符。序列 '\\' 匹配 "\" 而 "\(" 則匹配 "("。
    ^ 匹配輸入字符串的開(kāi)始位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之后的位置。
    $ 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對(duì)象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
    * 匹配前面的子表達(dá)式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。 * 等價(jià)于{0,}。
    + 匹配前面的子表達(dá)式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價(jià)于 {1,}。
    ? 匹配前面的子表達(dá)式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價(jià)于 {0,1}。
    {n} n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個(gè) o。
    {n,} n 是一個(gè)非負(fù)整數(shù)。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。
    {n,m} m 和 n 均為非負(fù)整數(shù),其中n <= m。最少匹配 n 次且最多匹配 m 次。劉, "o{1,3}" 將匹配 "fooooood" 中的前三個(gè) o。'o{0,1}' 等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。
    ? 當(dāng)該字符緊跟在任何一個(gè)其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串 "oooo",'o+?' 將匹配單個(gè) "o",而 'o+' 將匹配所有 'o'。
    . 匹配除 "\n" 之外的任何單個(gè)字符。要匹配包括 '\n' 在內(nèi)的任何字符,請(qǐng)使用象 '[.\n]' 的模式。
    (pattern) 匹配pattern 并獲取這一匹配。所獲取的匹配可以從產(chǎn)生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中則使用 $0…$9 屬性。要匹配圓括號(hào)字符,請(qǐng)使用 '\(' 或 '\)'。
    (?:pattern) 匹配 pattern 但不獲取匹配結(jié)果,也就是說(shuō)這是一個(gè)非獲取匹配,不進(jìn)行存儲(chǔ)供以后使用。這在使用 "或" 字符 (|) 來(lái)組合一個(gè)模式的各個(gè)部分是很有用。例如, 'industr(?:y|ies) 就是一個(gè)比 'industry|industries' 更簡(jiǎn)略的表達(dá)式。
    (?=pattern) 正向預(yù)查,在任何匹配 pattern 的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始。
    (?!pattern) 負(fù)向預(yù)查,在任何不匹配N(xiāo)egative lookahead matches the search string at any point where a string not matching pattern 的字符串開(kāi)始處匹配查找字符串。這是一個(gè)非獲取匹配,也就是說(shuō),該匹配不需要獲取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預(yù)查不消耗字符,也就是說(shuō),在一個(gè)匹配發(fā)生后,在最后一次匹配之后立即開(kāi)始下一次匹配的搜索,而不是從包含預(yù)查的字符之后開(kāi)始
    x|y 匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
    [xyz] 字符集合。匹配所包含的任意一個(gè)字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
    [^xyz] 負(fù)值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
    [a-z] 字符范圍。匹配指定范圍內(nèi)的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范圍內(nèi)的任意小寫(xiě)字母字符。
    [^a-z] 負(fù)值字符范圍。匹配任何不在指定范圍內(nèi)的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范圍內(nèi)的任意字符。
    \b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
    \B 匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
    \cx 匹配由x指明的控制字符。例如, \cM 匹配一個(gè) Control-M 或回車(chē)符。 x 的值必須為 A-Z 或 a-z 之一。否則,將 c 視為一個(gè)原義的 'c' 字符。
    \d 匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]。
    \D 匹配一個(gè)非數(shù)字字符。等價(jià)于 [^0-9]。
    \f 匹配一個(gè)換頁(yè)符。等價(jià)于 \x0c 和 \cL。
    \n 匹配一個(gè)換行符。等價(jià)于 \x0a 和 \cJ。
    \r 匹配一個(gè)回車(chē)符。等價(jià)于 \x0d 和 \cM。
    \s 匹配任何空白字符,包括空格、制表符、換頁(yè)符等等。等價(jià)于 [ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]。
    \t 匹配一個(gè)制表符。等價(jià)于 \x09 和 \cI。
    \v 匹配一個(gè)垂直制表符。等價(jià)于 \x0b 和 \cK。
    \w 匹配包括下劃線的任何單詞字符。等價(jià)于'[A-Za-z0-9_]'。
    \W 匹配任何非單詞字符。等價(jià)于 '[^A-Za-z0-9_]'。
    \xn 匹配 n,其中 n 為十六進(jìn)制轉(zhuǎn)義值。十六進(jìn)制轉(zhuǎn)義值必須為確定的兩個(gè)數(shù)字長(zhǎng)。例如, '\x41' 匹配 "A"。'\x041' 則等價(jià)于 '\x04' & "1"。正則表達(dá)式中可以使用 ASCII 編碼。.
    \num 匹配 num,其中 num 是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。例如,'(.)\1' 匹配兩個(gè)連續(xù)的相同字符。
    \n 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 \n 之前至少 n 個(gè)獲取的子表達(dá)式,則 n 為后向引用。否則,如果 n 為八進(jìn)制數(shù)字 (0-7),則 n 為一個(gè)八進(jìn)制轉(zhuǎn)義值。
    \nm 標(biāo)識(shí)一個(gè)八進(jìn)制轉(zhuǎn)義值或一個(gè)后向引用。如果 \nm 之前至少有is preceded by at least nm 個(gè)獲取得子表達(dá)式,則 nm 為后向引用。如果 \nm 之前至少有 n 個(gè)獲取,則 n 為一個(gè)后跟文字 m 的后向引用。如果前面的條件都不滿(mǎn)足,若 n 和 m 均為八進(jìn)制數(shù)字 (0-7),則 \nm 將匹配八進(jìn)制轉(zhuǎn)義值 nm。
    \nml 如果 n 為八進(jìn)制數(shù)字 (0-3),且 m 和 l 均為八進(jìn)制數(shù)字 (0-7),則匹配八進(jìn)制轉(zhuǎn)義值 nml。
    \un 匹配 n,其中 n 是一個(gè)用四個(gè)十六進(jìn)制數(shù)字表示的 Unicode 字符。例如, \u00A9 匹配版權(quán)符號(hào) (?)。


    優(yōu)先權(quán)順序
    在構(gòu)造正則表達(dá)式之后,就可以象數(shù)學(xué)表達(dá)式一樣來(lái)求值,也就是說(shuō),可以從左至右并按照一個(gè)優(yōu)先權(quán)順序來(lái)求值。

    下表從最高優(yōu)先級(jí)到最低優(yōu)先級(jí)列出各種正則表達(dá)式操作符的優(yōu)先權(quán)順序:

    操作符 描述
    \ 轉(zhuǎn)義符
    (), (?Smile, (?=), [] 圓括號(hào)和方括號(hào)
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, \anymetacharacter 位置和順序
    | “或”操作


    普通字符
    普通字符由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫(xiě)和小寫(xiě)字母字符,所有數(shù)字,所有標(biāo)點(diǎn)符號(hào)以及一些符號(hào)。

    最簡(jiǎn)單的正則表達(dá)式是一個(gè)單獨(dú)的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式 'A' 可以匹配所搜索字符串中任何位置出現(xiàn)的字母 'A'。這里有一些單字符正則表達(dá)式模式的示例:

    /a/
    /7/
    /M/
    等價(jià)的 VBScript 單字符正則表達(dá)式為:

    "a"
    "7"
    "M"
    可以將多個(gè)單字符組合在一起得到一個(gè)較大的表達(dá)式。例如,下面的 JScript 正則表達(dá)式不是別的,就是通過(guò)組合單字符表達(dá)式 'a'、'7'以及 'M' 所創(chuàng)建出來(lái)的一個(gè)表達(dá)式。

    /a7M/
    等價(jià)的 VBScript 表達(dá)式為:

    "a7M"
    請(qǐng)注意這里沒(méi)有連接操作符。所需要做的就是將一個(gè)字符放在了另一個(gè)字符后面。

    posted @ 2006-05-15 20:31 海納百川 閱讀(1225) | 評(píng)論 (0)編輯 收藏

    現(xiàn)在開(kāi)始來(lái)嘗嘗博客的滋味

    感覺(jué)BlogJava博客弄得正兒八經(jīng)的,看來(lái)管理挺規(guī)范的。

    擠點(diǎn)時(shí)間來(lái)熟悉tapestry工作原理、設(shè)計(jì)思路,了解其優(yōu)劣點(diǎn),吸取其精華部份,運(yùn)用到項(xiàng)目中。

    posted @ 2006-05-13 21:58 海納百川 閱讀(134) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 一级午夜免费视频| 亚洲av无码成人精品区一本二本 | 亚洲av女电影网| 亚洲国产精品无码观看久久| 毛片在线全部免费观看| 国产三级免费电影| 亚洲区视频在线观看| 韩国免费A级毛片久久| 好爽好紧好大的免费视频国产| 亚洲美女激情视频| 在线观看免费视频网站色| 免费国产高清视频| 亚洲国产精品免费观看| 日本一卡精品视频免费| 红杏亚洲影院一区二区三区| 亚洲精品动漫在线| 精品国产污污免费网站| 亚洲日本一区二区一本一道| 亚洲欧洲精品在线| 精品亚洲永久免费精品| 国产亚洲精品高清在线| 真正全免费视频a毛片| 成人毛片视频免费网站观看| 亚洲电影唐人社一区二区| 久久久精品免费国产四虎| 亚洲中文字幕无码爆乳av中文| 亚洲AV无码专区国产乱码不卡| 18禁网站免费无遮挡无码中文| 亚洲精品福利视频| 91成人免费观看在线观看| 亚洲乱码国产一区网址| 国产精品亚洲色婷婷99久久精品| 成人免费午间影院在线观看| 亚洲国产电影在线观看| 131美女爱做免费毛片| 亚洲国产精品久久久久| 无码人妻久久一区二区三区免费 | 免费国产a国产片高清| 亚洲精品日韩一区二区小说| 我要看免费的毛片| 国产精品亚洲精品青青青|