Contents

Linux上监视磁盘使用

1. 简介

在本教程中,我们将探索几个 Linux 工具来监控磁盘空间。

2. 文件系统和挂载

首先,了解文件系统和挂载之间的区别很重要。

当我们谈论文件系统时,我们指的是操作系统可以使用的硬盘分区。文件系统也可以是基于网络的、内存中的、USB 驱动器和特殊的临时空间

如果我们能够访问操作系统上的文件系统,我们就说该文件系统已“挂载”,或者在目录中可用。文件系统挂载到的目录称为“挂载点”

“root”目录是操作系统的基本目录,位于*/*。因此,操作系统总是至少有一个文件系统安装在 /。

一般来说,我们谈论的是文件系统中相对于根目录的所有目录。

3. df – 文件系统使用

df 是我们将用来查看文件系统使用情况的命令。 让我们尝试在 shell 中运行它:

itcodingman@blogdemo:~$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1005792        0   1005792   0% /dev
tmpfs             204824    22140    182684  11% /run
/dev/sda        24543644 15646380   7635696  68% /
tmpfs            1024108        0   1024108   0% /dev/shm
tmpfs               5120        0      5120   0% /run/lock
tmpfs            1024108        0   1024108   0% /sys/fs/cgroup
tmpfs             204824        0    204824   0% /run/user/1000

我们可以从列标题中看到每个值的含义。重要的是,与大小有关的列的比例会根据我们传递给df的参数而改变。 例如,让我们试试 df -h-h 将以1024 次方的人类可读格式显示输出:

Filesystem      Size  Used Avail Use% Mounted on
udev            983M     0  983M   0% /dev
tmpfs           201M   22M  179M  11% /run
/dev/sda         24G   15G  7.4G  67% /
tmpfs          1001M     0 1001M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs          1001M     0 1001M   0% /sys/fs/cgroup
tmpfs           201M     0  201M   0% /run/user/1000

我们在上面的输出中看到,大小后面有一个字母,表示字节、千字节、兆字节、千兆字节、太字节和 PB,以便将位数减少到三个或更少。

df为我们提供了许多选项,因此我们可以参考手册页以查看可用的选项。

4. du - 目录使用

du 是我们将用来查看目录大小的命令

假设我们的终端位于三个目录和一个文件的位置:

$ ls -l
total 20
drwxr-xr-x 2 mike sudo 4096 Nov 3 20:15 one
-rw-r--r-- 1 mike sudo    6 Nov 4 12:37 test.txt
drwxr-xr-x 2 mike sudo 4096 Nov 3 20:16 three
drwxr-xr-x 2 mike sudo 4096 Nov 3 20:15 two

使用ls,我们可以看到每个目录大小为 4096 字节,这是目录指针在磁盘上的大小,而不是目录及其内容使用的大小。

接下来,我们将使用du查看目录的大小及其内容

$ du
1024008 ./three
122888 ./two
10244 ./one
1157144 .

与 df一样,  du也支持*-h*用于人类可读的格式

$ du -h
1001M ./three
121M ./two
11M ./one
1.2G .

du还为我们提供了此处未涵盖的许多其他选项。

5. 查找大文件

我们已经了解了如何使用df和 du来获取系统上使用了多少空间的摘要。

但是,当需要释放我们机器上的一些空间时,我们需要具体了解哪些文件占用了所有空间。这是我们可以使用*ls * 和*find * 命令的地方。

5.1. 示例文件

首先,让我们看看我们在以下示例中使用的目录树:

## Size        Path and File
6          ./test.txt
1000M      ./three/output4.dat
10M        ./two/output2.dat
100M       ./two/two-a/more/output3.dat
10M        ./two/output1.dat
10M        ./one/output.dat

5.2. 使用ls

**正如我们在上面看到的,我们可以使用 ls 查看目录的内容,如果使用l选项,我们可以查看目录中的文件大小。这很有用,但如果要查看很多目录,很快就会变得很麻烦。让我们看看在我们的示例中使用ls -lh在三个目录中查找大文件:

$ ls -lh one/
total 10M
-rw-r--r-- 1 mike sudo 10M Nov  3 20:15 output.dat

我们可以在目录one中看到一个 10 兆字节的文件。

现在让我们看一下目录two,根据du,它使用了 121 兆字节:

$ ls -lh two
total 21M
-rw-r--r-- 1 mike sudo  10M Nov  3 20:15 output1.dat
-rw-r--r-- 1 mike sudo  10M Nov  3 20:15 output2.dat
drwxr-xr-x 3 mike sudo 4.0K Nov  4 13:29 two-a

我们可以在two中看到两个 10 兆字节的文件,外加一个名为two-a的子目录 。我们仍在寻找 100 兆字节的文件。

让我们看一下two-a,看看里面有什么:

$ ls -lh two/two-a/
total 4.0K
drwxr-xr-x 2 mike sudo 4.0K Nov  4 13:30 more

two-a中还有一个目录 ,我们仍然没有找到丢失的 100 兆字节。

如果我们有一个递归工具来查找文件并打印它们的大小,那就太好了!

5.3. 使用find

find 命令是查看目录树中所有文件及其大小的方法

要打印目录下的所有文件和大小,我们可以这样做:

$ find . -type f -exec ls -lh {} \;
-rw-r--r-- 1 mike sudo 6 Nov  4 12:37 ./test.txt
-rw-r--r-- 1 mike sudo 1000M Nov  3 20:16 ./three/output4.dat
-rw-r--r-- 1 mike sudo 10M Nov  3 20:15 ./two/output2.dat
-rw-r--r-- 1 mike sudo 100M Nov  3 20:15 ./two/two-a/more/output3.dat
-rw-r--r-- 1 mike sudo 10M Nov  3 20:15 ./two/output1.dat
-rw-r--r-- 1 mike sudo 10M Nov  3 20:15 ./one/output.dat

这向我们展示了目录树中的每个文件及其大小。当然,使用find有很多方法可以做到这一点,但这个简单的方法会打印所有文件及其大小。

假设我们只想通过 find 查看大小超过 20 兆字节的文件:

$ find . -type f -size +20M -exec ls -lh {} \; 
-rw-r--r-- 1 mike sudo 1000M Nov 3 20:16 ./three/output4.dat
-rw-r--r-- 1 mike sudo 100M Nov 3 20:15 ./two/two-a/more/output3.dat

find是一个非常强大的工具,因此如果我们需要找出更多选项,可以查看手册页。