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í
×
    dnes 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 0
    dnes 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 3
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 30
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 13
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (73%)
     (9%)
     (2%)
     (16%)
    Celkem 796 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

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

    9.7.2007 10:07 D3d
    BASH script - smartctl, csv, expr, awk
    Přečteno: 2952×
    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.