htop رو واقعاً بفهم: از لود اوریج تا setuid
خلاصهٔ کاملتر
نویسنده میگه مدتها دقیق نمیدونسته چیزهای تو htop یعنی چی — مثلاً فکر میکرده لود ۱.۰ روی یه ماشین دوهستهای یعنی CPU نصفهکاره. برای همین تصمیم گرفته همهچیزو سر دربیاره و مستند کنه. اولین بخش uptime هست که نشون میده سیستم چقدر بالا بوده و برنامهٔ uptime این عدد رو از یه فایلِ ویژه تو سیستمِ فایلیِ proc میخونه؛ عددِ خام برای اسکریپتها، خروجیِ مرتب برای آدم.
مهمترین بخش لود اوریجه. نویسنده تأکید میکنه این سه عدد درصد CPU نیستن؛ اونا تعداد پروسههاییان که یا رو CPU در حال اجران، یا منتظر نوبتان، یا تو حالتِ وقفهناپذیر منتظرِ دیسک و شبکهان. نکتهٔ ظریفش اینه که اینها میانگینِ سادهٔ دقیقهٔ آخر نیستن، بلکه «میانگینِ متحرکِ نمایی»ان؛ مثلاً عددِ یکدقیقهای حدود ۶۳٪ بارِ دقیقهٔ آخر رو داره و بقیهش از قبلتره.
چون رو یه ماشینِ تکهسته یه پروسهٔ CPU-bound لود رو به ۱.۰ میرسونه (یعنی CPU پُر)، رو ماشینِ دوهسته همون بار میشه ۵۰٪ و لودِ اشباع میشه ۲.۰. ولی چون پروسههای منتظرِ دیسک هم تو این عدد حساب میشن، نمیشه مستقیم از لود به مصرفِ CPU رسید — برای مصرفِ لحظهای CPU ابزارهایی مثل mpstat هستن.
بخش بعدی پروسههاست. نویسنده میگه htop بهجای Processes مینویسه Tasks، چون کرنلِ لینوکس داخلی به پروسهها task میگه. هر پروسه یه PID میگیره و همهٔ اطلاعاتش تو یه پوشهٔ اختصاصی داخلِ proc نگه داشته میشه — مثلِ فایلِ cmdline که فرمانِ اجرا رو داره (که جداکنندهش کاراکترِ تهیه)، یا لینکهای cwd و exe. ابزارهای htop و top و ps دقیقاً همین فایلها رو میخونن.
آخرش میرسه به کاربرها و درختِ پروسه: هر پروسه یه پدر داره (با fork و exec ساخته میشه) و این رابطهها یه درخت میسازن که با F5 دیده میشه. هر پروسه هم مالِ یه کاربره و برنامهٔ id نگاشتِ عدد به اسم رو از فایلهای کاربریِ سیستم (همون passwd و group) درمیاره. نویسنده در پایان بیتِ setuid رو توضیح میده: همون «s» تو مجوزِ برنامهٔ passwd که باعث میشه برنامه با دسترسیِ صاحبش (root) اجرا بشه و برای همین یه کاربرِ عادی میتونه رمزشو تو فایلِ حفاظتشدهٔ رمزها (shadow) عوض کنه.
نکات کلیدی:
- لود اوریج تعداد پروسههای در حال اجرا یا منتظره، نه درصد CPU
- این اعداد میانگینِ متحرکِ نمایی برای بازههای ۱، ۵ و ۱۵ دقیقهان
- htop به پروسهها Tasks میگه چون کرنل بهشون task میگه
- ابزارها اطلاعاتشونو از سیستمِ فایلیِ proc میخونن
- بیتِ setuid اجازه میده برنامه با دسترسیِ صاحبِ فایل اجرا بشه




