CentOS - 自动清理磁盘空间脚本(附:清理Docker垃圾文件)
作者:hangge | 2023-08-17 09:10
Linux 服务器运行一段时间后,磁盘空间可能会被占满,导致系统性能下降。为了解决这个问题,我们可以编写一个自动清理磁盘空间的脚本。下面我以 CentOS 系统为例进行演示。
1,编写脚本
(1)首先我们编写一个 shell 脚本文件(cleanup.sh),自动执行删除一些系统和应用程序的文件的操作,包括旧的内核、Yum 软件包缓存、临时文件、历史日志文件等。具体内容如下:
#!/bin/bash # 记录清理前的可用空间 before=$(df -h / | awk '/\// {print $4}') # 清理yum缓存 yum clean all # 清理旧的日志文件 find /var/log -type f -name "*.log" -exec truncate --size 0 {} \; # 清理回收站 echo "Emptying trash..." rm -rf /root/.local/share/Trash/*/** &> /dev/null # 清理历史命令记录 history -c history -w # 清理临时文件 rm -rf /tmp/* rm -rf /var/tmp/* # 清理旧的系统备份 rm -rf /var/backups/* # 清理不再使用的软件包和依赖项 yum autoremove -y # 清理旧的内核 package-cleanup --oldkernels --count=1 -y # 清理缓存文件 find /var/cache -type f -exec rm -rf {} \; # 清理用户缓存 for user in $(ls /home); do rm -rf /home/$user/.cache/* done # 清理邮件日志 find /var/mail -type f -exec truncate --size 0 {} \; # 清理core文件 find / -name "core" -delete # 清理旧的会话文件 find /var/lib/php/session -type f -delete # 清理系统邮件队列 service postfix stop rm -rf /var/spool/postfix/* service postfix start # 清理久未使用的软件包缓存 dnf clean packages -y # 清理系统崩溃日志 rm -rf /var/crash/* # 清理journalctl日志 journalctl --rotate journalctl --vacuum-time=1d # 清理系统缓存 sync && echo 3 > /proc/sys/vm/drop_caches # 清理历史命令记录 # history -c # history -w # 清理 Docker 容器日志文件 docker rm -v $(docker ps -a -q) rm -rf /var/lib/docker/containers/*/*-json.log # 清理 Docker 镜像缓存 docker image prune -a --force # 清理 Docker 无用的数据卷 docker volume prune --force # 清理旧的 Docker 镜像 docker rmi $(docker images -f "dangling=true" -q) # 计算清理了多少大小的文件 cleared=$(df -h / | awk '/\// {print $4}' | awk -v before="$before" '{print before - $1}') # 记录清理后的可用空间 after=$(df -h / | awk '/\// {print $4}') echo "清理前可用空间: $before" echo "清理后可用空间: $after" echo "磁盘清理完成。"
(2)如果系统还安装了 Dokcer 环境,我们还可以增加一些删除 Docker 容器日志、无用的数据卷和镜像等操作,具体内容如下:
#!/bin/bash # 记录清理前的可用空间 before=$(df -h / | awk '/\// {print $4}') # 清理yum缓存 yum clean all # 清理旧的日志文件 find /var/log -type f -name "*.log" -exec truncate --size 0 {} \; # 清理回收站 echo "Emptying trash..." rm -rf /root/.local/share/Trash/*/** &> /dev/null # 清理历史命令记录 history -c history -w # 清理临时文件 rm -rf /tmp/* rm -rf /var/tmp/* # 清理旧的系统备份 rm -rf /var/backups/* # 清理不再使用的软件包和依赖项 yum autoremove -y # 清理旧的内核 package-cleanup --oldkernels --count=1 -y # 清理缓存文件 find /var/cache -type f -exec rm -rf {} \; # 清理用户缓存 for user in $(ls /home); do rm -rf /home/$user/.cache/* done # 清理邮件日志 find /var/mail -type f -exec truncate --size 0 {} \; # 清理core文件 find / -name "core" -delete # 清理旧的会话文件 find /var/lib/php/session -type f -delete # 清理系统邮件队列 service postfix stop rm -rf /var/spool/postfix/* service postfix start # 清理久未使用的软件包缓存 dnf clean packages -y # 清理系统崩溃日志 rm -rf /var/crash/* # 清理journalctl日志 journalctl --rotate journalctl --vacuum-time=1d # 清理系统缓存 sync && echo 3 > /proc/sys/vm/drop_caches # 清理历史命令记录 # history -c # history -w # 清理 Docker 容器日志文件 docker rm -v $(docker ps -a -q) rm -rf /var/lib/docker/containers/*/*-json.log # 清理 Docker 镜像缓存 docker image prune -a --force # 清理 Docker 无用的数据卷 docker volume prune --force # 清理旧的 Docker 镜像 docker rmi $(docker images -f "dangling=true" -q) # 计算清理了多少大小的文件 cleared=$(df -h / | awk '/\// {print $4}' | awk -v before="$before" '{print before - $1}') # 记录清理后的可用空间 after=$(df -h / | awk '/\// {print $4}') echo "清理前可用空间: $before" echo "清理后可用空间: $after" echo "磁盘清理完成。"
2,运行脚本
(1)当我们需要清理磁盘时,执行这个脚本即可:./cleanup.sh
(2)清理完毕后会显示出最终结果,包括清理前的可用空间以及清理后的可用空间:
附:使用 du 命令查找大文件或目录
(1)此外我们也可以使用 du 来查找磁盘空间占用较大的文件或目录,然后决定是否删除或移动它们。比如下面命令将列出根目录下所有文件和目录,并按照磁盘使用量从高到低进行排序。
du -sh /* | sort -rh
(2)运行结果如下:
全部评论(0)