我记得有那么几年,刚开始折腾服务器那会儿,对Linux这玩意儿真是又爱又恨。尤其是硬盘空间这事儿,老是给我搞突然袭击。有时候就纳闷,我明明也没装多少东西,怎么空间就快满了?
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
第一次摸索:df -h 初探
那会儿,服务器时不时就给我发邮件,说根目录空间不足,要我赶紧处理。我当时真是抓瞎,也不知道咋看。后来在网上瞎捣鼓,才找到了第一个救星:df -h。这命令一敲下去,我的天,整个服务器的硬盘使用情况就都跑出来了。
它给我列了一堆东西,当时我一看,还挺懵的。不过后来琢磨琢磨,也就懂了。主要就是看这几项:
- 文件系统:这个就是你的硬盘分区名字,比如`/dev/vda1`啥的。
- 容量:这个分区总共有多大。
- 已用:已经用了多少空间。
- 可用:还剩下多少空间能用。
- 使用%:这个最直观了,百分比一出来,就知道快不快满了。当时我一看到这个百分比飙到90%以上,心就提到嗓子眼了。
- 挂载点:这块硬盘挂在系统哪个目录上,比如`/`就是根目录,`/var`是放日志的,`/home`是用户家目录。
我一看我的根目录,那个使用率已经九十好几了,心里咯噔一下。这下是知道总空间快没了,可问题是,到底哪些文件、哪些目录占了这么多地方?光看个总数没用,得找到元凶才行!
深挖元凶:du 命令登场
光知道总数解决不了问题。我就又开始找,怎么能看具体哪个目录吃得最多。就找到了第二个利器:du命令。
这玩意儿比df就细致多了,能一层一层地往下扒拉。我一开始只会敲个du -sh。这命令,就显示当前目录的总大小。比如我在`/`根目录下敲,它就告诉我整个根目录多大,用了多少空间。但当时我就想,我得知道是根目录下的哪个子目录最肥!
于是我就开始试,发现du -h --max-depth=1 /这个命令特别好使。敲下去,它就能把根目录下面第一层的所有目录和文件,它们各自占了多少空间,都清清楚楚地列出来。那个-h参数,是把大小显示成人类能看懂的单位,比如M或者G,不然都是字节,看得我头大。
我记得有一次,就是靠这个命令,我发现/var/log这个目录,竟然悄咪咪地吃掉了我好几十G的空间!一进去看,全是各种日志文件,一天天涨,一点点堆,时间长了,可不就把硬盘给撑爆了吗?
配合排序,一击命中
光看到目录大小还不够,有时候列出来的太多了,眼睛都看花了,也分不清哪个是最大的。那时候我就想,要是能按照大小排个序多
琢磨了一阵子,发现Linux这套命令,可以把结果“管道”给另一个命令。我就尝试把du的结果,用管道符“”送给sort命令去排序。具体这么敲:du -h --max-depth=1 /var sort -rh。
du -h --max-depth=1 /var:这个我就不说了,就是显示/var目录下第一层子目录的大小。- :这个就是管道符,把前面的结果扔给后面的命令处理。
sort -rh:这个sort命令就是排序用的。-r是反向排序,也就是从大到小排。-h就是按人类能看懂的大小来排序(比如10G比2G大)。
这一招简直是杀手锏!命令一敲下去,/var目录下面哪些目录最占空间,从大到小,一目了然!当时我一眼就看到,/var/log排在最前面,后面跟着一大串GB的数字,这下子,真正的大胖子被我揪出来了。
找到大文件:find 命令的功劳
有时候不是某个目录特别大,而是某个文件它自己,个头就惊人。比如说,我那服务器有一次,一个程序出了问题,狂写错误日志,单个日志文件就冲到好几十G。这时候光用du看目录还不行,得把那个超大文件给找出来。
这时候就得请出find命令了。这命令功能是真多,我当时只用它来找大文件。我记得我是这么用的:find / -type f -size +1G -print0 xargs -0 du -h sort -rh head -n 10。
这个命令有点长,我当时也是东拼西凑来的:
find / -type f -size +1G:这是从根目录开始找(),找文件(-type f),而且是大小超过1G的文件(-size +1G)。-print0 xargs -0 du -h:这一坨主要是为了安全处理文件名,然后把找到的文件,都用du -h看一遍大小。sort -rh:老样子,按照大小从大到小排序。head -n 10:取前10个最大的文件,省得一下子出来太多了。
这命令一敲,果然,那个狂写的错误日志文件,孤零零地排在最上面,一眼就被我看到了。我赶紧进目录把它删了,或者清空掉,瞬间,硬盘空间就腾出来了,警报邮件也消停了。
总结折腾的心得
这么一通折腾下来,我对Linux的硬盘使用情况,也算是摸透了。从最开始的df -h看个总貌,到du -h --max-depth=1挖目录,再到配合sort -rh来个排序,用find命令揪出大文件。这一套组合拳下来,基本就没有搞不定的硬盘空间问题了。
现在再遇到服务器硬盘报警,我心里就有谱了,不会再像以前那样抓瞎。这些命令,看着简单,但真要用起来,解决实际问题那真是杠杠的。也算是自己一点点摸索,一点点实践出来的经验。希望对大家也有用。