Partition et bash

Bonjour,

je voulais vous demander qu’elle serait le moyen le plus simple pour afficher la taille totale, libre, utilisé en bash sachant que selon l’utilisateur, le partitionnement peut être différent…

[code] df -h
Sys. fich. Taille Util. Dispo Uti% Monté sur
/dev/simfs 10G 985M 9,1G 10% /
tmpfs 103M 72K 103M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock

[/code]

df -h | grep -vE '^Sys|tmpfs|cdrom' | awk '{ print $2 " " $3 " " $4 " " $5}' 10G 985M 9,1G 10%

Tout est ok mais à partir du moment où l’utilisateur sépare home par exemple, ce code est erroné…

Merci pour vos conseils

Cordialement,

salut,

donc, tu ne veux qu’une partie des lignes qui commencent par ‘/dev’, c’est ça ?

awk' sait identifier les regex; ce n'est pas un "supercut’", c’est un “super `grep’” !

Un exemple parlera mieux :

Machine A:

[quote] df -h
Sys. fich. Taille Util. Dispo Uti% Monté sur
/dev/simfs 10G 1006M 9,1G 10% /
tmpfs 103M 72K 103M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
[/quote]

Machine B:

[quote]Sys. fich. Taille Util. Dispo Uti% Monté sur
rootfs 57G 38G 17G 69% /
udev 10M 0 10M 0% /dev
tmpfs 201M 248K 201M 1% /run
/dev/disk/by-uuid/89236856-3b69-46a7-8692-115d57e5d929 57G 38G 17G 69% /
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 908M 0 908M 0% /run/shm
[/quote]

Machine C:

[quote]df -h
Sys. fich. Taille Util. Dispo Uti% Monté sur
rootfs 6,4G 865M 5,2G 15% /
udev 10M 0 10M 0% /dev
tmpfs 100M 248K 100M 1% /run
/dev/disk/by-uuid/088e6d2d-823c-444d-997f-791bf271d34b 6,4G 865M 5,2G 15% /
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 367M 0 367M 0% /run/shm
/dev/sda6 18G 172M 17G 2% /home
[/quote]

La commande:

df -h | grep -vE '^Sys|tmpfs|cdrom|dev' | awk '{ print $5 " " $2 " " $3 " " $4 }'

retourne bien une valeur sur les machines B et C mais pas sur A et sur la C, home est absent.

J’ai pensé à créer des fonctions mais est ce la bonne méthode ? Je ne connais pas toutes les distributions donc ce n’est pas évident ! Est ce impossible ?!?

donc je me demande si j’ai réellement bien fait de poster car je me casse la tête dessus et je vais pas être le seul ^^

et là encore, je n’ai que 3 machines de test, var etc… n’ont pas été séparés du reste, wow le chlimblique xD sans compter que la langue est à prendre en compte je viens d’y penser ^^

là, on voit ce que tu as, il faudrait quand même nous montrer ce que tu veux, et dire pourquoi.
pas parce que tu le veux/dois/peux ! pourquoi ça doit apparaître, par rapport à ce qui ne doit pas figurer, dans le résultat. :wink:

car j’ai un .sh de monitoring et je me suis rendu compte que sur certaines machines, l’espace disque etc… ne s’affichait pas ou était erroné.

Ce que je veux, c’est mentionné dans mon premier post. :wink:

Je veux afficher la taille des partitions (total, utilisé, libre) de home, racine (var etc…), un truc assez complet :slightly_smiling:

Je demande juste la meilleur façon de le faire car mise à pars faire du grep, awk je ne vois pas trop comment faire surtout qu’à pars Ubuntu et debian, le reste, je ne connais pas… donc il faudrait que ce soit un AIO en gros ^^

mentionner n’est pas montrer !

AIO ?

et je vais me répéter :[quote]donc, tu ne veux qu’une partie des lignes qui commencent par ‘/dev’, c’est ça ?[/quote]parce c’est là (en gros) que le noyau met les partitions “physiques”.

Bonjour,

L’option x pour exclure des types :

df -hT
Sys. de fichiers Type     Taille Utilisé Dispo Uti% Monté sur
/dev/sda1        ext4        15G    7,0G  6,6G  52% /
udev             devtmpfs    10M       0   10M   0% /dev
tmpfs            tmpfs      386M    660K  385M   1% /run
tmpfs            tmpfs      5,0M       0  5,0M   0% /run/lock
tmpfs            tmpfs      1,6G       0  1,6G   0% /run/shm
/dev/sda3        ext4       129G    104G   19G  86% /home

df -hT -x tmpfs -x devtmpfs
Sys. de fichiers Type Taille Utilisé Dispo Uti% Monté sur
/dev/sda1        ext4    15G    7,0G  6,6G  52% /
/dev/sda3        ext4   129G    104G   19G  86% /home

Salut,

Vois si cela te convient.

[code]#!/bin/sh

newdf - Version de df plus conviviale.

awkscript="/tmp/newdf.$$"

trap “rm -f $awkscript” EXIT

cat << ‘EOF’ > $awkscript
function showunit(size)
{ mb = size / 1024; prettymb=(int(mb * 100)) / 100;
gb = mb / 1024; prettygb=(int(gb * 100)) / 100;

if ( substr(size,1,1) !~ “[0-9]” ||
substr(size,2,1) !~ “[0-9]” ) { return size }
else if ( mb < 1) { return size “K” }
else if ( gb < 1) { return prettymb “M” }
else { return prettygb “G” }
}

BEGIN {
printf “%-27s %7s %7s %7s %8s %-s\n”,
“Système de fichiers”, “Taille”, “Occupés”, “Dispo.”, “Capacité”, “Monté sur”
}

!/Filesystem/ {

size=showunit($2);
used=showunit($3);
avail=showunit($4);

printf “%-27s %7s %7s %7s %8s %-s\n”,
$1, size, used, avail, $5, $6
}
EOF

df -k | awk -f $awkscript

exit 0[/code]

Concrètement.

Système de fichiers Taille Occupés Dispo. Capacité Monté sur Sys. fich. 1K-blocks Util. Disponible Uti% rootfs 8.74G 7.21G 1.08G 87% / udev 10M 0 10M 0% /dev tmpfs 138.29M 652K 137.66M 1% /run /dev/disk/by-uuid/58a7bb9a-0a8a-4309-83a5-2079e912a18c 8.74G 7.21G 1.08G 87% / tmpfs 5M 0 5M 0% /run/lock tmpfs 496.58M 0 496.58M 0% /run/shm /dev/sda6 8.54G 7.33G 789.23M 91% /home tmpfs 691.46M 19.26M 672.19M 3% /home/loreleil/.cache tmpfs 496.58M 668K 495.92M 1% /tmp

[quote=“yap22”]Bonjour,

L’option x pour exclure des types :

[code]
df -hT
Sys. de fichiers Type Taille Utilisé Dispo Uti% Monté sur
/dev/sda1 ext4 15G 7,0G 6,6G 52% /
udev devtmpfs 10M 0 10M 0% /dev
tmpfs tmpfs 386M 660K 385M 1% /run
tmpfs tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs tmpfs 1,6G 0 1,6G 0% /run/shm
/dev/sda3 ext4 129G 104G 19G 86% /home

df -hT -x tmpfs -x devtmpfs
Sys. de fichiers Type Taille Utilisé Dispo Uti% Monté sur
/dev/sda1 ext4 15G 7,0G 6,6G 52% /
/dev/sda3 ext4 129G 104G 19G 86% /home

[/code][/quote]

Merci, ça peut être pas mal, je ne connaissais pas et pas regardé le man, j’avoue…

[quote=“BelZéButh”]Salut,

Vois si cela te convient.

[code]#!/bin/sh

newdf - Version de df plus conviviale.

awkscript="/tmp/newdf.$$"

trap “rm -f $awkscript” EXIT

cat << ‘EOF’ > $awkscript
function showunit(size)
{ mb = size / 1024; prettymb=(int(mb * 100)) / 100;
gb = mb / 1024; prettygb=(int(gb * 100)) / 100;

if ( substr(size,1,1) !~ “[0-9]” ||
substr(size,2,1) !~ “[0-9]” ) { return size }
else if ( mb < 1) { return size “K” }
else if ( gb < 1) { return prettymb “M” }
else { return prettygb “G” }
}

BEGIN {
printf “%-27s %7s %7s %7s %8s %-s\n”,
“Système de fichiers”, “Taille”, “Occupés”, “Dispo.”, “Capacité”, “Monté sur”
}

!/Filesystem/ {

size=showunit($2);
used=showunit($3);
avail=showunit($4);

printf “%-27s %7s %7s %7s %8s %-s\n”,
$1, size, used, avail, $5, $6
}
EOF

df -k | awk -f $awkscript

exit 0[/code]

Concrètement.

Système de fichiers Taille Occupés Dispo. Capacité Monté sur Sys. fich. 1K-blocks Util. Disponible Uti% rootfs 8.74G 7.21G 1.08G 87% / udev 10M 0 10M 0% /dev tmpfs 138.29M 652K 137.66M 1% /run /dev/disk/by-uuid/58a7bb9a-0a8a-4309-83a5-2079e912a18c 8.74G 7.21G 1.08G 87% / tmpfs 5M 0 5M 0% /run/lock tmpfs 496.58M 0 496.58M 0% /run/shm /dev/sda6 8.54G 7.33G 789.23M 91% /home tmpfs 691.46M 19.26M 672.19M 3% /home/loreleil/.cache tmpfs 496.58M 668K 495.92M 1% /tmp [/quote]

Salut, wow super, je vais tester merci :slightly_smiling:

le bénéfice du script sh, qui écrit un script awk sur le disque, à chacun de ses appels, pour l’effacer à la fin, m’échappe :question:

un simpledf -k | awk 'une longue commande'est bien mieux.

remarquez que le script awk “ne fait que” convertir des données en kO en [GM]O.

Re,

[quote=“Watael”]… [mono]une longue commande[/mono]
[/quote]

Qui serait ?

[quote=“BelZéButh”]Re,

[quote=“Watael”]… [mono]une longue commande[/mono]
[/quote]

Qui serait ?[/quote]la même que celle qui est envoyée dans un fichier :df -k | awk 'function showunit(size){...}; BEGIN{...} !/Filesystem/{...}'