web-dev-qa-db-fra.com

Comment puis-je obtenir le nom de modèle de mon processeur?

Je suis en train de faire une conky config et je veux afficher le modèle de processeur comme l'une des statistiques. Pour cela, il me faut une commande qui affiche uniquement le nom du processeur sous forme de chaîne, par exemple "Intel Core i7 7700K". Je pense que /proc/cpuinfo et la sortie de lscpu ont ce dont j'ai besoin (je préférerais lscpu car ce serait un peu plus efficace), mais le nom du modèle est trop éloigné du nom du fabricant. Il me faudrait donc couper la chaîne model name: et supprimer les espaces supplémentaires. J'aimerais aussi savoir comment me débarrasser de la @ (clockspeed).

6
Haxalicious
$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU  Z3735F

Remarques

  • -n n'imprime rien jusqu'à ce que nous le demandions
  • -r utilisez ERE
  • /Model name/ trouver la ligne avec Model name
  • s/old/new/ remplace oldpar newname__
  • .*:\s* tout ce qui se trouve avant les deux points, les deux points et toute quantité d’espace horizontal
  • (.*) @ enregistrer n'importe quel nombre de caractères avant ' @'
  • \1 référence au modèle enregistré
  • paffiche uniquement la ligne que nous avons modifiée

Pour vous débarrasser des doubles espaces, vous pouvez exécuter une commande supplémentaire sname__:

$ lscpu | sed -nr '/Model name/ s/  / /g; s/.*:\s*(.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F

Le ne fonctionne pas s'il y a plus de deux espaces n'importe où, donc pour supprimer plusieurs espaces sans relâche, utilisez une boucle sedname__:

$ lscpu | sed -nr ':a;s/  / /;ta; /Model name/ s/.*: (.*) @ .*/\1/p'
Intel(R) Atom(TM) CPU Z3735F 

Ce :a;s/ / /;ta continue de traiter le flux jusqu'à ce qu'il n'y ait plus de double espace nulle part. Notez que cela ne prendra pas d'adresse, nous avons donc dû parcourir tout le flux avant de sélectionner la ligne. Cela ne prendra pas beaucoup de temps lorsque nous n'analyserons que la sortie de lscpuname__, mais sur un fichier volumineux ou sur plusieurs fichiers, le processus risque de devenir assez lent. Nous pourrions diriger le résultat de la commande d'origine vers un autre sedavec la boucle pour éviter de travailler sur l'ensemble du flux:

$ lscpu | sed -nr '/Model name/ s/.*:\s*(.*) @ .*/\1/p' | sed ':a;s/  / /;ta'
Intel(R) Atom(TM) CPU Z3735F
14
Zanna

Utilisez ceci pour obtenir ce que vous voulez:

lscpu | grep "Model name:" | sed -r 's/Model name:\s{1,}//g'

Résultat:

Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz

Ou:

lscpu | grep "Model name" | sed -r 's/Model name:\s{1,}(.*) @ .*z\s*/\1/g'

Résultat:

Intel(R) Core(TM) i5-4210U CPU
2
George Udosen
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
  • lscpu Pour obtenir les informations sur la CPU
  • grep 'Model name' Pour extraire la ligne contenant le nom de la CPU.
  • cut -f 2 -d ":" Pour supprimer une partie de la ligne avant :. Ainsi, la partie "Model name:" sera supprimée de la sortie.
  • awk '{$1=$1}1' Pour supprimer l'espace du début d'une ligne.

Exemple de sortie

$ lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1'
Intel(R) Pentium(R) CPU N3520 @ 2.16GHz
1
ran