设为首页收藏本站 国外访客:

 找回密码
 立即注册
搜索
查看: 16105

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

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

等级头衔

ID : 1

管理员

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

发表于 2026-1-24 10:43:04 | 显示全部楼层 |阅读模式
免责
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)" `* l) F( G, ?8 v' d
: F! e. {" s7 \- i4 ?
本文章实用性说明
$ T7 M- g5 d' n9 M- X& v1.检测Linux服务器的磁盘文件大小;" |: l- ~* L! a! E  f
2.重点清理项目;' o( W+ I0 `" w! t

( D* }0 M' U) A; I' M实用命令
+ d0 ]  U& H8 e1 l# g0.查看硬盘剩余空间. ^& I6 }: r3 X( P: z

  s. B% ]6 c( z* Z$ df -h #查看当前硬盘剩余空间并以GB单位表示
7 ^2 e3 j* o! f" ?/ Q" b文件系统        容量  已用  可用 已用% 挂载点
. H+ `7 ?2 T" ?& S) ?% Q& Vudev            448M  4.0K  448M    1% /dev
1 B, e& ^) B9 `7 ?/ stmpfs            99M  1.1M   98M    2% /run
* N0 ^# a# v! h- A* w  {# [/dev/sda         25G   13G  9.9G   57% /! m  O9 \8 C) j" o8 x) d& }
tmpfs           491M     0  491M    0% /dev/shm2 R) e. s6 X' r) ]: f
tmpfs           5.0M     0  5.0M    0% /run/lock
; @8 K# d3 ~: x, h7 @tmpfs           491M     0  491M    0% /sys/fs/cgroup; k6 h9 k8 P  W4 F2 T1 ~+ I' Z7 i; V, _
tmpfs            99M     0   99M    0% /run/user/03 z5 G3 e: w) e" i, B' |
1.查找大文件6 }3 ]3 L& w: L- z1 p7 N
3 P  S* R% n& }1 d3 i  |3 V% \* ~
find . -type f -size +100M #查找当前目录100M以上的文件
2 u4 N0 N% |7 j0 W2.对查找结果按照文件大小做一个排序; h- V' w# y0 g, d6 G% o

5 K7 B+ y7 d$ Rfind . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr4 a+ d$ B1 X  z+ s% u
2.1查看当前目录下某个类型的文件或数量, V7 n, y  r; b

+ T' R# [, a) H; V" [find . -type f -print | grep php
; g6 |* l# w+ Q! i  nfind . -type f -print | grep php | wc -l; Q3 P$ z7 W" v) p1 Z( `4 `/ g! m
3.查找当前目录下前20的大目录( q6 C) R! r/ h) K& B

: a7 X! q0 L$ g8 V# n1 Zdu -hm --max-depth=2 | sort -nr | head -20
6 N5 M# _& V0 {! l7 W*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
# e/ ^/ N" q. D1 ^4 _# L# W( t2 L
4 I- V0 ]2 \+ F$ C* U" v4.计算当前目录下所有图片大小,单位为MB;7 h' d2 n. y9 e2 m/ V7 R
+ \0 q, q/ K3 |3 W0 Y% n- z. b  g
du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'
9 `. F9 |6 E% ^6 S3 O$ \重点清理项目+ b- A/ q5 z, O0 b. x  z) n6 K
Mysql 日志
' p0 L4 C0 Y( l2 g' Q, f- v手动清理日志文件5 ^6 p4 @) i1 P" [4 \7 J* d
mysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;
$ p( i( }+ R1 V; |1 D& t6 w4 d
2 r' d% c  {/ _1.登陆进入mysql,并使用 show binary logs; 查看日志文件。
6 y- x7 Q0 E- c* {5 D' h$ a$ }8 ~( Z7 I/ Z: I0 o# n' c) J
root@localhost:/home/# mysql -u root -p, ]# B* T( d" l
Enter password: #输入数据库密码
4 T. t  j+ Q2 _1 U1 d  I  wmysql> show binary logs;
- I1 L/ E$ C% N8 N6 _6 C+------------------+-----------+
9 |3 }& \/ C& D) ^- A9 `5 N; f| Log_name         | File_size |
: d- K- Z4 I& u: F+------------------+-----------+
" v# O) t& ~% u: `: g7 T| mysql-bin.001368 |   3175578 |
( _! A3 {4 d/ \4 H% Y: z6 y( q| mysql-bin.001369 |    177599 |
$ M0 ]; V; Y1 T! U% i/ [+------------------+-----------+2 h% o6 F3 u: n5 ~! G* t
2 rows in set (0.00 sec)
+ h; Q  j; I5 I2.查看正在使用的日志文件:show master status;* \' L) u3 F* ^
  I/ k, g$ Y' k
mysql> show master status;
, [# i4 @! {) ?0 E+ C' z+------------------+----------+--------------+------------------+) \6 B, ]8 `0 }5 s, B* D' `/ x
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
$ Y& x6 d; n& O4 z( x+------------------+----------+--------------+------------------+  K/ P( ~4 Q8 W8 W: r9 B  p8 u
| mysql-bin.001369 |   348563 |              |                  |7 I: h( S1 C1 m. j
+------------------+----------+--------------+------------------+
" e0 V6 [" X4 f) ^: r0 }/ q1 row in set (0.00 sec)
& O4 I8 \8 f: q, O1 l# J如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;! l0 N* \( g4 ~, r, J! ?. K
+ M8 t% U( W, J  L& }
3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
/ ~9 z4 w2 K# i# g1 N7 D5 r) f9 U( R
mysql> purge binary logs to 'mysql-bin.001369';
8 G" \: S" [* O( i; LQuery OK, 0 rows affected (0.02 sec)
0 f. y. F$ o# G* N' R! Imysql> show binary logs;: K5 E8 m0 j/ S, Z. s
+------------------+-----------+
+ t4 H0 ^$ M% R# V9 Q| Log_name         | File_size |" D  A0 S1 x0 M& l/ Z
+------------------+-----------+1 R& }$ l! Z0 N
| mysql-bin.001369 |    949552 |: r; n9 N# o+ X. p6 ]
+------------------+-----------+$ i( b! {- t) D( r+ ~$ d
1 row in set (0.00 sec)
$ E! C2 }+ V/ \# z删除完毕;+ ]! _. b8 d3 i3 P0 \3 b& q

9 d! [/ D. ~. i/ V/ R& A1 b+ Z; Q定时清理日志文件  q+ r5 \* c. E0 }0 R. t: G- j
1.主理人自己已经设置其不产生日志;6 S3 K% \2 s+ N1 U: v' n
2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
. Q% T/ Y2 ^1 C' G, Q) X% ^8 F6 Z0 T3 M7 G# t1 J
mysql> exit
+ o4 p3 m5 i- f4 Y  gBye4 i6 b+ `" c& s
root@localhost:/home/# vim /etc/my.cnf  s  H3 k1 C4 R+ ]0 _8 {2 ]
编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;% K! _8 a+ R  g
2 R- _0 H# v- k3 |. `% X1 T
log-bin=mysql-bin
3 ?# m) q9 `. v2 M4 dbinlog_format=mixed2 b1 d$ G: c/ e8 Z% f; j
server-id       = 19 I$ b7 A  K$ u9 J4 [
expire_logs_days = 10
  G0 M$ ^0 O6 z! Z- L改好,保存;重启 MySQL 即可;2 x2 \7 k2 T5 R5 g! [

: _! Q' ]' @4 N6 E4 U  G# broot@localhost:/home/# lnmp mysql restart. f8 `2 s* P5 |: N% Q
或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;+ P- q6 J9 g' a+ c8 R# P5 j
- G0 @0 h  n  l6 L, |* T
##注释 log-bin=mysql-bin% T8 Y: q7 m8 i) G' d( J9 v: ?# R
##注释 binlog_format=mixed, \4 o8 U$ W" x, ^
参考1:Mysql 日志爆满,删除日志文件,定时清理日志
! g' e3 h6 E# I& U3 K参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录- F0 O  F. o5 C" ]( S, k: c. s

( L4 B5 f0 y) y  w5 }; gNginx 日志
% u( ^+ }1 o8 U- u: d' @2 W4 l$ t8 p手动清理日志文件
5 l! W! f1 C8 g- tnginx log;8 t" p) f3 f' j3 @
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;
4 d/ i$ `1 G3 |8 c- t- b7 o, C
  [1 d0 O" `# m4 p8 D( x找到相关日志,直接使用命令 ls 查看有多少日志;
9 y9 h+ J7 S+ k4 i% X6 f
6 _6 `0 S/ O8 d" I0 D& t, S  Vroot@localhost:/home/wwwlogs# ls
& [! U5 S7 `5 }2 b+ Anginx_error.log
7 ]6 N0 a- M0 z4 w  eGeoLiteCity.dat         limbopro.com.log
0 |6 V7 w" m* E) D. D0 Baccess.log              
% Z  D1 i7 P$ {. V6 ?- S使用 > + 文件名 清理日志文件;
* B# c/ }, b$ l7 e$ v, C6 }3 {* E6 Y2 ^5 b
root@localhost:/home/wwwlogs# > limbopro.com.log& b- C1 p% s4 m# s
root@localhost:/home/wwwlogs# > access.log
# y& g% H) Z2 k+ o8 t7 |5 V  R定时清理日志文件
' T: m5 V# u! s9 y& i  y' y使用 crontab 定时清理日志文件;: r8 `0 P0 x9 `, C5 n( U+ J) \
: K) x* y% B; P! w( p, o$ V% o: ?! g
root@localhost:/home/wwwlogs# crontab -e
: s9 F+ G5 w4 U) P4 _添加一条,设置每日凌晨零点自动清空日志:6 w) n8 [" Y! O3 X. g) X% Q8 j
0 m9 P7 _0 i/ E9 _
0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志# \) ?6 R& b! I/ M0 h& }
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志9 P" ~1 V. U7 b
保存,退出,重启 Crontab;+ K8 p6 y3 e) ^7 d) C
" G( Y  d6 U; e5 [% X
root@localhost:/home/wwwlogs# service cron restart6 n* x. p; u3 K4 a
root@localhost:/home/wwwlogs# service cron reload% _$ `0 J% Y% P( |# M# [* c
*日志文件具体位置,以实际为准;本方法比较粗暴;6 W/ v, R' a" w2 b& D
0 m6 n# b( D' B- B( p
参考1:Linux crontab命令及其用法;
! W: a* l5 V# n4 W0 I0 {8 [: L1 `5 S3 @. b  \3 K5 S4 d$ `( h
journalctl 日志清理5 T! ~! v  ~8 v/ V/ ]
配置文件路径: /etc/systemd/journald.conf;
) u9 B9 j" g8 t6 R) C1 P日志存放文件夹:/var/log/journal;
2 ?( D/ X+ P+ _) c# @8 }! w; c5 m. D+ h3 h
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。# L0 b8 E0 E3 m* T
. k% X) l' O# u* E& ~* `
清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:+ l! F5 F6 s) t3 A' y
0 P7 W3 X- _% r( D2 P1 F  X
journalctl --vacuum-size=20M5 j' W& N7 ?! T5 I8 v
系统日志清理* j7 C) h, c( I; D! U
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。
  e! a7 W6 e0 T& q
# A4 b( V2 M( r. ^sudo apt-get install ncdu
& A6 B8 A% a! c7 nsudo ncdu /var/log #然后按i键- r; M5 Z7 Q5 Q3 V9 D
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     - _" Q6 ^/ Z) j; P: E6 D$ ?1 f
--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------$ x! E5 f" F" u& F$ j( U$ G+ [
   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            , `9 {- ~+ H& y  t# f
   16.9 MiB [###       ]  auth.log                         │                                                          │) }" t! Y& ?) ]+ c
   15.0 MiB [###       ]  redis_6379.log   
1 P" O7 C0 [* @5 \# [5 }...& P. |/ s- o9 n2 g+ o
然后进入 /var/log/
2 o6 i" b$ @% {" J6 \  s
! t; I; w+ @/ F6 k( r3 Dcd /var/log/0 N' \' V- v# w) K( R! f+ X  L9 H! u
> redis_6379.log" o1 R5 A# q5 E2 _9 T. d1 T
安装包清理1 }' T  b# x# V) W  Q
查看安装包缓存大小, u& B9 c2 V' `! K8 g

. i+ i: b) c, y$ F- tdu -sh /var/cache/apt/archives3 p+ a' q- N% N
使用如下命令删除已经安装过的deb包! |7 G. m7 P' p( p, G- L! X& i% P

; f/ P& V9 ]. @sudo apt-get clean# |! h( y( ~6 E/ a. `0 D
sudo apt-get autoclean3 P, l) [8 J, t
删除孤儿软件包 已经没有用处的依赖
) l; R/ q3 Y% o% r
$ J! [: X/ k8 D; R( N( |7 jsudo apt-get autoremove# ^+ V+ a- ^4 }% q. J5 E0 t
清除手动安装的依赖包
' S3 Y" O6 p+ h. K
, [6 J* U& q9 g, c0 P; cdeborphan
$ C7 C! j* p' {' O! f$ fsudo apt-get install deborphan
6 A- C/ V# `3 d' z, xdeborphan | xargs sudo apt-get purge -y
0 [0 m1 A1 [0 Q$ K- C% x! w. i( G$ \2 e删除大容量已安装软件包
4 i' @9 [- ^2 O- P, j5 h. l7 ~6 ]8 @首先安装debian-goodies
9 _1 F$ N2 N* a' o
1 S: S& g/ R0 H2 \3 g8 e$ Z1 vsudo apt-get install debian-goodies3 |# V8 s3 K- V2 ?4 v, h+ V
然后输入下面的命令
$ }* b( h/ P9 D* k2 U
+ D! ~% W4 {" ^( qdpigs -H: F' k2 d& i+ K5 ?
我的输出结果! }( n7 W) A% q5 A$ u' a
* @' f. r) K9 b' z' b* P
531.3M linux-firmware
; ?$ }5 d/ N4 A  e7 W" i( Q315.0M fonts-noto-extra
5 y6 h( {/ n5 `" }" h4 o& X0 r282.0M libgl1-mesa-dri
. R3 @$ w) r# H: i; ]214.7M golang-1.13-go
4 a( k8 ]+ I3 l, x212.9M linux-image-4.11.8-041108-generic
: ?% I8 A+ r3 Y4 x" m) X181.1M linux-modules-extra-5.4.0-60-generic9 |  y5 X$ G# B; L0 K
181.1M linux-modules-extra-5.4.0-59-generic5 I5 J6 F& C" \* M# ?: R& _. W6 I
181.1M linux-modules-extra-5.4.0-58-generic  O6 J" X5 N5 Q" s* c! |
166.2M docker-ce-cli
; V% r  }* a+ b1 y9 m123.3M containerd.io/ U2 S# L9 Q1 a2 t' W
上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个* X) `+ O+ a7 u, N, ~

0 F8 g$ ]/ r! i" Z+ U注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
$ k/ w7 Y4 ~/ D* `5 d2 W4 |dpigs -H --lines=20
5 c. l2 c: l6 j( i软件包卸载命令) V! J& i8 p# w0 p! @* L* b
/ R& ^. E$ {, j
apt-get purge #purge 后面接软件包名称
0 l$ N' N2 r% P+ M  ^5 K. bapt-get --purge remove #配置文件也清理掉 命令后面接软件包名称5 ~: p: f& q0 h4 M4 G3 t3 u
示范 以 删除 golang-1.13-go 软件包举例;
: E/ L# W: H5 R' n
- b1 ^0 c7 o9 croot@localhost:~# apt-get purge golang-1.13-go
7 V) D3 O2 p( M7 Y& G正在读取软件包列表... 完成
2 G9 i8 d( {6 t0 S正在分析软件包的依赖关系树      
4 M1 L; \4 B4 O" h; [9 f正在读取状态信息... 完成      
. p6 |9 @" Q' z9 V' B+ n下列软件包是自动安装的并且现在不需要了:& ]4 w! e& @$ n6 u  U# `/ B' M
  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src/ W3 I: @: N" _& ~
使用'apt autoremove'来卸载它(它们)。
  v! O7 g2 Z1 a# ]! |下列软件包将被【卸载】:* X7 o. A* i3 L' f4 `' O
  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
7 y( h) u# L0 S升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
% d" O0 T' o2 d8 L- U0 e; N5 ?+ G1 P  X' V解压缩后将会空出 230 MB 的空间。) O8 Z5 U8 \# M) V3 a
您希望继续执行吗? [Y/n] Y! m0 h' U6 E0 ]; [8 W0 H
旧的内核清理' [4 T, V9 V* L% l
查看当前使用的内核& u8 K: x  G5 J/ x, B
' F1 Y9 i" j  L* i1 P; s1 |/ i
$uname -r- Y+ k* @; \$ `' E
5.4.0-60-generic
. b  Q& I9 W( S- [$ [, g0 Q4 u$dpigs -H --lines=20" k  n& K7 k2 T. m% m
74.1M linux-headers-4.14.91-bbrplus
2 F" h/ O* \7 a7 V' y3 q2 i8 k" C5 s70.0M linux-modules-5.4.0-60-generic //保留8 ?- b$ l% h7 A- z8 n
70.0M linux-modules-5.4.0-59-generic //保留
" f  K3 n* R5 }8 r- i...
+ t3 f& d; }; _1 z看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);
" y# x  d1 i; l
0 j4 p2 R% Q% E  ~$apt purge linux-headers-4.14.91-bbrplus
& r" \2 {$ A3 z6 U" Q: o' A" _# P运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):& `  c* O( z+ L$ O6 I% s

. x: [8 E/ q- [  `2 y& x1 J' n1 e# N$update-grub% E) e3 V& Q. B, @  E. B+ ^0 A
Sourcing file `/etc/default/grub'
1 L. z0 |; R* i( qSourcing file `/etc/default/grub.d/init-select.cfg'
! j9 {. q3 J, y0 }* t( E4 N, h* D正在生成 grub 配置文件 ...! u' |. B( c' r8 m( M
找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在
. A* Z( K1 M% T找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic  ?" h: W5 I5 C: P" I: ?
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic. ~" c; r6 c3 |9 E3 y, Y! T
找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic
3 o+ {; ~% _" d& Z- d$ e找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
6 v. S5 Y: G' k6 k' t0 }* G" j找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic1 O& ~1 ]$ J- R5 Q
完成& N1 f( n6 r  S3 D& v
...
/ Z( _+ X, M) R, O- S
5 }  J8 r( s5 ~相关知识
$ x4 d1 l3 ^& q7 o  cLINUX的磁盘管理du命令详解
0 `/ T* l9 Y" j5 V4 \$ i4 M3 A3 _8 J: n; g; ?5 i2 X/ L
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。- [, G8 f- [4 D$ F% p

/ Q" ?+ K7 X( Z; W7 ~, m1 yDU命令用途$ U% M' G3 [- ]$ x( O8 ^
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。/ a8 T( v6 C& ?- t% v9 e5 K: b

  D. J+ t" `0 N2 T5 H找出大文件
4 ]( j% ^" ~1 a: d5 q. e磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:; o! d3 e  Y* l" F+ l4 z7 u1 n

, I* j- ?3 o: R  e/ F! m  R. e1 S: Ldu -s /home/* | sort -nr #/home目录检测
; `1 L6 S, h5 @1 f: Z! J3 z8 E2 l7 S4 I/ F- _
免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-11 07:58