2005年十二月月 发布的文章

在Linux上工作

Linux上学习Linux内核我想应该是最好的方法了。Linux对我来说绝对是一个新鲜环境,搭建在Linux上的工作环境就是我的首要工作,这篇blog记录的就是我在Linux上的工作环境,也希望对大家有些借鉴意义。

我的Linux是在一个多月以前安装的[注1],安装的版本是Fedora Core 4。我使用的是本地磁盘映像安装,磁盘映像文件很大,总共4个,大约2.4G体积。安装过程倒是没有像网上很多人说得那样不顺利,包括修改、合并分区在内大约用了3个小时就看到Linux的桌面了。

进入Linux首先映入眼帘的的就是Linux桌面,我选择了GNOME(GNU Network Object Model Environment)桌面,不为什么,就是因为它流行。下一步就是熟悉这个新环境了,如基本的系统设置、网络设置以及个性化定制等,这些不详述。

工作环境是一个常用软件的集合,在Windows下自不必说了,那些软件都是耳熟能详了。但是在Linux下又有哪些软件可以作为替代品呢?带着这样的目的,我开始了搭建Linux工作环境的历程。另外王垠(http://learn.tsinghua.edu.cn:8080/2001315450)曾在其主页上介绍过不少好用的工具软件,这里很多软件也都是源于王垠的介绍。

Linux下的软件安装一般有两种方法:
(1) 通过rpm方式
安装:rpm -i your-package.rpm
卸载:rpm -e your-package

(2) 通过源代码编译方式
源代码编译三部曲:configure –> make –> make install

我的Linux工作环境
(1) 强大的Bash
以前在Solaris上开发使用的都是C shell,而Linux默认的Shell却是Bash Shell。我初始感觉Bash Shell与C Shell不同之处包括可以自动匹配补齐命令行、支持UP和DOWN ARROW来选择前一个和后一个命令行。对于一个非系统工程师的开发人员来说有一份得心应手的Shell配置文件足矣。下面是我的一份配置文件,简单而灵活,关键一点是它完全能够满足我的需求:
/* .bashrc */
# Tony Bai's .bashrc

#
# Source global definitions
#
if [ -f /etc/bashrc ]; then
        . /etc/bashrc   # –> Read /etc/bashrc, if present.
fi

#
# Greetings
#
echo "*********************************"
echo "***     This is Tony Bai      ***"
echo "*** Welcome to my linux world ***"
echo "*********************************"

function _exit()        # function to run upon exit of shell
{
        echo "********************"
        echo "***   Bye Bye!   ***"
        echo "*** Welcome Back ***"
        echo "********************"
}
trap _exit EXIT

#
# Export environment variables
#
CVSROOT=:pserver:tony@127.0.0.1:/export/home/cvs/CVS-ROOT
PROJDIR=/home/administrator/proj/example
PATH=.:$PATH:$HOME/bin:.local/bin

export CVSROOT
export PROJDIR

#
# User specific aliases and functions
#

# System command set
alias rm='rm -i'
alias mv='mv -i'
alias mkdir='mkdir -p'
alias h='history'
alias which='type -all'
alias ..='cd ..'
alias path='echo -e ${PATH//:/\\n}'
alias du='du -kh'
alias df='df -kTh'
alias la='ls -Al'               # show hidden files
alias ls='ls -hF –color'       # add colors for filetype recognition
alias lx='ls -lXB'              # sort by extension
alias lk='ls -lSr'              # sort by size
alias lc='ls -lcr'              # sort by change time
alias lu='ls -lur'              # sort by access time
alias lr='ls -lR'               # recursive ls
alias lt='ls -ltr'              # sort by date
alias lm='ls -al |more'         # pipe through 'more'

# Compile
alias gcc='gcc -Wall'

# System info Viewer
alias cpu='cat /proc/cpuinfo'
alias mem='cat /proc/meminfo'
alias version='cat /proc/version'
alias ipconfig='/sbin/ifconfig'

# Project info
alias cdinc='cd $PROJDIR/include'
alias cdsrc='cd $PROJDIR/src'

另外修改.bashrc后别忘了执行'bash'使配置修改生效。

(2) 输入法
毕竟是开发中文程序,中文输入发必不可少。虽觉得Fedora自带的“智能拼音”不错,但是“小企鹅输入法(free Chinese Input Toy for X)”的定制功能却让我更加垂涎。遂在小企鹅输入法网站上下载了专门为Fedora Core 4制作的rpm。安装后我们就可以修改~/.fcitx/config文件来订制你个性化的输入法了,如果你在Windows上使用微软输入法习惯了,我们完全可以把“小企鹅输入法”变成Linux上的“微软输入法”。

(3) 浏览器
无论在任何平台上我们都不能忽略网络世界的存在,在Windows上有IE,在Linux上我们有Mozilla Firefox这一新宠儿。关于Firefox的资料太多太多,我想这里就毋庸讳言了。

(4) 邮件工具
Evolution, 一款在使用习惯上颇为接近于Microsoft Outlook的邮件客户端及个人信息管理程序,如果你是用惯了Outlook的用户,那么Evolution将是你在Linux上的一个不错的选择。Evolution是Linux自带的程序,无需你下载安装了。

(5) 编辑器
对于一名程序员来说获得一得心应手的编辑器就好比如虎添翼一般。Linux给你提供了多种选择,既有图形界面的,又有基于终端的。不过VI/VIM仍然是我的最爱。

(6) 开发工具
由于做后台服务端开发,所以必不可少的需要Gcc, make等工具, Linux上还默认提供automake, autoconf等工具,免去了你手工编写Makefile的烦恼,不过要掌握这些工具也需要一个过程,自己权衡吧^_^。

(7) 词典工具
王垠在其文章中提到了WordNet,对该软件的新颖的概念很是感兴趣,遂down了一个,不过遗憾的是没有编译通过,至今未找到原因。

(8) 娱乐工具
程序员在工作之余都喜欢看看电影,而MPlayer又是被公认在Linux下最好的媒体播放软件。遗憾的是我的机器上没有声卡,不能听到MPlayer输出的优美音乐。

(9) 办公工具
由于公司的文档都是由微软的工具产生的,要想在Linux下阅读和修改可不是件容易事。试过了Linux自带的OpenOffice,PPT文档还可以,Word文档简直就不堪入目了。王垠推荐将Word等先转换为html网页再查看,我很懒嫌麻烦。想起金山最新推出的WPS2005在Windows下的效果还不错,希望金山也能尽快推出Linux下的WPS版本。来解决这一使用Linux办公的最大难题。

(10) 通讯工具
对于使用QQ的人,LumaQQ相信是最好的选择;而Gaim是一个支持多种IM协议的工具,只是上手不是很容易罢了。

初接触Linux,试用了上面的一些工具,还处于经验积累阶段。

[注1]
我是参考http://fedora.Linuxsir.org上的安装说明一步一步做的,感觉还不错。

差异学习

看了dreamhead的那篇“差异程序员”,又恰逢在今天dreamhead在一封邮件中谈到其继续深入“向下学习”的想法,心里突然有了本篇题目这样的一个话题。

“差异程序员”(http://dreamhead.blogbus.com/logs/2005/12/1676755.html)

最近自己也在“向下走”,这和dreamhead的想法和做法不谋而合。dreamhead在其blog和邮件中都谈了其在“向下走”过程中的体会,“差异程序员”一篇dreamhead也是在告诉大家其不满足于只做应用一层的程序员,这也同样是我的一些想法。

想法有了,那我们是如何做的呢?mail中dreamhead谈到了他下一步的学习目标和计划,在我的回复mail中我也谈了我将在linux内核方面和编译技术方面作些努力的初步想法。dreamhead也马上谈了他关于这两方面的看法,这里引用少许,目的在对比:
“编译器的前端相对来说都是简单的,技术基本都是现成的,而且有现成的工具供人使用,当然,为了学习,还是自己尝试写一遍比较好。后端的东西才是真正复杂的,不同的平台不同的OS都会有不同的要求,之后,还有优化的技术,复杂度直线上升。… … 如果想了解OS运作,Linux内核显然过于庞大了,那本《自己动手写操作系统》则更为简单。一些基础的东西是类似的,只要理解了那个小内核,理解Linux只是更好的去体会更好的设计而已,因为所有的知识已经都各就其位了,一旦架构形成,剩下的只是不断完善了。”

看到这样的回复,我马上意识到:虽然都是向下走,但是我和dreamhead的目的不同,形成的想法就有了些差异。

我之所以想啃下编译,原因起初有二:一是在前不久的工作中想采用编译中的技术来完成项目中一个模块的功能;二是填补大学时没有学懂编译的遗憾,就是想弄懂那些三元式、四元式,让自己更专业一些。上星期看了“dragon book[注1]”作者的一席话又为我学习编译增加了一枚筹码,其大致意思就是:大多数学习编译的人一生都可能没有机会去创造一门语言,那么我们为什么还学习编译呢?其中一个原因就是编译技术中某些原理可以适用于一般应用软件的设计。比如词法分析器中的字符串匹配技术可用于文本编辑器、信息获取系统或者模式识别程序中。

对于学习linux内核我有以下几点考虑:首先一直在用户层使用内核提供的系统调用,比如fork,在很多Unix编程书中会讲到调用fork后子进程与父进程的异同,这些几乎就是应用程序员必须牢记的东西,一直很讨厌强记,遂想刨根问底的去看看fork的一些实现,这样弄清了其来龙去脉就再无须强记了,而弄清了这些后反过来又会让你更好的使用这些系统调用;其次,想在用户层程序中借鉴内核的优秀设计思想,比如缓冲技术,在内核中有在应用层也有,应用层完全可以参考内核中的某些优秀设计来实现;最后,了解操作系统内核会让你对计算机的体系的理解有一个质的飞跃。即使是计算机本科毕业的人又有多少敢说自己完全理解了计算机呢。

dreamhead以了解OS运作为目的向我们推荐《自己动手写操作系统》一书自然没错,带着这样的目的来学习这本书效果肯定也不错;但是对于我上面所说的那些目的,这本书也仅能满足一小部分,该书可以作为整个学习过程中的一个参考资料。这就是由于学习目的不同带来的一些差异性的东西。

差异学习没有对错之分,也没有好坏之分,只是因目的不同而已罢了。目的不同,学习的关注点和着重点就会不同,这样即使学习同一样的技术效果也不同。另外学习不是孤立的,沿着学习的主线方向会有很多旁支,如学习linux内核,你将会了解到CPU体系结构、存储器管理和算法理论等多方面的知识。

最近看到某一电视台播放的央视版“笑傲江湖”,情节中提到华山剑宗与气宗之争,当时自己就考虑“为何两派不二者兼修以达到前所未有之境界呢”,在后来的令狐冲无心插柳却达到了这一境界,想必那些在两宗相争中冤死的华山前辈们看到这一结局都后悔之极了吧。(开个玩笑,其实从古自今大凡争斗之事多源自“权势之争”)。令狐冲成为了绝顶高手又让我想到了“差异程序员”,要想成为“程序界”的令狐冲又何尝不需要“上下”兼修呢?起码dreamhead已经为我们作出了表率。

[注1]
“dragon book” — 《Compilers: Principles, Techniques and Tools》by Aho, Sethi and Ullman

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats