最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享

 更新時(shí)間:2014年12月01日 10:18:22   投稿:junjie  
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)的一個(gè)簡易Web服務(wù)器例子分享,本文實(shí)現(xiàn)的Web服務(wù)器非常簡單實(shí)用,可以在你不想安裝nginx、apache等大型WEB服務(wù)器時(shí)使用,需要的朋友可以參考下

假設(shè)你想測試網(wǎng)頁和一些CGI,而你又不想麻煩Apache安裝完整的包。這個(gè)快速的shell腳本可能只是你所需要的東西。

簡而言之,一個(gè)web服務(wù)器是一個(gè)應(yīng)用程序,該應(yīng)用程序?qū)⒈镜匚谋疚募ㄟ^網(wǎng)絡(luò)發(fā)送給客戶的請求。如果你讓另一個(gè)程序(例如inetd)處理網(wǎng)絡(luò)情況下,web服務(wù)器可以減少到只有 cat "文件名”發(fā)送到stdout。當(dāng)然,困難將提取部分文件名的HTTP請求字符串:任何一個(gè)Bash腳本無法輕易做到。

腳本

我們的腳本應(yīng)該像其他任何腳本一樣,加上一些定義:

復(fù)制代碼 代碼如下:

#!/bin/bash
base=/var/www

inetd將從遠(yuǎn)程主機(jī)接收到的數(shù)據(jù)傳遞給我們的腳本,第一行是標(biāo)準(zhǔn)的HTTP請求,后跟零個(gè)或更多的頭文件。我們記錄下請求,并退出休眠:
復(fù)制代碼 代碼如下:

read request

while /bin/true; do
  read header
  [ "$header" == $'\r' ] && break;
done


最麻煩的部分:從請求的數(shù)據(jù)中提取URL并在本地文件中找到對應(yīng)文件:
復(fù)制代碼 代碼如下:

url="${request#GET }"
url="${url% HTTP/*}"
filename="$base$url"

返回含有頭部信息的文件內(nèi)容。
復(fù)制代碼 代碼如下:

if [ -f "$filename" ]; then
  echo -e "HTTP/1.1 200 OK\r"
  echo -e "Content-Type: `/usr/bin/file -bi \"$filename\"`\r"
  echo -e "\r"
  cat "$filename"
  echo -e "\r"
else
  echo -e "HTTP/1.1 404 Not Found\r"
  echo -e "Content-Type: text/html\r"
  echo -e "\r"
  echo -e "404 Not Found\r"
  echo -e "Not Found
           The requested resource was not found\r"
  echo -e "\r"
fi

好了,腳本完了。

安裝

為了使它工作,你必須添加以下行到/etc/inetd.conf文件:

復(fù)制代碼 代碼如下:

www stream tcp nowait nobody /usr/local/bin/webd webd

webd就是你剛剛創(chuàng)建的腳本名稱。

使用/etc/init.d/inetd restart使腳本生效后,就可以測試它了。在/var/www下放一些HTML文件,打開你最喜歡的Web瀏覽器的輸入以下地址測試:http://localhost/FILENAME.html

請注意,如果你的電腦連接這一個(gè)不安全的網(wǎng)絡(luò),這個(gè)腳本可能不算一個(gè)聰明的事,因?yàn)檎l都可以通過80端口訪問你硬盤上的文件。一個(gè)更好的辦法是使用 tcpd 來保證只允許本地連接。我會寫一些相關(guān)的信息,發(fā)揮你的想象力去干吧!

什么是CGI

就像這個(gè),WEB服務(wù)器是沒什么用處的,它什么都做不到,而且你可以用其他方法來訪問你的文件。我們需要CGI的支持(哪怕是很簡單的)。

理論:不通過網(wǎng)絡(luò)發(fā)送一個(gè)文本文件,我們運(yùn)行一個(gè)可執(zhí)行文件,并將其輸出。在這之前,我們已經(jīng)處理的HTTP請求的一步,建立一個(gè) QUERY_STRING變量輸出到可執(zhí)行文件。

要做到這樣,你只需要把第三步的代碼替換成這個(gè)樣子的就可以了。

復(fù)制代碼 代碼如下:

url="${request#GET }"
url="${url% HTTP/*}"
query="${url#*\?}"
url="${url%%\?*}"

filename="$base$url"

if [ "$query" != "$url" -a -x "$filename" ]; then
  export QUERY_STRING="$query"
  echo -e "HTTP/1.1 200 OK\r"
  "$filename"
  echo -e "\r"
  exit 0
fi

當(dāng)然,這個(gè)小玩意的性能無法與Apache相比,這只是一個(gè)小玩意。

相關(guān)文章

  • Linux BASH多進(jìn)程并行處理的方法實(shí)現(xiàn)

    Linux BASH多進(jìn)程并行處理的方法實(shí)現(xiàn)

    Linux下BASH多進(jìn)程并行處理的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2013-01-01
  • shell通過正則匹配ip地址實(shí)例代碼

    shell通過正則匹配ip地址實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于shell如何通過正則匹配ip地址的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用shell具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • shell腳本declare命令的用法詳解(聲明變量的屬性和類型)

    shell腳本declare命令的用法詳解(聲明變量的屬性和類型)

    這篇文章主要介紹了shell腳本declare命令用法(聲明變量的屬性和類型,declare?命令在一般的腳本編寫中并不常用,大多數(shù)情況下直接使用簡單的變量賦值語句即可滿足需求,需要的朋友可以參考下
    2023-06-06
  • 使用AWK在shell中生成日歷小程序

    使用AWK在shell中生成日歷小程序

    這篇文章主要為大家詳細(xì)介紹了如何使用AWK在shell中生成日歷小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • linux中的vi和vim編輯器操作方法

    linux中的vi和vim編輯器操作方法

    這篇文章主要介紹了linux中的vi和vim編輯器操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • Shell腳本數(shù)組用法小結(jié)

    Shell腳本數(shù)組用法小結(jié)

    這篇文章主要介紹了Shell腳本數(shù)組用法小結(jié),本文講解了數(shù)組聲明、數(shù)組遍歷、獲取數(shù)組長度、刪除數(shù)組元素、數(shù)組切片等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Linux tar 命令用法實(shí)例詳解

    Linux tar 命令用法實(shí)例詳解

    利用 tar 命令,可以把一大堆的文件和目錄全部打包成一個(gè)文件,這對于備份文件或?qū)讉€(gè)文件組合成為一個(gè)文件以便于網(wǎng)絡(luò)傳輸是非常有用的。這篇文章主要介紹了Linux tar 命令用法詳解,需要的朋友可以參考下
    2018-03-03
  • shell腳本自動(dòng)修復(fù)mysql損壞的表

    shell腳本自動(dòng)修復(fù)mysql損壞的表

    這篇文章主要介紹了shell腳本如何自動(dòng)修復(fù)mysql損壞的表,需要的朋友可以參考下
    2015-10-10
  • Linux下使用ntpdate進(jìn)行時(shí)間同步的方法實(shí)現(xiàn)

    Linux下使用ntpdate進(jìn)行時(shí)間同步的方法實(shí)現(xiàn)

    ntpdate是Linux下用于從NTP服務(wù)器同步時(shí)間的命令行工具,本文將給大家介紹Linux下使用ntpdate進(jìn)行時(shí)間同步的方法實(shí)現(xiàn),文中有相關(guān)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2024-03-03
  • 一文詳解Linux?du命令的使用方法

    一文詳解Linux?du命令的使用方法

    在Linux系統(tǒng)中,du命令是一款功能強(qiáng)大且實(shí)用的工具,可用于查看文件和目錄的磁盤使用情況,本文將深入探討du命令的使用方法和一些常見選項(xiàng),以協(xié)助您更全面地理解和有效地管理系統(tǒng)中的存儲空間,需要的朋友可以參考下
    2024-02-02

最新評論

恩施市| 集贤县| 高州市| 本溪| 霍山县| 方正县| 城步| 凌云县| 资兴市| 白山市| 商南县| 山阳县| 林芝县| 临湘市| 伊金霍洛旗| 汉源县| 阳东县| 葫芦岛市| 九龙城区| 深泽县| 依安县| 荔浦县| 南开区| 日喀则市| 漳平市| 古浪县| 伽师县| 绥芬河市| 礼泉县| 利辛县| 隆安县| 蒙自县| 义乌市| 石棉县| 芷江| 鄂托克前旗| 梅州市| 泾源县| 上饶市| 江孜县| 疏勒县|