%(百分号)在 crontab 中是一个特殊字符,相当于回车,如果命令中包含 %,那么 % 之后的内容将作为标准输入赋值给前面的命令。

如果命令行中需要 %,那就得在 % 前面加一个反斜线“\”来转义,就变成了“\%”, 当然了,如果要用反斜线的话,那就是“\\”这样子啦。

不过,我要在计划任务中添加一个任务,是要每天分析前一天的 apache 日志。日志的文件名,是用命令行参数来指定的。昨天的日志文件名就写成这样子

$(date –date ‘yesterday’ ‘/%Y-%m/access_log_%Y_%m_%d.log’)

比如今天是2007年4月13日,那这条命令的结果就是:

/2007-04/access_log_2007_04_12.log

因为我这是在命令行中指定日志文件的,所以在添加到 crontab 中以后,需要在 % 之前添加反斜线。但是却出现了意外,因为 crontab 把上面的那个命令结果变成了

/\2007-\04/access_log_\2007_\04_\12.log

反斜线竟然还在!

服了他了,我只好把命令写到一个文件里,然后在 crontab 里面调用那个文件了。

用过 Linux 都知道,添加 DNS 服务器是在 /etc/resolv.conf 文件中,格式类似如下的样子:

nameserver 208.67.222.222
nameserver 208.67.220.220

BTW:这个两个 DNS 服务器是 OpenDNS (website: http://www.opendns.com)的,建议大家使用。

平时,我们只要添加了DNS服务器就可以正常解析域名了。但是 Solaris 中却不是这样,也不知道是安装时的问题还是本来就是这样,正常添加了DNS服务器,却还是不能解析域名,除非在 /etc/hosts 中添加了要解析的域名。

原因呢,就是在 /etc/nsswitch.conf 这个文件中,有那么两行:

hosts: files


networks: files

指明了解析域名时,用的是文件,而不用 DNS,所以只需要在这两行后面分别再添加一个 dns,变成如下这样就行了

hosts: files dns

networks: files dns

在 Solaris 5.8 中添加了 DNS 后,却不能解析 www.sunfreeware.com 之后的记录

一般来说,只要是从 Freeware for solaris 上下载的软件,只要用gunzip解压后,再用 pkgadd -d <filename> 就可以安装成功。

比如我们要安装 wget,下载地址是 ftp://ftp.sunfreeware.com/pub/freeware/sparc/8/wget-1.10.2-sol8-sparc-local.gz ,下载到本地后,用

gunzip wget-1.10.2-sol8-sparc-local.gz

解压得到文件 wget-1.10.2-sol8-sparc-local,然后用命令

pkgadd -d wget-1.10.2-sol8-sparc-local

即可安装成功。不过有的软件包可不是这么简单了,每次运行pkgadd -d <filename> 提示总是

pkgadd: ERROR: no packages were found in </var/tmp/aEzreACb41kZYZ>

类似这样的提示,用 cksum 检查文件,也都没有任何问题。用pkginfo -d <filename> 也会得到类似的错误。

说真的,这个问题困扰了我一天。直到我在 http://au.sunsolve.sun.com/pub-cgi/show.pl?target=patchpage 这里,用 pkgadd 作为关键字搜索后,才恍然大悟,原来这是 pkgadd 的bug。解决这个问题需要安装两个补丁,分别是

http://au.sunsolve.sun.com/search/document.do?assetkey=1-21-110380-04-1

http://au.sunsolve.sun.com/search/document.do?assetkey=1-21-110934-26-1

记住,先安装第一个,然后再第二个。

在安装 openssh-4.6p1-sol8-sparc-local 失败后的一次记录

方法很简单,只需要增加环境变量 LESS=-isMrf

vim /etc/profile

在最后一行添加如下内容

export LESS=-isMrf

然后重新登录即可

我一般都是在Linux的机器上使用Apache,也没发现这个问题。今天在Windows上装了一个Apache 2,结果运行起来就发现 CPU 的资源很快就上升到100%,打开浏览器访问 http://localhost/ 也没有响应。查看了一下 Apache 的运行日志,发现错误日志不停的增加,内容大致就是:

[Fri Feb 09 09:34:10 2007] [error] (OS 10038)An operation was attempted on something that is not a socket. : Child 1764: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.

就是这个错误,不停的出现。
看日志上提示说尝试使用 Win32DisableAcceptEx 指令,当然要照着办了,打开 conf/httpd.conf,在最后一行添加了这条指令,就光秃秃的写了一个

Win32DisableAcceptEx

什么参数也不需要,就这样重新运行 Apache ,出现了这样一个提示:[Fri Feb 09 09:34:31 2007] [notice] Disabled use of AcceptEx() WinSock2 API。啊哈,正常了。
上 Google 找了一下,发现这个问题的原因原来是 Apache 的新版本中对 Winsock2 的支持有问题,原因不明,只是在部分的Windows上会有这样的问题,已经很长时间了 ^_^。

看来 JDK 6 在 Sun 的心目中还是非常重要的,一发布者就连 JDK1.4和JDK5的链接都没了。
http://java.sun.com/
看看 JDK 6 有哪些新特性了:
首先不得不提的是脚本语言的支持,新增了 javax.script 包,看看 https://scripting.dev.java.net/ 这里
还有就是 gif 的版权过期了。
对了,编译器也从 com.sun.tools.javac 变成了 javax.tools.JavaCompile ,这下我们能够实时生成 Java 源代码,然后实时编译,有点动态语言的感觉了。
……

用 grep 匹配文件时,显示结果黑压压的一片

执行一下这条命令,重新 grep 试试看
export GREP_OPTIONS=’–color=auto’
好看多了,不是吗?

你可以把 export GREP_OPTIONS=’–color=auto’ 这条命令添加到 ~/.bash_profile 的最后,重新登录一下就能生效了。

摘自: Fifteen Exercises for Learning a new Programming Language

1、无穷循环显示数字数列(1、2、3、4、5、6、……、等等),按指定键退出程序(比如 Esc 键)
2、斐波纳契数列,交换两个变量,在一个数字列表中查找最大/最小的数字
3、键盘输入一些数字,然后递增/递减排序输出
4、用公式 (D*V*rho)/mu 来计算雷诺数,其中 D=直径、V=加速度、rho=密度、mu=粘稠度。输入给程序一些数据(先不要管单位转换)
如果结果小于2100,就显示 Laminar flow
如果结果介于 2100 和 4000 之间,就显示 Transient flow
如果大于4000就显示 Turbulent Flow
(if..else..then 条件判断)
5、修改前面的程序,最后增加一个提示“是不是再来一次?(y/n)”,如果回答 y,程序就重新要求输入这些参数。如果是“n”就退出程序
(do while 循环)
在程序运行时,给 mu 变量赋值为 0,看看会发生什么,是不是出现了“DIVID BY ZERO”错误?或者是不是出现了”Segmentation fault..coredump”?怎样处理这种情形?程序有没有内建了什么处理机制么?(异常处理)
6、科学计算,要求支持加、减、乘、除、开方、平方、立方、sin、cos、tan、阶乘、取反、取模
7、用不同的格式打印输出,四舍五入保留4位小数,左右补0对齐(输入/输出操作)
8、打开一个文本文件,转换成 HTML 文件(文件操作/字符串处理)
9、时间和日期:获取操作系统时间,再转换成不同的格式输出,比如: ‘DD-MON-YYYY’, ‘mm-dd-yyyy’, ‘dd/mm/yy’ 等等
10、建立一个文件,把文件的创建日期和时间戳附在文件名后面
11、输入一个 HTML 表格,删除所有的标签,把数据用逗号/制表符分割保存到文件中
12、找出文件中的所有大写单词,去除重复的
13、实现自动换行功能(注意观察在 Windows 的记事本中的自动换行是怎样工作的)
14、在数组的开头、中间和结尾添加/删除数据
15、正在学习的这个程序设计语言是不是还有一些其他特性:操作符重载,虚函数、引用、指针等等。这个语言是不是还支持一些叫做“namespace/package/module”的东西?多看看

6、7年前高中刚毕业时写过一个,原先写的早就找不到,不过算法还是记得很清楚,凭印象又写出来了。

源文件 http://blog.chaifeng.com/upload/full_array.c.utf-8.html

C 源文件 http://blog.chaifeng.com/upload/full_array.c

源代码用 Vim 编辑
语法高亮文件用 Vim 生成,大家可以参考一下
:TOhtml

执行效率测试:

OS : RedHat AS3 update 6

CPU : P3 1G

内存: 512M

GCC : gcc (GCC) 3.2.3 20030502

编译时没加优化 : gcc -o full_array full_array.c

全排列 10 个元素,耗时约 1.72 秒

time ./full_array “0192837465” > /dev/null

real 0m1.718s

user 0m1.720s

sys 0m0.000s

全排列 11 个元素,耗时约 18.9 秒

time ./full_array “0192837465a” > /dev/null

real 0m18.949s

user 0m18.920s

sys 0m0.020s

全排列 12 个元素,耗时约 3分55 秒

time ./full_array “0192837465ab” > /dev/null

real 3m55.335s

user 3m51.020s

sys 0m0.240s

基本上比用递归快一个数量级

如果有问题,欢迎一起讨论

System.getProperty("line.separator");