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

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

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

[复制链接]
灌水成绩
18494
98
19014
主题
帖子
积分

等级头衔

ID : 1

管理员

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

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

6 F' w7 R5 {4 q) O# i) {6 F9 s本文章实用性说明7 i9 b7 T& h0 l: h* b
1.检测Linux服务器的磁盘文件大小;' Z8 E8 w( O3 ~  {% ^; n& g
2.重点清理项目;8 S. g2 L8 _& o" N  e
. v  B& ?) t3 a7 l! q5 h+ N6 t2 [. F4 i
实用命令0 r. Y% r3 O2 s; H
0.查看硬盘剩余空间. ~- e8 C. O  }/ Z; \

( g: ^/ b6 U* d+ l" i$ df -h #查看当前硬盘剩余空间并以GB单位表示
6 K' p7 y# M( z" Y; Z9 P/ n文件系统        容量  已用  可用 已用% 挂载点  Y* M( X" {3 u; {5 z, g
udev            448M  4.0K  448M    1% /dev( u5 p7 ~9 i- ?* x2 \
tmpfs            99M  1.1M   98M    2% /run
3 I  C6 X4 H* ^5 a, |2 H/dev/sda         25G   13G  9.9G   57% /  M; d, x7 h- e3 A) |7 w) _
tmpfs           491M     0  491M    0% /dev/shm
# ?. t; P$ G+ w1 H% k" Dtmpfs           5.0M     0  5.0M    0% /run/lock
5 q8 t& P* |8 itmpfs           491M     0  491M    0% /sys/fs/cgroup$ V& W* ~; i: B
tmpfs            99M     0   99M    0% /run/user/0
- J/ w4 G  y1 [9 H) P1.查找大文件
4 ?6 b7 u$ c8 s/ Z% c% G/ c" a+ J  t; ^" ~. ^6 s3 x
find . -type f -size +100M #查找当前目录100M以上的文件
# W4 b- {9 r. e* X2.对查找结果按照文件大小做一个排序
; L, T. D: P7 C! y3 q5 c# O
/ {; Y' p, \- Z  |, d8 e6 x5 wfind . -type f -size +10M  -print0 | xargs -0 du -h | sort -nr7 K! b2 J: K& |" H
2.1查看当前目录下某个类型的文件或数量4 R- H3 \6 w8 c3 Z

' \$ l  }: S; |$ Bfind . -type f -print | grep php
" y' @6 e8 e  efind . -type f -print | grep php | wc -l5 ~$ f2 Q0 d% C0 j( g
3.查找当前目录下前20的大目录
: B9 W1 O# x: R: U: R& Y( t# d8 s1 ^+ a* m6 l: ~: E
du -hm --max-depth=2 | sort -nr | head -20; d) t, n9 R( \1 w% k: H7 k) Z8 ?
*这个命令我常用,先列出20来个大占用的文件夹,一一击破;
, Z, j; P9 M- D1 r/ s) @* K7 M  T/ c' a/ E0 s( u$ |. \% p) d  i( \
4.计算当前目录下所有图片大小,单位为MB;% \( W0 `0 r) P

% D+ ~+ Q3 H% O( i" v' K+ sdu -m `find ./ -type f -iname '*.jpg|*.png|*.jpeg'`|awk '{sum+=$1} END {print sum}'
' I% A- |5 y; [- T+ X2 d重点清理项目
3 S3 N- ?' U: t" F6 o1 KMysql 日志
  x+ W9 m& z8 b$ M2 ?手动清理日志文件
  S; {0 {1 R. ~1 E% e. gmysql binlog;我的日志竟然有7Gb... /usr/local/mysql/var 一般存放位置;( I! b5 t9 p6 ~$ c9 R4 A6 T

7 ~- w! i7 }8 v2 v1.登陆进入mysql,并使用 show binary logs; 查看日志文件。( _8 _4 _) R" `2 R/ P5 D7 O
0 e: U) X) K; P8 S2 J& W
root@localhost:/home/# mysql -u root -p0 R# N$ {" O, X: @
Enter password: #输入数据库密码
! u7 s7 [" W+ L/ [mysql> show binary logs;
/ r7 g# \2 p( Y5 I' [+------------------+-----------+  L* h. H; D4 ?( N: K8 L3 P
| Log_name         | File_size |+ z# `$ g" ]$ e$ H' H
+------------------+-----------+
, J3 j! J* I$ d1 Y' T7 d9 N| mysql-bin.001368 |   3175578 |
! r. s4 v  R4 C| mysql-bin.001369 |    177599 |1 t6 _0 h. O5 Q$ W! r& V; g
+------------------+-----------+
+ m2 {/ i2 L( Q2 rows in set (0.00 sec)
6 u; h8 L& r% J: t. Y. `2.查看正在使用的日志文件:show master status;) V( O* R5 W9 h; w: ?2 C
* j1 \% a$ d+ X( y- G
mysql> show master status;
, n1 U4 K4 B6 D! j+------------------+----------+--------------+------------------+* f% v) W/ V  a) G7 E% M  \7 G
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |3 t& b# H( [5 g& v( N* F, g3 M* h3 a  L
+------------------+----------+--------------+------------------+
- T, I  t5 c9 ?2 H| mysql-bin.001369 |   348563 |              |                  |
$ b: e8 r) I" v- v! t- A% N+ G2 b* k+------------------+----------+--------------+------------------+( }" Y, O; r8 O
1 row in set (0.00 sec)9 C& ]) H5 k6 S) m0 H" ]5 ?* q2 d2 p
如上,当前正在使用日志文件为mysql-bin.001369;那么等下删除日志文件应该排除掉该文件;) u( t" b/ Q  [8 f0 k

1 F8 M4 A* c8 o3.删除日志文件的命令:purge binary logs to 'mysql-bin.001369';5 l3 I7 P1 i+ \3 s, C

* x. O, _9 H& F* J5 l. x! B1 Nmysql> purge binary logs to 'mysql-bin.001369';' s4 O, s( A2 E0 p! l
Query OK, 0 rows affected (0.02 sec)
1 ?0 w7 Z2 v4 p9 B' |% L. E- }/ Nmysql> show binary logs;
/ n% Q- R7 v. m/ z+------------------+-----------+
' K1 |! t( \' Q6 v% p  S3 f. g3 @( V| Log_name         | File_size |
, z+ m' `( x5 F. e9 C+ a+ v+------------------+-----------+8 g6 x8 H5 R, U2 k6 n
| mysql-bin.001369 |    949552 |6 z! W* L, x% c! {4 `, _9 ~
+------------------+-----------+
* Y, y; r$ a9 o1 row in set (0.00 sec)
9 n- q% r' W; _+ N删除完毕;
5 P) x0 B: l6 W1 h; M
, h* v+ N0 C9 I9 l1 X定时清理日志文件
: ]$ e# r* d% q  A4 @. |1.主理人自己已经设置其不产生日志;
4 k( i. R7 C) i2 n2.编辑 mysql 的配置文件,设置expire_logs_days(mysql定时删除日志文件);
. ?5 G; G% b' @# B% p9 a3 J
, N0 h5 o, x1 ?mysql> exit
( c2 d, }# Q- M5 G' u) WBye- u8 h+ h( }3 t& k
root@localhost:/home/# vim /etc/my.cnf
% I3 E9 B  N+ |编辑 /etc/my.cnf 文件;找到 expire_logs_days = 10,这里设置的自动删除时间为10天;: E& I0 M: p& X+ F
" i2 v  Z# g5 C2 \( r  L, U
log-bin=mysql-bin
' I) M6 N1 A+ |- X3 M) T+ y2 V# lbinlog_format=mixed
, p0 j; w" ?1 \server-id       = 15 u9 a5 S2 N7 ?3 q* c! Z2 P
expire_logs_days = 10
% H/ l& n# R* ]/ M  k* s改好,保存;重启 MySQL 即可;$ {$ r6 J8 q+ Q8 V
% |% }8 b; a  n1 z) R$ Z
root@localhost:/home/# lnmp mysql restart
3 E7 o$ q. Y" I/ `4 M7 \" V或可编辑 mysql 的配置文件,注释掉以下两项即可不再产生日志,保存重启MySQL;) H& g2 E0 C  M4 p3 |& ]6 r" Q$ {
6 e- j- a% \& p! n
##注释 log-bin=mysql-bin
. x) A6 o& B) c+ l4 R##注释 binlog_format=mixed# w- K) J9 g( C$ v& U  N, ?, F
参考1:Mysql 日志爆满,删除日志文件,定时清理日志9 b5 c0 b8 G$ e
参考2:Mysql之binlog日志说明及利用binlog日志恢复数据操作记录3 L: p$ T& d$ f2 g9 p5 |# W" F
7 w. b/ Z7 p9 `! h
Nginx 日志; M; I7 t9 h" H) h  l
手动清理日志文件
) g2 s3 d, {+ T$ Z: V, _* gnginx log;
2 Q/ @. V5 g4 O以前博客被CC攻击/压测的时候每天产生6 7 8GB的日志/home/wwwlogs 我存放位置;
0 x+ L: i7 V. v& g& a$ x* f6 ?, `" c7 Q' g6 M6 D% D
找到相关日志,直接使用命令 ls 查看有多少日志;
5 A4 p3 l6 V" I0 l8 z; B+ h) x4 w9 B* d( q. `9 q
root@localhost:/home/wwwlogs# ls
# U2 k  q0 ?  xnginx_error.log$ c3 n( L; f* u3 j5 G
GeoLiteCity.dat         limbopro.com.log
5 l4 ~7 l- t0 s3 O: yaccess.log              
6 b' K' K: o0 u使用 > + 文件名 清理日志文件;
9 `! m5 W7 ]9 q/ l( b( u  V% T: [8 j4 @4 k
root@localhost:/home/wwwlogs# > limbopro.com.log
' e6 ]3 P. w; L! ^6 j+ m- S& b* x; froot@localhost:/home/wwwlogs# > access.log
4 F0 {* X1 J% U& Z$ V定时清理日志文件
6 X/ t; v  O5 d2 L, @使用 crontab 定时清理日志文件;! y0 w% ?5 j4 k4 d

! `7 Z' `4 }% q! g1 l1 j" Mroot@localhost:/home/wwwlogs# crontab -e: S+ Z& j1 K# u# a# M! q3 x2 F
添加一条,设置每日凌晨零点自动清空日志:2 I) d2 v# c, }) b
3 F  y0 Z% l/ j, c
0 0 1,15 * * > /home/wwwlogs/limbopro.com.log; #每月1和15号自动清理日志
1 `7 q# F6 v7 N* ^! F0 0 1,15 * * > /home/wwwlogs/access.log; #每月1和15号自动清理日志
% \8 T' y' D2 h6 B保存,退出,重启 Crontab;
& ?  u4 V/ a; `+ R, ?% l: Z
& d% ^1 f# e1 s* }6 R! Groot@localhost:/home/wwwlogs# service cron restart
% C/ n' Y$ m/ A$ ?8 I. ^root@localhost:/home/wwwlogs# service cron reload
! x, K1 L  M* ^) g*日志文件具体位置,以实际为准;本方法比较粗暴;" t) @: M5 g7 v: y$ d
8 Z! j/ ]1 [0 D, w! u" ?' Z
参考1:Linux crontab命令及其用法;& b( X+ i  p5 q
, |- W6 P, W. q/ v" P, `! E
journalctl 日志清理3 S1 w  F5 Z( V5 L
配置文件路径: /etc/systemd/journald.conf;* b% d6 P: O, G. [
日志存放文件夹:/var/log/journal;
- O8 Y9 n" I+ K
4 l0 c5 V6 X3 E. @7 Gsystemd本身使用 systemd-journald.service 来提供日志服务. 它默认以二进制的格式将日志文件存在 /var/log/journal/ 目录中。
. k8 ?1 C9 _9 J( p7 K
! x& w4 M9 C2 e( O) W+ ?1 F3 |& v, H清理大于20MB的日志,大家可以将清理命令放在 crontab 自动运行:
1 D  K) S( W7 o' U$ S/ ]  L5 n; i& L% u  F0 r- B
journalctl --vacuum-size=20M
. u2 ?0 b, x4 \" p% x% t( W4 R+ ~5 z系统日志清理9 T" ~7 g4 b1 l7 C$ t
系统日志位于 /var/log;日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件。6 W+ _* W' X$ t/ z, t

* ?" Q+ f/ l: k. D+ s" ~* Jsudo apt-get install ncdu7 u& T" X8 P/ V- {
sudo ncdu /var/log #然后按i键
, z2 _1 Q$ ^. Qncdu 1.14.1 ~ Use the arrow keys to navigate, press ? for help                                                                                                                     ) E' z, C' e. v# J- q
--- /var/log ----------------------------------------------------------------------------------------------------------------------------------------------------------------------! {% S, m) C$ ?' o  ~
   48.0 MiB [##########] /journal                          ┌───Item info──────────────────────────────────────────────┐                                                            1 s8 H$ `1 d6 Y/ u& y
   16.9 MiB [###       ]  auth.log                         │                                                          │4 p6 g7 p+ B! J+ R7 i! X2 h
   15.0 MiB [###       ]  redis_6379.log   
  @1 a! ~& l( h# |9 j" e...1 e7 u) ^( f0 N! z6 w
然后进入 /var/log/; }$ s& d+ S  {$ s
% L6 ]4 l! \. ]. L0 }: l
cd /var/log/3 p5 n4 T0 v# ]9 O8 y- s
> redis_6379.log0 Q3 c  G; z* w
安装包清理$ b. G% G. ^/ Y$ P
查看安装包缓存大小3 A* }4 i' K# K1 p+ Y; }. R' ~) W
. U5 e' j( p, g6 E) `4 l% I+ c$ l
du -sh /var/cache/apt/archives
  o/ i  m( e5 k$ i使用如下命令删除已经安装过的deb包# V  g- P+ U! W8 r' L+ [

" [# I! T) F; z, Z/ l; a# ksudo apt-get clean. I, n4 g: g7 z1 g
sudo apt-get autoclean' C6 ^3 ?6 v. i( G& I; ]
删除孤儿软件包 已经没有用处的依赖
+ C, `* F- _* W. A( n% k/ C& T6 u' O  j1 A
sudo apt-get autoremove# W: K/ w/ J  h
清除手动安装的依赖包
- q( ^: h' z4 u. x4 y4 A5 y- a1 F( e/ y) k
deborphan" Y- S5 ?2 K6 h
sudo apt-get install deborphan1 Q3 X2 ~0 B" C' A
deborphan | xargs sudo apt-get purge -y
' b$ t5 S8 @& }1 \$ @$ Y# |: x删除大容量已安装软件包
9 Y$ `& f8 @& o/ v3 T3 c% o首先安装debian-goodies
: c* L' _8 U/ m! J2 f, ?& g; K0 x: u) c2 f  d5 A: g+ c( k6 f" Z
sudo apt-get install debian-goodies
( D% K9 c; @8 B! h* z7 M然后输入下面的命令6 h5 k( G, H) Y( Z
& o9 \9 J. g. l, _7 F: [
dpigs -H
6 P$ V4 [. M1 D1 E2 e我的输出结果1 u4 I/ Y$ I( _0 ~2 C

" Z( P  y  X/ r; N2 M531.3M linux-firmware
7 Y* N% U, w) p+ [3 `, f315.0M fonts-noto-extra
  w4 m- B/ J/ N5 R% J2 f! _282.0M libgl1-mesa-dri2 G1 ^( W2 l0 {( Q# \
214.7M golang-1.13-go
, z) Y1 f! l5 Y! ]# `7 `212.9M linux-image-4.11.8-041108-generic$ P7 S; o0 e! r+ L( @  e' v* a% r' Y
181.1M linux-modules-extra-5.4.0-60-generic- m! k% R, `  a7 c; N7 d* K" p
181.1M linux-modules-extra-5.4.0-59-generic
3 t0 [. \, c- B+ M5 q181.1M linux-modules-extra-5.4.0-58-generic
5 W! u' _  p% U- b/ I$ R2 e166.2M docker-ce-cli9 o" Z2 v$ d( S
123.3M containerd.io
% P& h: a' i5 a. g- E上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个
6 O; ~1 e4 c! _0 |+ r7 e1 s% U; U1 A* q3 m8 F4 _
注意!linux-modules-generic 是内核,请先确认当前的内核是哪个版本,否则可能导致无法开机;见后文 旧的内核清理** 部分;
/ j) k8 I  ?' f5 k# q* {dpigs -H --lines=20
8 C3 m& o/ w, i& N5 X8 H7 F软件包卸载命令
7 H" }) n, [, _$ N- d- _/ V
* H/ X. K8 d1 `1 ^9 [! u& r$ N+ |apt-get purge #purge 后面接软件包名称
$ a2 G# u3 [' S1 x' M& |apt-get --purge remove #配置文件也清理掉 命令后面接软件包名称" ^( @( w4 t  b1 p: W3 q) W/ E
示范 以 删除 golang-1.13-go 软件包举例;* Z2 Y& }8 k8 G2 ^4 B/ T9 F

( E' q% X2 m/ i/ N( r1 r0 mroot@localhost:~# apt-get purge golang-1.13-go, C# ]. `+ f' n2 R6 d! j
正在读取软件包列表... 完成
; R! B- g0 `9 |, ^1 l  O正在分析软件包的依赖关系树       + K; J, \6 p" [
正在读取状态信息... 完成       $ F! \9 H9 |- c) {6 H6 J
下列软件包是自动安装的并且现在不需要了:
2 h, ?$ @3 n; F5 y  golang-1.13-race-detector-runtime golang-1.13-src golang-race-detector-runtime golang-src, ^3 E" x# {- }) i" h
使用'apt autoremove'来卸载它(它们)。# j9 `! B9 D" S: U8 V7 d9 f$ g
下列软件包将被【卸载】:
6 ~0 j" X; U& ]; g: \; f  golang* golang-1.13* golang-1.13-doc* golang-1.13-go* golang-doc* golang-go*
3 D4 N& h+ ?* G/ J升级了 0 个软件包,新安装了 0 个软件包,要卸载 6 个软件包,有 57 个软件包未被升级。- }8 O2 d; X% o4 o- l
解压缩后将会空出 230 MB 的空间。
8 ]6 d2 F/ N1 n0 e' u$ D您希望继续执行吗? [Y/n] Y
3 x. o" {7 V) m旧的内核清理
5 J# B8 Z3 f& F% a6 r8 V# z查看当前使用的内核  V7 J/ U/ O& U2 b' B% I! T) E

* I3 i$ l1 r( b3 F* `$uname -r7 F& ]8 A; _6 }8 R
5.4.0-60-generic
9 C% {0 N/ k$ `+ Q% ]1 J) u$dpigs -H --lines=20+ _: S* n) L- }1 ]% r2 K. h' R
74.1M linux-headers-4.14.91-bbrplus
( D. j( e4 j4 r8 C  q. F70.0M linux-modules-5.4.0-60-generic //保留
6 J& U- T9 {8 R+ J5 u- }70.0M linux-modules-5.4.0-59-generic //保留
" a0 }5 Z' l5 \- O- G0 n...
, M4 L" R/ {5 @, J看看有没有不再用到的旧内核,然后使用 apt purge 清理它们(从最旧的开始);
8 Q8 A! k$ D2 R' ]
, s0 t* `1 R2 W( y) x$apt purge linux-headers-4.14.91-bbrplus! S: v" I; y2 I
运行以下命令 update-grub 来更新和重建 GRUB 配置(通常在内核删除时会自动执行,但手动运行可以双重保险):
: C2 ~. N- t; f" {
4 S) p' p8 O1 }2 v/ E% F" t* ~$update-grub
; l7 T0 M+ z! n# i. @0 f: pSourcing file `/etc/default/grub'  S2 L* q8 i; ?# |/ @
Sourcing file `/etc/default/grub.d/init-select.cfg'5 ]/ _2 f3 [: u. R" \7 L
正在生成 grub 配置文件 ...
. \4 {9 \2 Y$ S6 H9 j% |找到 Linux 镜像:/boot/vmlinuz-5.4.0-60-generic // 还在 ! I7 a. R8 |1 u0 |4 u
找到 initrd 镜像:/boot/initrd.img-5.4.0-60-generic- n9 \$ c0 Z  u% E( X
找到 Linux 镜像:/boot/vmlinuz-5.4.0-59-generic
9 o, c2 }" g/ z0 k0 T5 I$ Q1 ~找到 initrd 镜像:/boot/initrd.img-5.4.0-59-generic
2 u* T6 r1 g# F& R0 F找到 Linux 镜像:/boot/vmlinuz-5.4.0-58-generic$ `% G" j* i: {5 d& |* Q9 k
找到 initrd 镜像:/boot/initrd.img-5.4.0-58-generic
$ ~$ X1 ?) D* x9 F9 v' y  _完成! u0 u* j( P7 Q8 d# j
...
( `: A$ o8 L4 {" [
- U6 Q% m( D! G' U相关知识
  [; E# z. x; O7 wLINUX的磁盘管理du命令详解8 @2 P+ @3 K; i5 Y3 E
' M4 M6 k& v9 g0 W* j6 w' d
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
% F; ^! i/ e2 X" }! S0 I
! b% I  F" A, T) u0 \1 Z, f+ ZDU命令用途! V: k0 k0 L9 y$ @- o) E6 K+ }# T6 C
du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数。
: W5 o0 m2 T+ P; ~7 ?7 E/ ^& W/ t/ F4 B
找出大文件
. \" u0 M1 v* d" P9 A磁盘空间被耗尽的时候,免不了要清理一下,比如说/home目录太大,就可以使用下面命令看看到底是谁:
! S& ?" a) ~: J( X" m5 |% q5 b6 F& I) n( I! H
du -s /home/* | sort -nr #/home目录检测
: ~8 `6 u8 O6 W/ D6 M, m) ^; M" i: V, h
免责
帖子地址打造全网最多免费游戏网站,部分资源失效,私聊站长补
今日来客 列表模式
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-26 08:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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