|
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)
' a v) e$ J* r+ {" f4 ~! V2 a8 \; U; V, p: d* Y- c
本文章实用性说明+ p+ \/ X1 G5 W6 G& i" j& Y
1.检测Linux服务器的磁盘文件大小;/ [; D. e4 {; d& v) p& w# m
2.重点清理项目;8 c9 {" B- y5 o" _
8 e+ A1 }+ j8 q* m9 t
实用命令
* o, A5 J) E4 ^$ v; C0.查看硬盘剩余空间
5 i( @: D) m* r5 B$ q9 o, W! c' S) P, p, W0 S5 O
$ df -h #查看当前硬盘剩余空间并以GB单位表示
% p. [% v7 W; c/ N$ D3 |文件系统 容量 已用 可用 已用% 挂载点
$ ]9 P9 D8 P: o5 B- p1 u. Kudev 448M 4.0K 448M 1% /dev
- I6 F% p: l$ Z! @; Otmpfs 99M 1.1M 98M 2% /run. U3 `, p2 h L& g, g
/dev/sda 25G 13G 9.9G 57% /' \1 U! u( K/ ]) V3 T
tmpfs 491M 0 491M 0% /dev/shm H' M! a4 j, @5 s' i6 [
tmpfs 5.0M 0 5.0M 0% /run/lock5 J2 J3 L% l: r$ `5 u1 E4 M; f* Y
tmpfs 491M 0 491M 0% /sys/fs/cgroup3 H) F1 X8 a4 g( m. W$ c$ T
tmpfs 99M 0 99M 0% /run/user/0
6 Z( h4 E! K( c& l0 j) [1.查找大文件
& R' L# J1 ^- A( v
" r; g$ `# |0 C. Rfind . -type f -size +100M #查找当前目录100M以上的文件
/ L8 @, u; b4 Q9 x0 ~& q: X1 L# A9 @ S2.对查找结果按照文件大小做一个排序 }! ?- G- z) L; R- v
) G6 c6 ~4 ~9 I, ^. |; M0 Pfind . -type f -size +10M -print0 | xargs -0 du -h | sort -nr5 K# P1 M1 D* h* r; p, L
2.1查看当前目录下某个类型的文件或数量8 G0 s1 u: b7 F% ?( }
* f- ?5 ~9 ^' ~' i& {& U; qfind . -type f -print | grep php8 x0 G+ }3 A3 x5 W
find . -type f -print | grep php | wc -l
' S7 G8 \/ `" a, E2 H3.查找当前目录下前20的大目录
* V2 {$ X3 |% ]9 D) F3 V, W- O9 x; ?9 n' F
du -hm --max-depth=2 | sort -nr | head -20, E) w! R8 ]& d
*这个命令我常用,先列出20来个大占用的文件夹,一一击破;" k2 {, n! {% k2 G- j+ P* D
; f) C2 F" x# Y. a; ?4.计算当前目录下所有图片大小,单位为MB;1 r e! y" p% f3 e+ ^
8 u9 b& x# l, O3 \+ s
du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'0 J+ a8 k* V8 n0 ?
重点清理项目+ `- Y/ P- U) ]" N0 w! s
Mysql 日志
0 p# Z2 @+ S. @5 I Y* A手动清理日志文件. L! U9 }" w: v: {6 J" u2 }7 i" w
mysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;( x* I9 e2 K. V( r# |
7 l" p3 Y8 E0 d! [! u" _; {1.登陆进入mysql,并使用 show binary logs; 查看日志文件。$ z# s. l9 w) h+ y
( @* D+ _% P4 }& v$ q$ ?0 ?- Proot@localhost:/home/# mysql -u root -p8 t/ O8 v \: c2 M, A4 a
Enter password: #输入数据库密码
# x' T- {, ]+ C7 b; Amysql> show binary logs;/ p* d, k. _! H" E% v6 |5 r
+------------------+-----------+& D0 P$ v3 N0 p( l- T/ m1 n) r. {+ A
| Log_name | File_size |
: O9 a5 c1 ]; q. c" ]+------------------+-----------+
# F% G5 X- L& F J3 N' [, [| mysql-bin.001368 | 3175578 |9 Q+ L/ Q2 s$ F X7 E; M
| mysql-bin.001369 | 177599 |
( j$ `$ t2 J! e$ y1 c R+------------------+-----------+
]3 `1 l3 ?( z) v8 A! T8 c: ?. w2 rows in set (0.00 sec)
# u, d8 a5 K: H$ |; \2 s7 D2.查看正在使用的日志文件:show master status;! U9 s" H- k: p8 u
5 t ]! ]5 s+ [% f7 o# U/ R smysql> show master status;
$ `0 a! C1 l/ j8 V2 ~, e: J! G+------------------+----------+--------------+------------------+, r* x2 ~+ ~9 g( _7 l3 \
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |4 Y" S! R1 \ T6 y4 j0 J
+------------------+----------+--------------+------------------+
5 J, L3 r: N3 l, V) D7 i. w| mysql-bin.001369 | 348563 | | |
+ g/ A9 u- z2 x0 C( I5 h/ N, Y8 @+------------------+----------+--------------+------------------+6 L4 J5 m! @0 G- d" j2 l) Z% V* g
1 row in set (0.00 sec)! V7 F9 c6 W, K/ m3 _. { J7 o
如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;/ H+ {2 V3 [# {8 w+ W
0 @9 X( i8 t7 d4 V2 h5 ]: r
3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
$ t' ~1 ^& w: F& g
5 @* j' F- ?: X: Nmysql> purge binary logs to 'mysql-bin.001369';- b, G: C( F1 z# t* P x/ R
Query OK, 0 rows affected (0.02 sec)# }0 i% q; ~# S7 H0 j, a& j
mysql> show binary logs;
3 _; |* I3 _8 s" Y4 h/ R+------------------+-----------+- K$ M( ]/ y8 T( X" z% y) S: _
| Log_name | File_size |
# N" Y# P3 V+ @2 q8 |- |+------------------+-----------+
7 j5 k0 F: z) |0 ]: Q| mysql-bin.001369 | 949552 |
) T& c' G: k8 W) I+------------------+-----------+- w! T+ q6 D) B& {. e8 ?1 t
1 row in set (0.00 sec)
3 d' g) m( A: _, j8 ?删除完毕;- i' N [" @ L; E+ p: A
! s, ]+ t' @2 u6 b定时清理日志文件" U! Q+ T7 T0 g) |3 R2 W
1.主理人自己已经设置其不产生日志;4 X3 D& m {5 H2 R
2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
* G3 P2 n. |# c. h- j
* f. _. L% J( Z6 X T# q6 mmysql> exit- Z! l! h5 G( _- y* M/ \ J, w9 p
Bye, u( _$ H6 {/ b4 e2 P! B
root@localhost:/home/# vim /etc/my.cnf
8 c, a$ \6 {3 p6 E! B# t* l# B/ g编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;
+ }" C; r3 l: q$ g" s
3 u u$ j( r2 o# c3 ]$ j9 Z3 Zlog-bin=mysql-bin" [4 \$ E' W/ `% q3 f* S+ ?
binlog_format=mixed; ^0 s3 O9 m- }) N
server-id = 1% ], n" O! c/ [! l' }, G1 c) w
expire_logs_days = 10+ ^" X @6 Y8 ]
改好,保存;重启 MySQL 即可;
; N- i9 i% G" l9 j; I' H" e$ g9 G. m6 G- c3 ]6 @$ [- x$ ]0 J; W( }
root@localhost:/home/# lnmp mysql restart
$ @2 |% o$ E( j或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;/ M) d0 g7 D5 \% z+ q/ W/ v
B- N2 p; P2 |3 J3 z##注释 log-bin=mysql-bin
. C4 k% M" D5 u! l##注释 binlog_format=mixed1 C+ F! v: J( }. M3 X: y/ E/ F" x
参考1:Mysql 日志爆满,删除日志文件,定时清理日志
# {1 c8 C- b; ]( C参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
$ x% [, z. F/ m4 O6 {
& w7 g( t0 R9 S) y; i/ G' }: ~Nginx 日志! V9 h5 h1 r6 K& O3 Q# Q1 _+ R
手动清理日志文件
5 j4 U+ k* w, x7 {: B6 @) bnginx log;, @' C4 j* @/ T* F; ^! f
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;8 o( E7 J6 c1 n b; m( {! D* h
+ ]9 A; w# T- ?) ^9 C9 i7 v找到相关日志,直接使用命令 ls 查看有多少日志;
) N6 m2 ^7 G, K, n& x3 X
; R* M2 Y$ [7 k4 ]2 |- t% x. P$ croot@localhost:/home/wwwlogs# ls
- S3 W6 m' s+ `7 P& Nnginx_error.log
; w$ g1 ]. w: t* A9 }/ _GeoLiteCity.dat limbopro.com.log
( \: Z1 L6 `. E b0 l/ f* g' {access.log - L D! q1 `" ~8 G* T/ }2 T
使用 > + 文件名 清理日志文件;
! a$ S! F3 b; c# B ^) ]
/ p7 n; v- M$ L, jroot@localhost:/home/wwwlogs# > limbopro.com.log
7 r' p" k/ E0 F; D5 lroot@localhost:/home/wwwlogs# > access.log
`9 c+ W$ E. ]! a1 D. e' e定时清理日志文件
$ C J! J' w7 t2 ^% k ?3 `使用 crontab 定时清理日志文件;
& N* E" e- Q% B& [. g ?$ _0 |& U' c
root@localhost:/home/wwwlogs# crontab -e9 U, I+ n/ ] _# K( x$ ?6 z4 O2 N
添加一条,设置每日凌晨零点自动清空日志:1 M, H' N# g5 t, z
0 M+ s$ G' O f# t1 Q! x7 O. _
0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志& c: C5 D3 S/ [2 T; d# i$ s" J4 ]
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志( \1 @( [$ f- E y% {' L0 v6 Y
保存,退出,重启 Crontab;# f$ H. Z! v4 [+ X9 y q" o9 j
0 {/ v$ p5 a1 B; J7 v- @root@localhost:/home/wwwlogs# service cron restart# [# y* d2 P, Y# M/ R& ~
root@localhost:/home/wwwlogs# service cron reload
4 R+ h9 o& e6 Z9 {5 E6 e9 _ d*日志文件具体位置,以实际为准;本方法比较粗暴;% I1 I ~& w, p k
% x) ]. G. }" f9 \3 y( Y+ m6 C
参考1:Linux crontab命令及其用法;7 N& L9 F: E" F% P* y
& j* H1 T- B. g3 o) @
journalctl 日志清理' Q& z) r+ y# t/ @$ O+ D$ s
配置文件路径: /etc/systemd/journald.conf;
" Y3 f @! I4 q9 c6 S+ B日志存放文件夹:/var/log/journal; a% T3 I! d' P* G" n$ \
! S: S- H+ T* _& D& [! @
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。" u6 K3 `7 u3 X6 F0 M6 l( G+ f* j( L
+ z; V0 R9 N& r6 F* }* j
清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:
$ i5 `% M- F* E9 B+ `8 S& j8 c
4 q3 _' M% T" I" O; n$ j* Djournalctl --vacuum-size=20M/ c# @" e6 _# x) D. W+ b5 e" R# g
系统日志清理
3 n8 g* c" N% k v1 j/ ]系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。3 x/ p% i& j( d! @
* K7 Z9 [& o7 f& Z, j$ ~1 Z
sudo apt-get install ncdu
- _) D: K8 F- }sudo ncdu /var/log #然后按i键
/ I$ A" p) J3 Hncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help
* R& R% y& F2 X' X. o E* j--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------* G2 ~7 ^- v3 U. X0 w* w8 E2 T
48.0 MiB [##########] /journal ┌───Item info──────────────────────────────────────────────┐
& ?7 X7 Y* q" y. n0 b 16.9 MiB [### ] auth.log │ │
( x6 w; Z& V2 O/ f 15.0 MiB [### ] redis_6379.log / y' @- b' a5 c9 i
...- ?4 z8 p$ R" ^& {9 y1 v; u
然后进入 /var/log/
/ n, M' R4 B- N( @# K8 k
6 C$ o) L4 n; M/ N: n) u- [cd /var/log/ J& F& g3 X% o. @9 _
> redis_6379.log
% U& e. b" n- H* h安装包清理' Q5 G9 C' x7 @ h! ?
查看安装包缓存大小
* }- T, r) t( ~( S* n" o+ O9 T J h9 D% Z3 `
du -sh /var/cache/apt/archives! x* p# w& S2 s/ W7 W ^
使用如下命令删除已经安装过的deb包; W2 h5 l) s# K& R" Y% {' ^
3 o. O; F( v. [
sudo apt-get clean
( @! h5 Q) y; i( z* L9 e& y+ fsudo apt-get autoclean
5 M) p0 `# z7 H$ x6 o2 x删除孤儿软件包 已经没有用处的依赖
/ q! g r6 K- Z9 u% Y+ g- Z7 F3 f7 K* @: a0 _
sudo apt-get autoremove9 s: j) ~2 t6 F* K1 H$ ^, R
清除手动安装的依赖包
" H9 x, p5 @ W8 X. v1 X" j- O8 S
5 g* y1 {6 p+ Y) F" p6 `deborphan
( i* k3 @2 k& D. Osudo apt-get install deborphan. r- a1 C" G W' g- f
deborphan | xargs sudo apt-get purge -y
# S9 d& G* ?/ V( ~% N; p删除大容量已安装软件包( ~2 D1 ]) H, {1 v
首先安装debian-goodies
: f( W4 q% |/ D: E0 c! L }* s! n2 F2 v
sudo apt-get install debian-goodies
3 I6 i/ s* p- ]4 r; F/ x) U2 b; c然后输入下面的命令
+ D" N4 [2 K" y1 c- O2 f; ^; u" ]1 r; q
dpigs -H
. ^3 f8 I: H9 H7 v4 x U3 G我的输出结果 }5 k: p- F b* F2 z8 b
" x3 q7 i, I( P i
531.3M linux-firmware% M2 X3 P. ]; i$ l* g
315.0M fonts-noto-extra; v! h- f, M) _& ^
282.0M libgl1-mesa-dri' E. ^6 J0 E- l7 O
214.7M golang-1.13-go9 y1 @( D: I5 u7 l% a q
212.9M linux-image-4.11.8-041108-generic" u( l+ r7 s, O2 N2 J3 o$ ^
181.1M linux-modules-extra-5.4.0-60-generic" h8 r6 s" n5 k& i
181.1M linux-modules-extra-5.4.0-59-generic
: \ O3 r, u7 s0 \$ @181.1M linux-modules-extra-5.4.0-58-generic
/ w8 j% E6 N9 [: V166.2M docker-ce-cli
. J. A9 u$ P8 |2 L0 P& V123.3M containerd.io
6 Z: D4 a" [# C$ K2 d. r上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个9 n2 O! C+ |3 T6 M; R3 g2 R2 j8 q2 D
3 E7 N3 ]8 u/ x% I
注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
) x) ?( ^ g( O: qdpigs -H --lines=20
4 A t: y/ F! ], w6 P- N软件包卸载命令 Y1 G* t3 f2 w6 U4 p
: m1 M' A3 e1 j' u8 o: x q- Vapt-get purge #purge 后面接软件包名称& k( ?) P- v" m3 ]" {# f+ {# N
apt-get --purge remove #配置文件也清理掉 命令后面接软件包名称
5 z) q# w% |' }5 w: V4 x示范 以 删除 golang-1.13-go 软件包举例;
3 k6 E8 r6 u5 {6 e8 ^/ U
* M" E' ~* C/ [5 T: D% e" Uroot@localhost:~# apt-get purge golang-1.13-go6 M2 ]& e R% f5 V* r: ~: J1 B
正在读取软件包列表... 完成
7 {$ h8 [- M4 m$ g% w" x5 V正在分析软件包的依赖关系树 " d' u$ H" A' t: V( ^
正在读取状态信息... 完成
5 I8 R/ M% q4 d; b! I5 o下列软件包是自动安装的并且现在不需要了:' N; @- B2 J9 m) l& X
golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src
# B+ |" r- t1 n6 H+ e" f3 L使用'apt autoremove'来卸载它(它们)。/ {% A1 s3 s r8 }
下列软件包将被【卸载】:
; b$ @0 }. v$ q# ? golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*- B6 W3 x' p& O) j
升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
" X* b8 A) S; K8 ^% G5 {解压缩后将会空出 230 MB 的空间。/ ?1 f4 p# l# R& Z m) w9 T4 x
您希望继续执行吗? [Y/n] Y
. Q% c% U1 u( J2 O4 Z旧的内核清理" C/ m" ~, a; w. ?
查看当前使用的内核
# Y- L4 V/ r9 w8 k, `) D- M' }5 C- X9 d; `( N
$uname -r
6 o0 R" D& q$ d& w5.4.0-60-generic& o3 j" ]/ ^% C6 P8 Y- B
$dpigs -H --lines=200 f7 M% g4 F0 ^4 |) o' p
74.1M linux-headers-4.14.91-bbrplus" U7 v- Y, S g
70.0M linux-modules-5.4.0-60-generic //保留
, U* ~' d- R/ b( n; i; h* q70.0M linux-modules-5.4.0-59-generic //保留: {. [! P. e6 L3 h# I* ^
...' c' Y2 X0 h# s7 A
看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);
. B4 @" C2 J6 l% s p- C" g) d* A2 g+ v: j* X4 W( [5 x
$apt purge linux-headers-4.14.91-bbrplus
7 q: N5 }9 y4 W% u$ R运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):6 H' L: x, z3 B' ?, r
+ o% o- n1 f: e, M5 C/ N- u# c
$update-grub
5 J* R; y$ C7 x* g1 P1 p- S5 USourcing file `/etc/default/grub'( r+ N1 [+ v( [* l' Z( N8 G
Sourcing file `/etc/default/grub.d/init-select.cfg' L/ K( q3 }8 A! e
正在生成 grub 配置文件 ...7 L8 k6 D; Q7 e; N1 t& Q( b$ k5 l
找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在 & {8 t7 s# d5 r2 l7 M, y( m
找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic7 ~, @! v" d. j
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic
. _! x! h, F9 i$ I8 I1 C找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic2 a1 ~2 O5 i' Z8 Z
找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
t5 X! l, ^5 l- n找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic( m3 l3 |6 ] O7 G1 G
完成: C0 w- @: i' Z/ @- v7 ^
...& l7 @5 S1 f# R/ m+ Z
3 b# _9 D0 E9 j: R) C' `% X相关知识0 E3 {. Z% a. ]/ `
LINUX的磁盘管理du命令详解7 P4 V# E& `; v I( L% L
/ N3 k: \, i- `, t
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
; ~4 U: P: w& T# ^" t# m0 c, h% ?# S! [7 ^5 F& r; H
DU命令用途
4 |5 q+ Z6 [$ S- w" r. Pdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。3 [3 U5 g7 X% _1 k3 h7 _
: A, k+ Q% M3 _" ?找出大文件
% [" w, [; j) |, G" U, W5 s磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:% ^: B- M1 D, q2 E @, R i/ k X
: Q. C$ d0 Y% }2 h% j- ddu -s /home/* | sort -nr #/home目录检测
; D; ~: l3 j- R. H S% A O$ v0 r4 y2 G" m; i
|