Onde posso encontrar o código fonte do `uptime '?

8

Eu estou aprendendo Python. Até agora, eu tenho feito apenas a codificação básica do Python. Um dia atrás, verifiquei a implementação do treecomando python . De repente, pensei em criar um clone para o Python uptime. Não tenho idéia de qual idioma é implementado e qual seria a complexidade envolvida na clonagem.

Mas não consegui encontrar o código fonte. Estou usando o Fedora 14. O pacote kernel-devel está instalado. Eu fiz, whereis uptimemas o /usr/bin/uptimearquivo resultante mostra símbolos estranhos quando aberto usando o vim. Pesquisando por seu código-fonte também não conseguiu os resultados desejados. Onde posso encontrar o código fonte?

Dharmit
fonte
1
Em vez de (ou além de) abrir arquivos com o vim para ver do que eles são feitos, tente file /usr/bin/uptime. O comando file usa uma série de heurísticas semi-mágicas para adivinhar o conteúdo do arquivo - nesse caso, um executável binário no formato ELF.
mattdm
Uma ferramenta de depuração que eu gosto é strace. Ele mostrará todos os syscalls que seu aplicativo faz. Se você executar, strace uptimeele mostrará (após o carregamento) as chamadas abertas em / proc / uptime e / proc / loadavg. Embora ele não mostra tudo, às vezes é um começo decente em engenharia reversa
rico Homolka

Respostas:

8

O Uptime faz parte do pacote 'procps', a fonte upstream está em http://procps.sourceforge.net/ (Não é um usuário do fedora, portanto, não sabe onde encontrar o .src.rpm).

Para responder à pergunta que você não fez, no entanto; dê uma olhada em / proc / uptime O primeiro número é segundos após a inicialização. Você deve conseguir transformá-lo em algo utilizável com bastante facilidade :)

Shaun
fonte
Obrigado. Peguei o código. Eu fiz checkout / proc / uptime antes de postar aqui. Essa foi a última opção que eu usaria.
Dharmit
1
Apenas olhei a fonte, o código apenas lê o tempo de atividade em / proc / uptime. Verifique o ... / proc / sysinfo.c na fonte procps, para a função de uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings
9

Em geral, em uma distribuição baseada em RPM como o Fedora, você pode encontrar o nome do pacote que fornece um determinado comando rpm -qf /path/to/command. Como isso:

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

Você pode fazer o download do RPM de origem com yumdownloader --source procps. (o yumdownloader vem do yum-utilspacote, se você ainda não o tiver instalado.) Depois de instalar o src.rpm, você pode descompactá-lo com um rpm -iou com o rpm2cpio.

Como alternativa, em muitos casos, você pode consultar o pacote RPM para o URL do projeto, o que pode ser útil para apontar para a fonte upstream:

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

E, legal, existe o código que pode ser navegado on-line convenientemente. Se você segui-lo, basicamente tudo o que faz é ler /proc/uptimee imprimi-lo lindamente.

mattdm
fonte