|
好的,在 CentOS 中整理磁盘(通常指清理空间、分析使用情况、查找大文件等)有一系列常用命令。下面我将它们分门别类地为您整理出来。
2 h' [1 V4 k% Y: k$ ]3 s y4 ?" I/ H M. A# V" q
### 核心摘要
* [- n* {3 \' e; [
! x3 k( ^3 q3 M9 y* W. @( u对于“整理磁盘”,通常包含两个层面:; M6 ?0 q# d* N9 h! c
1. **空间整理**:清理垃圾文件、删除大文件、释放磁盘空间。这主要通过一系列查找和分析命令完成。4 w3 Q" _" l2 n
2. **碎片整理**:对磁盘上的文件进行碎片整理以提高读写性能。**请注意:CentOS 默认使用的文件系统(如 ext4, XFS)通常不需要手动进行碎片整理**,它们的设计已经很好地处理了碎片问题。尤其是 XFS 文件系统,它支持在线碎片整理(如下述命令),而 ext4 的碎片整理则比较少见且需要卸载分区,风险较高。
9 ~. u3 h! D$ M1 q
1 f+ U% s2 [. h' w0 e! n3 ~---2 o" l) n$ ^( P( {* f
" {5 ^+ u8 l8 d0 ~0 h### 一、磁盘空间分析命令(最常用)
, D4 o% R+ G6 m* k3 V! M; W8 M; ] M/ h6 J4 J
这类命令用于快速了解磁盘空间被谁占用了。
% o) r& a( H" o' a0 k
5 V* k; s- F' u5 {( i1 S1. **`df` - 查看磁盘挂载点空间使用情况**
+ s# \1 T. \; A H * **功能**:查看文件系统的整体磁盘空间使用情况。2 E$ W( `1 A2 Z: T, M5 T
* **常用选项**:
. V9 z6 i8 |/ E2 ~ * `-h` (human-readable):以易读的格式显示(如 G, M)。
' s `/ \& V0 t * `-T`:显示文件系统类型(如 ext4, xfs)。
, L' r1 F4 X- B8 B * **示例**:
& H+ ~3 `+ f+ w$ f ```bash
( I6 Q* j- c( L& l% O df -hT3 j, e% ]( z$ o }! u/ K1 N
```
( T% H1 q% B! ?- n( U. m * **输出解读**:重点关注 `Use%` 列,找到使用率较高的挂载点(如 `/`, `/home`)。5 C+ p- y: D5 B7 V/ [( x" n4 Q
# q( X- \1 i. {
2. **`du` - 查看目录或文件的磁盘使用情况**0 m! P V$ _, W
* **功能**:估算文件或目录的空间占用。' h) Z$ z5 I1 V
* **常用选项**:% u. ^0 \2 ]0 k5 K" ^$ k6 k3 U) V* v
* `-h`:易读格式显示。
3 A! a p! S6 \ * `-s`:仅显示总计,不显示子目录详情。, ^0 o$ M8 r5 V; y$ Q0 l
* `--max-depth=N`:显示指定深度(N)的目录统计。8 l6 C! I6 i7 g
* **示例**:$ d. \6 ~7 w7 r8 l" b& h
```bash
! q% u: G" [) C. W # 查看当前目录下所有一级子目录的大小
+ b& H W5 X7 h. u7 C, l du -h --max-depth=1
* G) O6 u; |/ R5 I8 H; ]
) C3 i( O; ^5 Y, I- |9 i$ C # 查看 /var 目录的总大小3 G. Z, W* `6 s1 Z/ D/ F
du -sh /var+ Q3 q2 L& f+ m# W. D. j( w
/ n1 r7 i8 i0 t4 k3 |& ?
# 查找 /home 目录下最大的10个目录/文件2 H5 u. b9 y; v3 x* l
du -h /home | sort -rh | head -n 10
: G% N4 i* g; e+ }' b0 z, U/ ~ ```% T: S' w& d% }1 {; j9 v' s1 E
9 ^! L6 n* y1 o3 J3. **`ncdu` - 交互式磁盘使用分析工具(强烈推荐)**
4 ^/ Y) l! d( `9 i2 { * **功能**:一个非常强大的、基于 ncurses 库的交互式磁盘分析工具。比 `du` 更直观,可以快速导航和删除文件。) `! X8 w% H7 H- Z5 [
* **安装**:
" s( s7 i1 m z2 s0 ]! e ```bash5 `% v4 S! n7 T* }
yum install ncdu
& e* y# S" f8 ^+ F2 q5 y ```5 H6 b( X9 M2 S: C1 Y/ ^& O" Y
* **使用**:
! z$ P" n' @7 O) m0 s2 R4 v ```bash& e; E2 e0 ^1 \/ ~. I+ B8 E
# 分析当前目录4 r5 p7 Q5 o9 x. W
ncdu, n0 C; Z$ F+ J B
# 分析指定目录(如根目录)- c. x" m) D" ]7 {, x5 d$ i
ncdu /
( B% T, B6 C% y! U ``` ]! d& m. B; y; j
* **操作**:使用键盘 `↑` `↓` 导航,按 `d` 删除选中的文件/目录,按 `?` 查看帮助。1 ]' Y- e; N) k8 }3 B" ~
$ X! T+ h5 y! K6 J( I8 E0 F8 @3 @& i---
$ V6 J4 p$ B V6 t3 I4 k( f# Z( @! c W2 `7 e* H& Y
### 二、查找大文件命令
' |- v6 S5 s& I% E
$ I5 [$ y* |8 d# P, y当你发现某个分区空间不足时,通常需要查找并清理大文件。( \+ h1 }" w, m& p' `; K! u! q
2 s( B( E6 y2 o9 S1. **`find` - 强大的查找命令** I* _( W8 ~- q S; P6 P+ g
* **示例**:
- h" n7 r2 N$ E6 O7 x+ X ```bash
( X/ V% u) T! l5 U* f6 x # 在根目录 (/) 下查找大于 100M 的文件
0 b8 I% o/ a! O find / -type f -size +100M
+ G3 q8 J9 |$ ~4 _7 O , e; P! j3 B4 b3 f3 w6 g z q) m
# 在 /var 目录下查找大于 50M 的文件并显示其大小' _0 i! J3 M" j: r1 J) L ^
find /var -type f -size +50M -exec du -h {} \;! M4 k, ^) r( L2 E9 E6 {2 S; a8 a
) {: S3 e* j+ D # 查找并删除 7 天前的 .log 文件(⚠️删除操作务必谨慎!)
$ }- h1 S0 q3 [* A" e& }1 P3 S find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
4 ?/ V* k# L9 O+ K. E% t4 N ```
* T2 e3 H( |5 P0 }9 }) b0 x
- O! m( I# ]1 n6 Z, z2. **`ls` - 列出文件并按大小排序**
( V9 p* V" V, A- W( f6 _% Q4 F * **示例**:/ Y$ M4 v9 o& O' c6 q5 l$ F2 K8 Q' ^/ f
```bash
2 i ?, C. R) M/ S( R. d # 列出当前目录下的文件,并按文件大小逆序排序# ^2 v. V) w8 u% [; z+ l
ls -lhS9 i6 V5 H/ e/ R: {$ j" s* z
# 注意:ls 命令本身不递归子目录2 [8 U6 m3 S& f" @& @
```$ {* R; D, X! y* H! W) ?, p2 ?
0 W" ~" B, Y5 J: v. ]3 L/ p
---
' {. h$ [! \3 ^% L4 A7 K% i" R% \# H0 m* I/ h- v0 P2 Z
### 三、清理特定垃圾文件
G! j- k# D+ m/ o
9 ]3 I6 z7 V+ j( b8 f* ~系统运行会产生一些可清理的缓存或日志文件。: y8 R9 o: [6 ^8 t. _4 {( x
- D" v0 P* m1 o# q
1. **清理 YUM/DNF 缓存**
5 ]' M1 \* k( n& Q! _ ```bash1 m2 K/ z) b4 S' _ B
yum clean all # 对于 CentOS 7 及以下! ]$ Q' z+ x9 q* Z2 P ?* ]
dnf clean all # 对于 CentOS 8 及以上
- K: r3 W7 W1 |3 ~ ```
9 w4 ]" V* c# s" Y9 r; w' u' Q1 G" R
2. **清理日志文件 (logrotate)**" ^; s$ m% y: L6 F2 p9 `$ [# o
* 系统通常使用 `logrotate` 工具自动轮转和清理日志。你也可以手动清理:
* ~) T2 P; d0 n. @- k- L, x+ P ```bash
9 S# T: {3 K; x # 查看 /var/log 目录下较大的日志文件,并选择性清理6 ~% Y! |9 G6 D% t! F
find /var/log -name "*.log" -size +100M" x5 O0 d; V3 k% I* L
# ⚠️ 注意:不建议直接 rm 删除正在被进程写入的日志文件。
7 Y4 D( c0 j4 k) U4 a9 |. @ # 更好的方式是清空内容(例如对于 messages-old 文件):, Y. i! @: K) h: J) d5 h+ L1 ]2 P
> /var/log/messages-old/ D: V# U# C: Q1 z, Y4 t3 K
```2 `6 k4 C$ x6 _; g
i1 f0 o" X, [6 [" H$ w# l
3. **清理系统内存缓存(危险系数低)*** ^4 {& @+ A4 @2 `0 U" ]1 G
* 这个操作**不会丢失数据**,它释放的是内核用于缓存磁盘数据的内存,必要时内核会自动重新分配。在系统内存紧张时,释放缓存可以让应用程序有更多内存可用。
9 G* |: a# E/ c: v& c- ` ```bash
7 X) t$ \2 V$ S # 释放 pagecache, dentries 和 inodes
4 {" w: R: T8 Y) O- a sync && echo 3 > /proc/sys/vm/drop_caches
( N3 }! G. n' G& R1 V ```
, z/ x2 G8 Y( N, {* c7 k * **注意**:这只是一个临时操作,主要用于测试或应急,不是常规的“磁盘整理”任务。
2 P% h, H' i' ^1 G* K0 J* @5 p3 h
---
: Y0 o* N6 F6 n
8 Y4 W3 F% P- |# y2 H4 s* D### 四、文件系统碎片整理命令(特殊情况使用)
3 [0 M7 ~# C( ~& S0 M* e" V; Z
**再次强调:Ext4/XFS 在日常使用中碎片化率很低,通常不需要手动整理。**- V- h7 a7 M, d" c6 O5 u
! ^& C! x! n- @- X# }1. **XFS 文件系统碎片整理**
7 M0 K5 H" L. C/ g * **检查碎片程度**:
$ a3 F( b* p7 b7 J" t8 I& n ```bash1 [$ p/ N' S' q# o- Q. i
xfs_db -c frag -r /dev/your_device
4 y3 P$ a7 k' y4 l ```% q/ v5 {/ D+ I; z l% H6 i+ {/ ?
* **在线整理**:* k5 F- T2 J3 Z
```bash8 J; r& _( Z2 o2 ]
xfs_fsr /dev/your_device
' M- e6 I; h T% S # 或者直接整理挂载点* G7 B* W/ {1 s( |$ m
xfs_fsr /your/mount/point/ b# U' i, W3 L/ x
```0 J& ?! s6 V# C) X, u9 P
l/ l' Z+ N$ E: O/ f6 K% ^' u
2. **Ext4 文件系统碎片整理**
9 j9 R' l5 ^0 X6 H- p * Ext4 的整理非常麻烦且风险高,需要卸载分区。**极不推荐**在生产环境中使用。工具是 `e4defrag`。& X; n/ N& b( A: h M9 E
S# P+ n! Q' L: Y9 S# p8 o---1 f; Q4 ^8 N1 J( C R. }
% L6 }1 o/ _4 ?# n: H0 o, _5 u### 整理流程总结' B9 n. K. Q" r7 k' d) d
6 N. t9 `- f, w R* O1. **发现问题**:使用 `df -h` 查看哪个分区空间不足(例如 `/` 使用率 90%)。- a5 q% w7 O3 \7 \
2. **定位问题**:使用 `du -sh /* | sort -rh` 或 `ncdu /` 定位到是哪个目录占用了大量空间(例如 `/var`)。/ ?' K3 R2 ~8 X9 m5 h* J$ E u+ _1 w
3. **深入分析**:进入该目录(`cd /var`),继续使用 `du` 或 `ncdu` 向下分析(例如发现是 `/var/log` 很大)。
\# @) F6 H' h) O% e4. **查找目标**:在目标目录中使用 `find` 或 `ls` 查找大文件或旧文件(例如发现一个巨大的 `application.log`)。
& J8 D$ P' M) a6 {5. **采取行动**:
& U8 K$ d5 C) Q. a * 如果是日志文件,可以清空(`> application.log`)或配置 `logrotate`。- O9 I, d. d8 b# ?' G: Q& S8 x
* 如果是缓存文件,可以安全删除。/ E% C: N% @6 y9 \5 l2 q7 Y; d
* 如果是应用程序产生的无用数据,联系开发者确认后删除。 I$ h+ j8 K& Y
6. **确认结果**:再次使用 `df -h` 确认空间是否已释放。" B+ w9 B7 W$ S3 F; Q
" U. F) Y* A6 t
希望这份详细的整理对您有帮助!始终记住,**删除文件前务必确认其用途**,以免误删重要数据。 |