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

Finden Sie die Größe und den freien Speicherplatz des Dateisystems, das eine bestimmte Datei enthält

Ab Python 3.3 gibt es dafür eine einfache und direkte Möglichkeit mit der Standardbibliothek:

$ cat free_space.py 
#!/usr/bin/env python3

import shutil

total, used, free = shutil.disk_usage(__file__)
print(total, used, free)

$ ./free_space.py 
1007870246912 460794834944 495854989312

Diese Zahlen sind in Byte. Weitere Informationen finden Sie in der Dokumentation.


Dies gibt nicht den Namen der Partition an, aber Sie können die Dateisystemstatistiken direkt mit statvfs abrufen Unix-Systemaufruf. Um es von Python aus aufzurufen, verwenden Sie os.statvfs('/home/foo/bar/baz') .

Die relevanten Felder im Ergebnis laut POSIX:

unsigned long f_frsize   Fundamental file system block size. 
fsblkcnt_t    f_blocks   Total number of blocks on file system in units of f_frsize. 
fsblkcnt_t    f_bfree    Total number of free blocks. 
fsblkcnt_t    f_bavail   Number of free blocks available to 
                         non-privileged process.

Um die Werte zu verstehen, multipliziere also mit f_frsize :

import os
statvfs = os.statvfs('/home/foo/bar/baz')

statvfs.f_frsize * statvfs.f_blocks     # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree      # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail     # Number of free bytes that ordinary users
                                        # are allowed to use (excl. reserved space)

Wenn Sie nur den freien Speicherplatz auf einem Gerät benötigen, sehen Sie sich die Antwort mit os.statvfs() an unten.

Wenn Sie auch den mit der Datei verknüpften Gerätenamen und Einhängepunkt benötigen, sollten Sie ein externes Programm aufrufen, um diese Informationen zu erhalten. df liefert alle Informationen, die Sie benötigen -- wenn es als df filename aufgerufen wird es gibt eine Zeile über die Partition aus, die die Datei enthält.

Um ein Beispiel zu geben:

import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
    output.split("\n")[1].split()

Beachten Sie, dass dies ziemlich spröde ist, da es vom genauen Format des df abhängt Ausgabe, aber mir ist keine robustere Lösung bekannt. (Es gibt einige Lösungen, die sich auf /proc stützen Dateisystem unten, die noch weniger portabel sind als dieses.)


Linux
  1. So finden Sie freien Speicherplatz und analysieren die Festplattennutzung

  2. Was ist mit dem freien Speicherplatz passiert?

  3. Wie finde ich die maximale Stapelgröße?

  4. Wie kann ich die Größe jeder Datei und jedes Verzeichnisses auflisten und in Bash nach absteigender Größe sortieren?

  5. Wie finde ich den Standard-Dateimanager?

Finden Sie die RAM-Größe in Linux

was ist der zuverlässigste befehl, um die tatsächliche größe einer datei zu finden linux

Was ist der Unix-Befehl, um herauszufinden, welche ausführbare Datei einem bestimmten Befehl entspricht?

Zeigt den freien Speicherplatz des Dateisystems an, der dem Root-Benutzer zur Verfügung steht

AWK und Dateinamen mit Leerzeichen darin.

So finden Sie die .pid-Datei für einen bestimmten Prozess