集成化的spam list在线查询工具,很全面,以备不时之需。作用就不说了,维护过邮件服务器的都知道
http://www.dnsbl.info/dnsbl-database-check.php
http://multirbl.valli.org/lookup/
http://mailspike.org/iplookup.html
值得参考的资料:
http://liaoen.blog.51cto.com/2253541/872455
集成化的spam list在线查询工具,很全面,以备不时之需。作用就不说了,维护过邮件服务器的都知道
http://www.dnsbl.info/dnsbl-database-check.php
http://multirbl.valli.org/lookup/
http://mailspike.org/iplookup.html
值得参考的资料:
http://liaoen.blog.51cto.com/2253541/872455
环境:linux系统(各种发行版皆可),windows下强烈推荐cygwin环境
wget不支持socks代理,支持http,https,ftp三类代理,分别为https_prox, /http_proxy, ftp_proxy,下面示例只以http_proxy为例。为wget指定代理有三种方法,推荐第三种
修订于 2019/12/09
--------- 后面是以前的2013年以前的版本,没啥用,不用看了 ------
需要采集一批数据,是一网站上的产品信息,产品本身信息很简单,使用火车采集器轻松实现;但产品价格数据是ajax响应数据,使用firebug + live http headers抓到该请求,并测试重发,发现该ajax请求必须带一个http头“X-Requested-With: XMLHttpRequest”,没有就返回404错误。
gnu/linux下有大量的杀手级工具,这种情况,要动用其中的wget. wget有很多参数,这里需要使用其中两个:-O,--header. 其中:
-O, 把请求结果保存到指定文件,但我们要使用的却是一个特殊的值:“-”,它可以将结果输出到标准输出
--header, 结http请求加上自定义的头(http header)
于是对于每条产品数据,都发送这样的请求:
wget --header="X-Requested-With: XMLHttpRequest" -O save_123.txt "http://www.website.com/request/path/?Id=123"
这样每条产品都保存到save_123.txt,save_124.txt,save_125.txt....这样的一系列文件中。不过有个问题是,每条数据一个文件,后期分析不方便。所以将其存储到单一的文件里。
方案:先将wget结果指向到标准输出,然后再使用重定向符 >> 定向到单一的文件里。
不过,还有一个问题,每个http响应里没有产品id号,数据跟采集到的产品信息对不上号。于是在每写一笔采集结果前,往文件里先写入该产品的id号。
这里使用echo 命令,要用到echo 的参数:-e, 作用是使用转义符输出换行。示例:echo -e "aaa\nbbb"
于是构造这样的bash脚本:
echo -e "\n"10011"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10011" >>data.log; echo -e "\n"10012"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10012" >>data.log; echo -e "\n"10013"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10013" >>data.log; sheep 1; echo -e "\n"10014"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10014" >>data.log; echo -e "\n"10015"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10015" >>data.log; echo -e "\n"10016"\t" >>data.log ;wget --header="X-Requested-With: XMLHttpRequest" -O- "http://www.website.com/request/path/?Id=10016" >>data.log; sheep 1;
第三行加一个sheep 1, 即每采三条暂停1秒钟,作用是防止请求过于密集而影响服务器响应,暂停秒数按实际情况设置。
所有数据都保存到data.log文件里,里面格式如下
10011 {"data":.....} 10012 {"data":.....} 10013 {"data":.....} 10014 {"data":.....}
每两行一笔数据,其中第一行是产品id号,第二行是采集到的数据。这样就可以方便的提取其中数据了。
其实,对于而需要提取的数据,完全可以通过grep从定向到标准输出的wget结果里提取。只是这里不么做了。
ms sql server 查看服务器当前的连接会话及会话信息(客户端ip地址,协议,时间,读写情况等)
select * from sys.dm_exec_connections
这实际上是master数据库里的一个系统视图,读出来后有不少字段,如client_net_address, protoco_type, connect_time, num_read, num_write等,很明白,就不多说了。
btw,master数据库里有很多系统视图,如:dm_exec_sessions, dm_fts_memory_pools, dm_os_hosts, dm_os_memory_allocations, dm_os_memory_objects, dm_os_threads, sql_logins, types等,很有参考意义
一个使用tar实现对目录作增量备份的bash脚本
#!/bin/bash #program: # auto backup the folder $to_backup # to $save_to # History: # 2012/11/28 yqf First release # do NOT change the variable $filename # except you REALY know what you are doing exactly filename=`date +%Y%m%d_%H%M%S` # sample # ##whitch folder you want to backup, full path (start with "/") #to_backup="/var/www/html/foo" # ##where you whant to save the backup files,folder, MUST end by "/" #save_to="/var/www/backup/foo/" # ##the incremental file, file name, full path #incremental_file="/var/www/backup/incremental_file/foo.incre" # #tar -g $incremental_file \ # ## each files or folders that no need to backup, (ingore), # ## [Careful] without end slash even folder # -C $to_backup \ # --exclude data/cache \ # --exclude data/tmp \ # -cpjf $save_to$filename.tar.bz2 . # sample end # # mysite.com to_backup="/var/www/html/mysite/html/" save_to="/home/myhome/backup/mysite/" incremental_file="/home/myhome/backup/incremenntal_list/mysite.increment_file" tar -g $incremental_file \ -C $to_backup \ --exclude data/static_cache \ --exclude data/templates_c \ --exclude data/templates_cache \ --exclude data/cache \ -cpjf $save_to$filename.tar.bz2 .
下载脚本附件 tar_incremental_backup_sample
其中....似乎很简单,不用说什么了
在U盘上安装grub,之前是fat32的,格式化成exfat再安装grub,U盘设置文件为/dev/sdc4, 挂载于/media/c0f80392-62db-4156-a4f5-c64fc7515795/,但在运行grub-install时却出错了,如下:
[root@fsc feng]# grub-install --root-directory=/media/c0f80392-62db-4156-a4f5-c64fc7515795/ /dev/sdc4
The file /media/c0f80392-62db-4156-a4f5-c64fc7515795//boot/grub/stage1 not read correctly.
印象中以前都是这样安装grub的,检查没发现问题,于是google,说是/etc/fstab 里作过配置,刚才确实改过但没有重启机器,于是重启。再运行grub-install,还是照例出错,消息完全一样。于是继续google,啃英文文章,一时间没有找到方案。又尝试了N多其它方式:再次格式化U盘、直接拷/boot/grub 到U盘再grub-install等,都不行。
准备把U盘上分区重新删掉,重建分区再尝试。突然想到分区格式与分区表中不一致,使用“磁盘实用工具”查看时,该分区/dev/sdc4是w95 fat32(0x0b),删掉,再建ext2分区,设置为可启动(可以通过磁盘实用工具设置,或fdisk修改都可以),为/dev/sdc1,格式化为ext2,再次运行grub-install,成功
[root@fsc feng]# grub-install --root-directory=/media/287801d6-91aa-4563-a45e-d34073af2ff9 /dev/sdc1 Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /media/287801d6-91aa-4563-a45e-d34073af2ff9/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb (hd2) /dev/sdc [root@fsc feng]#
接到一客户的要求,需要修改其发布过所有文章里的联系方式,于是写sql语句,拿到mssql客户端里直接执行。
起初写的是这种形式的语句
update article set [content]=replace(content,'aaaa','bbbb') where companyid=123
写起来很简单,但是执行时花了3分钟都没有执行完,在执行过程中,网站上对article表访问的页面全部长时间没有响应。于是赶快停掉这个update语句。前面页面马上恢复正常。
分析原因应该是在update时,表被锁定,而阻塞了所有操作。
于是改成
update article set [content]=replace(content,'aaaa','bbbb') where id in(111,222,333,444....)
这种形式,当然首先要查出该客户的所有文章id号,再用逗号拼接构造成sql语句。
这个语句执行一样很慢,可以想象;试了试前台页面又没不响应了。于是赶快停掉。
要重新修改语句。
这次改成
update article set [content]=replace(content,'aaaa','bbbb') where id =111
update article set [content]=replace(content,'aaaa','bbbb') where id =222
update article set [content]=replace(content,'aaaa','bbbb') where id =222
update article set [content]=replace(content,'aaaa','bbbb') where id =222
....
这种多语句的形式,有4K多条,复制到mssql客户端里执行,还是很慢,但前台页面都可以正常打开了,根本感觉不到正在执行的update语句的影响。
经过5分多钟,终于执行完成。
上文中的语句是作了简化的,实际上构造出来的语句是这个形式
update [article] set [content]=replace(replace(replace(replace(convert(nvarchar(max),[content]),'f***','y***'),'1376133***','1358571***'),'353***','605***'),'354***','606***') where id=23002
其中,content字段是ntext型,还得convert();原来数据库是mssql 2000,后来升级到2005,本来应该把字段改成nvarchar(max)型,但因为表太大一直没有改。
查出id号作逗号拼接,是使用uestudio的替换功能,相当方便
(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串
<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor$varname
[, mixed $...
] )(PHP 4, PHP 5) compact — 建立一个数组,包括变量名和它们的值
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$result = compact("city
", "state
", "event
");
// array('city'=>'"San Francisco"
','state
'=>'CA
','event' => "SIGGRAPH")
?>
-------------
$qs=compact('province','city','name'); foreach($qs as $key => $value){ if(!$value){ unset($qs[$key]); } } $url='something/search/?'.http_build_query($qs) ;
tar 增量备份打包目录,并分卷打包压缩(自动分割成多个文件)
tar -g /home/my_name/backup/incremenntal_list/my_website.incremenntal_list \ -C /var/www/html/ \ --exclude data/cache \ --exclude data/tmp \ -cpjvf - /var/www/html/ |split -b 2g
-g xxx 是增量日志文件,再次执行上面命令备份目录时,没有改变的文件将不备份,这样节省备份占用硬盘;需要还原时,同样要带上该参数,后边跟上该文件路径,而且要按备份的次序一个一个解包
--exclude xxx 是排除的目录,被tar忽略而不备份
split -b 2g 分割为2G的文件,分割文件名字将是 xaa, xab, xac ...
备份文件还原时,使用以下命令:
cat xaa xab xac >tar -xj
注意,1)省略了上述-g 参数,如果备份时用了这里就要带上。
2)假设只有三个分卷文件,如果不止三个,那就依次写出即可。事实上 cat `ls x*` >tar -xj 也可以,但如果`ls x*`出来的次序是乱的,那就要解包失败。
windows下备份目录是个蛋疼的事情,而linux的备份功能实在彪悍的让人感激涕零,然而对于出卖灵魂维护windows服务器的人士,在鄙视windows之余,还是得解决这个问题。突然想到cygwin这个强大的工具,是否可以在windows下使用它crond/crontab呢?查了一下,还真的有。
,先记来来,有时间研究一下
http://blog.csdn.net/cg_cheng/article/details/4377307 在cygwin下配置crontab
http://www.cnblogs.com/alaska1131/articles/1655643.html windows下启动cygwin的cron/crontab
tar命令的参数 -g, 后面跟一个文件路径,就可在该文件里记录下差异化日志记录,每次备份时带上该参数及文件路径,即是差异备份。还原时,也应该带上这个参数,否则,每次差异备份时删除的文件将不会自动删除。
tar命令的参数 --exclude=,后面跟一个文件路径(支持通配符),指备份时忽略指定的文件(包括目录),如有多个忽略文件,那就加多次该参数,每次指定一个忽略目录。
tar命令的-p参数,指打包时保留文件权限
需要还原文件时,就按备份的次序依次执行-x解包时,记得要带上-g参数,别忘了后面的差异化日志记录文件,这样每次备份时删除的文件也会自动在还原的目标目录里删除;当然你想保留所有文件时另说。