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是一个非常强大的工具,因此如果我们需要找出更多选项,可以查看手册页。