sonnenblen.de - Das unabhängige Sun User Forum
Betriebssysteme => Solaris => Thema gestartet 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
-
Whaaaaaat?
-
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.
-
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
-
perl -e 'print time, "\n"'
Rainer
-
OK, das ist natürlich das einfachste.
-
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).
-
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
-
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...
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
-
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
-
Ist denn nawk überall dabei?
Claus
-
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
-
Die älteste Maschine welche ich hier grad zur Hand hab ist ein Solaris 2.6 5/98:
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
-
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
-
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
-
OK, aber ist irgendein Perl 5.5.0 nicht auch seit Solaris 7 oder so dabei?
Claus
-
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
-
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
-
Bei Solaris 10 ist der GCC dabei und schon geht das wieder. :)
-
Bei Solaris 10 ist auch perl dabei :)
-
Seit Solaris 8 zumindest ist Perl dabei, die Frage ist wie weit zurück das geht ...
Claus
-
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"! ;)