18
Dec

Leopard确实是…UNIX!

谷歌的某工程师,你一定不能错过这篇文章!这是一个证明Mac OS X Leopard确实是UNIX而不是Linux的证据!(典故在这里

leopard-ps.jpgMacUser的一位编辑在某天使用Leopard的终端的时候,发现他熟悉的ps -aux命令居然不能得到他预期的结果!错误提示是诡异的“No user named ‘x’ ”!熟悉UNIX/Linux的读者一定已经在给我提示了,“去掉短横线试试呢?”没错!去掉短横之后,这条命令“ps aux”就能正确运行了!

不熟悉命令行的读者一定已经开始犯迷糊了,什么“ps aux”啊?好吧,我来解释一下。“ps”是一条查看系统进程的命令,相当于Windows XP下的“tasklist”命令,可以通过指定不同的参数查看符合参数指定的条件的进程信息。“ps aux”就是带上了“aux”参数的“ps”命令,能列出系统中所有用户的所有进程。“aux”实际上是三个参数:a, u, x,想了解a, u, x分别指什么的读者可以阅读“ps”的帮助文档

有“-”和没有“-”的参数之间又有什么区别呢?在为命令指定参数的时候,使用“-”的参数通常被称为UNIX风格的参数,而不用“-”的参数,则被称为BSD风格的参数。一个很要命的问题就是“ps”同时包含UNIX风格的参数和BSD风格的参数——没错,ps不仅有a, u, x参数,还有-a, -u参数(注意,没有-x参数),而两者的意思是完全不同的。因为Mac OS X是符合UNIX 03认证的正宗的UNIX,因此,将”ps aux”不小心误用为”ps -aux”的时候,实际上命令也就成了“ps -a -u x”,这条命令的意思大致是,列出所有属于用户‘x’的进程。在Mac OS X中,如果系统中不存在用户名为‘x’的用户(基本上没有人会新建一个名字为x的用户帐户吧),系统就会直接报错,提示不存在用户‘x’,这也就是上面这位MacUser的编辑遇到的问题。

linux-ps.png通常,在Linux下,在用户将”ps aux”误用为”ps -aux”的时候,如果没有名为‘x’的用户,则系统会直接把“ps -aux”解释为“ps aux”,但是会在输出“ps aux”的命令运行结果之前会打印一条警告信息(上图)。

很明显,Mac OS X和Linux对待“ps -aux”的态度不一样。尽管Mac OS X这样做对用户有点不友好,但是这个确实UNIX 03认证的要求。

深入阅读:
1. UNIX和Linux的历史:UNIX年表
2. Mac OS的历史:A Technical History of Apple’s Operating SystemsPDF下载
3. ps的man文档(来自Linux):http://www.rt.com/man/ps.1.html
4. Apple官方文档:UNIX 03 Conformance Release Notes

No Comments

Be the first to comment on this entry.

Leave a comment

Name(required)
Mail (will not be published)(required)
Website

Fields in bold are required. Email addresses are never published or distributed.

Some HTML code is allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URLs must be fully qualified (eg: http://apple4.us),and all tags must be properly closed.

Line breaks and paragraphs are automatically converted.

Please keep comments relevant. Off-topic, offensive or inappropriate comments may be edited or removed.

    @Apple4us

    友情链接

    最近的评论