Python 3.x基礎(chǔ)實(shí)戰(zhàn)檢查磁盤(pán)可用空間
引言
在 Linux 服務(wù)器上,磁盤(pán)空間的使用情況是一個(gè)非常重要的指標(biāo)。如果服務(wù)器上的磁盤(pán)空間不足,可能會(huì)導(dǎo)致服務(wù)器崩潰,影響網(wǎng)站的正常運(yùn)行。為了避免這種情況的發(fā)生,我們需要定期檢查服務(wù)器上的磁盤(pán)空間,并及時(shí)清理不必要的文件。本文將介紹如何使用 Python 3腳本檢查 Linux 服務(wù)器上的磁盤(pán)空間。
使用psutil模塊實(shí)現(xiàn)
首先,我們需要安裝psutil模塊。psutil是一個(gè)跨平臺(tái)的庫(kù),用于獲取系統(tǒng)信息,包括磁盤(pán)使用情況、CPU使用情況等。我們可以使用以下命令來(lái)安裝psutil:
pip3 install psutil
獲取磁盤(pán)使用情況
我們將使用psutil模塊來(lái)獲取磁盤(pán)使用情況。以下是獲取磁盤(pán)使用情況的示例代碼:
import psutil
# 獲取磁盤(pán)使用情況
disk_usage = psutil.disk_usage('/')
# 打印磁盤(pán)使用情況
print(f"Total: {disk_usage.total / (1024*1024*1024):.2f} GB")
print(f"Used: {disk_usage.used / (1024*1024*1024):.2f} GB")
print(f"Free: {disk_usage.free / (1024*1024*1024):.2f} GB")
在這個(gè)示例中,我們使用psutil.disk_usage()函數(shù)來(lái)獲取磁盤(pán)使用情況。該函數(shù)需要傳遞一個(gè)參數(shù),即要獲取使用情況的磁盤(pán)路徑。在這個(gè)示例中,我們傳遞了根目錄/作為參數(shù)。psutil.disk_usage()函數(shù)返回一個(gè)namedtuple對(duì)象,其中包含總?cè)萘?、已用容量和可用容量等信息?/p>
獲取磁盤(pán)掛載點(diǎn)
在Linux系統(tǒng)中,磁盤(pán)可以掛載到不同的目錄下。如果您的系統(tǒng)中有多個(gè)磁盤(pán),您可能需要檢查每個(gè)磁盤(pán)的可用空間。以下是獲取磁盤(pán)掛載點(diǎn)的示例代碼:
import psutil
# 獲取磁盤(pán)掛載點(diǎn)
disk_partitions = psutil.disk_partitions()
# 打印磁盤(pán)掛載點(diǎn)
for partition in disk_partitions:
print(f"Device: {partition.device}")
print(f"Mountpoint: {partition.mountpoint}")
print(f"File system type: {partition.fstype}")
print()
在這個(gè)示例中,我們使用psutil.disk_partitions()函數(shù)來(lái)獲取磁盤(pán)掛載點(diǎn)。該函數(shù)返回一個(gè)列表,其中包含每個(gè)掛載點(diǎn)的信息,包括設(shè)備、掛載點(diǎn)和文件系統(tǒng)類型等。
檢查磁盤(pán)可用空間
現(xiàn)在我們已經(jīng)了解了如何獲取磁盤(pán)使用情況和磁盤(pán)掛載點(diǎn),讓我們編寫(xiě)一個(gè)腳本來(lái)檢查磁盤(pán)的可用空間。以下是檢查磁盤(pán)可用空間的示例代碼:
import psutil
import os
# 獲取磁盤(pán)掛載點(diǎn)
disk_partitions = psutil.disk_partitions()
# 遍歷每個(gè)掛載點(diǎn)
for partition in disk_partitions:
# 獲取磁盤(pán)使用情況
disk_usage = psutil.disk_usage(partition.mountpoint)
# 計(jì)算磁盤(pán)可用空間的百分比
free_percent = disk_usage.free / disk_usage.total * 100
# 如果磁盤(pán)可用空間小于10%,發(fā)送警告郵件
if free_percent < 10:
# 獲取主機(jī)名
hostname = os.uname()[1]
# 構(gòu)造郵件內(nèi)容
subject = f"Disk space warning on {hostname}"
message = f"The disk {partition.device} ({partition.mountpoint}) is running out of space ({free_percent:.2f}% free)."
# 發(fā)送郵件
send_email(subject, message)
在這個(gè)示例中,我們遍歷了每個(gè)磁盤(pán)掛載點(diǎn),并使用psutil.disk_usage()函數(shù)獲取了每個(gè)掛載點(diǎn)的使用情況。然后,我們計(jì)算了每個(gè)掛載點(diǎn)的可用空間百分比,并檢查了是否小于10%。如果是,我們將發(fā)送一封警告郵件。
使用 du 命令實(shí)現(xiàn)
使用 du 命令檢查磁盤(pán)空間
du 命令是 Linux 系統(tǒng)中一個(gè)非常有用的命令,可以用來(lái)查看當(dāng)前目錄或文件的磁盤(pán)使用情況。在 Python 3 中,我們可以使用 subprocess 模塊來(lái)執(zhí)行 du 命令,并將其輸出解析為 Python 對(duì)象。
以下是一個(gè)簡(jiǎn)單的 Python 3 腳本,用于檢查服務(wù)器上特定目錄的磁盤(pán)使用情況:
import subprocess
def get_directory_size(path):
"""Return the total size of the files in the given directory and subdirectories."""
cmd = ["du", "-sh", path]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
output = result.stdout.decode("utf-8").strip()
size = output.split()[0]
return size
# Example usage:
size = get_directory_size("/var/www/html")
print("Size of /var/www/html: {}".format(size))
在上面的示例中,我們定義了一個(gè)名為 get_directory_size 的函數(shù),該函數(shù)接受一個(gè)路徑作為參數(shù),并返回該目錄及其子目錄中文件的總大小。該函數(shù)使用 subprocess.run 函數(shù)來(lái)執(zhí)行 du 命令,并將其輸出解析為 Python 對(duì)象。然后,我們從輸出中提取出目錄的大小,并將其作為字符串返回。
要使用此函數(shù),只需調(diào)用 get_directory_size 并傳遞要檢查的目錄的路徑即可。在上面的示例中,我們檢查了 /var/www/html 目錄的大小,并將結(jié)果打印到控制臺(tái)上。
檢查多個(gè)目錄的磁盤(pán)空間
如果您需要檢查多個(gè)目錄的磁盤(pán)使用情況,可以使用一個(gè)簡(jiǎn)單的循環(huán)來(lái)遍歷目錄列表,并調(diào)用 get_directory_size 函數(shù)來(lái)獲取每個(gè)目錄的大小。以下是一個(gè)示例腳本,用于檢查多個(gè)目錄的磁盤(pán)使用情況:
import subprocess
def get_directory_size(path):
"""Return the total size of the files in the given directory and subdirectories."""
cmd = ["du", "-sh", path]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
output = result.stdout.decode("utf-8").strip()
size = output.split()[0]
return size
# List of directories to check
directories = ["/var/www/html", "/var/log", "/etc"]
# Loop through directories and print their sizes
for directory in directories:
size = get_directory_size(directory)
print("Size of {}: {}".format(directory, size))
在上面的示例中,我們定義了一個(gè)名為 directories 的列表,其中包含要檢查的目錄的路徑。然后,我們使用一個(gè)簡(jiǎn)單的循環(huán)遍歷該列表,并調(diào)用 get_directory_size 函數(shù)來(lái)獲取每個(gè)目錄的大小。
檢查磁盤(pán)空間使用率
除了檢查單個(gè)目錄或多個(gè)目錄的磁盤(pán)使用情況之外,我們還可以使用 Python 3 來(lái)檢查整個(gè)磁盤(pán)的使用情況。以下是一個(gè)示例腳本,用于檢查磁盤(pán)使用率:
import subprocess
def get_disk_usage():
"""Return the disk usage of the root filesystem in percent."""
cmd = ["df", "-h", "/"]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
output = result.stdout.decode("utf-8").strip()
usage = int(output.split("\n")[1].split()[4].replace("%", ""))
return usage
# Example usage:
usage = get_disk_usage()
print("Disk usage: {}%".format(usage))
在上面的示例中,我們定義了一個(gè)名為 get_disk_usage 的函數(shù),該函數(shù)返回根文件系統(tǒng)的磁盤(pán)使用率。該函數(shù)使用 subprocess.run 函數(shù)來(lái)執(zhí)行 df 命令,并將其輸出解析為 Python 對(duì)象。然后,我們從輸出中提取出磁盤(pán)使用率,并將其作為整數(shù)返回。
要使用此函數(shù),只需調(diào)用 get_disk_usage 并將其結(jié)果打印到控制臺(tái)上即可。
發(fā)送郵件
在上面的示例中,我們調(diào)用了一個(gè)名為send_email()的函數(shù)來(lái)發(fā)送郵件。這個(gè)函數(shù)需要進(jìn)行自定義實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的send_email()函數(shù)的示例代碼:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(subject, message):
# 郵件發(fā)送者和接收者
sender = 'sender@example.com'
receiver = 'receiver@example.com'
# 郵件主題和內(nèi)容
msg = MIMEText(message, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
# 發(fā)送郵件
smtp = smtplib.SMTP('smtp.example.com')
smtp.login(sender, 'password')
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()在這個(gè)示例中,我們使用smtplib模塊來(lái)發(fā)送郵件。首先,我們指定了郵件發(fā)送者和接收者的地址。然后,我們使用MIMEText類創(chuàng)建了一個(gè)郵件對(duì)象,并指定了郵件的主題和內(nèi)容。最后,我們使用SMTP類連接到郵件服務(wù)器,并使用login()方法進(jìn)行身份驗(yàn)證。然后,我們使用sendmail()方法發(fā)送郵件,并使用quit()方法關(guān)閉連接。
結(jié)論
在這篇教程中,我們使用Python 3編寫(xiě)了一個(gè)腳本來(lái)檢查L(zhǎng)inux服務(wù)器的磁盤(pán)可用空間。我們使用了psutil和os模塊來(lái)獲取磁盤(pán)信息,并編寫(xiě)了一個(gè)簡(jiǎn)單的函數(shù)來(lái)發(fā)送警告郵件。這個(gè)腳本可以幫助您在磁盤(pán)空間不足時(shí)及時(shí)采取措施,避免系統(tǒng)崩潰。
以上就是Python 3.x基礎(chǔ)實(shí)戰(zhàn)檢查磁盤(pán)可用空間的詳細(xì)內(nèi)容,更多關(guān)于Python檢查磁盤(pán)可用空間的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python簡(jiǎn)單實(shí)現(xiàn)查找一個(gè)字符串中最長(zhǎng)不重復(fù)子串的方法
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)查找一個(gè)字符串中最長(zhǎng)不重復(fù)子串的方法,涉及Python針對(duì)字符串的簡(jiǎn)單遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
python反爬蟲(chóng)方法的優(yōu)缺點(diǎn)分析
在本篇文章里小編給大家整理的是一篇關(guān)于python反爬蟲(chóng)方法的優(yōu)缺點(diǎn)分析,需要的朋友們可以學(xué)習(xí)下。2020-11-11
python使用aiohttp通過(guò)設(shè)置代理爬取基金數(shù)據(jù)簡(jiǎn)單示例
這篇文章主要為大家介紹了python使用aiohttp通過(guò)設(shè)置代理爬取基金數(shù)據(jù)簡(jiǎn)單示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

