2009-09-21 22 views
3

J'essaie de trouver une sorte de commande ou regex pour obtenir la taille et l'espace disponible ou utilisé d'un disque dur dans Linux.Comment collecter la taille du disque dur et l'espace disponible ou utilisé dans linux cli?

En ce moment j'utilise ceci;

df -h 

et d'obtenir quelque chose comme ceci;

Filesystem   Size Used Avail Use% Mounted on 
/dev/sda1    10G 3.1G 6.4G 33%/
/dev/sda2    147G 5.8G 134G 5% /mnt 

Ce que je besoin est de pouvoir, par lecteur, recueillir la taille, utilisé et les valeurs Disp. Des idées sur la façon dont je pourrais aller chercher ces données?

EDIT: Étant donné que je n'étais apparemment pas assez clair, voici en gros ce que je veux que le résultat final soit;

array(
    '/dev/sda1' => array(
     'size' => '10G', 'used' => '3.1G', 'avail' => '6.4G' 
     ), 
    '/dev/sda2' => array(
     'size' => '147G', 'used' => '5.8G', 'avail' => '134G' 
     ) 
    ) 

Qu'ou chaque partition étant dans son propre tableau séparé, plutôt que d'un tableau de maître.

+2

Cette question ferait beaucoup mieux sur http://serverfault.com ou http: // superuser.com –

+0

Je ne suis pas d'accord - cette question concerne soit le script, soit la construction d'une regex (en fonction de l'approche que vous voulez utiliser), qui sont toutes deux des questions de codage et mieux adaptées à stackoverflow qu'à serverfault ou superuser. – Tim

+0

S'il n'y avait pas de CLI, je suggèrerais d'utiliser 'statvfs (2)' ... mais comme ça, ça ne me semble pas une question de programmation. – ephemient

Répondre

6

J'ai trouvé la réponse à ma propre question;

Total:

df -h | sed -n 2p | awk '{print $2}' 

Gratuit:

df -h | sed -n 2p | awk '{print $4}' 

occasion:

df -h | sed -n 2p | awk '{print $3}' 
+0

Bon, en travaillant pour moi.Merci et Comment changer le répertoire que je veux? Par exemple: "/ home" – Yuday

1

Vous avez déjà cette information. df -m ou df -k pour l'afficher en mégaoctets ou en kilooctets, respectivement.

Si la sortie n'est pas exactement ce que vous voulez, utilisez d'autres outils de ligne de commande (grep, sed, awk) pour filtrer et formater la sortie.

Bien sûr, vous devez monter la partition pour obtenir son espace utilisé/disponible.

1

Si vous avez un accès root, vous pouvez exécuter fdisk -l /dev/sda pour obtenir la liste des partitions sur un périphérique.

Cependant, je ne vois pas ce que vous pourriez vouloir cette information. Si vous avez expliqué pourquoi vous en avez besoin, les gens pourraient vous donner de meilleures réponses.

-1

Nice, mais cela ne fonctionne pas pour moi.
Cependant, n'aimeriez-vous pas imprimer la taille totale du lecteur et non la taille de la partition?

HD=$(lsblk | head -n 2 | tail -n 1 | cut -d " " -f 1) 

HDTotalSize=$(fdisk -l /dev/$HD |grep "Disk /dev/$HD:" | head -n 2 | tail -n 1 | cut -d " " -f 5) 

fdisk -l /dev/$HD |grep "Disk /dev/$HD:" | head -n 2 | tail -n 1 | cut -d " " -f 1 

Dans mon cas, je suis en train de voir à quel point la chambre que je reste pour créer une nouvelle partition sur un lecteur essayant de rendre la plate-forme libre pour travailler avec differnt hd/VMs et farcir son avéré être dur

script complet here

0

Si vous devez faire cela dans un script shell, cela obtenir la taille totale de/home en octets:

filesystem=/home 
size=$(df --block-size=1 "$filesystem" | awk 'FNR==2 { print $2 }')