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

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

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

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

等级头衔

ID : 1

管理员

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

发表于 2026-1-24 10:43:04 | 显示全部楼层 |阅读模式
免责
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)
5 p5 Z3 a; R  R. c8 z  o2 a- W) A0 ?' U: z
本文章实用性说明
  Y& A0 e' v5 c" A" U5 H1.检测Linux服务器的磁盘文件大小;! o/ A; X& h$ N
2.重点清理项目;+ n& ~( c! n1 a7 J; H. _' z/ n4 H

& H; z2 Z$ B* C6 W9 ^' U5 h2 _实用命令
% U0 H" r, h3 U4 R: U( ]  `! F0.查看硬盘剩余空间
6 q' C7 ~$ X1 b. _+ ?% F: `& k* Z+ V1 o7 j3 V7 V; y9 [  e
$ df -h #查看当前硬盘剩余空间并以GB单位表示3 p9 U3 G. F* K0 y. G0 h
文件系统        容量  已用  可用 已用% 挂载点
+ w9 k2 E7 H5 K1 N2 dudev            448M  4.0K  448M    1% /dev
  X3 }% o* p' c2 C; M; \tmpfs            99M  1.1M   98M    2% /run! x- [2 t1 q9 I5 T8 V8 J
/dev/sda         25G   13G  9.9G   57% /
' C, j7 g3 |' ^# Q0 dtmpfs           491M     0  491M    0% /dev/shm2 w) Q- a0 |  t6 O4 b
tmpfs           5.0M     0  5.0M    0% /run/lock( O' }+ v% V4 q0 G1 D3 S4 n
tmpfs           491M     0  491M    0% /sys/fs/cgroup
+ Q& W- s8 d0 I+ a. Jtmpfs            99M     0   99M    0% /run/user/09 m$ L( b3 L( b1 R2 N' N( w/ E6 Z
1.查找大文件
! t; y: h7 t/ A) N
9 V9 K' z/ W3 o: z# r" ]( Ffind . -type f -size +100M #查找当前目录100M以上的文件
7 z: z2 T1 p; h. U5 B2.对查找结果按照文件大小做一个排序
$ x1 h% q; `% {" a' ?0 f2 P1 q1 H- b5 Q( }& ?
find . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr
" h: C- w8 c. Q7 z4 w2.1查看当前目录下某个类型的文件或数量
  h" D$ l; X+ u
* y5 y5 i/ }8 j1 f4 h( Dfind . -type f -print | grep php
* c- x* ]* I" E$ F9 G& I7 |8 L9 X$ Yfind . -type f -print | grep php | wc -l/ o( |" ~5 @! w! X) [% ^/ E  Q/ c
3.查找当前目录下前20的大目录! B& x, @, ^# J9 {) f

" R8 Q2 J- Z6 idu -hm --max-depth=2 | sort -nr | head -20
+ V7 |7 a$ }+ [5 ^3 {* r1 P' [*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
% A' ~( z% v) q/ l; a
4 t5 N8 j8 g6 \9 F( I% L. ~8 J4.计算当前目录下所有图片大小,单位为MB;
; b) y4 ]4 U7 C2 J$ T4 ?4 b
' S# V- d2 q/ l+ O/ |8 E$ C) ^du -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'1 `; ~% f% f' P  y: ^6 [- Z! ^
重点清理项目
0 z- T5 m) z) R* r4 w% oMysql 日志' u5 f% N3 t) r
手动清理日志文件
1 I# K. M% u/ H2 T0 R" O0 Zmysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;
. L2 Z. c; o+ G7 A5 W  b% e4 O: ~
* R9 ~+ W7 }( S& f% O0 K& O5 d0 q; o1.登陆进入mysql,并使用 show binary logs; 查看日志文件。' G5 B  V2 q* z0 W; ~7 t! Z% }
, T& e6 x' ]. L4 t
root@localhost:/home/# mysql -u root -p
( b  V  ~' ^8 n# v$ i# \/ REnter password: #输入数据库密码
' t  T  ^* f$ Fmysql> show binary logs;
, D7 }% W/ p1 P- p+ F- T5 _+------------------+-----------+- a5 h" {9 A6 R1 {, Z! |" _( S! s
| Log_name         | File_size |
7 K7 v, g6 t% b% t$ `2 m- u4 s+------------------+-----------+
5 Q) R) [1 K& M/ g" R* M: u. n1 A( Z  || mysql-bin.001368 |   3175578 |
5 E$ t( Y3 g& F4 P7 `2 H| mysql-bin.001369 |    177599 |
- C7 Z2 \: n8 C- y! }; a& s+------------------+-----------+! h  [- `* |+ s9 U6 y- W! S
2 rows in set (0.00 sec)
% j3 ^" j, c: T* i, [( j/ X2.查看正在使用的日志文件:show master status;
8 ~5 u3 U& v5 r# h3 c- B' e; @% F3 K; h- S* T" s! ]& b* P; @1 k8 m9 D
mysql> show master status;% D4 g! {. l( a
+------------------+----------+--------------+------------------+: m0 ?* _/ j8 V& [/ G
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |) M# }8 i+ B) ^( d: u
+------------------+----------+--------------+------------------+3 Y& d: g3 s$ v4 b% ^+ ?* x) S- M
| mysql-bin.001369 |   348563 |              |                  |$ o: v* s- |0 b) _% j% d
+------------------+----------+--------------+------------------+
. n0 |7 U. e! O/ A- x4 H: [1 row in set (0.00 sec)
; S' e! g; W0 c- ~' Z( W: k如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;
' O# E% K% M9 u3 Y/ {, h6 g+ ~" M0 ]  q; u  S/ ~  u! m  ]1 }  T3 u/ b
3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
* e# t* K$ r; R8 i0 I$ ]7 I' E3 s/ V/ s, h: K% V1 O) [
mysql> purge binary logs to 'mysql-bin.001369';
5 G# c2 ~- ]6 [7 x: G- o8 o# O" QQuery OK, 0 rows affected (0.02 sec)
) _! \( r7 S0 H: ymysql> show binary logs;
0 z+ n6 E. [3 n5 @/ T0 v2 m. H$ v+------------------+-----------+& H0 ]# W7 {- I
| Log_name         | File_size |
" B1 ?1 X' F: ~+------------------+-----------+0 a, ?% O# a0 ~# g0 `8 x! }
| mysql-bin.001369 |    949552 |) ^+ {! Y4 j) N/ [* w
+------------------+-----------+( @% x& I/ H, P. \2 M
1 row in set (0.00 sec)
/ a" x0 c: p* i! R! p$ [删除完毕;8 S4 `# o) Y, D: z+ ^
/ l3 E' Q7 U5 i2 j4 J. [
定时清理日志文件
4 r! J& Y: v$ i+ p7 h1.主理人自己已经设置其不产生日志;+ w, k- P! L. _/ B0 @+ }
2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
8 z6 Q4 \* R. z2 L) S7 F' S, J1 R& H: G% X
mysql> exit
. I4 [( P( t4 a! nBye' {! {3 v* g/ Z; N* R
root@localhost:/home/# vim /etc/my.cnf* S' h4 I8 E. t( B- A5 j) t
编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;& ^+ I+ \; y" E9 U/ X' ~( ^
  M* `. _0 O/ V6 U
log-bin=mysql-bin" H. @! Z( u. ?0 z
binlog_format=mixed( [: i( P+ \1 W' I
server-id       = 1
0 L. f1 S% ?+ z. G, {expire_logs_days = 104 P' v% t7 E% k/ j1 \( v& q# i- n
改好,保存;重启 MySQL 即可;
  G5 i2 B) u6 Z5 V+ U4 l( j& ~( |4 o
root@localhost:/home/# lnmp mysql restart
( r1 R/ W- b4 W: E1 D1 O0 i0 X) o  K9 k或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;5 u4 k+ m; z; m6 u  ~5 k: Y
/ O2 v" D6 V& I  G$ e
##注释 log-bin=mysql-bin
8 R6 S0 y  r) n- N##注释 binlog_format=mixed
7 b; a% ]  ~: p, f0 W# _5 I参考1:Mysql 日志爆满,删除日志文件,定时清理日志% H- B( Z! E) s) K; i- c* h& _: `- d
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
% \% \9 v9 H' f5 A3 v, y' m5 o! E8 |, x' k  z
Nginx 日志7 P6 C/ z& G4 A: g) k
手动清理日志文件
- w2 @  t' q3 S# _. I. Bnginx log;0 V$ ]2 l% e  G+ {% X; h1 b. J
以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;
5 d4 j( D' B" ^! @9 S
% v2 {8 g1 W+ Z找到相关日志,直接使用命令 ls 查看有多少日志;
; C9 Y9 R; ]2 P: L0 u( Y. a$ q6 _% \/ F: P% {# E: s! F
root@localhost:/home/wwwlogs# ls/ U7 L1 i( Z" \2 D9 R& b, D! J
nginx_error.log) n& ?% e0 u' b5 Z
GeoLiteCity.dat         limbopro.com.log
! a$ v, ]" l5 N; T2 v$ e( Haccess.log              
, V( {( ]. m4 q使用 > + 文件名 清理日志文件;/ D/ n9 G$ ?4 q! I( a
; v/ n* A% Q1 V* X
root@localhost:/home/wwwlogs# > limbopro.com.log
2 K; o+ N7 ]+ xroot@localhost:/home/wwwlogs# > access.log 8 q/ R  z0 v6 N+ Z
定时清理日志文件# q" V5 w6 L% h" j/ w4 ?# ?% [
使用 crontab 定时清理日志文件;" [. i3 D1 b! ~* k) g
  K7 i5 J" M" T  B4 k) r3 \5 n
root@localhost:/home/wwwlogs# crontab -e8 D3 j2 X/ @8 d5 _/ K
添加一条,设置每日凌晨零点自动清空日志:4 e; ]. ]" s. t

! E" u6 {  |$ B+ P$ @0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志: b; g% t9 b2 D+ a3 z( ^
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志
" W8 @: l3 C  z3 n% Y* }保存,退出,重启 Crontab;' N+ E+ O* x- R& b0 I1 w

0 v7 a0 g4 l+ [root@localhost:/home/wwwlogs# service cron restart
) q* U# \) v9 n, b) Troot@localhost:/home/wwwlogs# service cron reload
, `' o9 y5 e! }" B% Y, T8 ?*日志文件具体位置,以实际为准;本方法比较粗暴;
" P0 Z. ~- O+ g! f0 a$ A, G- k/ |; I; m0 _3 U2 @
参考1:Linux crontab命令及其用法;9 N) s. V% {! i. B* y
* A1 h6 I& P/ Q2 z* @. ?' M& H" B
journalctl 日志清理
8 A$ l" u# V6 x" a) B配置文件路径: /etc/systemd/journald.conf;8 ^0 L5 u/ ^. h" Z+ y
日志存放文件夹:/var/log/journal;) m3 T+ \. T; ]
' R5 e: e0 s4 E# k/ z
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。: v! W, H' k6 V. y3 _" n. r
4 C: ~8 _+ x) p! Q6 d
清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:
* m) j6 j% s" e% ^- J3 u5 t" c! U. T
journalctl --vacuum-size=20M
& g4 c1 T6 n( G% K& D$ J系统日志清理
* @9 {& p; a4 ?系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。
! p5 L# B1 t9 B; D: N% ~3 y
( N  O7 N1 X' }' z  a" k/ Fsudo apt-get install ncdu
6 o) N+ g, b* j3 osudo ncdu /var/log #然后按i键: o5 d: h* |9 C  }2 q1 w3 B1 X
ncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     / v0 ^3 M! u" X8 B$ d
--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  E/ i, O/ Q: |& P8 u! G+ V5 a   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            
6 d3 |( B3 Q9 i  o- |   16.9 MiB [###       ]  auth.log                         │                                                          │- r# b4 [; [4 b
   15.0 MiB [###       ]  redis_6379.log   ) z- H9 }  w( Q  R' b# U' J
...+ f  |( g/ _( f  ]/ J0 W
然后进入 /var/log/7 B& l5 f( _3 q7 d$ C

; W; [! n: Y7 o" Zcd /var/log/
) N" L$ j6 y; h7 V. ]8 ~> redis_6379.log
+ t2 [0 p. A0 f7 H: q安装包清理+ u* [% H( |! i6 @/ ~6 a' g
查看安装包缓存大小
. x. R" P7 T) c. c. ]. ^  |: N+ Z$ N5 S1 V: X9 T7 [- k
du -sh /var/cache/apt/archives
5 E0 p6 v4 |% S4 Y9 W# _$ q使用如下命令删除已经安装过的deb包: \# X% u. I- i. x/ e1 z1 J) g

- X8 p/ @2 n) O. Ssudo apt-get clean5 z" a, t9 x7 C4 n$ h  N4 T
sudo apt-get autoclean& Q0 r% r1 X: T4 Y( s
删除孤儿软件包 已经没有用处的依赖
: L& F3 {; z% Z( r
5 a& }# W* g! d' u( i: P' x  Msudo apt-get autoremove7 a6 U& p1 p6 T4 |' Z! n; f
清除手动安装的依赖包
9 R) h6 e1 A# c5 j  d2 B/ ]  U* k8 S1 r2 L" M
deborphan0 M: Y1 ?# @8 V/ n1 S: z3 ]" a# f/ B
sudo apt-get install deborphan
1 k& Y! Q  |6 w( P8 w& |( e/ Edeborphan | xargs sudo apt-get purge -y
+ c- R+ ], J. R7 e, [3 S1 d删除大容量已安装软件包+ D6 z+ a( P0 z, _! B6 H9 d# m1 L
首先安装debian-goodies
) w5 K$ w5 |# r0 t! d7 c# ?8 L! Y) ^& f0 {7 Z
sudo apt-get install debian-goodies4 E7 Q0 E7 O( a8 f
然后输入下面的命令
6 R6 O* L  H0 K: B8 u; }# x
8 ^+ l" P3 M0 t% _' B6 K! M. P+ {dpigs -H+ ^# @* w6 ~% c6 H" s
我的输出结果  o, c, l. Y  |/ y/ W
1 S$ C8 o6 ^4 d  C4 k
531.3M linux-firmware
+ \( v. z$ e, S4 ]+ B315.0M fonts-noto-extra
& G8 K, i* Z* B2 X6 h282.0M libgl1-mesa-dri
2 |( \& q2 t2 \9 a% C214.7M golang-1.13-go
  t7 G2 j% o5 p- x; |$ q* L, G212.9M linux-image-4.11.8-041108-generic
3 g  I# [# B: @, i181.1M linux-modules-extra-5.4.0-60-generic
/ a; A/ X2 w' k$ d4 m% I7 f& k181.1M linux-modules-extra-5.4.0-59-generic
/ G+ Q1 }* t) P: C181.1M linux-modules-extra-5.4.0-58-generic
- B) D4 p/ q4 {) N  F! W0 g2 \166.2M docker-ce-cli+ l1 @5 @, b7 o1 P
123.3M containerd.io
2 d+ h9 k- w2 r上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个
3 T+ ?0 n7 U+ w
# q# x* O4 g# d注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
8 b  R* c3 L' C# }3 K: g: x+ ddpigs -H --lines=20' b# j* ^8 u$ F9 l8 g$ f' n. [
软件包卸载命令
' e) s7 n9 F2 b; _: K6 C  o% G& J& Q5 D4 A9 b/ ~9 z
apt-get purge #purge 后面接软件包名称* z4 q  i$ L  @. Y% f. F( l8 w$ Z/ r
apt-get --purge remove #配置文件也清理掉 命令后面接软件包名称- U' s. U) ]4 x4 y
示范 以 删除 golang-1.13-go 软件包举例;2 b- v. I3 O+ e* {0 U" x
. N  W! @3 v# M" ]- Y. i+ f
root@localhost:~# apt-get purge golang-1.13-go# S# X# ]& w" U2 [# {/ o+ X
正在读取软件包列表... 完成
. @% M4 {* `) V8 K' V/ U- B2 i正在分析软件包的依赖关系树      
4 l# H/ @4 T* {6 r# C1 o2 ?  o- V正在读取状态信息... 完成      
# p% @* `) A, }# T9 Y* m下列软件包是自动安装的并且现在不需要了:
" C0 h1 s/ Z8 s# n! I  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src
4 Q. l: }) \  G5 ~使用'apt autoremove'来卸载它(它们)。$ n% ?, z. N# c0 E
下列软件包将被【卸载】:
, G. h/ |2 h* Z  u6 z- W+ z+ o  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
7 ^: A1 Y: J( Z, f8 V升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。& i" n1 A' Y& h- ^
解压缩后将会空出 230 MB 的空间。
, P. W* h; s8 H- a! X* g您希望继续执行吗? [Y/n] Y
* N( I: J( x6 j: F% s旧的内核清理! [; A5 a/ D* C2 N
查看当前使用的内核
1 \. g- N  v- V# d# l) R* i" X  {; G7 P0 p
$uname -r: H1 N. K% F* Q; R3 g1 U5 S( {
5.4.0-60-generic5 t4 s# \" q3 H0 s3 h
$dpigs -H --lines=202 g1 V& E; v. ]! c3 v! b
74.1M linux-headers-4.14.91-bbrplus9 m5 ^! |6 R/ G7 e4 W, m$ y, Z
70.0M linux-modules-5.4.0-60-generic //保留
# `7 o8 V# S, G2 b  M3 V1 Q70.0M linux-modules-5.4.0-59-generic //保留3 h; |* C; F! Y( X) u
...
/ Q& X" }2 j! i" y( z看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);/ S5 X) s: o  u: d+ q+ v
, T/ C" A- }0 ]% Y( k' Q3 L
$apt purge linux-headers-4.14.91-bbrplus
9 {  A$ d3 j% r1 W0 m$ I+ J运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):# O- ~. N/ a& s0 z- V  A

0 L- G0 c" S/ C( m( X$update-grub
4 Z0 p" F5 N" F# P4 O+ WSourcing file `/etc/default/grub'
: z; X* ^1 T+ q2 Y/ c7 y8 ?Sourcing file `/etc/default/grub.d/init-select.cfg'
+ |8 Q" m' T& {9 `正在生成 grub 配置文件 ...
4 t) w* c# a: B; a5 J: E& E) y! v找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在 " k# B5 g" j- d: ?3 i7 n3 O, X
找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic
* \+ T! K4 h& p# k2 v2 G# E找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic
  a( C* N! u# z+ E找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic' r" T( S( x' G! Q/ k- ^
找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
$ ~7 T+ Q* N1 n: F8 s4 Z- x  K9 m找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic4 {: S. Q9 {3 H( E7 i
完成
8 t- x, C, w7 b9 |6 `- d...
! E; G8 Y# L9 m6 M
, Z1 y" D: G1 Z" p9 _4 ^* o' ~相关知识
  X7 l- D/ R/ a0 GLINUX的磁盘管理du命令详解
* B# [' T- [  q7 g! a3 W  f3 h/ h  S9 q/ \. K) {1 |
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
5 U. s; @( c. m' n% {$ V1 p9 U- ?2 c) V5 a! }
DU命令用途
& H" c4 e6 @) o* q- M& wdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。7 T6 d4 Y& M, Q& r+ B9 ?3 Q

/ ?  b! g+ D2 u2 F* s  \找出大文件) J% Y4 U9 d6 h9 r* z6 K9 q
磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:! }- M& c% p  G* a1 F" E3 z

8 {; Y) X  w1 o" ndu -s /home/* | sort -nr #/home目录检测! p$ U9 b" m9 o" R1 P; E# L1 D

0 B- ^) D' N  o& n- E8 G$ C5 L
免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-11 08:04