Где я могу найти исходный код для `uptime`?

8

Я учу Python. До сих пор я занимался только базовым программированием на Python. День назад я проверил реализацию treeкоманды на python . Внезапно я подумал о создании клона Python для uptime. Я не имею ни малейшего представления о том, на каком языке он реализован, и какова будет сложность его клонирования.

Но я не смог найти его исходный код. Я использую Fedora 14. Установлен пакет kernel-devel. Я сделал, whereis uptimeно полученный /usr/bin/uptimeфайл показывает странные символы при открытии с помощью vim. Поиск в исходном коде также не может дать желаемых результатов. Где я могу найти его исходный код?

Dharmit
источник
1
Вместо того, чтобы (или в дополнение к) открывать файлы с помощью vim, чтобы увидеть, из чего они сделаны, попробуйте file /usr/bin/uptime. Команда file использует серию полумагических эвристик, чтобы угадать содержимое файла - в данном случае двоичный исполняемый файл в формате ELF.
Mattdm
Мне нравится инструмент отладки strace. Он покажет все системные вызовы вашего приложения. Если вы запустите, strace uptimeон покажет (после загрузки) открытые вызовы в / proc / uptime и / proc / loadavg. Хотя это и не все показывает, иногда это неплохое начало для реверс-инжиниринга
Rich Homolka

Ответы:

8

Uptime является частью пакета 'procps', исходный источник находится по адресу http://procps.sourceforge.net/ (не пользователь fedora, поэтому не уверен, где найти его .src.rpm).

Однако, чтобы ответить на вопрос, который вы не задавали; взгляните в / proc / uptime. Первое число - это секунды с момента загрузки. Вы должны быть в состоянии превратить это в нечто довольно простое в использовании :)

Shaun
источник
Спасибо. Получил код. Я сделал checkout / proc / uptime перед публикацией здесь. Это был последний вариант, который я собирался использовать.
Дхармит
1
Посмотрев на исходный код, код просто читает время безотказной работы из / proc / uptime. Проверьте ... / proc / sysinfo.c в источнике procps на наличие функции uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings,
9

В общем случае в дистрибутиве на основе RPM, таком как Fedora, вы можете найти имя пакета, который предоставляет данную команду rpm -qf /path/to/command. Нравится:

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

Затем вы можете загрузить исходный RPM с помощью yumdownloader --source procps. (yumdownloader поставляется из yum-utilsпакета, если он у вас еще не установлен.) Получив src.rpm, вы можете распаковать его либо с, либо rpm -iс помощью rpm2cpio.

Кроме того, во многих случаях вы можете запросить RPM-пакет для URL проекта, который может помочь вам указать исходный источник:

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

И, круто, есть код, который удобно просматривать в Интернете. Если вы выполните его, в основном все, что он делает, это читает /proc/uptimeи красиво печатает.

mattdm
источник