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

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

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

[复制链接]
灌水成绩
19012
118
19589
主题
帖子
积分

等级头衔

ID : 1

管理员

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

发表于 2026-1-24 10:43:04 | 显示全部楼层 |阅读模式 IP:广东东莞
免责
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)- h' C' m" q/ B; g, D7 N/ ?- q2 q
: H3 @$ d, q0 q0 {
本文章实用性说明# d' A- _+ F" x+ X/ Q6 z
1.检测Linux服务器的磁盘文件大小;
% X9 ?( f7 ~9 W7 |, P) [' P' k0 C2.重点清理项目;) w2 V# G' p( r, H$ E  _
( \( w3 r- T# ^$ [+ [; {4 a4 D: _
实用命令) S5 n/ Y: u) I( C: Y  t6 n
0.查看硬盘剩余空间
3 D: [' J7 Z7 D& M1 ?: G3 W3 ]. b2 [% M- d+ g7 {
$ df -h #查看当前硬盘剩余空间并以GB单位表示2 S4 w* w( ^) ]! s) z7 `1 f  e
文件系统        容量  已用  可用 已用% 挂载点
* C. X9 ~- l  `" Z6 C9 uudev            448M  4.0K  448M    1% /dev- ]) p' a9 I% i! t3 g; M+ X
tmpfs            99M  1.1M   98M    2% /run
5 ~2 {, f( j$ V$ J4 @/ ]5 e/dev/sda         25G   13G  9.9G   57% /
- C% m" E  W0 \+ g9 Xtmpfs           491M     0  491M    0% /dev/shm7 D5 r& J1 g+ e* A/ v) j1 g
tmpfs           5.0M     0  5.0M    0% /run/lock' ~3 y8 Z3 ?) m) o
tmpfs           491M     0  491M    0% /sys/fs/cgroup! b. U: Q/ {7 e7 X, a( a
tmpfs            99M     0   99M    0% /run/user/0
' Y2 X$ M- s8 ?" j: V1 e0 q& F6 G, }7 i1.查找大文件1 Y2 f$ i* G" k& ]1 p9 k

3 _+ D0 F2 I, u% ]find . -type f -size +100M #查找当前目录100M以上的文件! K0 S$ ~$ g& Z6 o% P% O
2.对查找结果按照文件大小做一个排序
: G7 c% y$ J  a  \
* Z$ b" E2 O( ufind . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr/ U+ U8 \  n8 `7 A% ]
2.1查看当前目录下某个类型的文件或数量! p; Y/ z0 |6 T
+ N# H+ Y) S, S: r: Z+ L6 [
find . -type f -print | grep php! l; L, M7 Q; n; Z
find . -type f -print | grep php | wc -l, r6 k8 z) J6 J8 h
3.查找当前目录下前20的大目录& E( R  M# k) }; v) c1 Q4 y
( g. h' {5 _5 S0 n$ i
du -hm --max-depth=2 | sort -nr | head -20% r) z) u! T& R# m. Q+ l
*这个命令我常用,先列出20来个大占用的文件夹,一一击破;7 y( ?2 H& L" p' q8 _7 F

! q% k8 w% ?. |4.计算当前目录下所有图片大小,单位为MB;
" t5 `  d/ ^7 |' L" U4 W5 A( }# g! g  C# k8 _) f5 x; o
du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'% z, J, K6 q7 O
重点清理项目- c, T, \4 M) X! S& j+ O
Mysql 日志) Q: a, Y% t1 h% D* W
手动清理日志文件
7 x4 C5 `2 h( b: g5 H' i; zmysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;7 f, x) n( ?2 z9 j
- D/ Q1 G9 a0 h2 a
1.登陆进入mysql,并使用 show binary logs; 查看日志文件。
% f( [6 P) S3 r& _- N# `- m3 p. u* z) h& g
root@localhost:/home/# mysql -u root -p; S: r* C0 @& R! U
Enter password: #输入数据库密码7 ]# n( y, R6 P0 U  _! U. {7 m* ?
mysql> show binary logs;; K4 O- i: T, H) ?8 F7 O
+------------------+-----------+
0 C5 `% F1 W( k. w2 i- M! w$ O| Log_name         | File_size |" o. }1 W: k' \1 b! }4 t) V: K
+------------------+-----------+
+ h/ K& J0 Y. ?( N5 d: Q| mysql-bin.001368 |   3175578 |
2 V6 e5 D1 h: o5 \* a4 w. ~| mysql-bin.001369 |    177599 |/ q  j5 r4 G7 D9 C) S  V/ l2 M
+------------------+-----------+6 z" Z6 Z- F9 O
2 rows in set (0.00 sec)
5 U1 p) U  F& W' p3 A# H2.查看正在使用的日志文件:show master status;; p, V, U9 K* a' _

( s9 ?+ B" r+ Z6 Qmysql> show master status;
5 P6 a  t- Q# v9 c% A" e+------------------+----------+--------------+------------------+/ M- p8 m( A0 H: f. W5 Q
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
$ Z9 t# [$ t5 l" u3 B3 `+------------------+----------+--------------+------------------+
4 W# V$ P: F+ g& X* G| mysql-bin.001369 |   348563 |              |                  |+ c- o4 n) y# P: d/ L% m( S
+------------------+----------+--------------+------------------+- ?/ K& f6 e( n' Q$ Y  [
1 row in set (0.00 sec)" S0 G% n( @- @& B+ c9 f5 [; S* s
如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;
7 e8 |4 s2 N- g( e/ b7 c0 a0 |) Y) W5 |3 G4 {. R2 T* a; S
3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
5 O7 g' l* N$ P1 D: u7 W+ |$ M
4 K% A  ]2 R0 nmysql> purge binary logs to 'mysql-bin.001369';5 \: z% A  ^6 w9 X$ z
Query OK, 0 rows affected (0.02 sec)) Z- U- E5 \" Q% u" M1 y% ^/ e4 w
mysql> show binary logs;
, b9 }$ [4 i5 A. I( {- Y+------------------+-----------+
) S' O: B/ J! i7 Y| Log_name         | File_size |' ^% H0 u8 K9 w" a
+------------------+-----------+7 `0 R, D$ V/ V& M  e, q. p) F9 M. W/ p
| mysql-bin.001369 |    949552 |
, ~; ~/ S" `# T* Z/ J+------------------+-----------+  t$ \1 B" W; p0 s% U1 z
1 row in set (0.00 sec)' s* V# e1 f3 ~  M
删除完毕;
% C/ ?7 ]! H  z  n5 O5 R8 i1 X" h' j! C6 o" e1 [( \6 P
定时清理日志文件
4 i% R) e" u9 J/ C1.主理人自己已经设置其不产生日志;
$ B2 @! |3 a( M& d2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
; @9 |8 o* s. K" W5 W! |: s/ b0 z7 J! A* m9 }
mysql> exit
+ W9 T5 L& z2 OBye
8 w# v4 W0 j& I- W# `8 ]9 ~root@localhost:/home/# vim /etc/my.cnf
# N* z8 R$ `9 B& @$ z: _编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;( L' Q! _5 p  n

1 X1 G1 p& }$ e5 L& S. Blog-bin=mysql-bin
0 I% M2 j8 j" @/ vbinlog_format=mixed
% ?+ @0 x. @# G: \  u* mserver-id       = 1  y& i; F1 O! G0 O6 m6 K8 u
expire_logs_days = 10
3 a$ @3 Y0 b! m* y改好,保存;重启 MySQL 即可;
. u& a5 q3 N7 B# t6 v6 P' I1 B6 W: K2 z0 ?/ s$ ^
root@localhost:/home/# lnmp mysql restart
& D( X/ U- l8 l1 i或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;- E6 x1 i8 C2 y& _- H
0 t6 k$ s, \0 p- V3 ]8 ^2 ]
##注释 log-bin=mysql-bin
- S" g3 {5 n: l/ l7 |##注释 binlog_format=mixed
2 B  U4 E" }  M0 C( Z1 L. W2 k+ o参考1:Mysql 日志爆满,删除日志文件,定时清理日志7 \1 Z- }# V5 \7 |
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录, r. X! S7 l! R

* ^& V  Z/ N8 @9 xNginx 日志$ O* j1 C( d+ R% `' I
手动清理日志文件- q7 o) h2 V; |1 t5 R
nginx log;4 ?  ^4 T+ d* m( i
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;! u$ E' C; R& a$ `
4 J  L, ]0 p4 b9 Y* ?: _% N
找到相关日志,直接使用命令 ls 查看有多少日志;- B9 S/ P" r( s% p

  i* o7 \$ f) S% l" {5 f2 ]root@localhost:/home/wwwlogs# ls! X8 p( T+ H( n" V& g
nginx_error.log
% U$ D7 p5 T$ DGeoLiteCity.dat         limbopro.com.log # ~4 {' ?- i. a! g$ e* y0 d" \0 J
access.log              
( E9 d3 I% l: w! G使用 > + 文件名 清理日志文件;
& p6 K% ~5 g, B+ T3 j
  s+ h4 C  r/ _+ }root@localhost:/home/wwwlogs# > limbopro.com.log
$ W' d5 B2 d, Lroot@localhost:/home/wwwlogs# > access.log
" M* |  ~2 v4 f0 x4 K8 p定时清理日志文件
. J( b  Y  W  g. W! O) J使用 crontab 定时清理日志文件;
( _( f% O3 S2 [& {, e
' S/ G3 ^$ Z1 c! V; w) q$ @root@localhost:/home/wwwlogs# crontab -e  Q4 R- P+ c% |' i9 `
添加一条,设置每日凌晨零点自动清空日志:# x6 }1 O' E4 t1 m) V

' v4 a, p; Z0 x0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志! b: s* P8 ^) d9 r
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志' `5 f5 Q! |2 x) [6 M8 X" ]% W
保存,退出,重启 Crontab;
0 w1 K. s2 [) A$ E6 c6 w- q
! |3 V0 n. l, v  _: f' w$ ~% u# \root@localhost:/home/wwwlogs# service cron restart
  y: x1 y/ v1 U( d4 x5 broot@localhost:/home/wwwlogs# service cron reload
& Y; K) A- K. z! p! s) t5 C*日志文件具体位置,以实际为准;本方法比较粗暴;' B' {$ w& z" B& k- ~+ }

/ r4 [# I$ y/ ^: E# y参考1:Linux crontab命令及其用法;- y5 ~8 Y: r* v: a
3 `% R" T$ U  c7 k
journalctl 日志清理
% |; B# C4 @( ^( I7 u) w配置文件路径: /etc/systemd/journald.conf;
1 g; C6 t2 k+ d$ U; N6 Q日志存放文件夹:/var/log/journal;( m' r& E; a2 k$ U# {) {3 F
9 Z5 ~) w! H# \
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。
" U7 W8 p) p9 A" @% l; `$ k' m  s, K+ K+ B
清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:0 U7 z+ J9 B2 c, A' a0 I

+ q0 S% c+ Z. K9 Z* }' C4 @) {& vjournalctl --vacuum-size=20M( `; f+ |3 N/ r, _+ m  }& J$ G
系统日志清理: g) s  ~( e1 c) e# `; y6 n- p. i
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。
' B; y9 X* Z) l" n: \* y' W) I; Z8 ~
sudo apt-get install ncdu5 B( m* j+ g7 I& j2 a
sudo ncdu /var/log #然后按i键5 Y7 B6 P8 b0 f7 P& h5 R+ @8 q
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     " Z; P2 V, d$ V# u: W: m4 Q9 n
--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
8 T2 O* u, V1 u3 X% [; i  F+ w/ k/ Y   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            
% U+ v6 m  \; j   16.9 MiB [###       ]  auth.log                         │                                                          │6 H( d3 [8 J3 G
   15.0 MiB [###       ]  redis_6379.log   * [; Q. c9 p% W$ C& Q* T# ^
...2 |2 Z# G3 g' c0 F& f- I* z( q. m
然后进入 /var/log/3 a: t& h# w0 I  T9 R/ D2 D, E! k
# p/ v+ {- |$ A" i$ O9 h
cd /var/log/
7 O9 b9 O5 }( v# n4 m3 g> redis_6379.log6 d( E% b; ]3 p) S5 H( W2 b& o
安装包清理
. u- i, Q$ {  s; w查看安装包缓存大小, x% h8 {1 u+ B# W3 E/ v

- q1 I1 I! @1 f" }du -sh /var/cache/apt/archives3 W6 W' p& ^2 {7 z5 a- ~2 `: {
使用如下命令删除已经安装过的deb包$ J6 Q0 o, K( m$ a1 {$ }
5 w: q$ z! D3 V, e! V! f; f" e
sudo apt-get clean
  U. o% Y( F# ^# @% ~# I  o, Lsudo apt-get autoclean
) z2 M- D) Z% G; u& Z& y删除孤儿软件包 已经没有用处的依赖; m% y/ W; s2 \5 G3 A1 d
; X, S3 h- ^# d. _
sudo apt-get autoremove
8 \2 s5 e7 R0 Q清除手动安装的依赖包
$ f5 c8 M6 Q8 V  M) f7 Z2 w1 P5 c) p) [% r& w# V( ~
deborphan
+ G# Q& J& }: W$ j; R/ [5 qsudo apt-get install deborphan0 B8 e" K* K4 k% W5 D
deborphan | xargs sudo apt-get purge -y
7 A# k8 ~; ~8 D5 ?* P) d3 p; y删除大容量已安装软件包
3 H8 K2 Q3 z/ n首先安装debian-goodies
: N+ G+ |+ n1 ~2 E+ ?0 }/ J  Z! |+ }: q
sudo apt-get install debian-goodies
# C  b6 }6 F2 _% V/ Y: g4 m然后输入下面的命令
0 z# Z4 O% f+ B. m  {5 I% w1 e
$ T7 `* E* H  b9 R# \" e3 e, m: W: Ydpigs -H
# f! @* |- b7 c我的输出结果7 }1 O9 ?: N' a: g- [* J3 z

4 a2 ^% j, @$ L; r! G3 a/ z531.3M linux-firmware
3 S7 E& e2 V" g$ O315.0M fonts-noto-extra
/ Z- S2 d- s9 i' D) ~0 q4 n282.0M libgl1-mesa-dri) O  h# W4 M% O2 n/ `
214.7M golang-1.13-go" ^/ @" |. y7 X' \+ R
212.9M linux-image-4.11.8-041108-generic1 K: p" b" O% o3 _9 ~- n! G% g+ e( `
181.1M linux-modules-extra-5.4.0-60-generic
; j0 R# G9 i  H% S" m" r& J( G, ?181.1M linux-modules-extra-5.4.0-59-generic
+ g7 A% L  o/ N181.1M linux-modules-extra-5.4.0-58-generic
$ K) C* X+ G; Z7 b8 T  i! `166.2M docker-ce-cli
; w) f) ~  }  \123.3M containerd.io0 ]+ j4 Y# I% R! G& l- y
上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个
7 r( W! p. N) \: K
5 G; B) }$ q$ I- a) y注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
9 U2 q6 c  C* F" p( w5 C% Zdpigs -H --lines=20$ B; e$ v- A2 @  v  z6 l7 U5 c
软件包卸载命令
8 m; D5 J  D1 |% T2 z- e+ E3 I$ T( j( F! ^# r8 S
apt-get purge #purge 后面接软件包名称
. Q; O, U- h! Z0 L/ gapt-get --purge remove #配置文件也清理掉 命令后面接软件包名称! q4 s: i- p' [, o8 B# n7 [
示范 以 删除 golang-1.13-go 软件包举例;  M* `! Q/ K" D+ I$ K5 r5 T5 W$ C

$ e2 ^' g9 E' s+ w# zroot@localhost:~# apt-get purge golang-1.13-go
6 A6 N1 R: l9 t正在读取软件包列表... 完成" t* m. k) r) X% O
正在分析软件包的依赖关系树       + }3 M' |- ^% d7 j
正在读取状态信息... 完成       * x6 n& V! N  g2 o3 _) O+ b% ]5 n. o
下列软件包是自动安装的并且现在不需要了:! H1 T7 f9 E9 F- ?& l
  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src* T: G# {! Q) r; q; C4 V
使用'apt autoremove'来卸载它(它们)。
) s/ h0 u! Z! G$ I3 A5 a0 D下列软件包将被【卸载】:
0 i1 n; U0 @: J. f9 ^: l5 ~  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
, E% ~9 X$ t4 P* \: L升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
2 M+ w. Z! p$ R2 N解压缩后将会空出 230 MB 的空间。% x! v  G) o) K. ^# s
您希望继续执行吗? [Y/n] Y9 \  N) l/ p) B+ o5 n, W7 t
旧的内核清理& }8 Z2 x6 P3 ?" Z
查看当前使用的内核
) c: n- `2 E6 q" p5 R4 n' Y) f5 r% n" q" p* p2 T
$uname -r; I% w5 y7 E. r! V% D. [3 k: M
5.4.0-60-generic& T: ^! J8 @- y8 O5 d* Z
$dpigs -H --lines=20
) a% S9 n/ u& h1 M74.1M linux-headers-4.14.91-bbrplus# v5 K5 J7 x7 g; J0 @
70.0M linux-modules-5.4.0-60-generic //保留
/ W7 i# l8 J1 B5 m" {70.0M linux-modules-5.4.0-59-generic //保留, h0 |. x% N! P2 k0 W6 M
...
8 `. {& O' f, R% n9 i& T; ?* M看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);8 m4 Q. N  P/ l' n: h. h

0 l* m/ l! m7 u% ~$ h$apt purge linux-headers-4.14.91-bbrplus( m, ~) C3 ?  s5 M2 i' p
运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):
( Y$ s1 c: ]3 N2 \; {/ `$ M2 n* W& |! f8 K
$update-grub  K0 b0 d+ t9 m3 `8 }6 G
Sourcing file `/etc/default/grub'% v6 D: h) _$ M1 d, w1 j; o
Sourcing file `/etc/default/grub.d/init-select.cfg'
0 l; U- y% i: q7 z! a& x$ I) T, I正在生成 grub 配置文件 ...$ z. I& q0 @9 o$ r, X3 R0 i( S9 {
找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在
2 a8 ^. l# `; ^4 M# }! y" b找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic) R7 k+ Q" i, F* I% Y
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic
8 O: e* ], ~2 V: M* Q( K* ?8 M0 s找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic
7 a1 x4 }' x3 D# N, u4 _找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
  o9 W  J$ Z& d4 a3 P  f9 f找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic
6 B# y4 @3 l4 }9 L& L5 M7 r完成4 F. z' r& i  r" H- ?1 `$ M
...
3 Q; u% q& T# [3 ^1 W4 ?% ]. G
: @9 K7 R, Q9 W9 j; O& }相关知识
/ b! u$ h# y- V! `+ wLINUX的磁盘管理du命令详解
* I3 `# ?' P- Q& V2 Z; ^
! b- ^; U7 k) c9 S; R: jdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。' E# `( N3 Z, u" x, S  t: y

1 m  I3 G9 [2 j& VDU命令用途
+ h6 i9 N8 x9 P! \6 x5 S2 ^du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
) S# A/ `4 x* G: q+ e4 h; k5 Y5 G7 |/ {+ a+ p2 S/ ]
找出大文件" m1 t2 j# i6 y' r* X$ C6 Q' J
磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:
; D7 P2 }2 u# y4 O
! L6 Z& s- R7 q* y# mdu -s /home/* | sort -nr #/home目录检测5 A7 G/ y" K# T+ g% o* \
# ~* w6 z4 P0 a6 l
免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
本月有问题处理时间8:00-12:00上夜班  9.7发布
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-9 12:04

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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