Où puis-je trouver le code source de `uptime`?

8

J'apprends Python. Jusqu'à présent, je ne faisais que du codage Python de base. Il y a un jour, j'ai vérifié l'implémentation de la treecommande python . Soudain, j'ai pensé à créer un clone Python pour uptime. Je n'ai aucune idée de la langue dans laquelle il est implémenté et de la complexité de son clonage.

Mais je n'ai pas pu trouver son code source. J'utilise Fedora 14. Le package kernel-devel est installé. Je l'ai fait, whereis uptimemais le /usr/bin/uptimefichier résultant montre des symboles étranges lorsqu'il est ouvert à l'aide de vim. La recherche de son code source sur Google ne pouvait pas non plus donner les résultats souhaités. Où puis-je trouver son code source?

Dharmit
la source
1
Plutôt que (ou en plus) d'ouvrir des fichiers avec vim pour voir de quoi ils sont faits, essayez file /usr/bin/uptime. La commande file utilise une série d'heuristiques semi-magiques pour deviner le contenu du fichier - dans ce cas, un exécutable binaire au format ELF.
mattdm
Un outil de débogage que j'aime est strace. Il montrera tous les appels système effectués par votre application. Si vous l'exécutez, strace uptimeil afficherait (après le chargement) les appels ouverts sur / proc / uptime et / proc / loadavg. Bien qu'il ne montre pas tout, c'est parfois un début décent sur la rétro-ingénierie
Rich Homolka

Réponses:

8

Uptime fait partie du package 'procps', la source en amont se trouve à http://procps.sourceforge.net/ (Pas un utilisateur de fedora, donc ne savez pas où trouver leur .src.rpm).

Pour répondre à la question que vous n'avez pas posée, cependant; jetez un oeil dans / proc / uptime Le premier nombre est en secondes depuis le démarrage. Vous devriez pouvoir transformer cela en quelque chose d’utilisable assez facilement :)

Shaun
la source
Merci. J'ai le code. J'ai fait checkout / proc / uptime avant de poster ici. C'était la dernière option que j'allais utiliser.
Dharmit
1
Je viens de regarder la source, le code lit simplement la disponibilité dans / proc / uptime. Vérifiez le ... / proc / sysinfo.c dans la source procps, pour la fonction uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings
9

En général, sur une distribution basée sur RPM comme Fedora, vous pouvez trouver le nom du package qui fournit une commande donnée avec rpm -qf /path/to/command. Comme ça:

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

Vous pouvez ensuite télécharger le RPM source avec yumdownloader --source procps. (yumdownloader vient du yum-utilspaquet, si vous ne l'avez pas déjà installé.) Une fois que vous avez le src.rpm, vous pouvez le déballer avec rpm -iou avec rpm2cpio.

Alternativement, dans de nombreux cas, vous pouvez interroger le package RPM pour l'URL du projet, ce qui peut vous indiquer utilement la source en amont:

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

Et, cool, il y a le code facilement consultable en ligne. Si vous le suivez, il suffit de le lire /proc/uptimeet de l'imprimer joliment.

mattdm
la source