设为首页收藏本站意见反馈 国外访客:

 找回密码
 立即注册
搜索
查看: 16778|回复: 0

[未分类] Linux常用命令 - Linux 软件包卸载,无用依赖、系统日志、硬盘大文件清理(运维)

[复制链接]
灌水成绩
17882
95
18384
主题
帖子
积分

等级头衔

ID : 1

管理员

积分成就 威望 : 8
贡献 : 9
下载币 : 382
在线时间 : 1682 小时
注册时间 : 2013-9-5
最后登录 : 2026-6-18

发表于 2026-1-24 10:43:04 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)
( F+ c1 Q3 ]7 }1 l. L; Y: _' g
) A; b. F9 I3 j+ @本文章实用性说明9 f  b/ v! i# T) C" C  k
1.检测Linux服务器的磁盘文件大小;
0 L3 C, r3 W( T0 Y2.重点清理项目;
+ j" s3 F. A1 J) I9 H
) U* T4 X" m# N3 ]% b6 J; k# ?实用命令& @) E# l0 |- z5 x
0.查看硬盘剩余空间* N* b% i( G1 T8 M( h, {, J5 k" G

+ `/ ]7 `- C% u" I$ df -h #查看当前硬盘剩余空间并以GB单位表示
8 D, O, t1 H7 q文件系统        容量  已用  可用 已用% 挂载点6 {. L# H/ H) R! k8 ~0 Q; c
udev            448M  4.0K  448M    1% /dev0 E  e) A; Z0 D
tmpfs            99M  1.1M   98M    2% /run& E5 z! \0 P8 k3 o9 W1 o) @; w
/dev/sda         25G   13G  9.9G   57% /
$ y( |8 W1 i* b7 `6 t4 ?' a4 }; i" Otmpfs           491M     0  491M    0% /dev/shm
, w/ ?3 q( E/ h3 S3 y1 [% Ztmpfs           5.0M     0  5.0M    0% /run/lock0 X* m- R' I, N# N; r
tmpfs           491M     0  491M    0% /sys/fs/cgroup
3 S. {$ ?' X) E; }! [% @tmpfs            99M     0   99M    0% /run/user/0
& ~$ P1 |" d0 w1.查找大文件
( R$ _1 c0 ]4 J3 e0 V1 ^/ O5 e0 v7 V; Y0 ?% i+ J
find . -type f -size +100M #查找当前目录100M以上的文件
  z( q5 ]# i7 V5 h! V# y& m5 }2.对查找结果按照文件大小做一个排序
4 [1 I9 y2 M* t
' D8 w9 V( y4 i5 {5 `7 ?find . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr
# g7 ~( P3 F' W+ P* D2.1查看当前目录下某个类型的文件或数量4 P$ o" m2 V9 M* T% j
5 j6 ^& M4 J  N5 G0 n
find . -type f -print | grep php
6 T" m& G8 [3 N' S, Xfind . -type f -print | grep php | wc -l( `1 b3 p  e& J; U9 P2 t
3.查找当前目录下前20的大目录: p# S0 q1 J4 ^. C  }- X- Q' t

  T2 u' e% i3 Ldu -hm --max-depth=2 | sort -nr | head -20
9 u. R# X6 ^/ E" T: r- K*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
) ^$ t/ k6 [, a: `8 f$ J" G( N% d0 q) n4 r# D/ \
4.计算当前目录下所有图片大小,单位为MB;
% e1 i! \" e( O1 x/ ^5 f+ \2 t7 ]$ F. t2 {' ~% y2 X! \6 Y
du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'
4 g/ H# S- i( M9 H5 l6 a7 J* X1 C5 @0 ~重点清理项目1 L  R6 `1 h; ^
Mysql 日志7 o" Y! G  H$ _& v1 w" F9 \
手动清理日志文件) N% D6 R5 s5 L- Q) ?6 V
mysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;
; G8 t/ R8 @( Z9 S1 }, Q/ |- M8 \: Q$ u" x, w8 S- W8 V
1.登陆进入mysql,并使用 show binary logs; 查看日志文件。& @3 X3 v6 W+ R7 x" V7 _

* j$ @, P8 l5 t9 Z1 x2 qroot@localhost:/home/# mysql -u root -p
/ G& z; ~7 I: G1 ~( ]Enter password: #输入数据库密码/ r$ N( z# J  _$ V+ k- h
mysql> show binary logs;
, Y  Z3 Q" O" k8 {' d# R+------------------+-----------+
+ b9 L; K- a$ _9 m| Log_name         | File_size |
6 [; [8 O* w# @5 B' {+------------------+-----------+
. a1 h/ y# P' _2 y| mysql-bin.001368 |   3175578 |, g2 r! l- a! P3 J! j
| mysql-bin.001369 |    177599 |
; W6 c, y. i* x7 t+ P& p' x; B! c+------------------+-----------+
: Q- |& l6 T3 W* n1 q% @0 _7 I: m1 U2 rows in set (0.00 sec)
7 N! l: l" w+ @) m2.查看正在使用的日志文件:show master status;1 Y' \9 |* {  d. ?, ~, }$ P$ L

0 h+ s8 z. R- x/ J) wmysql> show master status;2 p4 q" C1 y! T9 X6 U
+------------------+----------+--------------+------------------+
5 t7 C$ [( u' |' ]/ c& n| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
* c# F* ?& F: Z& v- D+ x8 l+------------------+----------+--------------+------------------++ i& U$ R. j4 l% S# w
| mysql-bin.001369 |   348563 |              |                  |
0 Y! k( k; ~  V- M9 W- U6 r+------------------+----------+--------------+------------------+8 x& y& n+ m3 k- O5 I
1 row in set (0.00 sec)
8 i# D3 N% S: e, W如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;
- T9 c( ^. a6 i# v# y
# }6 G$ D6 o3 x- N3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';7 C8 B. R" V& G: H. R) F, X9 Y
1 }, `' z/ e" G; H: l" i6 o4 n
mysql> purge binary logs to 'mysql-bin.001369';
* j' D' U& E/ bQuery OK, 0 rows affected (0.02 sec)
: J9 D' o9 R" t4 O5 O. Pmysql> show binary logs;( Y% O, n+ N! X
+------------------+-----------+6 `3 r; z- m( X5 f. m, J9 {4 _
| Log_name         | File_size |
9 E3 L$ J9 o' M- u! l+------------------+-----------+
7 O( F6 U  y& s" A8 s$ W& n| mysql-bin.001369 |    949552 |
  }  B+ H, I& a% Y6 t4 {+------------------+-----------+
* {3 V; N0 v4 A7 z' Z" p1 row in set (0.00 sec)
6 [# s. [% ~) L' g- a删除完毕;% @3 b% I3 K, n1 q8 H8 r4 ]

% N9 r/ ]+ R, U# U" j定时清理日志文件
+ l- I' d8 K4 z5 D) w1.主理人自己已经设置其不产生日志;. C& E, M% h2 P' c1 w
2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
% p; \" E+ u, r( z* V8 q5 T$ o% l+ g( T: Z9 m7 w; U
mysql> exit# O) I; p+ K$ R- |8 I
Bye
& y" {- j2 O; \root@localhost:/home/# vim /etc/my.cnf
9 g  ?1 z& O! M! n" w3 T0 C编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;
7 a6 W* N# A0 [% O' Q$ I
7 X9 r* b; T/ c8 hlog-bin=mysql-bin
0 O3 r2 T: |1 ]- L) _( M8 Wbinlog_format=mixed
: q, I- N! N. U, vserver-id       = 1
9 c& W7 c) K5 W4 g0 ~3 d5 k/ ^' L! ~expire_logs_days = 104 X; l: Q) `0 Y. n
改好,保存;重启 MySQL 即可;  Z* o: e  `* Q% g! A

8 u& E2 ~8 p  s0 g  C- ^) yroot@localhost:/home/# lnmp mysql restart0 ?% F" k1 N+ i& R# E8 k6 O2 v) x% P% G
或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;
4 {- M' B- P# J2 S
. Q# c9 m. c' ]& q6 V: ~- b##注释 log-bin=mysql-bin) ?, o0 n. M1 L" P8 U8 A
##注释 binlog_format=mixed
! h% |* x7 s. B+ x# e参考1:Mysql 日志爆满,删除日志文件,定时清理日志+ M1 W4 \% Z7 B6 U
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
) A0 f6 }! E$ }- q8 h
  a8 c0 X' C6 l. NNginx 日志- P! ~. R6 N, T2 l7 S
手动清理日志文件! S, ?2 b4 l& o5 h3 t# d
nginx log;0 V0 J; J+ T. y; Z& r
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;
& B& W! O( G% X- ^
" h. a/ n, A) s# N  [9 L找到相关日志,直接使用命令 ls 查看有多少日志;1 G" y& k! v9 A* \0 i

4 w7 i$ l6 |" a. L8 \root@localhost:/home/wwwlogs# ls
; `& H. D7 U1 ?! Y: h7 Enginx_error.log& u  B0 l- x! K# x7 L% F4 \, M
GeoLiteCity.dat         limbopro.com.log
$ F, }  x0 k2 }" l( u$ |+ A: eaccess.log              
+ k0 D  r+ `- k! `2 P5 l! p使用 > + 文件名 清理日志文件;" T6 I9 n: `; O& o0 o
9 t( W) d9 M8 P" l
root@localhost:/home/wwwlogs# > limbopro.com.log# Y5 s3 a) L7 q) l/ n6 V9 L6 F
root@localhost:/home/wwwlogs# > access.log ) c5 a" n( K0 X5 y3 p! Q0 l0 k3 G
定时清理日志文件" B4 B8 m. E% B2 q
使用 crontab 定时清理日志文件;8 @1 X  w- o0 n7 |# z8 ~6 E
! _- R5 W& s" Y$ f
root@localhost:/home/wwwlogs# crontab -e
4 d# g& c; h* P: U3 T$ d9 S4 m添加一条,设置每日凌晨零点自动清空日志:6 z2 }3 ?1 M/ v1 I: e0 B9 z

: f- N8 z  B* u0 h& o+ d9 U5 j0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志
# a8 [  K; {+ d" Q  V; F, Z' I& w8 D0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志
# K4 x: C9 E  i; X4 N保存,退出,重启 Crontab;) A- J; \& i" b8 i# i! c6 W& a: e# o

7 W  k; S* q9 _+ x' `. T6 O( H$ croot@localhost:/home/wwwlogs# service cron restart
+ |5 f7 L( j$ i; R' H1 A. Nroot@localhost:/home/wwwlogs# service cron reload1 g- V; N6 k. A/ T
*日志文件具体位置,以实际为准;本方法比较粗暴;
, C# r( ~& B2 L$ B
; d; S2 @$ T8 e参考1:Linux crontab命令及其用法;9 O& P3 F( C. l% M2 ]; U' p$ F/ P

" G$ j* o5 b' j9 njournalctl 日志清理
5 O' z. k% _. g/ I5 q" T配置文件路径: /etc/systemd/journald.conf;
0 |& Q$ n) c2 r4 v* \9 {6 P0 A8 H  B日志存放文件夹:/var/log/journal;
5 y; w* U: ^; r7 t  L. e. S1 m$ }+ a7 D* {
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。
/ k1 ~0 ]- ~2 c' K) C
7 ?% p4 e3 P! o8 o2 r清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:
/ p0 [2 c# Y, H
3 l1 m/ ]9 n) ^5 X: L3 E$ Mjournalctl --vacuum-size=20M
  X+ x: N3 M3 F" d/ a! v% Y) q系统日志清理" L: W4 Q6 {( B  G! Y9 c8 \
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。0 Y6 \( B7 V5 ?6 |/ d' ]. [

% s* N' }# _0 e1 Fsudo apt-get install ncdu
/ b% [. ]+ I5 _1 [8 y7 t, C' Qsudo ncdu /var/log #然后按i键7 s3 p6 {' e4 o( ]& W5 m
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     
0 E6 E4 U8 W: O! t$ {) M--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
! f+ {6 P8 s& Q8 i9 F   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            ! }# t' A0 }/ G$ E- S6 A
   16.9 MiB [###       ]  auth.log                         │                                                          │
/ p- L' r/ R" }   15.0 MiB [###       ]  redis_6379.log   
' r  b$ }1 h% t7 Z/ \$ S( k...
2 V  K, }( S# R  E3 G; O3 _$ }# j然后进入 /var/log/5 @! t7 u3 h& l+ B
9 i' n9 n6 d& @$ V4 ^
cd /var/log/% m8 ?5 X/ e9 Z" ^7 b; ]
> redis_6379.log$ K3 x' ]7 I8 L* n; z/ H$ |
安装包清理
0 j% m' L3 l2 R2 ?# ~5 b' h4 H查看安装包缓存大小
7 Y) N6 Q0 l: Y2 p  F4 f( c- l1 O, G! O2 R+ [2 B( J
du -sh /var/cache/apt/archives) h+ L# s; [  u, A
使用如下命令删除已经安装过的deb包; M+ Z! s8 Q7 t

* @% _5 B2 P0 bsudo apt-get clean% r) n: T- u7 g6 Q- H
sudo apt-get autoclean
8 D' m7 W6 C/ j! h$ _8 c2 ~删除孤儿软件包 已经没有用处的依赖" H  h) a5 h$ E2 P, r6 b) H3 f
' D+ v  P1 S4 G0 R: a
sudo apt-get autoremove
3 w5 i( [1 Q% ^/ i+ z6 f清除手动安装的依赖包* R5 N: g- |  g$ Y5 N, Q1 _
( M( }4 t( N$ Z5 ^+ K& }; Y9 \- W" R9 Q
deborphan5 p8 [$ x0 q: W9 I7 a
sudo apt-get install deborphan
) X5 T0 J! D' o# odeborphan | xargs sudo apt-get purge -y
0 @% ^" b8 l$ n% ]0 B# V删除大容量已安装软件包
! s( `) J- `0 [首先安装debian-goodies) ]% w, ^& B* `# J2 ]2 L. o2 E2 j
+ a- ?* J$ ^/ v  a1 R
sudo apt-get install debian-goodies
9 ?' }9 W  N0 v然后输入下面的命令& G/ j+ ?' w; z/ O* [$ _
& X3 p2 N" U$ z
dpigs -H
: k5 y( R- M6 [$ X: @我的输出结果
3 J9 C/ H$ T1 P6 m
9 U9 {  x/ s4 g, b531.3M linux-firmware: J. n9 r& O# u4 P$ W" s7 l
315.0M fonts-noto-extra) X2 u3 l6 a' v
282.0M libgl1-mesa-dri, G0 ~& k2 G3 K! Q
214.7M golang-1.13-go
. @2 D9 z1 m, q# `2 H2 P. K( X212.9M linux-image-4.11.8-041108-generic
% }$ U3 X" t5 `5 K. a1 P7 y181.1M linux-modules-extra-5.4.0-60-generic
9 p5 s6 ~: q. L0 B. O  Y181.1M linux-modules-extra-5.4.0-59-generic
( u, C" j5 R- K( B2 j2 J! \181.1M linux-modules-extra-5.4.0-58-generic# A: [: n! ^/ M; }; Y% c/ W
166.2M docker-ce-cli
( H: I# F' X1 ]7 }. ]123.3M containerd.io
  r" C, P4 E3 ]上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个9 B. ~  d- ?0 u3 z9 H
6 R4 C2 M2 ]! Q1 d
注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;) w5 y; F- a, |* ?1 _: e/ _& C
dpigs -H --lines=206 @1 D1 ^" e  `( x! P6 t
软件包卸载命令
- ^9 s3 x1 J. H0 W  j: `7 S( ^' j& ~& F, G" P+ Y% k
apt-get purge #purge 后面接软件包名称
4 p0 Q! |3 o# {: U, m* q  Q0 F5 Iapt-get --purge remove #配置文件也清理掉 命令后面接软件包名称- i7 X3 c/ K* _3 y& U: f) ?% S/ ]
示范 以 删除 golang-1.13-go 软件包举例;
% q# s) U; J5 z* l9 q$ `& o9 K% I7 v, E5 E4 {2 z& w
root@localhost:~# apt-get purge golang-1.13-go/ A, z) F/ c- |9 a7 [
正在读取软件包列表... 完成" a; {  r7 X$ |2 N. k( e/ Q
正在分析软件包的依赖关系树      
: |! U3 p0 y) i6 X4 D& J正在读取状态信息... 完成      
2 _1 w% T0 f2 B1 A下列软件包是自动安装的并且现在不需要了:: G( P* }/ r% @  |! O
  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src1 Q& q3 Z" d# t
使用'apt autoremove'来卸载它(它们)。3 }" F8 y8 g: ]7 t: P+ ^. A
下列软件包将被【卸载】:* E4 d: A( Q3 i5 P8 w
  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
, `$ J7 b. R% [升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
/ ~1 P8 S( u* s/ [" A. a1 ?解压缩后将会空出 230 MB 的空间。2 t/ e* T3 f9 u4 P( N
您希望继续执行吗? [Y/n] Y- \# S! V5 i; ^' m
旧的内核清理4 A( P+ i3 }7 L2 Z
查看当前使用的内核
& Z+ C8 o( y/ E: x2 x
4 e' c; ]' C7 ^4 k$uname -r
$ R6 t8 d- I% z7 R; e# P7 Y$ R5.4.0-60-generic$ g0 C! w' O$ \' `3 o
$dpigs -H --lines=209 L+ Y6 }# h* L5 j
74.1M linux-headers-4.14.91-bbrplus
/ z" Z# Y8 j1 i5 a70.0M linux-modules-5.4.0-60-generic //保留! c% p( G, t) J- K4 A! h  [. x
70.0M linux-modules-5.4.0-59-generic //保留  E4 y2 Y$ n+ d" I
...) E  L' J/ [! A4 \
看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);6 V4 m$ A- G6 F% D+ O3 V
7 a% H& b8 q9 d1 y6 G
$apt purge linux-headers-4.14.91-bbrplus3 k' V0 Q! d( H7 K
运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):' W& [5 b# p- s7 ^( z
+ ]6 l  M& O* `. \
$update-grub
% j7 ^4 ^, x1 B& i0 U* X3 M0 iSourcing file `/etc/default/grub'  m9 @2 _0 o7 J5 f  w8 O* S9 H
Sourcing file `/etc/default/grub.d/init-select.cfg'. ?' I- j" A# T6 L  A& d
正在生成 grub 配置文件 ...( f. d9 G- G& S
找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在
- c+ i4 n2 W" Z/ L找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic% e1 N; U& s* a# H6 p! I
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic- y' }3 N7 y0 e" B+ g4 Y4 ~
找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic
/ e0 [+ F$ C' [& N; ]$ |2 x找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
1 R4 A& J; Y' _' ^- p8 D# Y8 i( d找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic
- H& P6 }& Y, I7 A" i+ O完成
4 \% t; k' x  z. Y6 v3 G7 `...
6 @: d7 u; Q+ o; J( ]9 [, r; U
相关知识
" E$ A7 ?% D4 \; a& C+ N+ q2 |' [LINUX的磁盘管理du命令详解
4 L0 i. F1 ^2 s
' \( A1 n3 o1 H! F, p  c1 X" vdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。6 B- R: p1 H. A
+ S1 A, }( _% O% r7 f, }
DU命令用途
! [, o4 T# j; k5 Kdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。4 H6 K( n( r' o: p  ^2 M

' M# T% A" c" K找出大文件& p  h" ~* q: C' L1 q
磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:
, y* S. r/ _) P  G1 e
. u. O+ s: t' T* Udu -s /home/* | sort -nr #/home目录检测5 |6 P) f8 l5 ]1 t  L0 y& w6 ^

* v0 z4 C" q/ u: f* K
免责
今日来客 列表模式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|蔡州手游 |网站地图 wapmz.com

GMT+8, 2026-6-18 10:40

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表