GNU/Linux >> Belajar Linux >  >> Ubuntu

Script Atau Program Untuk Mencatat Penggunaan Disk?

Saya ingin sebuah program atau lebih disukai cara untuk mencatat penggunaan disk.

Untuk menjelaskan apa yang saya maksud, ketika seseorang menginstal Ubuntu ada sekitar 4,5 GB disk yang digunakan. Kemudian ketika Anda menginstal/mencopot program, penggunaan ini meningkat atau menurun.

Yang saya inginkan adalah cara untuk mencatat secara otomatis disk saat ini yang digunakan dalam file txt ketika ada perubahan (ada yang diinstal/disimpan atau dihapus/dihapus) dengan waktu dan tanggal terjadinya perubahan ini.

Jawaban yang Diterima:

Menggunakan df perintah untuk melacak ruang disk, dan lsblk perintah untuk melacak drive yang dipasang, skrip di bawah ini, berjalan di latar belakang, akan mencatat perubahan di ruang kosong semua drive yang dipasang. Itu membuat file log:~/disklog di mana ia menulis perubahan (dalam k ).

Jika Anda menjalankannya di terminal, hasilnya akan ditampilkan secara bersamaan.

Isi file log terlihat seperti:

[mountpoint / change / date/time / used]

/ . . . . . . . . . . . . . . . . . .            36 k       Fri Mar 27 08:17:30 2015    used 87989352 k
/media/intern_2 . . . . . . . . . . .         -1792 k       Fri Mar 27 08:17:32 2015    used 562649592 k
/ . . . . . . . . . . . . . . . . . .            -4 k       Fri Mar 27 08:17:39 2015    used 87989356 k
/ . . . . . . . . . . . . . . . . . .           -36 k       Fri Mar 27 08:17:43 2015    used 87989392 k
/ . . . . . . . . . . . . . . . . . .            -4 k       Fri Mar 27 08:17:55 2015    used 87989396 k
/ . . . . . . . . . . . . . . . . . .             4 k       Fri Mar 27 08:18:11 2015    used 87989392 k
/ . . . . . . . . . . . . . . . . . .           -32 k       Fri Mar 27 08:18:13 2015    used 87989424 k

Cara menggunakan

  1. Copy script di bawah ini ke dalam file kosong, simpan sebagai log_diskusage.py
  2. Di bagian kepala skrip, atur interval waktu treshold dan jumlah maksimum baris dalam file log:

    #--- set time interval in seconds, threshold in k, and the max number of lines in the logfile
    interval = 20        # the interval between the checks
    threshold = 0        # in K, you'd probably set this higher
    max_lines = 5000     # if you want no limit, comment out the line line_limit() in the script
    #---
    
    • interval untuk menjalankan pemeriksaan ruang disk, sebagaimana adanya, 20 detik
    • treshold :Anda mungkin tidak ingin menyimpan semua (sangat) perubahan kecil, karena disk memiliki banyak perubahan kecil dalam ruang disk kosong. Seperti itu, diatur ke 10k
    • max_lines , karena file log akan tumbuh dengan cepat, terutama jika Anda menyetel treshold ke nol
  3. Test-run script dengan perintah:

    python3 /path/to/log_diskusage.py
    
  4. Jika semuanya berfungsi dengan baik, tambahkan ke Aplikasi Startup Anda:Dash> Startup Applications> Add.

Terkait:Bagaimana Cara Menginstal Paket Dengan Apt-Get pada Sistem yang Terhubung melalui Proxy di Ubuntu?

Skrip

#!/usr/bin/env python3
import subprocess
import os
import time
log = os.environ["HOME"]+"/disklog.txt"
#--- set time interval in seconds, threshold in k
interval = 1
threshold = 0
max_lines = 5000
#---

def line_limit():
    lines = open(log).readlines()
    if len(lines) > max_lines:
        with open(log, "wt") as limit:
            for l in lines[-max_lines:]:
                limit.write(l)

get = lambda cmd: subprocess.check_output([cmd]).decode("utf-8")

def disk_change():
    mounted = [l[l.find("/"):] for l in get("lsblk").splitlines() if "/" in l]
    data = get("df").splitlines()
    matches = [("/", data[1].split()[-4])]
    for l in mounted:
        if l != "/":
            match = [(l, d.replace(l, "").split()[-3]) for d in data if l in d][0]
            matches.append(match)
    return matches

disk_data1 = disk_change()
while True:
    time.sleep(interval)
    disk_data2 = disk_change()
    for latest in disk_data2:
        try:
            compare = [(latest[0], int(latest[1]), int(item[1])) for item in disk_data1 if latest[0] == item[0]][0]
            if not compare[1] == compare[2]:
                diff = compare[2]-compare[1]
                if abs(diff) > threshold:
                    with open(log, "a") as logfile:
                        drive = compare[0]; lt = 18-int((len(drive)/2)); lk = 14-len(str(diff))
                        s = drive+" ."*lt+lk*" "+str(diff)+" k   \t"+str(time.strftime("%c"))+"\t"+"used "+str(compare[1])+" k\n"
                        logfile.write(s)
                    print(s, end = "")
                    # if you don't want to set a limit to the max number of lines, comment out the line below
                    line_limit()
        except IndexError:
            pass
    disk_data1 = disk_data2

Ubuntu
  1. Kelebihan Sistem File Tanpa Partisi?

  2. Daftar File yang Diakses Oleh Program?

  3. Script Shell Untuk Mengirim Surat Peringatan Jika Penggunaan Disk Melebihi 90%?

  1. Penganalisis Penggunaan Disk

  2. cPanel – Penggunaan Disk

  3. Penggunaan disk email di cPanel

  1. Cara Mengurangi Penggunaan Disk File Log Dengan ISPConfig Atau LAMP

  2. Lihat penggunaan disk di CentOS WebPanel

  3. Crontab Log:Cara Mencatat Keluaran Skrip Cron Saya