GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Script ou programme pour enregistrer l'utilisation du disque ?

J'aimerais soit un programme, soit de préférence un moyen d'enregistrer l'utilisation du disque.

Afin d'expliquer ce que je veux dire, lorsque quelqu'un installe Ubuntu, il y a environ 4,5 Go de disque utilisé. Ensuite, lorsque vous installez/désinstallez des programmes, cette utilisation augmente ou diminue.

Ce que je veux, c'est un moyen de consigner automatiquement le disque actuel utilisé dans un fichier txt lorsqu'il y a un changement (quelque chose est installé/enregistré ou désinstallé/supprimé) avec l'heure et la date auxquelles ce changement s'est produit.

Réponse acceptée :

Utiliser le df commande pour garder une trace de l'espace disque, et le lsblk commande pour garder une trace des lecteurs montés, le script ci-dessous, exécuté en arrière-plan, enregistrera les modifications dans l'espace libre de tous les lecteurs montés. Il crée un fichier journal :~/disklog où il écrit les modifications (en k ).

Si vous l'exécutez dans le terminal, il affichera le résultat simultanément.

Le contenu du fichier journal ressemble à :

[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

Comment utiliser

  1. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous log_diskusage.py
  2. Dans la section head du script, définissez l'intervalle de temps, le seuil et le nombre maximum de lignes dans le fichier journal :

    #--- 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 pour exécuter les vérifications d'espace disque, telles quelles, 20 secondes
    • Le treshold  :Vous ne voudriez probablement pas conserver une trace de toutes les (très) petites modifications, car le disque en contient beaucoup de petits changements dans l'espace disque libre. En l'état, il est défini sur 10k
    • Les max_lines , car le fichier journal augmentera rapidement, surtout si vous définissez le seuil sur zéro
  3. Testez le script avec la commande :

    python3 /path/to/log_diskusage.py
    
  4. Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage : Dash > Applications de démarrage > Ajouter.

En relation:Comment installer des packages avec Apt-Get sur un système connecté via proxy dans Ubuntu ?

Le scénario

#!/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. Analyseur d'utilisation du disque

  2. Les mérites d'un système de fichiers sans partition ?

  3. Comment utiliser l'outil d'utilisation de l'espace disque dans cPanel

  4. Comment réduire l'utilisation du disque du fichier journal avec ISPConfig ou LAMP

  5. Journal Crontab :comment enregistrer la sortie de mon script Cron

5 façons de vérifier l'espace disque sur Ubuntu

Vérifier l'utilisation du disque à l'aide de l'utilitaire de ligne de commande Duf

Comment empêcher /var/log/kern.log.1 de consommer tout l'espace disque ?

Où puis-je trouver le quota de disque

Comment utiliser l'outil d'utilisation du disque cPanel

Bash surveille l'utilisation du disque