没有GUI,纯命令行检测磁盘大文件大小及从大到小排序;很实用;

I. 主理人序

再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)

II. 本文章实用性说明

1.检测Linux服务器的磁盘文件大小;
2.重点清理项目;

III. 实用命令

0.查看硬盘剩余空间

$ df -h #查看当前硬盘剩余空间并以GB单位表示
文件系统        容量  已用  可用 已用% 挂载点
udev            448M  4.0K  448M    1% /dev
tmpfs            99M  1.1M   98M    2% /run
/dev/sda         25G   13G  9.9G   57% /
tmpfs           491M     0  491M    0% /dev/shm
tmpfs           5.0M     0  5.0M    0% /run/lock
tmpfs           491M     0  491M    0% /sys/fs/cgroup
tmpfs            99M     0   99M    0% /run/user/0

1.查找大文件

find . -type f -size +100M #查找当前目录100M以上的文件

2.对查找结果按照文件大小做一个排序

find . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr

2.1查看当前目录下某个类型的文件或数量

find . -type f -print | grep php
find . -type f -print | grep php | wc -l

3.查找当前目录下前20的大目录

du -hm --max-depth=2 | sort -nr | head -20

*这个命令我常用,先列出20来个大占用的文件夹,一一击破;

4.计算当前目录下所有图片大小,单位为MB;

du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'

IV. 重点清理项目

Mysql 日志

手动清理日志文件

mysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;

1.登陆进入mysql,并使用 show binary logs; 查看日志文件。

root@localhost:/home/# mysql -u root -p
Enter password: #输入数据库密码
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.001368 |   3175578 |
| mysql-bin.001369 |    177599 |
+------------------+-----------+
2 rows in set (0.00 sec)

2.查看正在使用的日志文件:show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.001369 |   348563 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;

3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';

mysql> purge binary logs to 'mysql-bin.001369';
Query OK, 0 rows affected (0.02 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.001369 |    949552 |
+------------------+-----------+
1 row in set (0.00 sec)

删除完毕;

定时清理日志文件

1.主理人自己已经设置其不产生日志;
2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);

mysql> exit
Bye
root@localhost:/home/# vim /etc/my.cnf

编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;

log-bin=mysql-bin
binlog_format=mixed
server-id       = 1
expire_logs_days = 10

改好,保存;重启 MySQL 即可;

root@localhost:/home/# lnmp mysql restart

或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;

##注释 log-bin=mysql-bin
##注释 binlog_format=mixed

参考1:Mysql 日志爆满,删除日志文件,定时清理日志
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

Nginx 日志

手动清理日志文件

nginx log;
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;

找到相关日志,直接使用命令 ls 查看有多少日志;

root@localhost:/home/wwwlogs# ls
nginx_error.log
GeoLiteCity.dat         limbopro.com.log 
access.log              

使用 > + 文件名 清理日志文件;

root@localhost:/home/wwwlogs# > limbopro.com.log
root@localhost:/home/wwwlogs# > access.log 

定时清理日志文件

使用 crontab 定时清理日志文件;

root@localhost:/home/wwwlogs# crontab -e

添加一条,设置每日凌晨零点自动清空日志:

0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志

保存,退出,重启 Crontab;

root@localhost:/home/wwwlogs# service cron restart
root@localhost:/home/wwwlogs# service cron reload

*日志文件具体位置,以实际为准;本方法比较粗暴;

参考1:Linux crontab命令及其用法

V. journalctl 日志清理

配置文件路径/etc/systemd/journald.conf
日志存放文件夹/var/log/journal

systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。

清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:

journalctl --vacuum-size=20M

VI. 系统日志清理

系统日志位于 /var/log日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。

sudo apt-get install ncdu
sudo ncdu /var/log #然后按i键
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     
--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            
   16.9 MiB [###       ]  auth.log                         │                                                          │
   15.0 MiB [###       ]  redis_6379.log   
...

然后进入 /var/log/

cd /var/log/
> redis_6379.log

VII. 安装包清理

查看安装包缓存大小

du -sh /var/cache/apt/archives

使用如下命令删除已经安装过的deb包

sudo apt-get clean
sudo apt-get autoclean

删除孤儿软件包 已经没有用处的依赖

sudo apt-get autoremove

清除手动安装的依赖包

deborphan
sudo apt-get install deborphan
deborphan | xargs sudo apt-get purge -y

VIII. 删除大容量已安装软件包

首先安装debian-goodies

sudo apt-get install debian-goodies

然后输入下面的命令

dpigs -H

我的输出结果

531.3M linux-firmware
315.0M fonts-noto-extra
282.0M libgl1-mesa-dri
214.7M golang-1.13-go
212.9M linux-image-4.11.8-041108-generic
181.1M linux-modules-extra-5.4.0-60-generic
181.1M linux-modules-extra-5.4.0-59-generic
181.1M linux-modules-extra-5.4.0-58-generic
166.2M docker-ce-cli
123.3M containerd.io

上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个

dpigs -H --lines=20

软件包卸载命令

apt-get purge #purge 后面接软件包名称
apt-get --purge remove #配置文件也清理掉 命令后面接软件包名称

示范 以 删除 golang-1.13-go 软件包举例;

root@localhost:~# apt-get purge golang-1.13-go
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
下列软件包是自动安装的并且现在不需要了:
  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src
使用'apt autoremove'来卸载它(它们)。
下列软件包将被【卸载】:
  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
解压缩后将会空出 230 MB 的空间。
您希望继续执行吗? [Y/n] Y

IX. 相关知识

LINUX的磁盘管理du命令详解

du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。

DU命令用途
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。

找出大文件
磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:

du -s /home/* | sort -nr #/home目录检测

via linux实用的磁盘大文件及大文件夹查找命令

X. 附注

Debian/Ubuntu清理硬盘空间的8个技巧

最后修改:2023 年 09 月 25 日 11 : 13 AM