[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bash Einzeiler Zeit+Datum letzter Eintrag dmesg



Am 20.08.2011 07:37, schrieb David Haller:
> Hallo,
> 
> Am Mon, 15 Aug 2011, Rico Koerner schrieb:
>> Am 15.08.2011 08:39, schrieb David Haller:
>>> Am Sun, 14 Aug 2011, Rico Koerner schrieb:

>>> dmesg ist also schon der richtige Ansatz.
>>
>> Das hab ich ja nicht verworfen.
>>
>>>> Dort steht die Zeit ja schon am Anfang der Zeile. Somit wird immer die
>>>> korrekte Zeit ausgegeben.
>>
>> Nein, eben nicht. Die Abweichung wurde ja nun schon mehrfach
>> festgestellt. Nur deshalb hab ich den Weg verfolgt.
> 
> Wie gesagt, ich denke das ist ein Sonderfall. Leider hat Frank keine
> "Rohdaten" (uptime, timestamp in dmesg/syslog) mit denen dann
> weitergerechnet wird geliefert.

Ein Sonderfall ist es eben nicht, Abweichungen treten auf allen
Maschinen auf. Die Höhe der Abweichung (pro Zeiteinheit) ist auf jeder
Maschine anders und multipliziert sich entsprechend mit der Uptime.
Auffällig wirds nur, wenn das Datum in der Zukunft liegt oder wenn man
genau hinschaut.

> Wobei man hier ergänzen sollte: 'cut -c' oder andere zeichenabhängiger
> Kram sind immer "fragil". Musterbasierte wie cut -fN -dX, die awk-
> oder sed-Variante sind robuster.

An der Stelle läßt sich auch cut -f1,2,3 -d' ' einsetzen, wenn dir das
besser gefällt. Das fiel mir aber in dem Moment grad nicht ein.
Das ist dann wohl eher Geschmackssache, ob man cut, sed oder awk
einsetzt. Lieber wäre mir an der Stelle eine Bash-Substitution gewesen.
Das wäre die effizientere Art, da dann der zusätzliche Prozeß wegfallen
würde.
Nicht kritischer als die Musterbasierte und fallabhängig zu betrachten,
Syslog schreibt nun mal das Datum in einer konstanten Länge da rein.
Sollte sich dieses ändern, ändert sich mit genauso hoher
Wahrscheinlichkeit auch das Muster.

>>> Mantra: Prozesse starten, Disk- und Console-I/O ist lahm!
>> Dann spar dir doch auch den seq-Aufruf, das kann die bash auch allein. ;-)
>>
>> -- for i in `seq 1 1000`;
>> ++ for i in {1..1000};
> 
> Ach, alte Gewohnheit, hab 10 Jahre mit bash-2.x programmiert ... Und
> 
> 1. es ist genau 1 Aufruf pro Durchlauf (und nicht _in_ der Schleife)

Das trifft übrigens auch auf das ürsprüngliche Konstrukt zu. Ich wollte
schon am Anfang mal einwerfen, daß die ganze Millisekundenschinderei
hier vollkommen nebensächlich ist, da das real nur ein einzelner Aufruf
sein wird. Wenn du damit anfängst, sei auch bei dir konsequent.
Also sei fair bei dem Vergleich und rechne das genauso hoch für dein seq.

Um mit gleichen Maßstäben zu messen:
~$ time { for i in {1..1000}; do for x in `seq 1 1000`; do :; done; done
> /dev/null; }

real	0m10.996s
user	0m9.581s
sys	0m1.892s
~$ time { for i in {1..1000}; do for x in {1..1000}; do :; done; done >
/dev/null; }

real	0m6.853s
user	0m6.844s
sys	0m0.000s

> Noch ein Mantra/ne Faustregel: wer in einer Pipe mehr als genau ein
> 'cut', 'sed', 'awk' oder 'perl' (python) verwendet, der macht was
> falsch. Mit dem jew. nächstgenannten Tool kann man eigentlich immer
> das geforderte effektiver erledigen.

Naja, für einen schnellen Hack ist es manchmal besser ein paar
Millisekunden CPU-Zeit zu verbraten, als einen Tag über die optimale
Lösung zu grübeln.
Auch ein Mantra: So gut wie nötig, nicht so gut wie möglich.

> $ seq 10 | headntail -2 | xargs
> 1 2 9 10

Wozu braucht man das?

> War auf jedenfall eine sehr lehrreiche awk-Programmierübung für
> mich[3] und ist sogar teils sinnvoll kommentiert ;)

Aha, also ähnlich dem hiesigen Problem, einfach nur aus Spaß am
Programmieren.

> -dnh, der die Tage endlich mal das ISO von seiner ersten Linux-CD
>     gezogen hat: Debian-1.3.1_chip_ed.iso vom Dec. 1997 aka "bo" :)
>     Auch deswegen lunger ich hier auf der ML rum, obwohl ich aktuell
>     kein Debian im Einsatz habe ...

Auch etwa zu der Zeit gestartet, aber zuerst Slackware probiert, schnell
wieder weggeworfen. Danach Suse einige Jahre genutzt und erst mit Debian
so richtig glücklich geworden.

> [0] und mein Hauptrechner davor war seit 2000 ein 500 MHz Athlon, der
>     langsamste den's je gab ;) Allerdings hab ich seit ~4 Jahren nen
>     Zweitrechner mit nem Athlon 64 X2 3800+EE (2x2.0 GHz), der
>     inzwischen nur noch Fileserver macht (und dessen NT zu sterben
>     scheint *grumpf*).

Zeit für einen Umstieg. Wenn du die Stromkosten berücksichtigst ist neue
Hardware billiger.

> [3] bei Interesse (->per PM kundtun bitte) mail ich das gern per PM
>     oder lad's ggfs. auf meine Webseite.

Wo bleibt der Opensourcegedanke? Legs doch gleich auf die Webseite und
gib der Community etwas zurück. Vielleicht interessieren sich mehr Leute
dafür, als du denkst.


Gruß
Rico

Attachment: smime.p7s
Description: S/MIME Kryptografische Unterschrift


Reply to: