欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

腳本

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

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

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

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

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

什么是CGI

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

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

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

復(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)然,這個小玩意的性能無法與Apache相比,這只是一個小玩意。

相關(guān)文章

  • Linux下Oracle歸檔日志自動清理腳本代碼(sh)

    Linux下Oracle歸檔日志自動清理腳本代碼(sh)

    將以下代碼保存為.sh文件,并放到crontab里就可以實(shí)現(xiàn)自動清理
    2013-01-01
  • shell中的for循環(huán)用法詳解

    shell中的for循環(huán)用法詳解

    這篇文章主要介紹了shell中的for循環(huán)用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Shell腳本實(shí)現(xiàn)apache日志中的狀態(tài)碼分析

    Shell腳本實(shí)現(xiàn)apache日志中的狀態(tài)碼分析

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)apache日志中的狀態(tài)碼分析,本文先是介紹了按天切割日志的方法,然后給出了分析訪問狀態(tài)碼的腳本,需要的朋友可以參考下
    2014-12-12
  • 幾例shell實(shí)用腳本(珍藏版)

    幾例shell實(shí)用腳本(珍藏版)

    日常工作中,經(jīng)常編寫一些shell命令或腳本以完成重復(fù)性操作,本文分享了最近用到的幾例shell實(shí)用腳本,感興趣的朋友跟隨小編一起看看吧
    2021-04-04
  • Shell[[]]檢測某個條件是否成立

    Shell[[]]檢測某個條件是否成立

    本文主要介紹了Shell[[]]檢測某個條件是否成立,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • linux編寫.sh腳本并賦權(quán)限問題

    linux編寫.sh腳本并賦權(quán)限問題

    這篇文章主要介紹了linux編寫.sh腳本并賦權(quán)限問題,文中給大家提到了Linux為sh腳本文件添加執(zhí)行權(quán)限的方法,需要的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-06-06
  • linux下ssh安裝與scp命令使用詳解

    linux下ssh安裝與scp命令使用詳解

    這篇文章主要介紹了linux下ssh安裝與scp命令使用詳解的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Shell PATH變量用法詳解

    Shell PATH變量用法詳解

    這篇文章主要介紹了Shell PATH變量用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Shell腳本實(shí)現(xiàn)刪除郵件隊(duì)列

    Shell腳本實(shí)現(xiàn)刪除郵件隊(duì)列

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)刪除郵件隊(duì)列,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02
  • shell腳本編寫俄羅斯方塊

    shell腳本編寫俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了shell腳本編寫俄羅斯方塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評論