Rechercher : dans
Par :

Probleme espace disque

Dernière réponse le 6 jun 2005 à 15:39:29 maI18, le 2 jun 2005 à 14:37:45 
 Signaler ce message aux modérateurs

Bonjour,

Je souhaite récuperer la taille des partition de mon systeme en shell (espace libre, occupé, total).
Le probleme est que HP-UX me donne un résultat sous cette forme (suite à la commande df -k):

/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb
1893280 free allocated Kb
3105509 used allocated Kb

Or je ne sais pas comment récupérer ces résultats (sachant qu'il y a encore beaucoup de partitions qui suivent...).
Si vous pouvez m'aider ne vous gener pas !!!
Merci

Configuration: HP-UX

Meilleures réponses pour « Probleme espace disque » dans :
[Vista] Libérer l'espace disque Voir Beaucoup de gens viennent sur le forum demander pourquoi Vista consomme-t-il énormément d'espace disque. Ceci est dû à plusieurs raisons. En voilà quelques unes : Le cache des miniatures Le cache des mises à jour Les clichés instantanés...
Désactiver l'alerte - Espace disque faible VoirQuand l'espace libre sur une de vos partitions devient très faible, vous recevrez une petite notification, qui devient très agaçante surtout si cette partition contient des documents importants pour vous. Pour désactiver cette alerte, procédez...

1

mamiemando, le 2 jun 2005 à 16:50:00

C'est toujours la même chose ;) Tu chaines ta commande d'abord avec un grep (pour garder les bonne lignes donc cf cours sur les expressions régulières) et ensuite avec un awk (pour isoler les champs). Je peux pas t'en dire plus pour l'instant car pour l'instant je ne suis (malheureusement) pas sous linux.

Répondre à mamiemando

2

maI18, le 2 jun 2005 à 17:15:28

Merci de ta réponse mais... oui il y a un mais:

Le probleme est que je dois récupérer toutes les données d'une partition en une seule fois pour créer une ligne genre :

partition : /aaa libre : 12146 occupé 1213 total .........

De plus, il n'y a aucun moyen de fire un grep sur les lignes qui m'interessent car elle se ressemble toutes !!!

/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb
1893280 free allocated Kb
3105509 used allocated Kb
62 % allocation used
/home/lord (/dev/vg01/lordlv ) : 17776640 total allocated Kb
378152 free allocated Kb
17398488 used allocated Kb
97 % allocation used
/home (/dev/vg00/lvol5 ) : 3028736 total allocated Kb
660717 free allocated Kb
2368019 used allocated Kb
78 % allocation used
/home1 (/dev/vg02/home1lv ) : 10234528 total allocated Kb
2787174 free allocated Kb
7447354 used allocated Kb
72 % allocation used
/opt (/dev/vg00/lvol6 ) : 509305 total allocated Kb
40646 free allocated Kb
468659 used allocated Kb
92 % allocation used
/tmp (/dev/vg00/lvol4 ) : 577904 total allocated Kb
560883 free allocated Kb
17021 used allocated Kb
2 % allocation used
/usr (/dev/vg00/lvol7 ) : 1006092 total allocated Kb
313708 free allocated Kb
692384 used allocated Kb
68 % allocation used
/var (/dev/vg00/lvol8 ) : 500533 total allocated Kb
218893 free allocated Kb
281640 used allocated Kb
56 % allocation used
/stand (/dev/vg00/lvol1 ) : 75359 total allocated Kb
48398 free allocated Kb
26961 used allocated Kb
35 % allocation used
/ (/dev/vg00/lvol3 ) : 138963 total allocated Kb
66957 free allocated Kb
72006 used allocated Kb
51 % allocation used


Mais j'ai un début de solution (vraiment début), il faudrait que je puisse séléctionner les 4 premières lignes et toutes les mettre sur la même ligne...
De cette mainère avec un "awk" je pourrais obtenir tous ce qu'il me faut...
Merci quand même de ta réponse !

Répondre à maI18

3

mamiemando, le 2 jun 2005 à 17:21:33

Je maintiens c'est faisable avec une expression régulière !! Si tu me disais les critères sur lesquels tu te base on pourrait faire une expression régulière (motif=critère suivi de 3 chaines séparées par un retour à la ligne).

Si c'est forcément les 4 premières lignes tu peux utiliser la commande head et ensuite faire un awk. Mais c'est nettement moins bon comme solution car le jour ou ce ne sera plus au début, ton script ne marchera plus...

Répondre à mamiemando

4

jipicy, le 3 jun 2005 à 00:35:25

Salut,

Tu peux essayer avec un script du genre :

#!/bin/bash
# script.sh

#script de mise en forme de la sortie de la commande "df -k"

#définition des variables
count=`cat disque.txt | wc -l`
ligne1=1
ligne2=4

while [ "$ligne2" -le "$count" ];do
                sed -n "$ligne1","$ligne2"p disque.txt\
                | tr -d '\n'\
                | sed 's/Kb/Kb /g'\
                | awk ' { print "Partition : "$1," Libre : "$9," Occupé : "$13," Total : "$5,\
                " Pourcentage utilisation : "$17" %" } ' >> resultat.txt
                ligne1=$(expr $ligne1 + 4)
                ligne2=$(expr $ligne2 + 4)
done
Ce qui donne en partant d'un fichier "disque.txt" comme suit :
/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb
1893280 free allocated Kb
3105509 used allocated Kb
62 % allocation used
/home/lord (/dev/vg01/lordlv ) : 17776640 total allocated Kb
378152 free allocated Kb
17398488 used allocated Kb
97 % allocation used
/home (/dev/vg00/lvol5 ) : 3028736 total allocated Kb
660717 free allocated Kb
2368019 used allocated Kb
78 % allocation used
/home1 (/dev/vg02/home1lv ) : 10234528 total allocated Kb
2787174 free allocated Kb
7447354 used allocated Kb
72 % allocation used
/opt (/dev/vg00/lvol6 ) : 509305 total allocated Kb
40646 free allocated Kb
468659 used allocated Kb
92 % allocation used
/tmp (/dev/vg00/lvol4 ) : 577904 total allocated Kb
560883 free allocated Kb
17021 used allocated Kb
2 % allocation used
/usr (/dev/vg00/lvol7 ) : 1006092 total allocated Kb
313708 free allocated Kb
692384 used allocated Kb
68 % allocation used
/var (/dev/vg00/lvol8 ) : 500533 total allocated Kb
218893 free allocated Kb
281640 used allocated Kb
56 % allocation used
/stand (/dev/vg00/lvol1 ) : 75359 total allocated Kb
48398 free allocated Kb
26961 used allocated Kb
35 % allocation used
/ (/dev/vg00/lvol3 ) : 138963 total allocated Kb
66957 free allocated Kb
72006 used allocated Kb
51 % allocation used
Le résultat obtenu aprés traitement est le suivant:
cat resultat.txt
Partition : /home/adm  Libre : 1893280  Occupé : 3105509  Total : 4998789  Pourcentage utilisation : 62 %
Partition : /home/lord  Libre : 378152  Occupé : 17398488  Total : 17776640  Pourcentage utilisation : 97 %
Partition : /home  Libre : 660717  Occupé : 2368019  Total : 3028736  Pourcentage utilisation : 78 %
Partition : /home1  Libre : 2787174  Occupé : 7447354  Total : 10234528  Pourcentage utilisation : 72 %
Partition : /opt  Libre : 40646  Occupé : 468659  Total : 509305  Pourcentage utilisation : 92 %
Partition : /tmp  Libre : 560883  Occupé : 17021  Total : 577904  Pourcentage utilisation : 2 %
Partition : /usr  Libre : 313708  Occupé : 692384  Total : 1006092  Pourcentage utilisation : 68 %
Partition : /var  Libre : 218893  Occupé : 281640  Total : 500533  Pourcentage utilisation : 56 %
Partition : /stand  Libre : 48398  Occupé : 26961  Total : 75359  Pourcentage utilisation : 35 %
Partition : /  Libre : 66957  Occupé : 72006  Total : 138963  Pourcentage utilisation : 51 %
Les explications :
#!/bin/bash
# script.sh

# script de mise en forme de la sortie de la commande "df -k"

# définition des variables
# on récupère le nombre de ligne du fichier dans une variable
count=`cat disque.txt | wc -l`
# on initialise 2 variables pour délimiter les lignes (4 par 4)
ligne1=1
ligne2=4

# On boucle tant qu'on n'a pas atteint le nombre de ligne
while [ "$ligne2" -le "$count" ];do
        # on isole les lignes 4 par 4
        sed -n "$ligne1","$ligne2"p disque.txt\
        # on supprime le retour chariot pour n'avoir plus qu'une seule ligne (plus facile
        # pour isoler les champs avec "awk"
        | tr -d '\n'\
        # on ajoute un espace après "Kb" (petit inconvénient créé par la suppression
        # du retour chariot)
        | sed 's/Kb/Kb /g'\
        # puis on fini par formater le tout avec "awk" en récupérant les champs
        # qui nous intéressent
        | awk ' { print "Partition : "$1," Libre : "$9," Occupé : "$13," Total : "$5,\
        " Pourcentage utilisation : "$17" %" } ' >> resultat.txt
        # on incrémente le contage des lignes
        ligne1=$(expr $ligne1 + 4)
        ligne2=$(expr $ligne2 + 4)
done
;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

5

maI18, le 3 jun 2005 à 10:01:18

Whaou !!!
J'aurai jamais penser à un code pareil !!!
Je viens de le tester mais il ne fait rien...... je pense que ça vient de l'expression pour désigner les retour chariot...
ça ne m'affiche rien du tout dans resultat.txt.
Je vais tout de même essayer de trouver où ça foire (faut bien que je fasse quelque chose!).

Vraiment merci pour vos réponses et pour les explications de jipicy.

Je précise que le texte retourné par df -k ne change pas et sera toujours sous cette forme.
A+

Répondre à maI18

6

jipicy, le 3 jun 2005 à 10:09:18

Salut,

Essaie avec une commande unique, sur une seule et même ligne d'abord, en prenant soin que le fichier "disque.txt" existe. Là, je récupère les ligne 25 à 28 :

sed -n '25,28p' disque.txt | tr -d '\n'| sed 's/Kb/Kb /g'|awk '{ print "Partition : "$1," Libre : "$9," Occupé : "$13," Total : "$5," Pourcentage utilisation : "$17" %" }'

Ou alors commence par tester des bouts de codes et agrémente au fur et à mesure que les tests sont positifs :

sed -n '25,28p' disque.txt | tr -d '\n'

Si ça marche :

sed -n '25,28p' disque.txt | tr -d '\n'| sed 's/Kb/Kb /g'

et ainsi de suite... ;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

7

maI18, le 3 jun 2005 à 10:49:23

C'est quand je veux supprimer le retour chariot que ça foire. Je mez demande si il peut supprimer ce "/n", ya t-il une autre expression pour ça?

Répondre à maI18

8

jipicy, le 3 jun 2005 à 11:11:38

Attention !!!
Ce n'est pas "/n" (slash - n), mais "\n" (anti-slash - n).
Sinon essaye aussi avec "\r" (ça c'est le véritable retour chariot, l'autre c'est pour le saut de ligne). Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

9

maI18, le 3 jun 2005 à 11:58:26

Désolé, faute de frappe pour le \n.

je ne sais pas d'où vient l'erreur car si je cré un fichier qui contient:

azeazeaz
azeazeaz
sdsqdsd
puis je fais tr -d "\n" alors j'obtiens:

azeazeazazeazeazsdsqdsd

mais quand je le fais sur mon fichier ça ne fais rien....

Répondre à maI18

10

jipicy, le 3 jun 2005 à 13:25:46

Re-

Ton fichier tu l'as créé je suppose à partir de :
df -k > mon_fich

Essaie de créer un fichier à partir d'un "Copier/Coller" de ça :

/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb
1893280 free allocated Kb
3105509 used allocated Kb
62 % allocation used
/home/lord (/dev/vg01/lordlv ) : 17776640 total allocated Kb
378152 free allocated Kb
17398488 used allocated Kb
97 % allocation used
/home (/dev/vg00/lvol5 ) : 3028736 total allocated Kb
660717 free allocated Kb
2368019 used allocated Kb
78 % allocation used
/home1 (/dev/vg02/home1lv ) : 10234528 total allocated Kb
2787174 free allocated Kb
7447354 used allocated Kb
72 % allocation used
/opt (/dev/vg00/lvol6 ) : 509305 total allocated Kb
40646 free allocated Kb
468659 used allocated Kb
92 % allocation used
/tmp (/dev/vg00/lvol4 ) : 577904 total allocated Kb
560883 free allocated Kb
17021 used allocated Kb
2 % allocation used
/usr (/dev/vg00/lvol7 ) : 1006092 total allocated Kb
313708 free allocated Kb
692384 used allocated Kb
68 % allocation used
/var (/dev/vg00/lvol8 ) : 500533 total allocated Kb
218893 free allocated Kb
281640 used allocated Kb
56 % allocation used
/stand (/dev/vg00/lvol1 ) : 75359 total allocated Kb
48398 free allocated Kb
26961 used allocated Kb
35 % allocation used
/ (/dev/vg00/lvol3 ) : 138963 total allocated Kb
66957 free allocated Kb
72006 used allocated Kb
51 % allocation used
et refait un :
cat fich | tr -d '\n'
et vois si ça marche. Ce pourrait être la façon dont la commande "df" formate sa sortie (une autre séquence d'échappement en fin de ligne ou un truc du genre)...
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

11

maI18, le 3 jun 2005 à 13:55:13

Oui ça marche comme ça mais le probleme vient peut-être du fait que ce n'est pas :

/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb
1893280 free allocated Kb
3105509 used allocated Kb
62 % allocation used

il y a des espaces sur les 3 dernieres lignes pour qu'elles se finnissent toutes à la même colone (quand je fais un copier coller ici ça ne me le prend pas...)

Même si ce ne sont que des espaces, ils peuvent (peu-être) être source d'erreur. De plus, lorsque je fais df -k | tr -d "\n" alors j'obtien:

/home/adm (/dev/vg02/dmplv ) : 4998790 total allocated Kb 1893273 free allocated Kb 3105517 used allocated Kb 62 % allocation used/home/lord

Répondre à maI18

12

jipicy, le 3 jun 2005 à 14:10:36

Après ton :
df -k | tr -d '\n'
rajoute :

df -k | tr -d '\n' | sed 's/used\//used\n\//'
et dis moi si ça le fait ;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

13

maI18, le 3 jun 2005 à 15:09:06

Ouf enfin ça marche presque...
En fait c'était la commande sed 's/Kb/Kb /g' qui faisait tout planter...
Mais je l'ai virée et c'est presque bon.

J'ai un autre probleme: (enfin je croi)

le nom de la partition c'est :
/home/adm (/dev/vg02/dmplv ) :

/home/adm ou /dmplv ???

parce queje fais un " cut" pour récupérer /dmplv mais il marche plus !!!
Je faisais des test, et puis maintenant ça ne marche plus... Je comprends rien, j'en ai vraiment marre d' Unix !

Je sais pas pourquoi il ne prend pas mes cut:

print "/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb 1893280 free allocated Kb 3105509 used allocated Kb 62 % allocation used" > test
cut -f 6- -d "/" < test
et là rien.....

Répondre à maI18

14

jipicy, le 3 jun 2005 à 16:51:28

Essaie comme ça :

echo "/home/adm (/dev/vg02/dmplv ) : 4998789 total allocated Kb 1893280 free allocated Kb 3105509 used allocated Kb 62 % allocation used" | awk '{ print $2 }'| cut -d "/" -f 4 Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

15

maI18, le 6 jun 2005 à 09:39:29

Merci jipicy !

ça marche (enfin).
Mais j'ai un autre probleme.....:

crontab -l | grep -v \# > task
awk '{ print $6" "$5" "$3" "$4" "$2" "$1 }' < task > list

count=`cat list | wc -l`
ligne1=1

while [ "$ligne1 -le "$count" ];do

sed -n "$ligne1"p list | awk ' { tache= $6 ; jour= $5 ; moi= $4 ; num_jour= $3 ; heure= $2 ; min=$1 } '
echo $tache
ligne1=$(expr $ligne1 + 1)
done



Je veux mettre les différents mots de la ligne dans des variables mais ça ne marche pas (on ne peut pas utiliser awk de cette façon ?).
Y a t-il une erreur dans mon script ?
Merci de votre aide

Répondre à maI18

16

jipicy, le 6 jun 2005 à 10:58:51

Salut,

Et si tu essayais tout simplement :

count=`cat list | wc -l`
ligne1=1

while [ "$ligne1" -le "$count" ];do

sed -n "$ligne1"p list | awk ' { print "tâche= "$6  "  jour= "$5 "  moi= "$4 "  num_jour= "$3  "  heure= "$2  "  min= "$1 } '
ligne1=$(expr $ligne1 + 1)
done 
J'ai rajouté un guillemet à "while [ "$ligne1" -le "$count" ]" qui manquait ;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

17

jipicy, le 6 jun 2005 à 11:22:38

Pour une meilleure lisibilité (mise en page), tu peux reformuler la sortie de "awk" comme suit :

awk '{ printf "%s\t %s\t %s\t %s\t %s\t %s\n","tâche= "$6,"jour= "$5,"moi= "$4,"num_jour= "$3,"heure= "$2,"min= "$1 } '
;-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

18

maI18, le 6 jun 2005 à 11:26:37

Oui mais ce que tu me donnes c'est pour afficher :
"tache .... jour..." non ?
alors que moi je veux mettre ça dans des variables.

Répondre à maI18

19

jipicy, le 6 jun 2005 à 11:49:51

Tu peux préciser ta pensée là ???
Tu veux récupérer chaque mot ("tache = $1", "heure= $2" etc..) chacun dans une variable ou le résultat de la ligne entière dans une variable ??? Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

20

maI18, le 6 jun 2005 à 14:23:35

Non c'est bon en fait j'en ai aps besoin, je réfléchi pas assez avant d'agir !!!

Mais j'ai un truc bizare:

si je fais une boucle if dans une boucle if ça devrait marcher ex:

if .... then
...
else
if....then
....
else
if...
....
else
...
fi
fi
fi

ça devrait marcher non ?
Pourtant j'ai l'impression que ça ne séxécute pas correctement...
Désolé de faire de ce topic une foire aux questions, mais j'ai vraiment besoin d'aide !!!

Répondre à maI18