Linux Application

共享上网和NFS

有两台电脑,一个上网帐号,为了让两台电脑都能上网,得动手搭建一个小型局域网,“自己动手,丰衣足食”啊!前提是拨入网络的电脑必须配有两个网卡。

物理设备齐全后开始进行配置。先配置拨号的电脑(简称为S),两个网卡,一个用来拨号,一个用来和另一台电脑(简称为C)通信。eth0和ppp0就留作拨号,而eth1配置成192.168.1.1,和C连接。C的IP配置为192.168.1.2,网关为192.168.1.1。这还没完,此时C还够不到外网,必须还得用S做个代理,要是在Windows上恐怕得用sysgate了,可咱用的是Linux,两条命令搞定:


sudo /sbin/iptables -F #这个是把FC7自带的防火墙规则全部清掉

sudo /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
最后在C的/etc/resolv.conf里加上DNS服务器地址就可以了。这样,两台电脑上就能同时上网了。

这样还不够,虽然它们都能上网,可它们之间共享东西还不方便,那就开nfs吧!

NFS服务器还是在S上开,把属性设置成可写就是了。先编辑exports文件:


sudo vi /etc/exports

内容如下:


/home/wangcong/ 192.168.1.2(rw,sync)

然后开启NFS需要的服务:

sudo /sbin/service rpcbind start

sudo /sbin/service nfslock start

sudo /sbin/service netfs start

sudo /sbin/service nfs start
接下来是C主机,本以为直接mount就可以,谁知得到如下错误:


$ sudo mount 192.168.1.1:/home/wangcong /mnt

mount.nfs: rpc.statd is not running but is required for remote locking

Either use “-o nolocks” to keep locks local, or start statd.
经过尝试,原来还需要开启nfslock和rpcbind,打开就是了:


sudo /sbin/service rpcbind start

sudo /sbin/service nfslock start

这样再mount就可以使用NFS了。

Linux磁盘使用分析

以前分析都是用df和du,突然间发现了一个巨好用的图形化工具——磁盘使用分析器,英文名叫Baobab。看看下面的截图就知道它有多么友好。

经过仔细分析,发现/tmp目录下的某些cscope文件居然占据了很多空间,马上rm -rf掉。结果根分区的使用率一下从74%下降到60%。妈呀,虚惊一场。

vimpress的几个不爽之处

自从老大上次推荐vimpress之后,就尝试用vimpress写了几次博客。可是用了之后发现,其实很不爽。原因如下:

1. 仅支持一个博客的撰写。因为我还要编辑xiyoulinux博客,也想用vimpress,无奈vimpress配置里只能记录一个blog的帐号。

2. 不支持草稿。虽说可以用vim保存到本地,但有时也想保存草稿到服务器,可惜vimpress不支持。

3. 编辑功能不完善(?)。好几次用的时候,BlogOpen之后再BlogSend,结果和没编辑一样~!费解中……

我个人心目中理想的功能应该是:

1. BlogList ALIAS

列出ALIAS指代的博客上的文章。ALIAS可以在配置文件中指定,对应帐号也应该在里面。

2. BlogEdit abc@ALIAS

编辑ALIAS博客上的ID为abc的文章。草稿或许应该有另外的表示方式。

3. BlogSave

把当前正在编辑的保存为草稿,如果是新建文章的话。否则就应该直接保存到原文。

4. BlogNew ALIAS

在ALIAS博客上撰写一篇新文章。

5. BlogPublish ALIAS

把当前的文章发布到ALIAS博客上去。

有兴趣的同学可以根据上面的建议给vimpress打补丁,然后提交给作者。

Quilt

Quilt是用来管理补丁的一个工具,非常好用,是由Andrew Morton自己写的一些脚本演变而来,现在由Andreas来维护。它解决了一些常见却又不太好处理的做补丁的问题,比如,两个补丁对同一个文件做了修改,怎么合并两个补丁?

小试了一下quilt,发现确实挺好用的, 也发现很多内核开发者也都在用(从输出的补丁信息可以看出)。而且我认为quilt的设计思想非常好,用了栈的原理。

命令行界面的quilt可以在这里下载,不过请注意,它对bash版本还有些挑剔,我在fc5上装的版本它警告说有bug,只能升级bash后再装。懒惰的人可以装一个图形界面的quilt来用一下。

关于quilt的教程似乎不多,中文更少,以后有时间的话我详细整理一下。这里先给出我搜到的两个:维护者写的“官方”教程和一个简单的quilt介绍

换输入法了

昨天不知怎么了fcitx脾气暴躁得很,只要一被调出来就马上发出关闭信号,自己退出不说,还要顺带杀死几个其它的进程,实在无语了……

被迫换SCIM了,发现升级后的SCIM不存在原来FC5中的问题了,但是,有一个问题仍然没有搞定,Opera里总是调不出SCIM来!!能Google到的方法全都试了,还是不行。路过的达人们谁知道解决方法还望不吝赐教! 先行谢过~!

换用KDE了

今天突发奇想,决定换一下KDE试试。用Gnome已多年矣,有些疲倦了,换了KDE感觉焕然一新。而且上次留的KDE界面居然还是WinXP风格,不错,Kscope也弄好了,非常滴爽啊!

个人感觉KDE比Gnome的可定制性更强,Konsole就是一个很好的例子。;) 不过这fcitx输入法似乎在KDE下还有点儿问题……还有,KDE的崩溃提示总让我想起M$的“错误报告”,这一点颇为不爽~~

JDB

今天想调试Java代码,可发现连JDB都没有。貌似FC默认安装的不是Sun官方的JDK,自己又下了一个装好,这才能用上JDB。

Google了一下JDB的资料,发现中文的实在不多,搜到几个有价值的英文的 介绍,供大家参考:

javaworld.com
http://www.cs.wisc.edu/~horwitz/jdb/jdb-lab.html
http://www.cs.wisc.edu/~horwitz/jdb/jdb.html

个人感觉JDB不如GDB好用,起码它不能通过向上键来选择以前的命令,不能直接回车就执行上一条命令。还有一个地方需要指出,需要JDB调试的代码在编译时请加上-g:lines,vars,source选项。貌似感觉还是不太好。

貌似大家最近都爱用“貌似”。 ;-p

搞定mutt

昨天总算是把mutt搞定了,不过昨天网通掉线,上不了网,今天补上这篇。

其实mutt设置挺简单的,照着网上的文章来没多大问题。我主要再说一下我遇到的一些问题。首先是编码问题,都统一为gb2312,如果有中文的话,因为终端就是gb2312。这还涉及到vi,因为我给mutt 设的编辑器就是vi,在.vimrc里加上下面这句:

set fileencoding=gb2312
.muttrc里有这么几句:

set charset="gb2312" set send_charset="us-ascii:gb2312:utf-8"

以前总以为charset里也要加utf-8之类的,其实不用,那只是指定终端编码。而且也没必要设置什么charset-hook,不过这可能是因为我还没遇到什么更奇怪的编码,呵呵~

还有就是排序的问题。鉴于我订阅了很多邮件列表,所以使用下面的一种排序方式,现在感觉很爽。

set sort=threads set sort_aux=reverse-last-date
再就是邮件列表问题,最好在muttrc里加上subcribe命令。在回复邮件列表时,使用g比r要好,因为g能把cc里的人也能照顾到。

最后就是mutt天生的一个问题,无法收邮件,只能靠别的程序。我用的是fetchmail,但我启用fetchmail的daemon功能,并且在fetchmailrc里设定set daemon 60,但还是没收到邮件!干脆,自己写个shell脚本去跑。代码很简单,如下:

#!/bin/sh

while true; do
        sleep 60
        if fetchmail -d0 ; then
                #cat XXX.wav >/dev/dsp
                mutt
        else
                echo "No mail!."
        fi
done

PS. 你可以把上面的注释去了,弄个*.wav文件做你的铃声!;-p

mutt+fetchmail+procmail

今天试图搞定这三个东西,实在不容易。

从开学到现在还一直是在Opera里收发gmail邮件,人懒了就这样。今天向Andrew提交patch时猛然发现该正式换一下mutt发邮件了,浏览器里有很多不方便的地方,最大的问题就是回复mailing list时不会把这个thread中的人都cc到。于是决定重拾mutt。

首先解决的是编码问题。鉴于xterm用的是gb2312,而邮件有中文的也有英文的,所以决定文件采用utf-8编码,而muttrc设置成us-ascii:gb2312:utf-8。但仍有一个问题没解决,刘洋使用的是evolution,而且还是gb18130这种相对少见的编码,所以他的邮件到现在仍然是乱码!然后就是mbox的问题,~/Mail/目录下有三个文件:from,from_me,sent,mbox,对应muttrc中设置:

set mbox=~/Mail/mbox
set spoolfile=~/Mail/mbox
set record=~/Mail/sent

这弄了半天也终于弄好了。

mutt先到此为止,还有就是procmail和fetchmail的问题。fetchmail可以以daemon的形式运行,可以在fetchmailrc中指定:set daemon 60。不过我试了试 ,发现似乎过了1分钟也没收到什么新邮件。kill掉fetchmail后再fetchmail -d0就马上收到一封!很奇怪。另一种解决方案是用crontab,不过这也有问题,crontab似乎只发送一个通知,而并没有把邮件弄到mutt里,因为我一直没收到邮件。这似乎还牵扯到procmailrc。彻底被搞糊涂了……

使用mutt处理电子邮件

Tuesday, 26. December 2006, 14:47:36



今天突发奇想,决定不再使用evolution来处理email了,换用一下命令行下的mutt。以前虽然早已闻其大名,但到今天才有勇气去试一下。

先在网上仔细搜了一下mutt的教程,发现要么是过时的东西,要么就是讲得不清楚,决定自己重新整理一下。(不敢期望比其它教程都好;-p)

下面仅以我使用的FC5和gmail为例。;-)

首先你应该清楚mutt所扮演的角色,mutt的设计遵循了Unix的设计哲学──“做一件事,把它做好”。mutt不会编辑邮件,也不会收发邮件,它只是把做这些事的程序有效的结合起来。具体说就是,mutt会把由fetchmail接收来的邮件以可定制的方式呈现给用户,用户编辑时它会调用用户指定好的编辑器(比如:vi或emacs),然后把编辑好的邮件交给sendmail或者其它发送邮件的程序(比如我用的msmtp)来发送。整个过程就完成了。

为了更好的配合mutt,有必要先讲一下ESR编写的fetchmail的使用。首先,按照常规,你需要通过编写配置文件来定制fetchmail的行为。在用户目录下新建一个名为.fetchmailrc的文件,内容大体如下:

defaults
poll pop.gmail.com proto POP3 and options no dns
user ‘YOURUSER_NAME@gmail.com’ there with password ‘YOUR_PASSWORD’ is ‘YOUR_USER_NAME’ here options ssl
keep
mda “/usr/bin/procmail -d YOUR_USER_ID”

把上面的YOUR_USER_NAME替换成你gmail的用户名(非gmail用户也要替换后面的服务器名和上面的pop服务器),YOUR_PASSWORD替换成你的邮箱密码,把YOUR_USER_ID替换成你在你//所用主机//上面的用户名。

编写完.fetchmailrc文件之后还要用chmod把它权限设为600。

试试用下面的命令测试一下你上面的配置:

fetchmail -c

如果配置OK的话,你以后就可以使用_fetchmail -d0 -v来接收邮件了。

如果你上面收到邮件的话(没收到的话就自己发一封;-p),现在启动mutt试试。(如果没有mutt的话,到mutt官方主页上下载一个最新的。注意:如果你要让mutt本身也有收邮件功能的话,编译时请指明。)进去后是不是就看到收到的email了?mutt的按键风格和vi类似,追求用最少的按键完成最多的功能。Enter键是阅读,i键退出阅读界面,如果有多于一封邮件的话,j上选中下面的一封,而k是选中下面的,如果还有更多的话,按PageUpPageDown来进行翻页。和其它多数程序一样,按q键是退出mutt。

在进行进一步介绍mutt之前,我们先要看一下怎么发送邮件以及怎么定制mutt。

如前所述,发送邮件可以使用sendmail或者msmtp,我用的是后者(msmtp的官方主页是:http://msmtp.sourceforge.net/)。它的配置文件你应该能猜到了,也是在用户目录下,名为.msmtprc。设置如下:

account gmail
host smtp.gmail.com
from YOURMAILBOX
tls on
auth on
port 587
user YOUR_MAILBOX
password YOUR_PASSWORD

把里面的YOUR_MAILBOX替换成你的gmail邮箱,把YOUR_PASSWORD替换为你的密码即可。

mutt的配置文件有两个,一个是系统的,一个是用户的。系统配置文件是/etc/Muttrc,里面是设置mutt的一些配色等,而用户配置文件是为用户所用的,指定自己想要的一些特性,它是在用户目录下,名为.muttrc,内容大体如下:

set alternates=”YOUR_MAILBOX”
set to_chars=”+TCFL”
set index_format=”%4C %Z %{%b %d} %-15.15L (%41) %s”
mailboxes Mailbox sent-mail
set header=yes
set quit=ask-yes
auto_view text/html
set move=yes
set include
set indent_str=”<"
my_hdr From: YOUR_MAILBOX
set sort=date
set charset="utf-8"
set send_charset="us-ascii:utf-8"
set editor="vi"
set sendmail="/usr/local/bin/msmtp -a gmail"
set pop_last=yes
set pop_user=YOUR_MAILBOX
set pop_pass="YOUR_PASSWORD"
set pop_host="pops://pop.gmail.com"

同样,对大写的内容做相应的替换即可。
我们逐行来看:
set alternates=”YOUR_MAILBOX”

你有可能收到信件的地址。

set to_chars=”+TCFL”

设置$to_chars变量,一般就为”+TCFL”。

set index_format=”%4C %Z %{%b %d} %-15.15L (%41) %s”

格式字符串,用来控制index的列表显示。

mailboxes Mailbox sent-mail

指定你有哪些信箱文件。

set header=yes

显示邮件头。

set quit=ask-yes

退出时询问,默认是yes。

auto_view text/html

自动浏览text/html格式的邮件。

set move=yes

提示你把信件从 /var/spool移动到的邮箱文件。

set include

回复时引用原文。

set indent_str=”<"

回信时以”<"表示引用内容。

my_hdr From: YOUR_MAILBOX

设置你自己的邮件头。

set sort=date

按日期对邮件进行排序。

set charset=”utf-8”

终端支持的那一种编码的显示。

set send_charset=”us-ascii:utf-8”

设置发送邮件的编码,先是ASCII,如果不行的话会选择UTF-8。

set editor=”vi”

指定编辑器是vi,当然了,也可以是其它你喜欢的。

set sendmail=”/usr/local/bin/msmtp -a gmail”

设置发送邮件的程序是msmtp,-a选项指定账户,就是.msmtprc中account后面指定的内容,默认的是default。

如果你的mutt编译时带了pop功能,你可以加上下面几行:

set pop_last=yes
set pop_user=YOUR_MAILBOX
set pop_pass=”YOUR_PASSWORD”
set pop_host=”pops://pop.gmail.com”

OK!mutt的配置搞定了,现在你可以用mutt发一封邮件试试。进入mutt以后按_m键,或者干脆直接在mutt选项中指定:

mutt -s “This is subject.” foo@bar.com > contents.txt


好了,mutt的介绍就到此为止了。更多的mutt介绍请参考[2]。试试mutt,是不是很酷呢?

参考资料:

[1] http://corsairdoom.blogspot.com/2006/10/mutt.html

[2] http://www.ucolick.org/~lharden/learnmutt.html

[3] http://learn.tsinghua.edu.cn:8080/2001315450/mutt_frame.html