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 15:11 | IT novinky

    Rodina jednodeskových počítačů Orange Pi se rozrostla (𝕏) o Orange Pi 5 Ultra.

    Ladislav Hagara | Komentářů: 1
    dnes 14:33 | Nová verze

    Mobilní Datovka, tj. svobodná aplikace pro přístup k datovým schránkám pro zařízení s operačním systémem iOS a Android, byla vydána v nové verzi 2.2.0. Nově lze nastavit vlastní obrázky pro jednotlivé datové schránky pro jejich lepší identifikaci v seznamu schránek. Přidán byl editor vnitřních nastavení aplikace, který slouží jako přehled všech hodnot, které aplikace udržuje.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Komunita

    Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem letos věnovala 1,1 milionu dolarů na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Peníze byly rozděleny mezi Electronic Frontier Foundation (EFF), Public Knowledge, ARTICLE 19, Demand Progress, European Digital Rights (EDRi), Fight for the Future, The Markup, OpenMedia, Restore the Fourth, Signal, Surveillance Technology Oversight

    … více »
    Ladislav Hagara | Komentářů: 2
    dnes 02:11 | Nová verze

    LibrePCB, tj. svobodný multiplatformní softwarový nástroj pro návrh desek plošných spojů (PCB), byl vydán ve verzi 1.2.0. Přehled novinek v příspěvku na blogu a v aktualizované dokumentaci. Vypíchnut je import knihoven KiCadu. Zdrojové kódy LibrePCB jsou k dispozici na GitHubu pod licencí GPLv3.

    Ladislav Hagara | Komentářů: 2
    dnes 01:33 | Upozornění

    Při mezinárodní operaci byla zablokována pokročilá služba pro šifrovanou komunikaci MATRIX, oznámil úřad pro evropskou justiční spolupráci Eurojust. K uzavření služby podle něj vedlo vyšetřování společného týmu, na němž se podílely francouzské a nizozemské úřady a který byl zřízen při Eurojustu. Službu podle něj využívaly kriminální živly. Tato služba MATRIX nemá nic společného s nadací Matrix a protokolem Matrix.

    Ladislav Hagara | Komentářů: 7
    včera 18:55 | IT novinky

    Národní filmový archiv spustil nový YouTube kanál Filmová klasika, který veřejnosti postupně zpřístupní vybrané české filmy. Nabídne především tituly, které obecenstvo v běžné nabídce televizí nebo VOD platforem nenajde. Dnes v 18:00 kanál odstartoval kultovním snímkem Kouř režiséra Tomáše Vorla. Divačky a diváci se pak každý týden budou moci těšit na dva nové filmy, které se na novém kanálu objeví vždy v úterý a v pátek. Spolu s Kouřem nabídla Filmová klasika ještě další desítku filmů ke zhlédnutí.

    Ladislav Hagara | Komentářů: 34
    včera 12:55 | IT novinky

    Příspěvek na blogu Raspberry Pi informuje, že Steam Link běží už i na Raspberry Pi 5. Nejnovější verze podporuje H.264 (1080p s 144 FPS) i HEVC (4K s 60 FPS a 1080p s 240 FPS).

    Ladislav Hagara | Komentářů: 5
    včera 05:00 | Komunita

    Na čem aktuálně pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za listopad (YouTube).

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

    Byla vydána nová verze 14.2 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

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

    Byla vydána nová stabilní verze 24.11 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Vicuña. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

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

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

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