• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >linux shell > Shell脚本实现的一个简易Web服务器例子分享

Shell脚本实现的一个简易Web服务器例子分享

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了shell脚本例子,shell脚本编程例子,shell脚本,shell脚本编程,shell脚本学习指南等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

假设你想测试网页和一些CGI,而你又不想麻烦Apache安装完整的包。这个快速的shell脚本可能只是你所需要的东西。

简而言之,一个web服务器是一个应用程序,该应用程序将本地文本文件通过网络发送给客户的请求。如果你让另一个程序(例如inetd)处理网络情况下,web服务器可以减少到只有 cat "文件名”发送到stdout。当然,困难将提取部分文件名的HTTP请求字符串:任何一个Bash脚本无法轻易做到。

脚本

我们的脚本应该像其他任何脚本一样,加上一些定义:
#!/bin/bash
base=/var/www
</div>
inetd将从远程主机接收到的数据传递给我们的脚本,第一行是标准的HTTP请求,后跟零个或更多的头文件。我们记录下请求,并退出休眠:
read request

while /bin/true; do
  read header
  [ "$header" == $'\r' ] && break;
done
</div>
最麻烦的部分:从请求的数据中提取URL并在本地文件中找到对应文件:
url="${request#GET }"
url="${url% HTTP/*}"
filename="$base$url"
</div>
返回含有头部信息的文件内容。
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
</div>
好了,脚本完了。

安装

为了使它工作,你必须添加以下行到/etc/inetd.conf文件:
www stream tcp nowait nobody /usr/local/bin/webd webd
</div>
webd就是你刚刚创建的脚本名称。

使用/etc/init.d/inetd restart使脚本生效后,就可以测试它了。在/var/www下放一些HTML文件,打开你最喜欢的Web浏览器的输入以下地址测试:http://localhost/FILENAME.html

请注意,如果你的电脑连接这一个不安全的网络,这个脚本可能不算一个聪明的事,因为谁都可以通过80端口访问你硬盘上的文件。一个更好的办法是使用 tcpd 来保证只允许本地连接。我会写一些相关的信息,发挥你的想象力去干吧!

什么是CGI

就像这个,WEB服务器是没什么用处的,它什么都做不到,而且你可以用其他方法来访问你的文件。我们需要CGI的支持(哪怕是很简单的)。

理论:不通过网络发送一个文本文件,我们运行一个可执行文件,并将其输出。在这之前,我们已经处理的HTTP请求的一步,建立一个 QUERY_STRING变量输出到可执行文件。

要做到这样,你只需要把第三步的代码替换成这个样子的就可以了。

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
</div>

当然,这个小玩意的性能无法与Apache相比,这只是一个小玩意。

</div>

您可能想查找下面的文章:

  • Shell脚本实现的一个简易Web服务器例子分享
  • Shell脚本实现自动发送邮件的例子
  • Shell获取文件的文件名和扩展名的例子
  • shell脚本递归遍历目录及子目录的例子分享

相关文章

  • 比较两个字符串是否相等的shell代码
  • linux修改目录和文件权限的简单命令解释
  • Shell脚本实现判断IP地址是否在一个ip段内代码分享
  • 详解linux下利用crontab创建定时任务
  • 分享20个Unix/Linux 命令技巧
  • Linux tar 命令出现 Cowardly refusing to create an empty archive 错误解决办法
  • centos 设置定时任务执行指定脚本的方法
  • Linux 命令每天必学(34)之du命令
  • shell脚本监控linux系统内存使用情况的方法(不使用nagios监控linux)
  • Shell中比较大小简洁总结

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • linux获取系统启动时间示例详解
    • 详解 linux mysqldump 导出数据库、数据、表结构
    • linux shell脚本学习xargs命令使用详解
    • nginx 下安装配置 phpadmin报错的解决方法
    • 浅谈ctrl+c,ctrl+d,ctrl+z在linux中的意义
    • shell监控脚本 准备工作分享
    • 完美解决ntp的错误问题no server suitable for synchronization fo
    • Shell脚本把文件从GBK转为UTF-8编码
    • Linux下Shell脚本中几种基本命令的替换区别
    • linux文件搜索及其它基础命令介绍(3)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有