Wo finde ich den Quellcode für `uptime`?

8

Ich lerne Python. Bis jetzt habe ich nur grundlegende Python-Codierung durchgeführt. Vor einem Tag habe ich die Python-Implementierung des treeBefehls überprüft . Plötzlich dachte ich daran, einen Python-Klon für zu erstellen uptime. Ich habe keine Ahnung, in welcher Sprache es implementiert ist und wie komplex das Klonen sein würde.

Aber ich konnte den Quellcode nicht finden. Ich verwende Fedora 14. Das Kernel-Entwicklungspaket ist installiert. Ich habe es getan, whereis uptimeaber die resultierende /usr/bin/uptimeDatei zeigt seltsame Symbole, wenn sie mit vim geöffnet wird. Das Googeln nach dem Quellcode konnte ebenfalls nicht zu den gewünschten Ergebnissen führen. Wo finde ich den Quellcode?

Dharmit
quelle
1
Versuchen Sie es, anstatt (oder zusätzlich) Dateien mit vim zu öffnen, um zu sehen, woraus sie bestehen file /usr/bin/uptime. Der Befehl file verwendet eine Reihe von halbmagischen Heuristiken, um den Inhalt der Datei zu erraten - in diesem Fall eine binäre ausführbare Datei im ELF-Format.
Mattdm
Ein Debugging-Tool, das ich mag, ist strace. Es werden alle Systemaufrufe angezeigt, die Ihre Anwendung ausführt. Wenn Sie ausführen strace uptime, werden (nach dem Laden) offene Aufrufe von / proc / uptime und / proc / loadavg angezeigt. Obwohl es nicht alles zeigt, ist es manchmal ein anständiger Start in das Reverse Engineering
Rich Homolka

Antworten:

8

Die Verfügbarkeit ist Teil des 'procps'-Pakets. Die Upstream-Quelle befindet sich unter http://procps.sourceforge.net/ (Kein Fedora-Benutzer, daher nicht sicher, wo sich die .src.rpm befindet).

Um die Frage zu beantworten, die Sie jedoch nicht gestellt haben; Werfen Sie einen Blick in / proc / uptime. Die erste Zahl ist Sekunden seit dem Start. Du solltest in der Lage sein, das ziemlich einfach in etwas brauchbares zu verwandeln :)

Shaun
quelle
Vielen Dank. Habe den Code. Ich habe checkout / proc / uptime gemacht, bevor ich hier gepostet habe. Das war die letzte Option, die ich nutzen wollte.
Dharmit
1
Nur auf die Quelle geschaut, liest der Code nur die Verfügbarkeit von / proc / uptime ein. Überprüfen Sie die ... / proc / sysinfo.c in der procps-Quelle auf die Funktion uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings
9

Im Allgemeinen finden Sie in einer RPM-basierten Distribution wie Fedora den Namen des Pakets, das einen bestimmten Befehl enthält rpm -qf /path/to/command. So was:

$ rpm -qf $( which uptime )
procps-3.2.8-18.20110302git.fc16.x86_64

Sie können dann das Quell-RPM mit herunterladen yumdownloader --source procps. (yumdownloader stammt aus dem yum-utilsPaket, wenn Sie das noch nicht installiert haben.) Sobald Sie die src.rpm haben, können Sie sie entweder mit rpm -ioder mit entpacken rpm2cpio.

Alternativ können Sie in vielen Fällen das RPM-Paket nach der Projekt-URL abfragen, wodurch Sie möglicherweise hilfreich auf die vorgelagerte Quelle verweisen:

$ rpm -qi procps|grep ^URL
URL         : http://gitorious.org/procps

Und cool, es gibt den Code, der bequem online durchsucht werden kann. Wenn Sie es durchgehen, ist es im Grunde alles, was es tut, /proc/uptimees hübsch zu lesen und auszudrucken.

mattdm
quelle