Another Java Geek

其实我不是geek,我和你一样,我是凡客

正在浏览 shell 里的文章

在protobuf和thrift的工具包中都分别提供了各自的VIM语法文件,使用该语法文件,就可以高亮显示关键字,从而在VIM中得到更好的编辑体验。 添加语法文件到VIM runtime中的方法如下: mkdir -p ~/.vim/syntax/ cp thrift.vim ~/.vim/syntax/ echo “au! BufRead,BufNewFile *.thrift setfiletype thrift” >> ~/.vimrc 这样打开*.thrift文件时,就可以自动显示语法高亮。 要使语法文件在全局范围内生效,让每个用户都能自动高亮语法,则修改VIM全局配置即可: mkdir -p /etc/vim/syntax/ cp thrift.vim /etc/vim/syntax/ echo “au! BufRead,BufNewFile *.thrift setfiletype thrift” >> /etc/vim/vimrc

工作中的一个需求:需要为一个现存的功能,提供Web访问界面。由于这个功能是用Shell编写的,首先想到的解决方案是通过在Shell中开启一个Server Socket,来实现一个简单的HTTP服务器,提供给浏览器访问。我并不需要实现所有的HTTP协议,只要能够处理特定的GET请求即可。这个简单的HTTP服务器将会从浏览器发送的GET请求中截取指定参数,然后通过系统调用执行现存的Shell脚本。在网上查找了一下Shell Socket的相关信息,发现实现技术还挺多。摘录了两种方法(为简明起见,所列代码做了简化),记录于此以备忘。 1.Perl use strict; use IO::Socket; my $server_socket = IO::Socket::INET->new ( LocalPort => 2010, Listen => SOMAXCONN, Proto => ‘tcp’, Reuse => 1, Timeout => 60 ) or die “SERVER SOCKET ERROR!n”; while(1) { next unless my $connection = $server_socket->accept; my $url = get_url($connection); if ($url =~ /^.*\/(\?param=(.*))?$/) { if ($1) { system((“myshell”, [...]

AWK是linux系统上大名鼎鼎的工具,同时也是一套编程语言。AWK有很多不同版本,各个版本都遵循AWK语言的定义,除了在实现上各自有一些不同的扩展。我不打算详细说明AWK的语法和变量含义(因为这是man命令该干的事情),也不会关注不同AWK版本的差异(因为我也并不了解),而只是对自己平时通过AWK完成的任务进行一下总结。 为了叙述方便,下面列出一段虚拟的网站访问日志,作为下述的AWK脚本操作的基础,日志文件名为access.log,以下是样例: /index.html 20100609_130644 3207 211.138.237.173 WTP/1.1 HNCS-P-GW15-WAP (Nokia WAP Gateway 4.1 CD1/ECD13_D/4.1.04) /content.html 20100609_130644 9247 121.15.246.184 ZXWAP GateWay,ZTE Technologies /index.html 20100609_130644 3207 211.142.189.231 HTTP/1.1 HAZZ-PS-WAP3-GW23 (infoX-WISG, Huawei Technologies) /img/logo.jpg 20100609_130644 1386 211.141.86.10 HTTP/1.1 JXNC-PS-WAP-GW29 (infoX-WISG, Huawei Technologies) /img/wap.gif 20100609_130644 1042 211.142.189.206 HTTP/1.1 HAZZ-PS-WAP2-GW25 (infoX-WISG, Huawei Technologies) /help.html 20100609_130644 2538 211.138.237.200 HTTP/1.1 HNCS-PS-WAP3-GW08 (infoX-WISG, Huawei [...]

问题:有一个文件a,保存着某个系统中所有用户的一个子集,其中每行一个用户名,样例如下: 张三 李四 王二 麻子 … 还有一个文件b,保存该系统所有用户的在线时长(以小时计),样例如下: 张三 1298 李四 203 王五 3375 赵六 67 … 现需要对a文件中在线时长超过1000的用户,给予等级提升。 首先要把符合条件的用户找出来,保存到文件candidate中。用shell脚本实现,第一个脚本如下: cat a | while read name do awk ‘{ if ($1 == “‘$name’” && $2 >= 1000) { \ print $1 >> “candidate”; exit 0; } }’ b done 第二个脚本: awk ‘BEGIN { while ((getline= 1000) { [...]

在shell里,启动一个进程并放入后台执行,用 cmd & 启动一个进程放入后台,且logout后继续运行,用 nohup cmd & 如果已在前台启动了某个进程,要想转入后台执行,要先按ctrl-z暂停,再用bg后台执行之。 但这样做,logout之后,进程依然可能会被杀掉。 有好几次遇到这样的情况:在服务器上,前台启动了一个程序,到了下班时间还没有执行完毕,这时就遇到点小麻烦,因为不能够马上关机走人,否则服务器上的程序就会挂掉。 一种选择是等到程序执行完毕再关机撤离,但等待时间可能会比较长;另一选择是先杀掉进程,再用nohup…& 重新启动,但这么做,程序之前所做的工作就得丢弃(程序不能够从先前结束的位置继续执行)。 有没有办法让已在前台执行的进程转入后台,且logout之后继续运行?闲来无事,终于在网上找到了答案:按ctrl-z暂停,再用bg后台执行之,然后执行 disown -h 即可。