编 写:袁 亮 时 间:2015-07-27 说 明:linux screen命令的简单使用 一、解决什么问题? 1、在服务器执行一些比较耗时的事情:下载、系统备份、传输文件、安装软件或者执行一个脚本等 2、当因为某些原因与服务器断开连接,所有的执行都会白费(网突然断了,putty不小心关了,电脑卡死等等原因) 3、或者我们在同一台服务器上需要做多件事,经常需要切换目录等等 当出现以上情况时,都可以考虑使用screen来解决 二、大致原理 1、正常我们使用putty连接到服务器,相当于一次会话 2、当连接终止的时候,该会话相关的进程都会被终止,关闭,因此就会出现任务还没执行完,就挂掉了 3、screen相当于在服务器上使用后台又开了一个会话,因此当前这个会话被关闭,不影响新开的那个会话中的任务执行 4、当我们putty断掉之后,可以重新连接上去,查看之前的screen会话中的执行情况 三、简单使用 1、添加一个screen窗口 screen -S 自己定义窗口名,方便查看 2、查看现在有几个screen screen -ls 3、中断跳出某个screen窗口 ctrl+a+d 4、选择恢复某个screen窗口 screen -r 创建时候定义的名字,或者通过screen -ls中看到的数字编号 5、彻底关闭某个screen窗口 5.1 在那个窗口中直接exit 5.2 在那个窗口下,ctrl+d 5.3 在那个窗口下,ctrl+a+k 四、原理(有兴趣的可以了解下,没兴趣的知道上面的即可) 1、进程组、会话期 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组 2、挂断信号(SIGHUP)默认的动作是终止程序 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程) 如果会话期首进程终止,则该信号发送到该会话期前台进程组 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态, 发送SIGHUP和SIGCONT信号到该进程组中所有进程 3、因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出 4、nohup使用 nohup [要执行的shell命令] & 很多时候,我是没加nohup,直接最后加&也可 5、screen是直接新建会话,然后避免掉了上面的这个问题,nohup是忽略挂断信号来达到目的 附录: http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
php性能分析工具xhprof – 基础使用
编 写:袁 亮 时 间:2015-07-24 说 明:php性能分析工具xhprof-基础使用 一、简单介绍 1、由Facebook开源的一个php性能分析工具 2、统计函数级别的请求次数,执行时间,阻塞时间,CPU和内存使用情况等 3、分析一个复杂项目的性能瓶颈时非常有用,很直观的看出问题在哪 4、也可以用这个来绘制调用的关系图,方便代码理解 二、安装扩展 1、下载扩展包 wget http://pecl.php.net/get/xhprof-0.9.2.tgz 2、解压 tar zxvf xhprof-0.9.2.tgz 3、安装 cd xhprof-0.9.2/extension/ /opt/ci123/php/bin/phpize ./configure --enable-xhprof --with-php-config=/opt/ci123/php/bin/php-config make make install 4、修改php.ini配置文件 vim /opt/ci123/php/etc/php.ini 最后,加上: [xhprof] extension=xhprof.so xhprof.output_dir=/tmp/xhprof ps:目录需要保证apache有读写权限,最后不能带/,否则会报错 5、检验是否成功 /opt/ci123/php/bin/php -m|grep 'xhprof' 6、重启apache /opt/ci123/apache/bin/apachectl -t /opt/ci123/apache/bin/apachectl restart 三、自带的范例运行 1、将解压出来的文件夹,复制到一个apache可访问的目录,extension目录不需要 2、浏览器访问该目录下的examples/sample.php 3、查看最后输出的提示,访问对应的链接,有相应的分析,xhprof_html/index.php 4、出不了图的话,安装下graphviz,默认不支持png,需要再装一个gd的 yum install graphviz yum install graphviz-gd 四、简单试用 1、blog.geekman.vip分析 2、首页,调用了99,829个函数 3、可以进行各种排序,查看时间主要耗在哪些函数上 4、可以查看整个运行过程中的性能瓶颈,图片格式,很直观 5、范例: http://192.168.0.249/xhprof/xhprof_html/?run=55b1de2f8613a&source=xhprof_foo 附录: http://mirror.facebook.net/facebook/xhprof/doc.html http://avnpc.com/pages/profiler-php-performance-online-by-xhprof http://www.cnxct.com/you-do-not-have-dot-image-generation-utility-installed/
centos下安装字体文件
编 写:袁 亮
时 间:2015-07-23
说 明:centos下安装字体文件
一、安装步骤
1、从本地找到需要的字体文件,通过winscp传到服务器上
本地目录:C:\Windows\Fonts
服务器目录:/usr/share/fonts/chinese/TrueType/
2、在字体目录下分别执行
cd /usr/share/fonts/chinese/TrueType/
mkfontscale
mkfontdir
fc-cache -fv
3、使改动生效
3.1 source /etc/profile
3.2 reboot重启
3.3 两个版本都有看到说,都试过,不确定哪个起的效果,懒得测了,后面有兴趣的在自己虚拟机上测试看看
4、export LC_CTYPE=en_US.UTF-8 英文优先
否则phantomJs那边截图还是乱码
二、一些问题
1、如果没有mkfontscale命令
yum install mkfontscale
2、没有fc-cache命令
yum install fontconfig
三、其他知识
1、locale
查看系统语言设置
2、fc-list
查看系统的字体库
3、fc-list :lang=zh
查看中文字体库
4、更改字体使用的先后顺序?只是临时更改
#export LC_CTYPE=en_US.UTF-8 英文优先
#export LC_CTYPE=zh_CN.UTF-8 中文优先
改完之后,可以看下fc-list :lang=zh的结果,会有变化,在使用phantomJs的时候,会有影响,据说是QT那边导致,具体不清楚
参考文档:
http://www.centoscn.com/image-text/config/2014/0913/3737.html
PhantomJS第一篇:安装及抓取网页为图片
编 写:袁 亮 时 间:2015-07-21 说 明:PhantomJS第一篇:安装及抓取网页为图片 一、是什么,解决什么问题 1、是一个无界面的,webkit内核浏览器,能像一个真正的浏览器一样解析js,dom,css等 2、应用场景 抓取js后加载的内容 将完整页面转为图片 屏幕补抓 自动化测试 网络监控 二、下载安装:linux版 1、2.0.0版本之前的,直接网上下载编译后的二进制文件即可,直接解压就可以运行 如果找不到好的下载源,直接上249上,有1.4版本和1.9.8版本 /opt/software/下 2、源码安装 2.1 下载源码 a:直接下载某个版本 wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.0.0-source.zip unzip phantomjs-2.0.0-source.zip b:git下载全部 git clone git://github.com/ariya/phantomjs.git cd phantomjs git checkout 2.0 c:下载太慢,直接从249上拷贝 /opt/ci123/www/html/phantomjs 2.2 安装依赖的模块 yum -y install gcc gcc-c++ make flex bison gperf ruby \ openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel \ libpng-devel libjpeg-devel 2.3 执行安装脚本(以小时记,好久好久...) ./build.sh 3、参考文档 http://phantomjs.org/build.html 4、执行方法 ./bin/phantomjs examples/post.js 三、下载安装:windows版本 1、自行搜索下载 http://phantomjs.org/download.html 2、18上有2.0.0版本 \\192.168.0.18\运维网络硬盘\r软件\phantomjs-2.0.0-windows.zip 3、解压出来之后,可以直接运行 4、命令行下执行: cd 到相应目录 ./bin/phantomjs.exe examples/post.js 四、简单使用,抓取一个网页,并保存为图片 1、新建fetch.js文件 2、输入以下代码 var page = require('webpage').create(); page.open('http://www.ci123.com/', function() { page.render('/opt/ci123/www/html/geekman/ci123.png'); phantom.exit(); }); 3、执行,并查看图片是否生成 ./bin/phantomjs fetch.js 五、遇到的问题及解决办法 1、网页中的中文乱码,中文的地方,都是一堆方括号 yum install bitmap-fonts bitmap-fonts-cjk ps:这个解决了乱码问题,但是导致了下面另外一个问题,坑了我大半天 2、生成的png有一堆的透明效果 www.ci123.com加使用美图看看导致,其实是正常的 放在浏览器里看就正常了 3、生成jpg格式图片,背景黑色 执行之后,将body背景设置为白色即可 page.evaluate(function(){ document.body.bgColor = 'white'; }); 4、有些内容后加载,导致页面有空白 延时一定时间之后在渲染成图片 window.setTimeout(function (){ page.render("/opt/ci123/www/html/geekman/ci123.png"); phantom.exit(); }, 3000); 5、有些内容,需要触发效应效果才出现,可以在page.evaluate中模拟 page.evaluate(function(){ document.body.bgColor = 'white'; window.scrollTo(0,10000);//滚动到底部 window.document.body.scrollTop = document.body.scrollHeight; }); 6、flash播放显示的内容,截取不到 1.5版本之后就不再支持flash,如果要抓取flash的,需要安装1.4及之前的版本 7、生成的图片,宽度不够,比如www.ci123.com大概只有960的样子 设置webkit的宽高,让样式显示正常(可以调整这个的不同值,来抓取不同分辨率下的表现,特别是响应式布局的页面) page.viewportSize = {width: 1440,height: 800}; 8、在window下抓取,页面显示正常,但是在linux下抓取,页面排版跟浏览器上显示的有很大的区别 8.1 版本一致,怀疑是版本的问题,装过1.4,1.5,1.9.2,1.9.8,2.0.0版本,都没用... 8.2 百度、google了很久,发现别人都没这个问题 8.3 怀疑是不是webkit内核不一样,所以在我的浏览器里正常,在服务器上的那个不一样,看过使用的webkit内核,是比较旧 然后又是各种切换版本,测试,发现还是不行 8.4 后来仔细看截出来的图,发现汉字跟浏览器里不大一样,怀疑是这个的问题 8.5 将最开始安装的那两个中文字库删除,再截,发现,汉字乱码了,但是排版正常.... 所以问题就确定了,因为使用了不当的字体库,导致页面排版出错 8.6 重装centos的字体库,又踩了个坑,这个见额外的文档 六、完整代码范例 var page = require('webpage').create(); page.viewportSize = {width: 1440,height: 800}; var url = 'http://www.ci123.com/'; page.open(url, function (status){ if (status != "success") { console.log('FAIL to load the address'); phantom.exit(); } var bb = page.evaluate(function() { document.body.bgColor = 'white'; // //此函数在目标页面执行的,上下文环境非本phantomjs,所以不能用到这个js中其他变量 window.scrollTo(0,10000);//滚动到底部 window.document.body.scrollTop = document.body.scrollHeight; }); window.setTimeout(function (){ page.render("/opt/ci123/www/html/geekman/ci123.png"); phantom.exit(); }, 3000); }); 七、其他 1、1.5版本之后不支持flash,如果要支持flash的话,请下载1.4以前的版本 2、常用语法 http://www.tuicool.com/articles/nieEVv http://www.cnblogs.com/justany/p/3279717.html 3、官方文档 http://phantomjs.org/documentation/ 4、examples文件夹下,有很多范例,直接参考使用,很好用
openssl第一篇:简单了解
编 写:袁 亮 时 间:2015-07-20 说 明:openssl第一篇:简单了解 一、什么是openssl 1、一个强大的安全套接字层密码库 2、套接字:源ip,目的ip,协议,源端口,目的端口组成,通信的一种约定,想了解更多,请自行google 3、建立在可靠的传输层协议TCP上 4、主要功能: 4.1 加密、解密在网络传输中的数据包,包含这些数据不被篡改和伪造(在网络传输数据前加密,收到数据,先解密再往上传) 4.2 验证客户端和服务端的身份,只跟符合要求的另一方进行通信(正常的网络请求是没有验证的) 二、哪些地方使用到了 1、绝大部分的https服务器 2、支持https的浏览器(客户端) 3、各种支付功能:比如支付宝、银联支付、微信支付等,都需要openssl支持 4、对安全要求比较高的话,比如防止数据被伪造获取,传输内容被看到,都可以考虑使用 三、工作原理(摘自参考文章,大概了解即可) 1、client送给server它自己本身使用的ssl的version(ssl一共有三个version),加密算法的一些配置 和一些随机产生的数据,以及其他在SSL协议中需要用到的信息 2、server送给client它自己的SSL的version,加密算法的配置,随机产生的数据,还会用自己的私有密钥加密SERVER-HELLO信息 Server还同时把自己的证书文件给送过去。同时有个可选的项目,就是server可以要求需要客户的certificate 3、client就用server送过来的certificate来验证server的身份。如果server身份验证没通过,本次通信结束。 通过证书验证之后,得到server的公共密钥,解开server送来的被其用私有密钥加密过的SERVER-HELLO信息,看看对头与否 (可理解为签名的过程,用来验证服务器身份)。 如果不对,说明对方只有该server的公共密钥而没有私有密钥,必是假的。通信告吹。 4、client使用产生了的随机数据(sharedsecret),并且把这个随机数据用server发送过来的的公共密钥加密, 此次加密过程产生本次握手中的premastersecret(这个步骤是有可能有server的参与的,由他们使用的加密算法决定) 然后将它(premastersecret)送回给server,如果server要求需要验证client,那么client也需要自己把自己的证书送过去 同时送一些自己签过名的数据过去。 5、Server验证完client的身份之后,然后用自己的私有密钥解密得到premastersecret然后双方利用这个premastersecret来共同协商 得到mastersecret(可理解为premastersecret为双方协商的暗号,然后使用这个暗号再协商一个mastersecret用来 产生真正的会话密钥用来传输数据)以此来保证数据的决对安全。 6、双方用mastersecret一起产生真正的sessionkey,然后就是他们在剩下的过程中的对称加密的key了。 这个key还可以用来验证数据完整性。双方再交换结束信息。握手结束。 四、关键名称 1、加密算法 1.1 对称加密算法(加密和解密用的秘钥一致) 一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4 7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5 des比较常用 1.2 非对称加密算法(加密和解密用的秘钥不一致) 包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC) rsa和dsa是最流行的数字签名技术 2、公钥、密钥 2.1 公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥) 2.2 公钥是密钥对中公开的部分,私钥则是非公开的部分 2.3 使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密 比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功 3、数字证书 3.1 由权威机构(CA)颁发 3.2 包含公钥所有者信息、公钥内容以及证书授权中心的数字签名所组成的文件 3.3 有效期内才有用 3.4 证书格式 cer:公钥证书格式 pfx:私钥证书格式 4、证书授权中心 CA (Certificate Authority) 4.1 各家浏览器支持的ca机构也不尽相当,特别是对一些小的ca机构 4.2 比较著名的ca机构: VeriSign:最大的认证机构,赛门铁克的子公司,管理世界13台根服务器中的2台,顶级域名中的.com和.net等,百度在用 中国金融认证中心:http://cs.cfca.com.cn 银联证书就是使用的这个 google internet authority g2:谷歌家的 geotrust ssl ca g2:微信在使用 StartCom 使用的也比较多 4.3 出名的ca机构,证书比较贵,还有一些小的ca机构,虽然便宜,但是有些浏览器不认可,会提示不受信任,体验较差 4.4 火狐支持的ca机构: http://curl.haxx.se/ca/cacert.pem 附录: http://blog.itechol.com/space-33-do-blog-id-5158.html http://baike.baidu.com/link?url=q3wLEKuHy59qDRfIUMYnG0SnofPY0sI32c6N2-3u-zcf7qKB3vRu3v9Jlke0BkiwzcO9sEXDVln-ImZWhauVna http://my.oschina.net/0757/blog/207487
centos,开机时间同步问题
编 写:袁 亮 时 间:2015-07-21 说 明:centos,开机时间同步问题 一、定时同步标准时间 1、方法1:rdate 1.1 centos默认就有安装该命令/usr/bin/rdate 1.2 加入到定时脚本,每小时同步一次时间 10 * * * * /usr/bin/rdate -s rdate.darkorb.net 2、方法2:ntpdate 2.1 安装ntpdate从时间服务器更新时间,如果已有/usr/sbin/ntpdate,跳过本步骤 yum install ntp 2.2 测试是否能获取最新时间,看输出时间是否正确 /usr/sbin/ntpdate time.nist.gov 2.3 加入crontab,定时同步 10 * * * * /usr/sbin/ntpdate time.nist.gov 二、虚拟机,设置不与宿主机进行时间同步 1、如果是xen虚拟机安装的话,需要注意,默认是会跟宿主机进行时间同步的 2、修改文件/proc/sys/xen/independent_wallclock 内容改为1,设置虚拟机时间独立,不与宿主机同步 3、为防止每次重启的时候,被重置,可以在开机启动脚本中添加设置,并同步一次时间
培训6:linux基础能力
10:05 2014-7-11,袁亮,linux基础能力端口 一、基础能力(必选) 1、putty连接 设置 2、vim基本操作 3、svn常用命令以及练习(见文档) 二、服务安装(虚拟机上应该已经装了,有兴趣的可以升级)(可选) 1、nginx 2、apache 3、mysql 4、php 三、服务配置(可选) 1、nginx 监听80端口 配置域名my.ci123.com,请求转发到本机88端口 静态文件缓存到tmp目录下 2、apache 监听88端口 配置域名my.ci123.com 程序目录放在/opt/ci123/www/html/my.ci123.com下 记录访问和报错日志 3、mysql 开3306 3307两个端口 编写启动、停止、重启的shell脚本 设置慢查询log 4、php 添加memcache扩展 5、本地访问my.ci123.com 四、日志查看分析(可选) 1、apache访问日志和报错日志 2、mysql慢日志
file_get_contents了解:自定义http请求
编 写:袁 亮 时 间:2015-07-17 说 明:file_get_contents了解:自定义http请求 一、使用原因 1、这是一个使用非常频繁的函数,对应的file_put_contents,都是文件操作中第一选择 2、抓取网络内容,一般情况下,也是使用的这个,但遇到稍微麻烦点的,我们就觉得没法子了 3、curl等能做的,其实file_get_contents也基本上都能做,只是大家不熟悉 二、简单范例,直接看php.net array( 'method'=>"GET", 'header'=>"Accept-language: en\r\n" . "Cookie: foo=bar\r\n" ) ); $context = stream_context_create($opts); // Open the file using the HTTP headers set above $file = file_get_contents('http://www.example.com/', false, $context); 三、核心函数 stream_context_create 1、支持以下协议,生成相应资源流上下文 http://php.net/manual/zh/wrappers.php file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs php:// — 访问各个输入/输出流(I/O streams) zlib:// — 压缩流 data:// — 数据(RFC 2397) glob:// — 查找匹配的文件路径模式 phar:// — PHP 归档 ssh2:// — Secure Shell 2 rar:// — RAR ogg:// — 音频流 expect:// — 处理交互式的流 2、http资源流支持参数: http:http://php.net/manual/zh/context.http.php http协议支持的参数,基本都支持 header头,post数据,user_agent,代理,超时,跟随重定向等等 3、post数据设置范例 $postdata = http_build_query( array( 'var1' => 'some content', 'var2' => 'doh' ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('http://example.com/submit.php', false, $context);
如何查看自己的内外网ip以及服务器ip
编 写:袁 亮 时 间:2015-07-17 说 明:如何查看自己的内外网ip以及服务器ip 一、查看自己的ip 1、内网ip 1.1 打开cmd命令行模式 1.2 输入ipconfig 找到ipv4地址以及默认网关 1.3 想要查看更详细的网络配置,比如mac地址等,输入ipconfig /all 2、外网地址 2.1 直接打开百度,输入ip,即可看到自己当前的ip以及归属地 2.2 也可以上tool.ci123.com 查看 二、查看linux服务器地址 1、命令行模式,直接输入ifconfig 2、线上服务器有时候会执行不了,因为账号没权限 3、每块网卡都会有相应的一段输出,看下说明即可
http协议基础:内网、外网
编 写:袁 亮 时 间:2015-07-17 说 明:http协议基础:内网、外网 一、前言: 1、适合于计算机网络基本没学的同学 2、了解为主 二、什么是内网ip,什么是外网ip 1、广域网(WAN): Internet,这是一个世界通用的网络,这边可识别的ip就是我们常说的外网ip 我们平时上的网络都是这个 家里连接宽带等,其实就是连接到Internet上 2、局域网(LAN): 找了几台计算机,我们互相能识别,那么我们就组成了一个局域网 我们互相之间能识别,但是其他人并不知道我们是谁是谁 一般需要通过一台能连接到Internet的设备去上网,比如我们公司的内部网络,对其他人来说,我们公司的这些电脑都是同一个人 3、为什么需要内网ip ipv4的ip地址,只能描述256*256*256*256台独立设备,而现在不够用了,因此需要内网ip 三、简单说明 1、外网地址 1.1 相当于绝对地址,比如中国,江苏,南京大学 1.2 跟任何人说这个地址,都是唯一指向同一个 1.3 外网ip,分3类: A类地址:0-127.***.***.*** B类地址:128-191.***.***.*** C类地址:192-223.***.***.*** 2、内网地址 2.1 是一个相当地址,比如说4院3专业2班17号 2.2 在不同的情况下,代表的是不同的 2.3 因此不要出现在公司这边,直接连机房那边的局域网地址,完全是牛头不对马嘴 2.4 内网地址分类,针对外网地址,每一类外网,都有其对应的内网地址格式: A类:10.***.***.*** B类:172.16.***.*** C类:192.168.***.*** 四、内网中,也可以再嵌套内网 1、我们公司,外网地址为:218.94.95.52 2、内网192.168.0.*** 3、其中某台路由器的内网ip为192.168.0.8 可以再设置一个内网,192.168.8.***的内网,可以连接256台各设备 五、程序获取ip地址 function getIp(){//获取IP函数 $ip = false; if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); if ($ip) { array_unshift($ips, $ip); $ip = FALSE; } for ($i = 0; $i < count($ips); $i++) { if (!preg_match("/^(10|172\.16|192\.168)\./", $ips[$i])) { // 判断是否内网的IP $ip = $ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']); }