使用ncftp工具同步整个文件夹备份到FTP服务器

ncftpput -R -z -u user -p pass remotehost /remote_directory /local_directory 同步整个目录
-R 递归同步
-z 是否断点续传
/remote_directory FTP上面的路径
/local_directory 要备份的路径
配合上次发的Dreamhost空间单用户多网站备份脚本,可以完美的达到备份的目的。

爱名网http://www.22.cn域名转移苦难记

爱名网http://www.22.cn域名转移苦难记

 07-12从朋友那在爱名网转购买了一个比较好的域名,然后想想转移到国外比较好,就尝试了转移,但是爱名网的系统需要身份验证,我提交了身份证验证,等了一天还是没有通过
07-13联系了客服,说是我身份证没在什么公安部验证过不能通过啥的,我表示严重怀疑是爱名网http://www.22.cn为了不让我转出那个比较好的域名的借口,我的身份证信息在
银行办卡啥的根本没有问题。
 后来从网络上看到ICANN投诉,尝试了投诉,正在等待回复。

 从网上找到爱名网的一些信息,真是恶名连连,请看连接。

  1.网上域名购买服务如何投诉?关于爱名网(22.cn)的 !

  2.22.cn网站中文域名非法违规不存在续费期,要求1000高价赎回!

  建议各位朋友不要去爱名网http://www.22.cn进行交易。

 2010-07-14最新情况

请注意,他们7-13就借口说找不到身份证数据

Dreamhost空间单用户多网站备份脚本

代码如下,未测试

有任何建议请和我联系

部份程序参考 http://www.icnote.com/DreamHost-Auto-back-up/

Bash语言: Codee#11847
#工具信息
TAR=`which tar`
MYSQLDUMP=`which mysqldump`

#网站信息
SiteRoot=/home/icnote/
SITE=(‘site1′ ‘site2′ ‘site3′)
#DB INFo
DBNames=(‘dbname1′ ‘dbname2′ ‘dbname3′) #数据库名
DBUsers=(‘username1′ ‘username2′ ‘username3′#数据库用户名
DBPasswds=(’1′ ’2′ ’3′#数据库密码
DBHosts=(‘host1′ ‘host2′ ‘host3′) #数据库地址
DBCharsets=(‘utf8′ ‘utf8′ ‘utf8′)

#路径
BackupPath=/home/hexuzhong/backup/$(date +%y%m%d)/
# 备份文件存放目录
if [ -d $BackupPath ]
then
  rm -rf “$BackupPath”*
else
  mkdir $BackupPath
  chmod 755 $BackupPath -R
fi
LogFile=“$BackupPath”backUp.log

numvalues=${#SITE[@]}
for (( i=1; i < numvalues; i++ )); do
   
    domain=${SITE[i]}
    cd $BackupPath
    ##路径信息
    SiteDir=$SiteRoot$domain
    TempSqlFileName=“$BackupPath$domain”tempSQL.sql
    SiteBackUpName=“$BackupPath$domain”web$(date +%y%m%d).tar.gz
    DBDumpFileName=“$BackupPath$domain”db$(date +%y%m%d).sql.tar.gz

    ###数据库信息###
    DBHost=${DBHosts[i]}
    DBUser=${DBUsers[i]}
    DBPasswd=${DBPasswds[i]}
    DBName=${DBNames[i]}
    DBCharset=${DBCharsets[i]}

    echo “——————————————-” >> $LogFile
    echo $(date +“%y-%m-%d %H:%M:%S”) >> $LogFile
    echo “————————–” >> $LogFile
    echo “Site $domain back up start………….” >> $LogFile
    echo “Web $domain files back up start………….” >> $LogFile

    if [ -f $SiteBackUpName ]
    then
      echo “[$SiteBackUpName]The Backup File is exists,Can’t Backup!” >> $LogFile
    else
      $TAR czvf $SiteBackUpName $SiteDir >> $LogFile
      echo “[$SiteBackUpName]Backup Success!” >> $LogFile
    fi

    echo “Web files back up finished!” >> $LogFile
    echo “Now database dump start” >> $LogFile

    if [ -f $DBDumpFileName ]
    then
      echo “[$DBDumpFileName]The Backup File is exists,Can’t Backup!” >> $LogFile
    else
      $MYSQLDUMP -h$DBHost -u$DBUser -p$DBPasswd –default-character-set=$DBCharset –opt $DBName > $TempSqlFileName
      $TAR czvf $DBDumpFileName $TempSqlFileName >> $LogFile
      rm -rf $TempSqlFileName
      echo “[$DBDumpFileName] Backup Success!” >> $LogFile
    fi

    echo “Now database dump finished!” >> $LogFile
    echo “The whole backup task completed at “$(date +“%y-%m-%d %H:%M:%S”) >> $LogFile
    echo “########################################” >> $LogFile
done

君呦,花呦

花的生命
  是如此短暂
  梦想的岁月
  飞逝而过
  残酷的时间哟
  毫无悲悯之心
  然而在我心中骄傲绽放的
  正是你与那些花儿……

支持右键添加目录到Windows环境变量path变量中并立即生效的小工具

使用说明:

1.不需要安装, 将下载后解压缩,将解压缩后的目录拷贝到你喜欢的路径下即可。
2.第一次使用编辑”添加到系统路径.reg”文件,将I:\\mydoc\\pathTool.exe改成您的pathTool.exe的路径,请注意要双左斜线。
3.以后只要在目录上面点击右键, 就会看到”Add To Path”菜单项, 点击执行, 则选择的目录会自动加入到path环境变量中。
4.为了使path环境变量立即生效,程序向系统发送了广播消息,因此要延时几十秒钟,请耐心等待一下。

@使用备注:

环境变量分为用户环境变量和系统环境变量,用户环境变量只对当前用户有效,系统环境变量对于系统中的所有用户有效。 本程序修改的是用户环境变量中的path变量。同一个目录不会重复加入,程序会自动处理。

@关于程序修改Windows环境变量后使环境变量立即生效的问题:

本程序是使用SendMessageTimeout函数向系统发送设置改变的消息来实现的。具体代码如下:

DWORD dwMsgResult = 0L;

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM(“Environment”), SMTO_ABORTIFHUNG, 5000, &dwMsgResult);

5000是延时等待的时间长度,单位为毫秒。整个等待的长度为:

Therefore, the total wait time can be up to the value of uTimeout multiplied by the number of top-level windows.

在本示例中整个程序等待的长度 = 5000 * 顶层窗口的个数;

实现原理

查询注册表path的值,如果路径已存在提示已存在,如果不存在的话添加到path,然后SendMessageTimeout让环境变量起作用。

DWORD dwMsgResult = 0L;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM(“Environment”), SMTO_ABORTIFHUNG, 5000, &dwMsgResult);//广播让系统路径起作用

下载pathTool.zip

Tags :

ubuntu9.10安装go编译器备忘

参考go语言官网教程并作相应的修改等

参考地址http://golang.org/doc/install.html

1.在~目录的.bash_profile设置相关的环境变量

$GOROOT 根目录。

$GOARCH 操作系统的架构,有以下可选 amd64 (64-bit x86, the most mature port), 386(32-bit x86), and arm(32-bit ARM, an incomplete port。

$GOBIN bin目录,官网上提示是可选的,但是在我的编译过程会提示缺少GOBIN目录。

以下是我的.bash_profile文件内容

export GOROOT=$HOME/go

export GOARCH=386

export GOOS=linux

export GOBIN=$HOME/bin

保存为用以下命令检查是否生效。

$ env | grep ‘^GO’

2.从GO源码库下载源文件,进行编译

GO源码库使用的是Mercurial管理系统,需要安装相应的程序hg。

如果在您的机器上没有hg命令的话,请按照以下步骤进行安装

$ sudo easy_install mercurial  如果您的系统提示没有easy_install命令,请先运行apt-get install python-setuptools python-dev安装。

接下来我们将源码导出到$GOROOT目录(请确保$GOROOT目录存在

$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

3.开始编译

编译源码需要gcc等,如果您的系统没有gcc相关,请运行

$ sudo apt-get install bison gcc libc6-dev ed make

接着输入

$ cd $GOROOT/src

$ make all

正式进行编译工作,接着可以看会电视休息会了 XD

…N分钟后

如果提示

— cd ../test

0 known bugs; 0 unexpected bugs

就是编译成功了

4.使用编译器编译go语言

请到go官网查看编译器和连接器怎么使用

5.保持编译器最新

如果编译器有更新的话,可以使用以下命令进行更新编译

$ cd $GOROOT/src

$ hg pull

$ hg update release

$ make all

Tags :

恶心的strtok的实现

留此为鉴

C语言: Codee#6730
01 #include <stdio.h>
02 #include <stdlib.h>
03 #include <string.h>
04
05 char *mystrtok(char *str, const char *delim);
06
07 int main(void) {
08
09         char str[] = “root:x::0:root:/root:/bin/bash:”;
10         char *token;
11
12         token = mystrtok(str, “:”);
13         printf(“%s\n, token);
14         while ( (token = mystrtok(NULL, “:”)) != NULL)
15                 printf(“%s\n, token);
16
17         free(token);
18         return 0;
19 }
20 char *mystrtok(char *str, const char *delim) {
21
22         static char *last;
23         char *t;
24         int i = 0;
25
26         if ((NULL == str) && ((str=last) == NULL ))
27                 return (NULL);
28
29         last = strstr(str, delim);
30
31         if (NULL == last) {
32                 return NULL;
33         } else {
34                 t = malloc(strlen(str) + 1);
35                 memset(t, 0, strlen(t));
36                 for(i=0; i < (strlen(str) - strlen(last)); ++i) {
37
38                         t[i] = str[i];
39                 }
40
41                 while(last == strstr(last, delim))
42                      *last++;
43                 return t;
44         }
45 }

使用colinux安装ubuntu

使用colinux安装ubuntu

1.colinux和ubuntu简介
2.colinux和其它虚拟机相比有什么优势
3.安装和配置colinux
4.其它扩展相关
5.参考
1.colinux和ubuntu简介
 Cooperative Linux is the first working free and open source method for optimally running Linux on Microsoft Windows natively.colinux是一款虚拟机软件和其它的qmenu、vmware、virtualpc类似,但是colinux只能在windows上虚拟linux,官网在这里http://www.colinux.org/

 Ubuntu 发”oo-BOON-too”音,是一款免费、开源、易于使用的linux发行版。官网在这http://www.ubuntu.com/

2.colinux和其它虚拟机相比有什么优势
 colinux其优势是修改了Linux的内核在Windows下使用Ring0(内核层)来直接使用硬件设备,使Kernel“虚拟化”的结果,其特点是由于能直接使用Host上的设备,CPU效率得以提高(据说其效率与直接在机器上装Linux还高,这一点是其它虚拟机软件不能比的)。

3.安装和配置colinux
       从官网http://www.colinux.org/下载最新stable的colinux,在从这里http://sourceforge.net/projects/colinux/files/(选择Images 2.6.x Ubuntu => Ubuntu 9.04 => Ubuntu-9.04-1gb.7z)下载最新的colinux ubuntu的image文件。

       将colinux安装在一个简单的路径如d:\colinux。把下载的ubuntu Image文件一起放到D:\colinux,我们接下来要配置配置文件。

 配置文件内容
______________________________________________________________________________________________
 # 这是核心文件,无需改动
 kernel=vmlinux
 
 # File contains the root file system.
 # Download and extract preconfigured file from SF “Images for 2.6″.
 # 含有根文件系统的文件,其中这个 cobd0 将作为一个Block file存于 Linux OS的 /dev/ 下。
 cobd0=”D:\colinux\Ubuntu-9.04.ext3.1gb.fs”
 
 # coLinux的内核中编译了一个特殊的文件系统 cofs,是为了与Windows共享文件用的,这里共享 d:\
 cofs0=d:\
 
 # Swap device, should be an empty file with 128..512MB.
 # 这是Swap设备指定的文件,这个文件需要另外下载
 cobd1=”d:\colinux\swap.img”
 
 # Tell kernel the name of root device (mostly /dev/cobd0,
 # /dev/cobd/0 on Gentoo)
 # This parameter will be forward to Linux kernel.
 # 这是传递给内核,在哪寻找根文件系统的参数。按照上面的设定,我们将其放到了 /dev/cobd0 下
 root=/dev/cobd0
 
 # Additional kernel parameters (ro = rootfs mount read only)
 # 附加的内核参数,不需改动
 ro
 
 # Initrd installs modules into the root file system.
 # Need only on first boot.
 # 内核启动所需的虚拟软盘镜像,也不需要改动
 initrd=initrd.gz
 
 # Maximal memory for linux guest
 # 这个虚拟机最多使用的内存,单位为兆字节
 mem=256
 
 # Slirp for internet connection (outgoing)
 # Inside running coLinux configure eth0 with this static settings:
 # ipaddress 10.0.2.15   broadcast  10.0.2.255   netmask 255.255.255.0
 # gateway   10.0.2.2    nameserver 10.0.2.3
 # 这是网络配置的内容,在后面将详细谈到,现在先按这个设置
 eth0=slirp,,tcp:5901:5900/tcp:6699:22/udp:6699:22

________________________________________________________________________________ 
将该文件保存到 d:\coLinux 下为 ubuntu.conf

 接着就可以运行以下命令启动了

 1.直接从命令行启动
 C:\> d:\coLinux\colinux-daemon.exe @ubuntu.conf

 2.作为系统服务
 C:\> d:\coLinux\colinux-daemon.exe –install-service “ubuntu” @ubuntu.conf

 于是就可以以服务的方式管理这个虚拟机了。例如启动它:

 c:\> net start ubuntu

 若以服务方式启动,则需要手工打开 Console,才能看到其启动的样子,否则它在后台运行。这个Console在coLinux下,分别为colinux-console-fltk.exe和colinux-console-nt.exe。
 
 网络的配置

 coLinux有三种网络工作模式,即NAT、BRIDGE、TUNTAP。下面只介绍NAT和TUNTAP两种方式,BRIDGE由于我没有试成功,不便说明。

 1. NAT(Network Address Translation,网络地址转换)
  NAT是最常见,也是最容易配置的。NAT的工作模式简单来说,就是由Host OS对外来的请求进行转换,如若有Guest OS需要的包,则直接转换给Guest OS。它的优点就是配置简单,HOST OS程序使用DHCP服务器给GUEST OS分配IP地址,这时Guest OS对外部是不可见的,也就是包只能出,不能进(当然,经过转换的就可以进来)。

  配置文件中关于NAT的配置为

  ethX=slirp,<MAC>,<redirections>

  刚才的配置文件中写道,

  eth0=slirp,,tcp:5901:5900/tcp:6699:22/udp:6699:22
  即没有指定MAC地址,将Guest的5900,22端口映射到Host的5901,6699端口。这时候从外部访问6699和5901,就可以访问到Linux的5900和22端口了!

 2.TUNTAP
  这种连接其实就是在Host OS上建一虚拟网卡与Guest OS通信,组成一个私有网络。通迅之前,在Windows的网络连接设置中,为被coLinux新建的网卡设定一个局域网的IP地址如192.168.10.1 。coLinux的配置文件中此方式为

  ethX=tuntap,<network connection name>,<MAC>

  如果有多个tuntap的网卡,则需要指定一个名称。在此没有那么多复杂的情况,我们就直接使用

  eth0=tuntap

  即可。到了Linux下之后,再利用 ifconfig 来配置网卡,便可通主机通讯了。若要在此方式下让Guest OS上网,则需要启动Windows的Internet连接共享,只要将Internet连接设置为共享,然后指定为TUNTAP共享即可,在此不再赘述。

 

4.其它扩展相关

 1.X的配置 http://colinux.wikia.com/wiki/XCoLinux
 2.添加一个swap分区 http://colinux.wikia.com/wiki/HowtoCreateSwapFile
 3.添加windows硬盘(让colinux使用本机windows的分区) http://colinux.wikia.com/wiki/Partitions#mount_the_partition
 5.增加images文件大小 http://colinux.wikia.com/wiki/ExpandingRoot

5.参考
 1.http://blog.simophin.cn/?p=123
 2.http://colinux.wikia.com/

Tags : , ,

神田川

歌手:南こうせつとかぐや姫
作词:
喜多条忠
作曲:南こうせつ

歌词: 
貴方は もう忘れたかしら
赤いてぬぐい マフラーにして
二人で行った 横丁の風呂屋
一緒に出ようねって 言ったのに

いつも私が待たされた
洗い髪が芯まで冷えて
小さな石鹸 カタカタ鳴った
貴方は私の からだを抱いて
冷たいねって 言ったのよ

若かったあの頃 何も恐くなかった
ただ貴方のやさしさが 恐かった

貴方はもう捨てたのかしら
二十四色のクレパス買って
貴方が描いた 私の似顔絵
うまく描いてねって 言ったのに

いつもちっとも 似てないの
窓の下には神田川
三畳一間の小さな下宿
貴方は私の指先見つめ
悲しいかって きいたのよ

若かったあの頃 何も恐くなかった
ただ貴方のやさしさが 恐かった

Tags : ,

PHP smtp邮件群发程序

啥也不说了 上代码

PHP语言: Codee#6096
001 <?php
002 /**
003 *通过phpmailer发送qq邮件
004 *@author ray
005 *@since 2009-08-07
006 */
007 define(‘__DEBUG__’, false);
008 define(‘__PSW_FILE__’, dirname(__FILE__) . ‘/smtp.dat’);
009 define(‘SLEEPING_EMAIL’, dirname(__FILE__) . “/sleepMail.dat”);//休眠的email
010 define(‘SLEEPING_TIME’, 1800);//休眠多长时间,以秒为单位
011 define(‘FILE_APPEND’, 1);
012 if (!function_exists(‘file_put_contents’)) {
013     function file_put_contents($n, $d, $flag = false) {
014         $mode = ($flag == FILE_APPEND || strtoupper($flag) == ‘FILE_APPEND’) ? ‘a’ : ‘w’;
015         $f = @fopen($n, $mode);
016         if ($f === false) {
017             return 0;
018         } else {
019             if (is_array($d)) $d = implode($d);
020             $bytesWritten = fwrite($f, $d);
021             fclose($f);
022             return $bytesWritten;
023         }
024     }
025 }
026 $errorNo = 0;
027 $errorMsg = ;
028 $currTime = time();
029 $unuseMails = array();
030 //收件人和邮件标题和邮件内容
031 $to = isset($argv[1]) ? $argv[1] : “” ;
032 $subject = isset($argv[2]) ? $argv[2] : “”;
033 $mailFile = isset($argv[3]) ? $argv[3] : “” ;
034 if (__DEBUG__) {
035     echo
036 file:$mailFile to:$to subject:$subject\r\n;
037 }
038 if (empty($mailFile) || empty($to) || empty($subject)) {
039     $errorNo = 1;
040     $errorMsg = “参数不全”;
041 }
042 //加载不可用的email列表
043 if (!$errorNo) {
044     if (file_exists(SLEEPING_EMAIL)) {
045         $sleepMails = file(SLEEPING_EMAIL);
046         if (!empty($sleepMails)) {
047        
048             foreach($sleepMails as $sleepMail) {
049                 //解析
050                 if (false !== strpos($sleepMail, ‘|’)) {
051                     $tmp = explode(‘|’, $sleepMail);
052                     if (isset($tmp[0]) && isset($tmp[1])) {
053                         $mail = trim($tmp[0]);
054                         $time = trim($tmp[1]);
055                        
056                         //是否可用
057                         if ( ($currTime - $time )< SLEEPING_TIME) {
058                             $unuseMails[] = $mail;
059                         }
060                     }
061                 }
062             }
063         }
064     }
065 }
066 if (!$errorNo) {
067     //随机加载smtp服务器和smtp用户名和密码
068     $info = file(__PSW_FILE__);
069     $len = count($info);
070    
071     do {
072         $rnd = mt_rand(0, $len - 1);
073         $line = isset($info[$rnd]) ? $info[$rnd] : “”;
074        
075         if (false !== strpos($line, ‘|’)) {
076        
077             $tmp = explode(‘|’, $line);
078             if (isset($tmp[0]) && isset($tmp[1]) && isset($tmp[2])) {
079                
080                 $smtpServer = trim($tmp[0]);
081                 $fromMail = trim($tmp[1]);
082                 $psw = trim($tmp[2]);
083                 $smtpUserName = substr($fromMail, 0, strrpos($fromMail, ‘@’));
084             }
085         }
086     }while (in_array($fromMail, $unuseMails));//如果在不可用的列表中,在次加载
087    
088     if (!isset($smtpServer) || !isset($fromMail) || !isset($psw)) {
089         $errorNo = 2;
090         $errorMsg = “没找到发件人QQ信箱和密码”;
091     }
092 }
093 if (!$errorNo && __DEBUG__) {
094     echo “smtp:$smtpServer from:$fromMail psw:$psw user:$smtpUserName\r\n;
095 }
096 if (!$errorNo) {
097     //通过phpmailer连接smtp服务器发信
098     require(dirname(__FILE__) . “/phpmailer/class.phpmailer.php”);
099     require(dirname(__FILE__) . “/phpmailer/class.smtp.php”);
100     $mail = new PHPMailer();
101    
102     $body = $mail->getFile($mailFile);
103     $body = eregi_replace(“[\]“,,$body);
104    
105     //charset
106     $mail->CharSet = “GB2312″;
107    
108     //$mail->SMTPDebug = 2;//用于显示具体的smtp错误
109    
110     $mail->IsSMTP();
111     $mail->SMTPAuth = true;
112     if (“smtp.qq.com” == trim($smtpServer)) {
113         $mail->Username = $fromMail;
114     } else {
115         $mail->Username = $smtpUserName;
116     }
117     $mail->Password = $psw;
118     $mail->Host = $smtpServer;
119    
120     $mail->From = $fromMail;
121     $mail->FromName = “”;
122    
123     $mail->IsHTML(true);
124    
125     $mail->AddAddress($to);
126     $mail->Subject = $subject;
127     $mail->Body = $body;
128    
129     if (!$mail->Send()) {
130    
131        // echo “Message could not be sent. “;
132         $errorNo = 3;
133         $errorMsg = $mail->ErrorInfo;
134     } else {
135         echo
136 Send to $to success use $fromMail\r\n;
137         exit;
138     }
139 }
140 if (3 == $errorNo) {
141     //记录信息,该信息地址休眠N分钟
142     $content = $fromMail|” . time() . \r\n;//email|当前时间戳
143     file_put_contents(SLEEPING_EMAIL, $content, FILE_APPEND);
144 }
145 echo
146 Error No($errorNo) “ . $errorMsg . \r\n;
147 exit;
148 ?>

今天试着用该程序给qq信箱发了700多个推广邮件,得出了以下几个结论:
1.smtp邮件帐号一定要多,不然会被qq服务器当作垃圾邮件。
2.得适当的休眠

smtp.dat文件格式为
smtp.163.com|sss@163.com|密码
smtp.sina.com|www@sina.com|密码
程序随机抽取一个连接,发送邮件,如果发送不成功,将该邮件地址存入sleepMail.dat休眠30分后在发送(这个是为了连接smtp服务器多次后发送不成功而做的修改)。

Tags : ,