diff -u old-file new-file diff -Nru old-dir new-dir patch file-to-be-patched patch-file patch -pnum > patch-file
我在家里和公司使用的都是台式机(Ubuntu 系统),所以经常可能涉及到个人数据的同步,比如电子书、配置信息等。
为了保持统一性,传统的手工 tar 方式是不太现实的,幸好有 rsync 这个工具(也有人推荐使用 unison,有兴趣的可以去看看)。
我的两个台式机系统一般不会同时运行,或者一般都没有固定 IP,所以我使用了一台 FreeBSD 服务器作为中转,所有数据只与此服务器进行同步。首先,需要在中转服务器上安装 rsync 程序,因为是 FreeBSD 系统,很简单:
cd /usr/ports/net/rsync make install clean
然后在两台 Ubuntu 上都安装 rsync:
sudo apt-get install rsync
安装完成后,假设需要将本地的 /export/mydatas 目录同步到远程中转服务器的 /export/mydatas 目录:
rsync -auvz --stats --rsh=ssh /export/mydatas/ \ user@host.name:/export/mydatas/
注:数据都是通过 SSH 加密传输的(同时启用了压缩),所以你需要预先设置好你的 SSH 客户端和服务器的正常通讯。
回家之后,从中转服务器的 /export/mydatas 目录同步到本地的 /export/mydatas:
rsync -auvz --stats --rsh=ssh \ user@host.name:/export/mydatas/ /export/mydatas/
其实,就是把源和目的地址互换一下就可以了。
此外,如果你删除了某些文件,也行同步删除中转服务器上的文件,你可以在 rsync 命令中指定—delete 参数即可。
国内的ISP以及服务器托管机房(IDC)在网络上的限制越来越多,从先前的屏蔽扫描信号、禁止Traceroute,到现在开始中断长时间空闲TCP连接。
如果你SSH到远程服务器,长时间不操作的话,很容易被掐掉,这个东西真的很讨厌的,比如你在升级系统,正好升级脚本需要管理员手工确认一个东西,而你由于忙于其他事物疏忽这个东西,等你回过来,连接已经中断,没法操作,只能重新开启连接后重新开始。如果是必须一次完成的操作,这个时候会引起严重后果。
OpenSSH有一个 ClientAliveInterval 参数,在你的 sshd_config 配置文件中设置一个合适的值,比如:
ClientAliveInterval 15
就可以让 OpenSSH 服务器端在空闲的时候定时向客户端请求一个数据包。另外, man sshd_config 可以看到,这个参数只在 SSH protocol version 2 中有效(不过,为了安全起见,早就应该使用 SSH2 了)。
日常开发工作中使用的是 Emacs + ECB 环境, ECB 是建立在 CEDET 的基础上,CEDET 使用 Semantic 作为代码分析工具,所以在 Emacs 编辑目录中会生成类似“semantic.cache”这样的缓存文件,在我的 LinCVS (新版本叫 CrossVC )中会显示在“Non-controlled files”中,比较影响正常的使用,因此可以使用 CVS 的 ignore 机制将不需要的文件隐藏起来。但这些临时文件分散在各个子目录中,想要在每个子目录中创建一个 .cvsignore 文件是不太现实的,幸好 CVS 支持全局设置,可以在个人用户的 Home 目录设置一个全局生效的 .cvsignore 文件,比如我现在的 ~/.cvsignore 文件内容如下:
.cvsignore semantic.cache
第一行是将 CVS ignore 文件本身隐藏起来,第二行是隐藏 Semantic 生成的临时文件。这样设置后,不需要在 CVS 的各个子目录中重复设置,全局生效。
事实上,CVS 支持多种 ignore 机制,具体方式如下:
- 服务器端 CVS 仓库的 $CVSROOT/CVSROOT/cvsignore 文件,这个文件控制着所有用户的操作;
- 每个用户 Home 目录中 .cvsignore 文件;
- 环境变量 $CVSIGNORE 的设置;
- 任何 cvs 命令中 -I 选项;
- cvs 遍历目录时子目录中的 .cvsignore 文件;
CVS ignore 文件中可以包含多行,每行可以设置多个文件,文件名之间使用空格分开。因此,如果你的文件名中包含空格,在 CVS ignore 文件中将被区别对待,忽略功能就会失效,不过我们可以使用 foo?bar 来匹配“foo bar”。
在利用邮件系统方面,经常会需要模糊匹配邮件地址的功能,比如邮件列表、批量将某些地址的邮件转储到外部程序等。在 QMail 中,可以利用地址模糊匹配,配合 Ezmlm 轻松的实现邮件列表,同样,也可以简单的将类似 t-xxxx@example.com 地址的邮件提交到某个外部程序。
在 Postfix 中,就不那么容易实现了,Postfix 的 .forward 文件和 alias map 不支持正则表达式或者模糊匹配,另外,考虑到安全性,Postfix 在投递邮件之前,必须验证目的邮箱地址的有效性,所以,在 QMail 中可行的简单邮件地址匹配,在这里行不通。在《 Postfix权威指南 》一书讲解虚拟域的章节中,提到了可以使用 transport_maps 和 virtual_alias_maps 实现邮件地址模糊匹配的调用外部程序功能。
其中,transport_maps 定义了如何调用外部程序,而 virtual_alias_maps (实际上,如果是想实现模糊地址匹配,应该使用 virtual_mailbox_domains 和 virtual_mailbox_maps)解决了邮箱地址验证问题。virtual_mailbox_maps 支持数据库格式的 map,所以,可以非常方便的整合到你的系统中。
Recent Comments