IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Afficher disque disponible et la mémoire


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut Afficher disque disponible et la mémoire
    Bonsoir, je suis débutant en programmation shell. J'ai deux fonctions. L'un affiche un message quand le disque est plein et l'autre affiche l'espace occupé par les processus en mémoire en Mo.

    1ère fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function checkSpaceDisk()
     
    {
    #Extraction du nom des disques installés
    for DISK in $(df -x tmpfs  -x devtmpfs |grep dev |awk -F ‘’ ‘’ ‘{ print $1}|cut -d/ -f 3)
     
    Do
       #Espace disque utilisé
       espaceUtilise=$(df |grep grep -w « $DISM » |awk -F '' ''{ print $5})
     
       #Espace disque total. Valeur retournée à la caractère G à la fin donc j'extrais les chiffres
       espaceTotal=$(df -x tmpfs  -x devtmpfs |grep dev |awk -F '' ''{ print $2}) |grep '-o [[:digit:]])')
     if [[ '' $espaceUtilise '' -eq  '' espaceTotal '' ]]; then
        Echo « Le disque $DISK est plein »
     
    Fi
     
    done
     
    }
    Message d'erreur

    512 : nombre entier attendu comme expression


    La fonction 2
    A pour objectif d'extraire la quantité de mémoire occupée et à l'affiché en méga octet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function checkSpaceDisk()
    {
       #Récupération de la mémoire totale
       totalMemoire=sudo cat /proc/meminfo |grep MemTotal
       #Liste de tous les processus avec tri
       listeProcessus=ps -eo pid, %mem --sort=-%mem
       #à partir de là, je n'avance plus. L'objectif c'est de parcourir la liste des processus et la quantité
       #extrait ces deux colonnes, convertir la quantité % en méga Octet avec l'opération
       #taille="$processusEnCours" * "$totalMemoire
    }

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    grep |awk | cut ce n'est pas possible ! awk* sait très bien faire tout ça tout seul.

    attention : '' ce n'est pas " !
    et $espaceTotal, ce n'st pas espaceTotal.

    --
    * awk est un langage à part entière; pourquoi ne pas utiliser perl, ou python ?!
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Merci, N_BAH, c'est dans un cadre pédagogique que je fais donc je dois utiliser les outils en conséquence.
    Pour les guillemets c'est un petit souci avec mon clavier.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par karamaster Voir le message
    1ère fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function checkSpaceDisk()
     
    {
    #Extraction du nom des disques installés
    for DISK in $(df -x tmpfs  -x devtmpfs |grep dev |awk -F ‘’ ‘’ ‘{ print $1}|cut -d/ -f 3)
     
    Do
       #Espace disque utilisé
       espaceUtilise=$(df |grep grep -w « $DISM » |awk -F '' ''{ print $5})
     
       #Espace disque total. Valeur retournée à la caractère G à la fin donc j'extrais les chiffres
       espaceTotal=$(df -x tmpfs  -x devtmpfs |grep dev |awk -F '' ''{ print $2}) |grep '-o [[:digit:]])')
     if [[ '' $espaceUtilise '' -eq  '' espaceTotal '' ]]; then
        Echo « Le disque $DISK est plein »
     
    Fi
     
    done
     
    }
    Message d'erreur

    512 : nombre entier attendu comme expression
    Le formatage de ton fichier est très très étrange. Peut-être est-ce le résultat d'une copie de Windoze ou un passage par W0RD ?

    Comme dit N_BaH, il faut absolument corriger TOUS les guillemets typographiques et autres apostrophes et anti-apostrophes.

    Par exemple, il faut changer:
    awk -F ‘’ ‘’ ‘{ print $1}’ # avec des apostrophes typographiques (obliques à gauche et obliques à droite)
    en
    awk -F " " '{ print $1}' # avec des guillemets ascii et des apostrophes bien verticales
    ou
    awk -F ' ' '{ print $1}' # avec des apostrophes bien verticales
    (j'ai fait exprès de ne pas utiliser la balise CODE pour qu'on voie bien les caractères erronés de ton code)


    En plus de toutes les corrections pour le remettre correctement (si ce n'est déjà fait), comme le "grep grep" redoublé, il est possible que l'erreur 512 vienne de la ligne 13 (qui porte malheur) où je remplacerais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if [[ '' $espaceUtilise '' -eq  '' espaceTotal '' ]]; then  # avec des apostrophes doublées et un manque de dollar
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if test "$espaceUtilise" -eq  "$espaceTotal"; then # avec des vrais guillemets d'informaticien et un petit dollar de plus
    Tu noteras que la couleur des 2 bouts de code est différente dans ton navigateur.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Les erreurs de " et ' sont dû au copier/coller et j'avais un petit souci avec mon clavier. Voici la capture de tous le code. le retour à la ligne de certaines lignes de code sont faits pour afficher tout le code de la ligne.
    Est-ce que tu peux m'expliquer : if test ?

    Nom : Capture d’écran 2022-07-19 à 11.53.26.png
Affichages : 301
Taille : 142,6 Ko

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par karamaster Voir le message
    Est-ce que tu peux m'expliquer : if test
    Au contraire des autres langages de prog, le shell n'évalue pas des expressions mais des programmes (ou des commandes).
    Si un programme (ou une commande) retourne 0, elle est assimilée à vrai, et pas 0 c'est assimilé à faux (parce qu'il n'y a qu'une seule raison qui fait que la commande réussit, mais il peut y en avoir plein qui font qu'elle échoue)
    Donc on peut évaluer n'importe quel programme (commande) pourvue qu'elle retourne un état 0/pas 0. Ainsi on peut avoir
    • if grep (si le grep trouve)
    • if read (si le read lit)
    • if ls (si le ls s'exécute)
    • etc etc etc...

    La seule commande (à ma connaissance) qui ne respecte pas cette règle c'est expr qui renvoie 0 si tout s'est bien passé mais que ce qu'elle affiche ne vaut pas 0, 1 si tout s'est bien passé et qu'elle affiche 0 (?????), et autre chose si ça se passe mal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ~$ expr 4; echo $?
    4
    0
    ~$ expr 0; echo $?
    0
    1
    ~$ expr eaz + 4; echo $?
    expr: argument non entier
    2
    Et donc on ne peut pas demander if expr puisque le check sera considére faux si "expr" affiche 0 (alors que tout s'est pourtant bien passé).

    La commande "test" est une commande comme les autres, sauf que son rôle est d'évaluer des expressions, et retourner 0 si l'expression est vraie et pas 0 si elle n'est pas vraie. Elle respecte donc la règle donc peut être checkée via if test .... De fait, c'est cette commande qui sert à évaluer les choses donc if test ... est l'instruction que l'on voie généralement le plus souvent dans un shell. D'où ici aussi.
    Et la commande [ ... ] est juste un raccourci syntaxique de la commande test donc if test "toto" = "toto"; then echo "ok"; fi est équivalente à if [ "toto" = "toto" ]; then echo "ok"; fi. Et la commande [[ ... ]] est la même mais en plus intelligent (elle sait par exemple gérer si un élément est vide, comprendra l'idée sous-jacente de ce type d'instruction "5" < 7 qui compare une string et un int, etc).

    Et attention, c'est dangereux d'écrire ce genre de syntaxe for DISK in $(commande); do ...; done car si la commande renvoie (par exemple) 3 lignes avec sur chaque ligne une info sur 2 mots, le "for" se calant sur l'espace fera 6 itérations, en traitant à chaque fois une partie de l'info sans jamais traiter l'info en entier.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ~$ for l in $(awk 'BEGIN {for (i=0; i < 10; i++) printf("%d %d\n", i, i*i)}'); do echo "[$l]"; done
    [0]
    [0]
    [1]
    [1]
    [2]
    [4]
    [3]
    [9]
    [4]
    [16]
    [5]
    [25]
    [6]
    [36]
    [7]
    [49]
    [8]
    [64]
    [9]
    [81]

    Il vaut mieux lui préférer commande |while read DISK ; do ...; done car le read se cale sur le <return> terminant chaque ligne...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ~$ awk 'BEGIN {for (i=0; i < 10; i++) printf("%d %d\n", i, i*i)}' |while read l; do echo "[$l]"; done
    [0 0]
    [1 1]
    [2 4]
    [3 9]
    [4 16]
    [5 25]
    [6 36]
    [7 49]
    [8 64]
    [9 81]
    ... ou sur sa jolie remplaçante while read DISK; do ...; done < <(commande) qui fait la même chose mais en évitant le pipe donc le sous-processus avec tous ses inconvénients.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ~$ while read l; do echo "[$l]"; done < <(awk 'BEGIN {for (i=0; i < 10; i++) printf("%d %d\n", i, i*i)}')
    [0 0]
    [1 1]
    [2 4]
    [3 9]
    [4 16]
    [5 25]
    [6 36]
    [7 49]
    [8 64]
    [9 81]
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par Sve@r
    [[ [...] comprendra l'idée sous-jacente de ce type d'instruction "5" < 7 qui compare une string et un int
    test aussi sait le faire. Enfin, elle croit savoir le faire. , parce qu'en fait, tout comme [[, elle ne compare que des chaînes.
    Que ce soit pour test ou [[, <, =, != et > sont des opérateurs lexicaux : ils comparent du texte.
    les opérateurs arithmétiques sont : -eq, -ne,-lt, -le, -gt, et -ge.
    et p'is c'est tout !


    La seule commande (à ma connaissance) qui ne respecte pas cette règle c'est expr qui renvoie 0 si tout s'est bien passé mais que ce qu'elle affiche ne vaut pas 0, 1 si tout s'est bien passé et qu'elle affiche 0 (?????), et autre chose si ça se passe mal
    je ne suis pas sûr de bien comprendre. L'évaluation arithmétique du shell fonctionne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ((0)); echo $?
    1
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    test aussi sait le faire. Enfin, elle croit savoir le faire. , parce qu'en fait, tout comme [[, elle ne compare que des chaînes.
    Non, elle ne sait pas faire. test "5" < 7 répond "bash: 7: Aucun fichier ou dossier de ce type" (c'est pas pour rien que j'ai utilisé le signe "<" dans mon exemple )

    Citation Envoyé par N_BaH Voir le message
    tout comme [[, elle ne compare que des chaînes.
    Que ce soit pour test ou [[, <, =, != et > sont des opérateurs lexicaux : ils comparent du texte.
    J'ai pas dit que c'était forcément une bonne idée que d'écrire [[ "5" < 7 ]], juste qu'elle arrivait à comprendre quelque chose. Qu'elle la comprenne à l'envers de ce que voulait l'auteur ben tant pis pour l'auteur (d'ailleurs perso je ne l'utilise jamais car je préfère que mon script plante si je me rate dans mes variables plutôt qu'il continue en faisant croire que tout s'est bien passé )

    Citation Envoyé par N_BaH Voir le message
    je ne suis pas sûr de bien comprendre. L'évaluation arithmétique du shell fonctionne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ ((0)); echo $?
    1
    $
    De fait, le status étant 1 (pas 0), malgré que la commande se soit bien exécutée, elle est vue (considérée, assimilée) comme fausse et ne peut pas être intégrée dans un "if" dans l'expression if expr ... pour quelqu'un qui, par exemple, essaierait cette façon de faire pour (encore une fois par exemple) checker le fait que l'opération puisse/ne puisse pas se faire...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Euh...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ test 7 "<" "5"
    $ echo $?
    1
    $ test "5" "<" 7
    $ echo $?
    0
    Cordialement.

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oui, il faut protéger < et > :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ test "5" \< 7; echo $?
    0
    $
    mais en effet, le comportement n'est pas le même avec [[, qui ne considère pas que les chevrons sont des redirections.

    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ (( 0 == 0  )); echo $?
    0
    $
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mais en effet, le comportement n'est pas le même avec [[, qui ne considère pas que les chevrons sont des redirections.
    Et voilà. D'où mon exemple qui était, je le rappelle, destiné à illustrer la différence entre [ ... ] et [[ ... ]].

    Citation Envoyé par N_BaH Voir le message
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ (( 0 == 0  )); echo $?
    0
    $
    Oui? C'est en rapport avec ma remarque sur le status de expr??? Cela ne démontre rien. J'ai expliqué que expr renvoie le status 1 quand elle affiche 0, et renvoie le status 0 quand elle affiche un autre chiiffre et ça, ça reste incontournable. Donc un truc comme par exemple if expr $a - $b (destiné par exemple à vérifier que le calcul est possible) ne fonctionnera pas si "a" et "b" ont la même valeur.
    On peut contourner bien sûr, en commençant par faire le calcul et récupérer le status, puis en testant le status 0 ou 1, mais il n'en demeure pas moins que cette écriture (qui était à l'origine destinée à être comparée avec les if grep et autres exemples illustratifs du "if" qui peut checker toute commande) n'est pas possible avec expr, rien de plus.

    Là, tu as juste montré que expr renvoie 0 quand il affiche 1 (parce que expr 0 == 0 affiche en effet 1), ce que j'avais déjà dit.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    non, c'était juste pour dire qu'on peut "rétablir" l'état de sortie d'une Évaluation arithmétique quand on cherche si un résultat vaut zéro.

    je n'utilise pas expr : c'est un programme externe, dont un shell POSIX n'a pas besoin.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Bonsoir,

    Citation Envoyé par karamaster Voir le message
    Nom : Capture d’écran 2022-07-19 à 11.53.26.png
Affichages : 301
Taille : 142,6 Ko
    tu vas avoir des soucis : $5 n'est pas l'espace occupé en xyzBytes, c'est le pourcentage en %, c'est $3 que tu dois utiliser.
    Regarde sur ma machine où sdb et sdc sont deux disques identiques partitionnés de la même manière (le second sert de sauvegarde au premier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ while read ligne; do echo "$ligne"; done < <(df -x tmpfs -x devtmpfs | grep -v Sys. | awk '{print $1 " " $2 " " $3 " " $4}')
    /dev/sda1 200536336 35414928 154865024
    /dev/sdb1 1720225688 810906172 821867460
    /dev/sdc1 1720225688 812450808 820322824
    (grep -v Sys. sert à supprimer la ligne d'en-tête des colonnes)
    Si je rajoute $5 ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /dev/sda1 200536336 35414932 154865020 19%
    /dev/sdb1 1720225688 810906172 821867460 50%
    /dev/sdc1 1720225688 812450808 820322824 50%
    Et qu-est-ce que je peux bien faire avec ces valeurs en % à part les comparer à 100 %?
    Donc $3, et à partir de là tu vas te rendre compte que l'espace total - l'espace libre ne correspond pas exactement à l'espace occupé, il y a des variations, on en a déjà parlé ici il y a quelques années.
    Flemme de chercher et il fait vraiment trop chaud, mais il me semble qu'on avait conclu qu'il valait mieux utiliser stat pour avoir des valeurs plus correctes, exemple sur sdb1 d'un petit programme tiré du man :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Taille totale               :    1671960199168 octets
    Espace utilisé              :     830367932416 octets
    Espace disponible           :     841592266752 octets
    Voir man 2 statfs mais c'est du C, plus du shell...

    Ah, pour avoir les valeurs en octets (plus précis), utilise df -B1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne; do echo "$ligne"; done < <(df -B1 -x tmpfs -x devtmpfs | grep -v Sys. | awk '{print $1 " " $2 " " $3 " " $4}')
    /dev/sda1 205349208064 36267986944 158578683904
    /dev/sdb1 1761511104512 830367956992 841592242176
    /dev/sdc1 1761511104512 831949627392 840010571776
    Et tu t'amuseras à comparer les valeurs pour sdb1 dans les deux cas, avec df ci-dessus et avec statfs juste avant...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    non. pas grep | awk; seulement awk '!/Sys/{print $1,$2,$3,$4}'.
    mais, étant donné que la sorite de df peut être paramétrée pour n'afficher que les champs voulus, ce sera seulement df --exclude-type=tmpfs,devtmpfs --output=... | tail -n+2
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !

    Pas mal !
    Des trucs que je ne connaissais pas, mais un cafouillage avec --exclude-type= (ou un problème de distro ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ while read ligne; do echo "$ligne"; done < <(df -B1 --exclude-type=tmpfs,devtmpfs --output=source,itotal,iused,iavail | tail -n+2)
    udev               1771100    462   1770638
    tmpfs              1794069    800   1793269
    /dev/sda1         12804096 383937  12420159
    tmpfs              1794069      1   1794068
    tmpfs              1794069      4   1794065
    tmpfs              1794069     25   1794044
    /dev/sdb1        109297664 165583 109132081
    /dev/sdc1        109297664 286644 109011020
    tmpfs               358813     66    358747
    donc retour à l'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ while read ligne; do echo "$ligne"; done < <(df -B1 -x tmpfs -x devtmpfs --output=source,itotal,iused,iavail | tail -n+2)
    /dev/sda1         12804096 383937  12420159
    /dev/sdb1        109297664 165583 109132081
    /dev/sdc1        109297664 286644 109011020
    En fait, après tests, il faut utiliser --exclude-type=tmpfs --exclude-type=devtmpfs, qui ne présente aucun intérêt par rapport à -x valeur1 -x valeur2, dommage.

    EDIT :
    Aparté : comme l'aide n'est pas claire sur l'utilisation des noms dans FIELD_LIST, j'ai fait le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ while read ligne; do echo "$ligne"; done < <(df -B1 -x tmpfs -x devtmpfs --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target)
    Sys. de fichiers Type    Inœuds IUtil.    ILibre IUti%   blocs de 1B      Utilisé        Dispo Uti% Fichier Monté sur
    /dev/sda1        ext4  12804096 383963  12420133    3%  205349208064  36280119296 158566551552  19% -       /
    /dev/sdb1        ext4 109297664 165583 109132081    1% 1761511104512 830367956992 841592242176  50% -       /data
    /dev/sdc1        ext4 109297664 286644 109011020    1% 1761511104512 832030683136 839929516032  50% -       /dbck
    Quelqu'un pourra nous expliquer la différence entre IUti% et Uti% ?
    Même question pour IUtil. et Utilisé, et pour ILibre et Dispo.
    Merci,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jipété Voir le message
    En fait, après tests, il faut utiliser --exclude-type=tmpfs --exclude-type=devtmpfs, qui ne présente aucun intérêt par rapport à -x valeur1 -x valeur2
    C'est la même option. Mais généralement je préfère mettre (dans mes scripts) les options longues plus explicites, et les options courtes quand je lance la commande ponctuellement.
    Ensuite si on exclut certains types de montages, on peut alors aussi se poser la question pour les montages de type cdrom et les montages NFS....
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  17. #17
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 104
    Points : 4 454
    Points
    4 454
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !
    Quelqu'un pourra nous expliquer la différence entre IUti% et Uti% ?
    Même question pour IUtil. et Utilisé, et pour ILibre et Dispo.
    Dans la doc i pour inode

    Citation Envoyé par info df
    ‘itotal’
    Total number of inodes.
    ‘iused’
    Number of used inodes.
    ‘iavail’
    Number of available inodes.
    ‘ipcent’
    Percentage of IUSED divided by ITOTAL.
    ----------

    Citation Envoyé par Jipété;
    espace libre ne correspond pas exactement à l'espace occupé
    ici, c'est un exercice, de toute façon, il n'y a pas d'intérêt à calculer la taille d'une partition : si il reste 5 octets , il reste de la place mais on ne peut rien faire (et même avec 1Go de libre, on peut avoir aussi le même problème si on désire copier un "énorme" fichier)

    ----------

    Citation Envoyé par Jipété Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ while read ligne; do echo "$ligne"; done < <(df -B1 --exclude-type=tmpfs,devtmpfs --output=source,itotal,iused,iavail | tail -n+2)
    bien sûr, ici le while.. done < < n'a aucun intérêt sinon ajouter du code complètement inutile
    $moi= ( !== ) ? : ;

  18. #18
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Citation Envoyé par Jipété
    cafouillage avec --exclude-type= (ou un problème de distro ?)
    non, non. c'est moi qui gatouille.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  19. #19
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Citation Envoyé par papajoker Voir le message
    Dans la doc i pour inode
    Merci pour l'info, pas dispo dans mon man.

    Citation Envoyé par papajoker Voir le message
    ici, c'est un exercice, de toute façon, il n'y a pas d'intérêt à calculer la taille d'une partition : si il reste 5 octets , il reste de la place mais on ne peut rien faire (et même avec 1Go de libre, on peut avoir aussi le même problème si on désire copier un "énorme" fichier)
    Certes, mais il n'est pas interdit de prendre de bonnes habitudes et au lieu de tester sur espace total = espace utilisé, on pourrait utiliser (pseudo-code) if espace_utilisé > 90% alors alerte, tout comme if taille_fichier_à_copier > espace_libre alors alerte.


    Citation Envoyé par papajoker Voir le message
    bien sûr, ici le while.. done < < n'a aucun intérêt sinon ajouter du code complètement inutile
    Bien vu, du coup il n'y a plus que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    df -B1 -x tmpfs -x devtmpfs --output=source,size,used,avail | tail -n+2
    /dev/sda1         205349208064  36283375616 158563295232
    /dev/sdb1        1761511104512 830367965184 841592233984
    /dev/sdc1        1761511104512 832030683136 839929516032
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  20. #20
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !

    Pas mal !
    Des trucs que je ne connaissais pas, mais un cafouillage avec --exclude-type= (ou un problème de distro ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ while read ligne; do echo "$ligne"; done < <(df -B1 --exclude-type=tmpfs,devtmpfs --output=source,itotal,iused,iavail | tail -n+2)
    udev               1771100    462   1770638
    tmpfs              1794069    800   1793269
    /dev/sda1         12804096 383937  12420159
    tmpfs              1794069      1   1794068
    tmpfs              1794069      4   1794065
    tmpfs              1794069     25   1794044
    /dev/sdb1        109297664 165583 109132081
    /dev/sdc1        109297664 286644 109011020
    tmpfs               358813     66    358747
    donc retour à l'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ while read ligne; do echo "$ligne"; done < <(df -B1 -x tmpfs -x devtmpfs --output=source,itotal,iused,iavail | tail -n+2)
    /dev/sda1         12804096 383937  12420159
    /dev/sdb1        109297664 165583 109132081
    /dev/sdc1        109297664 286644 109011020
    En fait, après tests, il faut utiliser --exclude-type=tmpfs --exclude-type=devtmpfs, qui ne présente aucun intérêt par rapport à -x valeur1 -x valeur2, dommage.

    EDIT :
    Aparté : comme l'aide n'est pas claire sur l'utilisation des noms dans FIELD_LIST, j'ai fait le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ while read ligne; do echo "$ligne"; done < <(df -B1 -x tmpfs -x devtmpfs --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target)
    Sys. de fichiers Type    Inœuds IUtil.    ILibre IUti%   blocs de 1B      Utilisé        Dispo Uti% Fichier Monté sur
    /dev/sda1        ext4  12804096 383963  12420133    3%  205349208064  36280119296 158566551552  19% -       /
    /dev/sdb1        ext4 109297664 165583 109132081    1% 1761511104512 830367956992 841592242176  50% -       /data
    /dev/sdc1        ext4 109297664 286644 109011020    1% 1761511104512 832030683136 839929516032  50% -       /dbck
    Quelqu'un pourra nous expliquer la différence entre IUti% et Uti% ?
    Même question pour IUtil. et Utilisé, et pour ILibre et Dispo.
    Merci,
    Bonsoir, désolé pour le retour tardif. J'essayais de comprendre également les différentes solutions.
    Je suis arrivé à ce code qui marche. Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    while read ligne; 
    do 
     nomDisque=$(echo "$ligne" | cut -d ' ' -f1)
     tailleDisque=$(echo "$ligne" | cut -d ' ' -f2)
     if [ "$tailleDisque" -eq 0 ]; then
          echo "Le disque $nomDisque est plein
     fi
    done < <(df -x tmpfs -x devtmpfs | grep -v Sys. | awk '{print $1 " " $4}'

    Pour ma seconde préoccupation. Il s'agit d'afficher tous les processus qui occupent par exemple 20Mo de mémoire.
    Dans un premier temps, j'extrais la taille total de la mémoire.
    Ensuite le pourcentage avec la commande ps et enfin je multiplie le pourcentage par la mémoire total divisé par 100.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    totalMemoire=sudo cat /proc/meminfo |grep MemTotal |awk '{print $2}'
     
    while read ligne; 
    do 
     memoire=$(echo "$ligne" | awk '{print $2}')
     
     if [ "$memoire" != 0 ]; then
          tailleOccupee=$(echo "$memoire" * "$totalMemoire" /100)
          echo "$tailleOccupee" 
     fi
    done < <(ps aux --no-headers | awk '{print $2 " " $4}')
    RESULTAT : Rien en sortie.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/10/2007, 09h22
  2. plus de lecteur de disque depuis changement de mémoire RAM
    Par mae-andrasta dans le forum Composants
    Réponses: 8
    Dernier message: 08/06/2007, 12h19
  3. Travail sur disque au lieu de mémoire
    Par HurtMarley dans le forum Général Java
    Réponses: 8
    Dernier message: 31/05/2007, 10h05
  4. [VB..] Espace disque disponible
    Par SfJ5Rpw8 dans le forum Contribuez
    Réponses: 1
    Dernier message: 18/09/2006, 18h57
  5. [ftp] obtenir l'espace disque disponible
    Par FFF dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 27/11/2005, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo