|
[color="Blue"]原文链接:http://www.tbray.org/ongoing/When/200x/2005/02/27/Linux-Solaris
原文最后更新:2005/03/09
译者:Jockey S. Kyd
翻译原则:用自己的语言按自己的理解表达出原文大意,非严格按照字词对照翻译。有错误望海涵。
介绍
ongoing是一个blog,但本文不是,所以我就按照时间顺序写了,也就是说,新增的内容会加到最后。为了尽可能让人们在使用Google之类的搜索引擎寻找这些问题的解答时在最前面找到本文的链接,我特地将这些东西汇总起来,而这样的话按照时间顺序组织也就会更棒一些。
因为赶工仓促,文章可能存在错误。网上可能有其它关于Linux到 Solaris 10 迁移的资源站点。如果你知道,请告诉我,我也好指向它们。
感谢这些贡献者:Sean Neakums,James Dickens,Tim Foster,Bryan Cantrill(当然啦),Chris Ferris,Scott Henry,Clayton Wheeler,Ryan Underwood,Niall Richard Murphy,Michal Benkur,and Bruce Riddle。
背景与偏见
从1979年开始,我先后使用了PDP-11/34上的 Unix V6,各VAX机器上的4.1BSD、4.2BSD,i386平台的Xenix,包括SunOS(直到1992年)在内的一些商用Unix,和贴着各种标签的 DEC Unix,直到1996年。在最近的10年中,我在服务器上使用了 Red Hat(略微),Debian和SuSE的GNU/Linux发行;从2002年开始,我转向了我笔记本电脑上的 Mac OS X。
在这块搞了这么长时间,意味着我的一些用法都是旧式的。我沉溺于念这样的咒语:并且我仍然敲打 more 而不是 less。我倾向于Emacs但对Vi也完全能胜任。
要知道,我们需要一个共通的术语来称呼所有这些使用fork(2)作为普通的进程创建工具的操作系统。这本文中,我将使用“Unix”。
揭秘:我比那些刚刚涉足Solaris的中等Linux用户有优势的地方是,我可以向 Bryan Cantrill 那些人问问题。
第一步,和SSH
大概2月24日左右我被指派去管理一对刚搭建出来的Opteron机器,并被告知直接跑着普通的 Solaris 10。
你对一台新Unix机器所能做的第一件事儿就是ssh登录上去。的确,它工作得很棒。到目前为止,我都不能分辨Solaris的ssh/sshd的工作和我以前在其它地方习惯使用的有什么不同。
Bash,或者其它
连接上去后我的第一个结论就是默认shell用的是bash,这让我很是高兴。除了一点:我把我笔记本上的.bashrc拷贝过去,却不见效果。所有的PS1和PATH设定若是我手工敲入,却可以工作。嗯...所以我想起了我过去的Unix使用经历,并把它们放进了.profile,有效。
这根本不是bash,而是“POSIX shell”;但是bash爱好者也会操作自如。对shell的选择现在已经不太重要了,毕竟它们有着共通的命令行编辑。譬如那些重要的,像CTRL+Z和fg/bg,for/do/done循环和>&等。
如果你真的需要bash,它在/usr/bin下面。
地狱般的目录
很多我需要使用的命令(首先就是ping和wget,我想)都不在我期望它们所在的地方。结果是:Solaris中的命令都被分布在不同的目录下。Bryan Cantrill 指出在/opt/csw/bin下有些有帮助的东东,而我这边没这个目录。但是一切OK,我有/usr/sfw/bin,他说到的那些东西都在这个下面。
没问题,没有什么是少量的环境设定无法解决的(别忘了MANPATH)。所以我的.profile中就有了:- PATH=/opt/csw/bin:/opt/sfw/bin:/usr/sfw/bin:/usr/X/bin:/usr/ccs/bin:$HOME/dev/jython/bin:$HOME/bin:$PATH
复制代码 但是,呃...为什么?这些目录除了糊弄住新手外真的是事出有因么?(Jockey注:这也许是为了保留系统的向后兼容性和满足不同用户群对符合不同标准的实用工具的需要,具体请查阅standards(5)手册页。)
手册页
在OSX和Linux下,我时不时会碰到缺少的或者老旧的手册页。Solaris看来对这点真的很重视:都在那儿呢,并且都更新过了。
当然,像所有的Unix手册那样,它们都是回答“这个命令的确切效果是什么”而不是“到底怎么样我才能做什么什么什么”的,事实就是这样。
两字母命令的惊讶
好吧,在Unix机器上你总会需要完成某些任务时需要用到ps对吧?我机械式地这么敲打:也就是我要问:“我跑了些什么进程”。我意识到这发霉的旧东西不再工作了。我要的,当然,其实是:我都不曾需要去查阅这些选项,它们就像是在那布满灰尘的储物柜里,柜门上灰暗的几个字母拼写,我想是...“System V”。
对于这些的确需要旧式的ps行为的人们,得用/usr/ucb/ps;但一个更好的选择是更现代化的pgrep(1),它在Solaris上可存在了八年了呢。
然后我想知道自己的磁盘设定,便敲入:马上就让人摸不着头脑了,因为看起来Solaris里-k选项把所有东西都变了个样。结论是:我真正需要的是-h和-l选项;我想知道我当年怎么错过了它们。
这个df的练习揭开了Solaris里/tmp的神秘面纱:它是挂载在RAM里的。真酷!
pkg-get
Bryan告诉我如果我需要一些Solaris里没有提供的开源软体,可以用这条命令搞定,就好像那总是被我认为是发行工程领域里的最高成就的apt-get一样。
除了,它不是一开始就在那儿,所以我不得不去Blastwave.org下载安装,也意味着我得找到wget,并且告诉它怎么使用Sun的企业内部网的HTTP代理服务器(译注:作者在Sun工作),也就是这样让我找到了关于这些奇怪的目录隐藏着哪些命令的。
呃,伙计,为什么?如果你使用Solaris需要这个工具,为什么就不直接和Solaris绑在一起呢?
后来,我发现,我真正需要的是安装“Freeware Companion”这张CD。里面有许多没装的小东动。但我仍然认为pkg-get本应该包含在其中。
Perl,和Python,和Java
- zep01 524> perl -ver
- This is perl, v5.8.4 built for i86pc-solaris-64int
- (with 27 registered patches, see perl -V for more detail)
- zep01 528> python
- Python 2.3.3 (#1, Dec 16 2004, 14:38:56) [C] on sunos5
- zep01 529> java -version
- java version "1.5.0_01"
- Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_01-b08)
- Java HotSpot(TM) Server VM (build 1.5.0_01-b08, mixed mode)
复制代码
cc,第一章
- zep01 502> cat hello.c
- main()
- {
- printf("hello world\n");
- }
- zep01 503> cc -o hello hello.c
- -bash: cc: command not found
复制代码
呃?但他们的确告诉我他们包含了一个编译器在内的!
哦,等等,他说的是GCC。
cc,第二章
- zep01 505> gcc -o hello hello.c
- zep01 506> ./hello
- hello world
- zep01 523> which gcc
- /usr/sfw/bin/gcc
复制代码 让我们看看,那的确有个cc,在/usr/ucb下,但那是另外一个编译器(就是我们卖的那个要钱的Forte包)的前端。
但这真的没什么大不了,因为GCC是个很好的编译器;但是,在机器上你不能敲打cc仍然有些遗憾。毕竟,Linux也使用GCC,也称它cc。
你问C++?我们拒绝C++!什么?你坚持你要?哦,好吧...- zep01 509> g++ -o hello hello.c
- hello.c: In function `int main()':
- hello.c:3: error: `printf' undeclared (first use this function)
- hello.c:3: error: (Each undeclared identifier is reported only once for each function it appears in.)
复制代码 我希望你现在感觉好些了。
一些实用的Solaris主义
这是来自 Fazal Majid 的一封邮件的标题。里面这么说:- isainfo -v (should show you you are in 64 bit mode)
- gcc -m64 (compile in 64 bit mode)
- iostat -xzd 5 (shows disk usage)
- prstat -vm (like top, finer grained)
- truss (follow syscalls)
- pmap (dump a process' adress space, try it with a 64 bit exe)
- prtconf -v (get hardware info)
- fuser (like lsof, with some twists)
复制代码
tar
它曾经是“tape archiver”,但现在它是“tarbaby”。Solaris在这块略微落后于Linux。基本的tar不包括z修饰符,所以你会发现需要做很多同样,它会报怨在来自 Apache Jakarta 的Tomcat的tarball中的符号链接。
提醒你,这些不是什么大灾难。但是如果它们惹着你,这有个法子:
我和Bryan讨论过这个,他解释说这里有个很大的遗留下来的问题:历史角度而言,存在很多微妙的tar的兼容性问题,而Sun的各个客户在出产应用程序产品时都包含进了这个奇怪的tar,是故替换掉这tar令人提心吊胆(但他承认z修饰符的优势)。不论怎么样,我把gtar别名成了tar。
顺便说一句,就在今天我在好几个地方看到一个叫star的东东,作为新闻报道里出现,因为它现在采用了CDDL重新发布。你能够通过pkg-get取得。它看上去是比gtar更好的选择,而且名字也很酷。
和Java有关的东东
Zeppelin需要Tomcat和Jython这俩servlet。
我下载了Tomcat,解包。开始工作。
我下载了Jython,运行自解安装包。开始工作。
我按照 Sean McGrath 的指导(在Windows平台下的,满是d:\jython-2.1之类)将Jython挂钩到Tomcat的servlet引擎。开始工作。
(打哈欠)我告诉你,这些Java的东西会很流行的。
docs.sun.com
那么,现在我有了两台机器。我想让以最浅显的方式Zeppelin分享一些代码并测试一些脚本和数据。我想到了NFS。但是上次我搭建这东西要追溯到上个世纪。我的老化的蜥蜴般的大脑不适合记一些命令和root密码;不是什么好组合啊。
有个网址:docs.sun.com。我似乎想起了我的老朋友 Jon Bosak 几年前被Sun从Novell挖过来创建了这份文档库。不论如何,我得到了关于 Solaris 10 的所有帮助的汇总,然后根据好几层目录层层展开,让我找到了目前我需要知道的东西,并且附带了一份关于如何统一项目相关文件的指导。我拷贝过来。现在我已经设定好机器并且相互之间共享了。
同样,这份概览也很棒。
NFS
现在,需要知道怎样才能和Linux之间共享数据的那几天过去了,我不知道Solaris是否(比Linux)更好,但有一点:Solaris真TMD顺溜。我最喜欢的一点就是根据指导所做的设定都是永久性的,不是“这里将告诉你怎么导出一个文件系统”,而是“这里告诉你如何设定导出并且从今往后一直生效”。因为我在Linux上的最大问题就是:我总是做了某些设定生效后忘记将它们写入配置文件,导致也许几个月后机器重启——Linux毕竟是Linux——我完全忘记了当初自己做了些什么,于是灾难接踵而至。
%,你爷爷的!
在Solaris上我还没有重新建立起Emacs工作环境,只得用Vi做编辑工作。这几年来,当我用Vi编辑时,我得按^z挂起Vi,与shell交互一阵子,再敲%回到编辑器。但Solaris的shell抱怨了:我不得不敲打%1。
我想这是因为我没使用bash的缘故,所以我启动了它,却得到同样的结果。好吧,这只是些小痛苦,却时不时地每几分钟就给我一次打击。
嗨...等下!Solaris 10 现在是开源的了。除了抱怨我还能做更多的事儿呢,我至少能修正它!我的天呐,谁知道上次我翻看shell的源代码是几十年前的事儿了? |
|