文档章节

项目收获

o
 osc_4nmshwhm
发布于 2018/08/07 10:55
字数 918
阅读 0
收藏 0

 

  最近项目中需要一个功能,需要客户端上报本地环境。最初的想法是使用C++直接获取本地环境,但是这种方法太过笨重,优点是集成在代码内,无需再去调用脚本,产生额外开销。所以最终使用Python写了一个脚本,在Python中执行shell语句获取环境信息,再解析成服务端相应的格式,通过C++调用这个脚本获得结果,进行上报。在Python脚本中,对commands.getstatusoutput()进行了封装,认为返回的状态码不为0,该语句执行失败,可是在后续的过程中,发现即使不为0也是执行成功的。在这里举两个例子。第一个是cat xxx | grep yyy 如果xxx有内容,但是不包含yyy,也就是xxx文件中不包含yyy,这时候不会返回任何信息,但是状态码却不为0,导致调用语句出错,查看日志显示cmd fail。第二个是 test -f xxx,也就是判断xxx文件是否存在,本来这个就需要根据状态码来进行判断,为0在存在,为1则不存在,如果使用我们封装好的,则会log cmd fail。这是一个需要注意的地方,封装的方法不一定是对的。

  其中有一个需求是上报本地环境的所有磁盘的空间和所有固态(ssd)的空间。最开始,考虑到项目只是用了服务器上的一个主目录,而通过df -h正好可以看到那个目录所剩空间,就把这个命令返回的结果进行了解析,获得了主目录对应的磁盘空间。但是,对于ssd的空间则是束手无策。只能去google,通过google发现cat /sys/block/xxx/queue/rotational这个命令查看是否为ssd,返回0则为ssd,1则是机械盘。xxx是要查看的硬盘设备名称,如下图所示,但是我又不知道sda对应着哪块磁盘,挂载在哪个目录,df -h也不显示这个信息。我也不知道是不是还有sdb,sdc。。sdz什么的,也不知道怎么查看sda的空间,所以该方法到我这就死掉了。

然后继续询问google,google告诉我可以通过grep查看所有的盘,就是他:grep ^ /sys/block/*/queue/rotational。这个命令的结果吓我一跳,怎么会有这么多盘啊,我瞬间觉得不靠谱,这不是我想要的。这个也pass了。

那只能接着询问google,google告诉还有一个神奇的命令叫做lsblk。这个命令可以查看磁盘信息,结果如下:

这里我们可以清楚的看到磁盘的大小,机器挂载的位置点。离我们想要的还差最重要的一个步骤,就是区分机械盘和ssd。只能寻求man的帮助。

这里面有一个重要指标,ROTA,rotational device, 可旋转磁盘标志位,可用于区分 HDD 盘和 SSD 盘: 0 - 不可旋转,SSD; 1 - 可旋转,HDD。好了,到这里,我们已经找到了我们想要的,对这个命令进行精简,最后得到我们想要的。lsblk -dnb --output KNAME,SIZE,ROTA

 

到这一步,我们可以清楚的看到,ssd有多少空间,机械有多少空间了。只要对他进行解析即可得到。

 

参考资料: https://blog.csdn.net/sch0120/article/details/77725658

        https://absentm.github.io/2018/02/10/Linux-%E7%A3%81%E7%9B%98%E7%9B%B8%E5%85%B3%E5%91%BD%E4%BB%A4%E6%95%B4%E7%90%86/

        http://blog.51cto.com/songchengyong/139412

                  

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

VMware——在CentOS中安装VMware Tools

VMware——在CentOS中安装VMware Tools 摘要:本文主要记录了如何在VMware中的CentOS系统中,安装VMware Tools。 安装依赖 查看系统相关信息: 1 [root@localhost ~]# uname -r2 3.10.0-32...

osc_5h5udyht
21分钟前
5
0
SpringCache分布式缓存学习

Spring Cache 简介 Cache接口为缓存的组件规范定义,包含缓存的各种操作集合 Cache接口下Spring提供了各种xxcache的实现;如RedisCache,EhCacheCache,ConcurrentMapCache等; 每次调用需要缓...

osc_4dgu16li
23分钟前
7
0
Python全栈之Flask 简介

前言 Python Web框架里比较有名当属Django,Django功能全面,它提供一站式解决方案,集成了MVT(Model-View-Template)和ORM,以及后台管理。但是缺点也很明显,它偏重。就像是一个装潢好的房...

osc_15fvklrg
24分钟前
11
0
WEB攻击手段及防御第2篇-SQL注入

概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行。 简单的SQL注入的例子: 例1:test123456 or 1=1; 加上or 1=1,...

osc_4hct2n4z
25分钟前
7
0
java 反射机制 (获取父类泛型的类型)getGenericSuperclass

https://blog.csdn.net/jidetashuo/article/details/53538231

Java搬砖工程师
25分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部