Welcome to Liuxinxiu'S Blog.
第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]
C#代码
  1. mkdir -p /data/nodejs/htdocs/vue/nuxt/ycw  
  2. /data/nodejs/htdocs/vue/nuxt/ycw  
  3. wget http://192.168.180.91/CNMO/vue-nuxt2.tar  
  4. tar xvf vue-nuxt2.tar  
  5. npm i  
  6. npm run build  
  7. npm run start  
  8.  
  9. #########################################  
  10. vi node_modules/nuxt/bin/nuxt-start  
  11. host = "0.0.0.0"  
  12. #########################################  
  13. "config": {  
  14.     "nuxt": {  
  15.         "host""127.0.0.1",  
  16.         "port""3000"  
  17.     }  
  18. },  
  19. "config": {  
  20.     "nuxt": {  
  21.         "host""0.0.0.0",  
  22.         "port""3000"  
  23.     }  
  24. },  
  25.  
  26. #########################################  
  27. node node_modules/nuxt/bin/nuxt-start   
  28.  
  29. #########################################  
  30. 如果出现错误无法启动  
  31. ps | grep node  
  32. kill <id>  

Linux 搜索文件中的字符串

[不指定 2017/12/27 06:07 | by 刘新修 ]
C#代码
  1. [root@sd-cnmo-lidandan-web1 www]# find -type f -name '*.php'|xargs grep 'Plugin_Header'  
Tags: ,
PHP代码
  1. <?php  
  2.   
  3.     /****** 获取版本号 || 获取Cookie ******/  
  4.     if (isset($_COOKIE["BUILD_NUMBER"])){  
  5.         $_Assets = "?v=".$_COOKIE['BUILD_NUMBER'];  
  6.     }else{  
  7.         $_Assets = "";  
  8.     }  
  9.     /********** 2018年度节日汇总 || 2017-12-19 *************
  10.     元旦      -- yuandan  ||  - 201730、31-01
  11.     春节      -- chunjie  ||  - 20180215-21
  12.     元宵节    -- yuanxiao ||  - 20180302
  13.     情人节    -- qingren  ||  - 20180214
  14.     妇女节    -- funv     ||  - 20180308
  15.     劳动节    -- laodong  ||  - 20180501-
  16.     母亲节    -- muqin    ||  - 20180513
  17.     儿童节    -- ertong   ||  - 20180601
  18.     端午节    -- duanwu   ||  - 20180616-18
  19.     父亲节    -- fuqin    ||  - 20180616-18
  20.     七夕节    -- qixi     ||  - 20180817
  21.     教师节    -- jiaoshi  ||  - 20180910
  22.     中秋节    -- zhongqiu ||  - 20180922-24
  23.     国庆节    -- guoqing  ||  - 20181001-07
  24.     圣诞节    -- shengdan ||  - 20181225
  25.     双11      -- 1111     ||  - 20181111
  26.     双12      -- 1212     ||  - 20181212
  27.     京东618   -- 618      ||  - 20180618
  28.     苏宁818   -- 818      ||  - 20180818
  29.     *****************************************/  
  30.     $dayArr = array('yuandan=2017-12-30+1',    //3天-跨  
  31.                     'yuandan=2018-01-01+0',    //3天-跨  
  32.                     'chunjie=2017-02-15+6',    //7天  
  33.                     'qingren=2018-02-14+0',    //1天  
  34.                     'funv=2018-03-08+0',       //1天  
  35.                     'laodong=2018-04-29+1',    //3天-跨  
  36.                     'laodong=2018-05-01+0',    //3天-跨  
  37.                     'muqin=2018-05-13+0',      //1天  
  38.                     'ertong=2018-06-01+0',     //1天  
  39.                     'duanwu=2018-06-16+2',     //3天  
  40.                     'fuqin=2018-06-17+0',      //1天  
  41.                     'qixi=2018-08-17+0',       //1天  
  42.                     'jiaoshi=2018-09-10+0',    //1天  
  43.                     'zhongqiu=2018-09-22+2',   //3天  
  44.                     'guoqing=2018-10-01+6',    //7天  
  45.                     'shengdan=2018-12-25+0',   //1天  
  46.                     'd1111=2018-11-11+0',      //1天  
  47.                     'd1212=2018-12-12+0',      //1天  
  48.                     'd618=2018-06-18+0',       //1天  
  49.                     'd818=2017-12-12+0');      //1天  
  50.     /**********************************************
  51.      遍历数组判断,添加Class标记
  52.     **********************************************/  
  53.     $dayNux = count($dayArr);  
  54.     if(isset($_GET["day"])&&!emptyempty($_GET["day"])){  
  55.         $currentDate = $_GET["day"];  
  56.     }else{  
  57.         $currentDate = date('Ymd');  
  58.     }  
  59.     for($i=0;$i<$dayNux;++$i){  
  60.         $dayData = $dayArr[$i];  
  61.         $dayNums = substr(strrchr($dayData, "+"),1);  
  62.         $dayAlls = substr($dayData,0,strrpos($dayData,'+'));  
  63.         $dayStar = substr(strrchr($dayAlls, "="),1);  
  64.         $dayName = substr($dayAlls,0,strrpos($dayAlls,'='));  
  65.         $flagSt = $currentDate-(str_replace("-","",$dayStar));  
  66.         /****** 命中退出 ******/  
  67.         if($flagSt>-1&&$flagSt<=$dayNums){  
  68.             $dayClass=' '.$dayName;  
  69.             break;  
  70.         }else{  
  71.             if($i==$dayNux-1){  
  72.                $dayClass='';  
  73.             }  
  74.         }  
  75.     }  
  76.   
  77. ?>  

111

PHP代码
  1. <?php   
  2. /** 
  3.  * Ajax.class.php 
  4.  * ============================================== 
  5.  * Copy right 2016-2999 http://www.cnmo.com 
  6.  * ---------------------------------------------- 
  7.  * 修改之前请加上修改人和修改日志 
  8.  * ============================================== 
  9.  * @param 手机中国 - 平台中心 - TECH 
  10.  * @return return_type 
  11.  * @author: zhangyang 
  12.  * @date: 2016-10-10 
  13.  * @version: v1.0.0 
  14.  */  
  15. class Controller_Ajax extends CC_Core_Controller  
  16. {  
  17.     /** 
  18.      * @func: 大家都在玩 
  19.      * @date: 2016-10-10  
  20.      * @author: zhangyang 
  21.      * @return: 大家都在玩 
  22.      */  
  23.     public function doGetAllPlay()  
  24.     {  
  25.         $platform = (int) $_REQUEST['platform'];  
  26.           
  27.         $appInfo  = Service_Home :: getAppList($platform, 0, 4);  
  28.         $gameInfo = Service_Home :: getGameList($platform, 0, 4);  
  29.         $allPlayInfo = CC_Kit_String :: iconv('gbk','utf-8',array('appList' => $appInfo,'gameList' => $gameInfo));  
  30.         echo json_encode($allPlayInfo);  
  31.         die;  
  32.     }  
  33.       
  34.     /** 
  35.      * @desc: 获取投诉列表 
  36.      * @author: zhangyang 
  37.      * @date: 2016-10-10 
  38.      */  
  39.     public function doGetComplain()  
  40.     {  
  41.         $complain = Service_Home::getComplain();  
  42.         $complain = CC_Kit_String::iconv('gbk''utf-8'$complain);  
  43.           
  44.         echo json_encode($complain);  
  45.         die;  
  46.     }  
  47.       
  48.     /** 
  49.      * 活动包版 
  50.      * @author lidandan 
  51.      * @version 2016-12-28 
  52.      */  
  53.     // public function doActive()  
  54.     // {  
  55.     //     $nowtime = date('Y-m-d H:i:s', time());  
  56.               
  57.     //     $status = 0;  
  58.     //     if($nowtime >= '2016-12-30 10:00:00' && $nowtime <= '2017-01-02 23:59:59'){//奥运会包版  
  59.     //         $status = 1;  
  60.     //     }elseif($nowtime >= '2017-01-23 00:00:00' && $nowtime <= '2017-02-02 23:59:59'){//新年包版  
  61.     //         $status = 2;  
  62.     //     }elseif($nowtime >= '2017-02-10 16:00:00' && $nowtime <= '2017-02-12 23:59:59'){//元宵节  
  63.     //         $status = 3;  
  64.     //     }elseif($nowtime >= '2017-02-14 00:00:00' && $nowtime <= '2017-02-14 23:59:59'){//情人节  
  65.     //         $status = 4;  
  66.     //     }elseif($nowtime >= '2017-03-07 10:00:00' && $nowtime <= '2017-03-08 23:59:59'){//妇女节  
  67.     //         $status = 5;  
  68.     //     }elseif($nowtime >= '2017-04-01 13:30:00' && $nowtime <= '2017-04-04 23:59:59'){//清明节  
  69.     //         $status = 6;  
  70.     //     }elseif($nowtime >= '2017-04-27 12:00:00' && $nowtime <= '2017-05-02 12:00:00'){//五一  
  71.     //         $status = 7;  
  72.     //     }elseif($nowtime >= '2017-05-14 00:00:00' && $nowtime <= '2017-05-14 23:59:59'){//母亲节  
  73.     //         $status = 8;  
  74.     //     }elseif($nowtime >= '2017-05-27 12:00:00' && $nowtime <= '2017-05-30 23:59:59'){//端午  
  75.     //         $status = 9;  
  76.     //     }elseif($nowtime >= '2017-06-01 03:00:00' && $nowtime <= '2017-06-01 23:59:59'){//六一  
  77.     //         $status = 10;  
  78.     //     }elseif($nowtime >= '2017-06-18 00:00:00' && $nowtime <= '2017-06-18 23:59:59'){//父亲节  
  79.     //         $status = 11;  
  80.     //     }  
  81.       
  82.     //     echo $status;  
  83.     //     exit;  
  84.     // }  
  85.   
  86.   
  87.     /** 
  88.      * 活动包版 
  89.      * @author liuxinxiu 
  90.      * @version 2017-12-20 
  91.      */  
  92.     public function doActive()  
  93.     {  
  94.         /********** 2018年度节日汇总 || 2017-12-19 ************* 
  95.         ======================================= 
  96.         名称        代码(class)  ||   时间跨度 
  97.         ======================================= 
  98.         元旦      -- yuandan   ||  - 20171230、31-01 
  99.         春节      -- chunjie   ||  - 20180215=>21 
  100.         元宵节    -- yuanxiao  ||  - 20180302=>02 
  101.         情人节    -- qingren   ||  - 20180214=>14 
  102.         妇女节    -- funv      ||  - 20180308=>08 
  103.         劳动节    -- laodong   ||  - 20180429、30-01 
  104.         母亲节    -- muqin     ||  - 20180513=>13 
  105.         儿童节    -- ertong    ||  - 20180601=>01 
  106.         端午节    -- duanwu    ||  - 20180616=>18 
  107.         父亲节    -- fuqin     ||  - 20180616=>18 
  108.         七夕节    -- qixi      ||  - 20180817=>17 
  109.         教师节    -- jiaoshi   ||  - 20180910=>10 
  110.         中秋节    -- zhongqiu  ||  - 20180922=>24 
  111.         国庆节    -- guoqing   ||  - 20181001=>07 
  112.         圣诞节    -- shengdan  ||  - 20181225=>25 
  113.         双11      -- d1111     ||  - 20181111=>11 
  114.         双12      -- d1212     ||  - 20181212=>12 
  115.         京东618   -- d618      ||  - 20180618=>18 
  116.         苏宁818   -- d818      ||  - 20180818=>18 
  117.         *****************************************/  
  118.         /******* 公共声明 ********/  
  119.         header('Content-type: text/json');  
  120.         $dayArr = array('yuandan=2017-12-22 12:00>2018-01-01 23:59',    //3天-跨  
  121.                         'chunjie=2018-02-15 00:00>2018-02-21 23:59',    //7天-跨  
  122.                         'qingren=2018-02-14 00:00>2018-02-14 23:59',    //1天  
  123.                         'funv=2018-03-08 00:00>2018-03-08 23:59',       //1天  
  124.                         'qingming=2018-04-05 00:00>2018-04-07 23:59',   //3天-跨  
  125.                         'laodong=2018-04-29 00:00>2018-05-01 23:59',    //3天-跨  
  126.                         'muqin=2018-05-13 00:00>2018-05-13 23:59',      //1天  
  127.                         'ertong=2018-06-01 00:00>2018-06-01 23:59',     //1天  
  128.                         'duanwu=2018-06-16 00:00>2018-06-18 23:59',     //3天-跨  
  129.                         'fuqin=2018-06-17 00:00>2018-06-17 23:59',      //1天-合  
  130.                         'qixi=2018-08-17 00:00>2018-08-17 23:59',       //1天  
  131.                         'jiaoshi=2018-09-10 00:00>2018-09-10 23:59',    //1天  
  132.                         'zhongqiu=2018-09-22 00:00>2018-09-24 23:59',   //3天  
  133.                         'guoqing=2018-10-01 00:00>2018-10-07 23:59',    //7天  
  134.                         'shengdan=2018-12-25 00:00>2018-12-25 23:59',   //1天  
  135.                         'd1111=2018-11-11 00:00>2018-11-11 23:59',      //1天  
  136.                         'd1212=2018-12-12 00:00>2018-12-12 23:59',      //1天  
  137.                         'd618=2018-06-18 00:00>2018-06-18 23:59',       //1天  
  138.                         'd818=2018-06-18 00:00>2018-08-18 23:59');      //1天  
  139.         /********************************************** 
  140.          遍历数组判断,添加Class标记 
  141.         **********************************************/  
  142.         $dayNux = count($dayArr);  
  143.         if(isset($_GET["day"])&&!emptyempty($_GET["day"])){  
  144.             $currentDate = $_GET["day"];  
  145.         }else{  
  146.             $currentDate = date('Ymdhi');  
  147.         }  
  148.         for($i=0;$i<$dayNux;++$i){  
  149.             $dayData = $dayArr[$i];  
  150.             $dayEndx = substr(strrchr($dayData">"),1);  
  151.             $dayAlls = substr($dayData,0,strrpos($dayData,'>'));  
  152.             $dayStar = substr(strrchr($dayAlls"="),1);  
  153.             $dayName = substr($dayAlls,0,strrpos($dayAlls,'='));  
  154.             $dStar = str_replace(array("-",":"," "),"",$dayStar);  
  155.             $dEndx = str_replace(array("-",":"," "),"",$dayEndx);  
  156.             /****** 命中退出 ******/  
  157.             if($currentDate>=$dStar && $currentDate<=$dEndx){  
  158.                 $dayClass='"'.$dayName.'"';  
  159.                 break;  
  160.             }else{  
  161.                 if($i==$dayNux-1){  
  162.                    $dayClass=0;  
  163.                 }  
  164.             }  
  165.         }  
  166.         $jsonStr='{ 
  167.             "status":1, 
  168.             "info":"请求成功!", 
  169.             "dayClass":'.$dayClass.' 
  170.         }';  
  171.         echo $jsonStr;  
  172.         exit;  
  173.     }  
  174. }  

 

PHP替换字符串

[不指定 2017/12/19 10:03 | by 刘新修 ]
PHP代码
  1. <?php  
  2. $str =  "我_们_的_=家+园";  
  3. $str = str_replace(array("_","=","+"),"",$str);  
  4. echo  $str; //我们的家园  
  5. ?>  
Tags: ,
PHP代码
  1. <?php  
  2.     echo '<h1 style="margin-top:100px;">xxxx--11-</h1>';  
  3.     echo $redis;  
  4.   
  5.     /****** 获取最新版本号 ******/  
  6.     $optsJson = array(  
  7.         'http'=>array(  
  8.             'method'=>"GET",  
  9.             'timeout'=>60,  
  10.         )  
  11.     );  
  12.     $contextJson = stream_context_create($optsJson);  
  13.     $dataJson =file_get_contents('http://statict.cnmo-img.com.cn/origin/assets.json', false, $contextJson);  
  14.     $arrJson = json_decode($dataJson,true);  
  15.     $buildNumber = $arrJson['BUILD_NUMBER'];  
  16.     //输出  
  17.     //var_dump($arr['BUILD_NUMBER']);  
  18.     echo $buildNumber;  
  19.     setcookie("Age","18");  
  20.     if(isset($buildNumber)&&!emptyempty($buildNumber)){  
  21.         setcookie("BUILD_NUMBER",$buildNumber, time()+3600*24);  
  22.     }else{  
  23.         setcookie("NULL",$buildNumber, time()+3600*24);  
  24.     }  
  25.   
  26. ?>  

查看apache日志相关细节

[不指定 2017/11/20 09:55 | by 刘新修 ]

查看apache日志相关细节

C#代码
  1. 1、查看当天有多少个IP访问:    
  2. awk '{print $1}' access_log.2017110800|sort|uniq|wc -l    
  3.     
  4. 2、查看某一个页面被访问的次数;    
  5. grep "/index.php" access_log.2017110800 | wc -l    
  6.     
  7. 3、查看每一个IP访问了多少个页面:    
  8. awk '{++S[$1]} END {for (a in S) print a,S[a]}' access_log.2017110800   
  9.     
  10. 4、将每个IP访问的页面数进行从小到大排序:    
  11. awk '{++S[$1]} END {for (a in S) print S[a],a}' access_log.2017110800 | sort -n    
  12.     
  13. 5、查看某一个IP访问了哪些页面:    
  14. grep ^111.111.111.111 access_log.2017110800| awk '{print $1,$7}'    
  15.     
  16. 6、去掉搜索引擎统计当天的页面:    
  17. awk '{print $12,$1}' access_log.2017110800 | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l    
  18.     
  19. 7、查看2009年6月21日14时这一个小时内有多少IP访问:    
  20.  awk '{print $4,$1}' access_log.2017110800 | grep 21/Jun/2009:14 | awk '{print $2}'| sort | uniq | wc -l    

很多时候在使用Linux的shell时,我们都需要对文件名或目录名进行处理,通常的操作是由路径中提取出文件名,从路径中提取出目录名,提取文件后缀名等等。例如,从路径/dir1/dir2/file.txt中提取也文件名file.txt,提取出目录/dir1/dir2,提取出文件后缀txt等。

下面介绍两种常用的方法来进行相关的操作。

一、使用${}

1、${var##*/}

该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容。使用例子及结果如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo ${var##*/}

file.txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件名file.txt。

若使用时在shell程序文件中,可以使用变量来保存这个结果,再加以利用,如file=${var##*/}

2、${var##*.}

该命令的作用是去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容。使用例子及结果如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo ${var##*.}

txt

从运行结果可以看到,使用该命令,可以提取出我们需要的文件后缀。

如果文件的后缀不仅有一个,例如,file.tar.gz,命令${var##*.}仅能提取最后一个后缀,而我想提取tar.gz时该怎么办?那么就要用下面所说的${var#*.}命令了。

3、${var#*.}

该命令的作用是去掉变量var从左边算起的第一个'.'字符及其左边的内容,返回从左边算起第一个'.'(不含该字符)的右边部分的内容。使用例子及结果如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.tar.gz

liuxinxiu@HongKong: echo ${var#*.}

tar.gz

从运行结果可以看到,使用该命令,可以提取出文件的多个后缀。

4、${var%/*}

该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容。使用例子及结果如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo ${var%/*}

/dir1/dir2

从运行的结果可以看到,使用该命令,可以提取出我们需要的文件所在的目录

5、${var%%.*}

该命令的使用是去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容。使用例子及结果如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo ${var%%.*}

/dir1/dir2/file

当我们需要建立一个与文件名相同名字(没有后缀)的目录与对应的文件相对应时,就可以使用该命令来进行操作。例如,解压文件的情况就与此类似,我们压缩文件file.zip时,会在与file.zip同级目录下建立一个名为file的目录。

6、${}总结

其实${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。

#:表示从左边算起第一个

%:表示从右边算起第一个

##:表示从左边算起最后一个

%%:表示从右边算起最后一个

换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

例如:${var%%x*}表示找出从右边算起最后一个字符x,并删除字符x及其右边的字符。

看到这里,就可以知道,其实该命令的用途非常广泛,上面只是指针文件名和目录名的命名特性来进行提取的一些特例而已。

二、basename和dirname

${}并不是专门为提取文件名和目录名设计的命令,那么basename和dirname命令就是专门为做这一件事而已准备的了。

1、basename

该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。

1)从路径中提出出文件名(带后缀),例子如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo (basename $var)

file.txt

2)从上面命令的用法中可以看到,后缀(SUFFIX)是一个可选项。所以,若只想提取出文件名file,而不带有后缀,还可以在变量的后面加上后缀名,例子如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: echo (basename $var .txt)

file

2、dirname

该命令的作用是从路径中提取出目录名,使用方法为 dirname NAME

使用例子如下:

liuxinxiu@HongKong: var=/dir1/dir2/file.txt

liuxinxiu@HongKong: dirname $var

/dir1/dir2

这样就提取出了file.txt文件所在的目录。

注:该命令不仅能提取出普通文件所的目录,它能提取出任何文件所在的目录,例如目录所在的目录,如下:

liuxinxiu@HongKong: var=/dir1/dir2/

liuxinxiu@HongKong: dirname $var

/dir1

它提取出了目录dir2所在的目录dir1.

 

C#代码
  1. #!/bin/bash  
  2. if [ ! -n "$1" ] ;then  
  3.         echo "Error: you have not input a word!"  
  4.         ##### if [ $1 == "start" ] #######  
  5. elif [ $# -lt 2 ] ; then  
  6.         echo "Error: number of parameters!"  
  7. else  
  8.         #echo "Error: the word you input is $1"  
  9.         if [[ ! -d "$1" ]]; then    
  10.                 mkdir "$1"  
  11.                 echo "Error: Directory does not exist $1"  
  12.         elif [[ ! -d "$2" ]]; then  
  13.                 mkdir "$1"  
  14.                 echo "Error: Directory does not exist $2"  
  15.         else  
  16.                 echo -e "=============== [www.cnmo.com] ================"  
  17.                 ##### SubmitTime #######  
  18.                 if [ ! -n "$3" ] ;then  
  19.                     #echo "you have not input a word!"  
  20.                     svntime=''  
  21.                 else  
  22.                     #echo "the word you input is $1"  
  23.                     minx=$[ $3 * 60 ]  
  24.                     #seldate=`-mtime $minx`  
  25.                     seldate='-mmin -'$minx  
  26.                 fi  
  27.                 #find $1 -type f -mtime 0 \( -name '*css' -or -name '*js' \) -printf "%P\n" | while read file #按时间  
  28.                 find $1 -type f $seldate \( -name '*css' -or -name '*js' \) -printf "%P\n" | while read file #按全部  
  29.                 do  
  30.                         ##### mkdir path #######  
  31.                         npath=${file%/*}  
  32.                         if [[ ! -d "$npath" ]]; then  
  33.                                 mkdir -p "$npath"  
  34.                         fi  
  35.                         #strA="helloworld"  
  36.                         #strB="tpl"  
  37.                         #if [[ $file =~ $strB ]]  
  38.                         #then  
  39.                         #  echo "包含"  
  40.                         #else  
  41.                         #  echo "不包含"  
  42.                         #fi  
  43.   
  44.                         if [[ $file =~ "tpl" ]]  
  45.                         then  
  46.                           echo "目录: "$file" 包含/tpl/直接略过.."  
  47.                         else  
  48.                                 ##### start yui #######  
  49.                                 dfile=$1"/"$file  
  50.                                 nfile=$2"/"$file  
  51.                                 yjar=/jar/yuicompressor-2.4.7.jar  
  52.                                 if [ "${file##*.}" = "css" ]; then  
  53.                                         java -jar $yjar --type css --charset gb2312 $dfile -o $nfile  
  54.                                         echo -e "ok[==>css]:"$nfile  
  55.                                 elif [ "${file##*.}" = "js" ]; then  
  56.                                         java -jar $yjar --type js --charset gb2312 $dfile -o $nfile  
  57.                                         #java -jar /jar/yuicompressor-2.4.2.jar --type js --charset gb2312 /data/svnroot/jenkins_SVN_data/old/origin/touch/315j.js -o /test/origin/touch/315j.js  
  58.                                         echo -e "ok[==>js]:"$nfile  
  59.                                 fi  
  60.                         fi  
  61.                 done  
  62.         fi  
  63. fi  
C#代码
  1. java -jar /jar/yuicompressor-2.4.2.jar --type js --charset gb2312 /data/svnroot/jenkins_SVN_data/old/origin/touch/315j.js -o /test/origin/touch/315j.js  
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件

find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件

查看网络连接数:

netstat -an |wc -l

netstat -an |grep xx |wc -l        查看某个/特定ip的连接数

netstat -an |grep TIME_WAIT|wc -l    查看连接数等待time_wait状态连接数

netstat -an |grep ESTABLISHED |wc -l    查看建立稳定连接数量

 

查看不同状态的连接数数量

[root@cp-nginx ~]# netstat -an | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'

LISTEN 8

ESTABLISHED 2400

FIN_WAIT1 2

TIME_WAIT 6000

 

查看每个ip跟服务器建立的连接数

[root@cp-nginx ~]# netstat -nat|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

31 45.116.147.178

20 45.116.147.186

12 23.234.45.34

11 103.56.195.17

(PS:正则解析:显示第5列,-F : 以:分割,显示列,sort 排序,uniq -c统计排序过程中的重复行,sort -rn 按纯数字进行逆序排序)

 

查看每个ip建立的ESTABLISHED/TIME_OUT状态的连接数

[root@cp-nginx ~]# netstat -nat|grep ESTABLISHED|awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn

24 103.56.195.17

19 45.116.147.186

18 103.56.195.18

17 45.116.147.178

 

 

问题1:解决time_wait连接数大量问题

查询到time_wait连接数过多情况下,调整内核参数:/etc/sysctl.conf

vim /etc/sysctl.conf

 

添加以下配置文件:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 300

 

/sbin/sysctl -p 让参数生效,调优完成

 

参数详解:

1.net.ipv4.tcp_syncookies = 1 表示开启 syn cookies 。当出现 syn 等待队列溢出时,启用 cookies 来处理,可防范少量 syn 攻击,默认为 0 ,表示关闭;

2.net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将 time-wait sockets 重新用于新的 tcp 连接,默认为 0 ,表示关闭;
3.net.ipv4.tcp_tw_recycle = 1 表示开启 tcp 连接中 time-wait sockets 的快速回收,默认为 0 ,表示关闭。
4.net.ipv4.tcp_fin_timeout 修改系靳默认的 timeout 时间


 

如果以上配置调优后性能还不理想,可继续修改一下配置:

vi /etc/sysctl.conf

C#代码
  1. net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。  
  2.   
  3. net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。  
  4.   
  5. net.ipv4.tcp_max_syn_backlog = 8192 #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。  
  6.   
  7. net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。  
  8. 默认为180000,改为5000。  
  9. 对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。  


问题2:ESTABLISHED连接数过大问题

 

怎么解决请求结束后依然存在大量ESTABLISHED没有被释放

初步推断tomcat服务器回收session时出了问题,这个一般都跟服务器的Timeout设置有联系。

查看tomcat的配置文件 server.xml

<Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" URIEncoding="UTF-8" />
*****

 

检查配置得出20000毫秒的时候acceptCount=”100” ,明显不合理,最大连接数也太小了吧。

所以进一步优化:

connectionTimeout="20000" 改为 connectionTimeout="100"acceptCount="100"改为acceptCount="5000"

优化完毕,继续压测...

系统响应能力节节攀升,之前LoadRunner报错问题直到压倒***并发也再也没有出现。

Action.c(380): 错误 -26608: 对于“http://www.cnlogs.com/javame”,HTTP 状态代码=504 (Gateway Time-out)
 
Linux使用netstat命令查看并发连接数?
 
我们的网站部署在linux的服务器上,特别是web服务器,我们可能有时候做为运维人员,肯定是要查看网站的并发连接数是不是达到瓶颈等,所以在linux下,我们如何查看服务器的并发连接数呢?使用以下命令即可分组查看各种连接状态哦:
 
C#代码
  1. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'  
解释:  返回结果示例:  LAST_ACK 5   (正在等待处理的请求数)  SYN_RECV 30  ESTABLISHED 1597 (正常数据传输状态)  FIN_WAIT1 51  FIN_WAIT2 504  TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)    状态:描述  CLOSED:无连接是活动的或正在进行  LISTEN:服务器在等待进入呼叫  SYN_RECV:一个连接请求已经到达,等待确认  SYN_SENT:应用已经开始,打开一个连接  ESTABLISHED:正常数据传输状态  FIN_WAIT1:应用说它已经完成  FIN_WAIT2:另一边已同意释放  ITMED_WAIT:等待所有分组死掉  CLOSING:两边同时尝试关闭  TIME_WAIT:另一边已初始化一个释放  LAST_ACK:等待所有分组死掉  使用这上面的命令是可以查看服务器的种连接状态,其中ESTABLISHED 就是并发连接状态的显示数的了。如果你不想查看到这么多连接状态,而仅仅只是想查看并发连接数,可以简化一下命令,即: 
C#代码
  1. netstat -nat|grep ESTABLISHED|wc -l  
  2. 1164  

这个返回的数字就是当前并发的连接数的了。

nginx日志统计分析

[不指定 2017/10/18 23:13 | by 刘新修 ]

 本文主要使用的是grep,awk,cut等工具来对nginx日志进行统计和分析,具体如下:

 

1,列出当天访问最多次数的ip地址

cut -d- -f 1 /usr/local/nginx/logs/20160329/access_2016032913.log |uniq -c | sort -rn | head -20 

 

C#代码
  1. [root@httpservera 20160329]# cut -d- -f 1 /usr/local/nginx/logs/20160329/access_2016032913.log |uniq -c | sort -rn | head -20    
  2.      69 180.116.214.31   
  3.      45 180.116.214.31   
  4.      45 180.116.214.31   
  5.      36 49.80.54.111   
  6.      35 183.206.185.204   
  7.      35 180.116.214.31   
  8.      32 49.80.54.111   
  9.      32 49.80.54.111   
  10.      32 180.116.214.31   
  11.      31 117.136.45.101   
  12.      29 180.116.214.31   
  13.      28 218.205.19.112   
  14.      28 180.116.214.31   
  15.      28 180.116.214.31   
  16.      27 49.80.54.111   
  17.      27 222.185.248.242   
  18.      24 49.80.54.111   
  19.      24 175.0.8.161   
  20.      23 49.80.54.111   
  21.      23 49.80.54.111  

 2,查看某一个页面被访问的次数

[root@httpservera 20160329]#grep "/index.php" log_file | wc -l

 

3,查看每一个IP访问了多少页面并排序

awk '{++S[$1]} END {for (a in S) print a,S[a]}' access_2016032913.log |uniq|sort -rn|more

C#代码
  1. [root@httpservera 20160329]# awk '{++S[$1]} END {for (a in S) print a,S[a]}' access_2016032913.log |uniq|sort -rn|more  
  2. 223.94.229.51 148  
  3. 223.73.166.191 1  
  4. 223.68.252.103 156  
  5. 223.68.167.66 2  
  6. 223.68.106.138 43  
  7. 223.67.99.72 7  
  8. 223.67.153.173 12  
  9. 223.66.93.152 15  
  10. 223.66.38.31 103  
  11. 223.65.191.181 1  
  12. 223.65.191.135 11  
  13. 223.65.190.71 13  
  14. 223.65.141.78 3  
  15. 223.64.63.71 31  
  16. 223.64.63.229 7  
  17. 223.64.62.242 59  
  18. 223.64.62.23 27  
  19. 223.64.62.216 1  
  20. 223.64.62.160 40  
  21. 223.64.61.136 28  
  22. 223.64.60.80 13  
  23. 223.64.60.21 12  
  24. 223.64.237.37 187  
  25. 223.64.209.247 2  
  26. 223.64.158.4 15  

其中,sort -rn 按照数字从大到小排序,uniq 将重复行去除。

 

4,查看某一个ip访问了那些页面:grep ^xx.xx.xx.xx log_file |awk '{print $1,$7}'

C#代码
  1. [root@httpservera 20160329]# grep ^223.147.39.194 17 access_2016032913.log |awk '{print $1,$7}'          grep: 17: No such file or directory  
  2. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  3. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  4. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  5. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  6. access_2016032913.log:223.147.39.194 //thirdpartyapi/appaction/app_action/action_send_batch.json  
  7. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  8. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  9. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  10. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  11. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  12. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  13. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  14. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  15. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  16. access_2016032913.log:223.147.39.194 //customer/customerInfo/getCustUnReadMsgInfo.json  
  17. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  
  18. access_2016032913.log:223.147.39.194 //remind/redDot/checkRedDot.json  

5,去掉搜索引擎统计当天的页面:awk '{print $12,$1}' access_2016032913.log | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l    

C#代码
  1. [root@httpservera 20160329]# awk '{print $12,$1}' access_2016032913.log | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l        
  2. 35  

6,查看一个小时内有多少ip访问:

C#代码
  1. [root@httpservera 20160329]# awk '{print $4,$1}' access_2016032913.log | grep 29/Mar/2016:13 | awk '{print $2}'| sort | uniq | wc -l     
  2. 1926  

2.访问量统计

 

1.根据访问IP统计UV

awk '{print $1}'  access.log|sort | uniq -c |wc -l

 

2.统计访问URL统计PV

awk '{print $7}' access.log|wc -l

 

3.查询访问最频繁的URL

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

 

4.查询访问最频繁的IP

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

 

5.根据时间段统计查看日志

 cat  access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more

C#代码
  1. 1.根据访问IP统计UV  
  2. awk '{print $1}'  access.log|sort | uniq -c |wc -l  
  3. 2.统计访问URL统计PV  
  4. awk '{print $7}' access.log|wc -l  
  5. 3.查询访问最频繁的URL  
  6. awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more  
  7. 4.查询访问最频繁的IP  
  8. awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more  
  9. 5.根据时间段统计查看日志  
  10.  cat  access.log| sed -n '/14\/Mar\/2015:21/,/14\/Mar\/2015:22/p'|more  

备注:nginx 日志分割脚本

 

C#代码
  1. [root@iZ237lzm354Z logs]# vim  /opt/shell/nginx_log.sh  
  2. #! /bin/bash  
  3. #Power by guojinbao  
  4. date=`date +%Y-%m-%d-%H-%M-%S`  
  5. logfile="/guojinbao/nginx/logs/access.log"  
  6. logdir=/guojinbao/nginx/logs  
  7. pid=`cat /usr/local/nginx/logs/nginx.pid`  
  8. if [ ! -d $logdir ]; then  
  9.     mkdir -p $logdir  
  10. fi  
  11. /bin/mv $logfile $logdir/access_${date}.log  
  12. kill -HUP $pid  
第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]