Zdravim. Nedavno tu bol clanok o rozsirovani funkcii nautila kde bol spomenuty program zenity. Trochu som sa s tymto hral a spravil som si skript ktori vypisuje informacie z vnstat(statistika prenosu sietovych dat) pomocou zenity. U mna ten skript ide len som chcel poprosit ci by sa naslo par ludi na jeho vyskusanie aby som vedel ci ide aj na inych konfiguraciach systemu. Prednostne je pre ubuntu kde treba doinstalovat len vnstat a ostatne komponenty by tam mali byt. Kedze skript sem nejde vlozit pre jeho dlzku tak je pridany ako subor.
Test skriptu vnstat-zenity.
- vnstat_interaktiv_zenity.sh (3.3 kB)
Pre pridávanie komentárov sa musíte prihlásiť.
Pastebin ;)
Hmm, mas to tam Odkaz - pastebin To som este nepouzil. :D
P.s Tu sa neda editovat aj ked som prihlaseny? Nikde to nevidim.
Veru nedá ;)
A čo by ten skript ako mal robiť ak sa smiem spýtať?
Zdetekuje sietove karty, doplni ich do nastavenia vnstat, da vybrat aku statistiku chces zobrazit a vypise to pomocou zenity v okne. Mal som ten skript aj s vypisom do terminalu ale tam som musel vyberat cez klavesnicu a toto je klikacie.
Tie karty síce vylistuje, ale nechá k nim rýchlosť v okrúhlych zátvorkách. Máš prvú chybu v sed-e. Čo to robilo tebe ak sa smiem opýtať?
Toto mi da vnstat --iflist
Available interfaces: wlp3s0 lo enp2s0f1 (10 Mbit)
a toto sed vnstat --iflist | sed 's/.*: \(.*\) (.*/\1/'wlp3s0 lo enp2s0f1
Takto to vyzera u mna vnstat-zenity ako vidis u mna to rozpoznalo karty spravne
Mozem vidiet co dava tebe
Prvý problém máš v sed-e, nevyhodí text v zátvorkách.
Ak mas cas mozes vyskusat zmenit riadok 34 z
naVdaka.
Aj tam bude problem ak na konci riadku nebude rychlost, cize skor
viacnasobne medzery v zozname nevadia. ale keby predsa, tak este
Áno, to vyzerá lepšie. Ale nie je(dummy0 môžeš odignorovať, to ma len zaujímalo či si do pol hodiny všimne vnstat nové rozhranie):
pričom by to malo logicky ukázať toto:Najzvláštnejšie na tom je to, že to skúšam na Ubuntu 16.04, teda na OS ktorý máš v profile a dostávam rozdielne výsledky.
Ďalej nerozumiem prečo sa tam volá 2x za sebou sed, keď sa to dá v jednom sede. Ďalšia chyba je ohľadne testu či zoznam kariet nie je prázdny. Test "$var" == "" zlyhá. Namiesto toho sa používa -z.
Potom tam máš blok kódu ktorý som kompletne nepochopil. Prelievaš zoznam sieťových zariadení podľa toho či majú vytvorenú databázu pre vnstat. Tu vidím prvý problém s tým že takto asi vyradíš čerstvo vytvorené sieťové rozhranie. To nie je rozumné ak to robíš pre ĺudí s mobilným internetom čo si potrebujú skontrolovať koľko preniesli cez dodatočne zasunutý USB modem.
Ďalší problém je ten, že podávaš zoznam sieťových rozhraní aj s plusmi programu vnstat ktorý za parametrom -i očakáva len jedno rozhranie.
2x sed je pre mna citatelnejsie ale samozrejme da sa to napisat lepsie. Toto nieje program ktori bezi neustale tak som neriesil spotrebu prostriedkov.
Test "$var" == "" zlyhá pozriem .
Test s vytvorenou databazou som pridal po tom co my system po spusteni virtualboxu vytvoril nove rozhranie a vnstat spadol s chybou ze chcem od neho vypis z rozhrania ktore nema databazu. Cize kym vnstat nevytvori databazu tak sa rozhranie ignoruje. Vnstat ma nastaveny urcity cas kym zaregistruje nove rozhranie, inak by bolo treba tuto databazu vytvarat pri spusteni skriptu co nechcem od tohto skriptu aby zasahoval do systemu. Iba cita.
Co sa tyka plusiek je to z man vnstat parameter -i vyber viacerych rozhrani. Syntax interface1+interface2+...
Este doplnim ze pre ludi s docasnym modemom toto nieje vhodne. To by som musel este vytvorit cast kde by si clovek mohol vybrat z ktoreho zariadenia/databazy sa maju zobrazit vysledky. To by bolo dalsie okno a nechcem z toho spravit uklikavacku cez mnozstvo okien. Toto je prednastavene pre zobrazovanie informacii zo vsetkych sietovych rozhrani. Je to skor pre ntb s pripojenim niekedy cez LAN niekedy cez wifi.
Čo sa týka vnstat -i, mne man tvrdil že to očakáva len jedno rozhranie. Ak ich aj napriek tomu očakáva viac, tak by to vysvetľovalo prečo mi to useklo názov jedného z aktívnych rozhraní a padlo to. Videl si koľko ich mám, a používam ich, na desktope.
Hmm, nedari sa mi nic najst o obmedzeni mnozstva rozhrani vo vnstat. Nemohol to useknut niektori iny prikaz?
Mohol. To je tvoj kód, spúšťaný na distribúcii ktorú máš v profile. Ty si ten kód písal z pamäti a chcel po niekom inom nech ti ho otestuje? To nie je moc dobré.
Jj, prave pre toto co sa stalo u teba som to chcel otestovat. :D Ale az s tolkymi rozhraniami som nepocital :D To je dobry extrem(aspon pre mna) Idem googlit zatial vdaka.
Pretože, znova opakujem: skúšal som to u seba na rovnakom distre ako máš ty a napríklad sed mi handloval ten boobie výraz inak ako tebe. A skôr sa divím že to tebe prechrústal lebo to malo robiť niečo iné.
- dummy0 môžeš odignorovať - a co interface, ktory "bezi" len na L2 vrstve?
- problem s rozdielnym vysledkoch je v tom, ako sed pracuje. sed (ako aj ine text spracujuce procesory) je nenazrany - ak sa mu definuje nejaky wildcard, tak zoberie najvaciu mnozinu, ktora mu vyhovuje. preto vysledok
bude
vnet0 (10 Mbit) enp7s0 (10 Mbit) lo virbr0 wlp13s0 virbr0-nic vnet1
- Test "$var" == "" zlyhá - nezlyha, ale musi sa spravne pouzit (ano v tomto skripte zlyha)
- Tu vidím prvý problém s tým že takto asi vyradíš čerstvo vytvorené sieťové rozhranie. - ja vidim problem v tom, ze asi nemas logicke myslenie - tazko zobrazis data pre sietove rozhranie, ktore esta nema vytvorenu databazu. ze?
- Ďalší problém je ten, že podávaš zoznam sieťových rozhraní aj s plusmi programu vnstat ktorý za parametrom -i očakáva len jedno rozhranie. - tu pouzijem tvoj sposob vyjadrovania - zrus si tie cudzie repozitare a nainstaluj si original vnstat balik, ktory argument v takom tvare podporuje (ze nemas taky repozitar? ale urcite ho mas, 100%)
Znova sa mýliš.
Test "$var" == "" zlyhá. Buď sa použije old school "x$var" == "x" alebo new -z $var. Každé má svoje pre a proti.
Ak čerstvo vytvorené sieťové rozhranie nemá ešte vytvorenú databázu a spadá do podmienok, tak preň zobrazím nulové hodnoty. Problém je v tom, že sa aspoň mne tie nové rozhrania nepridávajú automaticky, teda tak ako by mali. A tento klikací nástroj tým pádom stráca na význame.
Program vnstat za parametrom i berie len 31 znakov na rozhrania, a tam sa tých sieťoviek veľa nezmestí. Ak by ten program očakával sieťové rozhrania, tak nemá tak stupídny limit na dĺžku.
z -i parametra sa kopiruje 32 znakov...
Ako obvykle. Nie vždy je vhodné riešenie spoliehať sa pri shell skriptoch na doplnky v bash-i, inak by si mal aj tu rozšírené otázky typu "nefunguje mi vo wrt alebo na servri z doby bronzovej skript čo mi funguje na desktope". Preto som vravel že použitie závisí od ... A berie to do úvahy len 31 znakov, zabudol si pri rátaní cez echo a wc že ti to dáva aj \n.
... ale on pouzil bash
cez echo a wc - zase varis z vody? strapnujes sa (uz dlhodobo)...
Návyky je pre teba neznámy pojem.
A strápňovanie? V tom si expert ty 32 znak:
si odporny slizky had, ktory stale meni, prekruca a vymysla si argumenty vzdy, ked sa mu to hodi, takze ako som uz skor avizoval, nemienim na teba dalej reagovat...
A to všetko len preto, že ťa nepodporujem v tvojich nepravdách.
Keď ti raz mamina povedala že máš vyniesť smeti, tak ich vynes. Aby to nesmrdelo. A neprotestuj na internete tým, že sa budeš na niekoho nevhodne obracať.
Teda, taka blbost, jeden skript a vy sa pomali idete pobit. :D
Klud. Nadych, vydych. :D
Ja sa nemám prečo chovať slušne k človeku čo sa sám nevie chovať slušne k iným. Inými slovami: aký požičaj, taký vráť. Ak mu to vadí, tak je to len jeho problém.
Ale naspäť k skriptu. Jeho návrh nie je moc rozumný. Čo keby si mal prvú otázku, vyber si z sieťových rozhraní: všetky, hento, tamto, onamto (s predvoleným všetky)? A druhú otázku štatistika pre vybrané rozhranie denná, týždenná, mesačná alebo testovacie info?
Zoznam rozhraní ktoré majú skolektované prietoky cez vnstat získaš ľahko, majú vo výpise vnstat bez parametrov na konci riadku dvojbodku o ktorú to ešte môžeš očistiť.
vnstat|grep :\$|tr -d ' :'
Pozriem.
Nuz neviem ta cast s ponukou kariet... pastebin
Skús sa zamyslieť nad tým, v akom formáte ti dáva výstup ten výber kariet. Je to oddelené plusom alebo rúrou?
A silno odporúčam aby si to spúšťal z terminálu ako debug aby si videl čo to robí, čo to predá ďalej a tak.
Samozrejme cez terminal som to skusal. Dam si cez echo vypisat premennu. Okno vyberu mi posle v premennej
To plus som si nastavil v okne zenity parametrom --separator="+". Uz len odstranim uvodzovky a pouzivam to ako parameter za vnstat -i . U mna to ide, u teba to robi problem?Jaj, ne. Ja som ten oddelovač zabudol zadať. Inak, ten koniec by bol prehladnejší keby si použil case, v ktorom si naplníš "zobrazovaný text". Statement case je totižto výber, a občas je ho vhodnejšie použiť ako if, elif a podobné kľúčové slová známe z rôznych jazykov.
Case môže mať pochopiteľne viac riadkov kódu na jednu podmienku, oddelujú sa cez (nájdeš v dokumentácii).
PS: Moc som to netestoval, nemám prečo. Nie všetky potrebné rozhrania sa mi zobrazujú cez vnstat, a to aj napriek tomu že sa používajú. A navyše nemám rád klikacie aplikácie keďže majú ťažkopádnejšie ovládanie ako cez command line. Ale, takéto niečo by mohlo mať okruh nenulový užívateľov, ak to zdetekuje rozhranie pre mobilný internet. Resetnúť štatistiky po dobití alebo na začiatku obdobia, zobraziť koľko bolo približne minuté, a možno vyvolať alarm pri hodinkách. I keď také niečo už asi existuje.
To case pozriem. Ten koniec v ponuke je este z doby ked som sa snazil vytvorit programovu slucku. Toto bol jediny sposob ako tu slucku ukoncit, pretoze som zistil ze zenity posiela rovnaky vystupny kod 0 pri staceni OK, zrusit a aj pri kliknuti na krizik. Preto som to potom nechal v tomto rezime zaciatok-koniec.
mas to nejake rozbite...
Dovolím si ťa zacitovať:
Na Ubuntu, ktorého sa toto týka to zobrazuje podľa očakávaní. A to jak v 12.04, tak aj 16.04. Mimochodom, rád by som pridal aj to o tvojom hadovi dlhom 32 znakov, ale môžeš si ho dať za klobúk ako pierko zo sojky.blbobsti:
To vsetko ti nefungovalo?
ano aj nie. skript je samozrejme nefunkny, ale poukazoval som hlavne na nevhodne riesenie/pouzite prikazov...
btw https://www.howtoforge.com/tutorial/vnstat-network-monitoring-ubuntu/#-using-vnstati
da sa to nahodit aj ako cgi pre web server...