Probleme espace disque
Résolu
maI18
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
maI18 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
maI18 Messages postés 25 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Probleme espace disque
- Cloner disque dur - Guide
- Espace insécable - Guide
- Defragmenter disque dur - Guide
- Espace de stockage gmail plein - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
21 réponses
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.
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 !
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 !
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...
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...
Salut,
Tu peux essayer avec un script du genre :
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) doneCe 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 usedLe 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;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+
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... ;-))
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... ;-))
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?
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).
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).
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....
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....
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 :
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)...
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 usedet 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)...
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
/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
Après ton :
df -k | tr -d '\n'
rajoute :
df -k | tr -d '\n'
rajoute :
df -k | tr -d '\n' | sed 's/used\//used\n\//'et dis moi si ça le fait ;-))
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.....
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.....
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
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
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
ç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
Salut,
Et si tu essayais tout simplement :
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) doneJ'ai rajouté un guillemet à "while [ "$ligne1" -le "$count" ]" qui manquait ;-))
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 } ';-)
Oui mais ce que tu me donnes c'est pour afficher :
"tache .... jour..." non ?
alors que moi je veux mettre ça dans des variables.
"tache .... jour..." non ?
alors que moi je veux mettre ça dans des variables.
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 !!!
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 !!!