2011年6月

daemon起源

Daemon 在类 Unix 系统世界里代表运行在后台的守护进程,那么这个单词的起源的究竟是什么呢?

要说 Daemon,就不得不提和它十分相近的另外一个单词 Demon。Demon 源自中世纪拉丁语,而 Daemon 则源自古典拉丁语,在相当长的时间,这两者都是互通使用的,表示“具有掌管能力的灵体”。直到 14 世纪时由于各种版本 Bible 的流传, Demon 具有了“邪恶灵魂”的含义,而 Daemon 依然保持了原有的含义。现在 Daemon 的含义是“位于 God 和 Man 之间的超自然存在”或者“守护精灵”。

19世纪的科学家James Maxwell在一次“思维试验”(或者说“白日梦”)时,想象在一个被分隔为两部分的封闭容器中间,存在一个大小仅仅够一个气体分子通过的门。这道门,由一个想象中的掌管精灵 Daemon 控制。这个掌管精灵 Daemon 根据气体的速度,只让速度快(温度高)的气体分子由 A 半到 B 半,也只让速度慢(温度低)的气体由 B 半到 A 半。最终这个封闭容器将一半冷一半热。当然,麦克斯韦的这个想法是脱离了热力学原理的,而后来的量子力学更是进一步阐述了其不可能性。

在 1963 年运行于 IBM 7094 系统上的 Project MAC 项目中,具有物理学背景的 Jerome H. Saltzer 教授借鉴了以上所述的”掌管精灵“含义,首次使用 Daemon 指代"系统进程"

从那时起 Daemon 在计算机半个多世纪的发展中,又增添一个新的含义:系统守护进程。

原文地址: daemon起源
英语原文: The Origin of the word Daemon

CentOS下使用pptp架设vpn

我折腾了一晚上终于安装成功了, 虽然网上有很多文档了, 虽然pptp是最简单的一种, 但是基本是都是复制的, 有些地方会导致错误也没人纠正, 所以我就整理发上来.

好了, 直奔主题, 我使用的系统是centos 5.6

首先约定好, 以下代码中#...及其以后的内容为注释, 可不复制. 示例代码中如何修改的文件里已经存在可以修改成示例那样, 如果没有请添加.

1: 安装依赖软件, 直接yum:

yum makecache
yum -y update
yum -y install ppp wget iptables iptables-devel perl

解释: pptp依赖ppp和iptables运作, 同时需要perl库.

2: 安装pptp:

32位系统:

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm

64位系统:

wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm

- 阅读剩余部分 -

wget自动断点续传的方法

有时候我们使用wget下载东西被迫打断, 比如网络故障, 终端意外断开, 忘了加"&"放入该台等等.

沉稳的人或许会想到重新开启wget, 并使用 -c断点续传, 可是有时候, 因为N个g的东西突然断了, 一冲动就晕了, 就纠结了, 可能就会就重新跑wget了, 甚至截止到本文还有人不知道-c.

那么为了杯具不再发生, 我们可以让wget每次运行的时候自动加上 -c参数, 那样就万事大吉了嘛. 方法如下

在家目录下新建文件".wgetrc", 内容如下:

continue = on

保存退出, 以后再使用wget就会自动断点续传了, Y, 演示如下:

- 阅读剩余部分 -

批量建立目录

先看看示例吧:

[wind@windphp test]$ mkdir {1..9}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9
[wind@windphp test]$ mkdir {a..z}
[wind@windphp test]$ ls
1  2  3  4  5  6  7  8  9  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

首先是建立1-9的9个目录, 然后是是a-z的26个目录, 这里的范围是可以自定的, 当然了, 范围要合理, 比如字母范围如果是双数就不行了哦.

如果是乱序的, 就麻烦点了. 如下:

[wind@windphp test]$ mkdir {a,1,5}
[wind@windphp test]$ ls
1  5  a

{}大括号的用法(把文件/目录备份/复制/在文件所在目录下)

先看看示例代码:

[wind@windphp ~]$
[wind@windphp ~]$ mkdir -p test/a
[wind@windphp ~]$ cd test/
[wind@windphp test]$ ls
a
[wind@windphp test]$ mv /home/wind/test/{a,b}
[wind@windphp test]$ ls
b

上述代码将/homw/wind/test/目录下的a目录重命名成b, 再看:

[wind@windphp test]$ touch a.txt
[wind@windphp test]$ cp /home/wind/test/a.txt{,.bak}
[wind@windphp test]$ ls
a.txt  a.txt.bak  b

上述代码将/home/wind/test/目录下的a.txt备份成a.txt.bak, 不过也可以写成:

cp /home/wind/test/{a.txt,a.txt.bak}

这样就更清晰, 好理解了. 至于详细的使用可以自己多试试.

Linux 技巧:让进程在后台可靠运行的几种方法

原文链接: Linux 技巧:让进程在后台可靠运行的几种方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。

nohup/setsid/&

场景:
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?

hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。

解决方法:

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
1. nohup

- 阅读剩余部分 -

原子操作

引用百度百科: 原子操作

所谓原子操作是指不会被线程调度机制打断的操作;

这种操作一旦开始, 就一直运行倒结束, 中间不会有任何 context switch (切换到另一个线程).

通俗点讲就是一份资源同时只能被一个进程(线程/...)操作.