Di mana saya dapat menemukan kode sumber untuk `uptime`?

8

Saya sedang belajar Python. Sampai sekarang saya hanya melakukan coding Python dasar. Sehari yang lalu, saya memeriksa implementasi treeperintah python . Tiba-tiba saya berpikir untuk membuat klon Python uptime. Saya tidak memiliki petunjuk tentang bahasa apa itu diimplementasikan dan apa kompleksitas yang terlibat dalam kloning itu.

Tetapi saya tidak dapat menemukan kode sumbernya. Saya menggunakan Fedora 14. paket kernel-devel diinstal. Saya lakukan whereis uptimetetapi /usr/bin/uptimefile yang dihasilkan menunjukkan simbol aneh ketika dibuka menggunakan vim. Googling untuk kode sumbernya tidak dapat menghasilkan hasil yang diinginkan juga. Di mana saya dapat menemukan kode sumbernya?

Dharmit
sumber
1
Daripada (atau sebagai tambahan) membuka file dengan vim untuk melihat terbuat dari apa, coba file /usr/bin/uptime. Perintah file menggunakan serangkaian heuristik semi-magis untuk menebak isi file - dalam hal ini, biner format ELF yang dapat dieksekusi.
mattdm
Alat debugging yang saya suka adalah strace. Ini akan menampilkan semua syscalls yang dibuat oleh aplikasi Anda. Jika Anda menjalankannya strace uptimeakan menampilkan (setelah memuat) panggilan terbuka di / proc / uptime dan / proc / loadavg. Meskipun tidak menunjukkan segalanya, kadang-kadang ini merupakan awal yang baik untuk rekayasa balik
Rich Homolka

Jawaban:

8

Uptime adalah bagian dari paket 'procps', sumber upstream ada di http://procps.sourceforge.net/ (Bukan pengguna fedora, jadi tidak yakin di mana menemukan .src.rpm mereka).

Namun, untuk menjawab pertanyaan yang tidak Anda tanyakan; lihat di / proc / uptime Angka pertama adalah detik sejak boot. Anda harus dapat mengubahnya menjadi sesuatu yang dapat digunakan dengan cukup mudah :)

Shaun
sumber
Terima kasih. Punya kodenya. Saya melakukan checkout / proc / uptime sebelum memposting di sini. Itu adalah opsi terakhir yang akan saya gunakan.
Dharmit
1
Hanya melihat sumbernya, kode hanya membaca uptime dari / proc / uptime. Periksa ... / proc / sysinfo.c di sumber procps, untuk fungsi uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings
9

Secara umum, pada distribusi berbasis RPM seperti Fedora, Anda dapat menemukan nama paket yang memberikan perintah rpm -qf /path/to/command. Seperti ini:

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

Anda kemudian dapat mengunduh RPM sumber dengan yumdownloader --source procps. (yumdownloader berasal dari yum-utilspaket, jika Anda belum menginstalnya.) Setelah Anda memiliki src.rpm, Anda dapat membukanya dengan salah satu rpm -iatau dengan rpm2cpio.

Sebagai alternatif, dalam banyak kasus Anda dapat meminta paket RPM untuk URL proyek, yang mungkin membantu mengarahkan Anda ke sumber upstream:

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

Dan, keren, ada kode yang mudah dijelajahi secara online. Jika Anda mengikutinya, pada dasarnya semua yang dilakukan adalah membaca /proc/uptimedan mencetaknya dengan cantik.

mattdm
sumber