Como obtenho o nome do modelo do meu processador?

6

Estou fazendo uma configuração conky e quero exibir o modelo da CPU como uma das estatísticas. Para isso, eu preciso de um comando que produza apenas o nome da CPU como uma string, por exemplo, "Intel Core i7 7700K". Eu acho que /proc/cpuinfo e a saída de lscpu tem o que eu preciso (prefiro lscpu porque seria um pouco mais eficiente), mas o nome do modelo é 4 espaços muito longe do nome do fabricante. Então eu precisaria cortar a string model name: e me livrar dos espaços extras. Eu também gostaria de saber como se livrar do @ (clockspeed) .

    
por Haxalicious 21.12.2017 / 20:52

3 respostas

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

Notas

  • -n não imprime nada até pedirmos
  • -r use ERE
  • /Model name/ encontra a linha com Model name
  • s/old/new/ replace old com new
  • .*:\s* qualquer coisa antes de dois pontos, dois pontos e qualquer quantidade de espaço horizontal
  • (.*) @ salva qualquer número de caracteres antes de ' @'
  • referência ao padrão salvo
  • p imprime somente a linha que editamos

Para se livrar de espaços duplos, você pode fazer um comando s extra:

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

O comando não funciona se houver mais de dois espaços em qualquer lugar, portanto, para excluir vários espaços implacavelmente, use um sed loop:

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

Esse :a;s/ / /;ta continua processando o fluxo até que não haja espaços duplos em lugar nenhum. Observe que não será necessário um endereço, então tivemos que mastigar todo o fluxo antes de selecionar a linha. Isso não levará um tempo considerável quando estivermos apenas analisando a saída de lscpu , mas em um arquivo grande ou em vários arquivos, ele pode ficar muito lento. Poderíamos canalizar a saída do comando original para outro sed com o loop para evitar trabalhar em todo o fluxo:

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

Use isso para conseguir o que você quer:

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

Resultado:

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

Ou:

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

Resultado:

Intel(R) Core(TM) i5-4210U CPU
    
por George Udosen 21.12.2017 / 20:56
1
lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{=}1'
  • lscpu Para obter as informações da CPU
  • grep 'Model name' Para extrair a linha que contém o nome da CPU.
  • cut -f 2 -d ":" Para remover parte da linha antes de : . Então vai remova a parte " Model name: " da saída.
  • awk '{=}1' Para remover o espaço do começo de uma linha.

Saída de amostra

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