¿Dónde puedo encontrar el código fuente de `uptime`?

8

Estoy aprendiendo Python. Hasta ahora solo he estado haciendo codificación básica de Python. Hace un día, verifiqué la implementación del treecomando en Python . De repente pensé en crear un clon de Python uptime. No tengo ni idea de en qué idioma se implementa y cuál sería la complejidad que implica clonarlo.

Pero no pude encontrar su código fuente. Estoy usando Fedora 14. El paquete kernel-devel está instalado. Lo hice whereis uptimepero el /usr/bin/uptimearchivo resultante muestra símbolos extraños cuando se abre con vim. Buscar en Google su código fuente tampoco podría producir los resultados deseados. ¿Dónde puedo encontrar su código fuente?

Dharmit
fuente
1
En lugar de (o además de) abrir archivos con vim para ver de qué están hechos, intente file /usr/bin/uptime. El comando de archivo utiliza una serie de heurísticas semimágicas para adivinar el contenido del archivo, en este caso, un ejecutable binario en formato ELF.
mattdm
Una herramienta de depuración que me gusta es strace. Mostrará todas las llamadas al sistema que realiza su aplicación. Si lo ejecuta strace uptime, mostraría (después de cargar) las llamadas abiertas en / proc / uptime y / proc / loadavg. Aunque no muestra todo, a veces es un comienzo decente en ingeniería inversa
Rich Homolka

Respuestas:

8

El tiempo de actividad es parte del paquete 'procps', la fuente ascendente está en http://procps.sourceforge.net/ (No es un usuario de fedora, así que no estoy seguro de dónde encontrar su .src.rpm).

Sin embargo, para responder la pregunta que no hizo; eche un vistazo en / proc / uptime El primer número son segundos desde el arranque. Deberías poder convertir eso en algo utilizable con bastante facilidad :)

Shaun
fuente
Gracias. Tengo el código. Hice el pago / proc / uptime antes de publicar aquí. Esa fue la última opción que iba a usar.
Dharmit
1
Acabo de mirar la fuente, el código solo lee el tiempo de actividad desde / proc / uptime. Verifique ... / proc / sysinfo.c en la fuente procps, para la función uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings
9

En general, en una distribución basada en RPM como Fedora, puede encontrar el nombre del paquete que proporciona un comando determinado rpm -qf /path/to/command. Me gusta esto:

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

Luego puede descargar el RPM de origen con yumdownloader --source procps. (yumdownloader viene del yum-utilspaquete, si aún no lo tiene instalado). Una vez que tenga el src.rpm, puede descomprimirlo con rpm -io con rpm2cpio.

Alternativamente, en muchos casos puede consultar el paquete RPM para la URL del proyecto, lo que puede ayudarlo a encontrar la fuente principal:

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

Y, genial, está el código convenientemente navegable en línea. Si lo sigue, básicamente todo lo que hace es leerlo /proc/uptimee imprimirlo con precisión.

mattdm
fuente