公司项目中的一项小功能,统计设备的连接数。其中用到shell脚本来获取已连接设备的统计。使用命令

/bin/netstat -an| grep ESTABLISHED | awk '{print $4}' | cut -d: -f1 | sort | uniq -c
 
在linux命令行下执行获取到的结果为
    2 192.168.0.135
 
而通过web 页面用php 的exec 函数来执行,获得结果是这样的:
    1

2 192.168.0.135

 
php 脚本如下:
<?php        
     exec ("cat /dev/null > /tmp/res.log") ;
//      exec ("/bin/netstat -an | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c  ", $re);  
     exec ("/bin/netstat -an | grep ESTABLISHED ", $re);         
     foreach ($re as $re1)        
     {                 
        echo $re1."<br>";        
     }         
     echo "Over<br>" ;
?>
 
百思不得其解,后来在web端只执行 /bin/netstat -an | grep ESTABLISHED 来查看,获得接过分别如:
linux命令行下:
tcp 0 0 192.168.0.1:22 192.168.0.135:50598 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:60212 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:50934 ESTABLISHED
 
php web页面结果如下:
tcp 0 0 192.168.0.1:22 192.168.0.135:50598 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:60212 ESTABLISHED
tcp 0 0 192.168.0.1:22 192.168.0.135:50934 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.1:80 ::ffff:192.168.0.135:56387 ESTABLISHED
 
两种结果不一样了,通过web页面执行的多出来一条(如上面红色部分)。是Ipv6+v4地址的一种写法。即v6和v4的结果都统计出来了。
 
解决办法
/bin/netstat -an -A inet| grep ESTABLISHED | awk '{print $4}' | cut -d: -f1 | sort | uniq -c
 
指定使用协议为 inet 即不包括ipv6的内容。
 
问题是解决了,但具体怎么产生的这个问题,具体原因是什么。还没有弄清楚。还待后续研究中...
 
 
 
 

通过web php 执行shell脚本,获取的结果与直接在命令行下获取的结果不同。的更多相关文章

  1. 利用python执行shell脚本 并动态传参 及subprocess基本使用

    最近工作需求中 有遇到这个情况  在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法   最后还是选择了subprocess这个python标准库 su ...

  2. Web页面执行shell命令

    本文以apache为web服务器为例 安装apache服务yum -y install httpd 启动apachesystemctl restart httpd 创建shell脚本cd /var/w ...

  3. 秘钥登录服务器执行shell脚本

    做自动化的时候,有时候避免不了要和服务器有互动,刚巧碰上一个项目,需要执行命令才能完成本次测试. 昨天遇到的是秘钥形式的,只有秘钥和用户名,百度找了许久也没有思路,(能账号密码登录服务器的还简单些), ...

  4. Android程序执行shell脚本

    在做Android应用时,经常需要执行shell脚本,以快速实现某些功能: 在Android应用程序中执行shell脚本可以省去一大堆繁琐的代码,还可以避免不必要的错误: 比如:拷贝文件夹时,可以执行 ...

  5. 在PHP中调用php_ssh实现远程登陆linux服务器并执行shell脚本。

    这个功能主要用于在web端利用程序对远程服务器进行操作,通过PHP_ssh执行shell脚本来实现. 首先要安装php_ssh2组件,linux中centos7下有ssh2源,直接安装.window下 ...

  6. Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

  7. Linux中执行shell脚本的4种方法

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

  8. 执行shell脚本的几种方法及区别

    执行shell脚本的几种方法及区别 http://blog.csdn.net/lanxinju/article/details/6032368 (认真看) 注意:如果涉及到脚本之间的调用一定要用 . ...

  9. Java SSH远程执行Shell脚本实现(转)

    前言 此程序需要ganymed-ssh2-build210.jar包(下载地址:http://www.ganymed.ethz.ch/ssh2/) 为了调试方便,可以将\ganymed-ssh2-bu ...

随机推荐

  1. LoadRunner 执行单句SQL语句

    LoadRunner 执行单句SQL语句 Action() { int NumRows=0; int i=1; //建立数据库连接 lr_db_connect("StepName=Datab ...

  2. centos6.9 部署wordpress

    用centos6.9搭建wordpressLinux.Nginx.Mariadb(Mysql).PHP 1 yum install nginx mariadb php php-fpm php-mysq ...

  3. Vue组件之props,$emit与$on以及slot分发

    组件实例之间的作用域是孤立存在,要让它们之间的信息互通,就必须采用组件的通信方式  props用于父组件向子组件传达信息 1.静态方式 eg: <body> <div id=&quo ...

  4. php获取不到url问号之后的参数

    url规则已定义: RewriteRule ^/member/editprivilege/([0-9]+) /access.php?_u=mobile/editprivilege&aid=$1 ...

  5. i redis-desktop-manager 安装

    进入 https://redisdesktop.com/download https://github.com/uglide/RedisDesktopManager/releases 选择ubuntu ...

  6. 如何将hdf5文件转换成tflite文件

    我们用keras训练模型后,通常保存的模型格式类型为hdf5格式,也就是.h5文件. 但如果我们想要移植到移动端,特别是基于tensorflow支持的移动端,那就需要转换成tflite格式. 如何转换 ...

  7. HttpClient不同版本超时时间的设置

    引自 https://www.cnblogs.com/hisunhyx/p/5028391.html 3.X是这样的 HttpClient client=new DefaultHttpClient() ...

  8. Sqli-labs less 4

    Less-4 我们使用?id=1" 注入代码后,我们得到像这样的一个错误: You have an error in your SQL syntax; check the manual th ...

  9. BZOJ 1475 方格取数(二分图最大点权独立集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1475 [题目大意] 给出一个n*n的方格,从中取一些不相邻的数字,使得和最大 [题解] ...

  10. (疯狂java)第四课(上)

    趁着周末玩爽了,兴致来了,继续玩玩java(估计再玩下去,就要被java玩了),第六章实在是很长,那就两个阶段来看吧. 1.java 7的增强包装类 这些包装类就是java上的基本类型,只不过人人基本 ...