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 tree
commande 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 uptime
mais le /usr/bin/uptime
fichier 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?
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.strace
. Il montrera tous les appels système effectués par votre application. Si vous l'exécutez,strace uptime
il 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énierieRéponses:
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 :)
la source
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:Vous pouvez ensuite télécharger le RPM source avec
yumdownloader --source procps
. (yumdownloader vient duyum-utils
paquet, si vous ne l'avez pas déjà installé.) Une fois que vous avez le src.rpm, vous pouvez le déballer avecrpm -i
ou avecrpm2cpio
.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:
Et, cool, il y a le code facilement consultable en ligne. Si vous le suivez, il suffit de le lire
/proc/uptime
et de l'imprimer joliment.la source