|
好的,在 CentOS 中整理磁盘(通常指清理空间、分析使用情况、查找大文件等)有一系列常用命令。下面我将它们分门别类地为您整理出来。6 w0 j3 u) a6 R: b8 m) u
1 o% N. o+ O$ N, N/ }. r### 核心摘要
/ v9 d& V& J. x
! [' v5 N/ ^; i+ j. m对于“整理磁盘”,通常包含两个层面:. l ]) H$ H3 V5 j& O
1. **空间整理**:清理垃圾文件、删除大文件、释放磁盘空间。这主要通过一系列查找和分析命令完成。: P/ s, |8 N/ L$ ^: B: j$ a- d
2. **碎片整理**:对磁盘上的文件进行碎片整理以提高读写性能。**请注意:CentOS 默认使用的文件系统(如 ext4, XFS)通常不需要手动进行碎片整理**,它们的设计已经很好地处理了碎片问题。尤其是 XFS 文件系统,它支持在线碎片整理(如下述命令),而 ext4 的碎片整理则比较少见且需要卸载分区,风险较高。9 ?; i0 J) l* B+ a
: J: V+ }) }2 v& G7 @
---
* J! u" M. X7 Y+ v( S1 `4 z* k7 `% W: ~
### 一、磁盘空间分析命令(最常用)
8 J2 M3 M1 C& g: }# L5 g, C2 V5 X) b$ n& C
这类命令用于快速了解磁盘空间被谁占用了。
1 e5 I9 g( F& g7 F+ H/ S0 J% B: ?* t1 _* v V; |" g
1. **`df` - 查看磁盘挂载点空间使用情况**
8 h0 S9 u% P j1 M' G5 V * **功能**:查看文件系统的整体磁盘空间使用情况。
0 L- K/ W9 u, s8 p9 L' i * **常用选项**:- z6 h9 l/ y: Y7 C6 _
* `-h` (human-readable):以易读的格式显示(如 G, M)。
1 N" c5 p) U- O; _1 v! g * `-T`:显示文件系统类型(如 ext4, xfs)。
" ]/ @# S9 d! b% F3 K * **示例**:& _1 Z2 k, j# H9 W
```bash) x5 K, c- D' m3 ~& p- e
df -hT' E1 `' w( J+ o) F1 }9 e5 s5 d, {/ [
```
8 W0 `' e7 I1 H# f, F: y% X* k * **输出解读**:重点关注 `Use%` 列,找到使用率较高的挂载点(如 `/`, `/home`)。
7 r6 W4 k8 }0 b+ r! Y; Q j3 T* H
* a* d8 d8 y7 o3 c/ D2. **`du` - 查看目录或文件的磁盘使用情况**
( X+ _ |3 j7 V S * **功能**:估算文件或目录的空间占用。& w9 O0 r* E5 K. P# L. C
* **常用选项**:5 b# c* j+ S) |+ h' u$ h" I/ V) s0 J
* `-h`:易读格式显示。& {, q4 A1 U+ U' M
* `-s`:仅显示总计,不显示子目录详情。
" e. U+ a6 a2 i$ f * `--max-depth=N`:显示指定深度(N)的目录统计。
" N& V5 u6 ^" ^5 r! I * **示例**:/ N3 g6 Z" n; G" G% G/ C0 L; n
```bash9 } b7 Y/ |0 N7 j# R
# 查看当前目录下所有一级子目录的大小
0 l3 w: i Q/ p$ S du -h --max-depth=1
& r: n1 B) g! x% m1 G5 F7 k5 D& m ) G, I& P$ H# g Y
# 查看 /var 目录的总大小
, v C9 @4 H8 m! a: U du -sh /var0 D; e9 T* @/ m7 S6 }9 Q% G1 m0 Q
( k2 N; q3 u$ l: }; t4 \& Y' j- ~ # 查找 /home 目录下最大的10个目录/文件& B9 |; r, n0 l6 ~8 ^! ]
du -h /home | sort -rh | head -n 10
9 Q C$ T( p% N/ [: `8 R ```& E- w W. u. t3 u; Q
/ W: v" U+ \2 q/ G6 @3. **`ncdu` - 交互式磁盘使用分析工具(强烈推荐)**
1 ~3 |1 B( ^( j" y' i; Y * **功能**:一个非常强大的、基于 ncurses 库的交互式磁盘分析工具。比 `du` 更直观,可以快速导航和删除文件。( A% v9 I9 V1 K+ {" w: g
* **安装**:
; b2 a* o4 a7 }4 _$ U! O ```bash2 |/ f# C+ _1 Y8 h, Y; l
yum install ncdu$ \- U+ p+ O3 U, y+ s
```! t* m; @0 }! T
* **使用**:
) c6 H+ E) ?2 _1 Q ```bash
+ a) S# e8 o0 K I # 分析当前目录
3 B$ M% z3 y' l, E- G ncdu0 y: i9 R- F+ |# P& i% V
# 分析指定目录(如根目录)
: Z! a' L) H- R ncdu /
9 G) Y' \$ T6 u8 k ```
. }* k4 R V3 V1 C- H$ f * **操作**:使用键盘 `↑` `↓` 导航,按 `d` 删除选中的文件/目录,按 `?` 查看帮助。- y7 w4 R0 L3 h7 }
( w% }. t } H1 _* N. P7 k---$ z5 x, u7 Q9 f. W( b
$ J: S0 |0 t/ l& o0 v1 C- b9 y4 W# U
### 二、查找大文件命令
7 Q( y+ n/ }. n! B2 o, k' i* w2 A
当你发现某个分区空间不足时,通常需要查找并清理大文件。
' g- `; H$ V; p% @/ e
- g8 e( o% Y( j5 {* i7 I1. **`find` - 强大的查找命令**
0 l0 N; g0 k& @( S4 t * **示例**:
6 C ]' o/ R8 @* x8 Y& K. C ```bash' N2 N; |. h+ W" ^ F, t
# 在根目录 (/) 下查找大于 100M 的文件1 H. _7 {- z/ Y8 C4 B
find / -type f -size +100M* _/ n( H6 l- R$ U; L4 I, U
7 C7 y6 n# S9 t7 v; }! [2 S
# 在 /var 目录下查找大于 50M 的文件并显示其大小9 ` f. @7 k. S- r' Q3 L
find /var -type f -size +50M -exec du -h {} \;
: t- I, o9 O: o* O + c. v( J. a# ?0 h4 s* C
# 查找并删除 7 天前的 .log 文件(⚠️删除操作务必谨慎!)& i7 S" j( s+ J; p+ F
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;; H1 f. @ T, B) h2 t6 d
```
2 r8 F( I9 r2 h- h9 X3 o
5 q7 {8 W3 ], E4 `% {2. **`ls` - 列出文件并按大小排序**
$ g: i+ G) G* a; |/ o * **示例**:2 y8 k( E# `' e$ F; S
```bash& E7 E3 e6 y/ u+ ^2 U" ^7 a1 T
# 列出当前目录下的文件,并按文件大小逆序排序, c1 ^! ~6 x4 y! l( E5 L0 X- ~
ls -lhS1 l1 C3 m8 I4 d$ Z
# 注意:ls 命令本身不递归子目录2 p3 |$ ?( h. G% ] k+ B+ f- O) f
```
5 V& A4 B! Y# b2 A' w
/ x6 u! p+ e; h4 t k9 R5 @---; w" L2 m T- o9 W: M! U" _0 Z9 i
) F8 i' x: L+ A
### 三、清理特定垃圾文件' a9 J; S# N3 ?
: L' A: [8 b! u# ]4 G' e系统运行会产生一些可清理的缓存或日志文件。6 y- m$ }/ E5 r& h8 t, q+ u: z8 n* m
& \$ G2 t$ }7 m# K+ l% z5 P1. **清理 YUM/DNF 缓存**7 h; _/ J) [+ C* L. M% }
```bash, D3 r5 D# z, `2 r* e! g, k
yum clean all # 对于 CentOS 7 及以下4 O/ W+ A7 C5 u- g( L# J- |
dnf clean all # 对于 CentOS 8 及以上
0 p8 B6 I! Y+ l7 }% r# T ```" Q; d3 V# E- D' b' @! ^) C
6 `% v% w# @4 p4 G) A' M2. **清理日志文件 (logrotate)**# o, X& H- U' Z7 c! v/ {4 \( e4 ]
* 系统通常使用 `logrotate` 工具自动轮转和清理日志。你也可以手动清理:
9 f+ c1 M! o. l2 q' s* [% d$ u ```bash
2 f" |* G' Y, ]/ |4 f# y( ^. y # 查看 /var/log 目录下较大的日志文件,并选择性清理+ ~! i6 B- J7 b6 k2 n; O: A
find /var/log -name "*.log" -size +100M
$ w! |0 U; S7 `8 n # ⚠️ 注意:不建议直接 rm 删除正在被进程写入的日志文件。, n0 P7 u& ^! ?) H& H. y
# 更好的方式是清空内容(例如对于 messages-old 文件):
; Z* s# e- t) g( N > /var/log/messages-old+ b2 {" b% m4 D7 P# v
```$ |9 @* O. K% R. Y4 f a6 d7 H2 p
9 O/ G! I6 J7 x- e7 T* y& v7 E3. **清理系统内存缓存(危险系数低)**
3 R: s0 ]( @# r' N: J; T * 这个操作**不会丢失数据**,它释放的是内核用于缓存磁盘数据的内存,必要时内核会自动重新分配。在系统内存紧张时,释放缓存可以让应用程序有更多内存可用。
/ J5 S |) B4 d$ I& h3 ?. Z ```bash G1 l1 g, m h5 w- M
# 释放 pagecache, dentries 和 inodes2 }# }, I) `- {- H" U3 k, S4 q! j
sync && echo 3 > /proc/sys/vm/drop_caches
$ \7 J2 g7 L6 a7 B7 Q ```; Y3 @ H3 c( y
* **注意**:这只是一个临时操作,主要用于测试或应急,不是常规的“磁盘整理”任务。* B+ a2 s; A4 Y/ A- t
! z8 b# A9 R1 ^4 L0 g1 T---
0 b" K5 @# Q7 b" M1 y2 G$ `) J! }. F ]6 q
### 四、文件系统碎片整理命令(特殊情况使用)4 F6 l% ?2 q, |/ V* d; r
& Q2 U# i4 a2 Y8 H
**再次强调:Ext4/XFS 在日常使用中碎片化率很低,通常不需要手动整理。**
0 E% V) m. r) P: l) r: F2 s
' s D6 G4 n8 o0 p* I! m+ {1 k1. **XFS 文件系统碎片整理**9 i l2 f' \- z# Z4 [
* **检查碎片程度**:3 B# X3 A6 g+ N- u# e9 W( R+ ?, ?
```bash
* J; v+ E& m8 H+ |! e2 X9 J0 ~0 A xfs_db -c frag -r /dev/your_device
* I' f' G% R+ a; J$ f ```
! D3 j. l. K2 n! |+ |2 ~! Z. J * **在线整理**:
$ f) V! Y/ ~- r- S, u8 y+ \ ```bash
7 Y7 ~! a1 G- h$ x xfs_fsr /dev/your_device2 m/ n9 _( O1 \% b5 m# o3 e }
# 或者直接整理挂载点
6 t7 T# f4 b, V xfs_fsr /your/mount/point: \! f z: B2 |7 X
```8 a0 J" c# e% d# t8 ]
/ ?) j9 P# G/ ?# b) e% O2. **Ext4 文件系统碎片整理**+ r/ l, K: U* I y& s. Z- f' J- Z
* Ext4 的整理非常麻烦且风险高,需要卸载分区。**极不推荐**在生产环境中使用。工具是 `e4defrag`。$ t* d6 A8 Z8 K/ A: S
* |: s6 e( f% ]; Y4 \ w
---8 O8 `4 x$ |6 @3 e8 e8 t
: V% P7 N Q2 R' r8 W) D, \### 整理流程总结) [* D# f0 L' m+ L
8 O Q: ]4 P: R, r5 x* B
1. **发现问题**:使用 `df -h` 查看哪个分区空间不足(例如 `/` 使用率 90%)。
/ S& m! B% C) D! |9 G2. **定位问题**:使用 `du -sh /* | sort -rh` 或 `ncdu /` 定位到是哪个目录占用了大量空间(例如 `/var`)。
0 i. o1 I+ J5 c* W! _! d# G+ M3. **深入分析**:进入该目录(`cd /var`),继续使用 `du` 或 `ncdu` 向下分析(例如发现是 `/var/log` 很大)。
% h2 k1 l5 E' k: H" i* h) @4. **查找目标**:在目标目录中使用 `find` 或 `ls` 查找大文件或旧文件(例如发现一个巨大的 `application.log`)。
7 U. y5 a p. w6 x5. **采取行动**:
- n& K4 [3 ~3 x& g$ N * 如果是日志文件,可以清空(`> application.log`)或配置 `logrotate`。6 _( D7 Y+ G% ^
* 如果是缓存文件,可以安全删除。8 A& \, @( |* F4 f; \
* 如果是应用程序产生的无用数据,联系开发者确认后删除。
0 t' |" a8 l: ^( f, e, U2 ]7 B3 F6. **确认结果**:再次使用 `df -h` 确认空间是否已释放。
- e+ q$ K' J Z/ ~. y4 f8 o( R5 ]' v
希望这份详细的整理对您有帮助!始终记住,**删除文件前务必确认其用途**,以免误删重要数据。 |