Temperatura procesora osadzona w wierszu polecenia Bash

18

Zastanawiałem się, czy można uzyskać temperaturę procesora i osadzić ją w wierszu polecenia.

To jest mój wynik dla sensors:

$}-sensors
coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +55.0°C  (high = +87.0°C, crit = +105.0°C)
Core 0:         +55.0°C  (high = +87.0°C, crit = +105.0°C)
Core 1:         +52.0°C  (high = +87.0°C, crit = +105.0°C)

Czy możesz mi pokazać, jak używać grepfunkcji do osadzania temperatury w wierszu polecenia?

LinuxSailorTech
źródło
Możliwy duplikat Jak uzyskać temperaturę procesora?
mondjunge
qucik: cat / sys / class / thermal / thermal_zone0 / temp, dla mnie pokazuje 50000, kiedy moja temperatura wynosi 50 ° C
mondjunge
@mondjunge te pliki są bardzo zależne od sprzętu. Zarówno nazwy, jak i ścieżki zmienią się w zależności od posiadanego sprzętu. W moim systemie ten plik pokazuje temperaturę acpitz-virtual-0urządzenia wirtualnego, która bardzo różni się od temperatury mojego procesora.
terdon
Możesz użyć tego samego kodu, który mam w mojej odpowiedzi. Będzie również działał dla twojego sensorswyjścia.
terdon
@terdon: Wiem, ale nie mam czasu na wyjaśnienia, po prostu zaznaczam zduplikowane pytania w moich wolnych 5 minutach i próbuję znaleźć szybkie rozwiązanie.
mondjunge

Odpowiedzi:

36

Tak, jest to możliwe, ale szczegóły zależą od twojego systemu. W większości przypadków polecenie sensorspowinno to pokazać.

  1. Zainstaluj niezbędny pakiet

    sudo apt-get install lm-sensors
  2. Uruchom sensors-detecti postępuj zgodnie z instrukcjami

    sudo sensors-detect
  3. Zainstaluj dodatkowe sterowniki, jeśli sensors-detectpojawi się taka potrzeba.

  4. Uruchom, sensorsaby upewnić się, że działa

    $ sensors
    acpitz-virtual-0
    Adapter: Virtual device
    temp1:        +27.8°C  (crit = +110.0°C)
    temp2:        +29.8°C  (crit = +110.0°C)
    
    coretemp-isa-0000
    Adapter: ISA adapter
    Physical id 0:  +63.0°C  (high = +105.0°C, crit = +105.0°C)
    Core 0:         +62.0°C  (high = +105.0°C, crit = +105.0°C)
    Core 1:         +63.0°C  (high = +105.0°C, crit = +105.0°C)
    
    nct6776-isa-0a00
    Adapter: ISA adapter
    Vcore:                  +1.86 V  (min =  +0.00 V, max =  +1.74 V)  ALARM
    in1:                    +1.36 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
    AVCC:                   +3.33 V  (min =  +2.98 V, max =  +3.63 V)
    +3.3V:                  +3.33 V  (min =  +2.98 V, max =  +3.63 V)
    in4:                    +1.01 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
    in5:                    +0.00 V  (min =  +0.00 V, max =  +0.00 V)
    in6:                    +0.21 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
    3VSB:                   +3.31 V  (min =  +2.98 V, max =  +3.63 V)
    Vbat:                   +3.18 V  (min =  +2.70 V, max =  +3.63 V)
    fan1:                     0 RPM  (min =    0 RPM)
    fan2:                  3292 RPM  (min =    0 RPM)
    SYSTIN:                  +0.0°C  (high =  +0.0°C, hyst =  +0.0°C)  sensor = thermistor
    CPUTIN:                 +51.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = CPU diode
    AUXTIN:                  +0.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = CPU diode
    PCH_CHIP_CPU_MAX_TEMP:  +58.0°C  (high = +80.0°C, hyst = +75.0°C)
    PECI Agent 0:           +60.0°C  (high = +80.0°C, hyst = +75.0°C)
                                     (crit = +105.0°C)
    PCH_CHIP_TEMP:           +0.0°C  
    PCH_CPU_TEMP:            +0.0°C  
    intrusion0:            OK
    intrusion1:            OK
    beep_enable:           disabled
  5. Analizuj dane wyjściowe, aby uzyskać tylko temperaturę procesora.

    Jak widać powyżej, wyjście w moim systemie jest inne niż twoje. Jednak linia, na której nam zależy, jest taka sama. Możesz uzyskać temperaturę procesora za pomocą:

    $ sensors | grep -oP 'Physical.*?\+\K[0-9.]+'
    63.0
  6. Edytuj swój ~/.bashrc(lub równoważny plik, jeśli używasz innej powłoki) i dodaj funkcję, która uruchamia powyższe polecenie:

    show_temp(){
        sensors | grep -oP 'Physical.*?\+\K[0-9.]+'
    }
  7. Użyj funkcji w pytaniu. Na przykład:

    PS1="\u@\h $(show_temp) $ "
terdon
źródło
Czy naprawdę konieczne jest zainstalowanie czujników lm w Ubuntu? Jest instalowany domyślnie w Debianie.
Braiam
1
@Braiam Nie jest domyślnie instalowany w wersji 15.10 lub 16.04.
kot
1

Zainstaluj czujniki lm:

sudo apt-get install lm-sensors

Wykryj dostępne czujniki:

sudo sensors-detect

Aby pokazać temperaturę:

sensors
Bram Koert
źródło
5
Jak rozumiem pytanie, OP chce, aby temperatura procesora pojawiła się w wierszu polecenia Bash, na przykład username@hostname (cputemp): /current/directory $- Oni już wiedzą, jak sensorsogólnie uruchomić polecenie, w jaki sposób byliby w stanie wyświetlić wynik w pytaniu inaczej?
Bajt Dowódca
3
@ByteCommander w obronie Brama, OP nie wspomniał sensorsw swoim pierwotnym pytaniu i dodał tylko wyniki, gdy poprosiłem o to w pierwszej wersji mojej odpowiedzi. To prawda, że ​​ta odpowiedź nie wyjaśnia, jak pokazać tylko temperaturę procesora, ani jak uwzględnić ją w pytaniu, ale wspomnienie sensorsbyło przydatne podczas publikowania odpowiedzi.
terdon
W systemie AMD musiałem włączyć „IOMMU” w BIOSie, zanim mogłem uzyskać temperaturę procesora (płyta główna MSI z FX8300: Ustawienia podkręcania -> Funkcje procesora -> IOMMU, zmieniłem „Wyłączone” na „64 MB” (jedyne inna opcja)).
Peter Mortensen