第十日 接着写代码 , 端口/进程的占用情况 lsof

第十日 接着写代码 , 端口/进程的占用情况 lsof

=== 琐事 ===

我是一个玩物丧志的人, 堕落地看了几天美剧<太空堡垒卡拉狄加>, 终于在周六结束了这荒淫无度的生活.

子在川上曰:逝者如斯夫,不舍昼夜

昨天完成了添加网站的功能, 现在已经有35个网站了 (见 http://kanrss.com/www/who )

如果你觉得不错网站 , 欢迎在这里提交 http://kanrss.com/www/join


=== 技术 ===

恩, 为了减少写网站的主机带宽成本, 我也兼职卖卖空间 ( http://stdyun.com/vhost ) .

不过那些域名的备案很浪费我宝贵的青春, 用经济学术语说就是"边际成本太高", 所以我一直很低调的卖着.

我提供了一种用nginx的做端口转发的模式, 然后就有用户跑来跟我说 -- 我的端口被别人占用了.

恩, 当然 ,用 netstat 可以看到端口的占用情况 -- 不过我更喜欢 lsof , 通常它会更快一些.

lsof 不是系统自带命令,需要安装. Gentoo用户只需要简单的 emerge lsof .

然后以root用户运行它 -- 不然当你检查其他用户进程占用端口情况的时候 , 会有很多权限的问题

以80端口为例

lsof -i :80

结果如下

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   19319  root   10u  IPv4   9341      0t0  TCP *:http (LISTEN)
nginx   19320 nginx   10u  IPv4   9341      0t0  TCP *:http (LISTEN)
nginx   19321 nginx   10u  IPv4   9341      0t0  TCP *:http (LISTEN)

很清晰, 我不多说了. 更多使用的方法可以看看这篇文章 , "使用 lsof 查找打开的文件" http://www.ibm.com/developerworks/cn/aix/library/au-lsof.html

lsof 就是用来看 哪个进程打开了哪个文件 的工具.

"刚刚我们岂不是查看端口?" -- 千分之一的小白会这样问.

那么请牢记 UNIX格言 : 一切都是文件. -- 当然 Linux 也差不多, 就不纠结是 UNIX 还是 Linux了.

"""
这里的“一切”确确实实意味着一切。硬盘,硬盘分区,并行口,到网站的连接,以太网卡:所有这些都是文件。甚至目录也是文件。除了标准的文件和目录,Linux 还可以辨识很多别的类型的文件。

注意这里说的文件类型不是文件内容的类型:对于Linux系统,不论是 PNG 图象,二进制文件还是其他什么,文件就是一串数据流。通过内容区分文件类型是留给应用程序的任务。
"""

所以, 我更喜欢跟玄之又玄的一种说法 -- 万物皆流 (古代哲学家 赫拉克利特 http://baike.baidu.com/view/23031.htm ).

OK, 说到Unix格言, 我顺便汇总一下. 不喜欢Unix的人请 goto 《UNIX痛恨者手册》 ; // 文章结尾

    * Everything (including hardware) is a file
      所有的事物(甚至硬件本身)都是一个的文件。

    * Configuration data stored in text
      以文本形式储存配置数据。
    
    * Small, single-purpose program
      程序尽量朝向小而单一的目标设计
    
    * Avoid captive user interfaces
      尽量避免令人困惑的用户接口
    
    * Ability to chain program together to perform complex tasks
      将几个程序连结起来,处理大而复杂的工作。


Unix管道的发明人、Unix传统的奠基人之一Doug McIlroy在[McIlroy78]中曾经说过:

1. 让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂。
2. 假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息干扰。避免使用严格的分栏格式和二进制格式输入。不要坚持使用交互式输入。
3. 尽可能早地将设计和编译的软件投入试用, 哪怕是操作系统也不例外,理想情况下, 应该是在几星期内。对拙劣的代码别犹豫,扔掉重写。
4. 优先使用工具而不是拙劣的帮助来减轻编程任务的负担。工欲善其事,必先利其器。

后来他这样总结道(引自《Unix的四分之一世纪》(A Quarter Century of Unix [Salus])):

Unix哲学是这样的:一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口。

Rob Pike, 最伟大的C语言大师之一, 在《Notes on C Programming》中从另一个稍微不同的角度表述了Unix的哲学[Pike]:

原则1:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。
原则2:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。
原则3:花哨的算法在n很小时通常很慢,而n通常很小。花哨算法的常数复杂度很大。除非你确定n总是很大,否则不要用花哨算法(即使n很大,也优先考虑原则2)。
原则4:花哨的算法比简单算法更容易出bug、更难实现。尽量使用简单的算法配合简单的数据结构。
原则5:数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法[7]。
原则6:没有原则6。

Ken Thompson——Unix最初版本的设计者和实现者,禅宗偈语般地对Pike的原则4作了强调:

拿不准就穷举。


《The Art of Unix Programming》

1.     模块原则:使用简洁的接口拼合简单的部件。
2.     清晰原则:清晰胜于机巧。
3.     组合原则:设计时考虑拼接组合。
4.     分离原则:策略同机制分离,接口同引擎分离。
5.     简洁原则:设计要简洁,复杂度能低则低。
6.     吝啬原则:除非确无它法,不要编写庞大的程序。
7.     透明性原则:设计要可见,以便审查和调试。
8.     健壮原则:健壮源于透明与简洁。
9.     表示原则:把知识叠入数据以求逻辑质朴而健壮。
10.   通俗原则:接口设计避免标新立异。
11.   缄默原则:如果一个程序没什么好说的,就沉默。
12.   补救原则:出现异常时,马上退出并给出足够错误信息。
13.   经济原则:宁花机器一分,不花程序员一秒。
14.   生成原则:避免手工hack,尽量编写程序去生成程序。
15.   优化原则:雕琢前先要有原型,跑之前先学会走。
16.   多样原则:决不相信所谓“不二法门”的断言。
17.   扩展原则:设计着眼未来,未来总比预想来得快。


1994年,X窗口系统开发组的成员Mike Gancarz根据他自己的Unix系统经验以及和其他领域使用Unix系统的资深程序员们的讨论结果,写成了《The UNIX Philosophy》,提出了9条训格之言:
一:小即是美。
二:让程序只做好一件事。
三:尽可能早地建立原型。
四:可移植性比效率更重要。
五:数据应该保存为文本文件。
六:尽可能地榨取软件的全部价值。
七:使用shell脚本来提高效率和可移植性。
八:避免使用可定制性低下的用户界面。
九:所有程序都是数据的过滤器。


《UNIX痛恨者手册》:

最后推荐一下 《UNIX痛恨者手册》 http://kanrss.com/down/doc/unix_haters.html

这是一本很有趣的书, 是那些用惯UNIX的人对UNIX的各种指责,诋毁,谩骂和嘲笑. 是由爱而生的恨. 摘录一段:

UNIX态度

我们展现了一个非常惨淡的图景: 迷一般的命令名,不一致和无法预计的运行结果,危险命令没有保护,无法接受的在线文档以及在错误检查和容错性方面的稀松工作。那些参观UNIX的人不是为了得到热情款待,他们不是迪斯尼公园中的游客,更像是执行任务中的联合国维和部队。

UNIX怎么会搞成这个样子?如我们曾指出的那样,其中有一些是历史原因造成的。但是还有其他的原因:那就是多年来形成的UNIX文化,这种文化被称为 “UNIX哲学”。

UNIX哲学不是来自Bell实验室或UNIX系统实验室的手册。他是自然形成的,其中包含了许多人的贡献。Don Libes和Sandy Ressler在《UNIX生活》(Life with UNIX)中对UNIX哲学作了很好的总结:

小即是美
用10%的工作解决90%的任务
如果必须作出选择,选择最简单的那个。

根据UNIX程序和工具的实际表现来看,对UNIX哲学更为精确的总结应该是:

小的程序比正确的程序更好
粗制滥造是可以接受的
如果必须作出选择,选择责任最小的那个。

UNIX没有哲学,UNIX只有态度。

这个态度指出简单的做了一半的工作比复杂完整的工作更好。这个态度指出程序员的时间比用户的时间更为珍贵,即使用户比程序员要多得多。这个态度指出达到最低要求就足够了。

.............  .............  .............  ............. 

我被这里散步的文档无用论观点深深折服了。事实上,我进一步认为文档就是毒品,我对于它的依赖性是人为造成的。在专业人士的帮助下,我想我能够戒掉 它。

而且,我的良心告诉我不能再靠贩卖这种毒品为生了。我决定回到数学研究院脱胎换骨,彻底从这个寄生虫一样的职业中脱身。

虽然下面这份文档似乎表明了我中毒有多么深,可我还是觉得下一版SGI中应该把它提供给用户。这不过是暂时之举,以后会把它搞掉的。

这是我的建议:

标题:“无言UNIX”

对象:UNIX新手

简介:提供在没有文档条件下使用UNIX的通用策略。展示在没有文档条件下摸清任何操作系统的通用原则。

内容:

介绍:“无文档”哲学简介
为什么手册是恶魔
为什么man手册是恶魔
为什么你还是应该读这份文档
“这将是你读的最后一份文档!”

第一章:如何猜测可能存在哪些命令

第二章:如何猜测命令名

UNIX的怪异缩略命名法
案例:grep

第三章:如何猜测命令选项

如何破解怪异的使用说明
案例:tar
如何知道什么时候顺序是重要的
案例:fine

第四章:如何知道运行正确:没有消息就是好消息

从错误中恢复

第五章:口头传统:你的朋友

第六章:如何获得和维持一个活生生的UNIX高手

如何喂饱你的高手
如何让高手高兴
提供全部新闻组连接的重要性
为什么你的高手需要最快的计算机
免费可乐:高手的长生不老药
如何保持高手身体健康
高手什么时候睡觉?

第七章:常见疑难:你的高手不理你了

识别愚蠢的问题
如何安全地提出愚蠢问题

第八章:如何承受压力

如何对待失败

注:可能只有6、7章才是真正需要的。是的,这才是正路:我把它称为“UNIX高手驯养指南”。



::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

订阅 substack 体验古早写作:


关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::