灵感时刻-2026-01-20 12:06:40
这世上大部分的东西都是借给你的,人生很多时候,大部分东西属于你,其实又不属于你。
这世上大部分的东西都是借给你的,人生很多时候,大部分东西属于你,其实又不属于你。
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 49G 500M 100% /
一般系统都有多个挂载点,首先找出哪个挂载点爆满。
# 查看
du -h --max-depth=1 / | sort -hr | head -n 10
参数说明:
du:查看文件夹体积--max-depth=1:只看一级目录sort:从大到小排序head:只显示前10个找到哪个目录占用较多,再深入查看:
du -h --max-depth=3 /data | sort -hr | head -n 10
通常 是日志文件占据较大空间,能删除的也只有日志,或者备份,如果实在删不了就只能扩容了。
# 从上两步定位出来,再根据大小进一步确认
find /data -type f -size +1G -exec ls -lh {} \; 2>/dev/null | sort -k5 -hr | head -n 20
从上述命令可以看出有个30G的tomcat日志文件,这样就可以清理了,这种大文件建议进行切割,然后定时清理。
lsof | grep deleted
看到某个被删的日志文件还被占用?
解决办法:重启对应服务即可释放磁盘。
清理项
命令
清空日志文件
> /var/log/xxx.log
–》这个命令会直接清空该文件的所有内容
删除7天前日志
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
清理 Docker
docker system prune -af
清理 APT 缓存
apt clean
清理 YUM 缓存
yum clean all
【温馨提示】在删除前一定要确保不影响系统运行,删除重要文件前可以做备份或打快照。
用
df找哪里满了 → 用du/find找大目录/大文件 → 清理/重启释放空间。如果经常出现,就加一个定时任务定期处理。
这个世界就是没办法可预期或预计,所以就每一步都按照自己期望的事情去做就好了。但多数的情况下每一步都不在计划里,所以这才充满了生活的不确定性和奇妙的。如果说都能按计划去做的话,就没有那么有乐趣的事情,希望大家都能得到自己的自由和期望。
书山有路勤为径,学海无涯苦作舟。
防人之心不可无,害人之心不可有。
城堡住着王子和公主![]()
浪奔,浪流。![]()
时常会拿起手机之后,又忘记了要做什么事情。
活下去,活得无风无浪,已经是很“幸运”的一回事了。![]()
秋天一旦下雨,天气就必会骤凉。![]()
又到了一年一度的速冻日子了,最怕就是寒冷,一到六点天就开始黑了。![]()
清晨时下了一场雨,此刻半边艳阳高照,半边细雨蒙蒙。![]()
生活的压力,就像是一块巨大的石头,压在胸前连喘口气也特别的困难。
我睡了又醒,醒了又睡,睡眠像一堆撕碎了的纸片。![]()
那是我第一次遇到那座山,自然听不得好言相劝,世间多的是空手而归还意兴阑珊,我失去的每一分月亮,都是我的心甘情愿。自此经年,山是山,我是我。
总有一天,我们会知道人心都是一样的。悲伤随处可见,只是在不同的地方,表现形式不同罢了。![]()
年轻人就这样被召唤着、驱使着,来到了世界的虚无当中。![]()
![]()
![]()
![]()
![]()
![]()
百川东到海,
何时复西归?
少壮不努力,
老大徒伤悲。![]()
核心的工具其实还是 grep 命令,下面我将分场景给你讲讲我的实战经验,保证你能直接套用!
Java 异常堆栈通常都是多行的,仅仅用 grep "NullPointerException" 只能看到最上面那一行,问题根源在哪你压根找不到。
这时候使用 grep 的 -A (After) 参数来显示匹配行之后的 N 行。
# 查找 NullPointerException,并显示后面 50 行
grep -A 50 "java.lang.NullPointerException" a.log
如果你发现异常太多,屏幕一闪而过,也可以用 less 加上分页查看:
grep -A 50 "java.lang.NullPointerException" a.log | less
在 less 视图中,你可以:
使用 箭头↑↓ 或 Page Up/Down 键来上下滚动
输入 G 直接翻到末尾,方便快速查看最新的日志
输入 /Exception 继续搜索
按 q 键退出
这样你就能 第一时间拿到完整异常上下文信息,告别反复 vi + / 的低效操作!
如果你的应用正在运行,并且你怀疑它会随时抛出异常,你可以实时监控日志文件的增长。
使用 tail -f 结合 grep:
# 实时监控 a.log 文件的新增内容,并只显示包含 "java.lang.NullPointerException" 的行及其后50行
tail -f a.log | grep -A 50 "java.lang.NullPointerException"
只要异常一出现,它就会自动打出来,堆栈信息也一并送到你面前!
想停下?Ctrl + C
想更准确?加 -i 忽略大小写,防止大小写拼错找不到
服务器上的日志一般都会按天或按大小分割并压缩,变成 .log.2025-07-02.gz 这种格式,查找这些文件的异常信息怎么办?
.log 文件:# 在当前目录下查找所有以 .log 结尾的文件,-H 参数可以顺便打印出文件名
grep -H -A 50 "java.lang.NullPointerException" *.log
其中 -H 会帮你打印出 是哪个文件 中出现的问题,防止你找完还不知道是哪天的事。
.gz 文件(压缩日志):zgrep -H -A 50 "java.lang.NullPointerException" *.gz
zgrep 是专门处理 .gz 的 grep,它的功能和 grep 完全一样,无需手动解压,直接开整!
有时候你需要知道某个异常到底出现了多少次,是偶发还是成灾,使用 grep -c(count):
grep -c "java.lang.NullPointerException" a.log
如果你要统计所有日志里的数量:
grep -c "java.lang.NullPointerException" *.log
| 参数 | 作用 |
|---|---|
-B N |
匹配行之前的 N 行(Before) |
-A N |
匹配行之后的 N 行(After) |
-C N |
匹配行上下共 N 行(Context) |
-i |
忽略大小写 |
-H |
显示匹配的文件名 |
-r |
递归搜索目录下所有文件 |
比如:
grep -C 25 "java.lang.NullPointerException" a.log
这个命令就能让你一眼看到异常前后的上下文,帮助定位代码逻辑是不是哪里先出问题了。
世界上的很多事没有太大意义,真理与爱除外。