I am LAZY bones ? all linux

分类: '精华' 的归档

新的PS1

特点就是命令正常结束时不会显示退出码,但当退出码非零时,就会以红色醒目的显示出来.
由于代码贴到这里,里的引号都会全角的,所以不如和预览效果一起贴个截图:
PS1截图

离线中文维基(wikipedia)

本来作者的本意是开发一个离线的 iphone/ipod 用的wikipedia的,电脑上的只是为了方便调试用而已,而且但是由于众所周知的原因,内地用户访问中文维基并不是很方便,于是,我觉得电脑上的离线维基便更加有意义了.
注意: 本项目目前出于刚刚起步阶段,维基内容只能显示文本,图片/目录以及一些高级的格式还暂时不支持(别问我以后会不会支持,我也不知道),当然繁简体转换之类的高级功能肯定也没有.

使用方法:
先安装 ruby libinline-ruby mongrel rubygems libbz2-dev 这几个包,ubuntu用户可以直接apt-get,其他发行版估计就要自己解决这几个包的安装问题了.
完了以后,下载 http://ftp.ubuntu.org.cn/home/bones7456/zh_wiki.tar.gz(约180M) 密码在这里,解压到任意目录,然后运行里面的 startserver.sh ,即可用过浏览器访问 http://localhost:9090/
备用下载地址: http://linuxfire.com.cn/~lily/zh_wiki.tar.gz
md5sum:

ac2e9f38492c86d22258f0a853c1c4b5 zh_wiki.tar.gz

数据版本: 20080608, 包含页面文字和链接,不包含图片和编辑历史等.

主页: http://code.google.com/p/wikipedia-iphone/
数据版权参见: http://zh.wikipedia.org/w/index.php?title=Wikipedia:%E5%85%B3%E4%BA%8E&variant=zh-cn

最后,效果截图来个(点击放大):
效果截图

ipv6

哈哈,我也用上IPv6了,先纪念一下我的第一个IPv6公网地址:

inet6 地址: 2001:f10:5001:4a0::2/128 Scope:Global

原理简介:

利用現有 IPv4 網路,透過二端建立起一條 隧道(Tunnel) ,Server端透過這個 Tunnel 發送一組 IPv6 位址給另一端,使兩端可以使用 IPv6 封包在 Tunnel 內傳遞,如同現行很熱門的 VPN應用,是同相道理,使用者在外可使用公司內部私人網路,一樣是透過 Tunnel 建立,公司內部網段 IP 在 Tunnel 內傳遞,只不過這時換成 IPV6 封包。

ubuntu环境的具体方法:
先下载这个包,解压,安装方法在 tspc-advanced/INSTALL 文件内,大致说一下:
1.进入tspc-advanced,执行 make target=linux 编译
2.执行 sudo make target=linux installdir=/usr/local/gw6c install 安装
3.编辑/usr/local/gw6c/bin/gw6c.conf 文件,找到server=那行,改为: server= tb.ipv6.apol.com.tw
4. cd /usr/local/gw6c/bin/ 然后执行 sudo ./gw6c ,如果看到类似:

Gateway6 Client v5.0-RELEASE build May 16 2008-12:30:00
Connection to tb.ipv6.apol.com.tw established.

这样的输出,就表示成功了,哈哈.
5.看看你的ifconfig输出,是不是多了点什么?再试试 ping6 ipv6.google.com 哈哈,很爽吧…还有,可以直接用 http://zh.wikipedia.org.sixxs.org 访问中文维基了哦~
6.如果以后常用的话,把 /usr/local/gw6c/bin/gw6c 加进rc.local吧 :)

参考资料: http://www.apol.com.tw/ipv6/ipv6-tb-1.html (windows及其他平台的方法也请看这里)

修改了下lunar-applet的源代码

lunar-applet是一个可以显示农历的软件,我一直是用这个代替原来的时钟的。最近把panel改成透明的了,而且壁纸的颜色比较深,这样一来,黑色的时钟文字在深色背景下看起来就有点累了.刚好,TX兄发现了修改applet时钟颜色的方法,可以自己写HTML定义颜色等.但是那个是针对原版的applet的,在lunar-applet上实验了下,居然无效,有点郁闷了.
好在linux下,一切都是自由的,居然原来无效,那就自己加上这功能吧,于是找来源码,自己修改了一些,嘿嘿,实现了想要的功能:

gconftool-2 --set --type string /apps/panel/applets/applet_2/prefs/format "custom"
gconftool-2 --set --type string /apps/panel/applets/applet_2/prefs/custom_format '<span color="#ee1111">%Y-%m-%d %A <b>%H:%M:%S</b></span>'

效果:
lunar-applet
如果有需要,可以放出修改后的源码或者deb包. (其实是因为本人至今都不知道怎么用patch和打deb包…)

HOWTO:ubuntu下刻录VCD

下载的动画片,想给邻居的小孩子刻录成VCD,好在他家的VCD机上播放,倒还真费了我不少功夫.为了避免后人走弯路,写点经验出来给大家分享.
其实最繁的倒不是刻录本身,而是视频格式的转换上.
刻录工具,搜索一下源,基本定位在 mkvcdfs(包含在vcdtools这个包里)和 cdrdao(包含在cdrdao包里).但是mkvcdfs命令需要的mpg格式,我下载的视频是avi格式的,于是一开始用 mencoder 转了N次,不管怎么转,mkvcdfs都不认,呵呵,就在我觉得没希望的时候,突然想到了ffmepg,man了一下,居然有 -target vcd 这样的参数,哈哈,真是 踏破铁鞋无觅处,得来全不费功夫啊.
现在知道mencoder转应该也是可以的,但是VCD对视频/音频编码方式,帧率,分辨率等都有非常严格的要求,所以mencoder的参数很难配.而ffmpeg的 -target vcd 参数,则可以一次性设置这所有的参数,很是方便.
现在贴上步骤:

工具安装:都是apt搞到: sudo apt-get install ffmepg vcdtools cdrdao

ffmpeg -i 1.avi -target vcd 1.mpg #转换第一个视频
ffmpeg -i 2.avi -target vcd 2.mpg #转换第二个视频
mkvcdfs 1.mpg 2.mpg #将视频合成,生成镜像文件,此命令会在当前目录生成一个 vcd_image.bin 文件(二进制镜像),和一个 vcd.toc 文件.后面的命令要用到后者.
sudo cdrdao scanbus #扫描刻录机在哪个接口上,这里输出:

  1. $ sudo cdrdao scanbus
  2. [sudo] password for lily:
  3. Cdrdao version 1.2.2 - (C) Andreas Mueller
  4.   SCSI interface library - (C) Joerg Schilling
  5.   Paranoia DAE library - (C) Monty
  6.  
  7. Check http://cdrdao.sourceforge.net/drives.html#dt for current driver tables.
  8.  
  9. Using libscg version 'ubuntu-0.8ubuntu1'
  10.  
  11. 1,0,0 : MATSHITA, DVD-RAM UJ-850S , 1.20

注意最后面一行的 1,0,0 的字样,最后一步就用这个命令刻录:
sudo cdrdao write –device 1,0,0 vcd.toc
这里的 –device 后面要用上面的输出代替.执行完了,就OK了,拿到VCD机上试试看吧!

遗留问题:
1.刻出来的盘到VCD机上播放,画面的最上方和最下方会有一块区域丢失,比如原本正常的字幕,只看到半行字了,而且画面有点轻微的倾斜.不知道是不是那VCD机的问题.
2.刻录出来的视频码率太高了,比我avi的源还高,导致一张VCD只能放两集,能不能降低码率,多放几集?
3.谁知道怎么刻录DVD?
有谁知道遗留问题的答案的话,千万不吝赐教哦~谢谢…

原来ubuntu liveCD也是能保存数据的

这其实不能算是个新特性,因为据说6.06以后的liveCD都支持,只是提及的人不多,这里介绍一下:
我实验用的是 ubuntu-7.10-desktop-i386.iso,先在VBox里面新建了一台虚拟机.
用上面的iso做光驱,启动虚拟机,把虚拟机的硬盘划了个1G多的主分区 (/dev/sda1),应该不是主分区也没关系.
然后执行 e2label /dev/sda1 casper-rw 设置该分区的卷标为casper-rw,这步是必须的,因为内核是根据这个卷标来找保存数据的分区的.
然后重启虚拟机,再启动liveCD的时候,按F6键,加如图所示的内核参数 persistent
内核参数
启动以后,安装点什么东西,保存点文件之类的.
然后再重启,也加上额外的内核参数, 再进系统之后,发现安装的软件和保存的文件都还在.哈哈
在看看现在的分区情况,/dev/sda1并没有挂载到那个挂载点,应该是直接被内核用做特殊设备了,gparted上显示一个叹号加个锁,而且已使用空间都看不到…足以显示此分区的特殊性了.
分区情况
意义:
此方法不仅适用于硬盘的分区,也可以是u盘或是移动硬盘的的分区,所以有兴趣的话,,甚至可以免安装使用ubuntu,哈哈…
相关连接:
http://forum.ubuntu.org.cn/viewtopic.php?t=103990&highlight= 在这里再次感谢skyx

How To: 用ubuntu Desktop LiveCD测试新电脑

本文介绍了到电脑城买电脑的时候,如何用ubuntu LiveCD测试电脑的方法.同时适用于台式机和笔记本电脑
测试目的:
1.核对电脑的配置,以免被奸商骗了.可能现在随着大家电脑知识的普遍提高,敢堂而皇之用赛扬冒充奔腾的并不多了,但还是小心为好.
2.测试电脑的硬件和linux的兼容性,如果你打算以后装linux的话,这点尤为重要.
ubuntu Desktop LiveCD的获得:
方法1.从 http://www.ubuntu.com/getubuntu/download 下载,然后自己刻录.不推荐用 alertnate CD.
方法2.到 https://shipit.ubuntu.com/ 申请免费的CD.
注意得到光盘后,最好都先确认一下光盘的正确性,以免到了电脑城读不了盘.
具体测试步骤:
对于组装的台式机,也许刚组好电脑的时候,还是裸机,最好在他给你装电脑城版的ghostXP前,进行如下步骤,以免浪费彼此的时间和感情:
Step0:开机进入BIOS设置,选择从光驱启动电脑.放入准备好的光盘,重启.
Step1:出现ubuntu界面的时候,可以按F2,选择语言为 中文(简体) ,虽然即使选择了中文,进系统后仍然是大片英文,嘿嘿,此步骤可选.
Step2:启动或安装ubuntu,注: 如果连ubuntu的图形界面都进不去的话,建议直接走人,买了这电脑,以后估计会很郁闷.
Step3:看看电脑的基本信息是不是和期望的一样:
cat /proc/cpuinfo 看看你的CPU,这里要注意这几个: 如果商家声称是双核的话,会有 processor : 0 和processor : 1 两个CPU; 另外 cache size 的值就是所谓的二级缓存.
cat /proc/meminfo 看看内存容量,(有谁知道怎么看内存的频率和存取速度)
sudo fdisk -l 看看硬盘容量,这个也可以在 system-系统管理-partition Editor 里面看到,图形界面,更直观
Step4:进阶信息:
输入 lspci :会输出一些PCI设备的情况,可以看到一些显卡/网卡/ide控制器等的信息.
也可以输入 lshw 看这些信息.
Step5:测试显卡
这步就比较麻烦了,如果你的机器是intel的集成显卡,那么你现在用的分辨率就应该是比较理想的最佳分辨率,可以试试跑一下 glxgears ,现在的集成卡应该能跑个1000FPS左右.
如果你是N卡或者A卡,由于现在显卡的驱动还不对,glxgears 可能还跑不到1000,由于装了显卡驱动要重启,而重启的话,liveCD又不能保存信息,所以这个没有更好的办法了,除非你当场安装一个ubuntu…
另外,由于ubuntu7.10已经集成了compiz,所以liveCD里面也可以试一下:system-首选项-外观-visual effects ,看看能不能选到 Extra,如果选到Extra了,可以拖动一下窗口,应该有果冻效果了,另外最小化 的时候也应该有动画效果了.
Step6:测试硬盘速度
输入: sudo hdparm -t /dev/sda 过一会儿就显示
/dev/sda:
Timing buffered disk reads: 110 MB in 3.05 seconds = 36.06 MB/sec
之类的信息,这个值,笔记本的话,应该在35MB/sec以上,台式机硬盘最好能达到50MB/sec.可以多测试几次取平均值.
Step7:快捷键测试:
这点基本上是针对笔记本用户,就是试验一下控制音量大小的按钮和背光的按钮有没有用啦,num lock和数字键是否正常,可能还有些其他的键,比如控制无线网卡的键之类的.
另外有些台式机用户的键盘可能有诸如打开浏览器之类的按钮,也可以测试一下,现在ubuntu大部分也能支持(就是打开firefox),嘿嘿.
Step8:杂项
看具体配置,例如有的本本集成了读卡器,可以带一张SD卡,现场读一下.
可能还有无线网卡,也可以输入 ifconfig 看看有没有.
还有插入耳机后,会不会耳机音箱同时发声等等小问题.尽可能考虑全面点.
对了,测试声音的话,桌面上就有个Examples文件夹,打开第一个就是个mark的视频,直接双击打开,即可以测试声音,也可以测试一下放视频卡不卡(记得最大化一下,看看效果),嘿嘿.
Step9:液晶坏点测试
能顺利通过以上这些测试,应该说基本上就没啥大问题了,下面还有一步很重要的,液晶坏点测试,非液晶当然就跳过.
方法: 在 system-首选项-会话-current Session里面,选中 gnome-panel 点击remove 和 apply,去掉上下两个面板.再删掉桌面上的两个图标.关掉所有打开的窗口.右键点空白的桌面,Change Desktop Background 在 wallpaper里面选第一个,单色,然后在下面选择颜色的地方,分别选成 白色,黑色,红色,绿色,蓝色.仔细观察屏幕,看看有无坏点和彩点.没有的话就恭喜你了.这里也提一下,好像什么什么标准里面定义的是3个一下坏点都是合格的,但是,虽然合格,保证会看得你很不爽,嘿嘿,所以买的时候还是小心为好.
Step10:关机测试
这是最后一步,由于上面已经把所有的窗口和面板都关了,所以现在直接按 ctrl+alt+backspace 结束了X,然后又重启了,等10秒钟,ubuntu用户会自动登录,这时候就又有面板了,点击关机按钮,选择关机,快好的时候,会提示取出光盘,然后按enter键,如果你按了enter键之后能顺利断电,那么恭喜了,你的电脑顺利通过了最后一关的测试.

以上只是我初步想到的一些步骤,欢迎大家补充.

临时增加swap的方法

我的机子物理内存是1G,当时装系统的时候,以为也不会运行很多程序,于是只分了500M左右的swap.
但是后来,因为种种原因,导致系统缓存不够(主要是因为开了VBox和eclipse两大东东,加上ff和compiz之类的),又不想去动分区结构,怎么办呢?办法当然是有的:

  1. lily@LLY:/home$ sudo dd if=/dev/zero of=swapfile bs=1024 count=655360
  2. 记录了 655360+0 的读入
  3. 记录了 655360+0 的写出
  4. 671088640 字节 (671 MB) 已复制,18.6445 秒,36.0 MB/秒
  5. lily@LLY:/home$ file swapfile
  6. swapfile: data
  7. lily@LLY:/home$ sudo mkswap swapfile
  8. Setting up swapspace version 1, size = 671084 kB
  9. no label, UUID=789730ee-9dcb-4143-8a5c-bbdff938c5a6
  10. lily@LLY:/home$ file swapfile
  11. swapfile: Linux/i386 swap file (new style) 1 (4K pages) size 163839 pages
  12. lily@LLY:/home$ sudo swapon swapfile
  13. lily@LLY:/home$ free -m
  14.              total       used       free     shared    buffers     cached
  15. Mem:          1002        982         19          0          3        250
  16. -/+ buffers/cache:        728        273
  17. Swap:         1126        486        639

解释一下,dd那命令其实就是新建一个约640M的空白文件,注意这里不推荐用其他方法建立文件,因为作为swap的文件不能有空洞(应该就是所谓的碎片吧).
mkswap是在那个空白文件的基础上,建立swap的文件系统,可以看到之后的file命令输出就不一样了.
然后在用swapon命令激活,一切都是那么简单.
另外,如果想让更改永久有效的话,还需要修改一下 /etc/fstab 文件,否则重启后就要再执行swapon命令激活一次.

(++i)+(++i)+(++i)+(++i)

今天,看到一个面试题,居然无聊到这种地步,看这代码:

下载: test.c
  1. #include&lt;stdio.h&gt;
  2. main()
  3. {
  4. int i=1,j;
  5. j=(++i)+(++i)+(++i)+(++i);
  6. printf("%d\n",j);
  7. }

问输出的j是多少。。。虽然知道这个很无聊,但是反正闲着也是闲着嘛,就研究了下,执行

lly@LLY:~/test$ gcc test.c
lly@LLY:~/test$ ./a.out
15

这我就不懂了。。。再看看objdump的结果:

lly@LLY:~/test$ objdump -d a.out
...省略若干
8048385: c7 45 f4 01 00 00 00 movl $0x1,0xfffffff4(%ebp)
804838c: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
8048390: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
8048394: 8b 45 f4 mov 0xfffffff4(%ebp),%eax
8048397: 03 45 f4 add 0xfffffff4(%ebp),%eax
804839a: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
804839e: 03 45 f4 add 0xfffffff4(%ebp),%eax
80483a1: 83 45 f4 01 addl $0x1,0xfffffff4(%ebp)
80483a5: 03 45 f4 add 0xfffffff4(%ebp),%eax
80483a8: 89 45 f8 mov %eax,0xfffffff8(%ebp)
...省略若干

里面的0xfffffff4 是变量i,0xfffffff8是j,可以看出现在是先把i自加2次,再取出两个i的值相加(这时候两个i的值都是3),再执行后面的,也就是 3+3+4+5 = 15。不解,于是用了另一个编译器(小型的tcc)编译,执行,结果就不一样了:

lily@LLY:~/test$ tcc test.c
lily@LLY:~/test$ ./a.out
14

也看看关键的汇编代码:

....
80481ed: b8 01 00 00 00 mov $0x1,%eax
80481f2: 89 45 fc mov %eax,-0x4(%ebp)
80481f5: 8b 45 fc mov -0x4(%ebp),%eax
80481f8: 83 c0 01 add $0x1,%eax
80481fb: 89 45 fc mov %eax,-0x4(%ebp)
80481fe: 8b 4d fc mov -0x4(%ebp),%ecx
8048201: 83 c1 01 add $0x1,%ecx
8048204: 89 4d fc mov %ecx,-0x4(%ebp)
8048207: 01 c8 add %ecx,%eax
8048209: 8b 4d fc mov -0x4(%ebp),%ecx
804820c: 83 c1 01 add $0x1,%ecx
804820f: 89 4d fc mov %ecx,-0x4(%ebp)
8048212: 01 c8 add %ecx,%eax
8048214: 8b 4d fc mov -0x4(%ebp),%ecx
8048217: 83 c1 01 add $0x1,%ecx
804821a: 89 4d fc mov %ecx,-0x4(%ebp)
804821d: 01 c8 add %ecx,%eax
804821f: 89 45 f8 mov %eax,-0x8(%ebp)
...

可以看到这里面的-0x4(%ebp) 是i,而 -0x8(%ebp)是j。而之前的两次自加操作分别是在 %eax 和 %ecx 上执行的,第一次相加操作就是直接把这两个寄存器里面的值加在一起了。所以最终的效果相对于 2+3+4+5 = 14 。
这样的结果说明了同样的C代码,在不同的编译器下,会产生完全不同的可执行文件,当然如果你的源代码写得不好,完全有可能产生不同的执行结果。另外也再一次说明了这样一个面试题的无聊性,作为反面教材还差不多,嘿嘿。

BTW: 有兴趣的朋友还可以自行研究一下 (++i)+(++i)+(i++)+(i++)+(++i) 的执行结果。

awk手册 简体中文版

原文:应该是 http://phi.sinica.edu.tw/aspac/reports/94/94011/ 但是原文很乱.

说明:之前也是对awk几乎一无所知,无意中看到这篇文章,网上一搜,居然没有像样的简体中文版.有的也是不怎么完整,或者错误一大堆的.于是就顺手整理了下这篇文章.通过整理这篇文章,自己也渐渐掌握了awk的种种用法.

原文可能比较老,有些目前已经不适用的命令有所改动,文中所有命令均在ubuntu7.04下调试通过,用的awk是mawk.

由于本人能力有限,错误和不妥之处在所难免,欢迎多多指正.

html版:
http://linuxfire.com.cn/~lily/awk.html
http://bones.3322.org/awk.html (偶尔)

========20090729 update========
linuxfire的服务器也挂了,上面的地址都不能用了,只能传到本站给链接了…