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

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

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

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

等级头衔

ID : 1

管理员

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

发表于 2026-1-24 10:43:04 | 显示全部楼层 |阅读模式
免责
再大的服务器,用久了磁盘剩余空间也会变得越来越少;何况我们大多数买的服务器本身存储空间有限,所以抽时间进行一次磁盘清理,将一些大文件删一删是很有必要的;(完全可以实现脚本自动化清理)0 k) d, N( S# ^, h' i

9 f( T4 R4 e% `" c( Q本文章实用性说明
) Z- r; M/ v* w# l" f# t1 L1.检测Linux服务器的磁盘文件大小;
- u! b- `# {& h- p8 u' [2.重点清理项目;6 I  t0 R* f5 j0 ~* n, T+ Q9 K" n

% A6 ^& W- c2 ]" |, d实用命令
( M5 v7 h- M1 c: a0.查看硬盘剩余空间
! {$ j& S  U: P- o3 F* w4 ~0 K. _
, y& P/ t1 l: q* g3 E$ df -h #查看当前硬盘剩余空间并以GB单位表示& ~. |3 A$ g; D2 \
文件系统        容量  已用  可用 已用% 挂载点
0 p; f2 W4 E$ n* n' Sudev            448M  4.0K  448M    1% /dev+ d# R( Q1 X" y# L# [
tmpfs            99M  1.1M   98M    2% /run
2 G9 b! ^8 ?1 R* \6 u6 c  N( N/dev/sda         25G   13G  9.9G   57% /
* z# [8 P) x! ]' o: ~' u4 C7 Qtmpfs           491M     0  491M    0% /dev/shm( s) s) T# V2 x4 O; J  r
tmpfs           5.0M     0  5.0M    0% /run/lock
7 c- z# B# H% I3 Vtmpfs           491M     0  491M    0% /sys/fs/cgroup
. e+ V+ O7 ?9 K& Utmpfs            99M     0   99M    0% /run/user/0; {: U5 b' w2 u# O& j
1.查找大文件6 D# p3 J5 K" `' t3 Y
- G) l3 `' @4 @+ H, x
find . -type f -size +100M #查找当前目录100M以上的文件
3 N6 P3 {3 B3 E  G3 ?0 l2.对查找结果按照文件大小做一个排序0 s# X* ~' T: z

% w# Y8 M3 @6 u* P. ]( r) d7 Xfind . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr* S) S3 F! W0 [* U. ~
2.1查看当前目录下某个类型的文件或数量' T" B. ?; d# ~

8 p' R4 ~; S4 x4 |' @find . -type f -print | grep php4 h2 g# n+ L+ W5 b" d  C& o. P; [
find . -type f -print | grep php | wc -l! ]1 ?% t9 ~/ a; C! N3 S: T: h
3.查找当前目录下前20的大目录
5 |$ g# m8 e( p% d9 I/ k% f' W; O; s9 m. Q* J
du -hm --max-depth=2 | sort -nr | head -20
& Z9 o1 ~7 `9 z- I  b4 f! m*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
6 i* \$ Z. j* K9 M" a
/ C) F- B7 \( z3 d" F5 b3 y% x4.计算当前目录下所有图片大小,单位为MB;' B# P1 c1 l- c( n7 j: R

* N% r  h7 b% t  Qdu -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'
* W# w% Q% R8 t重点清理项目& E; G6 c  y  Z7 q) n& H; \
Mysql 日志. A; \& [: g( N
手动清理日志文件- J+ Y6 S, x: ~+ O
mysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;* D7 i8 z6 M# Y) w5 p( q, {
% p' w4 w, R( Y9 v
1.登陆进入mysql,并使用 show binary logs; 查看日志文件。
- _$ D7 b2 v: X. W* o
6 U+ r. t! v+ [) V7 e: O2 b/ B! R( c# |root@localhost:/home/# mysql -u root -p
8 B9 ~. I- l1 R# TEnter password: #输入数据库密码
" `8 x' Y1 M# Y3 Q1 P: h/ Tmysql> show binary logs;- V0 c! P/ g. P
+------------------+-----------+
4 `( x9 a; D+ S3 J: ]| Log_name         | File_size |
0 r# f0 x% n, V9 P8 x% B+ g+------------------+-----------+0 r' I/ J- o! `9 R* b, J
| mysql-bin.001368 |   3175578 |( D' H1 E2 c1 m, D# E$ a5 {+ w
| mysql-bin.001369 |    177599 |
5 ?+ Z% {4 j# _+------------------+-----------+
! y+ _2 [5 B% N6 }/ g! O9 ?* f2 rows in set (0.00 sec)8 R1 B- D0 r9 O& D
2.查看正在使用的日志文件:show master status;5 X0 i( `" D# W1 g: v6 q2 u

" @, V% w& k4 h6 `- Umysql> show master status;( O8 C' m. v/ S& q3 b! C8 {3 q
+------------------+----------+--------------+------------------+
% e, l- C- |0 G8 h* l0 M. u7 D5 O: b| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |( V/ s  }0 E- B/ V8 i
+------------------+----------+--------------+------------------+
; H& @! r6 J* {/ \5 ?| mysql-bin.001369 |   348563 |              |                  |( i1 ]" W$ r6 i6 w
+------------------+----------+--------------+------------------+4 w$ Y; B# N  F( u9 i9 v5 f
1 row in set (0.00 sec)1 L; t: c6 s. \5 P. g/ X8 I
如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;
( q/ T2 N4 P5 b# u1 N8 J- t
- n) j$ {( M5 d5 A% A3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';
* K* \; k6 d9 n7 D( C5 K' ^( G! L5 x! w( X/ _6 n+ b1 J% m6 T: G# k+ F
mysql> purge binary logs to 'mysql-bin.001369';
6 I! `8 @# i0 y/ }7 P3 J! ~$ L+ H! iQuery OK, 0 rows affected (0.02 sec)0 Z. a5 k" t4 H: }
mysql> show binary logs;0 n, n: l* [( s2 Q
+------------------+-----------+
) [: C0 M+ a& x8 a| Log_name         | File_size |- b) v" S  p  u  A4 d+ O9 }# k' B
+------------------+-----------+. b$ @5 q# b. s+ B, n3 s4 E$ R( ]
| mysql-bin.001369 |    949552 |$ c$ Z9 t) z% F/ s1 t
+------------------+-----------+) I3 a! v7 L2 r, C) V
1 row in set (0.00 sec)
9 a% F- I! C' i0 Z! T- A7 U删除完毕;1 e: ]  L: B* S* W3 {! h8 c

7 n* U8 z9 g4 S7 O+ Z$ q, Z3 [定时清理日志文件' D% t9 s, G' I$ I- j7 q
1.主理人自己已经设置其不产生日志;
& i: ^5 q$ D* e5 t  y2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
+ F9 \0 I! `5 }0 B& @  y0 A) W- s( w( ?) u+ ]
mysql> exit
! |! w" ~$ ^" O% {" \7 _Bye7 N' l6 u) ]: w8 X9 m; K0 x# p
root@localhost:/home/# vim /etc/my.cnf( L6 y; k* N+ j0 M+ r' f
编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;
* D" B4 B5 C' |% m9 m0 a& e5 Z3 B) j& ]: Y/ X
log-bin=mysql-bin
; ^" T9 F. R+ j( U2 `binlog_format=mixed
/ m3 y: R0 i; R4 K  Y3 Mserver-id       = 13 N2 r, |% V, Y7 @
expire_logs_days = 10
6 ]2 J* u) u# R+ P( c改好,保存;重启 MySQL 即可;
9 z7 a) K% ^: \- ^! C! _( m
& r0 U8 |* g! T4 s0 F7 T- A) ~root@localhost:/home/# lnmp mysql restart2 x9 p9 A) H/ k3 a% y. s  f- Z
或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;$ a) `) l. O3 j8 }4 f0 o

% K1 }! X' ?& h% i2 }##注释 log-bin=mysql-bin
' z6 Y* O* j* O, Z6 d) J# ^* ^##注释 binlog_format=mixed$ h  `. M' \8 g$ e
参考1:Mysql 日志爆满,删除日志文件,定时清理日志2 F* F- J8 }8 ]" z  g
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
' c! v( g9 C. B9 j3 ?1 K0 N, E
9 k& T" F7 v9 W2 {  M% G( a% vNginx 日志
- u3 ~  K" e  {, s% O手动清理日志文件' [* W( {2 g+ G( p) c* d. L$ k! j
nginx log;
+ q: D& O: X" R  \0 b7 L, n  a以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;8 f, h7 ]3 Z4 ~+ b/ E$ Z, d
% n9 G. ^7 H; ?9 `, r
找到相关日志,直接使用命令 ls 查看有多少日志;
6 C/ F& v6 z! t% S1 I
: n/ s. M! q& }6 X" ?root@localhost:/home/wwwlogs# ls
6 N9 H* i+ J/ V$ |nginx_error.log
. p- p' @6 \; p0 n( ^GeoLiteCity.dat         limbopro.com.log 6 A9 d# K; {" |# H5 H8 a! E6 A
access.log              
% D) ?  x7 h6 ^) V$ J& E3 A使用 > + 文件名 清理日志文件;% A0 I  \6 d% G' d0 T/ G& B

! H4 n* E8 I* W$ ]+ `; ^6 Aroot@localhost:/home/wwwlogs# > limbopro.com.log! G8 H" K* a. f: Y4 d! }2 B& e. K
root@localhost:/home/wwwlogs# > access.log
& G# r* y4 o: X& y- ]定时清理日志文件
, Z' ^, k9 h4 A  \2 o使用 crontab 定时清理日志文件;7 i3 P: |& L6 |6 B

( Y- N7 Z+ P9 b4 m9 wroot@localhost:/home/wwwlogs# crontab -e8 J2 y9 d! W; c. ^
添加一条,设置每日凌晨零点自动清空日志:) Q, Y5 M% ^6 K! b) V0 |
/ s5 r) ^4 L# d: A
0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志8 f# I. u* r' _& |( y
0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志8 u+ d, j; k! z) L0 l! ]
保存,退出,重启 Crontab;
( c& E- A0 t/ T3 l: c, w* c# _0 S5 w* `" r! m( R/ M! Z
root@localhost:/home/wwwlogs# service cron restart
6 j' _* L' r* v6 P$ |root@localhost:/home/wwwlogs# service cron reload9 ?/ S7 R; ?. t8 u/ d% r
*日志文件具体位置,以实际为准;本方法比较粗暴;
. F2 k. e5 j) o: O* M  X" L$ m, F7 ?
参考1:Linux crontab命令及其用法;
2 f4 |# `% M) ^) n( `
. F" j( ]2 a/ q  fjournalctl 日志清理4 o. F" Y- }" ~5 S
配置文件路径: /etc/systemd/journald.conf;& o& L4 k& w: L2 W: T+ ~
日志存放文件夹:/var/log/journal;! @; _& e2 {: k1 Y+ r
( i, `9 F& s* ]) w* [7 _- x
systemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。9 I* K* a+ D, t2 Q

/ L  G) M# o! w2 ]# j清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:6 D/ f/ \0 \0 L( X' c, _# e
8 I3 {- u5 V- `
journalctl --vacuum-size=20M
! o4 Z- L% V3 f) K/ S; `系统日志清理- J9 }* }1 S0 E. }& _" C
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。5 P9 u3 {& W4 x. `  o7 H+ N; h

& b, t" E3 B' M; P7 i6 s; g0 qsudo apt-get install ncdu" B4 U! g; F) }. x4 j7 N
sudo ncdu /var/log #然后按i键
( E0 b% m! A7 k$ i4 O8 jncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     
" F: C1 I) {7 w7 [, Q; F# s--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
3 |0 J6 x: v* f& s# k   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            5 j2 [' u' j. L9 e5 v8 O$ ?
   16.9 MiB [###       ]  auth.log                         │                                                          │9 q9 A- e4 ]- Y: d% s
   15.0 MiB [###       ]  redis_6379.log   / j1 p; T" O) z( a8 U3 f2 p* [
...
0 d7 }6 h$ O2 z( d+ l% a* Q然后进入 /var/log/
3 U3 L# y; H4 x1 K% r, v9 V
; f+ J# o7 k- B; O; [( ]cd /var/log/( @& Y2 U" Q- r0 b% o0 G+ Y
> redis_6379.log
: ?7 E0 s, n6 ]5 b" o. t9 [6 d9 C安装包清理
% s0 \& O0 Q9 J+ C/ o查看安装包缓存大小/ j2 Y# E" B( T

6 \& \" ^7 R- Q7 Sdu -sh /var/cache/apt/archives9 B7 D8 g0 V- z" K
使用如下命令删除已经安装过的deb包
& D. E( R7 V" q" j* z7 V3 ^7 B: q* |1 K
sudo apt-get clean6 o1 ~4 k3 k3 E- _( H0 d: m
sudo apt-get autoclean$ U  D, O& w1 Q7 O* L
删除孤儿软件包 已经没有用处的依赖
5 M" Q3 W" H& P8 F" V) t
0 c+ v, Q" C, Xsudo apt-get autoremove, @$ i+ I# F8 n0 {3 H* q
清除手动安装的依赖包7 \8 P; u4 k3 z' w0 O- K6 O
  k; f7 ^. f$ Q$ J4 T
deborphan( ~& f) i) \2 s) C" n
sudo apt-get install deborphan+ B3 m1 ^/ q8 w9 l4 a
deborphan | xargs sudo apt-get purge -y
/ h) D  }. d8 W! S" q删除大容量已安装软件包
4 x$ U5 v/ ]5 J8 {" t' n首先安装debian-goodies2 _1 s% Q; @& D% |. Y" r
9 l8 }5 R- k/ p4 ~3 D
sudo apt-get install debian-goodies
; E/ |5 {# `9 j  W5 k# Z然后输入下面的命令
2 n& a: T2 I) h) e' S; s$ `+ l' i, }% e- F2 b
dpigs -H$ O8 {& C  ]0 F6 s3 t
我的输出结果
5 ^9 p2 ?1 c8 K5 e7 x1 l2 F- _* D
+ d6 q# \7 x8 S531.3M linux-firmware
/ z' e$ \( S5 P  B315.0M fonts-noto-extra
8 b+ D1 Y2 g1 x- @7 O8 z! I282.0M libgl1-mesa-dri
  v* K. x! W7 \( m214.7M golang-1.13-go% J" u" g+ W, p9 ^: P
212.9M linux-image-4.11.8-041108-generic1 P0 I- n$ \; N5 l7 Z4 t
181.1M linux-modules-extra-5.4.0-60-generic) z! A+ R' N' L9 t
181.1M linux-modules-extra-5.4.0-59-generic
8 M, d" E% R7 Q5 f181.1M linux-modules-extra-5.4.0-58-generic
" H  V. T% J. q8 R166.2M docker-ce-cli
1 Z; \' u0 a9 p+ N" J1 Z123.3M containerd.io
( Q3 K5 v: `* w+ _上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个
5 \; I4 e, f# u* @- R1 f, O+ S/ T
2 q) P: G' ^" w% Q8 Y注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
! i$ B/ j& R% ~1 z% d' ?" |: ydpigs -H --lines=200 P2 l8 f6 F& x3 Q$ }2 S6 }3 Q
软件包卸载命令
8 n0 s  @% P! n# X& r% a* O$ a8 K4 {7 l6 I; d, W9 f  ~9 p0 s4 c% R
apt-get purge #purge 后面接软件包名称
! G6 L% u4 `0 W) T& wapt-get --purge remove #配置文件也清理掉 命令后面接软件包名称
, c4 M; U; C$ i0 p4 t示范 以 删除 golang-1.13-go 软件包举例;' q* V3 ]  f  |+ Y
8 a9 p. g# Q& I( g
root@localhost:~# apt-get purge golang-1.13-go, X+ [7 j7 A+ t8 b  @3 J7 {
正在读取软件包列表... 完成
# I& p# ?5 W  y: a正在分析软件包的依赖关系树       0 M! H3 K1 i0 a' d8 x- ~
正在读取状态信息... 完成       $ `: f1 f( l& W$ ]( o$ Q& l! M
下列软件包是自动安装的并且现在不需要了:" Y& G6 d' D0 F) t: I
  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src2 Y' Q) W( d( Y# {
使用'apt autoremove'来卸载它(它们)。
8 [& N3 Z8 q2 b% ~0 [下列软件包将被【卸载】:
4 w; c5 ^( h' A# s: s  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*# C: p/ S3 o: R! N/ ?# k" M
升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。
1 Z2 F: t4 O! }9 d: b/ y解压缩后将会空出 230 MB 的空间。
% t% e. D6 n8 O5 u2 U" q. p2 v) ~) N) ]您希望继续执行吗? [Y/n] Y
1 o; ~# ?$ h$ h, @; L旧的内核清理. `6 \9 Q+ D% b. e, z# M
查看当前使用的内核
2 {5 C5 ~4 a% ?" H* G
1 T- s. o9 }* D$ ?/ j' q$uname -r0 c* A, R2 Z7 h- {* n: r
5.4.0-60-generic
" U/ p; _. b& X4 Y$dpigs -H --lines=20
* U8 i$ J: J2 _+ J6 R74.1M linux-headers-4.14.91-bbrplus; I& ?& F3 D8 B) e
70.0M linux-modules-5.4.0-60-generic //保留% n9 P8 U2 Y; f1 V" j/ [+ m
70.0M linux-modules-5.4.0-59-generic //保留
' d3 Y) c- D  u: Z...+ ?' G* B  m4 L5 G- w
看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);# b3 j7 p; V9 o/ p

% W- m' L9 y- N4 P3 [4 X; C$apt purge linux-headers-4.14.91-bbrplus  E( g' x; O$ F3 E
运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):
( k. N9 w4 y( C& b( l1 f* m
6 ^) z* }- D- H: L+ l$update-grub
7 a' z, j  E# ~; I# uSourcing file `/etc/default/grub'
$ v5 P4 c) v* o7 R8 K% wSourcing file `/etc/default/grub.d/init-select.cfg'
* c9 C2 G& ], O( ~: x) @正在生成 grub 配置文件 ...
; y0 W+ h. r7 g. n2 Q+ d0 ]找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在 3 L4 u# B- L: x" s5 L/ [* m
找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic
4 G! F* G& u" T- W/ u# y; {/ R0 z7 h找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic1 w/ N& R3 h% b6 l7 u) j
找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic
, ^3 A  v, J) ?  [9 b; x找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic
: ^6 M% n2 Y+ y. F; g  O" f9 \, |2 q找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic! {  C6 [" a9 e; y
完成; s  X0 F# W+ {) M0 b# F2 b) x
...1 h" C+ b' c& M' T

3 ^! U3 [+ R/ ?# y相关知识. z* |8 v# @/ u" ^+ k
LINUX的磁盘管理du命令详解
2 g2 f& ^% b# b, S1 L5 _
' U6 x/ \) R0 e5 l. mdu(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
' J. [% Z* k( N& ~& m- h" e% \
0 H4 V/ @! N+ C2 y0 o% BDU命令用途
3 P- f1 ~4 j" G: D2 A( _du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。# s' ~" W* B* P* @8 h. a) T7 _

$ t4 M- C( }1 U1 n/ W找出大文件$ Q: B4 W1 L- ~% V5 E& o1 s" s. B
磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:% [$ C6 H  s$ ?% ~- @/ A' d
' K5 V9 |, o1 G1 X
du -s /home/* | sort -nr #/home目录检测: D: l  @7 R' k

& Y4 o- I' }2 A8 D4 K" A; Q. T
免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-11 06:42