Résolu le 25-03-21 Commande Xargs

Assistance concernant Linux Mint
Avatar du membre
riceh
Messages : 30
Enregistré le : dim. 14 mars 2021 13:50
Localisation : Belgique

Commande Xargs

Message par riceh »

Bonjour à tous,

Je cherche depuis un moment pourquoi xargs me signale une erreur sur la commande free -m

eric@eric-P8614:~$ free -m | xargs
xargs: guillemets simple non appairés ; par défaut les guillemets sont particuliers à xargs à moins d'utiliser l'option -0
le résultat avec xargs : total utilisé libre partagé tamp/cache disponible Mem: 4028 1626 370 231 2031 1741 Partition

il m'est pas possible d'employer l'option -0 car alors xargs me passe 3 lignes au lieu d'une seule comme ci-dessus (besoin pour mon script).

A un moment j'ai pensé que le caractère "/ "dans le titre "tamp/cache" me posais problème mais avec la commande tr -d '/' (suppression) juste avant xargs il me donne le même message.
Y-aurait-il un caractère non visible sur la console ?

eric@eric-P8614:~$ free -m
total utilisé libre partagé tamp/cache disponible
Mem: 4028 1627 369 231 2031 1740
Partition d'échange: 2047 0 2047

eric@eric-P8614:~$ free -m | xargs -0
total utilisé libre partagé tamp/cache disponible
Mem: 4028 782 1361 79 1884 2737
Partition d'échange: 2047 0 2047


Si quelqu'un connaît la réponse je suis preneur.
Merci d'avance.
Pc : Medion model: P8614 | Linux Mint 19.3 Tricia | Cinnamon 4.4.8 | Dual core Intel Core i3 M 380 (-MT-MCP-) | 3072 KB | Advanced Micro Devices [AMD/ATI] RV730/M96 [MobilityRadeon HD 4650/5165] | 4 GB

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

je ne comprends pas ton emploi de xargs
xargs est une commande shell|bash qui permet de récupérer les arguments en sortie de la commande précédente et de les traiter à travers un pipe.

Peux tu me dire ce que tu souhaites retourner dans le free -m , enfin la donnée que tu souhaites traiter ?

Rappel syntaxe

Code : Tout sélectionner

[commande] | xargs [traitement]
Si pas de traitement, je ne vois pas l'intérêt ...

Doc entre autres : https://cbiot.fr/dokuwiki/xargs
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
riceh
Messages : 30
Enregistré le : dim. 14 mars 2021 13:50
Localisation : Belgique

Re: Commande Xargs

Message par riceh »

je désire récupérer la mémoire employée ainsi que la mémoire réelle qui se situent en deuxième ligne.
Avec xargs je peux alors travailler avec les arguments $8 et $9 de xargs.

free -m | xargs | awk '{print "Free/total memory: " $9 " / " $8 " MB "}'
Pc : Medion model: P8614 | Linux Mint 19.3 Tricia | Cinnamon 4.4.8 | Dual core Intel Core i3 M 380 (-MT-MCP-) | 3072 KB | Advanced Micro Devices [AMD/ATI] RV730/M96 [MobilityRadeon HD 4650/5165] | 4 GB

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

pas sûr de comprendre ton besoin.
Mais si tu veux récupérer les valeurs retournées par free - m, j'opterais pour un truc du style

Code : Tout sélectionner

~$ aze=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f3)
~$ echo $aze
652
Dis moi si à coté de la plaque ou non
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
riceh
Messages : 30
Enregistré le : dim. 14 mars 2021 13:50
Localisation : Belgique

Re: Commande Xargs

Message par riceh »

Je met au point un script qui me donnera un état complet du système et plus facilement lisible
j'emploie déjà la commande df -h avec xargs pour vérifier l'espace disque
df -h | xargs | awk '{print "Free/total disk: " $24 " / " $23}'
mais cette commande ne me donne aucun message , ma question porte sur l'erreur donnée par la commande free-m
pour obtenir ceci : Free/total memory: 2429 / 4029 MB

l'erreur :
xargs: guillemets simple non appairés ; par défaut les guillemets sont particuliers à xargs à moins d'utiliser l'option -0

mais je reçois malgré tout le résultat
Pc : Medion model: P8614 | Linux Mint 19.3 Tricia | Cinnamon 4.4.8 | Dual core Intel Core i3 M 380 (-MT-MCP-) | 3072 KB | Advanced Micro Devices [AMD/ATI] RV730/M96 [MobilityRadeon HD 4650/5165] | 4 GB

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

Je ne comprends toujours pas le soucis, ta commande passe (meêm si je trouve l'approche très bizarre) :

Code : Tout sélectionner

~$ free -m | xargs | awk '{print "Free/total memory: " $9 " / " $8 " MB "}'
Free/total memory: 652 / 3899 MB
Tu ferais mieux de travailler ligne par ligne avec un grep Motif si tu veux t'adapter au plus grand nombre de cas de figure que de traiter le tout depuis une ligne unique
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
riceh
Messages : 30
Enregistré le : dim. 14 mars 2021 13:50
Localisation : Belgique

Re: Commande Xargs

Message par riceh »

OK je vais essayer avec grep
Pc : Medion model: P8614 | Linux Mint 19.3 Tricia | Cinnamon 4.4.8 | Dual core Intel Core i3 M 380 (-MT-MCP-) | 3072 KB | Advanced Micro Devices [AMD/ATI] RV730/M96 [MobilityRadeon HD 4650/5165] | 4 GB

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

Code : Tout sélectionner

memTotal=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f2)
memUse=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f3)
memFree=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f4)
memShare=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f5)
memTemp=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f6)
memAvailable=$(free -m | grep Mem | sed 's/\s\s*/ /g' | cut -d' ' -f7)


echo $memTotal
echo $memUse
echo $memFree
echo $memShare
echo $memTemp
echo $memAvailable
Et de même avec un grep Swap
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

Ensuite si tu connais python, https://psutil.readthedocs.io/en/latest ... ual_memory
;)

Exemple

Code : Tout sélectionner

$ python3
Python 3.9.2 (default, Feb 28 2021, 17:03:44) 
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> stats = psutil.virtual_memory() 
>>> available = getattr(stats, 'available')
>>> print(available)
6134218752
>>> 
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: Commande Xargs

Message par cyrille »

Autre exemple en python

Code : Tout sélectionner

file1 = open('/proc/meminfo', 'r')

for line in file1:
    if 'MemTotal' in line:
        x = line.split()
        memTotal = int(x[1])

    if 'Buffers' in line:
        x = line.split()
        buffers = int(x[1])

    if 'Cached' in line and 'SwapCached' not in line:
        x = line.split()
        cached = int(x[1])

    if 'MemFree' in line:
        x = line.split()
        memFree = int(x[1])

file1.close()

percentage_used = int((memTotal - (buffers + cached + memFree)) / memTotal * 100)
print(percentage_used, "%")
Te sortira le pourcentage d'utilisation
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Répondre