星期五, 十二月 21, 2007
virtualBox安装配置(arch)
添加用户到组:
sudo gpasswd -a username vboxusers
添加内核模块(vboxdrv)到rc.conf
重启系统,ok
另外可以用virtualBox的无缝模式(ctrl+L),这很酷.可以很方便的在linux下用迅雷下载东西了.有人问:如此,为何不直接用win来呢,省得还这么麻烦.但是在linux下工作的时候,不方便切换系统,就可以这么做了.
星期六, 十二月 15, 2007
更换了home目录
sudo mkdir /mnt/newhome
sudo nano /etc/fstab
添加/dev/sda8 /mnt/newhome ext3 defaults 0 0
重启系统,把/home目录拷贝到/mnt/newhome中。我按照的这里来拷贝的home目录,结果是无法修改自己目录里面的任何文件了。可以先把挂载的/mnt/newhome目录设置权限为读写。然后用当前用户来执行如下命令:
find . -depth -print0 | cpio --null --sparse -pvd /media/newhome/
再次修改fstab,
/dev/sda8 /home ext3 defaults 0 0
之后把/home清空。重启系统即可了。
另外因为以前常用tomboy来做笔记,不过因为启动太慢,感觉太重了,所以换成了xpad。呵呵
星期五, 十一月 23, 2007
关于fluxbox无法开启透明效果原因
Here are some things to check:
1. You must be running a Fluxbox version 0.9.2 or newer. 0.1.x does not contain transparency support.
2. Fluxbox must be restarted for changes in the alpha value to take effect (just choose restart in the menu).
3. You need to have the XRender extension enabled in X, and compiled into fluxbox. Running fluxbox -i and xdpyinfo | grep RENDER should both say "RENDER".
4. You must have set the background with an XRender-compatible tool. fbsetbg comes with fluxbox and tries to make this easy for you, try it (the web page also has list of transparency supporting background tools). Run fbsetbg -i to see if it can find a suitable tool.
所以安装feh,之后重新fbsetbg设置壁纸即可了。
星期一, 十一月 19, 2007
我的坏毛病(坏习惯)
走路时:不停的往前甩脚。
鼻子是歪的。
嘴巴也有点歪。
说脏话。
总是惹她生气,惹她烦。
不会关心她。
总是认为自己做的是正确的。
小心眼。
皮笑肉不笑。
白头发太多。
所以她就整天和我说,你有毛病啊,你待四啊,你靠边去吧。(组合句:你靠待四啊。)
星期五, 十一月 16, 2007
E16原来也不错
这次在arch上用了E16,中文化一点问题都没有,完美的显示。速度相当不赖,可以和fluxbox相媲美了。如果需要的话,你还可以打开透明效果。呵呵~
截几副效果图给看看:
菜单
整个桌面
星期四, 十一月 15, 2007
星期一, 十一月 05, 2007
arch安装ssh后的配置
sudo ssh-keygen -t rsa
把key保存为/etc/ssh/ssh_host_rsa_key
同上,生成一个dsa的key,ssh-keygen -t rsa
修改sshd配置文件/etc/ssh/sshd_config,把Protocol 2处的key地址给取消注释。
运行/usr/sbin/sshd即可。另外修改/etc/rc.conf,把sshd加到daemons就可以跟随系统自启动了。
星期三, 十月 31, 2007
ubuntu on colinux
解包镜像,启动镜像,配置网络,用的是tuntap模式,做如下设置:
vim /etc/network/interfaces
注释slirp模式,打开tap-win32模式,如下
auto eth0
iface eth0 inet static
address yoyoliyang.yo2.cn
netmask 255.255.255.0
gateway 192.168.0.1
注意colinux中的eth设备数。我这里的是eth0,或许你的是eth1,两者只要统一就可以了。
之后修改DNS
vim /etc/resolv.conf
把nameserver修改成192.168.0.1
网络就配置好了,修改apt源,更新系统。安装vnc或者是ssh之类就可以在win下和colinux“远程控制”了。
如果要添加共享文件,可以在colinux的配置文件里面添加一个cofs的设备,把该设备添加到到/etc/fstab,就可以自启动挂载了,共享非常方便。如下
在colinux的配置文件里添加如下:
cofs0="yourLocal"
修改/etc/fstab,将cofs0添加进去
cofs0 /mnt/windows cofs defaults 0 0
搞定。
另外在colinux的console里面是不能显示中文的(抑或是我无法解决?),只能用putty来通过ssh显示。不过效果不错。
另外详细的安装过程可以看我以前弄的几篇colinux配置手记,附有screenshot。
我把ubuntu的6.06镜像给升级到了gutsy,启动后没有任何问题。另外昨天得了肠炎拉肚子,拉了一天。唉,最难受的不是得病,而是得了病没人关心你。无奈ing...
附带ubuntu gutsy on colinux的screenshot:
星期四, 十月 25, 2007
中国的强大!
如果这样搭配,
国家 主席:李世民
军委 主席:成吉思汗
军委副主席:毛泽东
人大委员长:孙中山
国务院总理:诸葛亮
外交 部长:周恩来
外交部发言人:宋美龄
国防 部长:曹操
教育 部长:孔子
卫生 部长:华佗
环保总局局长:老子
农业 部长:贾思勰
水利 部长:大禹
建设 部长:秦始皇
地质 部长:张衡
公安 部长:展昭
国土资源部长:徐霞客
发展与改革委员会主任:商鞅
最高人民法院院长:包拯
国家禁 毒署署长:林则徐
妇联 主任:武则天
新闻出版署署长:纪晓岚
后勤 部长:李连英
中东特使:张骞
台湾事务办公厅:郑成功
海关总署:郑和
文化部长:唐伯虎
拆迁办主任:孟姜女
计生委主任:唐僧
医务 处长:李时珍
航空航天部部长:嫦娥
国家跳水队队长:屈原
等咱中国强大了,全叫老外考中文四六级!文言文太简单,全用毛笔答题,这是便宜他们。惹急了一人一把刀一个龟壳,刻甲骨文!论文题目就叫:论三个代表!到了考听力的时候全用周杰伦的歌,《双截棍》听两遍,《菊花台》只能听一遍。告诉他们这是中国人说话最正常的语速!阅读理解全是政府工作报告,口试要求唱京剧,实验就考包粽子。考死他们
星期三, 十月 24, 2007
Arch0.8安装笔记
启动内核:
root (hd0,5)
kernel /vmlinuz
initrd /initrd.img
boot
启动后,在控制台挂载ISO所在分区以及ISO文件:
mkdir /sda6
mount /dev/sda6 /sda6
mount -o loop -t iso9660 /sda6/*.iso /src
启动安装程序
/arch/setup
自己动手分区并选择安装包,配置rc.conf之类不再细述.
之后重启,更新系统
pacman -Syu
安装配置xorg,pacman -Sy xorg-server
用xorgconfig来配置自己的显示卡.把dri和glx打开.
进入X的时候如果出现无法载入鼠标或者是键盘模块,那么用pacman搜索安装即可了.比较简单.另外鼠标的滚轮如果没法使用可以看这篇.
配置声卡,我在这里耗了一个下午,原来是权限问题-_-!
安装驱动
pacman -Sy alsa-lib alsa-utils
配置alsa
alsaconf
设置音量
amixer set Master 75 unmute
amixer set PCM 75 unmute
将用户加入audio组
gpasswd -a USERNAME audio
启动时保存设置
alsactl store
之后将alsa添加到rc.conf中的daemons即可了.
配置中文,编辑/etc/locale.gen,将zh*全部取消注释.运行locale.gen,修改rc.conf把开头的默认的en_US.utf8改为zh_CN.utf8.
另外安装字体:pacman -Sy ttf-arphic-uming ttf-fireflysung中文就可以搞定了.
基本的安装配置算是结束,其他的软件用pacman来安装就行.或者是到aur.
星期五, 十月 19, 2007
vmwareServer On kernel2.6.22-14
vmware1.0.3for x86,vmware-server-kernel-source
vmware-any-any-update
sudo dpkg -i vmware-servers-kernel*.deb
rm -rfv /usr/src/modules/vmware-server-kernel/vmnet-only
tar zxfv vmware-any-any-update114.tar.gz
sudo tar xfv vmware-any-any-update114/vmnet.tar -C /usr/src/modules/vmware-server-kernel
编译vmwareServer内核驱动模块,sudo module-assistant build vmware-server
sudo dpkg -i /usr/src/*.deb(编译生成的二进制包)
之后后可以安装下载来的vmware-server的deb包了。如果出现依赖问题,自行解决就好了,比较容易。另外提供几个序列号:
9A56D-Y656F-24J3N-4R7VD 90NDE-YD14Y-24JC5-4T0H4 98N6X-YDJ4Y-2D0C0-4RMAT 98MDX-Y61FG-2FM1M-4R4J5 9A0FW-Y4J6F-2DN3N-4KL35
星期五, 十月 12, 2007
升级到了gutsy
测试了一下,everything works well~
把fluxbox也给更新了,右键菜单变了。另外scim输入法升级后(抑或是fluxbox升级的原因),托盘图标也变清晰了。放个screenshot:
星期一, 十月 01, 2007
星期一, 八月 27, 2007
arch安装手记
尽管安装的时候麻烦了不少,但是后来才发现,arch确实不错,觉得用arch比用ubuntu方便,但是ubuntu却是桌面做的相当好的版本了----因为是几乎不用再去做什么配置了,那下来就能用,比较适合linux新手----虽说越简单,越不用自己再去花时间配置的linux系统是不适合学习linux的。
装了两遍arch,硬盘安装真的很方便哈.安装两遍的原因是,首次安装的时候把内核升级到了2.6.22,重启系统后,内核载入到一半就halt了.出现如下提示:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
刚开始我还以为是用了reiserfs文件系统的缘故.后来重装了一遍系统,然后再次更新系统后,又出现了同样错误.郁闷.
本来打算重装,但是后来想到可以再次用arch的安装盘来重新安装旧内核.我先把/boot/{vmlinuz26,initrd26.img}和/lib/modules/*给rm掉,然后在arch的安装控制台里mount原来的文件系统,之后跳到install kernel选项里,重现安装内核,搞定了.呵呵
之后配置什么的就好弄了.安装几个中文字体竟然就可以很漂亮无须再去配置中文.比ubuntu里面配置字体方便.觉得arch太简洁了.速度相当的快,我安装了xfce4.
另外在配置网络的时候出现了点小问题,我的是adsl,在pppoe-setup的时候以为输入用户名和密码就可以了,没有输入DNS.害的我还要到win下查看DNS.麻烦.
配置X,可以先弄个hwd来做好xorg的配置文件,但是我没有。因为原来在ubuntu的时候把原来的xorg给备份了,所以可以用xorgconf来逐步写入xorg.conf。就是有点麻烦,但是即使是使用hwd也是还要重新把显卡驱动模块给写入到配置文件里。而且尽管是有点麻烦,但是照着原来的xorg配置备份还算很简单的。弄好了就可以使用3D加速了(看来我的16Msavage显卡真的很垃圾)。
输入法本来打算用到fcitx,但是还是用了scim,因为我修改.xinitrc文件后在gtk下还是没法用fcitx。
ps:我的savage显卡下Xorg配置步骤
xorgconfig命令下逐步配置,弄好xorg.conf文件后,把鼠标section处修改成如下(避免无法使用中键滚动页面):
Section "InputDevice"用pacman来安装显卡驱动模块,
Identifier "mouse1"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
EndSection
pacman -S xfree86-video-savage #修改成自己的驱动
然后打开
Load "glx"
Load "dri"
以及修改模块位置为
/usr/lib/xorg/modules
保存,重启X即可。
以及升级内核后出现VFS错误问题解决方法:
grub引导时使用kernel26.img替换initrd26.img来启动.
星期三, 八月 22, 2007
pidgin可以登录QQ了
可是给我造成了登录QQ就必须输入验证码的程序,这下pdigin完了,我只得使用eva一段时间。但是我今晚升级了pidgin2.1.1后竟然绕过了验证码(抑或是我的Q无须再输入验证码了?),呵呵,这下总算可以用pidgin这个简洁的Q程序了。
另外关于升级feisty后(gusty都快发布了)我的savage显卡问题(IBM t23)的另一个解决方法。前面的两个方法是,卸载savage驱动,然后降低feisty的源到edgy,之后从新安装savage驱动。也就是使用旧的xorg驱动罢了;再就是自己编译最新的内核,就没有问题。
另外一个方法是更新源到gusty,安装ubuntu版2.6.22-9的linux-image。这样就不会有问题了。
星期三, 八月 15, 2007
slax弄到"移动硬盘"里去
解包ISO,有两个文件夹,boot,slax
cp -avf /boot /mnt/sda1,拷贝grub到移动硬盘,我把我ubuntu下的给拷贝了过去,因为slax默认为lilo启动,所以并不自带grub.
cp -avf boot/* /mnt/sda1/boot ,拷贝slax的启动内核
cp -avf slax /mnt/sda1,拷贝主文件.
之后安装grub到sda1的mbr
控制台下输入grub,进入c命令模式:
root (hd1,0)修改menu.lst
setup (hd1)
添加如下:
title slax6ok
kernel (hd1,0)/boot/vmlinuz max_loop=255 init=linuxrc load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=15000 root=/dev/ram0 rw vga=791
initrd (hd1,0/boot/initrd.gz
星期一, 八月 13, 2007
S端子转个AV接口
但是实际上可以用S端子线转换为AV视频接口,只需要接上一个电容器就好了。
Y-接地--------------------+
+---------- RCA/composite ground(RCA接地端)
C-接地--------------------+
Y-訊號--------------------+
+--------- RCA/composite video(RCA訊號端)
C-訊號-------||-----------+
470pF
左边的是4针S端子,右边是AV线。很简单了,把Y,C,和AV的接地线都连到一起,在C线接上一个470pF的电容就ok。
1 Y 接地 2 C 接地 3 Y (luminance+sync)訊號 4 C (crominance訊號
小时候拆卸的东西很多,从收藏室里翻出来一个破旧的电话机子,找了找,竟然找到了一个0.47uF的电容,呵呵,真凑巧呢。可以用的上了。
发现s端子的4根线,去掉两根接地线,还有一根C讯号接电容的线,剩下的一根信号线(Y讯号)竟然没地方接了,留着吧 -_-
弄好了,接到电视,转到AV,调试一下笔记本,哈,电视出来了笔记本的桌面,不过画面很抖动啊,分辨率的问题,设置一下就ok了,另外把显卡中的电视机制式改为NTSC。
相关文档:如何制作简易的S-video转AV端子的转换线
Powered by ScribeFire.
tinyXP啊
可惜的是我大舅不会用linux系统。
cpu:赛扬300;64M的内存,8G硬盘,集成显声网卡。
可见98年的电脑是什么样子的了(没法,时代进步么,科技进步么),还花了一万块钱(汗 -_-!),不过想当年我用他这台电脑玩拳皇的时候还觉得蛮不错的,那时候用的是win98。
厌恶了微软win98的blue screen,安装win2k声卡就有问题(我估计是没有安装主板的驱动,没有再次测试),安装winxp吧,就特别的卡,8G硬盘空间,64M内存啊,装XP,也太委屈这台电脑了 -_-!
一直用了两年的winME,这台破旧电脑,今天总算可以稳定的跑起来了,我给它安装了tinyXP,就是xp的精简版,竟然用着还算不错。那张花的很厉害的海信驱动光盘竟然可以顺利的把驱动给安装进去。呵呵~
这下好了,不会再次出现频繁死机的问题。系统总算给稳定下来,然后顺便做个gho备份,这下我总算是放心了——之前不知道多少次去给大舅弄电脑。
感谢xp精简版...
ps:我一直在想,什么时候大舅把这台电脑送我做个debian的服务器来用用,换个硬盘做个文件服务器也不错啊:-)
星期二, 八月 07, 2007
用slax快速定制一个自己的linux系统
下载slax6的预览版,或者是fanx2.0,因为我们要用到fanx的中文模块。
因为我没有win系统,所以在linux中用mount挂载ISO,之后拷贝boot和slax到任一分区的根目录。用grub来启动该liveHDD(具体可见fanx.org.cn)。
我用的是slax6,之后把fanx的中文模块以及eva之类的模块放到了base目录.或者是安装完毕slax后,从slax的官方下载大量的模块来安装.这就是为什么能够迅速定制我们需要的linux系统了.
启动到slax的live系统中后,到slax.org下载一个叫做Slax-installer From C-lite的slax安装模块(系统中原来自带的salxInstaller好像不能用了).把slax安装到用cfdisk划分出的空闲空间中去.
修改grub,从新启动slax的real模式.
因为我的机器中有了一个ubuntu,所以可以不用再次创建交换分区了,slax和ubuntu用一个交换分区就够了。只需要激活就ok。
swapon /dev/hda7 //注意自己的交换分区位置
然后添加swap,(不过貌似只要激活了swap,slax就会自动把swap添加到fstab)
在fstab添加如下:
/dev/hda7 none swap sw 0 0
另外估计在浏览原来机器中其他linux的Ext3分区时会出现乱码,可以用如下方法来配置.
修改/etc/profile.d/lang.sh,
将export LC_ALL=zh_CN.gbk中的gbk修改为utf8.这样就搞定了浏览ext3时的乱码问题。
好了,我们可以开始安装swaret了。这个是好东东。
wget http://jaist.dl.sourceforge.net/sourceforge/swaret/swaret-1.6.3-noarch-2.tgz
installpkg swaret-1.6.3-noarch-2.tgz
然后稍微修改下swaret的配置文件:
cp /etc/swaret.conf.new /etc/swaret.conf
kwrite /etc/swaret.conf
修改VERSION=9.1为VERSION=current
更改DEP_ROOT为DEP_ROOT=http://swaret.sourceforge.net/libraries-$VERSION
更新系统
swaret --update
swaret --upgrade -a
swaret --dep
然后就可以用swaret来安装一些常用的软件了.或者是到slax.org来下载模块,然后转换成lzm格式安装到系统中.slax.org中的模块很多,安装非常方便.
这样以来我们就算是定制完成了基于slackware的slax了.很方便,而且是很迅速的.
PS:个人看来,既然在QT中,就不要再用像是gtk的pidgin之类的东西了,我个人感觉在gtk下eva很不稳定,而在Qt下,不知道gtk程序稳定不呢,但是至少scim比较麻烦.
另外从配置ubuntu到配置slax,因为slax太方便了,安装配置也很简单,所以我甚至有点不习惯了。另外slax启动也非常快,虽然是KDE,但是速度一点都不慢,尽管我个人比较喜欢用fluxbox。
星期一, 七月 30, 2007
为自己的笔记本定制内核
本来内核比较复杂的是选项问题,看了个内核选项的文档,比较有用,尽管是2.6.19的。不过具体是自己可以灵活使用的。
我编译的内核为2.6.22。
之前有过升级edgy到feisty后的显卡问题,解决了。最近我更新的时候又给弄回去了。但是切换到最新编译的内核时却没有问题。
不过有个问题没解决,新内核无法使用virtualBox的内核驱动。添加了virtualBox的源,然后从新更新了下,能用了。
还有就是无法使用控制台了,已经提交了bug,还不知道算不算bug呢~
有用的文档
http://www.armsystem.com.cn/article/ARM9-article/system/200704390570.html
星期日, 七月 29, 2007
ubuntu On AMD64
昨天到大舅那里把寄来的ubuntu光盘拿回来后,就迫不及待的开始安装了,本来是打算安装32位的系统,结果看到里面有张for64位的光盘,就安装了64位的系统。结果是比较郁闷。
先是安装速度太慢,从liveCD启动到安装结束估计用了1个小时,开始时打开firefox,竟然无法找到flashplayer的插件,后来安装上了,安装步骤竟然那么复杂。然后是在编译pidgin时出错,最后终于编译成功了,结果是QQ无法登录。
另外是AMD64的deb包很少,安装一些软件还要自己编译,忒麻烦了阿。
最主要的是在像是fluxbox这样的轻量级桌面环境下编译软件都卡的要命,一旦是遇到编译软件或者是从源里安装软件,就拼了命的卡。累死我吧 :-(
真想不到安装64位的linux会有这么多的问题,在linuxtoy上问了下,说是64位的系统会比32位的消耗两倍的内存,我256内存肯定不够,然后就借助交换空间,硬盘狂转,结果就是非常卡。
我只得从新安装32位了,为了一边聊天,一边配置,我先在刚装完的系统里安装了ssh,然后用本本借助ssh用源来安装一系列软件包以及系统配置。感觉挺方便的。
ps:昨天我下载了mandriva的ISO,准备硬盘安装的么,试了几次都失败了。尽管内核启动起来了,但是就是找不到ISO,我估计是initrd的内核不对。
比较麻烦,曾经硬盘安装ubuntu的时候把分区表给弄毁了,后来硬盘出现错误,直到把整个硬盘分区给格式化了才恢复过来--可怜我里面的数据。昨天硬盘安装mdv的时候,又出现了在magicPartition中无法分区的错误,好像是error#701?忘记了...用DM也不行。还好有个slax的启动盘,可以用到cfdisk,很容易的就给整好了。
ps2:貌似我现在的笔记本硬盘根本无非用DOS下的磁盘分区工具来划分,整个磁盘错误。只能用linux下的fdisk之类来弄。现在比较钟爱的是cfdisk,超级好用啊。
星期四, 七月 19, 2007
照片墙
这真的很好。
我看来,平常人家基本都把相片放到相册里面去了,甚至于几乎是没时间来翻开相册来看以前的照片的。有的甚至于都忘记,淡忘掉了曾经的画面纪录。
我爸把照片贴到了墙上,不论是这几年的,还是好久以前(我妈结婚之前的照片都有呢,呵呵)
,挑选了几个代表的照片给贴上去。这样,平常都可以看到照片了。感觉很好。
像我这个年龄不是怀旧的时候,但是一些照片对我印象却是非常深刻,我看着看着照片,生活过的真快。转眼老妈的皱纹多了起来,不过老爸却是有了啤酒肚。
这个照片墙真的很好,记录了这几年的光景。令人感想很多...
这篇算是老妈的文章的后记。
更多老妈的文章看云天你好的博客。
星期四, 七月 12, 2007
feisty apt sources.list
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-updates main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-updates main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-backports main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-backports main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-security main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ feisty-security main restricted universe multiverse
星期三, 七月 04, 2007
妈妈的散文
后来三姨又给我妈弄了sohu.然后老妈就开始有空就写写博客了,也算是"博人"了.
真想不到妈妈写的文章很好,散文系列的,读起来很有味道呵~我非常喜欢,挑选了几篇很好的文章转载到我的博客里面了.
非常好的文章,都是写的平常的小事.而且是记录家里的一些随笔,像我这样在外地上学的人读了老妈的文章,感觉有一种思念的味道.
老妈的文笔非常好,属于朴实的那种,加之我个人非常喜欢汪曾祺和贾平凹的文章,老妈的文章应该算是此类的吧.
希望妈妈多写文章,等写多了,就发表几篇吧,大家一起读读,一起读读妈妈写的好文章.
星期六, 六月 23, 2007
colinuxOnWindows2k
首先是设置网络共享的时候,出现了错误,之后重启了电脑,多次点击共享,总算能够共享给colinux的网络了,然后竟然没有"共享指使的小手"在本地网络上 :-(
另外,启动colinux的时候出现了问题,先是安装了colinux0.7.1,发现按照台湾人写的配置文件无法启动,后来还是按照colinux的wiki来弄的,wiki是写了个bat的批处理启动,我用的是按照example.conf来写的配置文件。发上来:
kernel=vmlinux
cobd0="z:\root.fs"
cobd1="z:\swap.fs"
cofs0="z:\tmp"
root=/dev/cobd0
ro
initrd=initrd.gz
mem=128
eth0=tuntap
root,swap,以及一个和win共享的目录,colinux和win共享非常方便和简单!在colinux目录下cofs里有详细使用说明(E文)。
这里有个非常简单的方法:如上我的配置文件,添加一个cofs0的目录,如
cofs0="your local"
之后修改fstab,添加如下
cofs0:your local /mnt/windows cofs defaults 0 0
这样一来就可以挂载win目录到/mnt/windwos下了,
网络设置是个麻烦地儿,NAT方式是很方便的,所以用到这种方式,抱歉我不会win2k下设置网桥 :-(
安装colinux后,出现的本地连接2自动将IP设置为了192.168.0.1,然后将本地连接设置共享给本地连接2,之后开启colinux,进入debian系统(我下载的是debian4.0的1G硬盘镜像),如下修改
nano /etc/network/int*
可以按照我的修改(把其它的全部注释掉,只保留如下):
# Second network (tap-win32)
auto eth0
iface eth0 inet static
address yoyoliyang.yo2.cn
netmask 255.255.255.0
gateway 192.168.0.1
之后设置DNS:
nano -w /etc/resolv.conf
把DNS设置下就ok了,可以在win下用ipconfig /all查看。
之后依次ping host,外网,以及网关,如果都ping的通,说明搞定了。能上网了,debian就可以很爽很痛快的使用了,之前用了vmware来安装了debian,那个慢啊,还是colinux启动快!速度很爽。
关于中文输入问题,我安装了locales,然后配置了默认的locale,还是没法输入和显示中文,估计是因为colinux的默认控制台问题。但是用了putty确可以显示和输入中文,所以就这样用着吧。
结合了Xming,还算不错,另外我在colinux里面编译了pidgin,竟然可以使用,现在只是输入法(没法输入中文)和汉字问题(汉字有大有小,很不规范)了。
星期一, 六月 11, 2007
安装了windows系统
刻盘安装了tinyXP,是个XP的精简版,不过太精简了,以至于CMD下连个ipconfig命令都没有,最主要的是搞了一晚上IE还是没法打开QQ空间,无论怎么设置IE的安全级别都不可行。
另外看在硬盘空间可怜的份子上,安装了Win2K_SP2。
显卡驱动方面下了点功夫才弄好,主要是安装显卡后无法打开Direct3D加速,原来是没有安装主板芯片组驱动。搞了半天才找到问题的答案。不容易~
平衡球可以玩了,而且比在xp下玩的顺畅,另外整个系统运行速度还算可以的,比xp快多了。还算不错。
所以看来还是离不开windows的。暂且用着2k吧。
ps:暑假回家后我又把win2k给格了,格式化之前我连考虑都没考虑。win在我心目中咋就这等地位?尽管我为安装win2k的驱动而费了不少的功夫,无奈ing。
另外平衡球我总算把13关给弄过去了。哈哈~
星期六, 六月 09, 2007
ubuntuEdgy apt-sources.list backup
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-updates main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-backports main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-backports main restricted universe multiverse
deb http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-security main restricted universe multiverse
deb-src http://ubuntu.csie.ntu.edu.tw/ubuntu/ edgy-security main restricted universe multiverse
# ClearType patches
deb http://www.telemail.fi/mlind/ubuntu edgy fonts
deb-src http://www.telemail.fi/mlind/ubuntu edgy fonts
#E17
deb http://SeerOfSouls.com/ edgy e17
deb-src http://SeerOfSouls.com/ edgy e17
#other software
deb http://asher256-repository.tuxfamily.org edgy main dupdate french
deb http://asher256-repository.tuxfamily.org ubuntu main dupdate french
deb http://files.beep-media-player.org/packages/ubuntu edgy main
deb-src http://files.beep-media-player.org/packages/ubuntu edgy main
Xfce4
deb http://ubuntu.tolero.org/ edgy xfce-4-4-0
deb-src http://ubuntu.tolero.org/ edgy xfce-4-4-0
#E17
deb http://edevelop.org/pkg-e/ubuntu edgy e17
#BT
deb http://hydr0g3n.free.fr/qbittorrent/edgy/ ./
deb-src http://hydr0g3n.free.fr/qbittorrent/edgy/ ./
#audacious media player
deb http://static.audacious-media-player.org/ubuntu edgy main
deb-src http://static.audacious-media-player.org/ubuntu edgy main
#virtualBox
deb http://www.virtualbox.org/debian edgy non-free
星期日, 六月 03, 2007
debian etch源
deb-src http://ftp.tw.debian.org/debian/ etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
deb-src http://security.debian.org/ etch/updates main contrib non-free
星期六, 五月 19, 2007
Xen On Edgy
从源里安装内核支持及文件
sudo apt-get install xen-hypervisor-3.0-i386 xen-image-xen0-2.6.17-6-generic-xen0 xen-utils-3.0 xen-ioemu-3.0
如果运行的是server内核,那么
sudo apt-get install xen-hypervisor-3.0-i386-pae xen-image-xen0-2.6.17-6-server-xen0 xen-utils-3.0 xen-ioemu-3.0
如果是AMD64位处理器,那么使用 xen-hypervisor-3.0-amd64替换 of xen-hypervisor-3.0-i386
生成initrd image,使用如下命令
sudo mkinitramfs -o /boot/xen0-linux-2.6.17-6-generic-xen0.initrd.img 2.6.17-6-generic-xen0
添加Xen启动段到 /boot/grub/menu.lst:
title XEN/2.6.17
root (hd0,2)
kernel /boot/xen-3.0-i386.gz
module /boot/xen0-linux-2.6.17-6-generic-xen0 root=/dev/xxx ro
module /boot/xen0-linux-2.6.17-6-generic-xen0.initrd.img
"xxx"为你的启动分区,我的为hda3,故上为(hd0,2) root=/dev/hda3
PS: 1,on amd64, use xen-3.0-amd64.gz instead of xen-3.0-i386.gz
2,kernel and modules may need to have the /boot removed From them to get this to work. ie
kernel /xen-3.0-i386.gz
修改Xen的网络配置文件/etc/xen/xend-config.sxp,添加如下段
(network-script network-bridge)
If you are going to use the network-bridge, you must have the bridge-utils package installed (else your bridge won't be created by the network-bridge script and you will get an error like 'Error: Device 0 (vif) could not be connected. Hotplug scripts not working.' when attempting to start your DomU). To install it, run the following command:
sudo apt-get install bridge-utils
The later domU examples assume that you use a bridged networking using device xenbr0. If installing bridge-utils doesn't fix this, try moving the file /etc/udev/xen-backend.rules to /etc/udev/rules.d/10-xen-backend.rules
ok,重启系统
关于建立虚拟机以及启动
提到了三种方式来创建,分别是use loopback-mounted-file,和磁盘分区,以及vmware虚拟磁盘和qemu.这里说明我用的方法,也就是第一中方法。本来打算用第二种方法的,主要是我磁盘空间并不富裕了,从新分区会比较麻烦。如下创建了一个基本的edgy的guest系统
创建虚拟磁盘文件:
sudo dd if=/dev/zero of=/usr/local/diskimage-guest.ext3 bs=1024k seek=4096 count=0
格式化磁盘文件
sudo mkfs.ext3 /usr/local/diskimage-guest.ext3
note:会提示说不是一个设备文件,不用管他,选择y继续。
挂载该虚拟磁盘
sudo mount /usr/local/diskimage-guest.ext3 /mnt -o loop
安装debootstrap
sudo apt-get install debootstrap
安装edgy基本文件到虚拟磁盘
sudo debootstrap edgy /mnt
拷贝内核模块
sudo cp -a /lib/modules/2.6.17-6-generic-xen0/ /mnt/lib/modules
卸载虚拟磁盘
sudo umount /mnt
Configure the guest, create /etc/xen/edgy-guest.cfg
kernel = "/boot/xen0-linux-2.6.17-6-generic-xen0"
ramdisk = "/boot/xen0-linux-2.6.17-6-generic-xen0.initrd.img"
builder='linux'
memory = 128
name = "edgy-guest"
vcpus = 1
vif = [ 'bridge=xenbr0' ]
disk = [ 'file:/usr/local/diskimage-guest.ext3,ioemu:hda1,w' ]
root = "/dev/hda1 ro"
First start xend if it is not already started:
xend start
Now you can create your xen domain
sudo xm create edgy-guest.cfg
You can connect to the guest using
sudo xm console edgy-guest
星期日, 五月 06, 2007
可恶的网通&linux下突破共享破解方法
偶尔找到一个关于tor的文章,用了起来,真的不错,只用到3个东东,firefox的torButton插件以及tor和privoxy。
先安装tor和privoxy,从源里安装就好了,并修改然后配置文件:
nano /etc/privoxy/config
在文件开始加上一行:
forward-socks4a / localhost:9050 .
安装firefox的torButton插件,之后重起firefox即可了。
两个插件:foxyproxy,torbutton
星期三, 四月 25, 2007
Linux下文件关联的实现原理
我们知道在Windows下,
双击一个可执行文件,文件管理器会自动运行这个应用程序。而双击一个数据文件时,文件管理器会用与之关联的应用程序打开它。数据文件与应用程序之间的关联
是通过注册表来实现的:文件管理器查询注册表,找到数据文件对应的应用程序,然后运行这个应用程序,并把数据文件的文件名作为命令行参数传给它。
这种文件关联的方式非常好用,省去了先起动应用程序再打开文件的麻烦。Linux下的桌面环境也有类似的功能,而且实现方式更合理。最近负责开发一个资源管理器,本来GNOME有一个功能强大的资源管理器Nautilus,只是它过于庞大,不但有超过10万行的代码,还依赖于libgnome、gnome-vfs和CORBA等,故不适合于嵌入式应用。最终我们决定自己开发一个简化的资源管理器,但又要尽量兼容现有的应用程序,这要了解相关标准,文件关联方式是其中之一。把这几天学到的知识做个笔记吧,供有兴趣的朋友参考:
首先让我们看看文件关联要做些什么。
1. 数据文件与应用程序的关联。一个应用程序通常只能打开一些特定的数据文件,比如图片浏览工具可以打开PNG、BMP和JPEG等图片文件。打开一词的意义比较宽泛,这里包括:打开、播放、安装、编辑和打印等等。
2. 文件类型信息。资源管理器把数据文件列出来时,通常会用一个图标来标识这类文件,同时也会加上一个简短的名称,以便用户可以很容易把它与其它类型的文件区分开来。
下面我们看看linux下是如何实现的。
1. 判断文件类型。文件的数量是无限的,我们只能按文件类型来处理。如何判断一个文件所属的文件类型呢?可能有人会说,很简单,用扩展名区分就行了。没错,用扩展名可以做到,但这种方法有两个缺陷:一方面它不是很精确,相同扩展名的文件的类型可能完全不同,比如dat文件,可能是一个视频文件,也可能是一个普通数据文件。另一方面它不是很准确,扩展名可以任何改动,为了某种目的,完全可以把exe扩展名改为htm扩展名。
而且在Linux下扩展名只是一个可选项,很多文件根本没有扩展名,所以纯粹采用文件扩展名的方式来判断肯定是不行的。为了更好的判断文件类型,在linux下同时采用两种方式:优先采用magic方式,其次才采用文件扩展名方式。所谓magic方式,就是根据文件内容来判断。绝大多数文件,内部都有一些特定的标记,这些标记称为magic,比如BMP图片文件以BM两个字符开头,BM就是一个magic。虽然即使采用了双保险机制也有误判的可能,但概率已经大大降低了。
2. 文件类型的表示。
文件类型如何表示呢?我们说JPEG是图片文件,说txt是文本文件,WML是XML文件。这种分类很直观,但也有几个问题:对JPEG文件来说,称它图片文件太笼统了。有的图片浏览工具虽然能够打开大部分图片文件,但不一定能打开所有图片文件,它需要更详细的文件类型信息。对txt和WML来说,它们其实都是文本文件,有的编辑器可能以同样的方式处理它们。为了避免分类太细或者太粗,linux采用了MIME(可以参考相关RFC)规范,它用一种层次型的方式来分类,如:
JPEG文件:image/jpeg
文本文件:text/plain
XML文件:text/xml
这种分类方式就可以粗细兼顾了。
3. 文件类型的数据信息。
在linux下,关于文件类型的信息通常放在/usr/share/mime、/usr/local/share/mime和用户目录下,所有应用程序可以共享这些信息。在该目录下,一般会有以下这些文件:
l aliases:文件类型的别名。比如application/pdf 有时也称为application/x-pdf 。
l magic:各种文件的内部标识,用于从文件内容来判断文件类型。如BMP图片文件以BM开头。
l globs:扩展名与文件类型的对应关系。如*.cpp文件是text/x-c++src类型的。
l packages目录:用于安装新文件类型用。
l 其它子目录及其下的文件:更详细的描述各种文件类型。比如image下的jpeg.xml文件描述了jpeg文件类型。为了方便国际化,这些描述信息有各种语言版本。
4. 图标文件与数据文件的关联。
在资源管理器中,通常用不同的图标来区分不同的文件类型。同时图标也是桌面主题相关的,主题不同,图标的大小和外观也不一样。图标文件通常存放在/usr/share/icons/主题/大小/mimetypes目录下。
文件类型与图标文件的对应关系是通过文件名来实现的。比如,JPEG文件对应的图标文件为gnome-mime-image-jpeg.png。
(这块不是很确定,有待进一步研究)
5. 应用程序与数据文件的关联。
应用程序与数据文件的关联是通过.desktop文件来实现的。应用程序要出现在开始菜单中或者桌面上,它要提供一个desktop文件才行。应用程序安装之后,desktop文件通常安装到/usr/share/applications下。
可以在desktop文件中,指明其可以操作的文件类型。如,软件包安装程序可以操作rpm文件,它的desktop文件(system-install-packages.desktop)内容为:
[Desktop Entry]
Name=Install Packages
GenericName=Install Packages
Comment=Install new packages on the system
MimeType=application/x-rpm;
Exec=/usr/bin/system-install-packages %F
Terminal=false
Type=Application
Icon=system-config-packages.png
Encoding=UTF-8
NoDisplay=true
MimeType项指明它可以操作rpm类型的文件。
Linux比windows的做法科学之处。
1. Linux采用了双保险机制,对文件类型的判断更正确,出错的概率更小。
2. Linux分离文件类型判断信息和文件关联方式,这样文件类型信息可以被重用。比如file命令可以用这些信息来判断文件类型,而不必打开它。
参考资料:
http://standards.freedesk......ed-mime-info-spec-0.13.html
http://www.freedesktop.org/wiki/Standards_2fAddingMIMETutor
~~end~~
星期日, 四月 22, 2007
.gtkrc-2.0
#设置gtk界面
include "/home/yang/.themes/Synthesis/gtk-2.0/gtkrc"
#设置图标主题
gtk-icon-theme-name="OSX"
#设置字体
style "gtk-default-zh-cn" {
font_name = "Bitstream Vera Serif 10,Bitstream Vera Serif 10"
}
class "GtkWidget" style "gtk-default-zh-cn"
星期日, 四月 15, 2007
Edgy安装gfxboot启动画面
用到的两种文件,一个是grub-gfxboot_0.97-5_i386.deb,一个是主题包。
安装方法:
0、sudo apt-get remove grub
1、sudo dpkg -i grub-gfxboot_0.97-5_i386.deb
2、sudo apt-get install gfxboot
3、把SUSE下的message文件cp到自己的/boot下
4、sudo cp /boot/grub/menu.lst /boot/grub/menu.lst_bak #备份原来的menu.lst
5、sudo vi /boot/grub/menu.lst,在timeout=??下一行加入:
gfxmenu (hd0,2)/boot/messageps.按照你自己的/boot所在位置更改上面的分区位置,我的在第二分区。
6、sudo grub
>find /boot/grub/stage1
>root (hd0,1)
>setup (hd0)
7、sudo grub-install hd0
之后重启就可看到美丽的启动画面了。呵呵~
PS:从这里可以下载到好玩的penguins这个游戏的启动画面,很有趣。
星期三, 四月 11, 2007
All4one-A-H
[coolplayer width="480" height="380" autoplay="0" loop="0" charset="utf-8" download="1" mediatype=""]
http://www.youtube.com/watch?v=KQMqc7rMyqE
[/coolplayer]
星期二, 四月 10, 2007
完全用GNU/Linux工作(转)
——————————————————————————————————————————
理解 GNU/Linux
“UNIX 是简单的,你不需要成为天才也能理解这种简单。”
由于GNU/Linux这个词太长,下面如果没有特别指明,“Linux”就是指“GNU/Linux”。
在这个年代,恐怕没有人需要我来介绍 Linux 是什么了吧?如果你觉得“Linux 只不过是跟 DOS 差不多的东西”,那你恐怕很久在山洞里没见天日了吧?请问问你旁边的 Linux 用户,Linux 到底是个什么地位?
那为什么我还要写一篇这样的文章?因为,我发现还有很多人不不理解 Linux 和 UNIX,虽然他们也在用它,但是他们有时会问:“为什么 Linux 不能像 Windows 那样 ……?”,“怎么Redhat Linux不能 mount NTFS 分区!”,“Linux 下用什么整理硬盘?”,“什么时候OpenOffice才能完全兼容Word文件啊?”,“现在还有什么Windows能干的事情Linux干不了的?”……
他们有40G的硬盘,却只为 Linux 分配了2G空间,有时还抱怨“这个东西怎么占这么多硬盘!” 似乎 Windows 该占用大部分硬盘。他们把重要的数据装在Windows的分区,似乎信不过Linux。他们总是到处寻找新奇的,好看的GUI程序,对命令行的东西一概不屑一顾。他们对Drag&Drop,菜单配置,自动升级非常感兴趣。他们如果找到一个很像 Windows 程序的 Linux 程序,一定会很高兴的说:“哈哈!Linux 也能……了!” 如果Linux在某种测试中胜过Windows,他们会高兴得跳起来。他们没有办法用Linux解决问题的时候,甚至用Wine来运行Windows程序。有时实在没办法,只好重起到 Windows,或者干脆省得麻烦,在 Windows 下装一个 VMWare 虚拟一个 Linux 玩。
你支持 Linux,你喜欢 Linux,你能从中感觉到快乐,这非常好。你现在只需要明白的是:Linux 从来就不是一个玩具,它是天才UNIX的后代。UNIX 是自晶体管发明以来最伟大的发明,它从诞生那一天开始就比 Windows 的设计出色。Linux 并不需要追赶 Windows,不需要打垮微软,它的最终目标是改变整个计算机世界,还人们自由,给人们乐趣和方便。其它UNIX很多都已经败在Linux脚下,更何况 Windows!
你如果出现了以上的情况,说明你的思想受到了 Windows 的某种潜移默化的影响和误导。你没有能够从本质上理解存在于 Linux 身上的 UNIX 思想。UNIX的设计者 Dennis Ritchie 说:“Unix is simple. It just takes a genius to understand its simplicity.” 但是我不这么认为,因为我不是一个天才,但是我却勇敢的把Windows完全删除掉,半年之后我体会到了 UNIX 的思想和好处。因为我相信这样的信念:“Windows 能办到的事 Linux 一定能办到,而且办的更好。”
这小节开头的话应该改成:“Unix 是简单的,但是在这个冲斥着 Windows 错误观念的世界,你需要信念和勇气才能理解它的简单!” 我下面就告诉你一些我理解到的东西。
微软的地位
微软的名声在欧洲和美国的大学里,特别是在计算机系里之坏,大家可能有所耳闻。我认识的 MIT,Stanford 的教授,贝尔实验室的专家,甚至一个欧洲小国的高中计算机老师都绝口不提微软的名字。在他们眼里,微软只是一个没有真技术,专靠在落后国家商业宣传和垄断经营的小公司。这个“小”并不是说它人少,钱少,而是说它先进技术少。
我上次和王益合作写了一个算法演示程序,那个算法是贝尔实验室一位科学家Steven Fortune很天才的发明,为了程序能够被身边大多数人使用,我们选择了 VC+MFC 作为平台。我在分析算法时还得到 Fortune 很热情的鼓励,寄给我一份资料,还多次回信耐心的给我讲解了很多细节。但是程序完成之后,我把样品发给 Fortune,他回信说:“对不起。我机器上没有 MFC。” 话说的很客气,但是我已经感觉到了他对 Windows 的不屑。然后我把 MFC 静态编译进程序再发给他,他就没有再回信了。他显然不是瞧不起我,而是确实有难处。
你能感觉到这位科学家对微软和 Windows 是什么态度了吧?不是反感,而是他心里根本没有 Windows 这个东西!微软在高科技领域没有发展,那么它怎么生存呢?到发展中国家去发展一下,他们的人民还对电脑一无所知,我说不定甚至可以打入大学的计算机系呢。我送他们软件,我捐钱盖大楼,我找图灵奖获得者来演讲!
好了,现在全国的大学包括清华,几乎所有人机器必装盗版 Win2000, Office XP,学校的选课系统是非IE不能正确浏览,论文用 Word 编辑,演示用ppt做,连 863 项目都用 VC 写程序了。我很久以前就看到一份报纸说,“微软为什么不严厉打击盗版?” 这篇文章说,微软非但不打击中国的盗版行为,而且有放任之趋势。放长线吊大鱼,“以后我要你们加倍的来还我!” 确实如此,它的目的快实现了。
Windows 笼罩下的中国计算机教育
说句丢脸的话,比尔盖茨很久以前是我的偶像…… //blush
在中国,比尔盖茨被很多人奉为神圣,“少年电脑天才”,甚至有的人提到他的名字就做出“抱拳对天”的姿势。很多人谈到微软的“新技术”,“高科技” 都是眉飞色舞。各种“VC编程圣经”,“深入了解 Visual C++”之类的书,在开头几页都会出现非常肉麻的字眼,“在那团团的混沌中,一个开天辟地的精灵,Windows 1.0,诞生了……”
微软的软件被这么多人盗用,那么人们是怎样使用这些盗版程序的呢?先看看电脑培训班,教的都是一些 DOS 命令,打字,Windows 基本操作,Word 文档处理,PowerPoint,高级班可能有 Excel,Access…… 参加各种微软认证考试,MCSE, MSDE 的人络绎不绝,考试辅导班都贴出了“280元。考过为止”之类的字样,考试参考资料更是昂贵,有些电脑书店整整两书架都是“Microsoft Press”的东西。我有个同学参加认证考试,每门考试都要200多元,而且你一次考不过再考,又要交钱。他后来还津津乐道跟我说,看我,花了XXXX (一个四位数)元考过了微软认证,得到一张比尔盖茨亲笔签名的证书和价值6000元的 Windows XP 内部发行版。
“电脑要从娃娃抓起”,我们再来看看娃娃们学的是什么。大部分家长给孩子买了电脑之后,他们首先就会装一个盗版的 Windows,然后买来盗版的游戏开始玩。如果哪个孩子会用 Delphi 编程序,那可不得了。报社记者,电视台争相报导,说,某某学校的初中生某某,在别人都还在玩电脑游戏这种“初级阶段”的时候就已经用 Delphi 写程序了。镜头还瞄准了他显示器上面的像框中的比尔盖茨头像!
我刚进入大学计算机系时还不懂得什么是操作系统,因为我以前只用过“中华学习机”。看到新入学的同学们各个谈论的都是 “Windows 95”,“VC”…… 我简直觉得我落后了好几十年一样,整个一土人,根本跟他们答不上话。好不容易找到一个比较熟的同学问了一下:“你们天天谈论的瘟95是什么啊?”答: “win95就是一个操作系统,跟DOS是一类。”“朵死是什么?” “你连DOS都不知道是什么?别在计算机系混了。” 学校上课当然不讲VC编程之类的东西,但是上 Pascal 的老师有一次就说:“嗨,我们学校真是落后。现在别人都用 C, C++,甚至 VC 了,我们还在讲 Pascal。不知道什么时候才能有VC课啊。你们出去也是要用VC的,只好自学了。” 有些同学很多时候上课都捧着一本很重的“Windows 编程大全”之类的书,根本没有听课,吃饭时就念念有词的跟我说,“代码的优化是无止境的”,“匈牙利命名法真是伟大的发明” …… 这就是中国很多大学计算机系的情况。
感觉到无知了?这不是偶然的,而是微软长久以来的如意算盘。它要让无知的大家都把它奉为神圣,它要让支持UNIX, Xwindow的人一旦说 UNIX 好,Xwindow 好的时候,都被一群人围着说教:“这个 Windows 也能做到”,“你对 Windows 有偏见”,“微软才是主流啊”,“你敢瞧不起 win2k?”,“.NET 就是世界潮流”,“微软的毕竟是新技术”,“有钱就是有技术”…… 甚至在一番论战比较后败下来还是要说:“Windows 性能差点,但是易用性强”,“Windows 是老百姓用的,要求别那么高”,“微软那么有钱,以后想超过 UNIX 还不容易吗?”……
发达国家的计算机教育
我前段时间在 USENET 发文问有关 Scheme 语言的问题时,认识了一位丹麦人。他解决了我所有的问题,并且建议我阅读一些很“深奥”的有关程序语言语法,文法的书,他告诉我很多网站可以学习 LISP,Scheme,人工智能,算法。他叫我看 Jonathan Rees 的论文。他还打包给我寄过来一份 MIT 的 "How to Design Programs"。他说他在自己的 PC 机上装的是 Linux,他用 Emacs 编辑,运行 Scheme 程序。他对 Emacs 的了解和爱好真是使人惊讶。他大学本科毕业时做的毕业设计是一个 Scheme 解释器。这对于我来说是望尘末及了。
他是那么的不厌其烦,我的每一个问题他都详细的回答。我有时都觉得过于详细了,怎么这么耐心啊?我觉得他似乎是我的高中老师。他是什么样的人呢?我好奇的打听了他的情况。原来,她是丹麦一所普通高中的计算机老师!注意我换了人称代词!
她说她在高中里讲授程序设计和算法,计算机语言文法分析。她说用 Scheme,她的学生不用再为指针越界,内存泄漏等程序语言本身的问题而烦恼,而专注于问题和算法本身。有利于培养学生解决问题的能力,特别是用计算机解决数学问题的能力。
天哪!为什么欧洲出现那么多数学家,几何学家?你看看别人重视的是什么!我们的计算机教育如果继续这样下去,只会沿着弯路越走越远!
微软和它的朋友们的如意算盘
下面来看看微软的收入是怎么来的。首先,Windows 98系列操作系统,一个就是 100 多美元,每次升级又是几乎同样的价钱。Windows NT 还要贵几倍,而且有用户数目限制,5个用户的,10个用户的…… 以后如果要增加用户数目还要按比例付钱。这个奇怪的现象被通用汽车公司的总裁比喻为:“你买的微软牌汽车最开头只有一个座位,每加一个座位你得向汽车公司付钱,每开100英里要大修一次,每过一年要换一次引擎。”
花了如此多钱买来的操作系统就能用了吗?它竟然连压缩程序都没有提供!你装上 Windows 之后一般第一件事就是去下载一个 WinZip 吧,“只要 29 美元”。Windows 会中病毒啊,马上花 70 美元买一个 Norton AntiVirus 吧。还有黑客呢?再买一个 Norton Internet Security 好了,100 美元。系统需要优化,磁盘需要整理,买一个 Norton System Works 是你最佳的解决方案,100美元。
可是你现在还是不能干正事啊!你想要一个 Word, PowerPoint?那就买一套 Office XP 吧,一起买便宜些,$459.90。
那些程序不会用啊!那些菜单怎么设置,到底有什么功能啊?看“帮助”也学不会。买本书看看吧,我推荐“Special Edition Using Microsoft Office XP”,不贵,$27.99。这本书里面大部分是屏幕抓图,还是买一本旧的比较划算,$17.85。
你如果只是当个秘书,上面的差不多还凑合了。可是你有更高的追求,你想成为 Windows 程序员。首先买一个 Visual Studio.NET 吧,要不然怎么编译程序。$494.95。
为了紧跟微软动向,世界潮流,不能不注册个 MSDN 什么的吧?这个贵一点,不过物有所值啊,$2,799。
嗯,你现在已经是上层阶级,白领人士了。你现在可以像这样“自由”的,“安全”的生活了:
什么是 Windows 能干而 Linux 干不了的事情?
“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”
有个朋友看我半年没有用 Windows,有时就会问我:“你只用 Linux,有没有发现有些 Windows 能处理的事情 Linux 干不了?”
我回答说:“Windows 能干而 Linux 干不了的事情,那就是不需要干的事情。”
Windows 能做的有益的事情 Linux 都能做
Windows 下的某些功能确实是我们需要的,那么 Linux 的开发者们和用户也需要这种功能,他们就会去实现这种功能,而且比 Windows 的方式好得多。由于大多数科学家,工程师用的都是 Linux 或者某种商业 UNIX, 所以几乎所有商业的科学工程程序,比如 Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant! 的……全都是先有 UNIX 的版本(包括Linux),然后再考虑移植给 Windows,甚至根本不移植给 Windows,因为 Windows 的机器一般没有足够的能力运行这样的程序。你不要以为只有 Windows 才有 PSpice, UNIX 的 HSpice 要好得多,而且可以运行在大型主机上。当然它们不是免费的,但是它们值那个价钱。
但是 Windows 下有些东西在 Linux 下没有很相似的,或者你找到很多类似的,但是它们每一个比起 Windows 的那个程序都要差很多,那么原因有两种可能性:
有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。
而其它程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于 Gtk+, Qt 的诞生,Linux 下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序。如果你整天寻找这样的程序挑来挑去,永远也找不到你满意的。
我曾经也犯过这样的错误,优秀的 FVWM, lftp, Mutt, wget 都被我忽略过!当我找回它们的时候,我是那么的羞愧不已,它们现在都是我的朋友 用这些程序你可以改变它们的一切,我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西。可是现在,我的同学看到 FVWM 都说:“哇!真漂亮。”
有另一种完全不同的方式可以达到相同的目的,甚至更好。
很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个 Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你永远也不可能有那一天。为什么呢?因为微软为了占有市场,必定不会让其它系统的程序能够完全兼容它的文档格式!它一定会不断变化 doc 文档的内部结构,隐藏一些秘密,让其它公司的程序打开 doc 文档时总是有某种问题,从而你必需购买 Microsoft Office 和 Windows。
你应该想一下,那么多的高智商的大学教授,科学家,学生,他们用的都是 Linux 或者其它类型的 UNIX,他们没有 Word 可用,怎么处理文档呢?这么多年没有一个像 Open Office 的程序出现,难道大家没有办法写文档吗?
显然不是这样。你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的PDF幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff, LaTeX, SGML 等东西可以处理文档,而且它们比起 Word 都要高明的多。Word 显然被这些大拿忽略了,以至于很久以来没有人想在 Linux 下开发一个类似 Word 的程序,除非某些公司想抢微软的饭碗。
很多人留着 Windows 在硬盘上的原因无非是为了用 Word 和 PowerPoint。你待会儿可以看看我的TeX网页,你就会知道为什么我可以完全离开 Windows.
Windows 能做的那些没用的事情 Linux 永远做不好
电脑游戏
有些人说 Linux 下不能玩 Windows 下所能得到的所有游戏。的确,Linux 下虽然也有少量的游戏,比如 Quake。但是它没有 Counter Strike, 没有 Star Craft, ……
并不是说电脑游戏不该玩,但是应该适可而止。电脑是用来处理事务,帮助你学习,解决问题的工具,而不是一个玩具!整天沉迷于电脑游戏中,而不出去感觉外面的世界,你会变得越来越冷酷,越来越缺乏人情味。你与真实的世界越来越远。
你可以在 CS 里杀人,你可以在 Tomb Raider 里探险,你甚至可以在 Tony Hawk's Pro Skaters 里滑板…… 但是 It's not real!你虽然有很高的“反恐技巧”,但是遇到歹徒的时候,你是那么的怯懦;你虽然控制 Laura 伸手敏捷,但是你打篮球的时候怎么总是被人断球?你虽然可以轻易的在 THPS 里作出一个 "360 kickflip to hangten grind to fakie",但是你踩在自己的滑板上的时候还不会 ollie!
说回来,如果你偶尔玩一下电脑游戏未尝不可。但是世界上有远比 Windows + PC 更好的游戏方式。Sony 的 PlayStation2, SEGA 的 DreamCast, Nintendo 的 N64,Namco 的街机……每一个都比 Windows 游戏精彩,每一个都有如此高的3D性能,以至于 Pentium4, Itanium + GForce4 都无法与它们比美!
Linux 的用户们都是关心解决世界的关键问题的份子,他们哪里有时间用自己的机器来玩游戏啊?他们每天用Linux高效的做完自己的工作就到阳光下享受自然去了。要玩游戏也是玩一些类似推箱子,贪吃蛇之类的智力小游戏。所以,你知道为什么 Linux 几乎没有游戏了吧?
“整理硬盘,优化系统”
这是一个非常有意思的话题,仅次于有关“病毒”的话题。相信很多 Windows 用户都有整理硬盘的经历。在很多 Windows 用户眼里,“硬盘用久了,会出现碎片,速度会减慢,需要一个程序来整理,整理硬盘的时候不要做其它工作”,这好像是天经地义的事情。
我也曾经津津有味的看着 Norton Defrag 一点一点的把我的硬盘排序,调整,用图形的方式显示出来,然后报告:“100% 没有碎片。你的硬盘现在已经达到最佳状态。” 我现在才发觉我那时是多么的幼稚。
Linux 和 UNIX 用户似乎从来没有“整理硬盘”这种说法呢?你觉得很奇怪吗?如果你觉得很奇怪,那说明你的思想在某种程度上被微软的垃圾程序禁锢了。你需要明白,UNIX 的大型主机很多必须是一天24小时,一年365又1/4天不停运转的,要是每个星期都要整理一次硬盘,在整理的时候几乎不能干任何事情,那是绝对行不通的!
Linux 机器根本不用整理硬盘,这就是为什么没有看到过 Linux 用户整理硬盘。Linux 的文件系统是比 Windows 的 FAT, FAT32, NTFS 高明得多的文件系统,它们不但可以对文件设置权限,实施完全的保护,而且可以“越用越整齐”,“越用碎片越少”!你应该把文件大部分放在 Linux 的分区,而不是 Windows 分区,因为它比 Windows 分区可靠得多。
还有更滑稽的事情就是有很多“Norton System Doctor”,“Windows 优化大师”,“超级兔仔注册表魔法” 之类的程序存在,而且价格昂贵。似乎一个操作系统本来应该有很多问题,需要别的厂商做程序来“优化”它,而且为了得到优化,你需要付钱!这些问题 Linux 根本就没有,所以不需要什么优化。Linux 内核本身就是高度优化的。
IDE
有些人在抱怨为什么 Linux 没有一个良好的 IDE 开发环境。Linux 现在已经有一些 IDE 了,但是总是有很多问题。你是不是正在寻找,正在期望 Linux 某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用 IDE?你说:“IDE 开发迅速,调试方便,适合大型程序……” 那说明微软的程序在你脑子里已经比较根深蒂固,你需要好好清醒一下了,看看我来告诉你。
高明的 UNIX 程序员不用 IDE,IDE 从来就是给初级 Windows 程序员用的。
你看看大型的 UNIX 程序,包括 Linux 内核,各种网络服务程序,Xwindow 程序在内,哪一个是 IDE 搞出来的?我们实验室的 EDA 程序也没有一个是 IDE 弄的,我还知道 Candence, Synopsys,Mentor 的高性能的图形界面 EDA 程序也都不是 IDE 写的。你信不信,微软的人在写 Windows 本身的时候也根本不用 IDE!
有一次某杂志采访一些出名的 Linux 内核程序员,包括 Linus 在内,没有一个人用 IDE,有的人用 VIM,有的用 Emacs,只有 Linus 说“GNU Emacs is evil”,但是其实他用的是一种跟 Emacs 有同样键绑定功能的 MicroEmacs。大家都是用编辑器编辑了程序文件,然后用 make 这样的自动工具调用 gcc 编译器完成编译工作的。
我以前也编过 Windows 程序:应用程序,驱动程序。但是我没有用 VC 的 IDE。Linux 教育了我,我会在命令行调用 CL,我知道 CL 才是 VC 的编译器。我可以在 cygwin 的 Makefile 里使用 CL。我还知道 CL 的参数都有什么用处。但是这些不是一个从一开头就用 IDE 的人能很快理解到的。
我相信: IDE is evil。我有一些用 Windows 的 IDE 写程序的朋友,他们对那套东西已经很精通了。但是我却惊奇的发现,他们竟然把编译器和汇编器的概念都分不清楚,甚至有的人连“编辑器”和“编译器”都搞混淆了!他们只知道在一个窗口里输入了代码,点击一个按钮就可以编译程序,但是这里面到底是怎么工作的,他们不知道!他们被盖在上面的窗口挡住了视线,甚至会以为那个按钮就是编译器!
他们对那些 IDE 的热键背的滚瓜烂熟,但是我却看到他们在一个函数一个函数的把别人的 ANSI 风格的代码变成 VC 的风格。想想这件事在 VIM 里有多么简单,一瞬间就可以搞定。
为什么 UNIX 程序员不用 IDE?明白了这个道理你就能体会到 UNIX 的设计思想了。首先,一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器…… 这个编辑器功能肯定比不上 VIM 或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb, ddd, 跟踪器比不上 strace, ltrace, truss。你得到的是一套整合的很好的低能的程序。如果你对调试器的功能不满意,你只好换用另外一套 IDE,但是这套 IDE 的热键,菜单,编辑器功能,按钮…… 跟原来那个有很大不同。你不得不花很多时间来熟悉新的环境,而不能保持原来的某些东西。
而在 UNIX 下就不一样了。你可以用你最喜欢的 VIM 编辑程序,你在 VIM 里可以调用 GNU make,make 可以调用 gcc, ld, ... 实际上 make 能帮你很多忙。make 的出错信息可以被 VIM 捕获,VIM 能帮你在源程序里定位。你如果喜欢 icc, 你可以让 make 用 icc 而不是 gcc。你如果觉得 gdb 跟踪变量时比较麻烦,你可以用 ddd 来显示各种数据结构之间的关系。你还可以在 Emacs 里调用 gdb,那样就可以同步显示源代码了。而且 VIM 和 Emacs 还可以编辑很多其它东西,比如信件,LaTeX 文档,HTML,配置文件…… 你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin 都可以在内部使用 VIM,这样就更方便了。
释放内存
我在 Windows 下做过的一件最傻的事情莫过于“释放内存”了。有一天我看到一个 Windows 程序说:“这个程序可以帮你把大量内存释放出来给一个很大的程序用。”我试了一下,居然一下把我的 64M 内存释放出来 48M!我高兴极了。现在想一想,那是多么傻的事情,那么多的内存留着干什么?不用白不用啊!一个操作系统,居然还需要别人写的程序来释放内存,那是什么样的操作系统?
在 Linux 下用 free 命令,你会发现你的内存几乎每时每刻都快要被用完。那是因为 Linux 把大部分内存用来作为磁盘缓冲了。Linux 有比 Windows 先进的磁盘缓冲技术。你有没有发现你往硬盘写数据的时候,很快就完成了?那是因为 Linux 在内存里有很多磁盘缓冲区,你要写到硬盘上的数据先被写到了这些内存里,然后 Linux 就告诉你“拷贝完成”,当你马上又想删除刚才写入的某些数据时,Linux 只是把数据从内存里移除,然后报告“删除完成”。在一定的间隔时间后,Linux 才把数据写回硬盘,这样不但高效,避免了多次硬盘操作,而且减少了文件的不连续,也就是减少了“碎片”。Windows 当然也有磁盘缓冲,但是由于它内存管理的低效率,它不敢把大量内存都用来作为磁盘缓冲,因为它没有能力在用的时候随时把内存收回来。
Linux 能干的高级的事情 Windows 都干不了
当然有很多事情是Linux/UNIX的专利了。因为 Windows 只能装在 PC 机上,好像以前也有 Alpha 可以使用 Windows NT,但是就是没见到有人用。PC 机的能力是很低的,像我们编程序处理 NP-Hard 问题的人,用 Windows 的机器显然速度不够,而且有时一个问题算上几天甚至几个星期,Windows 机器是以“死机”著称的,我们怎么能放心?
所以几乎所有科学计算程序,EDA 程序,高性能图像处理程序都不是 Windows 的。他们有时也会移植一些给 Windows,但是常常降低那些程序的能力。你比较过 Windows 版本的 Mathematica 和 Linux 的有什么区别吗?
IBM 制造的最大的并行计算机有 8000 多个处理器,Windows 不可能有能力管理这么多处理器,它用的是什么操作系统?答案是 Linux。
《泰坦尼克号》电影里的三维动画,那么细腻逼真,Windows机器能做出来吗?不行。那也是 Linux 机器做的。
民航总局用来训练地情人员的虚拟现实训练设备,Windows 当然无能为力。那都是商业的 IRIX 机器。
UNIX 是最早支持 TCP/IP 网络协议的系统。它上面有很多可以互相协作的网络服务程序,它们经过多年的使用和修订,已经达到比较完善的程度。而就在1997年,微软的比尔盖茨还在扬言:“Internet 是没有前途的。” 微软的这个“远见卓识”大家应该都已见识,它后来加上的网络服务程序IIS漏洞之多,让公安部都频频发出警报,大家也是见识了的。
其实你知道了,Windows 没有一样有用的事情能比 UNIX 干的更好。
Linux 干不了的有用的事情 Windows 照样干不了
当然 Linux 不是万能的。它也有不能干的事情,电脑也有干不了的事情。但是 Linux 干不了的事情,Windows 肯定也干不了。这些事情就是我们需要探索,需要努力的事情了。在你探索的过程中,Linux 必定是你的好伙伴。
UNIX 的真谛何在?
让聪明人干任何他们想干的事情。
UNIX 的一个特点就是非常高的灵活性,Xwindow 也具有这种灵活性。这种灵活性体现在哪里呢?
UNIX 的程序一般都有很多参数,不管你现在用的着用不着,总有人需要某些参数。它们的行为很多都可以用配置文件来改变。比如 GNU bash, 通常缺省的命令行输入方式是 Emacs 方式,但是只要我编辑一个 .inputrc 文件,就可以把它变成 vi 的输入方式,而且我还可以自己绑定键序列到某些操作。我可以用 shopt 来设置它的很多特点,比如是否进行通配符扩展,是否可以把一个变量当作一个目录来cd,是否可以自动纠正某些明显的目录名打字错误 ……
UNIX 程序设计的思想是提供给用户“机制”,而不限制用户制定“政策”。这是一个重要的尊重用户的作法。
我们再来看看 Xwindow。Xwindow 是一个出色的设计,它把显示服务器和客户程序分开。一个显示上既可以显示本机上的程序,也可以显示别的机器上的 X 程序,而它们都遵守你的窗口管理器的统一指挥,它们之间可以方便的传送剪贴版数据,各种事件 …… 比如有时我的 XFree86 上会出现四个不同机器上的 XTerm,两个不同机器上的 GVIM,…… 它们统一受本机上的 FVWM 指挥。
Xwindow 程序都具有很多很多命令行参数和 resource 参数。你可以随意的在命令行或者 .Xdefaults 文件设置所有的颜色,字体,尺寸…… 而且如果你用 xrdb 把 .Xdefaults 导入到根窗口,那么其它机器上没有经过配置的同样的程序,显示到你的机器上的时候也会遵守同样的外观规定。
Xwindow 的窗口具有 Property, 也就是一些可以自己定义的共享数据(原子)。正是因为这些 Property 的存在,使得 Xwindow 具有无比强大的生命力。X 的窗口管理器和其它客户程序之间并没有统一的协议,但是后来出现了 ICCCM(客户程序间通信规范),这个规范就是通过 property 定义的。现在又有人定义了一套“扩展的窗口协议(EWM Hints)”,使得 Xwindow 可以具有某些 Windows 的特征,比如一个工具条程序可以告诉窗口管理器:“这个屏幕下面被我占据了24个像素的空间,你最大化程序的时候不要越过这个界线。”
一个强大的窗口管理程序比如 FVWM,它收到这样的提示时,可以答应工具条程序的这个要求,也可以不答应。一切选择的权力在于谁?当然是用户了!一切窗口乖乖听话,FVWM 给予用户最大的尊重。
你想想,是不是有些 Windows 程序常常弹出一个窗口要你选择 "Yes or No"?你不点击它它就不下去。你觉不觉得你的程序在侵犯你的尊严?你是一个人,一个智慧的生物,怎能受到一个程序如此的待遇?
还有就是很多 Windows 程序把人当成傻瓜,而它是“智能程序”。比如,有一个程序就是喜欢把你的每句话第一个字母都变成大写,我不说它是谁了,你遇到的时候就知道了。如果连“一句话开头一个字母要大写”这么明显的问题都需要程序帮你纠正的话,人脑还用来干什么?况且如果你故意想要不大写的话,那就更麻烦了,我楞是没有从它那一大堆菜单里找到怎么关闭这个愚蠢的选项。
只有符号才能完全操纵计算机。
我们来说说很多初学 Linux 的用户。虽然他们在用 Linux,但是他们打心眼儿里是觉得 Windows 的工作方式好,他们希望 Linux 有一天能“像Windows那样”。你说:“我鼠标一点,我菜单一拉,…… 就可以完成我的操作。” 但是我要告诉你:“Linux 从来没有摹仿 Windows,将来也不会。Linux 从诞生之日起,它的工作方式就比 Windows 的先进。Linux 属于能勇敢面对符号的人。只有符号才能完全操纵计算机。”
看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?
当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件和程序语言的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!而各个程序的配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。如果你用惯了 awk, sed, Perl,你会觉得那才是真正的自动化啊。
鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。
各个小程序的完美配合
这就是UNIX最重要的特点了,它就是UNIX设计的思想。让每个程序只具有一项专门的能力,然后让它们合作。Xwindow也继承了这种好传统。
这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了 vi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里“嵌入”另外一个程序。
在 Windows 和其它非 UNIX 操作系统中,这种合作是非常困难的。我曾经在 Windows 下使用 Perl来进行一些自动工作。但是 Windows 的文件操作,管道是如此的不稳定,程序之间基本不能合作。你别想在 Visual Studio 窗口里面嵌入 UltraEdit 编辑器,你别想用一个 expect 脚本来控制 telnet 到水木清华BBS,这就是为什么 helloooo 诞生在 Linux 而不是 Windows。我曾经试图从 Windows + Exceed + SecureCRT ssh 登录到 Sun 机器,然后通过 ssh 的隧道(X11 tunnel)把 X 程序传到 Exceed 上运行,但是搞了两天都没有成功!而在 Linux 下这个事情根本就是不用怎么配置的,OpenSSH 和 XFree86 本来就是完美结合,只要打开 ssh 的 "forward X11" 选项就什么都搞定了。
Windows 的程序都是大而全,大而杂,所有的电子邮件程序都需要自己提供编辑器,自己发送和收取邮件,自己显示邮件的附件。每一个BBS程序都提供自己的 Virtual Terminal, 自己的通讯代码。每一个 IDE 都自己提供编辑器,编译器,汇编器,调试器。人们为了使用一种新的程序,需要适应所有这些它提供的界面,而不能使用自己喜欢的编辑器的键绑定,菜单组织…… 不能 DIY!
你要知道,最高级的电脑是定做的,自己想要什么什么CPU,什么主板,多少内存,什么硬盘,键盘,鼠标,显示器都是自己选择的。最高级的滑板,自己想要什么牌子的版面,什么牌子的沙,什么桥,什么轮子,什么轴承,也都是自己选的。最高级的乒乓球拍,木板,胶皮,海绵,胶水都是可以自己选择…… 而用 Windows 程序,你得到的是大杂烩,就像你去买“品牌机”,只有那么几种配置,而且附带很多你不需要的软件和服务;就像你去买组装好的滑板,你想要大一点的轮子和窄一点的板子,但是你没有这种选择余地!Windows 程序就相当于最廉价,最次的滑板。但是它却会花你更多的钱,因为一旦一个部件坏了,或者你不喜欢了,你不能另外找一个好的换掉它,你必需重新买全套配件!
而 UNIX 和 Xwindow 就是高档的“组装货”。比如我用 Mutt 的时候,我可以用 VIM 也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给 Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其它 PGP 程序。我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。
结论
我写这么多的目的是什么?我希望喜欢 Linux 的朋友,完全清除微软和 Windows 灌输在你脑子里的谬论,别再相信它们所谓的“新技术”,别再追赶 Windows,因为追赶 Windows =倒退。马克思有一个思想很重要,“新生事物并不一定是在最近出现的。” UNIX,Xwindow, TeX 虽然都比 Windows 先出现,但是它们才是先进生产力的代表。我们要清楚的认识到什么才是真正的现代化,什么才是真正的自动化。
勇敢的拿起像 bash, FVWM, VIM, Emacs, Mutt, lftp …… 这样强大的程序,不要再埋怨“Linux 为什么不能像 Windows 那样”,不要再浪费时间试用这样那样的程序,不要再忙着升级。是你需要改变而不是 Linux 和 UNIX,Linux 现在就可以成为你的好朋友。你需要认识它,了解它,信任它,才能完全的靠它来高效的工作,省出时间来处理世界上更加值得处理的事情。
附录: 我用来处理日常事务的 Linux 程序
这里给出一些推荐使用的可以处理一般事情的程序。至于你的专业上要用到的科学和工程软件比如 Matlab, Mathematica, Maple, HSpice, Design Compiler, …… 还有其它物理上的,化学上的,生物上的 …… 都必然有 Linux 和 UNIX 的版本。当然他们很多不是免费的,不要总是觉得什么都应该免费,它们是经过很多人辛勤劳动的产物,是可靠的程序,他们物有所值。
下面列出我常用的一些 Linux 程序。一个列表里可能有很多,那是为了方便你来选择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的。我不喜欢试用程序。
Shell: bash。我使用 bash 的 vi 命令行方式。
编辑器: VIM, Emacs
程序开发: GCC, make, ld, Scheme48, j2sdk, Perl, Python, Tcl/Tk ...
论文,幻灯工具:LaTeX, ConTeXt
绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用 dia 来画一些流程图之类的图片。
图像处理:ImageMagick。其中的 import 程序可以屏幕抓图,convert 程序可以转换图像格式,display 可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp, 它几乎和 Photoshop 差不多。
自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…… 全自动,而且不会重复劳动。
加密程序:GnuPG。我的 PGP 密钥就是它搞出来的,我用了 2048 位加密。
打包,压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ...
虚拟光驱程序。Linux 不需要虚拟光驱程序,直接 mount 就行了。
ftp 服务器:proftpd, vsftpd
WWW 服务器:apache。(我一般没有开)
ftp 客户程序:lftp
自动下载工具:wget
虚拟终端:rxvt, xterm, gnome-terminal, mlterm, ...
X server: XFree86
窗口管理器:FVWM。编译加入了 libstroke。
中文输入:XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用 SCIM。
email 处理:Mutt + Postfix + fetchmail
看 PDF, PS, DJVU 文件:Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和 netscape 插件。
看CAJ文档。我从来不看CAJ之类的文档,如果找不到PDF或PS,直接去图书馆借最好。
看网页:Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比 IE 好很多。
英汉字典:IBM智能词典,星际译王。
编辑网页:我用 VIM 直接写 HTML。你如果想要图形方式的可以用其它的比如 screem, BlueFish。
登录其它 UNIX, Linux 机器:openSSH, telnet。 openSSH 还可以把其它机器的 X 程序通过 ssh 加密的隧道传到我机器上显示。
上BBS:rxvt(或任何一种终端) + telnet + chatbot(helloooo 机器人的程序)
QQ, ICQ: 我没有 QQ 或 ICQ。不过你可以用 Gaim, 它同时支持 QQ, ICQ 和很多其它的即时通信方式。ICQ 用户也可以用 Licq。
放录像:MPlayer, RealPlayer。MPlayer 太好了,直接就可以放 VCD, DVD, divx, wma, wmv ... 用 Windows 的同学都很羡慕我,说 Windows 要放这个需要大堆插件。rm 最好还是用 realplayer 放,它也是免费的。
放音乐: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg).
看 Word 文档。请 Word 用户把文档全部转为 PDF 或 PS 再给我,文档里没有特殊的格式就用文本文件,要不我就不看 :P
其它程序:还有很多我需要用而你不一定用得着的。比如,Doctor Scheme, Scheme48, Scsh, ...这些程序只有 Doctor Scheme 有Windows版本。还有很多幕后工作但是你一般不察觉的:xinetd, telnetd, sshd, crond, atd, lpd, ... 他们都比 Windows 的对应者强的多。
安装Usplash主题
翻译by yoyoliyang~
1,要安装主题,确保你已经很好的安装并且配置好了Usplash。如果你没有,请运行如下命令:
sudo apt-get install usplash
或者是在debian系统运行
su
apt-get install usplash
1,你也需要将启动画面的分辨率调整为1024x768。要设置它,请打开你的grub配置文件
sudo gedit /boot/grub/menu.lst
找到你内核版本的段落,并且添加如下一段
vga=791
比方下面的是你的配置文件
title Debian GNU/Linux, kernel 2.6.17-10-generic
root (hd0,4)
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda5 ro quiet splash locale=en_EN
initrd /boot/initrd.img-2.6.17-10-generic
boot
那么下面这一段
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda5 ro quiet splash locale=en_EN
将会修改为
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda5 ro quiet splash locale=en_EN vga=791
安装
现在一切都准备好了。我们将安装新的主题。首先拷贝文件到你的桌面,该文件名为'usplash-theme-fingerprint.so' ,现在我们打开一个终端,运行如下命令
cd
cd Desktop
sudo cp usplash-theme-fingerprint.so /usr/lib/usplash
sudo update-alternatives --install /usr/lib/usplash/usplash-artwork.so usplash-artwork.so /usr/lib/usplash/usplash-theme-fingerprint.so 10
sudo update-alternatives --config usplash-artwork.so
之后选择我们自己定义的主题文件,应该是'usplash-theme-fingerprint.so'
现在更新你的系统启动过程在终端
sudo update-initramfs -u
ok
总结:ubuntu6.10关于开机引导信息的处理(转)
很多朋友最近升级都到 Ubuntu 6.10 后,发现两种情况:1 开机引导系统时只有屏幕图像引导条,没有显示引导的文本信息了。 2 开机引导系统时只有引导文本信息,没有漂亮的引导条了。如果你对此不满,请看解决方法
分两种情况讨论:
1 开机引导系统时只有屏幕图像引导条,没有显示引导的文本信息了。表面上看,似乎更加简单了。但对于需要了解 Ubuntu 引导过程的话,就显得不够方便。以下提示可以让 Ubuntu 在引导时重新显示文本信息。
编辑 /boot/grub/menu.lst 文件,将包含 kernel 那行中的 quiet 去掉就可以了。比如,在我的系统中,修改之前为:
kernel /vmlinuz-2.6.17-10-386 root=UUID=af1ddd4e-df24-4f75-8fe9-12771182dddc ro quiet splash vga=791
修改后是这个样子:
kernel /vmlinuz-2.6.17-10-386 root=UUID=af1ddd4e-df24-4f75-8fe9-12771182dddc ro splash vga=791
重启系统可以看到修改后的效果。注意在修改之前备份。
需要注意的是,这样做有一个问题: 就是系统更新内核后会把自定义的参数冲掉.
更好的方法是更改这个注释行:
# defoptions=quiet splash vga=0×317
然后再调用update-grub来更新
查了一点资料,原来这个 quiet 参数的作用是阻止输出所有正常的文本信息。
2 开机引导系统时只有引导文本信息,没有漂亮的引导条了。
这种情况,首先 sudo apt-get install usplash-theme-ubuntu一下,看看usplash在你机器上是否安装了。如果安装了还是不正常,或者画面和精美的,网络上流传的不一样,那么很可能是你链接文件出了问题,按照一下步骤修改
sudo ls -sf /usr/lib/usplash/usplash-artwork.so /etc/alternatives/usplash-artwork.so
sudo ls -sf /etc/alternatives/usplash-artwork.so /usr/lib/usplash/usplash-theme-ubuntu.so
sudo update-initramfs -u
然后去/etc/usplash.conf看看
xres=1024
yres=768
这两行是不是一样的。
最后去/boot/grub/menu.lst看看,保证有下面这个语句
quiet splash vga=792
然后 sudo dpkg-reconfigure linux-image-$(uname -r) 重新配置一下
然后reboot,就应该搞定了~~~
星期一, 四月 09, 2007
星期六, 四月 07, 2007
SuSE10硬盘安装
find /linux
hd (x,y)
root hd (x,y)
kernel /linux
initrd /initrd
boot
之后启动到文本模式,依次选择,From harddisk,选择ISO文件所在分区,然后填写ISO文件目录,要全名称.比方:
/SUSE/SLED-10-CD-I386-RC3-CD1.ISO,回车确定
就可以启动YaST安装模式了.
PS:硬盘安装时,在挂载win分区时,不要挂载ISO所在分区,否则报错.另外还有就是,硬盘安装后,不会有splash.
把SuSE的"原装"壁纸给拷贝下来了,在我的yupoo里,呵呵~
星期五, 四月 06, 2007
[转] linux 挂载网络共享文件夹
mount -t smbfs -o username=用户名,password=密码 //192.168.0.1/sharedoc /mnt
用户名和密码分别对应您访问共享文件夹的用户名和密码,sharedoc 代表共享的文件夹的名字。
为实现自动挂载,我们需要做以下设置。
例如(假设您的网络连接已经正确设定好)
网络主机的 IP: 192.168.0.1
网络主机的使用者名称: myusername
网络主机的登录密码: mypassword
共享中的目录名称: linux
主机上要挂载的目录: /media/sharename
sudo mkdir /media/sharename
sudo gedit /root/.smbcredentials
在新增的文件内加入下面这几行
username=myusername
password=mypassword
保存编辑过的文件
sudo chmod 700 /root/.smbcredentials
sudo cp /etc/fstab /etc/fstab_backup
sudo gedit /etc/fstab
将下面这一行加到文件最后面
//192.168.0.1/linux /media/sharename smbfs credentials=/root/.smbcredentials 0 0
保存文件,重起 linux。
安装RedOffice2.0-PE
因为曾经用过红旗的office(用过红旗的系统,也在magicLinux上安装过redOffice),感觉不错,因为觉得openOffice启动太慢了,所以给del了,安装了RedOffice2.0个人版.
ubuntuEdgy安装RedOffice2.0-PE
下载RedOffice2.0-PE后,解包,然后进入目录,运行
sudo ./setup
之后按照提示便可完成安装了。我安装到了“/home/用户/RedOffice2.0-PE”下
安装后,对于scim输入法问题,可以如下解决:
找到/home/用户/RedOffice2.0-PE/program/soffice文件,在终端修改它,
sudo vim /home/用户/RedOffice2.0-PE/program/soffice
找到如下字段
if [ -f /etc/redhat-release ]; then
export LC_ALL=zh_CN.GB2312
export LANG=zh_CN.GB2312
else
export LC_ALL=zh_CN.GB18030
export LANG=zh_CN.GB18030
fi
全部注释掉,保存,之后在终端运行
sudo chmod 555 soffcie
ok
星期四, 四月 05, 2007
偶前任的硬盘用起来了
真没想到里面竟然有不少好玩的东东,而且数目都很大.有个ISO的文件夹,里面存放了5张SUSE10的光盘镜像和两张redflag的光盘镜像 ,另外还有一个PCBSD,debian,以及slax的liveCD,pclinuxos-p92.iso,还有以前捣鼓的moviX2光盘镜像,可真够多的~ :)
空间还剩很多,可以用来备份文件了,本本的硬盘空间实在是太不富裕了,无奈...
ps:昨天晚上又捣鼓了张自己的cartoon像,很搞笑哈 :P ,捣鼓地址:http://sp-studio.de/
星期三, 四月 04, 2007
星期二, 四月 03, 2007
从flickr转移到yupoo
今晚把大堆的照片传到了flickr后,然后就提示我超过了200张,不得已,只得换到yupoo了.
支持发布到blog的功能,上传客户端.不过客户端看起来比较难用,多了些不该有的东西,还是flickr比较不错.
星期四, 三月 29, 2007
EasyWine+Wine+IE6
EasyWine+Wine+IE6
Originally uploaded by yoyoliyang.
EasyWine安装IE6
axel http://software.lupaworld.com/pub/deman/EasyWine4G.sh
axel http://software.lupaworld.com/pub/deman/plug.tar.bz2 (wine配置时需要的插件)
该注意的是下载的wine版本要为9.22,否则在EasyWine配置wine 时出错。
axel http://wine.budgetdedicated.com/archive/ubuntu/dapper/wine_0.9.22~winehq0~ubuntu~6.06-1_i386.deb 此为dapper的deb包,edgy同样使用。
安装wine
sudo dpkg -i wine_0.9.22~winehq0~ubuntu~6.06-1_i386.deb
安装 EasyWine
./EasyWine4G.sh
bash EasyWine,配置Wine以及安装IE6。
关于 WINE 在 UTF-8 环境下运行缓慢的修正:
sudo gedit /usr/share/X11/locale/zh_CN.UTF-8/XLC_LOCALE
(用 # 注释掉 GBK 段)
# fs3 class (Chinese Han Character GBK)
fs3 {
charset {
name GBK-0:GLGR
}
font {
primary GBK-0:GLGR
substitute GB13000.1993-1:GLGR
}
}
修改为
# fs3 class (Chinese Han Character GBK)
###fs3 {
### charset {
### name GBK-0:GLGR
### }
### font {
### primary GBK-0:GLGR
### substitute GB13000.1993-1:GLGR
### }
###}
星期三, 三月 28, 2007
星期二, 三月 20, 2007
Linux下主流软件安装方法
软件安装常用方法
1、软件安装卸载,分几种情况:
A:RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个文件该放到哪个文件夹,都指定好了,安装非常方便,在图形界面里你只需要双击就能自动安装。
==如何卸载:
1、打开一个SHELL终端
2、因为LINUX下的软件名都包括版本号,所以卸载前最好先确定这个软件的完整名称。
查找RPM包软件:rpm -qa **×*
注意:**×指软件名称开头的几个字母,不要求写全,但别错,*就是通配符号“*”,即星号,如你想查找机子里安装的REALPLAYER软件,可以输入:rpm -qa realplay*
3、找到软件后,显示出来的是软件完整名称,如firefox-1.0.1-1.3.2
执行卸载命令:rpm -e firefox-1.0.1-1.3.2
===安装目录,执行命令查找:rpm -ql firefox-1.0.1-1.3.2
===参考文章:http://blog.chinaunix.net/article.p...178
B:tar.gz(bz或bz2等)结尾的源代码包,这种软件包里面都是源程序,没有编译过,需要编译后才能安装,安装方法为:
1、打开一个SHELL,即终端
2、用CD 命令进入源代码压缩包所在的目录
3、根据压缩包类型解压缩文件(*代表压缩包名称)
tar -zxvf ****.tar.gz
tar -jxvf ****.tar.bz(或bz2)
4、用CD命令进入解压缩后的目录
5、输入编译文件命令:./configure(有的压缩包已经编译过,这一步可以省去)
6、然后是命令:make
7、再是安装文件命令:make install
8、安装完毕
===如何卸载:
1、打开一个SHELL,即终端
2、用CD 命令进入编译后的软件目录,即安装时的目录
3、执行反安装命令:make uninstall
====安装目录:注意make install命令过程中的安装目录,或者阅读安装目录里面的readme文件,当然最好的办法是在安装的过程中指定安装目录,即在./configure命令后面加参数--prefix=/**,
如:./configure --prefix=/usr/local/aaaa,即把软件装在/usr/local/路径的aaaa这个目录里。一般的软件的默认安装目录在/usr/local或者/opt里,可以到那里去找找
C:以bin结尾的安装包,这种包类似于RPM包,安装也比较简单
1、打开一个SHELL,即终端
2、用CD 命令进入源代码压缩包所在的目录
3、给文件加上可执行属性:chmod +x ******.bin(中间是字母x,小写)
3、执行命令:./******.bin(realplayer for linux就是这样的安装包)
===如何卸载:把安装时中选择的安装目录删除就OK
===执行安装过程中可以指定,类似于windows下安装。
2、安装完软件后如何执行。 安装完软件后可以有好多种方法执行软件:
A、有些软件安装后会自动在应用程序列表里加上快捷键,和windows一样,到那里找就行了。
B、如果在应用程序列表里找不到的话,可以直接在/开始/运行命令里输入命令:启动命令一般就是软件名,如firefox,realplay,xmms等
C、也可以打开一个shell终端,输入软件名,和在“运行命令”里一样。如果不知道命令全程的话,可以输入开头的字母,然后按tab键查找,系统会自动显示以输入字母开头的所有命令/
D、你也可以直接到安装目录下运行启动文件,linux下的可执行图标和shell终端图标很像
E、到/usr/bin目录里找安装的软件启动文件执行命令。linux系统把所有可执行的文件命令在/usr/bin目录里都作了启动连接,你可以去那个目录寻找你安装的文件的启动命令,双击启动.
powered by performancing firefox
星期六, 三月 10, 2007
公主日记 4
这不是个简单的爱情故事会,仅仅发生在一个星期之内,却让我们的女主角看穿了人性的丑陋。
那堂歌剧课结束,公主快乐地唱着歌回去,她又找到了那天在图书馆巧遇时的心情。夜色柔和得像一袭柔软的天鹅绒,她笑眯眯得想,我真是个幸福的人。但是她是公主,是要有一定的勇气和魄力的、她不满足于这样凭运气巧遇,是的,她已经爱上了他。单纯的、不谙世事的公主,却又超乎凡人的决心。夜深了,她躺在自己的小床上想了一会儿,怀着这样的心情沉沉睡去。
星期四,意识公主和王子相识的第六天了。这一天,她决心知道他的名字。
晚上八点,外院又响起了琴声。那曲调公主听了两遍就记下来了。没人上课,外语楼冷冷清清的,只有一个男生在唱着:
。。。。公主忐忑地推开了门,轻手轻脚地走了进去。只有钢琴上方的灯亮着,他穿着一件浅浅淡淡的粉色T恤,自弹自唱。但公主马上敏锐地感觉到了敌意,另一个女孩站在钢琴旁边,目光像一桶冷水把公主浇了个湿透。曲终,王子笑着说,鼓掌!于是他和那个女孩便笑嘻嘻地拍起手来。他站起了身,说,还你弹了。于是那个女孩就从容地扫了公主一眼,坐下开始弹。王子终于转身看到公主了。
依依不舍的我向着年少挥一挥手
再回首平房变成了高楼
时间给了我孤独
也夺走了我的简单
不知道那一张旧洋画还在不在她的身边
那理想勇往直前
快乐被落在身边
老树没变却不能带我回到从前
。。。。
同学,公主并不在意越来越响的琴声,她已下定决心,从未如此坚定。同学,她径直向他走了过 去,问,能告诉我你的名字么?
他站在讲台前,看了她一眼,突然扭过头对弹钢琴的女生说,你手错了,那里有切分。公主又耐心地问了一遍,同学,能告诉我你的名字么?他定定地看着他,突然显得局促起来,声音变小了,说,我叫刘畅。公主在心地默念了一遍:刘畅。那你能告诉我你的手机号码么?她又问道。刘畅迟疑了一下,公主面色平静,但其实已经开始流汗。我可是要成为他女朋友的!她对自己说然后目光毫不避讳地直视他。他说,哦,你记一下。啊!事情居然进展这么快这么顺利。公主看了那女孩一眼,又看了她心爱的王子一眼,满意地离开了。
剩下的事情交给短信了,公主这样计划着。她也不是一个没有魅力的女孩,需要的只是时间,她会打动他的。但是公主啊公主,你还是太傻了。
谢谢你告诉我电话号码。你很给人面子,我还担心你不肯说呢!
呵呵,给人面子是一种美德。我大四了,你呢?
大二。你考研么?大四真清闲啊天天弹琴,今晚那个是你女朋友么?
我考研啊,考本校本专业,她是我徒弟。
考本校啊?真好,我又能多听两年了。那首歌自己写的么?什么时候给我份歌词。
《老树下》,我自己写的。还没问你叫什么呢?
等你给歌词了我再告诉你名字。
你可真逗,那我现在发过来给你。
公主一边发着短信一边感慨现代通讯给人带来的方便。最后他们交换了名字,照片。公主累了,说,晚安。但是过了很久,刘畅并没有回复什么。她想大概是睡去了,于是关了手机也睡去了。
公主在上外国文学的时候听老师说,命运是强大的。人可以积极地反抗命运,但是却始终受命运掌控。古希腊人絮絮叨叨地在公主耳边讲述着命运的故事,她心底突然有一丝不安。她是个熟悉星座知识的女孩,一般来说,水瓶和摩羯是一对相克的星座。摩羯的男子冷酷又花心,星占书上一字一字地写着这两个座的人有多么的不合。公主一贯相信古老的占星术,但她这一次却开始怀疑了。
待续 转载自 潘雯晶 《公主日记》 萌芽
powered by performancing firefox
公主日记 3
星期一照例是个好天,公主照例来到那间教室上政治课。老钢琴一动不动地立在墙角,果然像个严肃的一言不发的国王。她听了半节课就开始发呆,忘不了那一双手和一脸的微笑。她的表情是平静的,正如她的身份一般让人不敢玩笑,但她的心情像一条流淌着忧伤的小河,水声不绝于耳。
星期二照例是个好天,公主换上了黑色麻质裤子和白短袖——今天她有一堂羽毛球课。中午短暂的休息时间,她到图书馆找一本关于美学的书。在借书处把那手续的时候,她站直了身子望窗外看,突然,一个身影映入眼帘——饮水机旁站着她的王子!没错,是他!他今天穿着藏蓝色的短袖和牛仔裤,这个人看上去利落极了!公主的体温骤然升高,她突然想大叫,这种情感要爆发时被压抑的感觉可不太好。但是公主是理智的水平座女生,她控制住自己了。戒了书后像一只快乐的小鸟一般,紧紧跟在了王子身后。王子原来找了个这么隐蔽的座位,在图书馆一个很不起眼的角落。公主把自己藏在书架后头,透过码放整齐的书看她的王子。哦,她一直笑啊笑啊,肌肉都要僵硬了。周围那么多安静看书的人,长长的垂下来的浅黄色窗帘,摆在墙角的红色灭火器罐子,还有那些散发古旧气息的书,这一切都在瞬间美好起来。她明白,只因那个男生。
后来公主想起当初的热情,几乎要嘲笑自己了。
待续 转载自 潘雯晶 《公主日记》 萌芽
powered by performancing firefox
星期四, 三月 08, 2007
公主日记 2
那架钢琴很古老了,被放在教室里一个阳光照不到的角落,棕色的琴身有很多地方都掉漆了,低音的音质仿佛是生了结石般沉涩,不好听。但在此时公主眼里,一切都是黯淡的,所有的光辉都自动汇集到那架琴和哪个人身上。于是她走近了,穿过那些桌椅,站到了那人背后。音符一个一个从他手里飞出来,音高的的飞到天上去,音低的沉的往地上淌。那是个男孩。公主浅浅地笑了,他转过身来,颇为紧张地冲公主点一点头。她说,我可以坐你旁边吗?他说,啊,可以的。于是公主搬来一张椅子,挨着男孩有不失礼节地保持着距离,坐下。他谈起了一段她所不知道的旋律,修长的十指灵活地在琴键上跳跃。很难说在那一刻公主是爱音乐还是爱上他了,但是公主迷迷糊糊地认为,自己是爱上了这个弹钢琴的王子了。她对王子说,你的手指很好看。她有低头看了看自己的手,匆匆忙忙地把它们放到身后去了。
第一次见面,王子显得十分安静和自信。他说,弹一首我自己写的曲子给你听吧。公主说哦,然后竖起了耳朵,仿佛她身上的每一个毛孔都张开了,为了让自己记住那旋律。原来,那就是王子十分喜欢的《老树下》。公主始终带着笑,那一刻她的心是满的,快乐的,活蹦乱跳的。一曲终了,王子指着钢琴说,你玩吗?我还有点事,先走了。
他也是笑眯眯的。公主深吸了一口气,啊,他笑起来真好看,眼睛眉毛嘴角都摆到了适当的位置。正是一张如暖人的阳光的脸。公主说,哦,我先玩一会儿。于是起身做到了他刚才坐到的位子上,手指划过他抚摸的琴键。王子走了,还体贴的观赏了门。他们没有互通姓名,不知道对方的年纪、专业,更别说手机号了。公主心底有一点点遗憾。那天她只弹了一小会儿就走了。她没学过钢琴,你会一点点零星的《天空之城》和《天鹅》,弹起来是来那么费力完全像个笨拙的小学生。于是她泄气地想,还是走吧。
第二天便是周末。公主早早就起床了,认认真真地洗脸梳头,还用了电妈妈给的遮瑕膏,掩盖住了右颊上的几颗小痘痘。她是个公主,但也是个平凡的女孩,有着所有女孩都有的小心思。她收拾好了书包,兴冲冲地赶到了外院钢琴教室,心里得意又忐忑不安地想,如果今天遇到了,就要把该问的都问一遍。于是进了教室,她就从容地打开灯,跳了一个靠前的座位坐下,掏出一些书来看。其实,是在等待。
待续 转载自 潘雯晶 《公主日记》 萌芽
公主日记
日子仿佛一下子掉进了牛奶里,又从牛奶掉进了墨水里,混浊不堪,令人心生厌恶。
公主爱上的似乎是个王子吧?王子叫做刘畅,习惯上午九点才起床——因为他已经大四了,并没有像公主那么繁重的学业。正因为这样清闲,他才能常常把整个下午耗在钢琴教室里。那个教室可以容纳一百八十人,有两个门。刘畅常常等人走光了之后,把自己反锁在里面,弹一首他自己写的叫做《老树下》的曲子,陶醉起来还会大声哼唱。那些词也是他自己写的。公主看过一些《老树下》的词,最喜欢其中的一句:再回首平方变成了高楼。
刘畅对公主说过最多的一句话,就是“你可真逗”。公主不明白自己逗在哪里。公主是个循规蹈矩的乖女孩,七点起床,在路上解决掉早饭,八点上课,下课了会去自习。她是个靠文字和音乐活着的女孩,心里有事就写下来。不久前她申请了一个博客,写一点她自己的心情和身边的事。公主嘴不笨,但她的文字比语言更富有表现力。
公主下课了,星期五的下午四点。这座北方城市被夏末的阳光暖着,空气仿佛是金色天鹅绒上抖下来的灰。她高高兴兴地去外语楼,报名参加一个日语班。下楼的时候她听见钢琴教室里有声响,有人弹琴。
公主似乎有那么点特别吧?她轻轻推开后门走了进去。一个穿白色T恤的人坐在钢琴前面,留给她一个背影。公主一时间愣住了——那个人让人无法辨别性别:头发比男生长比女生短,个子别男生矮比女生高——距离有点远,中间隔着四十张桌椅。公主心里突然很激动。她每周一要在这个教室和一些成熟理智的大四学长学姐们一起上一堂枯燥的政治课,唯一给她安慰的就是这个教室里有台钢琴。其实是外院合唱团专用的。公主并没有学过钢琴,钢琴是乐器王国的国王,她学的是王后。国王和王后注定要在一起的,公主和王子呢?
待续
转载自 潘雯晶 《公主日记》 萌芽
星期一, 三月 05, 2007
NINJA RYUUKENDEN 3
玩了好几年(实际上在高三到大一根本没再玩过,到了大二才开始继续)的忍者龙剑,总算玩到了最后一关。
真的是非常难玩的游戏,不过忍者龙剑是我在FC中最喜欢的游戏了。而且据说忍者龙剑是当时非常成功的8位游戏。很另人着迷。
星期六, 三月 03, 2007
Etoile桌面环境安装指南
==============
Etoile INSTALL
==============
Required software
-----------------
You need to have the GNUstep core libraries installed in order to
compile and use Etoile. The core packages are, at a minimum:
* gnustep-make 1.13 or higher
* gnustep-base 1.13 or higher
* gnustep-gui 0.11 or higher
* gnustep-back 0.11 or higher
See <http://www.gnustep.org/> for further information.
You need some extra libraries if you intend to build a complete Etoile
environment or the whole repository:
* libpng (IconKit)
* zlib (LuceneKit)
See <http://www.zlib.net/> for further information.
* OniGuruma 3.8.6 or higher (OgreKit)
See <http://www.geocities.jp/kosako3/oniguruma/> for further information.
This dependency is also available in trunk/Dependencies/oniguruma (within
Etoile repository).
* sqlite3 (SQLiteClient)
See <http://www.sqlite3.org> for further information.
* SQLClient (SQLiteClient)
See <http://www.gnustep.org/> for further information.
Notation
--------
In the following text, square brackets "[ ]" are used to indicate an
optional parameter, while "*" at the beginning of a line indicates a
command.
Build and Install
-----------------
Warning! At this time, the install process is broken when run with 'sudo', then
you probably have to use 'su root'. Moreover if you encounter path related
error, you can source GNUstep.sh or GNUstep.csh in your shell, read the GNUstep
documentation to know more about this topic.
Steps to build:
* make
* [sudo] make install
* ./setup.sh
setup.sh script takes care of various operations mandatory to have a ready to
use environment that includes:
* the environment startup tool (named 'etoile_system')
* Nesedah theme
* Horizontal menu bar
* X11 session support (to start Etoile with KDM, GDM etc.)
This involves to copy or link various elements and set several preferences
(called 'defaults' in GNUstep terminology).
The script will ask you whether you want to set up the environment for the
current user only or for the whole machine.
Uninstall
---------
Steps to uninstall:
* [sudo] make uninstall
* ./setdown.sh
setdown.sh script allows to get rid of what has been installed or configured by
setup.sh. In other words, it reverts the effect of setup.sh script.
Take note, you can use it alone without running 'make uninstall' first. This is
useful when you want to disable temporarily Etoile theme, horizontal menu etc.
and get back to the GNUstep look & feel. Then you can return to the usual
Etoile look & feel by running setup.sh again.
However it's important to note that setdown.sh doesn't disable only Camaelon
(theme engine) and WildMenus (horizontal menu engine). You won't be able
to log in from KDM or GDM once setdown.sh has been run, and Etoile specific
applications may fail because of missing elements or daemons not launched.
Custom Build and Install
------------------------
In order to build and install the whole project (with the exception of
developers tools like UnitKit), you can just type in the root directory (named
Etoile):
* make
* [sudo] make install
Warning! The following section isn't up-to-date. At this time, it isn't
possible to build only one module by typing 'make modulename=yes'. This
should be fixed to match the documentation below.
Which is the equivalent for the build system of asking to build the etoile
module:
* make etoile=yes
* [sudo] make etoile=yes install
Indeed, you can choose to build only a specific module. Simply follow 'make'
with the module's name (in lowercase) set to yes. For example:
* make camaelon=yes
* make camaelon=yes install
Will only build and install Camaelon.
You can combine more than one module:
* make camaelon=yes lucenekit=yes
And even use custom set of modules, like desktop-base. Here is a list of the
current sets of modules:
* desktop-base --> camaelon, bookmarkkit, iconkit, preferenceskit
* user-base --> installer (for now that's all)
* developer-base --> unitkit, unittests, examples
* etoile-extensions --> lucenekit, extendedworkspacekit, trackerkit,
servicesbarkit, servicesbar
The 'etoile' option semantic is a bit special:
* etoile=yes --> desktop-base, user-base, etoile-extensions, workspace
* etoile=no --> desktop-base, developer-base // everything which is not
bound to Etoile itself
Finally you can combine these module sets with specific module options, like:
* make developer-base=yes camaelon=yes // build developer-base and camaelon
* make desktop-base=no camaelon=yes // build user-base, etoile-extensions,
workspace and camaelon (but not other desktop-base stuff)
* make etoile=no etoile-extensions=yes extendedworkspacekit=no
You can use the 'make' command with all the available options from every
projects directory.
You can also build test bundles for any specified modules by adding an option
'test=yes', in future you should be able to run every test bundles with 'make
check' but this not implemented currently.
Trouble
-------
Give us feedback! Tell us what you like; tell us what you think
could be better. Send bug reports and patches to <etoile-track@gna.org>.
用CDlinux做防火墙和上网共享(z)
为什么要选用linux?
因为linux稳定,安全,对计算机硬件要求低。
何为CDlinux?
CDlinux为在linux基础上制作的,针对光盘运行的linux,但其还可以安装到硬盘、优盘上。详见http://cdlinux.berlios.de/
为什么要选用CDlinux?
因为CDlinux体积小(仅需20M硬盘空间),易定制(软件包采用标准tgz包),又基本具备完整linux的所有功能,理论上你可以安装任何linux版本的软件,而且内核更新很快(0.4.7版内核为2.4.23,0.4.8版内核为2.4.25),用其做防火墙完全可以满足需要。
硬件配置586,24M内存,40M硬盘两块网卡。
1、先从http://cdlinux.berlios.de/下载cdlinux。然后按其帮助文档将其安装到硬盘上。
2、建立/etc/rc.d/rc.local脚本
内容如下:
#!/bin/sh
/etc/rc.d/netshare
#执行网卡配置
/etc/rc.d/firewall
#执行防火墙脚本
3、建立/etc/rc.d/netshare脚本
内容如下:
#!/bin/sh
if [ -f \"/etc/dhcpc/dhcpcd-eth0.pid\" ] ; then
rm /etc/dhcpc/dhcpcd-eth0.pid -rf
fi
#eth0为对外网卡,我们的上网方式是动态ip,如果你的不是那得改成......
#判断是否已经运行过dhcpcd,如果是,删除生成的dhcpcd-eth0.pid文件,重新获得ip地址
dhcpcd eth0
ifconfig eth1 192.168.0.254
#192.168.0.254是对内网关地址,eth1为对内网卡
if [ -f \"/etc/dhcpc/dhcpcd-eth0.pid\" ] ; then
rm /etc/dhcpc/dhcpcd-eth0.pid -rf
fi
dhcpcd eth0
#我的系统,第一次获得ip好像有些不正常,所以又执行了一次,你看情况吧
4、建立/etc/rc.d/firewall防火墙脚本
防火墙脚本,iptables的功能十分强大,就不给出内容了,你可以参考别人的脚本建立。
5、删除系统默认用户ok,并修改root口令,这一步很重要哦,否则........
6、如果为0.4.7版,请将dhcpcd-1.3.22-pl4-cdl.tgz(在586cpu上运行有问题),iptables-1.2.9-cdl.tgz包替换为0.4.8版中的对应包(我没有具体试过,我是在0.4.7基础上修改包的,如果有问题干脆直接用0.4.8版)。
删除用不到的包(必须,因为机子的内存才24M,否则不正常可别怪我没有告诉你),保留以下包:
cce-0.50-20031205-cdl.md(如果希望显示和输入汉字)
dcron-2.3.3-cdl.tgz(如果想根据时间来控制防火墙,应保留)
dhcpcd-1.3.22-pl4-cdl.tgz(必须)
iptables-1.2.9-cdl.tgz(必须)
kernel-modules-2.4.23-cdl.md(必须)
smbmount-samba-2.2.8a-cdl.tgz(与网内机子沟通方便,但不利于安全。防火墙配置好后,建议去掉)
ssh-1.2.33-cdl.tgz(可以进行远程管理)
system-extra-cdl.tgz(必须)
7、以上的配置完成了,为了以后管理方便,请制作以下脚本:
#!/bin/sh
chmod +x /etc/rc.d/netshare /etc/rc.d/firewall /etc/rc.d/rc.local /root/NetShareConfig
if [ -f \"/mnt/CDlinux/cdlinux/extra/rc.local-cdl.tgz\" ] ; then
rm /mnt/CDlinux/cdlinux/extra/rc.local-cdl.tgz
fi
#删除原来的包rc.local-cdl.tgz
if [ -f \"/mnt/CDlinux/cdlinux/extra/netshare-cdl.tgz\" ] ; then
rm /mnt/CDlinux/cdlinux/extra/netshare-cdl.tgz
fi
#
if [ -f \"/mnt/CDlinux/cdlinux/extra/root-cdl.tgz\" ] ; then
rm /mnt/CDlinux/cdlinux/extra/root-cdl.tgz
fi
#
tar czPfc /mnt/CDlinux/cdlinux/extra/rc.local-cdl.tgz /etc/rc.d/rc.local
#生成新的包rc.local-cdl.tgz
tar czPfc /mnt/CDlinux/cdlinux/extra/netshare-cdl.tgz /etc/rc.d/netshare /etc/rc.d/firewall /usr/local/lib
#
netshare为网卡初始化脚本,firewall为防火墙脚本,lib为库连接文件=>/usr/lib(为CDlinux0.4.7版本iptables的一个bug,在CDlinux0.4.8版本不需要)
tar czPfc /mnt/CDlinux/cdlinux/extra/root-cdl.tgz /etc/passwd /etc/shadow /root/NetShareConfig
#passwd,shadow为修改过用户后的口令相关文件(很重要),NetShareConfig为本文件自身(否则下次就不能使用了)
将其保存为/root/NetShareConfig
执行sh /root/NetShareConfig (执行后NetShareConfig就具备可执行属性,下次直接执行就可以了),程序会生成以下文件并放置于硬盘cdlinux\\extra目录下
netshare-cdl.tgz
rc.local-cdl.tgz
root-cdl.tgz
注意:修改任意配置文件,请保证测试正常后,一定执行本脚本,否则启动后配置文件会丢失。
8、重新启动计算机,看是否一切都正常。
当然,作为linux的CDlinux同标准linux一样,功能远不止这些,你还可以在其上安装各种代理软件,将其建成功能强大的集防火墙、透明代理为一身的系统。它还会常常被用来维护系统。至于你用它来作什么,全由你决定。
内核编译
Linux内核总是不断发展的,最新的内核Kernel2.6.0对USB2.0予以正式的支持,以及内核模块文件后缀最显著的一个变化由*.o到*.ko等等,我们可以从www.kernel.org下载到tarball的源代码包。
前期准备
大家都知道的要先升级“module-init-tools“软件包,否则的话,等你安装内核模块文件的时候,系统会提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h...4.21-23.src.rpm。
进入下载目录下并安装:
#rpm -e --nodeps modutils (强行卸载原有的modutilsRPM包)
#rpm -ivh modutils-2.4.21-23.src.rpm (把源代码包安装到了
/usr/src/redhat目录下)
#cd /usr/src/redhat/SPECS (进入规范文件目录下)
#rpmbuild --bb modutils.spec (生成二进制的RPM包)
#cd ../RPMS/i386 (转入刚生成的二进制的RPM包所在位置)
#rpm -ivh modutils*.rpm (刚生成两个[modutils-2.4.21-23.i386.rpm
与modutils-debuginfo-2.4.21.23.i386.rpm]二进制的RPM包,一起安装吧!)
因为是在RedHat9.0的平台,RedHat的用户可能还会遇到一些麻烦,我会慢慢说的,除了要以上的升级之外,还有个文件(/etc/rc.d/rc.sysinit)可能有缺陷,因为/proc/ksyms文件在新内核(Kernel2.6.0)中已经没有了,打开文件命令如下:
#vi /etc/rc.d/rc.sysinit
找到:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null
&& [ -f /proc/ksyms ]; then
USEMODULES=y
fi
替换成:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null; then
USEMODULES=y
fi
也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件(操作之前最好做备份以免删错,这个文件是系统初始脚本,重要的很),这样子内核才能加载模块,当然能启动iptable防火墙了,否则防火墙在新内核中启动时红色的“failed“非常醒目。(请在新内核中核查/proc/sys/kernel/modprobe中的内容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面开始构造新内核。
一、准备源代码
1、下载到tarball包之后,将内核tarball包复制到/usr/src目录下,假定包在当前目录中,运行以下命令:
#cp linux-2.6.0.tar.gz /usr/src
2、转到/usr/src目录并解开tarball包。
#cd /usr/src
#tar xvzf linux-2.6.0.tar.gz
3、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1。
二、定制内核
定制内核是门很大的学问,需要大量的硬件知识,特别是2.6.0的内核,如果你从 2.4.N配置文件装载进去的,的确,很多人遇到过麻烦。我是重新配置文件(X窗口服务器进行),配制内核之前请清理源代码树,如果还没有进入 /usr/src/linux-2.6.0目录,请进入此目录,命令如下:
#make mrproper (刚解开的tarball包不需此步骤)
#make gconfig (需要Gtk开发库的支持)
或make config
或make xconfig(需要Qt开发库的支持)
注意:如果你是ext3文件系统,则在定制内核配置文件时把对Ext3、Ext2文件的支持直接编译进内核,否则,等你启用新内核时机器就会当掉,出错信息如下:kernel panic : no init found ,try passing init = option to kernel......或者是:kernel panic:VFS:Unable to mount root fs on unknown-block(0,0),我一开始不知道,编译了好几次,系统总给我冷板凳坐,最后把对Ext3、Ext2文件系统的支持直接编译进内核,才解决此问题,还有把对“Module unloading“选项也选上,否则的话,你在新内核环境下无法卸载内核模块(rmmod命令不能用)。
三、编译内核及模块
定制好的内核配置文件(/usr/src/linux- 2.6.0/.config)之后,激动的时刻到来了,编译内核及模块,#make (此命令已完成make bzImage及make modules的工作),bzImage内核文件在arch/i386/boot目录中,你的CPU不同内核文件存放位置也不同,我是Intel的 CPU。
注意:我在RedHat7.2平台时曾出现无法编译的出错信息,出错信息如下:
/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin'
make[1]: *** [usr/initramfs_data.o] Error 1
make: *** [usr] Error 2,
重新装了个9.0的才解决此问题。说明:make命令在我的1.6GHz,128MB的机器上跑了足足27分钟。
四、安装模块及内核文件
#make modules_install install
以上这个命令可以分解成make modules_install与make install,make modules_install安装内核模块到/lib/modules/2.6.0下。make install完成mkinitrd命令及内核(bzImage)和System.map的拷贝,请查看/boot目录,文件名是有区别的,如是GRUB 引导器,make install命令已帮你自动修改了引导选项,对于LILO则要手工修改,重写引导记录。
说明:make modules_install install这个命令在我的1.6GHz,128M的机器上只跑了三十几秒,很快的哦。
五、后记
最后的工作就是重启系统(#shutdown -r now),检验一下你的劳动成果吧。差点忘了还有一点,可能对你很重要,进入新内核之后我发现rpm命令不能用了,原来这是RPM的一个Bug,特别是对于RH9的用户,请打开/etc/profile文件,命令如下:
#vi /etc/profile (在文件的末尾加上几句如下)
if [`uname -r`="2.6.0" ];then
export LD_ASSUME_KERNEL=2.2.5
fi
也就是给系统加上一个全局的环境变量,也可直接键入#export LD_ASSUME_KERNEL=2.2.5。
使用新内核可能出现的问题及对策:
1、新内核根本起不来,解决方法:重新配置内核(学问挺大),也许还根引导记录有关(很少了)。
2、新内核模块无法加载,会导致很多问题,比如了防火墙没法工作了,mount不上光盘和vfat及ntfs文件系统,其解决方法:升级module-init-tools软件包(我是modutils-2.4.21- 23.src.rpm包),RedHat的用户可能还要修改/etc/rc.d/rc.sysinit文件。
3、RedHat用户rpm命令不能使用,解决办法:请把变量在全局配置文件中声明。
修改内核添加设备驱动(Z)
1. 内核和驱动模块
操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。正如我们查看屏幕上的文档时,不用去管到底使用nVIDIA芯片,还是ATI芯片的显示卡,只需知道输入命令后,需要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有较高的比例。
Linux内核中采用可加载的模块化设计(LKMs ,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。
如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。
我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。
理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的命令,在加载驱动程序要用到它们:lsmod、modprob、insmod、rmmod、modinfo。
lsmod 列出当前系统中加载的模块,例如:
#lsmod (与cat /proc/modules 得出的内容是一致的)
Module Size Used by Not tainted
radeon 115364 1
agpgart 56664 3
nls_iso8859-1 3516 1 (autoclean)
loop 12120 3 (autoclean)
smbfs 44528 2 (autoclean)
parport_pc 19076 1 (autoclean)
lp 9028 0 (autoclean)
parport 37088 1 (autoclean) [parport_pc lp]
autofs 13364 0 (autoclean) (unused)
ds 8704 2
yenta_socket 13760 2
pcmcia_core 57184 0 [ds yenta_socket]
tg3 55112 1
sg 36940 0 (autoclean)
sr_mod 18104 0 (autoclean)
microcode 4724 0 (autoclean)
ide-scsi 12208 0
scsi_mod 108968 3 [sg sr_mod ide-scsi]
ide-cd 35680 0
cdrom 33696 0 [sr_mod ide-cd]
nls_cp936 124988 1 (autoclean)
nls_cp437 5148 1 (autoclean)
vfat 13004 1 (autoclean)
fat 38872 0 (autoclean) [vfat]
keybdev 2976 0 (unused)
mousedev 5524 1
hid 22212 0 (unused)
input 5888 0 [keybdev mousedev hid]
ehci-hcd 20104 0 (unused)
usb-uhci 26412 0 (unused)
usbcore 79392 1 [hid ehci-hcd usb-uhci]
ext3 91592 2
jbd 52336 2 [ext3]
上面显示了当前系统中加载的模块,左边数第一列是模块名,第二列是该模块大小,第三列则是该模块使用的数量。
如果后面为unused,则表示该模块当前没在使用。如果后面有autoclean,则该模块可以被rmmod -a命令自动清洗。rmmod -a命令会将目前有autoclean的模块卸载,如果这时候某个模块未被使用,则将该模块标记为autoclean。如果在行尾的[ ]括号内有模块名称,则括号内的模块就依赖于该模块。例如:
cdrom 34144 0 [sr_mod ide-cd]
其中ide-cd及sr_mod模块就依赖于cdrom模块。
系统的模块文件保存在/lib/modules/2.4.XXX/kerne目录中,根据分类分别在fs、net等子目录中,他们的互相依存关系则保存在/lib/modules/2.4.XXX/modules.dep 文件中。
需要注意,该文件不仅写入了模块的依存关系,同时内核查找模块也是在这个文件中,使用modprobe命令,可以智能插入模块,它可以根据模块间依存关系,以及/etc/modules.conf文件中的内容智能插入模块。比如希望加载ide的光驱驱动,则可运行下面命令:
# modprobe ide-cd
此时会发现,cdrom模块也会自动插入。
insmod也是插入模块的命令,但是它不会自动解决依存关系,所以一般加载内核模块时使用的命令为modprobe。
rmmod可以删除模块,但是它只可以删除没有使用的模块。
Modinfo用来查看模块信息,如modinfo -d cdrom,在Red Hat Linux系统中,模块的相关命令在modutils的RPM包中。
2.设备文件
当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种类Unix系统,Unix的一个基本特点是“一切皆为文件”,它抽象了设备的处理,将所有的硬件设备都像普通文件一样看待,也就是说硬件可以跟普通文件一样来打开、关闭和读写。
系统中的设备都用一个设备特殊文件代表,叫做设备文件,设备文件又分为Block(块)型设备文件、Character(字符)型设备文件和Socket(网络插件)型设备文件。Block设备文件常常指定哪些需要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。
而Character型设备文件常指定直接读写,没有缓冲区的设备,比如并口、虚拟控制台等。Socket(网络插件)型设备文件指定的是网络设备访问的BSD socket 接口。
#ls -l /dev/hda /dev/video0 /dev/log
brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda
srw-rw-rw- 1 root root 0 Jun 3 16:55 /dev/log
crw------- 1 root root 81, 0 Sep 15 2003 /dev/video0
上面显示的是三种设备文件,注意它们最前面的字符,Block型设备为b,Character型设备为c,Socket设备为s。
由此可以看出,设备文件都放在/dev目录下,比如硬盘就是用/dev/hd*来表示,/dev/hda表示第一个IDE接口的主设备,/dev/hda1表示第一个硬盘上的第一个分区;而/dev/hdc 表示第二个IDE接口的主设备。可以使用下面命令:
#dd if=/dev/hda of=/root/a.img bs=446 count=1
把第一个硬盘上前446个字节的MBR信息导入到a.img文件中。
对于Block和Character型设备,使用主(Major)和辅(minor)设备编号来描述设备。主设备编号来表示某种驱动程序,同一个设备驱动程序模块所控制的所有设备都有一个共同的主设备编号,而辅设备编号用于区分该控制器下不同的设备,比如,/dev/hda1(block 3/1)、/dev/hda2(block 3/2 )和/dev/hda3( block3/3 )都代表着同一块硬盘的三个分区,他们的主设备号都是3,辅设备号分别为1、2、3。 这些设备特殊文件用mknod命令来创建:
# mknod harddisk b 3 0
我们就在当前位置创建出一个与 /dev/hda一样的、可以访问第一个IDE设备主硬盘的文件,文件名叫做harddisk。
使用下面命令可以查看设备编号:
#file /dev/hda
/dev/hda: block special (3/0)
其中Block代表/dev/hda是系统的Block型(块型)设备文件,它的主设备编号为3,辅设备编号为0。
#ls -l /dev/hda /dev/hdb
brw-rw---- 1 root disk 3, 0 Sep 15 2003 /dev/hda
brw-rw---- 1 root disk 3, 64 Sep 15 2003 /dev/hdb
使用ls -l也可以看到设备编号,/dev/hdb代表第一个IDE接口的从设备(Slave)也是Block设备,编号为(3/64),还有另外一种设备文件是/dev/tty*。使用如下命令:
#echo "hello tty1" > /dev/tty1
将字符串“hello tty1”输出到/dev/tty1代表的第一个虚拟控制台上,此时按“Alt + F1”可以看到该字符出现在屏幕上,这个特殊的文件就代表着我们的第一虚拟控制台。
#file /dev/tty1
/dev/tty1: character special (4/1)
由上可以看到,它的类型为Character 型(字符型)设备文件,主设备号为4,辅设备号为1。同样,/dev/tty2代表着第二个虚拟控制台,是Character设备,编号为 (4/2)。
当将/dev/cdrom加载到/mnt/cdrom中时,只要访问/mnt/cdrom系统就会自动引入到/dev/cdrom对应的驱动程序中,访问实际的数据。
有关设备文件的编号可以看内核文档/usr/src/linux-2.*/Documentation/devices.txt 文件(在Kernel的源文件解包后的Documentation目录中),其中详细叙述了各种设备文件编号的意义。
3.使用/proc目录中的文件监视驱动程序的状态
通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是proc文件系统,它一般会被加载到/proc目录。访问设备文件时,操作系统通常会通过查找/proc目录下的值,确定由哪些驱动模块来完成任务。如果proc文件系统没有加载,访问设备文件时就会出现错误。
Linux系统中proc文件系统是内核虚拟的文件系统,其中所有的文件都是内核中虚拟出来的,各种文件实际上是当前内核在内存中的参数。它就像是专门为访问内核而打开的一扇门,比如访问/proc/cpuinfo文件,实际上就是访问目前的CPU的参数,每一次系统启动时系统都会通过/etc/fstab中设置的信息自动将proc文件系统加载到/proc目录下:
# grep proc /etc/fstab
none /proc proc defaults 0 0
此外,也可以通过mount命令手动加载:
# mount -t proc none /proc
通过/proc目录下的文件可以访问或更改内核参数,可以通过/proc目录查询驱动程序的信息。下面先让我们看一下/proc目录中的信息:
# ls /proc
1 4725 5032 5100 5248 5292 crypto kcore partitions
14 4794 5044 5110 5250 5293 devices kmsg pci
2 4810 5075 5122 5252 5295 dma ksyms self
3 4820 5079 5132 5254 5345 driver loadavg slabinfo
4 4831 5080 5151 5256 6 execdomains locks stat
4316 4910 5081 5160 5258 7 fb lvm swaps
4317 4912 5082 5170 5262 70 filesystems mdstat sys
4318 4924 5083 5180 5271 8 fs meminfo sysrq-trigger
4319 4950 5084 5189 5287 9 ide misc sysvipc
4620 4963 5085 5232 5288 apm interrupts modules tty
4676 5 5086 5242 5289 bus iomem mounts uptime
4680 5005 5087 5244 5290 cmdline ioports mtrr version
4706 5018 5088 5246 5291 cpuinfo irq net
需要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时变化产生的,可以通过以下命令来查看文件的具体值:
# cat /proc/interrupts
CPU0
0: 50662 XT-PIC timer
1: 3 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 618 XT-PIC ehci-hcd, eth1
8: 1 XT-PIC rtc
9: 0 XT-PIC usb-uhci, usb-uhci
11: 50 XT-PIC usb-uhci, eth0
12: 16 XT-PIC PS/2 Mouse
14: 8009 XT-PIC ide0
15: 0 XT-PIC ide1
NMI: 0
ERR: 0
其它文件的含意见表1所示。
/proc/sys目录下的文件一般可以直接更改,相当于直接更改内核的运行参数,例如:
# echo 1 > /proc/sys/net/ipv4/ip_forward
上面代码可以将内核中的数据包转发功能打开。
另外,Linux系统中提供一些命令来查询系统的状态,如free可以查看目前的内存使用情况,ide_info可以查看ide设备的信息,例如: #ide_info /dev/had。类似的命令还有scsi_info,可以查看SCSI设备的信息。这些命令一般也是查询/proc目录下的文件,并返回结果。
系统初始化过程驱动程序的安装
在Linux安装过程中,系统上的硬件会被检测,基于检测到的结果安装程序会决定哪些模块需要在引导时被载入。Red Hat的安装程序为anaconda,它提供了自动检测硬件,并且安装的机制。
但是,如果计算机内的某些硬件没有默认的驱动程序,比如一块SCSI卡,我们可以在启动后的boot提示符下,输入“linux dd”,在加载完内核后,系统会自动提示插入驱动盘,这时就有机会把该硬件的Linux驱动程序装入。
如果在安装系统时,某种硬件总是因为中断冲突(ISA总线的设备较常见,比如一块ISA网卡)没法正常驱动,或者是缺少驱动程序,那么可以在boot提示符下输入“linux noprobe”。在这种模式下,安装程序不会自动配置找到的硬件,可以自己来选择现有驱动,配置驱动程序的参数,或者选择用光盘或软盘加载驱动程序。
定制引导盘
系统启动时是如何加载驱动的?下面让我们来看一下Red Hat的安装光盘是怎样引导的。当Linux安装光盘启动时,加载位于光盘上isolinux中的内核文件vmlinuz,内核运行完毕后,又将initrd.img的虚拟文件系统加载到内存中。这个文件为ext2文件系统的镜像,经过gzip压缩,可以通过以下步骤查看该镜像中的内容:
# mount /mnt/cdrom
# mkdir /mnt/imgdir
# gunzip < /mnt/cdrom/isolinux/initrd.img > /ext2img
# mount -t ext2 -o loop /ext2img /mnt/imgdir
# cd /mnt/imgdir
# ls -F
bin@
dev/
etc/
linuxrc@
lost+found/
modules/
proc/
sbin/
tmp/
var/
# cd modules
# ls
module-info
modules.cgz
modules.dep
modules.pcimap
pcitable
其中modules.dep为模块的注册文件,同时有各种模块的依存关系。modules.cgz为cpio的打包文件,实际的各种驱动模块就在该文件中。我们可以通过以下命令解包:
# cpio -idmv < modules.cgz
由此可以看到,解包出来的目录2.4.21-4XXX。进入该目录下的i386目录,就可以看到当前启动盘中支持的所以驱动程序:
# ls
3c59x.o
3w-xxxx.o
8139cp.o
8139too.o
8390.o
aacraid.o
acenic.o
aic79xx.o
……
若希望在系统中加入需要的驱动程序,可以相应地修改这些文件,比如在modules.dep中加入该模块的名字和依存关系,将编译好的驱动模块文件加入modules.cgz中,这样就可以制定自己的安装光盘。
硬盘上的系统启动过程与上面类似,但是initrd的镜像文件要更简单些,一般在initrd-2.4.XXX.img的虚拟文件系统中,只会在/lib目录下包含ext3.o jbd.o lvm-mod.o等少数文件,用来驱动硬盘上的ext3的文件系统。加载文件系统后,就可以使用/lib/modules/2.4.XXX/下的modules.dep文件及Kernel目录中的各种驱动文件。
自动配置安装
如果安装完Linux系统后,又添加了新的硬件,那么系统必须载入正确的驱动程序才可以使用它。在Red Hat Linux中,可以使用kudzu来配置硬件。这是PnP设备的检测程序,当系统使用新硬件引导后,运行kudzu(默认会自动运行),如果新硬件被支持,那么它就会被自动检测到。该程序还会为它配置驱动模块,把结果写入到文件/etc/sysconfig/hwconf中,kudzu可以通过对比这个文件发现新安装的硬件,并进行配置;也可以通过编辑模块配置文件/etc/modules.conf来手工指定加载模块。
Kudzu服务默认每次启动时都要运行,如果需要缩短启动时间,使用下面命令可以停止系统启动时的kudzu服务:
# chkconfig kudzu off
如果要安装新的硬件,可以手动运行kudzu程序。
# kudzu
那么kudzu程序如何认识硬件的呢?可以查看/usr/share/hwdata/目录下的文件,根据这些文件中的PnP信息,kudzu可以识别各种硬件设备。
以上介绍了Linux下驱动程序的大体结构、主要的加载方式和相关配置文件,在安装Linux时加载驱动程序,并且根据需要定制自己的引导盘,在安装完成后安装新的、即插即用硬件。下一讲开始,我们将学习具体硬件驱动的安装方法。
用户和Linux之间的接口:shell命令
什么是shell
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。
shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。
当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。
一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。
当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。
我们来实习一下shell是如何工作的。
$ make work
make:***No rule to make target ‘work’. Stop.
$
注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。
在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“make work”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。
另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:
$ myprog
bash:myprog:command not found
$
可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息。
shell的种类
Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三种shell各有优缺点。Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。
Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。
Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途,有些shell是有专利的,有些能从Internet网上或其他来源获得。要决定使用哪个shell,只需读一下各种shell的联机帮助,并试用一下。
用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如:
# fgrep lisa /etc/passwd
lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash
shell被列每行的末尾(/bin/bash)。
由于Bash是Linux上缺省的shell,本章主要介绍Bash及其相关知识。
shell命令
命令行c
用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如:
$ date
二 11 23 01:34:58 CST 1999
$
用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下:
$ Command Option Arguments
1. 选项和参数
选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项可用于改变命令执行的动作的类型。例如:
$ ls
motd passwd
$
这是没有选项的ls命令,可列出当前目录中所有文件,只列出各个文件的名字,而不显示其他更多的信息。
$ ls -l
total 2
-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd
-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd
$
加入-l选项,将会为每个文件列出一行信息,诸如数据大小和数据最后被修改的时间。
大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如:
$ ls -l text
-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd
-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd
$
将显示text目录下的所有文件及其信息。
有些命令,如ls可以带参数,而有一些命令可能需要一些最小数目的参数。例如,cp命令至少需要两个参数,如果参数的数目与命令要求不符,shell将会给出出错信息。例如:
$ cp -i mydata newdata
注意:命令行中选项先于参数输入。
2. 命令行特征
命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。比如利用BACKSPACE键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。
利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无须重新键入该命令。
bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。按动上箭头,便可以在命令行上逐次显示各条命令。同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。
在一个命令行中还可以置入多个命令,用分号将各个命令隔开。例如:
$ ls -F;cp -i mydata newdata
也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。
$ cp –i
mydata
newdata
上面的cp命令是在三行中输入的,开始的两行以反斜杠结束,把三行作为一个命令行。
shell中的特殊字符
shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。
1. 通配符
通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。
* 代表任何字符串(长度可以不等),例如:“f*”匹配以f打头的任意字符串。但应注意,文件名前的圆点(.)和路经名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。
? 代表任何单个字符。
[] 代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f [a- d] 与f [abcd]的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数,形成最终的命令,然后再执行这个命令。
下面我们给出表10-1说明这些通配符的具体含义。
表10-1 通配符含义举例
模式串
意 义
*
当前目录下所有文件的名称。
*Text*
当前目录下所有文件名中包含有Text的文件的名称。
[ab-dm]*
当前目录下所有以a、b、c、d、m开头的文件的名称。
[ab-dm]?
当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称。
/usr/bin/??
目录/usr/bin下所有名称为两个字符的文件的名称。
特别需要注意的是,连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了。例如,模式“- a[*?]abc”中只有一对方括号是通配符,*和?均为普通字符,因此,它匹配的字符串只能是- a*abc和- a?abc。
最后说明一下使用通配符时需要注意的一些问题。由于*、?和[ ]对于shell来说具有比较特殊的意义,因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷的递归下去。另外要注意的一点是:如果目录中没有与指定的模式串相匹配的文件名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。
2. 引号
在shell中引号分为三种:单引号,双引号和反引号。
* 单引号 ‘
由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:
$ string=’$PATH’
$ echo $string
$PATH
$
可见$保持了其本身的含义,作为普通字符出现。
* 双引号 “
由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上的只有四个字符$,,’和”本身。而对”号,若其前面没有加,则Shell会将它同前一个”号匹配。
例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:
$ TestString=”$PATH\”$PATH”
$ echo $TestString
.:/usr/bin:/ bin”$PATH
$
读者可以自己试一下在第二个双引号之前不加会产生什么结果。
* 反引号 `
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:
$ pwd
/home/xyz
$ string=”current directory is `pwd`”
$ echo $string
current directour is /home/xyz
$
shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。
利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如:
$ today=`date`
$ echo Today is $today
Today is Mon Apr 15 16:20:13 CST 1999
$
反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线()将其转义。例如:
$ abc=`echo The number of users is `who| wc-l``
$ echo $abc
The number of users is 5
$
在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:
$ ls
note readme.txt Notice Unix.dir
$ TestString=”`echo $HOME ` ` ls [nN]*`”
$ echo $TestString
/home/yxz note Notice
$
其他情况,读者可自行试之。
1. 注释符
在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。
此外还有一些特殊字符如:用于输入/输出重定向与管道的<、>、<<、>>和|;执行后台命令的&;命令执行操作符&&和||及表示命令组的{}将在下面各小节中加以介绍。
来源:赛迪论坛