Linux 命令

lsof

lsof -p 端口号 可查看端口打开了哪些文件

查看端口现在运行的情况

lsof -i:port

netstat

netstat -antp|grep CLOSE_WAIT

常见参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

 

http://www.ttlsa.com/linux/linux-command-lsof-study/

MySQL wait_timeout

mysql wait_timeout 是指MySQL多久未收到请求,就关闭连接所用时间。

默认php 不需要调用mysql_close() 也会自己断开连接。

最近遇到一长时间运行程序,由于wait_timeout设置时间为10s 而此程序 每循环一次也sleep 10s ,程序未调用关闭MySQL,导致每次 MySQL都断开连接,因而产生大量close_wait连接。

主动关闭后,close_wait 不再产生。

 

http://blog.itpub.net/22664653/viewspace-2143671/

浅谈CLOSE_WAIT

linux sort

linux sort

序号 sql语句 耗时
[root@VM_6_99_centos test]# cat 01.txt
1 sql1 100
2 sql2 30
3 sql4 19
4 sql23 50
5 sql5 109
6 sql7 78

按耗时排序

[root@VM_6_99_centos test]# cat 01.txt |sort -gk 3 -r
5 sql5 109
1 sql1 100
6 sql7 78
4 sql23 50
2 sql2 30
3 sql4 19

找出耗时前三语句

[root@VM_6_99_centos test]# cat 01.txt |sort -gk 3 -r|head -n 3
5 sql5 109
1 sql1 100
6 sql7 78

https 证书检测

需要对多台机器https证书进行检测。因此需要通过ip进行请求。
原方法:

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            curl_exec($ch);

这种请求方式无法做到检测https证书;
采用下面的方法:
http://stackoverflow.com/questions/24351152/how-to-manually-resolve-hosts-in-https-connections-in-php

https://curl.haxx.se/libcurl/c/CURLOPT_RESOLVE.html
需用到php版本比较新,因此升级到php5.6.28,另libcurl版本也较低,升级到7.50.0,同时需要支持https;

重新编译php,升级curl

查找php编译参数
/usr/local/php/bin/php -i |grep configure

修改参数:

–with-curl=/usr/local/curl

make

make install

重启php-fpm即可;

新代码如下:

     
$ip='xx.xx.xx.20';

$url='https://xx.com';
$port=443;

$hostname='';
$resolve= array(sprintf(
    "%s:%d:%s", 
    $hostname,
    $port,
    $ip
));

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RESOLVE, $resolve);
curl_setopt($ch, CURLOPT_VERBOSE,true);
curl_setopt($ch, CURLOPT_STDERR,fopen('01.log','w'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO,  'E:/ca-bundle.crt'); 
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);


$response = curl_exec($ch);
echo $response;
$error=curl_error($ch);
echo $error;

结果如下:

* Added xx.com:443:xx.xx.xx.20 to DNS cache
* Rebuilt URL to: https://xx.com/
* Hostname xx.com was found in DNS cache
* Trying xx.xx.xx.20…
* Connected to xx.com (xx.xx.xx.20) port 443 (#0)

可以看到请求到指定的ip上。其他信息如证书过期时间,证书是否匹配也会输出的log文件。

可能错误信息:
SSL: no alternative certificate subject name matches target host name ‘xx.xx.com’

可以调整系统时间测试证书过期情况。

linux 安装 svn

1: yum -y install  subversion

2:mkdir -p /data/svn   启动服务 svnserve -d -r /data/svn

查看服务:lsof -i:3690 或 ps aux |grep svn

3:svnadmin create  /data/webdocs 创建版本库

4:修改配置文件

cp  -p  svnserve.conf  svnserve.conf.default

anon-access = none //禁止匿名访问

auth-access = write //认证后有读的权限

password-db = /data/webdocs/passwd //指定密码文件

authz-db = /data/webdocs/authz //指定权限认证文件

5:添加用户以及权限

编辑passwd文件配置用户和密码

vim passwd

lisa=lisa //username=password

编辑authz文件配置读取权限

[groups]

admin=lisa

[/]

@admin=rw

6:启动svn并验证

pkill svnserve

svnserve -d -r /data/webdocs/

svn –username=lisa co svn://xxx.xxx.xxx.xxx/webdocs