Dove posso trovare il codice sorgente per `uptime`?


8

Sto imparando Python. Fino ad ora ho fatto solo la codifica Python di base. Un giorno fa, ho verificato l'implementazione del treecomando di Python . All'improvviso ho pensato di creare un clone di Python per uptime. Non ho idea di quale lingua sia implementata e quale sarebbe la complessità della clonazione.

Ma non sono riuscito a trovare il suo codice sorgente. Sto usando Fedora 14. Il pacchetto kernel-devel è installato. L'ho fatto whereis uptimema il /usr/bin/uptimefile risultante mostra strani simboli quando viene aperto usando vim. Anche googling per il suo codice sorgente non può produrre i risultati desiderati. Dove posso trovare il suo codice sorgente?


1
Invece di (o in aggiunta a) aprire file con vim per vedere di cosa sono fatti, prova file /usr/bin/uptime. Il comando file utilizza una serie di euristiche semi-magiche per indovinare il contenuto del file - in questo caso, un eseguibile binario in formato ELF.
Mattdm,

Uno strumento di debug che mi piace è strace. Mostrerà tutti i syscalls creati dalla tua applicazione. Se lo esegui strace uptimemostrerebbe (dopo il caricamento) le chiamate aperte su / proc / uptime e / proc / loadavg. Anche se non mostra tutto, a volte è un buon inizio per il reverse engineering
Rich Homolka,

Risposte:


8

Uptime fa parte del pacchetto 'procps', la fonte upstream è su http://procps.sourceforge.net/ (non un utente fedora, quindi non sono sicuro di dove trovare il proprio .src.rpm).

Per rispondere alla domanda che non hai posto, comunque; dai un'occhiata a / proc / uptime Il primo numero è secondi dall'avvio. Dovresti essere in grado di trasformarlo in qualcosa di utilizzabile abbastanza facilmente :)


Grazie. Ho il codice. Ho fatto il checkout / proc / uptime prima di pubblicare qui. Quella era l'ultima opzione che avrei usato.
Dharmit

1
Ho appena guardato la fonte, il codice legge solo il tempo di attività in / proc / tempo di attività. Controlla ... / proc / sysinfo.c nella fonte procps, per la funzione uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings

9

In generale, su una distribuzione basata su RPM come Fedora, è possibile trovare il nome del pacchetto che fornisce un determinato comando rpm -qf /path/to/command. Come questo:

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

È quindi possibile scaricare l'RPM di origine con yumdownloader --source procps. (yumdownloader viene dal yum-utilspacchetto, se non lo hai già installato.) Una volta che hai src.rpm, puoi decomprimerlo con rpm -io con rpm2cpio.

In alternativa, in molti casi è possibile eseguire una query sul pacchetto RPM per l'URL del progetto, che può essere utile fare riferimento all'origine upstream:

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

E, bello, c'è il codice comodamente navigabile online. Se lo segui, in pratica tutto ciò che fa è leggere/proc/uptime e stamparlo graziosamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.