|
好的,在 CentOS 中整理磁盘(通常指清理空间、分析使用情况、查找大文件等)有一系列常用命令。下面我将它们分门别类地为您整理出来。
% c1 t, @0 T7 O7 w) t5 I; D$ j- l/ ^0 b8 ]: w2 ]
### 核心摘要
# T; m# l6 t( |- G* @, I* M4 r5 J& q3 E2 O+ b7 C; v" l# J
对于“整理磁盘”,通常包含两个层面:! U8 Y4 I# |, a5 p* L& O. H
1. **空间整理**:清理垃圾文件、删除大文件、释放磁盘空间。这主要通过一系列查找和分析命令完成。. s/ U$ L: i( {* r* ~
2. **碎片整理**:对磁盘上的文件进行碎片整理以提高读写性能。**请注意:CentOS 默认使用的文件系统(如 ext4, XFS)通常不需要手动进行碎片整理**,它们的设计已经很好地处理了碎片问题。尤其是 XFS 文件系统,它支持在线碎片整理(如下述命令),而 ext4 的碎片整理则比较少见且需要卸载分区,风险较高。$ {* Z0 t# M v, R
, L. Z8 _& T2 V5 r: _/ \5 j- @
---$ g2 F0 y4 X7 y8 w2 J
; @6 S9 ~) \4 F% S3 P4 Z
### 一、磁盘空间分析命令(最常用)
) j" b" B1 a# ?( ~- i- |# b5 ~6 z5 B H7 x1 Y7 Q) P3 q
这类命令用于快速了解磁盘空间被谁占用了。- \8 W1 _& M; F! t0 c" r
) S9 P2 d+ e0 G- \* v8 ]2 }& t1. **`df` - 查看磁盘挂载点空间使用情况**
7 Y/ A' h. M6 ?2 K * **功能**:查看文件系统的整体磁盘空间使用情况。
3 o3 u) p: w) X3 I+ H * **常用选项**:
1 x5 Z1 {4 A- R! g5 u7 K* X) s * `-h` (human-readable):以易读的格式显示(如 G, M)。
( f) o1 X" h2 a4 f* ]3 n( W5 Z * `-T`:显示文件系统类型(如 ext4, xfs)。
' X& e" D# \% M4 \+ W, c1 d * **示例**:
$ C( R l: E$ G" H ```bash" {' I( Z9 n- N( l" E! w' ]
df -hT
/ F# Z5 }5 `7 |/ N7 a& c ```9 C4 L6 x L4 y/ k( J% _ Z
* **输出解读**:重点关注 `Use%` 列,找到使用率较高的挂载点(如 `/`, `/home`)。7 X! r" I3 V# G7 v3 w
2 s7 |& B I# j; ~* O2. **`du` - 查看目录或文件的磁盘使用情况**9 T/ d9 y5 U/ N9 n
* **功能**:估算文件或目录的空间占用。
' i1 M( [/ s0 Z" Q; J * **常用选项**:# d' ]2 X+ ?0 I, M5 f
* `-h`:易读格式显示。
: _8 k; t, R" e* K7 }9 _4 U( z5 F1 v * `-s`:仅显示总计,不显示子目录详情。
' r4 T* M- @! e: Y * `--max-depth=N`:显示指定深度(N)的目录统计。
1 S& i& D- b$ ^7 }! C& P * **示例**:1 U q6 T1 j1 R }- i
```bash; Y' H! G2 b( j% u# q, O* ^! ]
# 查看当前目录下所有一级子目录的大小
* U8 M+ s$ E& K) ^ du -h --max-depth=1" z& a: a! Z' K& |) W$ u5 [+ n6 p% g
. J4 p d: E1 P2 n3 q, }0 c/ q8 w! L
# 查看 /var 目录的总大小9 X3 B8 v6 L5 t! C- v U
du -sh /var
3 W+ M2 i( y& J$ E0 g/ j" @! D& ?
' Y, ]7 w/ q* y+ ^ # 查找 /home 目录下最大的10个目录/文件
8 S% j6 E( v2 i" J' S( ~ du -h /home | sort -rh | head -n 102 {" T9 y% l, m O
```
. L3 {$ t* g7 O1 B% p! h. M. a7 G# m5 G. J2 E
3. **`ncdu` - 交互式磁盘使用分析工具(强烈推荐)**
7 `( d ?3 r6 C4 g' i) s2 T * **功能**:一个非常强大的、基于 ncurses 库的交互式磁盘分析工具。比 `du` 更直观,可以快速导航和删除文件。
1 L/ R. c6 l) [8 j% V * **安装**:
5 o( G9 O( Y3 b7 w2 D7 H1 ? ```bash4 B4 v7 G2 Y2 V* b1 m
yum install ncdu
' V8 E1 y8 g) x) X: O0 T% ?/ ]0 Z% _ ```8 u6 s/ t- r. z) G" F \$ @
* **使用**:, [$ ?* t( Y* K: T$ N' v
```bash
4 v! f) D4 _* u; v7 W6 N# e # 分析当前目录1 O" Z, v* f& G+ N
ncdu
: y8 H$ F" `( b. H+ v- `5 _ # 分析指定目录(如根目录)' p# M; P+ K6 C! {6 s/ ~6 t) M+ g
ncdu /
- n; _1 m4 w/ B ```. ^0 e% P, Y) m' A4 O- v6 J
* **操作**:使用键盘 `↑` `↓` 导航,按 `d` 删除选中的文件/目录,按 `?` 查看帮助。( X8 u6 p8 W& i$ }7 T/ y
2 ]4 C! B, c0 K# n; {7 J---
# E: h) [2 @) |; o6 ~3 V8 C+ Z5 Q7 ^+ n7 _! A
### 二、查找大文件命令
6 Y3 P) _& O! L0 r+ C5 W1 O8 [- O/ w- F0 f* @
当你发现某个分区空间不足时,通常需要查找并清理大文件。; Y9 d, L2 S0 ?- Y* f
! E8 t5 {! q; x6 t( {
1. **`find` - 强大的查找命令**
3 g* ?7 V2 f8 L* B( K4 l * **示例**:0 d I# \5 H' O e
```bash6 `: }& g5 _2 R9 T' ~
# 在根目录 (/) 下查找大于 100M 的文件8 g2 i( y/ N/ X. F1 P+ |$ f# K
find / -type f -size +100M
: m% ~0 I: z2 [, r" I' `' X( Y 6 s/ V t5 v. E, \0 a' e7 e
# 在 /var 目录下查找大于 50M 的文件并显示其大小
' z- V8 k& `; _+ [ find /var -type f -size +50M -exec du -h {} \;" |4 ]8 u; f7 t# Z2 T2 b0 K
/ ?5 ~- F) b4 ] _; H- Q$ L # 查找并删除 7 天前的 .log 文件(⚠️删除操作务必谨慎!)
' e- j3 E% ]* x+ ~$ w! R find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;$ B1 N U7 f2 ~
``` d; I( \" F2 G& O4 ^# m
) B& o3 e( r- A ^ p0 w7 \
2. **`ls` - 列出文件并按大小排序**
- M' s( g4 P4 ~3 n% Z * **示例**:
6 a* S: r3 S F5 x2 d ```bash. a6 y, n) B9 _+ w1 N# c
# 列出当前目录下的文件,并按文件大小逆序排序
$ c5 N2 d8 n+ e: J ls -lhS7 i6 R6 D/ C9 u" W! P$ I
# 注意:ls 命令本身不递归子目录
! p7 G8 R& n6 @4 P4 } ```6 v! ` A+ p! J6 U) g* i
3 B* h+ P# p/ x
---
7 n; v" S7 f3 {: h2 N$ O9 R8 s
### 三、清理特定垃圾文件- y7 H2 \3 o8 d8 [
, @' a% {. f( g, T/ c Q
系统运行会产生一些可清理的缓存或日志文件。' D6 @( f8 o: ~7 I
; w: e9 s2 @% U; j0 _7 Y
1. **清理 YUM/DNF 缓存**
1 ]" l) F5 Y' K1 J; K* D9 q ```bash
( {& X" h, |3 k4 s) P; \ yum clean all # 对于 CentOS 7 及以下8 ^4 }% R, J4 o# `/ C: x
dnf clean all # 对于 CentOS 8 及以上
7 j$ N8 ?) `3 U6 m- n2 @ ```
- n4 L4 f4 ^" g0 m, g7 Z& k( U4 u0 d2 e
2. **清理日志文件 (logrotate)**9 w6 k# f" {- Y. f) O: h
* 系统通常使用 `logrotate` 工具自动轮转和清理日志。你也可以手动清理:
7 i" P- A' \% E4 I; p% Y0 d ```bash
/ u: F6 D8 m" o$ x # 查看 /var/log 目录下较大的日志文件,并选择性清理
6 F. o( V. k* ~# I- E" k* G find /var/log -name "*.log" -size +100M
/ J8 [1 C9 u( v # ⚠️ 注意:不建议直接 rm 删除正在被进程写入的日志文件。* N' w3 `. p7 `6 V. |+ Y
# 更好的方式是清空内容(例如对于 messages-old 文件):
, u$ K" F5 K \& |! k, D > /var/log/messages-old
6 k& c/ c Q' Y$ X8 p ```% T5 D. A& a9 O' k+ p% n
4 m/ h6 y V0 i
3. **清理系统内存缓存(危险系数低)**
9 \. p+ A& K7 L * 这个操作**不会丢失数据**,它释放的是内核用于缓存磁盘数据的内存,必要时内核会自动重新分配。在系统内存紧张时,释放缓存可以让应用程序有更多内存可用。( s5 Z+ n; d( v
```bash) C) S' {( M1 b, O
# 释放 pagecache, dentries 和 inodes
9 l0 j. `- R& l& X/ L sync && echo 3 > /proc/sys/vm/drop_caches# d: R, N+ {" D( W A
```
! C" Y& A/ L5 w a/ K6 H * **注意**:这只是一个临时操作,主要用于测试或应急,不是常规的“磁盘整理”任务。
( z+ A9 N" @! T3 O: y
0 S2 q' x2 F# u' a |) H/ q8 k---
; O: x# j3 O; E7 J7 S2 F2 t' K: a0 j- `! W! f8 Y; m" P
### 四、文件系统碎片整理命令(特殊情况使用)7 Y3 z+ @: `0 C
: W4 ?- g ]- X3 b
**再次强调:Ext4/XFS 在日常使用中碎片化率很低,通常不需要手动整理。**
0 m% Z" k8 [6 x+ ]' u5 d: F: p: n" x O
1. **XFS 文件系统碎片整理**
$ f$ I! d. y: G$ \, t' i * **检查碎片程度**:5 m5 C9 |+ ~1 i4 s {8 y3 |1 ~
```bash" _7 C& w. Y# o E8 p
xfs_db -c frag -r /dev/your_device) j+ g) d% Q2 Y/ C. P0 b
```
( _ w5 I/ X/ I- E7 a% L * **在线整理**:
3 s; N B+ c( z( w0 U0 A' K ```bash
0 o. ?0 o9 Z3 c8 I5 q+ r xfs_fsr /dev/your_device
! r: J& w+ D8 ~9 f( e # 或者直接整理挂载点
. W5 b3 P/ l/ J xfs_fsr /your/mount/point! P3 V# I# A0 t5 ` l
```
8 }5 M& R0 L/ |3 t1 l% J! R! o/ f/ L, D
2. **Ext4 文件系统碎片整理**
8 ~. V% H0 g8 l3 [! G! C& B% u * Ext4 的整理非常麻烦且风险高,需要卸载分区。**极不推荐**在生产环境中使用。工具是 `e4defrag`。3 f, p3 E+ P' f* z
1 p* u' o7 P+ Q/ d0 R% r---) u1 @; M! w5 n; W0 d% ~
% W* r7 z0 e& {6 _
### 整理流程总结
' o" v e( O3 w) i. K j. }4 W2 \6 w
2 J4 k" G/ N$ z9 }& ]1 d& D) K1. **发现问题**:使用 `df -h` 查看哪个分区空间不足(例如 `/` 使用率 90%)。
+ o* y0 U8 D7 \2. **定位问题**:使用 `du -sh /* | sort -rh` 或 `ncdu /` 定位到是哪个目录占用了大量空间(例如 `/var`)。 B% a9 E4 a. u
3. **深入分析**:进入该目录(`cd /var`),继续使用 `du` 或 `ncdu` 向下分析(例如发现是 `/var/log` 很大)。
: _) b. W+ E* ?( Y2 n w4. **查找目标**:在目标目录中使用 `find` 或 `ls` 查找大文件或旧文件(例如发现一个巨大的 `application.log`)。5 |+ n/ c. A- n% v* ]
5. **采取行动**:
! |% S( B, D. ?1 T. t. s: d( {* A" S1 B * 如果是日志文件,可以清空(`> application.log`)或配置 `logrotate`。2 |9 _* P x) u/ T% Y7 E* C' q
* 如果是缓存文件,可以安全删除。
: I- J5 k% y0 [7 U; ?8 i5 |5 F * 如果是应用程序产生的无用数据,联系开发者确认后删除。& {- A3 b+ G! N; j @% Q
6. **确认结果**:再次使用 `df -h` 确认空间是否已释放。* V/ k& G: p% K/ w$ G( \
( n/ ^# }8 b' z6 ^" @# ^ W
希望这份详细的整理对您有帮助!始终记住,**删除文件前务必确认其用途**,以免误删重要数据。 |