翼度科技»论坛 编程开发 python 查看内容

Python 3.x基础实战检查磁盘可用空间

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
引言

在 Linux 服务器上,磁盘空间的使用情况是一个非常重要的指标。如果服务器上的磁盘空间不足,可能会导致服务器崩溃,影响网站的正常运行。为了避免这种情况的发生,我们需要定期检查服务器上的磁盘空间,并及时清理不必要的文件。本文将介绍如何使用 Python 3脚本检查 Linux 服务器上的磁盘空间。

使用psutil模块实现

首先,我们需要安装
  1. psutil
复制代码
模块。
  1. psutil
复制代码
是一个跨平台的库,用于获取系统信息,包括磁盘使用情况、CPU使用情况等。我们可以使用以下命令来安装
  1. psutil
复制代码
  1. pip3 install psutil
复制代码
获取磁盘使用情况

我们将使用
  1. psutil
复制代码
模块来获取磁盘使用情况。以下是获取磁盘使用情况的示例代码:
  1. import psutil
  2. # 获取磁盘使用情况
  3. disk_usage = psutil.disk_usage('/')
  4. # 打印磁盘使用情况
  5. print(f"Total: {disk_usage.total / (1024*1024*1024):.2f} GB")
  6. print(f"Used: {disk_usage.used / (1024*1024*1024):.2f} GB")
  7. print(f"Free: {disk_usage.free / (1024*1024*1024):.2f} GB")
复制代码
在这个示例中,我们使用
  1. psutil.disk_usage()
复制代码
函数来获取磁盘使用情况。该函数需要传递一个参数,即要获取使用情况的磁盘路径。在这个示例中,我们传递了根目录
  1. /
复制代码
作为参数。
  1. psutil.disk_usage()
复制代码
函数返回一个
  1. namedtuple
复制代码
对象,其中包含总容量、已用容量和可用容量等信息。

获取磁盘挂载点

在Linux系统中,磁盘可以挂载到不同的目录下。如果您的系统中有多个磁盘,您可能需要检查每个磁盘的可用空间。以下是获取磁盘挂载点的示例代码:
  1. import psutil
  2. # 获取磁盘挂载点
  3. disk_partitions = psutil.disk_partitions()
  4. # 打印磁盘挂载点
  5. for partition in disk_partitions:
  6.     print(f"Device: {partition.device}")
  7.     print(f"Mountpoint: {partition.mountpoint}")
  8.     print(f"File system type: {partition.fstype}")
  9.     print()
复制代码
在这个示例中,我们使用
  1. psutil.disk_partitions()
复制代码
函数来获取磁盘挂载点。该函数返回一个列表,其中包含每个挂载点的信息,包括设备、挂载点和文件系统类型等。

检查磁盘可用空间

现在我们已经了解了如何获取磁盘使用情况和磁盘挂载点,让我们编写一个脚本来检查磁盘的可用空间。以下是检查磁盘可用空间的示例代码:
  1. import psutil
  2. import os
  3. # 获取磁盘挂载点
  4. disk_partitions = psutil.disk_partitions()
  5. # 遍历每个挂载点
  6. for partition in disk_partitions:
  7.     # 获取磁盘使用情况
  8.     disk_usage = psutil.disk_usage(partition.mountpoint)
  9.     # 计算磁盘可用空间的百分比
  10.     free_percent = disk_usage.free / disk_usage.total * 100
  11.     # 如果磁盘可用空间小于10%,发送警告邮件
  12.     if free_percent < 10:
  13.         # 获取主机名
  14.         hostname = os.uname()[1]
  15.         # 构造邮件内容
  16.         subject = f"Disk space warning on {hostname}"
  17.         message = f"The disk {partition.device} ({partition.mountpoint}) is running out of space ({free_percent:.2f}% free)."
  18.         # 发送邮件
  19.         send_email(subject, message)
复制代码
在这个示例中,我们遍历了每个磁盘挂载点,并使用
  1. psutil.disk_usage()
复制代码
函数获取了每个挂载点的使用情况。然后,我们计算了每个挂载点的可用空间百分比,并检查了是否小于10%。如果是,我们将发送一封警告邮件。

使用 du 命令实现


使用 du 命令检查磁盘空间

du 命令是 Linux 系统中一个非常有用的命令,可以用来查看当前目录或文件的磁盘使用情况。在 Python 3 中,我们可以使用 subprocess 模块来执行 du 命令,并将其输出解析为 Python 对象。
以下是一个简单的 Python 3 脚本,用于检查服务器上特定目录的磁盘使用情况:
  1. import subprocess
  2. def get_directory_size(path):
  3.     """Return the total size of the files in the given directory and subdirectories."""
  4.     cmd = ["du", "-sh", path]
  5.     result = subprocess.run(cmd, stdout=subprocess.PIPE)
  6.     output = result.stdout.decode("utf-8").strip()
  7.     size = output.split()[0]
  8.     return size
  9. # Example usage:
  10. size = get_directory_size("/var/www/html")
  11. print("Size of /var/www/html: {}".format(size))
复制代码
在上面的示例中,我们定义了一个名为
  1. get_directory_size
复制代码
的函数,该函数接受一个路径作为参数,并返回该目录及其子目录中文件的总大小。该函数使用
  1. subprocess.run
复制代码
函数来执行
  1. du
复制代码
命令,并将其输出解析为 Python 对象。然后,我们从输出中提取出目录的大小,并将其作为字符串返回。
要使用此函数,只需调用
  1. get_directory_size
复制代码
并传递要检查的目录的路径即可。在上面的示例中,我们检查了
  1. /var/www/html
复制代码
目录的大小,并将结果打印到控制台上。

检查多个目录的磁盘空间

如果您需要检查多个目录的磁盘使用情况,可以使用一个简单的循环来遍历目录列表,并调用
  1. get_directory_size
复制代码
函数来获取每个目录的大小。以下是一个示例脚本,用于检查多个目录的磁盘使用情况:
  1. import subprocess
  2. def get_directory_size(path):
  3.     """Return the total size of the files in the given directory and subdirectories."""
  4.     cmd = ["du", "-sh", path]
  5.     result = subprocess.run(cmd, stdout=subprocess.PIPE)
  6.     output = result.stdout.decode("utf-8").strip()
  7.     size = output.split()[0]
  8.     return size
  9. # List of directories to check
  10. directories = ["/var/www/html", "/var/log", "/etc"]
  11. # Loop through directories and print their sizes
  12. for directory in directories:
  13.     size = get_directory_size(directory)
  14.     print("Size of {}: {}".format(directory, size))
复制代码
在上面的示例中,我们定义了一个名为
  1. directories
复制代码
的列表,其中包含要检查的目录的路径。然后,我们使用一个简单的循环遍历该列表,并调用
  1. get_directory_size
复制代码
函数来获取每个目录的大小。

检查磁盘空间使用率

除了检查单个目录或多个目录的磁盘使用情况之外,我们还可以使用 Python 3 来检查整个磁盘的使用情况。以下是一个示例脚本,用于检查磁盘使用率:
  1. import subprocess
  2. def get_disk_usage():
  3.     """Return the disk usage of the root filesystem in percent."""
  4.     cmd = ["df", "-h", "/"]
  5.     result = subprocess.run(cmd, stdout=subprocess.PIPE)
  6.     output = result.stdout.decode("utf-8").strip()
  7.     usage = int(output.split("\n")[1].split()[4].replace("%", ""))
  8.     return usage
  9. # Example usage:
  10. usage = get_disk_usage()
  11. print("Disk usage: {}%".format(usage))
复制代码
在上面的示例中,我们定义了一个名为
  1. get_disk_usage
复制代码
的函数,该函数返回根文件系统的磁盘使用率。该函数使用
  1. subprocess.run
复制代码
函数来执行
  1. df
复制代码
命令,并将其输出解析为 Python 对象。然后,我们从输出中提取出磁盘使用率,并将其作为整数返回。
要使用此函数,只需调用
  1. get_disk_usage
复制代码
并将其结果打印到控制台上即可。

发送邮件

在上面的示例中,我们调用了一个名为
  1. send_email()
复制代码
的函数来发送邮件。这个函数需要进行自定义实现。以下是一个简单的
  1. send_email()
复制代码
函数的示例代码:
  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.header import Header
  4. def send_email(subject, message):
  5.     # 邮件发送者和接收者
  6.     sender = 'sender@example.com'
  7.     receiver = 'receiver@example.com'
  8.     # 邮件主题和内容
  9.     msg = MIMEText(message, 'plain', 'utf-8')
  10.     msg['Subject'] = Header(subject, 'utf-8')
  11.     # 发送邮件
  12.     smtp = smtplib.SMTP('smtp.example.com')
  13.     smtp.login(sender, 'password')
  14.     smtp.sendmail(sender, receiver, msg.as_string())
  15.     smtp.quit()
复制代码
在这个示例中,我们使用
  1. smtplib
复制代码
模块来发送邮件。首先,我们指定了邮件发送者和接收者的地址。然后,我们使用
  1. MIMEText
复制代码
类创建了一个邮件对象,并指定了邮件的主题和内容。最后,我们使用
  1. SMTP
复制代码
类连接到邮件服务器,并使用
  1. login()
复制代码
方法进行身份验证。然后,我们使用
  1. sendmail()
复制代码
方法发送邮件,并使用
  1. quit()
复制代码
方法关闭连接。

结论

在这篇教程中,我们使用Python 3编写了一个脚本来检查Linux服务器的磁盘可用空间。我们使用了
  1. psutil
复制代码
  1. os
复制代码
模块来获取磁盘信息,并编写了一个简单的函数来发送警告邮件。这个脚本可以帮助您在磁盘空间不足时及时采取措施,避免系统崩溃。
以上就是Python 3.x基础实战检查磁盘可用空间的详细内容,更多关于Python检查磁盘可用空间的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/article/283898.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具