GNU/Linux >> Tutoriels Linux >  >> Linux

Trouver la taille et l'espace libre du système de fichiers contenant un fichier donné

Depuis Python 3.3, il existe un moyen simple et direct de le faire avec la bibliothèque standard :

$ 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

Ces nombres sont en octets. Voir la documentation pour plus d'informations.


Cela ne donne pas le nom de la partition, mais vous pouvez obtenir les statistiques du système de fichiers directement en utilisant le statvfs Appel système Unix. Pour l'appeler depuis Python, utilisez os.statvfs('/home/foo/bar/baz') .

Les champs pertinents dans le résultat, selon 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.

Donc, pour donner un sens aux valeurs, multipliez par 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)

Si vous avez juste besoin d'espace libre sur un appareil, consultez la réponse en utilisant os.statvfs() ci-dessous.

Si vous avez également besoin du nom de périphérique et du point de montage associés au fichier, vous devez appeler un programme externe pour obtenir ces informations. df fournira toutes les informations dont vous avez besoin - lorsqu'il est appelé en tant que df filename il imprime une ligne sur la partition qui contient le fichier.

Pour donner un exemple :

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

Notez que c'est assez fragile, car cela dépend du format exact du df sortie, mais je ne suis pas au courant d'une solution plus robuste. (Il existe quelques solutions reposant sur le /proc système de fichiers ci-dessous qui sont encore moins portables que celui-ci.)


Linux
  1. Comment puis-je trouver la taille de pile maximale ?

  2. Comment lister la taille de chaque fichier et répertoire et trier par taille décroissante dans Bash ?

  3. Comment trouver le gestionnaire de fichiers par défaut ?

  4. Plus d'espace dans le système de fichiers racine, comment pourrais-je augmenter la taille ?

  5. Comment trouver le fichier .pid pour un processus donné

Trouver la taille de la RAM sous Linux

quelle est la commande la plus fiable pour trouver la taille réelle d'un fichier linux

Quelle est la commande unix pour savoir à quel fichier exécutable correspond une commande donnée ?

Afficher l'espace libre du système de fichiers disponible pour l'utilisateur root

AWK et les noms de fichiers contenant de l'espace.

Vérifiez si la taille du fichier est supérieure à 1 Mo en utilisant la condition IF