Tôi có thể tìm mã nguồn cho `uptime` ở đâu?


8

Tôi đang học Python. Cho đến bây giờ tôi chỉ làm mã hóa Python cơ bản. Một ngày trước, tôi đã kiểm tra python thực hiện treelệnh. Đột nhiên tôi nghĩ đến việc tạo một bản sao Python cho uptime. Tôi không có bất kỳ manh mối nào về ngôn ngữ mà nó được thực hiện và sự phức tạp liên quan đến việc nhân bản nó.

Nhưng tôi không thể tìm thấy mã nguồn của nó. Tôi đang sử dụng gói Fedora 14. kernel-devel được cài đặt. Tôi đã làm whereis uptimenhưng /usr/bin/uptimetập tin kết quả cho thấy các biểu tượng kỳ lạ khi mở bằng vim. Googling cho mã nguồn của nó cũng không thể mang lại kết quả mong muốn. Tôi có thể tìm mã nguồn của nó ở đâu?


1
Thay vì (hoặc ngoài) mở các tệp bằng vim để xem chúng được làm bằng gì, hãy thử file /usr/bin/uptime. Lệnh tệp sử dụng một loạt các phép thuật bán ma thuật để đoán nội dung của tệp - trong trường hợp này là tệp thực thi nhị phân định dạng ELF.
mattdm

Một công cụ sửa lỗi tôi thích là strace. Nó sẽ hiển thị tất cả các tòa nhà mà ứng dụng của bạn tạo ra. Nếu bạn chạy, strace uptimenó sẽ hiển thị (sau khi tải) mở các cuộc gọi trên / Proc / uptime và / Proc / loadavg. Mặc dù nó không hiển thị tất cả mọi thứ, đôi khi nó là một khởi đầu tốt cho kỹ thuật đảo ngược
Rich Homolka

Câu trả lời:


8

Thời gian hoạt động là một phần của gói 'Procps', nguồn ngược dòng có tại http://procps.sourceforge.net/ (Không phải là người dùng fedora, vì vậy không chắc chắn tìm thấy .src.rpm của họ ở đâu).

Tuy nhiên, để trả lời câu hỏi bạn không hỏi; hãy xem trong / Proc / uptime Số đầu tiên là giây kể từ khi khởi động. Bạn sẽ có thể biến nó thành một thứ có thể sử dụng khá dễ dàng :)


Cảm ơn. Có mã. Tôi đã kiểm tra / Proc / uptime trước khi đăng ở đây. Đó là lựa chọn cuối cùng tôi sẽ sử dụng.
Dharmit

1
Chỉ cần nhìn vào nguồn, mã chỉ đọc thời gian hoạt động từ / Proc / thời gian hoạt động. Kiểm tra ... / Proc / sysinfo.c trong nguồn Procps, để biết chức năng uptime (): gitorious.org/procps/procps/blobs/master/proc/sysinfo.c#line75
jsbillings 15/03/2016

9

Nói chung, trên một bản phân phối dựa trên RPM như Fedora, bạn có thể tìm thấy tên của gói cung cấp một lệnh đã cho rpm -qf /path/to/command. Như thế này:

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

Sau đó, bạn có thể tải xuống RPM nguồn với yumdownloader --source procps. (yumdoader đến từ yum-utilsgói, nếu bạn chưa cài đặt nó.) Khi bạn đã có src.rpm, bạn có thể giải nén nó bằng một trong hai rpm -ihoặc với rpm2cpio.

Cách khác, trong nhiều trường hợp, bạn có thể truy vấn gói RPM cho URL dự án, điều này có thể giúp bạn chỉ ra nguồn ngược dòng một cách hữu ích:

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

Và, tuyệt, có mã thuận tiện duyệt trực tuyến. Nếu bạn làm theo nó, về cơ bản, tất cả những gì nó làm là đọc /proc/uptimevà in nó một cách đẹp mắt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.