GNU/Linux >> Znalost Linux >  >> Linux

Najděte velikost a volné místo v souborovém systému obsahujícím daný soubor

Od Pythonu 3.3 existuje snadný a přímý způsob, jak toho dosáhnout pomocí standardní knihovny:

$ 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

Tato čísla jsou v bajtech. Další informace naleznete v dokumentaci.


Toto neuvádí název oddílu, ale statistiky souborového systému můžete získat přímo pomocí statvfs Systémové volání Unix. Chcete-li jej volat z Pythonu, použijte os.statvfs('/home/foo/bar/baz') .

Příslušná pole ve výsledku podle 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.

Aby hodnoty měly smysl, vynásobte 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)

Pokud potřebujete pouze volné místo v zařízení, podívejte se na odpověď pomocí os.statvfs() níže.

Pokud potřebujete také název zařízení a přípojný bod spojený se souborem, měli byste zavolat externí program, abyste získali tyto informace. df poskytne všechny informace, které potřebujete -- když je voláno jako df filename vypíše řádek o oddílu, který obsahuje soubor.

Uvedu příklad:

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()

Všimněte si, že je to poněkud křehké, protože závisí na přesném formátu df výstup, ale nejsem si vědom robustnějšího řešení. (Existuje několik řešení založených na /proc souborový systém níže, které jsou ještě méně přenosné než tento.)


Linux
  1. Jaký je unixový příkaz ke zjištění, jaký spustitelný soubor odpovídá danému příkazu?

  2. Zobrazit volné místo v souborovém systému dostupné pro uživatele root

  3. AWK a názvy souborů s mezerou.

  1. Inodes a souborový systém Linux

  2. Jak najít volné místo na disku a analyzovat využití disku?

  3. Co se stalo s volným prostorem?

  1. Najít adresu Mac v systému souborů?

  2. Jak zjistím maximální velikost zásobníku?

  3. Jak vypsat velikost každého souboru a adresáře a seřadit podle sestupné velikosti v Bash?