|
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)+ K P7 X. D7 O; j' t( W! L
6 U: O4 f; Z8 Z8 o' u; g
本文章实用性说明5 D- w7 d! L9 C# v: B
1.检测Linux服务器的磁盘文件大小;
' b! r, g- R6 @3 _# g( k2.重点清理项目;
" q- K- E) n" ^: s' _: G
7 [! z' f3 D$ c8 J5 G2 C实用命令
9 A. U2 C3 O( Y$ r0.查看硬盘剩余空间
~ a* a9 I$ K6 y" S- T" g/ n5 Q J2 X
$ df -h #查看当前硬盘剩余空间并以GB单位表示
0 w8 s X" M; b8 C6 F0 }文件系统 容量 已用 可用 已用% 挂载点3 `' Z) T& Q( d7 G
udev 448M 4.0K 448M 1% /dev
) E: c- g2 J* Btmpfs 99M 1.1M 98M 2% /run- m2 @2 f( n5 @! e2 P! S* }+ m0 `
/dev/sda 25G 13G 9.9G 57% /
. J" m" ` b g h' N0 }) wtmpfs 491M 0 491M 0% /dev/shm f, e2 X) h% G7 F" T
tmpfs 5.0M 0 5.0M 0% /run/lock3 a: N" Q, }; b- T
tmpfs 491M 0 491M 0% /sys/fs/cgroup% t& l5 {, J' L1 X# D
tmpfs 99M 0 99M 0% /run/user/0
" W0 g9 [; O6 o. B) o: X1.查找大文件
& l) j8 t) G/ D+ U" U8 k1 O
9 q* }0 a9 u/ ^3 U4 d: R, {find . -type f -size +100M #查找当前目录100M以上的文件8 ]2 A% m+ U5 ~1 j, H
2.对查找结果按照文件大小做一个排序
& H% v2 {) F" ~0 a& } R6 W4 `, W
find . -type f -size +10M -print0 | xargs -0 du -h | sort -nr$ T9 e5 w8 L/ E* m: n
2.1查看当前目录下某个类型的文件或数量' ^# g- A0 L1 D& z
6 J) M* E5 S& N3 Yfind . -type f -print | grep php
8 T6 I" g; U" C" {2 |" h, I, afind . -type f -print | grep php | wc -l
7 Y: l! G& n' `3.查找当前目录下前20的大目录
: v8 Y7 \5 s" n& E+ J2 D
6 B* x C0 A0 B* L: }2 `/ rdu -hm --max-depth=2 | sort -nr | head -20
- Y9 J$ A/ n1 l5 L, P v* Y7 h*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
6 k( n- F& d7 z* W3 G
6 z+ P& ^+ n9 e# T: l. V1 x4.计算当前目录下所有图片大小,单位为MB;3 k! C* v% z7 p
$ @7 T0 P' I- Vdu -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}') d6 {; V- ~# [' j
重点清理项目& ]$ s+ q+ i- I: ^) z, c6 t6 L
Mysql 日志8 g0 |5 k @( l: \1 @
手动清理日志文件
& L$ }1 K' G+ K7 O: a* ~ Umysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;0 p6 n7 n# d/ f) ~" c4 Y+ M
" e' |, @! `. I! L1.登陆进入mysql,并使用 show binary logs; 查看日志文件。4 C7 ]' \& H# V. [9 \* S3 @0 [
+ m: k- Z$ G# q {$ B5 N# _$ C
root@localhost:/home/# mysql -u root -p
0 R: E( q4 v3 s N8 G3 @Enter password: #输入数据库密码
& f% q( K& |. `3 Q, Z- Dmysql> show binary logs;
a6 A+ h: V& R( l; B7 a5 s9 t' F4 R+------------------+-----------+
1 s4 E# x' E; {0 {/ I$ b) \5 H| Log_name | File_size |$ F3 @# \9 X! v4 q( f4 J3 _
+------------------+-----------+
" i; W# h3 f) Z& ~| mysql-bin.001368 | 3175578 |% h; l% f0 ^6 s4 w0 Z
| mysql-bin.001369 | 177599 |' [$ q8 c& j1 @' C. m/ F- T
+------------------+-----------+
! b& P: B3 A% s2 rows in set (0.00 sec)
8 I |: c6 O2 U( r% e5 u2.查看正在使用的日志文件:show master status;1 x: ^" {/ |: ?0 ]$ G! x, F) f g
, {3 K- n3 x. g/ Zmysql> show master status;
, k+ g0 o0 P; @1 T K' P) o) Z+------------------+----------+--------------+------------------+
) U, y* o+ s4 t% l3 G! x| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |2 W2 h. a w; i) ]
+------------------+----------+--------------+------------------+( X$ t& t9 k) s0 Q: m2 H2 |
| mysql-bin.001369 | 348563 | | |/ _! @* B$ ~7 [4 M! _1 p
+------------------+----------+--------------+------------------+
) H8 e/ T) r# g1 d2 M# c1 q1 row in set (0.00 sec)3 d0 V( h5 W% T. w
如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;
" R# J/ b% D, I3 X) i# ^6 Y" y n8 i2 D/ B% v, _% P& r* q
3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
' U" G0 i2 f4 z
+ a7 N2 C( \6 dmysql> purge binary logs to 'mysql-bin.001369'; A7 M" F1 [' [4 V+ l7 U, g
Query OK, 0 rows affected (0.02 sec)
2 k- F6 b- x3 B' g3 z1 rmysql> show binary logs;! V% E& S) z$ r! L3 V/ ?
+------------------+-----------+5 c1 _, d' o" M* Y
| Log_name | File_size |
% |" _ b; y& j- w5 |+------------------+-----------+' G9 @0 H" ?+ d* @
| mysql-bin.001369 | 949552 |3 w2 j$ u8 N# I2 z% u
+------------------+-----------+( E: e& [. ~$ u+ B% G" h" R" s
1 row in set (0.00 sec). t) p7 z% |/ ~, [% M8 [- `
删除完毕;8 D( S/ m8 c6 G. ~* @7 g
+ `2 d0 V8 h' u定时清理日志文件
+ J4 D2 v' k2 K7 g/ e+ S1.主理人自己已经设置其不产生日志;
/ ~2 U+ y4 W. X, Y7 B2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
* Z+ R+ s/ O f6 D4 q+ W$ i" t
1 B% r! c# O) |; S3 t+ Z: p* Fmysql> exit
* f6 e3 m M' b% @6 w* U. wBye
* [5 F( N( f d) |' u0 e3 d3 mroot@localhost:/home/# vim /etc/my.cnf
, Z* I- o# [8 u# ^0 u编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;: E2 e& A4 n+ L2 n" G
2 Q: r9 h8 H" _7 J4 g) `, b
log-bin=mysql-bin" |7 o9 N8 _5 k9 R: I% |
binlog_format=mixed7 W, i* k+ B9 U% F$ x
server-id = 1
, m6 \6 @3 ^# Z6 ]& R( y/ |. Kexpire_logs_days = 10* ?/ j3 y! A+ X- r: C
改好,保存;重启 MySQL 即可;
) k1 z! k, k# m! O
5 y: c! v9 `0 K0 z. G" eroot@localhost:/home/# lnmp mysql restart
5 H; O; L8 q$ ]或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;
) j; @# \ n% _( e9 D2 N) {' B* Z6 @
##注释 log-bin=mysql-bin* J" l, v+ n% n0 d. z# u# n/ a0 @& C
##注释 binlog_format=mixed% l* z% I7 H: }; g2 c1 |" L/ \
参考1:Mysql 日志爆满,删除日志文件,定时清理日志. K0 d/ v+ U) _0 A
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
$ m% Z" ~8 o! E' o+ s4 `: u
. ~' `$ R D$ i; G3 CNginx 日志
' j$ K& D3 J% L* x手动清理日志文件, r* f) U* a" H [9 Z; G
nginx log;) {8 s2 O% d+ b! E* p
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;
/ O3 l4 t& i5 [: E9 ?6 g
1 }# L9 o+ X8 U" H* v3 S$ S找到相关日志,直接使用命令 ls 查看有多少日志;
) E3 D: S" q' t
, K/ D: B- o( _: `* r7 L+ W' L1 Broot@localhost:/home/wwwlogs# ls: T& I" c3 H+ G$ \9 ~/ m
nginx_error.log
# K+ |' U' p9 f$ WGeoLiteCity.dat limbopro.com.log
3 U- }% N0 O1 C. Zaccess.log 2 K8 l4 T! i5 C% T& B
使用 > + 文件名 清理日志文件;. C# A; I. J( X) P" O. q- b/ J* i
$ t# E0 P. Z* h, l+ Z/ \
root@localhost:/home/wwwlogs# > limbopro.com.log0 k5 U7 C! X t2 u6 [" E
root@localhost:/home/wwwlogs# > access.log
# R0 a% Y; G8 a& g( I定时清理日志文件% W) i; f! Q, ]4 c5 ~6 i
使用 crontab 定时清理日志文件;
8 i$ ]8 Q8 e2 @% K
2 \1 q/ ]& g l9 @! D. L% Droot@localhost:/home/wwwlogs# crontab -e
2 W( ~" t) |4 ]- B! b2 Q$ C* a, w1 c添加一条,设置每日凌晨零点自动清空日志:
& r1 d0 u$ Q5 ?$ S7 u* |$ ~% I6 W& }8 k2 m ^
0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志
) D8 Q% u1 ?4 f# N' q F: C1 O0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志
' l( z8 _) ?# w- I: T* ?$ Z" ]保存,退出,重启 Crontab;- M4 N0 e+ O: {8 i
6 i1 L. A) _+ |% l1 V" x( Hroot@localhost:/home/wwwlogs# service cron restart
6 u& u- e, N3 J/ v0 j) H1 jroot@localhost:/home/wwwlogs# service cron reload
3 @; m( e% g; R$ F0 x*日志文件具体位置,以实际为准;本方法比较粗暴;
7 _1 |, f/ k% ^, u7 k- ` i+ C% J8 y3 z/ E% E
参考1:Linux crontab命令及其用法;
8 s: w0 a2 b; A# d6 h, Y: s, ^3 S/ C& b/ u# K! B: [; v3 N
journalctl 日志清理
3 e5 U+ B1 f. N% S配置文件路径: /etc/systemd/journald.conf;2 b. q% T; P; p5 x8 k
日志存放文件夹:/var/log/journal;
0 z2 @9 z+ M- ]6 c, M' G4 K
# j# q; y6 c8 C1 bsystemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。
3 \8 K8 W; K: U7 ]1 f" p1 k: ^8 l4 ~; C* I! X7 f( ^
清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:% {4 R% |( Q1 r# t
# ?( w0 y( U5 m9 P `
journalctl --vacuum-size=20M7 s$ x' d' e3 ~: z, D
系统日志清理. r5 x/ [1 l" A6 \/ e1 F" }- o
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。
/ F( i3 k( v' |; O) H8 Z* I$ Y! j7 X% ~: m' F1 ^/ S% i
sudo apt-get install ncdu1 @4 B4 c6 t5 b! j9 [- ?- W
sudo ncdu /var/log #然后按i键
% K, F, w3 r) d; ~ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help
" A3 {1 a6 v* s--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
% T* A3 g) [/ }3 R/ _3 |* l* ] 48.0 MiB [##########] /journal ┌───Item info──────────────────────────────────────────────┐
# n; @; H9 z% _2 p& M7 s 16.9 MiB [### ] auth.log │ │( c9 t& l$ H; I
15.0 MiB [### ] redis_6379.log ) F+ c v; `/ E `$ t! T
...
5 E4 P a3 A+ M4 b9 u8 }然后进入 /var/log/" r7 F! K! A w; _/ m% o
9 R0 g& A' b' o: \9 }- W3 p! _cd /var/log/
% @0 U X! G3 b8 M> redis_6379.log7 A Y4 M. t$ }* c! p) \4 U% }
安装包清理
6 B* Z5 |: {: r! j/ e/ l. Z查看安装包缓存大小5 ?0 I" U0 Y4 K w) H& B; H
+ s. l9 ~# X3 m- j3 `8 i' wdu -sh /var/cache/apt/archives, b" s5 F: X. E2 o& N! X3 ?' E( w. f
使用如下命令删除已经安装过的deb包
' B% b4 U/ G$ ?, |- t0 `, D0 E# q; r4 e- I
sudo apt-get clean1 i# ]2 o- W' N
sudo apt-get autoclean* z$ A9 r, E( W: S6 h. M* I L9 K
删除孤儿软件包 已经没有用处的依赖
+ C" O, Y1 A: G% L- I
+ @* e* u0 V. G8 A Zsudo apt-get autoremove
9 M, G) c7 ^4 n5 M0 |1 _; ]清除手动安装的依赖包, g9 c$ m* A& J
1 |) w4 U# X4 @7 T1 h7 @deborphan M- h- t5 k# q8 Y" j/ L3 ~ L
sudo apt-get install deborphan1 t7 O- e8 G c5 B* r! M0 e" k
deborphan | xargs sudo apt-get purge -y2 l) {- ^ x8 O4 ?! O h1 {& W
删除大容量已安装软件包7 K( U- n2 {* p" Z" H8 J/ w1 U# V, q
首先安装debian-goodies; Z8 n' h1 v- @) @; \) p8 l8 t& C3 `
$ U2 @/ P" H( B1 P# N# h
sudo apt-get install debian-goodies" X3 y% M% G1 g7 G
然后输入下面的命令
' [+ B k! r9 } `3 R/ c+ [! V0 {. m. U" g. Y& I* j, H
dpigs -H* @( O( w$ B2 Q, w, S D1 E* I
我的输出结果
! a" z7 ]% s& x
! I+ z) I8 W/ c1 K8 M* D531.3M linux-firmware
% m7 t" J( W+ G7 ?: m315.0M fonts-noto-extra
4 k( Y& ]" l) T282.0M libgl1-mesa-dri1 S$ }+ @( g d* T7 q
214.7M golang-1.13-go
: Q' q) l! F$ e0 w* z8 A212.9M linux-image-4.11.8-041108-generic
. o% f# y7 V5 N! B181.1M linux-modules-extra-5.4.0-60-generic: n. g8 g1 p, `( Z' O/ q/ q. u
181.1M linux-modules-extra-5.4.0-59-generic/ E- V4 C/ Y1 y0 M" H3 h' o
181.1M linux-modules-extra-5.4.0-58-generic
' Q( J) X, U; f) E, t166.2M docker-ce-cli" c9 l3 P* R) ~7 `7 K
123.3M containerd.io# \8 Z$ b$ m# K& i6 j. c6 A( r
上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个
( ?) q. A. X7 ^: ?5 H/ f1 V4 K9 @3 u4 @/ T4 Z
注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
. z9 ~2 k- D9 Ddpigs -H --lines=20
0 V2 L. V. A! f; d2 z, q0 r% a软件包卸载命令
- r) N4 ~1 ?3 k7 W3 }. c& o/ S$ H& ]! z; d: k+ F- s$ h! r5 q
apt-get purge #purge 后面接软件包名称8 Y1 ~7 U& _2 J$ e; r2 @
apt-get --purge remove #配置文件也清理掉 命令后面接软件包名称! `4 |8 R, \8 T8 Z& p& V/ z
示范 以 删除 golang-1.13-go 软件包举例;% |& c4 }1 C' r8 D) N
. R" ?* i+ G( Y9 W. L' ]+ h
root@localhost:~# apt-get purge golang-1.13-go
5 b# k1 @7 \7 {" o正在读取软件包列表... 完成% X3 Y6 ^9 d0 ?( L6 Y; ~- B
正在分析软件包的依赖关系树 ! |. }' d4 ]2 d# @' F- W! S$ J) N
正在读取状态信息... 完成 4 E8 B6 Y5 W) M. C _4 Y2 R
下列软件包是自动安装的并且现在不需要了:
- U& `- j5 E* p6 @! L golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src* M9 |- z+ M3 E
使用'apt autoremove'来卸载它(它们)。+ Y4 D6 J; ]+ P. W: \- d" Z
下列软件包将被【卸载】:
2 n9 ]% Q+ F0 ]/ v9 ^ golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*6 k1 N8 h$ v& x4 q
升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
5 A% M5 i0 q% K" x* z. e' x" z! L2 h解压缩后将会空出 230 MB 的空间。2 \9 a/ b1 w+ T6 Q1 y& L( ]/ J
您希望继续执行吗? [Y/n] Y
( C5 [4 _: ^3 D' ~旧的内核清理! {6 j i+ }4 T' n
查看当前使用的内核# ]2 p, Z) I2 s# i1 C% P x
$ s; U+ B# M% i" G/ z$uname -r( ]8 W9 y6 B Y% D* i* J
5.4.0-60-generic2 a* ]0 y/ `/ x/ U& B, x
$dpigs -H --lines=20
9 F2 f+ a8 F& {8 C0 O2 i74.1M linux-headers-4.14.91-bbrplus
* }7 G7 ^2 P# S* a$ Y! G1 h0 k70.0M linux-modules-5.4.0-60-generic //保留
9 F% `% m6 ` g1 b5 W7 ]) t* r70.0M linux-modules-5.4.0-59-generic //保留
/ p' i! @% z. j% `0 f: K( T...* q5 C: T+ R" `2 R; `
看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);
# X! R: c$ k7 K: C0 \* r2 x
4 {+ A8 Q5 `$ D& R# ?) _6 y* V/ e$apt purge linux-headers-4.14.91-bbrplus! S7 [5 |9 d0 j3 E( E! m
运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):9 N" |+ b) @# K( a
1 ]% Y6 `7 {5 j P+ s' E6 P$update-grub
! r6 L# s+ P' }* }$ C. zSourcing file `/etc/default/grub'
+ o" m" B l3 e2 J5 SSourcing file `/etc/default/grub.d/init-select.cfg'+ O/ E' r) ?# Z8 A. b
正在生成 grub 配置文件 ..., m g; |3 M. |& \7 J, a8 |
找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在
. [9 ~) ]" p" k6 K5 |1 _找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic9 X& o, }) S) o: X& B4 K
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic" ]( Y* o, h5 D8 S9 k& b
找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic: c% {8 o8 o3 y
找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
1 Z) c9 N. K! n5 O( i" s( U找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic
2 C1 u. P l! U: q! d# [1 K. ~完成
* m' |# z. L3 o! d- @" Y...$ t3 ~ }% d: W \7 G. p2 L1 ~
0 A- X* n5 c. I: Y" J相关知识
, j" l R& t# W( k; RLINUX的磁盘管理du命令详解+ W% `$ E9 N7 R
$ ^: y/ }4 r( a* i7 ?
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
: {" D/ I' {/ `
1 R5 H* S7 }, B7 rDU命令用途) T1 h* P% m; T1 o8 Y+ V) u
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
6 d. D V7 h% G) b3 S0 O
1 J. f8 \8 }% G& U找出大文件
! z$ n% p1 {$ M( x磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:
" K& W6 {- E y: V# V- @0 t6 G k% Y. F
du -s /home/* | sort -nr #/home目录检测: T3 [9 e8 [! M
' b9 I0 }2 ?" k& H' V" C4 `
|
免责
帖子地址
打造全网最多免费游戏网站,部分资源失效,私聊站长补
|