|
好的,在 CentOS 中整理磁盘(通常指清理空间、分析使用情况、查找大文件等)有一系列常用命令。下面我将它们分门别类地为您整理出来。0 K. F6 A9 s( f
" }; C3 z' H+ l4 t9 M7 @### 核心摘要
* E4 h/ b- o6 X* |0 K( B/ w- l* \: e q9 f+ V: m! S
对于“整理磁盘”,通常包含两个层面:
# a0 h1 O6 O7 L+ \: a1. **空间整理**:清理垃圾文件、删除大文件、释放磁盘空间。这主要通过一系列查找和分析命令完成。
4 f$ V+ Y; z3 C2 I" b( n/ H# d$ L2. **碎片整理**:对磁盘上的文件进行碎片整理以提高读写性能。**请注意:CentOS 默认使用的文件系统(如 ext4, XFS)通常不需要手动进行碎片整理**,它们的设计已经很好地处理了碎片问题。尤其是 XFS 文件系统,它支持在线碎片整理(如下述命令),而 ext4 的碎片整理则比较少见且需要卸载分区,风险较高。5 ^+ W k4 E, W* N
- K E7 q! U+ F) g6 ?+ i% |* y---
/ e) \; |' \! i; F5 H- U( k+ k1 G- J6 m* h) t8 o8 S5 d: ~$ A2 ? `
### 一、磁盘空间分析命令(最常用)
! e3 x% J ~/ S/ K! t( Z4 V. N3 E% Q& g1 C) e0 Y N1 Y# W
这类命令用于快速了解磁盘空间被谁占用了。
5 k! E, D3 d7 O8 H& p0 P
2 g& l6 J- s. ~1. **`df` - 查看磁盘挂载点空间使用情况**' |* P- o3 P, ~* g% u8 j
* **功能**:查看文件系统的整体磁盘空间使用情况。) _, a) V3 ~) @/ N k
* **常用选项**:
. k O( d6 ~4 o) v8 m9 Z" T& x ^2 @ * `-h` (human-readable):以易读的格式显示(如 G, M)。! @* @2 l- v' f, C
* `-T`:显示文件系统类型(如 ext4, xfs)。; p2 U! y' d3 Z+ n/ g" c
* **示例**:: }; D( C! A j% e* q
```bash& @$ `& @- ^0 ^& ?- Y
df -hT
7 i. _' T( P. Q, Q1 E ```% ?/ v5 a0 a. y# U7 ?! ~/ |
* **输出解读**:重点关注 `Use%` 列,找到使用率较高的挂载点(如 `/`, `/home`)。
2 X/ K' x6 D$ {: H* v- d$ ]8 [- m
: Z$ g0 [6 W# U/ K4 U! z: S& V% Q2. **`du` - 查看目录或文件的磁盘使用情况**
% q r/ `' Z" Z * **功能**:估算文件或目录的空间占用。+ ^3 m4 }& a8 x: ^
* **常用选项**:
" L( d* U2 n; O * `-h`:易读格式显示。
?8 U: h0 O+ G# ^) F * `-s`:仅显示总计,不显示子目录详情。! q3 f) h* r% l: u. _; I9 B. _, G
* `--max-depth=N`:显示指定深度(N)的目录统计。
1 C. H0 p5 y( O+ w: S' q* g, T * **示例**:
$ q3 k/ ~2 v* o% q0 a9 O ```bash+ Q( @ ?$ }' F; s% U) C
# 查看当前目录下所有一级子目录的大小
5 I% ^$ K9 H0 n4 K+ k% \2 }9 z du -h --max-depth=16 t6 ~' t) W0 b; c8 D
# l) i3 s, o7 G1 D# l% g3 v; ^ # 查看 /var 目录的总大小# P4 B* ^2 H$ e: c
du -sh /var: L1 Q. ?+ N' G! T& ]9 a
% c* B) x* _9 T" W
# 查找 /home 目录下最大的10个目录/文件
6 x9 U) v/ s9 T du -h /home | sort -rh | head -n 102 U7 A0 A r$ O$ I: K$ z9 A" b
```7 A. O/ C$ q9 `; V
! [- F$ n# T/ H' e7 F: e8 {3. **`ncdu` - 交互式磁盘使用分析工具(强烈推荐)**2 d6 ]4 H: u+ _5 |" u/ [
* **功能**:一个非常强大的、基于 ncurses 库的交互式磁盘分析工具。比 `du` 更直观,可以快速导航和删除文件。
6 j) @4 K2 P! `' U * **安装**:
$ X8 V) R8 y4 P M3 { ```bash) E1 r. E: v$ X. ?
yum install ncdu/ m8 {* G' u* J2 E& k# e
```6 r- O W1 O5 ]$ W' t/ b) E' Y
* **使用**:% x7 }0 g: ^; E e/ H) ^
```bash1 G: l |$ g( Z
# 分析当前目录
; m6 D1 j1 a! G! \; C) } ncdu! B; D' S0 q2 L9 O+ R$ d
# 分析指定目录(如根目录)
. H) w& M1 N$ \) g, B/ m ncdu /
4 T6 q7 B( w% t ```
0 h; `* \+ ~3 Z6 P * **操作**:使用键盘 `↑` `↓` 导航,按 `d` 删除选中的文件/目录,按 `?` 查看帮助。0 F. t+ e7 j0 Q+ v3 ]
7 w1 A9 m; F' F---! L+ y2 ?! K( ?% i% } u; l
& C% }$ l% Y2 |$ e& S2 `% m
### 二、查找大文件命令
4 j8 n0 }* _/ k( k
/ M( q' R8 d {# ^1 u( \! M当你发现某个分区空间不足时,通常需要查找并清理大文件。. y. t O6 b1 f
8 E% u6 m4 i* X! }' i. }' B: E
1. **`find` - 强大的查找命令**
2 I" Q( E2 ~. a/ Y9 j * **示例**:
* U6 Z3 {% G' S ```bash" K( J9 V X5 P6 d4 y; W
# 在根目录 (/) 下查找大于 100M 的文件9 \, M( h* J, {% @
find / -type f -size +100M
. h+ U* P$ G2 E" f+ Q; Y% ^; T
; a" X- m4 d; t( g+ o1 q; E6 Z # 在 /var 目录下查找大于 50M 的文件并显示其大小
2 h" ?$ [# w: W find /var -type f -size +50M -exec du -h {} \;
: ^, L8 H$ n9 Z5 t # o1 T3 i: C3 v+ T* k7 q9 r7 P
# 查找并删除 7 天前的 .log 文件(⚠️删除操作务必谨慎!)
& b" b" T3 c4 Y, g! R, s find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
6 @6 T8 I: u9 P4 W. | ```- R1 d4 |# m5 l+ e0 X
5 C; o" w$ o3 z9 V7 m& q: m
2. **`ls` - 列出文件并按大小排序**
1 d2 V5 h7 c# w8 X, G * **示例**:
v( _# V4 ^" W u4 w! M- c5 n ```bash' w" W' a; f; O5 N- H+ ^
# 列出当前目录下的文件,并按文件大小逆序排序* e- A4 [% m$ A. ]0 H3 T$ f6 }
ls -lhS5 P# m( }' E% {7 q' A. g5 u
# 注意:ls 命令本身不递归子目录
( m! _2 [+ i& K5 {( i ```
+ W, c1 T, v- G* i3 Q
9 N" Y" m1 C, J$ i) t---
; W3 G; G% e1 C7 h) h! a5 e6 D6 w% W
: c6 r6 h# i+ e0 r) y; S### 三、清理特定垃圾文件
" r& ~+ D6 m* _2 p) z1 a7 z s8 ?4 q( i
系统运行会产生一些可清理的缓存或日志文件。
5 w( C6 b' |3 Y# U
" b, T; X# }; L5 k; G. w1. **清理 YUM/DNF 缓存**$ I6 c" X) @2 ]& V0 ?; q
```bash5 _4 p Y: R7 ~( D
yum clean all # 对于 CentOS 7 及以下7 @0 `( Z/ W! _9 a( K$ x& k! C# l* \
dnf clean all # 对于 CentOS 8 及以上4 C) ]2 |( t5 }% Z) @
```
( L8 E6 i. m3 `+ O1 M1 h
. M2 w4 N4 N5 d0 [3 \8 ^' g2. **清理日志文件 (logrotate)**+ ]& d: h0 M! q8 B4 J' z, ?
* 系统通常使用 `logrotate` 工具自动轮转和清理日志。你也可以手动清理:3 B* k; u# K4 y3 g9 Q& `
```bash9 g. F0 J0 N, B! F, B( y
# 查看 /var/log 目录下较大的日志文件,并选择性清理 u6 L2 v8 t2 H
find /var/log -name "*.log" -size +100M
0 Z! z3 g' M w2 t" L # ⚠️ 注意:不建议直接 rm 删除正在被进程写入的日志文件。
+ z! \! R# W; t. m # 更好的方式是清空内容(例如对于 messages-old 文件):
& r4 n& ?: f' i5 ~9 b) I/ N > /var/log/messages-old8 q5 C- I7 [4 D3 {+ x! h
```! `, }. }6 T+ V/ ^. _& |) i Y5 E
1 @/ g9 `1 k8 S. A, { P% D' J0 z7 }- r3. **清理系统内存缓存(危险系数低)**
; L$ H. j/ @7 A+ G * 这个操作**不会丢失数据**,它释放的是内核用于缓存磁盘数据的内存,必要时内核会自动重新分配。在系统内存紧张时,释放缓存可以让应用程序有更多内存可用。6 S" X5 \6 w0 U
```bash/ M3 T; a" Q! o! l: |
# 释放 pagecache, dentries 和 inodes
( l' j* B1 }& ^4 f sync && echo 3 > /proc/sys/vm/drop_caches, L w# K1 n' o- R, T1 H- P
```
4 [8 N) A- |& Y. o * **注意**:这只是一个临时操作,主要用于测试或应急,不是常规的“磁盘整理”任务。
, A: m1 R7 i" g/ p9 Q$ d
8 t' `6 V% I- w' g$ |# R---6 C- u1 j8 ?9 F. Q. O
& H8 s6 u: C; U$ q: i3 a' d) S" C
### 四、文件系统碎片整理命令(特殊情况使用)2 z+ o$ q w+ _: A
6 L1 U/ L/ M$ o o' o- b! Z
**再次强调:Ext4/XFS 在日常使用中碎片化率很低,通常不需要手动整理。**
& C% _$ b; A- A- [0 ?2 c% i* h. m; D h% M' e% J' S- ^
1. **XFS 文件系统碎片整理**! h6 A: M. \: j+ O3 P
* **检查碎片程度**:
, v: P& N: E3 G, O. z* o ```bash
: @3 [- K) G2 Q) E _# _ xfs_db -c frag -r /dev/your_device- ]9 f/ S- @/ S
```
& l( o" \+ M2 u * **在线整理**:, Q* J6 E1 G6 D$ A$ Y4 d
```bash4 ], k, ]" v$ v1 E+ S2 `
xfs_fsr /dev/your_device
& n) A Y6 \- r& l' a( z1 M) V* J # 或者直接整理挂载点
; i; A& p" o$ F8 S; } xfs_fsr /your/mount/point$ x2 @6 G% @' c* L
```; }" M6 q _' c* U: i
, l0 H: _4 i7 [0 q% p+ t ~( x
2. **Ext4 文件系统碎片整理**
4 m# X7 X+ e( Z8 A * Ext4 的整理非常麻烦且风险高,需要卸载分区。**极不推荐**在生产环境中使用。工具是 `e4defrag`。
1 e* w2 s. E; N. {9 D6 P# G+ S9 D/ k, g5 D# j- L
---9 m: l3 B+ b$ t
' ?$ `! O1 Z b3 M3 C5 j* r### 整理流程总结: r7 [1 y1 N6 j) Q# j+ c. U
1 @4 N# @' G8 x8 t1. **发现问题**:使用 `df -h` 查看哪个分区空间不足(例如 `/` 使用率 90%)。; X1 k2 J" o. ?( ^
2. **定位问题**:使用 `du -sh /* | sort -rh` 或 `ncdu /` 定位到是哪个目录占用了大量空间(例如 `/var`)。
1 ?) d, l% {9 _# z) T" x3. **深入分析**:进入该目录(`cd /var`),继续使用 `du` 或 `ncdu` 向下分析(例如发现是 `/var/log` 很大)。
2 P) O; ~1 m; n) s4. **查找目标**:在目标目录中使用 `find` 或 `ls` 查找大文件或旧文件(例如发现一个巨大的 `application.log`)。# ? {5 G# s- L+ X/ M
5. **采取行动**:
: f' j/ e$ o2 B) F * 如果是日志文件,可以清空(`> application.log`)或配置 `logrotate`。8 X0 O; U# ^& t9 J4 J0 @ {
* 如果是缓存文件,可以安全删除。
0 @% Q# q- c' e6 `+ L * 如果是应用程序产生的无用数据,联系开发者确认后删除。
/ T8 _9 d7 r' H6. **确认结果**:再次使用 `df -h` 确认空间是否已释放。5 P: V$ u/ K% U; w4 F2 o
7 e- |$ \6 C! e) z! U希望这份详细的整理对您有帮助!始终记住,**删除文件前务必确认其用途**,以免误删重要数据。 |