sonnenblen.de - Das unabhängige Sun User Forum

Betriebssysteme => Solaris => Thema gestartet von: tassilo am 10. September 2009, 18:25:55

Titel: sekunden seit 1.1. 1970 (bash)
Beitrag von: tassilo am 10. September 2009, 18:25:55
moin

ich bin ein wenig am verzweifeln. wie bekomme ich in der bash die sek seit 1.1. 1970 . bei linux macht sowas date %s aber sowas gibts gar nicht in den man pages zu date.

laut http://www.sonnenblen.de/solaris/mit_datum_rechnen-t3246.0.html geht das wirklich nicht mit "normalen" boardmitteln ? irgendwie komisch denn "intern" wird bestimmt mit sek gerechnet

jemand ne idee ?

grüße

tassilo
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: Sparky am 10. September 2009, 20:40:28
Whaaaaaat?
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: Ten Little Indyans am 10. September 2009, 21:50:12
Das Problem hat nichts mit der bash an sich zu tun (bzw. lässt sich mit dieser allein auch nicht einfacher lösen). Der "normale" Unix date Befehl bietet nun mal weniger Möglichkeiten als die GNU-Version die bei Linux Verwendung findet.

Pragmatische Lösung: Auf der Solaris-Kiste die GNU Coreutils installieren. Da sind dann neben date noch etliche andere Tools in der GNU-"Eierwollmilchsau"-Edition verfügbar. Möglicherweise sind sie auch bereits installiert. Schon mal gdate, /opt/sfw/bin/date oder /usr/local/bin/date probiert?

Ansonsten gibt es noch folgenden Trick, der genau auf der These "intern wird bestimmt mit sek gerechnet" basiert:

/usr/bin/truss /usr/bin/date 2>&1 | grep ^time | awk '{print $3}'
truss ist ein Debugger für Systemaufrufe. date holt sich die Zeit über time(2) (http://docs.sun.com/app/docs/doc/819-2241/time-2?a=view), wie vermutet in Sekunden seit 1970. Mit grep und awk wird das Ergebnis noch optisch aufbereitet so dass nur noch der Rückgabewert des time() Systemaufrufs übrig bleibt. Die Umlenkung 2>&1 ist nötig weil die truss-Ausgaben auf Standard Error geschrieben werden.
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: claus am 10. September 2009, 22:17:57
Blöde Frage: Kannst Du nicht einfach eine Datei anlegen und dann per stat die Creation Timestamp ausgeben lassen? Damit solltest Du doch die Sekunden seit 1970 bekommen?

Claus
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dornroeschen am 11. September 2009, 06:40:13
perl -e 'print time, "\n"'
Rainer
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: claus am 11. September 2009, 08:36:39
OK, das ist natürlich das einfachste.
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: Ten Little Indyans am 11. September 2009, 08:40:28
Blöde Frage: Kannst Du nicht einfach eine Datei anlegen und dann per stat die Creation Timestamp ausgeben lassen? Damit solltest Du doch die Sekunden seit 1970 bekommen?
Das geht aber nur wenn der stat Befehl vorhanden ist, also die GNU Coreutils installiert sind.

Letztlich hängt alles davon ab welche Tools vorhanden sind bzw. genutzt werden sollen/können/dürfen. Die Perl-Lösung ist einfach, aber Perl hat nicht nur Freunde... ::) Ich denke mal in den meisten anderen Skriptsprachen (Python, PHP, Ruby usw.) dürfte es auch nur ein Einzeiler sein.

Falls ein C-Compiler vorhanden ist kann man sich auch ruck-zuck was bauen.
$ cat > epoch.c
int main() { printf("%d", time(0)); }
^D
$ cc -o epoch epoch.c
$ ./epoch
1252650912

Auf meine Systeme packe ich grundsätzlich die Companion CD mit drauf, denn es gibt immer wieder Fälle wo man die GNU-Version einens Tools braucht (z.B. make).
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: tassilo am 11. September 2009, 09:06:14
hallo

danke für die vielen antworten. es scheint ja wirklich nicht mit den "normalen" boardmitteln zu funktionieren. ich bin sehr überrascht.
am nähesten scheint die version mit truss zu kommen, hmmm.

das man das mit perl, c, etc machen kann ist mir klar. aber nur um die zeit zu bekommen perl zu starten... wenn ich sowieso perl habe mache ich das komplett in perl..
 und das mit den gnu tools. die sind ne feine sache (ich merk ja immer wie nett sowas ist wenn ich auf einem system bin wo es die nicht gibt) aber die sind halt nicht "überall" installiert..

grüße

tassilo
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dominik am 11. September 2009, 11:06:46
Also einfach noch als Hinweis.  http://www.google.com/search?client=opera&rls=en&q=solaris+date+epoch&sourceid=opera&ie=utf-8&oe=utf-8&safe=images brachte mir unter den ersten 4 Links 3 Stück, welche sehr schön die von Dir gesuchte Funktion (rein mit Bordmitteln) beschrieben. Manchmal frage ich mich schon, ob das Board hier lieber zum Plaudern benutzt wird...

Zitat
root@sbsubs170 # /usr/bin/truss /usr/bin/date 2>&1 |  nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);print $2}'
1252659806
root@sbsubs170 # nawk 'BEGIN{print srand()}'
1252659824

Gruss
Dominik
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: tassilo am 11. September 2009, 18:32:58
moin

..jo hatten den "epoc" nicht im suchbegriff...
und nat. benutze ich das board zum plaudern, wusste nicht das das verwerflich ist...

grüße

tassilo
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: claus am 11. September 2009, 22:11:26
Ist denn nawk überall dabei?

Claus
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: Sonnenbrand am 15. September 2009, 12:42:15
Moin,

Ist denn nawk überall dabei?

Claus

bin seit 1988 mit SUNs beschäftigt und irgendwann kam zu awk dann noch nawk dazu. Aber das ist schon so lange her, da kann ich so auf die schnelle nicht sagen ab welchen SUN-OS Release das mitgeliefert wurde.

Fazit: Ja, ist per Default bei Solaris dabei.

Andi
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dominik am 15. September 2009, 13:27:53
Die älteste Maschine welche ich hier grad zur Hand hab ist ein Solaris 2.6 5/98:

Zitat
root@ICM-BALE # uname -a
SunOS ICM-BALE 5.6 Generic_105181-19 sun4u sparc SUNW,Ultra-4
root@ICM-BALE # which nawk
/usr/bin/nawk

Vielleicht schaff ich's heute Abend mal meine IPC mit SunOS 4.1.3 zu booten ;)

Gruss
Dominik
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: Sonnenbrand am 15. September 2009, 14:08:30
Es würde mich nicht wundern wenn es mit SunOS 4.0 rein kam.
(Aber so was uraltes finde ich auch nicht mehr... *g*)

Andi
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dominik am 15. September 2009, 14:48:48
Also in der Wikipedia steht, dass New AWK 1988 veröffentlicht wurde und " its implementation was made available in releases of UNIX System V". Daher wohl eher kein SunOS.

Gruss
Dominik
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: claus am 15. September 2009, 20:03:35
OK, aber ist irgendein Perl 5.5.0 nicht auch seit Solaris 7 oder so dabei?

Claus
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: escimo am 15. September 2009, 22:43:25
Kaum zu glauben, das kein Kommando direkt den UNIX Timestamp unter Solaris ausspuckt.
Alternativ halt mit C was einmalig "basteln" und übersetzen... :)

/*  esec.c - display seconds since 00:00:00 UTC, January 1, 1970  */
#include <stdio.h>
#include <time.h>

int main ( void )
{
    return ( printf ("%d\n", time (NULL)) );
}
Quelle: http://www.unix.com/unix-dummies-questions-answers/29490-any-command-like-date-s-solaris.html
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dominik am 16. September 2009, 09:53:47
Kaum zu glauben, das kein Kommando direkt den UNIX Timestamp unter Solaris ausspuckt.
Alternativ halt mit C was einmalig "basteln" und übersetzen... :)

Das geht aber nicht mit Bordmitteln, da seit den seligen SunOS 4.x Tagen kein Compiler mehr mitgeliefert wird.

Gruss
Dominik
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: escimo am 16. September 2009, 10:30:34
Bei Solaris 10 ist der GCC dabei und schon geht das wieder. :)
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: dominik am 16. September 2009, 10:53:48
Bei Solaris 10 ist auch perl dabei :)
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: claus am 16. September 2009, 21:20:23
Seit Solaris 8 zumindest ist Perl dabei, die Frage ist wie weit zurück das geht ...

Claus
Titel: Re: sekunden seit 1.1. 1970 (bash)
Beitrag von: escimo am 16. September 2009, 23:36:25
Perl ist von Sun ab Solaris 8 offiziell als Paket dabei. Vorher gab es von Sun kein Paket für Perl. Man musste sich das nachträglich installieren oder selbst mit einem "ANSI-"C Compiler übersetzen und installieren.

Bei Solaris 8 allerdings konnte man ohne Sun's C Compiler einzig mit Umwegen Perl-Module die an C Code gebunden waren installieren.

Entweder selbst mittels GCC Perl inklusive Module sofern benötigt auf Solaris übersetzen oder halt dann besser doch auf die angegebene (n)awk-Lösung zurückgreifen.

Alternativ kann man das ganze natürlich auch selbst errechnen, wenn man ausreichend Kenntnis besitzt. Selbst ist der "Unicese"! ;)