Linux Application

关于mount的两个错误

1. mount: could not find any free loop device

解决方法:losetup -d /dev/loop7

2. umount: device is busy

解决方法一:

kill $(``/sbin/fuser -m /dev/sda3 2>/dev/null)

解决方法二:

umount -f /dev/sda3

umount -l /dev/sda3

DNS漏洞

最近DNS漏洞狠火啊!!搞得沸沸扬扬,鸡犬不宁的~

我仔细看了一下这个漏洞的原理,发现其实很简单。我这里说简单并不是事后诸葛,而是指相对于其它互联网协议的漏洞,比如 SYN Flood,它早在1994年就被发现了。我觉得这个DNS漏洞也应该被发现得更早才对,没想到直到现在才暴露出来。

说到底,这个DNS漏洞的成因是因为QID计算过于简单,只是简单地加一,这导致猜解很容易,可“屋漏偏逢连夜雨”,偏偏DNS server的实现中发送DNS请求的UDP端口又是不变的,这就造成了本次“全球DNS变暖”的问题。而且,不光光是BIND,其它很多实现都是这样,恩哼,那么这个问题就很严重了。解决方法也很简单,随机QID和UDP端口,注意,光随机QID似乎仍然是不够的。

好了,现在我们反思一下为啥这个DNS漏洞这么简单却到现在才暴露出来?我觉得(停顿),是因为DNS太普通以至于几乎没人重视它了(too to 结构)。想想啊,我们似乎都觉得敲入一个域名就理应得到相应的主机,以至于连其IP是什么都看不到,也没必要看到(绝大多数情况)。这不光是普通用户的心态,连很多程序员也是,因为gethostbyname(3)替我们完成了这个工作。总之,几乎人人觉得这是理所应当的,所以几乎没人重视DNS问题,除了DNS服务器管理员和某些geek到家的人,而Dan Kaminsky就是后者中的一个。当然了,Dan的人品也是很好的,他充分估计到了这件事的严重性,不光自己没利用它做啥坏事,而且最初的保密工作也做得很好!

这件事再次提醒我们,不管什么事情做得很细了都很可怕。牛人就是这样炼成的!

快打上补丁吧,哼哼哈兮~!

join命令

哎,以前居然不知道还有这么个强悍的命令。记之~~!

$ join -t: <(head -24 /proc/cpuinfo) <(tail -24 /proc/cpuinfo)
processor : 0: 1
vendor_id : GenuineIntel: GenuineIntel
cpu family : 6: 6
model : 14: 14
model name : Intel(R) Core(TM) Duo CPU T2450 @ 2.00GHz: Intel(R) Core
(TM) Duo CPU T2450 @ 2.00GHz
stepping : 12: 12
cpu MHz : 2000.000: 2000.000
cache size : 2048 KB: 2048 KB
physical id : 0: 0
siblings : 2: 2
core id : 0: 1
cpu cores : 2: 2
fdiv_bug : no: no
hlt_bug : no: no
f00f_bug : no: no
coma_bug : no: no
fpu : yes: yes
fpu_exception : yes: yes
cpuid level : 10: 10
wp : yes: yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon bts
pni monitor est tm2 xtpr: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca
cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_pe
rfmon bts pni monitor est tm2 xtpr
bogomips : 4003.80: 3999.98
clflush size : 64: 64

全新的Fedora系统

这两天对我的Linux进行了大的改造。

先是花了一个晚上的时间从Fedora 8升级到了Fedora 9。通过网络升级Fedora有两种方式:一种是通过preupgrade,另一种是直接用yum(关于两种升级方式可以参考:preupgradeyum)。我采用了后者,升级过程中遇到了包依赖的错误,解决方法很简单,哪个包缺少依赖的东西就把那个包给删除,升级完再重新安装,然后就是要使劲地yum clean all。

升级完最让我眼前一亮的是登录界面和Firefox 3,感觉很漂亮。升级后mplayer会出现错误,解决方法是:这个。还有一个头疼的问题是gcc 4.3,一些软件编译不过去了,某个2.6.23的内核就是,害得我又修改了内核的Makefile才编译通过的,不知道以后还会有什么,看来得自己编译gcc了。

另一个大的改造是在Gnome上放弃使用metacity,改用sawfish,感觉要轻便一些。不过安装sawfish需要自己编译安装。同时,默认使用fluxbox,其次是enlightenment 16,减少Gnome的使用。用了几天感觉这两个窗口管理器都很简洁,fluxbox更顺手一些,虽然e16更漂亮,但它资料太少(注:e17资料相对还多一些),不知怎么去修改它的配置,所以默认使用fluxbox了。安装它们可以用:yum install fluxbox e16。

推荐几个关于enlightenment的网址:get-e.orge17-stuff.org官方wiki,关于fluxbox的网址:fluxbox-wikifluxbox.org

顺带体验了一下rox,感觉安装很方便,就是用着还不顺手,还是资料太少。

奇怪的无线问题

很奇怪,前几天一直都不能正常使用NetworkManager,今天居然可以了。。。无缘无故!

难道是我人品的问题??

终于可以摆脱有线了。严重感谢George,帮了我很多忙,起码我现在知道在Linux上怎么使用无线了(以前从来没用过)。

恩,简单总结一下,基本用iwconfig和iwlist就可以了:

/sbin/iwconfig wlan0 essid “YOUR_ID” key s:YOUR_PASS mode Managed channel 6 rate auto

然后再dhclient就完了。这边的网络都是用DHCP的,在公司也是,不过公司用的是有线。

图形界面直接用NetworkManager就可以了,要开启NetworkManager和NetworkManagerDispatcher两项服务。其中遇到的一个问题是提示输入密钥环密码,不知所云为何,我简单尝试了一下,安装gnome-keyring-manager之后把login那个密钥环删掉就行了。

现在比较郁闷的另一个问题是内核。在公司得用vmware,需要内核模块,于是又下了个新内核编译完装上,但是无线和声卡驱动似乎没弄好,不能用。而在Fedora自带的内核中,又不能用vmware。这是个问题,得想办法解决掉~!

time居然是bash/zsh的关键字

哎,没想到自己的知识还有这么个大的疏漏!

我们平时最常用的time竟然是bash/zsh的一个关键字!!一直以为time就是/usr/bin/time!

$ builtin time
bash: builtin: time: not a shell builtin
$ type time
time is a shell keyword

% builtin time
zsh: no such builtin: time
% type time
time is a reserved word

用strace也可以,strace一下看看有没有搜索PATH的过程就知道。

$ strace /bin/bash -c ‘time > /dev/null’

也可以证实time确实不是外部命令,不过它无法告诉我们到底是内置命令还是关键字。排除time是内置命令的另一个方法是看man手册,shell builtins里面并没有time。

感觉 jed 不错

无意间遇到了jed这个编辑器,试着用了用,感觉很爽,它模拟的emacs模式很好,关键是比起emacs来轻巧多了,甚至比MicroEmacs还要轻巧。很多键和emacs都一样,无须调整。特别适合在alpine或mutt中使用。

(Update: Fedora用户可以直接用yum安装。)

不过jed的配置文件有自己的语法,和emacs差别甚大。这需要慢慢熟悉。

jed主页

Jed Quick Reference

GCC GDB 作弊手册

If you want to pass, cheat. If you want to learn, research.
因哲思的需要,这两天内忙着赶制了GCC和GDB的手册,如下:

http://wangcong.org/articles/learning-gcc.cn.html
http://wangcong.org/articles/learning-gdb.cn.html

pdf 版本(直接用firefox转成的):
http://wangcong.org/down/gcc-cheat-sheet-cn.pdf
http://wangcong.org/down/gdb-cheat-sheet-cn.pdf

哲思叫它们“速查手册”,我更喜欢叫它们“作弊手册”(cheat sheet)。;-)

PS1:firefox生成的ps很不错了,以前记得很烂的,进步很大啊,呵呵~

PS2:劳动节快乐!

(Update:firefox生成的是ps,不过我又通过ps2pdf转换好了,所以上面的下载正确。感谢crquan指出。)

体验Alpine

家里有两台电脑,这给使用POP收邮件带来一些麻烦,因为要在两台机器之间互相同步邮件存档。决定换IMAP试试,于是就找上alpine了。

alpine也是命令行下的邮件客户端,由华盛顿大学开发,据说Linus本人就是用的这个。

alpine的配置其实相当简单,相对于mutt来说,但对于习惯了POP的用户来说,alpine的“困难”在于IMAP而不在于alpine本身。所以在使用alpine之前熟悉一下IMAP是很有必要的。

这里就不赘述IMAP的概念了,只说一下我的配置。首先你先要把gmail的设置改成支持IMAP,然后要通过gmail自带的过滤器和标签来配合IMAP对邮件进行分类。然后在你的~/.pinerc里修改下面几项:

personal-name=Your Name

user-domain=gmail.com

smtp-server=smtp.gmail.com/submit/user=YOUR_NAME@gmail.com/novalidate-cert

inbox-path={imap.gmail.com/user=YOUR_NAME@gmail.com/ssl/novalidate-cert}Inbox

还有很多其它配置项,你根据自己的喜好进行选择。

alpine的优点很明显,直接在服务器上进行操作,无需下载到本地,方便在不同机器上使用同一个email帐号。缺点,我认为,就是保存到本地不方便,至少对于gmail来说,因为gmail并没有提供Linux/Unix上的命令行操作接口(或者是有而我不知道?)。还有,alpine并不像mew那样提供邮件编码转换,不是指定的编码一律都是乱码。

最后,如果gmail的过滤器再好一点儿就完美了。;-)

emacs技巧

收集的一些emacs tricks,和大家分享。;-)

http://www.emacswiki.org/cgi-bin/wiki/EmacsNiftyTricks
http://geosoft.no/development/emacs.html

http://infolab.stanford.edu/~manku/dotemacs.html

http://blog.carduner.net/my-emacs-tricks/

http://blog.outint.de/index.php/category/emacs/

http://verify.stanford.edu/satyaki/emacs/EmacsTricks.html

http://jfm3-repl.blogspot.com/2006/06/emacs-tricks-1-completion.html

注:gfw抽风了,blogspot时而能上,时而不能上,梯子请自备!!