Я учу Python. До сих пор я занимался только базовым программированием на Python. День назад я проверил реализацию tree
команды на python . Внезапно я подумал о создании клона Python для uptime
. Я не имею ни малейшего представления о том, на каком языке он реализован, и какова будет сложность его клонирования.
Но я не смог найти его исходный код. Я использую Fedora 14. Установлен пакет kernel-devel. Я сделал, whereis uptime
но полученный /usr/bin/uptime
файл показывает странные символы при открытии с помощью vim. Поиск в исходном коде также не может дать желаемых результатов. Где я могу найти его исходный код?
file /usr/bin/uptime
. Команда file использует серию полумагических эвристик, чтобы угадать содержимое файла - в данном случае двоичный исполняемый файл в формате ELF.strace
. Он покажет все системные вызовы вашего приложения. Если вы запустите,strace uptime
он покажет (после загрузки) открытые вызовы в / proc / uptime и / proc / loadavg. Хотя это и не все показывает, иногда это неплохое начало для реверс-инжинирингаОтветы:
Uptime является частью пакета 'procps', исходный источник находится по адресу http://procps.sourceforge.net/ (не пользователь fedora, поэтому не уверен, где найти его .src.rpm).
Однако, чтобы ответить на вопрос, который вы не задавали; взгляните в / proc / uptime. Первое число - это секунды с момента загрузки. Вы должны быть в состоянии превратить это в нечто довольно простое в использовании :)
источник
В общем случае в дистрибутиве на основе RPM, таком как Fedora, вы можете найти имя пакета, который предоставляет данную команду
rpm -qf /path/to/command
. Нравится:Затем вы можете загрузить исходный RPM с помощью
yumdownloader --source procps
. (yumdownloader поставляется изyum-utils
пакета, если он у вас еще не установлен.) Получив src.rpm, вы можете распаковать его либо с, либоrpm -i
с помощьюrpm2cpio
.Кроме того, во многих случаях вы можете запросить RPM-пакет для URL проекта, который может помочь вам указать исходный источник:
И, круто, есть код, который удобно просматривать в Интернете. Если вы выполните его, в основном все, что он делает, это читает
/proc/uptime
и красиво печатает.источник