一句命令批量下载

CM-TSS.txt 图片地址文件
http://img.xxx.com/story/152328303855768-1735_1920-0!200X
http://img.xxx.com/story/152328303838838-1920_1080-1!200X
http://img.xxx.com/story/152290982360850-1392_2208-2!OOXX

要求:
1. 路径处理,下载原图
2. 增加.jpg后缀

url处理
http://img.xxx.com/story/152328303855768-1735_1920-0!200X
自动修正到原图地址
http://img.xxx.com/story/152328303855768-1735_1920-0

命令

i=0; for url in `sed -e "s/\!\(.*\)//g" CM-TSS.txt`; do let i++; curl -o ${i}.jpg $url; done

经测结论
一. linux上可以直接执行此命令
二. mac上则需要把此行命令另存为文件,然后用 bash 来运行

备注:
mac上如果不另存为文件,直接在命令行执行,发现url中出现r的位置会被当做换行分割到下一行,所以导致url错误

内网穿透 – Frp

去年自己攒了一个Nas服务器,放在家里,不过家里没有公网IP

于是研究了很多内网穿透的东西
1. 带花生壳的路由
2. 花生棒
3. 花生壳客户端
4. 其他类似于花生壳的穿透服务(freenas管理后台提供很多但不好用)
5. Ngrok (需要自己有公网服务器)
6. Frp (需要自己有公网服务器)

最开始买了一个花生壳提供的硬件设备 — 花生棒,不过感觉不太好用还有限制
后来开始使用Frp,感觉棒棒哒。

Frp需要有一个公网的IP,正好我有一台阿里云的机器。原理就是公网服务器上搭建Frp服务端,然后内网机器运行Frp客户端,客户端主动连接服务端,然后服务端把自己收到的请求转发给客户端。
其实花生壳的客户端也是这个原理,可惜花生壳有营收压力,开始收费了。

然后就可以各种穿透了,http,https,ssh,nas ….

服务端配置 frps.ini

[common]
bind_port = 7000
vhost_http_port = 8080
privilege_token = xxxx123456
log_file = ./frps.log

客户端配置 frpc.ini

[common]
server_addr = 106.xxx.xxx.xxx
server_port = 7000
privilege_token = xxxx123456
log_file = ./frpc.log

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8022
use_encryption = true
use_compression = true

[web]
type = http
local_port = 80
custom_domains = test.xxtime.com

最后不要忘记开启阿里云的端口-在安全组配置里
这里 我启用了8022, 8080 分别对应 ssh 和 http 服务

# 启动服务端, 在公网机器上操作
nohup ./frps -c ./frps.ini &

# 启动客户端,在内网机器上操作
nohup ./frpc -c ./frpc.ini &

内网定时检测启动脚本 (FreeBSD)
此处使用 ps auxww
如果是ps aux则在crontab下无法获取frp进程

#!/bin/bash
# 检查Frp是否启动
# 使用grep frp过滤可能会误认为目录中包含的frp符合条件,所以过滤时用 grep frpc.ini
function checkFrp() {
    count=`ps auxww | grep frpc.ini | grep -v 'grep' | wc -l`
	if [ 0 == $count ];then
		nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini &
		echo 'Frp start at' `date` >> /usr/local/frp/cron.log
	else
		echo 'Frp is running at' `date` >> /usr/local/frp/cron.log
	fi
}

checkFrp

官方网址: https://github.com/fatedier/frp
官方文档:https://github.com/fatedier/frp/blob/master/README_zh.md

nginx日志切割

#!/bin/bash
#设置日志文件存放目录
logs_path="/usr/local/nginx/logs/"

#设置pid文件
pid_path="/usr/local/nginx/logs/nginx.pid"

#仅linux 不支持unix
#yesterday=`date -d "yesterday" +"%Y%m%d"`

#同时支持 linux unix
#echo `TZ=aaa16 date +%Y%m%d\ %H:%M:%S`
yesterday=`TZ=aaa16 date +%Y%m%d`

#重命名日志文件
mv ${logs_path}xxtime.com_access.log ${logs_path}xxtime.com_access${yesterday}.log

#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

curl 命令行使用

看看发生了什么

[sh]
curl -v http://google.com
curl -trace http://google.com
[/sh]

post数据
[sh]
curl -d “a=b&c=d” http://www.xxtime.com/send.php
curl -data “a=b&c=d” http://www.xxtime.com/send.php
[/sh]

指定agent 和 referer

curl -A ‘agent_xxtime_test’ -e ‘http://xxtime.com/referer/test’ http://blog.xxtime.com/feed

只看header,服务器HEAD方法仅返回header信息
[sh]
curl -I http://blog.xxtime.com
[/sh]

下载 指定名称
[sh]
curl -o newFilename.png http://xxtime.com/test.png
[/sh]

下载 使用默认名称
[sh]
curl -O http://xxtime.com/test.png
[/sh]

同时获取多个文件

curl -O URL1 -O URL2

让curl使用地址重定向,此时会查询google.com.hk站点

curl -L http://www.google.com

断点续传

curl -O http://www.gnu.org/software/gettext/manual/gettext.html
curl -C – -O http://www.gnu.org/software/gettext/manual/gettext.html

限制传输速率

curl –limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

保存 cookie

curl -D sugarcookies http://www.xxtime.com/sugarcrm/index.php

使用 cookie

curl -b sugarcookies http://www.xxtime.com/sugarcrm/index.php

参考

15 Practical Linux cURL Command Examples (cURL Download Examples)


http://blog.csdn.net/yangqillohe/article/details/8511277

VirtualBox nginx缓存?真?假?nginx js缓存

VirtualBox虚拟机上安装的nginx存在一个问题,就是修改服务器上的js文件后访问发现不生效,甚至导致错误
很久之前我就碰到这个问题

缘由:
修改js后访问未生效
因为是从别的站点扒下来的模板第一反应以为是js被加密了,搞了很久未果,放弃
后来又一次用这套模板发现js修改不生效的问题又没了,遂断定,非js加密

后经过测试发现安装在苹果上的apche没有这个问题
而安装在VirtualBox上的nginx存在这个问题
遂怀疑是nginx服务器缓存问题

然后baidu各种搜索禁用nginx缓存未果。。。。

又过了N天,又是这问题,于是Google一下关键词 “virtualbox nginx js cache”
发现老外也碰到这问题了
77B412FD-E81A-4CF3-9B70-CDB3C18132EC
详见 http://serverfault.com/questions/269420/disable-caching-when-serving-static-files-with-nginx-for-development
原来是VirtualBox缓存问题
方法一:
老外有一个解决办法见 http://abitwiser.wordpress.com/2011/02/24/virtualbox-hates-sendfile/

方法二:
考虑到Mac上安装php且支持oracle mysql pdo 等各种组件会比较麻烦
所以折中办法是,在Mac苹果机上仅安装 nginx,而所有php请求转发到VirtualBox的虚拟机上
参考 http://blog.xxtime.com/960

nginx转发php请求到其他服务器

例如:服务器A转发php请求到服务器B

以下为A服务器修改

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

修改下ip即可,改成PHP服务器的IP

location ~ .php$ {
fastcgi_pass 192.168.4.3:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

以下为目标服务器配置(B服务器,即PHP服务器)

首先开启B服务器的端口 修改/etc/sysconfig/iptables增加一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT

配置php-fpm文件
yum安装的通常在 /etc/php-fpm.d/www.conf,编译安装的通常在/usr/local/php/etc/php-fpm.conf

修改:
listen = 127.0.0.1:9000
改成
listen = 0.0.0.0:9000

修改
listen.allowed_clients = 127.0.0.1
添加允许的服务器,如本例中另外增加了两台服务器
listen.allowed_clients = 127.0.0.1,192.168.4.3,192.168.4.127
也可以注释掉 listen.allowed_clients 配置,因为默认允许任何机器连接,没有IP限制

注意: nginx服务器与php服务器两台的目录部署应该一致,否则会404错误找不到文件 “File not found.”

PHP 5.6.1编译安装,支持 Oracle MariaDB

大多数phper编译php的时候,的模式都很固定,简单的支持一些常见拓展 支持mysql就够了,而且这些phper们偏爱php5.2 php5.3 连php5.4都很少,很不愿意尝试编译新的版本,以后就固定用这个版本,用固定的编译代码。这样虽然很安全。但是我们应该开拓创新。

环境:Linux CentOS 7
PHP版本:php 5.6.1
目的:支持MariaDB(Mysql), Oracle数据库拓展 以及支持常用拓展组件

事先安装好了MariaDB,MariaDB跟Mysql差不多,此处不详细说明

先上段,尝试成功的编译代码(去掉oracle支持 去掉ldap支持)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/etc/php.d --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql --with-iconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-openssl --enable-soap --enable-zip
然后拷贝php.ini到安装目录
把编译的目录下的 ./php-5.6.1/php.ini-production 拷贝到/usr/local/php/etc/php.ini

上面这段编译配置代码是在我尝试了很多次总结出来的,一去掉了一些编译配置(oracle 和 ldap配置),折腾了很久最终还是放弃在编译php过程中的oralce编译参数和ldap编译参数,如:
--with-oci8=shared,instantclient,/usr/local/lib64/oracle/client/lib --with-pdo-oci=instantclient,/usr/local/lib64/oracle/client/lib,12.1 --enable-opcache --with-ldap --with-ldap-sasl
其中–enable-opcache 没有尝试

PHP各版本说明:
PHP 5.5 开始增加 –enable-opcache参数,意思是启用Zend Opcache缓存功能,类似APC缓存
PHP 5.4 去掉了参数 –enable-safe-mode –enable-discard-path –enable-fastcgi –enable-force-cgi-redirect

但是Oracle,哥们儿我是要用的,怎么能少了你,继续折腾
执行 pecl install oci8 在需要录入的地方输入 shared,instantclient,/usr/local/lib64/oracle/client/lib
其中 /usr/local/lib64/oracle/client/lib 是在官网下载的几个oracle sdk

[root@joe-pc bin]# /usr/local/php/bin/pecl install oci8
downloading oci8-2.0.8.tgz ...
Starting to download oci8-2.0.8.tgz (190,854 bytes)
.........................................done: 190,854 bytes
11 source files, building
running: phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Please provide the path to the ORACLE_HOME directory. Use 'instantclient,/path/to/instant/client/lib' if you're compiling with Oracle Instant Client [autodetect] : shared,instantclient,/usr/local/lib64/oracle/client/lib

在php配置文件里加入oracle支持
编辑 /usr/local/php/etc/php.d/oracle.ini 内容:

extension=oci8.so

启动 php-fpm,妈的报错
NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/oci8.so' - libaio.so.1: cannot open shared object file: No such file or directory in Unknown on line 0
看来这oracle 还缺少libaio支持,也给装上

yum install libaio

然后kill掉php所有进程,重启 php-fpm

/usr/local/php/sbin/php-fpm

ok, 终于搞定了,生命在于折腾

CentOS7 上网配置,修改hostname,以及使用ifconfig命令,CentOS新特性

默认安装的CentOS 7 mini 版本 是不能使用ifconfig命令的。

如果这时候 还不能联网 可就惨了

先看下CentOS7 的上网配置
修改文件/etc/sysconfig/network-scripts/ifcfg-enp0s3
内容如下:

2014-10-12 00.25.18

ok这样就可以上网了

然后安装ifconfig命令,执行

yum install net-tools

修改hostname
centos7 起修改hostname的方法有所改变

hostnamectl set-hostname blog.xxtime.com

另外 CentOS 7 的防火墙iptables 也有所改变,防火墙默认使用了 firewalld
参见: http://blog.xxtime.com/951

centos 7 开启80端口

CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启80端口是不可以的

CentOS 7 采用了 firewalld 防火墙

如要查询是否开启80端口则:

[root@joe-pc ~]# firewall-cmd --query-port=80/tcp
no

显然80端口没有开启

下面我们开启80端口:

[root@joe-pc ~]# firewall-cmd --add-port=80/tcp
success