GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Script o programma per registrare l'utilizzo del disco?

Vorrei un programma o, più preferibilmente, un modo per registrare l'utilizzo del disco.

Per spiegare cosa intendo, quando qualcuno installa Ubuntu vengono utilizzati circa 4,5 GB di disco. Quindi, quando installi/disinstalla programmi, questo utilizzo aumenta o diminuisce.

Quello che voglio è un modo per registrare automaticamente il disco corrente che viene utilizzato in un file txt quando c'è una modifica (qualcosa è installato/salvato o disinstallato/cancellato) con l'ora e la data in cui si è verificata questa modifica.

Risposta accettata:

Usando il df comando per tenere traccia dello spazio su disco e lsblk comando per tenere traccia delle unità montate, lo script seguente, eseguito in background, registrerà le modifiche nello spazio libero di tutte le unità montate. Crea un file di registro:~/disklog dove scrive le modifiche in (in k ).

Se lo esegui nel terminale, visualizzerà il risultato contemporaneamente.

Il contenuto del file di registro è simile a:

[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

Come si usa

  1. Copia lo script qui sotto in un file vuoto, salvalo come log_diskusage.py
  2. Nella sezione head dello script, imposta l'intervallo di tempo la soglia e il numero massimo di righe nel file di 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
    #---
    
    • L'interval per eseguire i controlli dello spazio su disco, così com'è, 20 secondi
    • La treshold :Probabilmente non vorresti tenere traccia di tutte le (molto) piccole modifiche, dal momento che il disco ha molto di piccole modifiche nello spazio libero su disco. Così com'è, è impostato su 10k
    • Il max_lines , poiché il file di log crescerà rapidamente, soprattutto se imposti la soglia a zero
  3. Eseguire il test dello script con il comando:

    python3 /path/to/log_diskusage.py
    
  4. Se tutto funziona correttamente, aggiungilo alle tue applicazioni di avvio:Dash> Applicazioni di avvio> Aggiungi.

Correlati:come installare pacchetti con Apt-Get su un sistema connesso tramite proxy in Ubuntu?

Il copione

#!/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. Analizzatore di utilizzo del disco

  2. Elencare i file a cui si accede da un programma?

  3. Misurare l'utilizzo della RAM di un programma?

  4. cPanel – Utilizzo del disco

  5. Come ridurre l'utilizzo del disco del file di registro con ISPConfig o LAMP

5 modi per controllare lo spazio su disco su Ubuntu

Controlla l'utilizzo del disco utilizzando l'utilità della riga di comando Duf

Come impedire a /var/log/kern.log.1 di consumare tutto lo spazio su disco?

Dove trovo la quota del disco

Come utilizzare lo strumento di utilizzo del disco cPanel

Bash monitora l'utilizzo del disco