Commande Xargs
Commande Xargs
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.
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
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
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
Si pas de traitement, je ne vois pas l'intérêt ...
Doc entre autres : https://cbiot.fr/dokuwiki/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]
Doc entre autres : https://cbiot.fr/dokuwiki/xargs
Re: Commande Xargs
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 "}'
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
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
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
Dis moi si à coté de la plaque ou non
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
Re: Commande Xargs
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
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
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
Je ne comprends toujours pas le soucis, ta commande passe (meêm si je trouve l'approche très bizarre) :
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
Code : Tout sélectionner
~$ free -m | xargs | awk '{print "Free/total memory: " $9 " / " $8 " MB "}'
Free/total memory: 652 / 3899 MB
Re: Commande Xargs
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
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
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
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
Ensuite si tu connais python, https://psutil.readthedocs.io/en/latest ... ual_memory
Exemple
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
>>>
- cyrille
- Administrateur du site
- Messages : 12285
- Enregistré le : mar. 19 sept. 2017 08:49
- Localisation : Nowhere
- Contact :
Re: Commande Xargs
Autre exemple en python
Te sortira le pourcentage d'utilisation
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, "%")