GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Skript oder Programm zum Protokollieren der Festplattennutzung?

Ich möchte entweder ein Programm oder noch besser eine Möglichkeit, die Festplattennutzung zu protokollieren.

Um zu erklären, was ich meine, wenn jemand Ubuntu installiert, werden ungefähr 4,5 GB Festplatte verwendet. Wenn Sie dann Programme installieren/deinstallieren, nimmt diese Nutzung zu oder ab.

Was ich möchte, ist eine Möglichkeit, automatisch die aktuelle Festplatte, die in einer txt-Datei verwendet wird, zu protokollieren, wenn es eine Änderung gibt (etwas wird installiert/gespeichert oder deinstalliert/gelöscht), mit der Uhrzeit und dem Datum, an dem diese Änderung aufgetreten ist.

Akzeptierte Antwort:

Mit dem df Befehl zum Nachverfolgen des Speicherplatzes und lsblk Um die gemounteten Laufwerke zu verfolgen, protokolliert das folgende Skript, das im Hintergrund ausgeführt wird, Änderungen im freien Speicherplatz aller gemounteten Laufwerke. Es erstellt eine Protokolldatei:~/disklog wohin es Änderungen schreibt (in k ).

Wenn Sie es im Terminal ausführen, wird das Ergebnis gleichzeitig ausgegeben.

Der Inhalt der Protokolldatei sieht folgendermaßen aus:

[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

Verwendung

  1. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es als log_diskusage.py
  2. Legen Sie im Head-Bereich des Skripts das Zeitintervall, den Schwellenwert und die maximale Anzahl von Zeilen in der Protokolldatei fest:

    #--- 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
    #---
    
    • Das interval 20 Sekunden, um die Festplattenplatzprüfungen so wie sie sind durchzuführen
    • Der treshold :Sie möchten wahrscheinlich nicht alle (sehr) kleinen Änderungen aufzeichnen, da die Festplatte viele enthält von kleinen Änderungen im freien Speicherplatz. So wie es ist, ist es auf 10k eingestellt
    • Die max_lines , da die Logdatei schnell wächst, insbesondere wenn Sie den Schwellenwert auf Null setzen
  3. Testen Sie das Skript mit dem Befehl:

    python3 /path/to/log_diskusage.py
    
  4. Wenn alles funktioniert, fügen Sie es zu Ihren Startanwendungen hinzu:Dash> Startanwendungen> Hinzufügen.

Verwandte:Wie installiere ich Pakete mit Apt-Get auf einem System, das über Proxy in Ubuntu verbunden ist?

Das Skript

#!/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. Disk Usage Analyzer

  2. Anzeigen der Festplattennutzung im CentOS WebPanel

  3. Crontab-Protokoll:So protokollieren Sie die Ausgabe meines Cron-Skripts

  4. So verwenden Sie das cPanel Disk Usage Tool

  5. Bash überwacht die Festplattennutzung

5 Möglichkeiten, den Speicherplatz auf Ubuntu zu überprüfen

Überprüfen Sie die Festplattennutzung mit dem Duf-Befehlszeilendienstprogramm

Wie verhindert man, dass /var/log/kern.log.1 den gesamten Speicherplatz verbraucht?

Wo finde ich das Festplattenkontingent

So reduzieren Sie die Nutzung der Protokolldatei mit ISPConfig oder LAMP

So zeigen Sie die Festplattennutzung in cPanel an