abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 0
včera 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 16
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 767 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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

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