GNU/Linux >> Znalost Linux >  >> Ubuntu

Skript nebo program pro protokolování využití disku?

Chtěl bych buď program, nebo raději způsob, jak zaznamenat využití disku.

Abych vysvětlil, co tím myslím, když si někdo nainstaluje Ubuntu, použije se přibližně 4,5 GB disku. Když pak nainstalujete/odinstalujete programy, toto využití se zvýší nebo sníží.

Co chci, je způsob, jak automaticky přihlásit aktuální disk, který se používá v souboru txt, když dojde ke změně (něco je nainstalováno/uloženo nebo odinstalováno/smazáno) s časem a datem, kdy k této změně došlo.

Přijatá odpověď:

Pomocí df příkaz ke sledování místa na disku a lsblk příkaz pro sledování připojených jednotek, níže uvedený skript, spuštěný na pozadí, zaznamená změny ve volném prostoru všech připojených jednotek. Vytvoří soubor protokolu:~/disklog kam zapisuje změny (v k ).

Pokud jej spustíte v terminálu, zobrazí výsledek současně.

Obsah souboru protokolu vypadá takto:

[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

Jak používat

  1. Zkopírujte níže uvedený skript do prázdného souboru a uložte jej jako log_diskusage.py
  2. V sekci head skriptu nastavte časový interval, prahovou hodnotu a maximální počet řádků v souboru protokolu:

    #--- 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 ke spuštění kontrol místa na disku tak, jak jsou, 20 sekund
    • treshold :Pravděpodobně byste nechtěli zaznamenávat všechny (velmi) malé změny, protože disk má hodně malých změn volného místa na disku. Jak to je, je nastaveno na 10k
    • max_lines , protože soubor protokolu bude rychle růst, zvláště pokud nastavíte prahovou hodnotu na nulu
  3. Otestujte skript pomocí příkazu:

    python3 /path/to/log_diskusage.py
    
  4. Pokud vše funguje dobře, přidejte jej do spouštěcích aplikací:Dash> Spouštěcí aplikace> Přidat.

Související:Jak nainstalovat balíčky pomocí Apt-Get na systém připojený přes proxy v Ubuntu?

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. Jak snížit využití disku protokolu pomocí ISPConfig nebo LAMP

  2. Zobrazení využití disku v CentOS WebPanel

  3. Crontab Log:Jak protokolovat výstup mého skriptu Cron

  1. Jak zobrazit využití disku v cPanel

  2. Jak používat nástroj cPanel Disk Usage Tool

  3. Bash monitoruje využití disku

  1. Analyzátor využití disku

  2. Přednosti souborového systému bez oddílů?

  3. Seznam souborů, ke kterým program přistupuje?