似乎困扰几乎所有文件系统(Unix及其他文件系统)的问题之一就是文件不断日积月累。几乎没有人抽出时间来清理不再使用的文件,结果文件系统变得凌乱不堪,到处是价值不大或值得怀疑的文件,以至于确保文件顺畅运行、得到合理备份以及易于管理就成了一个永恒的挑战。
我见过有助于鼓励所有那些残留数据的用户应对这个问题的一种方法就是,对文件集合创建一份摘要报告或“概况”(profile),报告诸多信息,比如文件数量,那些文件中最旧、***、***的文件;以及统计谁拥有那些文件。要是有人认识到50个万文件组成的集合含有的文件其年限没一个在五年以下,他们很可能放手大胆地删除这些文件,或者至少将它们加以归档和压缩。基本问题是,庞大的文件集合让人不知所措,大多数人害怕可能不小心删除了重要的文件。要是有办法描述文件集合的特点,就有助于表明内容的性质,并且鼓励那些爱好收集文件的人清理一下。
当我在Unix上准备制作一份文件系统摘要报告时,几个Unix命令轻松提供了一些非常有用的统计数字。想统计目录中的文件数量,你可以使用查找命令,就像这样。
- $ find . -type f | wc -l
- 187534
找到最旧文件和***文件要复杂一点,不过仍相当容易。在下列命令中,我们再次使用查找命令来查找文件,显示了采用年-月-日格式的数据,这种格式可以按文件年限来进行排序,然后显示该列表中最靠前、因而最旧的文件。
在第二个命令中,我们如出一辙,不过输出***一行、因而是***的文件。
- $ find -type f -printf '%T+ %p\n' | sort | head -n 1
- 2006-02-03+02:40:33 ./skel/.xemacs/init.el
- $ find -type f -printf '%T+ %p\n' | sort | tail -n 1
- 2015-07-19+14:20:16 ./.bash_history
%T(文件日期和时间)和%p(文件名称和路径)参数以及printf命令让这项操作得以顺利执行。
如果我们看一下主目录,无疑会发现历史文件是***文件,那不可能是非常值得关注的信息片段。你可以忽略那些文件,只要对它们进行“un-grepping”操作,你也可以忽略以点开始的所有文件,如下所示。
- $ find -type f -printf '%T+ %p\n' | grep -v "\./\." | sort | tail -n 1
- 2015-07-19+13:02:12 ./isPrime
找到***的文件需要使用%s(大小)参数,我们加入了文件名称(%f),因为那是我们希望报告显示的内容。
- $ find -type f -printf '%s %f \n' | sort -n | uniq | tail -1
- 20183040 project.org.tar
想总结文件所有权,就使用%u(用户)
- $ find -type f -printf '%u \n' | grep -v "\./\." | sort | uniq -c
- 180034 shs
- 7500 jdoe
如果你的文件系统还记录上一次访问日期,那么显示文件在一段时期(比如说两年多)内没有访问可能非常有用。这让你的检查人员可以深入了解那些文件的价值,这点很重要。上一次访问参数(%a)可以这样使用:
- $ find -type f -printf '%a+ %p\n' | sort | head -n 1
- Fri Dec 15 03:00:30 2006+ ./statreport
当然了,如果最近访问的那个文件又是很久以前的文件,这可能会引起还要大的反应。
- $ find -type f -printf '%a+ %p\n' | sort | tail -n 1
- Wed Nov 26 03:00:27 2007+ ./my-notes
通过创建一个摘要报告,显示文件日期范围、***文件、文件用户以及最早和***访问时间,从而大致了解文件系统或庞大目录里面的内容,这有助于表明文件集合有多新、多重要,还能帮助文件用户确定是不是该清理一下了。
原文标题:Handy commands for profiling your Unix file systems