暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

运维开发DU命令,助力文件系统清理

Happy IT 2017-09-20
320

作者

老卢一家运维服务公司高级运维经理,长期从事中间件相关运维开发工作,具有多年电信服务开发与管理工作经验。擅长提供业务系统性能解决方案。


     想想大多数系统运维工程师在维护他的业务系统过程中都会发现系统自带的工具或是命令都是无法满足他们的工作需求,反而大降低了工作效率。但系统工程师会想办法写一些批量处理脚本来改善目前工作处境。想办法让自身工作更加简便、更加自动化。谁说运维不懂开发,接下来我们有请老司机来介绍一下他的DU工具。


一、du介绍

指令 du 能以指定的目录下的子目录为单位,显示每个目录内所有档案所占用的磁盘空间大小。但是,du命令只支持unix/liunx,他是不支持windows的,本文就是教大家怎么样实现一个du的命令。

linux的du命令效果


       du命令,可以快速定位文件夹下文件总大小,对于经常要清理目录的人,有大用。


二、Windows下使用du命令

在以往的维护过程中,特别是清理日志时,我自己非常频繁使用这个命令,因为可以快速定位目录、文件的大小,是清理磁盘的利器。

如果我们维护了windows服务器的话,查看目录大小要一个一个的选中目录,然后右键,在查看目录大小的话,效率太低了。所以我们可以考虑自己做个命令工具,简单实现du命令,并对目录大小进行排序,就像这样,输入路径,及统计其下文件总打小: 如:



三、用python实现流程分析

1、给用户输入path: 我们建立一个简单的启动函数start,专门用户给用户输入path def start():


2、根据path,找到目录文件,统计大小,并排序: 我们建立一个list函数,接受path后,找出目录、文件,并将目录名称、文件名称、大小数据放入字典,最后对字典排序,

def list(path):


3、统计文件大小:

def getSize(file):



接下来介绍一下使用python开发du用到的功能代码


1、Start-处理用户的输入代码:

#2、定义用户输入的函数,用户输入n/N,就停止这个程序,输入路径就调用list函数,统计目录及文件

def start():

    isNext=1

    while isNext==1:

        path = raw_input("enter path (d:\\\),stop enter n/N: ")

        if path=='n' or path=='N':

            isNext=0

        else:

            list(path)

#1、开始执行这个文件时,先从start作为main函数开始执行

if __name__=='__main__':

    start()

2、List-罗列pATH下的目录及文件代码:

#3、罗列path下有哪些目录及文件

def list(path):

   dirs={}#定义个存放目录的字典

   #罗列出path下所有的一级目录及文件

   for dp in os.listdir(path):

      #3.1、判断dp是否是目录

      if os.path.isdir(os.path.join(path,dp)):

         dir_size=0#临时存储目录大小

         #os.walk遍历目录,取得所有文件

         for root,dir,files in os.walk(os.path.join(path,dp)):

            for name in files:#每个目录下的文件清单

               try:

                        #累加文件夹下每个文件大小

                  dir_size +=getsize(os.path.join(root,name))

               except Exception, e:

                  pass

         dirs[dp]=dir_size#添加目录及大小


      #3.2、文件处理

      elif os.path.isfile(os.path.join(path,dp)):

         try:

                #计算文件大小,并加入到dir字典中

            dirs[dp]=getsize(os.path.join(path,dp))

         except Exception, e:

            pass

   #对目录或文件大小排序

   ds=sorted(dirs.iteritems(),key=lambda d:d[1],reverse=True)

   #输出目录大小

   for x in ds:

      d = x[0]

      size=x[1]

      size2=''

      if size>=1073741824:

         size2=str(size/1024/1024/1024)+' G'

      elif size>=106496 and size<=1073741824:

         size2=str(size/1024/1024)+' M'

      elif size<106496:

         size2=str(size/1024/1024)+' Byte'

      print '%-50s %50s'%(d,size2)

3、List-用到的os函数

使用下面函数前先导入os模块 Import os 1、List-罗列pATH下的目录及文件

os.listdir(path)

2、判断是否是目录 os.path.isdir()

3、判断是否文件 os.path.isfile()

4、遍历目录下所有文件 os.walk(path)

5、获取文件大小 os.path.getsize(file)


四、运行du.py验证功能

1、windows下: 安装好python软件后就可以遍历统计出各个目录的的存储空间。 执行 python.exe du.py

2、linux下直接执行du.py就可以遍历出各文件系统空间,

 

关于du原代码请关注本人公众号获取!


↓↓↓ 点击"阅读原文" 【查看更多信息】  


文章转载自Happy IT,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论