一个纯bashell的http server

其是这个脚本早就写出来了,已经用了一年。现在怕回头自己都忘记了,把它总结一下。

这个http server非常强大,可以说支持任何脚本语言,什么php,python,java,只要能在Linux shell里面调用的都可以。下面是实现方式。

首先是一个接受request和处理请求并返回给客户端的脚本:

#!/bin/bash
base=/data
read request

while /bin/true; do
read header
[ “$header” == $’\r’ ] && break;
done

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

if [ $url == “/” ]; then
url=”/index.html”
fi

filename=”$base$url”

if [ “$query” != “$url” -a -x “$filename” ]; then
echo -e “HTTP/1.1 200 OK\r”
echo -e “Content-Type: bin\r”
echo -e “\r”
export QUERY_STRING=$query
“$filename”
echo -e “\r”
elif [ -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

相信含义不解释了,非常非常简单,相信是一目了然了。

接下来定义所有指向80端口的请求都交由这个脚本来处理,需要在/etc/xinetd.d目录中建立一个名为http的文件:

# default: off
# description: The http service can response any\
# request come from 80 port and response to client
service http
{
disable = no
port = 80
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/zqweb.sh
}

仅此而已。

在Linux上的Andorid模拟器中安装apk软件

最近想入手一个Andorid手机,先在机器上装了个Andord SDK和模拟器玩玩。想在模拟器上装个软件,却发现网上找到的资料都是windows上的。虽然Linux上面的大体相同吧,却也有细微差别。所以记录一下。事先声明一下,我的笔记本用的是Ubuntu 10.10。这个系统真的很好用。

1. 准备Andord SDK

Linux上的Andorid SDK下载下来后可以直接解压缩使用。具体下载和安装步骤去看官方文档,这里就不详细说了。就给一个官方地址。因为伟大的GFW,这个地址必须翻墙才能上。

2. 启动SDK Manager创建一个新的AVD(Andorid虚拟设备)

3. 启动模拟器

qi@qi-ThinkPad-T60p:~/tools/android-sdk-linux_86/tools$ ./emulator -avd zq

这里的-avd参数指定需要启动的是哪个模拟器,我这里的zq就是刚才第二步里面创建的那个模拟器了。

4. 安装apk软件

跟windows上一样,linux上也是用adb来安装,但是不同于windows,这个命令的位置是在platform-tools而不是tools。

qi@qi-ThinkPad-T60p:~/tools/android-sdk-linux_86/platform-tools$ ./adb install /tmp/aa.apk
992 KB/s (326241 bytes in 0.321s)
pkg: /data/local/tmp/aa.apk
Success
恩,这样就结束了。确实很简单。安装上以后我发现软件里面的广告显示都很正常。有意思。

在Linux上分割PDF文件

    最近在学习新技术,下到的一个PDF文档有20多M,想放手机上看,直接说存储空间不足—其实我猜是内存不足才对,因为文件我是放卡上的。无论如何,需求就是,把这个大文件分割成几个小的,这样就可以在手机上看了。
    随便一google,就查到了ptftk,它能够做到的不仅仅是分割PDF而已,可以看其主页上的介绍:
===============================================================================================

If PDF is electronic paper, then pdftk is an electronic staple-remover, hole-punch, binder, secret-decoder-ring, and X-Ray-glasses. Pdftk is a simple tool for doing everyday things with PDF documents. Keep one in the top drawer of your desktop and use it to:

  • Merge PDF Documents

  • Split PDF Pages into a New Document

  • Rotate PDF Pages or Documents

  • Decrypt Input as Necessary (Password Required)

  • Encrypt Output as Desired

  • Fill PDF Forms with FDF Data or XFDF Data and/or Flatten Forms

  • Apply a Background Watermark or a Foreground Stamp

  • Report on PDF Metrics such as Metadata, Bookmarks, and Page Labels

  • Update PDF Metadata

  • Attach Files to PDF Pages or the PDF Document

  • Unpack PDF Attachments

  • Burst a PDF Document into Single Pages

  • Uncompress and Re-Compress Page Streams

  • Repair Corrupted PDF (Where Possible)

===============================================================================================
    其基本用法在主页上也有举例,我这里就举一个能满足我需求的命令吧:
pdftk A=Eclipse.Plug-ins.Third\ Edition.Dec.2008.pdf cat A1-217 output plugin1.pdf
把“Eclipse.Plug-ins.Third\ Edition.Dec.2008.pdf”这个文件的第1到217页(1-4章)分为plugin1.pdf文件。命令语法很简单,就不讲了,可以直接去主页上看或者看命令的帮助。分开的文件不到7M,手机上面可以直接打开。

Linux上Flac文件转MP3

    参考“http://www.linuxtutorialblog.com/post/solution-converting-flac-to-mp3”实现。
    实际上非常简单,就当笔记好了,记录一下我在Ubuntu上是怎么做的。
1. 安装FLAC
sodu apt-get install flac
2.安装lame
sudo apt-get install lame
3.下来就可以直接用命令进行转换了:
for file in *.flac; do $(flac -cd “$file” | lame -h – “${file%.flac}.mp3”); done

这个命令的效果是把当前目录下所有的flac文件都转换为mp3文件。不过有一个缺点,不能根据cue文件对flac进行分轨,转出来的是一个大的MP3文件。这个问题留到下周解决吧。

MAC或者更霸道

    之前一直都不乏对windows的口诛笔伐,而一提到MAC就满是艳羡之词。不过通过这几天对我家那个MAC系统的使用来说,好确是好的,但是不好的地方也很多--至少没有我的Ubuntu好。
    首先是硬件上面很挑。机器拿回来,首先发现的是跟我原来的netgear无线路由不match,上网速度极慢,特别是上传速度,简直就不动。之后发现我原来的罗技鼠标用在它上面,总是不顺,用Brad的话说就是”alway skip some points when you moving”.跟Brad聊了一下,前一个问题他还没遇到,后一个问题他也有,不过他居然说无所谓,因为他也不作图。于是上网搜了一下第一个问题,发现其实这个问题很普遍,很多人问,但是就是没有解决方案。
    当然,问题没有解决不了的。技术解决不了咱用生抗的,是在抗不了的咱用钱砸。于是,路由换了linksys,鼠标换了它苹果自己的mighty mouse。总算解决了。
    可是事情还没完,今天老婆又发现meizu的miniplayer插上MAC不能认,于是上网一搜,这个问题同样普遍并且没有解决方案。好吧,我忍了,现在一个shuffle3不也就6、7百么……可是老婆又提出一个问题,她的三星手机能不能插到MAC上用?难不成又要买个iphone?
    苹果的产品线设计的可真够艺术,当你发现你原来的不work的时候,它总在生产替代品。
    再来说说软件吧,网银的问题先不说了,这个罪可以归结到国内广大目光短浅的机构组织开发人员上。其他的么,软件的问题到还少一些,只是finder其实并不那么好,我在Linux上操作的很好的FTP,一到finder上就不能work了。是在是郁闷,算了,晚上给路由配个smba试试看,能有build-in的就不装软件。
    先抱怨这些好了,有可能我们对MAC的狂热还没有燃烧起来,或者我们格调不够高,还不能够欣赏苹果之“美”。总之,如果你觉得你比较穷—金钱上跟电脑知识上,那就用windows好了。我看论坛上有人说,一用MAC的机器,就把自己用的所有东西都换成苹果的了,发帖之人摆出一付昂首挺胸的嘴脸,可谁知道他肚子里头有没有牙呢……

没有windows的房子

    首先我得声明,我没有说我的蜗居没有窗户,实际上,它有整整一面墙都是大窗户。我在这里想要说的是M$的那个操作系统。
    我是说,到这个周末为止,我已经完全把那个操作系统从我家里清除掉了。
    其实早就有这个想法,但是公司的电脑,要按它的要求在系统里面装上一大堆软件,什么WST,MTS,NOTES之类。没办法,谁叫你用的电脑是别人买单的呢。前年在公司的网络里搜了一大通也没有找到这些软件的Linux版本,生气之下对公司印象也有稍减,你整天在外面鼓吹开源跟Linux,怎么员工想用个Linux都不能够呢。四个字:挂羊头卖狗肉。
    不过大象确实是在跳舞,只不过由于它的身体太过庞大,这轻轻挪了挪屁股都用了一年多。
    前几天发现公司内部居然有了个称为Open Client的软件包,用于将这套工作必需软件装到RedHat上。并且围绕这个软件包,还有了针对其他各种发行版的衍生软件包。而且,还出现了一个ubuntu center。资源可谓丰富。
    资源有了,促成我下定决心干掉用了一年多的xp系统的另外一个原因是最近更新完系统后,居然键盘鼠标总是在开机的时候莫名其妙地锁定,需要重启才能解决。而微软大叔最近又宣布将要停止xp系统的更新。我有什么理由再将我的痛苦变本加厉进行升级呢?
    现在我用的是ubuntu 8.1,比两年前的7进步太多了。一句话,使用起来非常顺手。
    另外,赶上我老婆也换电脑的时机,以高超的设计为武器,成功将其转型为MACer。虽然也是个商业软件吧…但是软件确实比Linux全一些,例如PS。
    周六我定的路由板子到了。里面跑着基于Linux的DD-WRT系统,装上MLdonkey,插上16G的U盘。嘿,光下载不出声,每天早晚上播种加收割,一天种两季。美!