Linux清理命令大全及使用技巧
一 快速定位占用
df -hdu -ah . | sort -rh | head -10find /path -type f -size +100M -exec ls -lh {} \;find /var/log -type f -name "*.log" -mtime +7 -deletetmpwatch 7d /tmp 或 tmpreaper 7d /tmpsudo journalctl --vacuum-time=7d 或 --vacuum-size=100Msudo apt-get clean、sudo apt-get autoclean、sudo apt-get autoremove --purgesudo yum clean all、sudo yum autoremovesudo dnf clean all、sudo dnf autoremovedpkg --list | grep linux-image 或 rpm -q kernelsudo apt-get remove linux-image-<version> linux-headers-<version>二 按场景的清理命令速查表
| 场景 | 命令示例 | 说明 |
|---|---|---|
| 临时文件 | sudo tmpwatch 7d /tmp 或 tmpreaper 7d /tmp |
自动清理超过指定时间的临时文件,避免误删正在使用的会话文件 |
| systemd 日志 | sudo journalctl --vacuum-time=7d |
保留最近7天日志,也可按大小 --vacuum-size=100M |
| 包管理器缓存 | APT:sudo apt-get clean、sudo apt-get autoclean、sudo apt-get autoremove --purge;YUM:sudo yum clean all、sudo yum autoremove;DNF:sudo dnf clean all、sudo dnf autoremove |
清理下载缓存与不再需要的依赖,释放空间 |
| 旧内核 | `dpkg --list | grep linux-image;sudo apt-get remove linux-image- |
| 大文件定位 | `du -ah . | sort -rh |
| 浏览器缓存 | Chrome:rm -rf ~/.config/google-chrome/Default/Cache/*;Firefox:rm -rf ~/.mozilla/firefox/*.default-release/cache2/* |
关闭浏览器后清理,避免占用与隐私泄露 |
| 系统缓存 | `sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches` |
| 日志轮转 | sudo logrotate -f /etc/logrotate.conf |
强制按配置轮转与压缩日志,配合大小/时间策略使用 |
三 自动化与图形化工具
0 2 * * * /path/to/cleanup.sh四 安全与排错要点
ls/du 确认目标,避免 rm -rf 误删journalctl --vacuum-* 或 logrotate,避免直接粗暴删除 /var/log/*tmpwatch/tmpreaper,它们会跳过正在使用的文件drop_caches)仅作临时手段,重启后效果消失,生产环境谨慎使用/var/log、/tmp、/home),避免误删数据库/容器/镜像数据五 一键清理脚本示例
#!/usr/bin/env bash
set -Eeuo pipefail
# 0) 配置
KEEP_LOGS_DAYS=7
KEEP_LOGS_SIZE="100M"
TMP_AGE="7d"
BIG_FILE_MIN=500 # MB
DRY_RUN=false
# 1) 工具检测
for cmd in du find journalctl tmpwatch logrotate; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "缺少命令: $cmd,请先安装。"
exit 1
fi
done
# 2) 日志
echo "[1/6] 清理 systemd 日志..."
if $DRY_RUN; then
echo " journalctl --vacuum-time=${KEEP_LOGS_DAYS} --vacuum-size=${KEEP_LOGS_SIZE}"
else
sudo journalctl --vacuum-time="${KEEP_LOGS_DAYS}" --vacuum-size="${KEEP_LOGS_SIZE}"
fi
# 3) 临时文件
echo "[2/6] 清理临时文件 (${TMP_AGE})..."
if $DRY_RUN; then
echo " tmpwatch ${TMP_AGE} /tmp"
else
sudo tmpwatch "${TMP_AGE}" /tmp
fi
# 4) 包管理器缓存与无用包
echo "[3/6] 清理包管理器缓存与无用包..."
if command -v apt-get >/dev/null 2>&1; then
$DRY_RUN && echo " apt-get clean && apt-get autoclean && apt-get autoremove --purge" \
|| { sudo apt-get clean && sudo apt-get autoclean && sudo apt-get autoremove --purge; }
elif command -v dnf >/dev/null 2>&1; then
$DRY_RUN && echo " dnf clean all && dnf autoremove" \
|| { sudo dnf clean all && sudo dnf autoremove; }
elif command -v yum >/dev/null 2>&1; then
$DRY_RUN && echo " yum clean all && yum autoremove" \
|| { sudo yum clean all && sudo yum autoremove; }
fi
# 5) 大文件清单
echo "[4/6] 大于 ${BIG_FILE_MIN}MB 的文件清单(前20):"
du -ah / 2>/dev/null | sort -rh | awk -v min="$BIG_FILE_MIN" '$1 ~ /M$/ && int($1) > min {print; count++; if (count>=20) exit}' || true
# 6) 日志轮转
echo "[5/6] 强制执行日志轮转..."
$DRY_RUN && echo " logrotate -f /etc/logrotate.conf" || sudo logrotate -f /etc/logrotate.conf
# 7) 可选:清理页面缓存(仅临时,谨慎)
echo "[6/6] 如需清理页面缓存,请在确认后执行:"
echo " sync && echo 3 | sudo tee /proc/sys/vm/drop_caches"
cleanup.sh,赋权:chmod +x cleanup.sh./cleanup.sh(只打印不删除)DRY_RUN=false 后运行0 2 * * * /path/to/cleanup.sh >> /var/log/cleanup.log 2>&1