Làm chủ /proc và /sys: ‘Nội soi’ Linux không cần công cụ bên thứ ba

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Cánh cửa hậu trường: Tại sao SysAdmin cần biết /proc và /sys?

Hồi mới làm SysAdmin, mình từng thắc mắc: những lệnh như top, free -m hay lscpu lấy dữ liệu từ đâu mà nhanh thế? Chúng không hề quét ổ cứng. Sau này đào sâu vào nhân (Kernel), mình mới biết Linux có một cơ chế cực hay: Virtual Filesystems (Hệ thống tập tin ảo).

Trong Linux, triết lý “Everything is a file” được thể hiện rõ nhất qua hai thư mục /proc/sys. Chúng không chiếm dung lượng trên SSD hay HDD của bạn. Thực tế, chúng tồn tại trên RAM và do Kernel tạo ra để làm cầu nối giao tiếp với người dùng.

Mình đang quản lý một cụm server Ubuntu 22.04 với RAM 4GB khiêm tốn. Khi hệ thống quá tải, việc truy cập trực tiếp vào các file này nhanh hơn nhiều so với việc chờ cài đặt các công cụ giám sát nặng nề. Đây chính là kỹ năng “cứu cánh” khi server gặp sự cố nghẽn mạng hoặc treo I/O.

Kiểm tra nhanh: Hệ thống đã sẵn sàng chưa?

Vì được tích hợp sẵn vào nhân, bạn không cần chạy apt install cho bất kỳ thứ gì. Ngay khi Linux khởi động, Kernel sẽ tự động mount chúng vào hệ thống.

Hãy thử gõ lệnh mount để xác nhận:

mount | grep -E "proc|sysfs"

Bạn sẽ thấy kết quả tương tự như sau:

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

Điểm thú vị: Nếu dùng ls -l, bạn sẽ thấy các file này có kích thước 0 byte. Tuy nhiên, khi dùng cat, một khối lượng dữ liệu khổng lồ sẽ hiện ra. Đó là vì Kernel chỉ sinh dữ liệu ngay tại thời điểm bạn yêu cầu đọc file.

Thực hành: Khám phá sức mạnh bên trong

1. Thư mục /proc – “Sổ hộ khẩu” của các tiến trình

Thư mục /proc (viết tắt của process) lưu trữ thông tin về các tiến trình đang chạy và tài nguyên hệ thống tổng quát.

Kiểm tra phần cứng siêu tốc:
Thay vì nhớ các flag phức tạp của lệnh khác, mình thường đọc trực tiếp file gốc:

# Xem chi tiết model, cache và số core CPU
cat /proc/cpuinfo

# Xem trạng thái RAM (chi tiết hơn lệnh free, đặc biệt là phần Dirty pages)
cat /proc/meminfo

“Soi” một tiến trình cụ thể:
Mỗi ứng dụng khi chạy sẽ được cấp một thư mục riêng theo số PID. Chẳng hạn, để biết file thực thi của tiến trình PID 1234 nằm ở đâu, bạn chỉ cần:

ls -l /proc/1234/exe

Muốn xem các biến môi trường (Environment Variables) mà tiến trình đó đang dùng? Hãy thử:

strings /proc/1234/environ

Can thiệp Kernel Runtime:
Thư mục /proc/sys cho phép bạn thay đổi hành vi hệ thống mà không cần reboot. Ví dụ, để bật IP Forwarding cho server làm Router:

echo 1 > /proc/sys/net/ipv4/ip_forward

2. Thư mục /sys – Bản đồ chi tiết về phần cứng

Nếu /proc có phần lộn xộn do yếu tố lịch sử, thì /sys (sysfs) được thiết kế ngăn nắp hơn. Nó phân loại rõ ràng theo bus, driver và thiết bị.

Kiểm tra kết nối vật lý:
Để biết card mạng eth0 có đang cắm dây hay không, bạn không cần nhìn đèn LED trên server:

cat /sys/class/net/eth0/carrier
# Kết quả 1 là đang kết nối, 0 là mất tín hiệu.

Mẹo cho Laptop Linux:
Nếu phím chức năng bị lỗi, bạn vẫn có thể chỉnh độ sáng màn hình bằng cách ghi giá trị trực tiếp vào driver:

echo 400 > /sys/class/backlight/intel_backlight/brightness

Tối ưu hóa: Tự chế công cụ giám sát “hàng thửa”

Thay vì cài các Agent nặng nề, mình thường dùng shell script để đọc dữ liệu từ /proc. Cách này cực kỳ nhẹ và an toàn cho các hệ thống cũ.

Dưới đây là đoạn script theo dõi Load Average (trung bình tải trong 1, 5, 15 phút) và RAM trống:

#!/bin/bash
while true; do
    load=$(cat /proc/loadavg | awk '{print $1, $2, $3}')
    mem_free=$(grep MemFree /proc/meminfo | awk '{print $2 " " $3}')
    echo "[$(date +%T)] Tải hệ thống: $load | RAM trống: $mem_free"
    sleep 5
done

Kinh nghiệm thực tế: Khi server bị treo I/O (Disk Wait cao), hãy kiểm tra /proc/diskstats. Các con số ở đây trông khá khô khan. Tuy nhiên, lệnh iostat thực chất cũng chỉ lấy dữ liệu từ đây rồi format lại cho dễ nhìn mà thôi.

Đặc biệt, nếu SSH bị chặn do cấu hình sai nhưng bạn vẫn còn quyền truy cập console, hãy dùng Magic SysRq Key qua /proc/sysrq-trigger. Cách này giúp reboot server an toàn, tránh hỏng hệ thống tập tin thay vì rút điện đột ngột:

# Gửi tín hiệu reboot khẩn cấp nhưng an toàn
echo b > /proc/sysrq-trigger

Hiểu rõ /proc/sys giúp bạn biến Linux từ một “hộp đen” bí ẩn thành một hệ thống minh bạch. Mọi thông số đều nằm trong tầm tay bạn. Nếu muốn trở thành một DevOps Engineer thực thụ, hãy dành thời gian “vọc” hai thư mục này. Bạn sẽ học được nhiều điều hơn bất kỳ cuốn sách lý thuyết nào.

Share: