abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 14:55 | IT novinky

    Před 70 lety, 7. června 1954, ve věku 41 let, zemřel Alan Turing, britský matematik, logik, kryptoanalytik a zakladatel moderní informatiky.

    Ladislav Hagara | Komentářů: 10
    včera 11:44 | Zajímavý software

    NiceGUI umožňuje používat webový prohlížeč jako frontend pro kód v Pythonu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    včera 10:55 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.6. Z novinek lze vypíchnout lepší integraci LLM (OpenAI, Google AI, Ollama) nebo podporu Matter 1.3.

    Ladislav Hagara | Komentářů: 0
    6.6. 20:55 | IT novinky

    IKEA ve Spojeném království hledá zaměstnance do své nové pobočky. Do pobočky v počítačové hře Roblox. Nástupní mzda je 13,15 liber na hodinu.

    Ladislav Hagara | Komentářů: 0
    6.6. 10:44 | Zajímavý článek

    Alyssa Rosenzweig se v příspěvku na svém blogu Vulkan 1.3 na M1 za 1 měsíc rozepsala o novém Vulkan 1.3 ovladači Honeykrisp pro Apple M1 splňujícím specifikaci Khronosu. Vychází z ovladače NVK pro GPU od Nvidie. V plánu je dále rozchodit DXVK a vkd3d-proton a tím pádem Direct3D, aby na Apple M1 s Asahi Linuxem běžely hry pro Microsoft Windows.

    Ladislav Hagara | Komentářů: 35
    6.6. 01:00 | Nová verze

    Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.90 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a animovanými gify v poznámkách k vydání. Ve verzi 1.90 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    6.6. 00:44 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová verze 2024.2 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    5.6. 16:44 | IT novinky

    Počítačová hra Tetris slaví 40 let. Alexej Pažitnov dokončil první hratelnou verzi 6. června 1984. Mezitím vznikla celá řada variant. Například Peklo nebo Nebe. Loni měl premiéru film Tetris.

    Ladislav Hagara | Komentářů: 10
    5.6. 10:44 | Nová verze

    MicroPython (Wikipedie), tj. implementace Pythonu 3 optimalizovaná pro jednočipové počítače, byl vydán ve verzi 1.23.0. V přehledu novinek je vypíchnuta podpora dynamických USB zařízení nebo nové moduly openamp, tls a vfs.

    Ladislav Hagara | Komentářů: 0
    5.6. 10:22 | Nová verze

    Canonical vydal Ubuntu Core 24. Představení na YouTube. Nová verze Ubuntu Core vychází z Ubuntu 24.04 LTS a podporována bude 12 let. Ubuntu Core je určeno pro IoT (internet věcí) a vestavěné systémy.

    Ladislav Hagara | Komentářů: 2
    Rozcestník

    Dotaz: BASH script - smartctl, csv, expr, awk

    9.7.2007 10:07 D3d
    BASH script - smartctl, csv, expr, awk
    Přečteno: 2953×
    Dobrý den, Rád bych Vás požádal o pomoc s dotvořením scriptu pro testování smartctl. Script provádí výpis smartctl do csv souboru. Pomocí awk exportuji jen hodnoty na řádku 10 (RAW_Value). Teď bych potřeboval dotvořit pomocí for,expr atd. že když ID (první řádek) je 1 tak aby vypsal hodnoty do csv souboru, když 2 není tak aby vepsal do csv souboru středník ";" atd do hodnoty 255. Zkontrolovat tedy jaký je ID číslo a podle toho se zachovat. Takhle vypadá výpis smartu:
    ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
      1 Raw_Read_Error_Rate     0x000f   057   049   006    Pre-fail  Always       -       140496120
      3 Spin_Up_Time            0x0003   099   096   000    Pre-fail  Always       -       0
      4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       189
      5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
      7 Seek_Error_Rate         0x000f   063   060   030    Pre-fail  Always       -       519947024875
      9 Power_On_Hours          0x0032   073   073   000    Old_age   Always       -       24065
     10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
     12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       320
    194 Temperature_Celsius     0x0022   043   051   000    Old_age   Always       -       43
    195 Hardware_ECC_Recovered  0x001a   057   049   000    Old_age   Always       -       140496120
    197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
    198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
    199 UDMA_CRC_Error_Count    0x003e   200   194   000    Old_age   Always       -       10
    200 Multi_Zone_Error_Rate   0x0000   100   253   000    Old_age   Offline      -       0
    202 TA_Increase_Count       0x0032   100   253   000    Old_age   Always       -       0
    
    Kus scriptu:
    for diskk in a b;
     do
      for b in `/usr/sbin/smartctl -A /dev/hd${diskk} | grep '^[ 0-9][ 0-9][0-9]' | awk '{print $10 ";"}'`;
       do echo -n $b  >> hdd_smart.csv ;
         done;
        done;
    
    Nejsem v BASHi tak zběhlej a proto netuším co by bylo nejlepší a nejednoduší k použití. Díky moc za každou pomoc nebo nasměrování.

    Odpovědi

    andree avatar 9.7.2007 11:50 andree | skóre: 39 | blog: andreeeeelog
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    nieco ako

    ...

    for x in `/usr/sbin/smartctl -A /dev/hd${diskk} | grep -v ID# | sed "s%^[ ]*\([0-9]*\).*%\1%"`; do echo -n $x\; ; done

    ?
    9.7.2007 12:19 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Nepotřebuji grepovat daný ID smart hodnoty, potřebuji kontrolu jestli je na ID řádku 1 uvedena hodnota smart, když ano vložit hodnotu (RAW_Value) když není tak vložit ";" pro odsazení v csv souboru (";" dělá prázdnou buňku v csv).

    V příkladu budu mít jen: ID 1 a ID 202 - tak vložím do buňky číslo 1 hodnotu a do buňky číslo 202 vložím hodnotu - do buněk 2 až 201 vložím středník a do buněk 203 až 255 zase vložím středník. Tohoto potřebuji docílit, ale bohužel netuším jak.
    9.7.2007 12:05 mlz | skóre: 12 | blog: Obcas
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Snad jsem pochopil
    for i in a b; do smartctl -A "/dev/hd$i" | awk '
    $1>=1 && $1 <=255 {a[$1]=$10}
    END {
    for(i=1;i<=255;i++)
    {
    if(a[i])
    {printf "%d", a[i]}
    printf ";"
    }
    }';
    echo;
    done
    9.7.2007 12:21 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Jo to by mělo být ono, děkuji mockrát za pomoc.
    9.7.2007 12:51 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Tak předčasná radost,

    Tento script sice udělá skoro vše co potřebuji, ale je tam chyba s kterou si nevím rady

    Výpis scriptu:
    143198173;;;189;;;519947058931;;24068;;;320;;
    Jak vidíte tak hodnota (0) s ID číslem 3 v buňce není vůbec. Mělo by to vypadat:
    143198173;0;189;;;519947058931;;24068;0;320;;
    Nevíte jak doplnit script aby vypisoval i tu nulu do buňky? Díky moc za pomoc.
    9.7.2007 13:46 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Takhle?
    #!/usr/bin/python
    import subprocess
    
    values = ['' for i in range(256)]
    process = subprocess.Popen(['smartctl', '-A', '/dev/sda'],
                              stdout = subprocess.PIPE)
    for line in process.stdout:
        splitted = line.split()
        try:
            id = int(splitted[0])
            raw_value = int(splitted[9])
        except ValueError:
            continue
        except IndexError:
            continue
        values[id - 1] = '%d' %raw_value
    
    print ';'.join(values)
    
    Udělá to spoustu čísel a středníků, např.
    24771859;;0;74;0;;685596218;;13667;0;;122;;;;;; atd.
    
    Je to tak správně?
    9.7.2007 13:52 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Jo to je naprosto správně, jen je škoda že je to v Pythonu.

    Jelikož tohle je jen část scriptu a celkový script je komplet napsaný v BASHi - nemám na to abych to přepisoval do nového jazyku, už takhle mám problémy :) Ale přesně takhle by to mělo vypadat.
    9.7.2007 14:02 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    A mohl bys jen tak pro zajímavost napsat, co ten celkový skript dělá? Na přepsání něčeho z shellu do Pythonu nikdy není pozdě. Obzvlášť, je-li to program na více než pět řádků, což je asi tak hranice rozumné použitelnosti shellu.
    9.7.2007 14:39 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Celý script testuje HDD pomocí S.M.A.R.T a vypisuje v daném intervalu hodnoty. Script má 87 řádek a nevím jestli jsem ještě u konce. Zatím zapisuje teploty HDD do teploty.csv (čas,disk,teplota). Dále vypisuje celkový S.M.A.R.T do souboru hdd_číslo_čas.txt a pak RAW_Value hodnoty do raw.csv (cas,s/n: disku,hodnoty RAW) Tenhle raw.csv se pak bude přenášet do MySQL databáze pro další využití. Proto potřebuji mít daný hodnoty podle ID v dané buňce csv souboru (bohužel se musí zachovat i ten raw.csv, jinak bych to rovnou dával do MySQL). Jelikož každý disk má S.M.A.R.T trochu jinak (podle toho jak se výrobce disku zrovna probudí) tak musím zachovat ID i v buňkách csv souboru.

    Byl bych rád kdyby mi někdo pomohl s tím scriptem od MLZ je dostačující, jen mi bohužel nezapisuje ty nuly do buněk.
    9.7.2007 15:27 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Vím, že to nepoužiješ, ale pro inspiraci - mohlo by to vypadat třeba takhle.
    #!/usr/bin/python
    import subprocess, time
    
    class Smart:
        def __init__(self, diskk):
            self.diskk = diskk
            values = ['' for i in range(256)]
            process = subprocess.Popen(['smartctl', '-a', '/dev/' + diskk],
                                      stdout = subprocess.PIPE)
            self.alllines = []
            for line in process.stdout:
                self.alllines.append(line)
                splitted = line.split()
                if 'Serial Number:' in line:
                    self.sn = splitted[-1]
                try:
                    id = int(splitted[0])
                    raw_value = int(splitted[9])
                except ValueError:
                    continue
                except IndexError:
                    continue
                values[id - 1] = '%d' %raw_value
                if splitted[1] == 'Temperature_Celsius':
                    self.temperature = raw_value
            self.rawvalues = ';'.join(values)
            self.now_int = int(time.time())
    
        def pis_teplotu(self):
            cas_disk_teplota = '%d, %s, %d\n' %(self.now_int,
                                                self.diskk,
                                                self.temperature)
            print cas_disk_teplota
            file('teploty.csv', 'a').write(cas_disk_teplota)
    
        def pis_celk_smart(self):
            filename = '%s_%s_%d.txt' %(self.diskk, self.sn, self.now_int)
            print filename
            file(filename, 'w').writelines(self.alllines)
    
        def pis_raw_values(self):
            line = '%d,%s,%s\n' %(self.now_int, self.sn, self.rawvalues)
            print line
            file('raw.csv', 'a').write(line)
    
    while True:
        disk = Smart('sda')
        disk.pis_teplotu()
        disk.pis_celk_smart()
        disk.pis_raw_values()
        time.sleep(10)
    
    Ten interval jsem plácl deset sekund. Klidně to zahoď, ale dělá to aspoň zhruba to co má?
    10.7.2007 09:12 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Při puštění scriptu mi vyhlásí chybu

    Traceback (most recent call last):
      File "test", line 2, in ?
        import subprocess, time
    ImportError: No module named subprocess
    
    Nevíš čím to může být ? Jak říkám Python neumím vůbec.
    10.7.2007 10:11 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    No, vypadá to, jako by chyběl modul subprocess, což by mohlo být způsobeno příliš starou verzí Pythonu. Jenže asi to bude něco jiného, protože ten předchozí příklad ti fungoval a přitom subprocess používá taky.
    Nezkoušíš to třeba na jiném počítači? Kdyby ses tím chtěl zabývat, napiš mi na jabber a semka potom napíšem nějaký závěr.
    10.7.2007 12:09 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Máš pravdu. Testoval jsem to na jiné mašině :) na který je stará verze Pythonu. Mám tu už trochu zmatek.
    10.7.2007 10:28 R
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Naco z toho vyrabas CSV, ked to mozes dat rovno do MySQL? man mysql
    10.7.2007 13:08 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Jak jsem psal - musí být zachován i csv soubor. Jinak bych to samo dával rovnou do MySQL. Po dokončení a redukci zdrojáku je celkový script na 50 řádků (i s mezerami)

    Kus finálního scriptu:

    # RAW VALUE 
    for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23;
     do
      for raw in `/usr/sbin/smartctl -A -d 3ware,${i} | 
      awk ' BEGIN { for(i=1;i<254;i++) a[i]=-1 } $1>=1 && $1<=253 { a[$1]=$10 } 
      END { for(i=1;i<254;i++) { if(a[i]>=0) printf "%d", a[i]; printf ";" } }'`;
       do
        for sn in `/usr/sbin/smartctl -a -d 3ware,${i} | grep "Serial Number" | awk '{print $3}' `;
         do echo -n $cas ";" >> testy/hdd_smart.csv | 
            echo -n $sn ";" >> testy/hdd_smart.csv; echo -n $raw >> testy/hdd_smart.csv;
            echo "" >> testy/hdd_smart.csv;
      done;
     done;
    done
    
    Děkuji všem za pomoc při vytváření tohoto kusu scriptu.
    11.7.2007 11:14 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    for raw in `cokoli`
    Je velmi velmi velmi špatný nápad!
    # RAW VALUE 
    for((i=0; i<24; i++))
    do
      raw="$(/usr/sbin/smartctl -A -d 3ware,${i} | 
          awk 'BEGIN { for(i=1;i<254;i++) a[i]=-1 }
            $1>=1 && $1<=253 { a[$1]=$10 }
            END { for(i=1;i<254;i++)
              { if(a[i]>=0) printf "%d", a[i]; print ";" }
            }')"
      sn="$(/usr/sbin/smartctl -a -d 3ware,${i} |
        awk '/Serial Number/ {print $3}')"
      echo "$cas;$sn;$raw" >> testy/hdd_smart.csv
    done
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    11.7.2007 22:06 makarenko
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    for raw in `cokoli`
    Je velmi velmi velmi špatný nápad!
    Smím vědět proč? Platí to pro tenhle konkrétní případ nebo všeobecně (čemuž se mi nechce věřit)? Kuji.
    11.7.2007 22:18 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Platí to naprosto obecně. Důvodem je, že se ten výstup parsuje bashem a mohou velmi lehce vzniknout podivné výsledky. Těžko najít nějaký příklad, kdy by taková konstrukce byla vhodná.
    for i in `ls *.txt`
    je naprosto nevhodné, protože to může zhavarovat na velikost ve starších verzích shellu, nebo nějakém minimalistickém, např busybox. A pak to pěkně rozbije jen hloupá mezera v názvu souboru nebo adresáře. Přitom to jde krásně napsat
    for i in *.txt
    Sekvence
    for i in `seq 1 2 10`
    jde jednoduše nahradit
    for((i=1;i<=10;i+=2))
    A všechny ty
    for i in `cokoli`
    jde nahradit bezpečnějším
    cokoli | while read i
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    12.7.2007 01:02 makarenko
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Uhm, přiznávám, přehlédl jsem ty backquotes okolo cokoli.
    Beru tu poznámku o délce (viz „zhavarovat na velikost“), ale těm problémům s mezerami se přeci dá v uvedeném případě předejít:
    ( IFS=$'\n'; for i in $(ls *.txt); … )
    V žádném případě netvrdím, že je to lepší varianta než
     in *.txt 
    ale s tím si zase nevystačím ve složitějších selekcích a v situaci, kdy nepůjde o cyklus přes soubory/adresáře.
    12.7.2007 07:33 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    ... ale s tím si zase nevystačím ve složitějších selekcích a v situaci, kdy nepůjde o cyklus přes soubory/adresáře.
    Na složitější selekce máme find + xargs a nebo while read
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    17.7.2007 10:27 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Dobrý den,

    Mohu Vás ještě požádat o pomoc? Rád bych, aby se ten script opakoval každých 5min a nechci to dávat do cronu, jak toho docílím pomocí BASHe ?
    17.7.2007 10:38 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Takový "dodatečný" dotaz bys měl pokládat v novém vlákně. Podobná věc se řešila třeba tady
    http://www.abclinuxu.cz/forum/show/185745
    Upozorňuji, že když použiješ úplně nejjednodušší řešení (while true....sleep), tak časy v logu budou vypadat dost hnusně.
    Kdybys to chtěl spouštět pravidelně a přesně každých pět minut, máš tuto možnost:
    http://www.abclinuxu.cz/forum/show/185745#14
    Josef Kufner avatar 17.7.2007 10:46 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    A máš nějaký závažný důvod, proč to nedávat do cronu?
    Hello world ! Segmentation fault (core dumped)
    9.7.2007 16:12 Tomáš | skóre: 31 | blog: Tomik
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Zalezi na tom, co ten skript dela. Mam i skripty na 100 radku, delaji hodne jednoduchych akci (treba kopirovani a konverze obrazku), takze Python by zlepseni neprinesl.
    9.7.2007 14:38 ams
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Upravena verze skriptu:
    for i in a b; do 
    smartctl -A "/dev/hd$i" | awk '
    BEGIN { for(i=1;i<256;i++) a[i]=-1 } 
    $1>=1 && $1<=255 { a[$1]=$10 }
    END { for(i=1;i<256;i++) { if(a[i]>=0) printf "%d", a[i]; printf ";" } }'
    echo
    done
    
    9.7.2007 14:53 D3d
    Rozbalit Rozbalit vše Re: BASH script - smartctl, csv, expr, awk
    Díky moc, to je přesně ono - to jsem potřeboval.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.