Tìm hiểu quản lý hệ thống
I. Một số file, câu lệnh liên quan đến phần cứng
File /proc/bus
/proc/bus là thư mục chứa thông tin về các giao tiếp trong hệ thống. Các thư mục con và các file trong /proc/bus có thể khác nhau dựa vào các thiết bị kết nối trên hệ thống.
lsusb
Câu lệnh lsusb giúp hiển thị thông tin về các USB đang chạy trên hệ thống và các thiết bị được kết nối với chúng.
Để chạy lệnh lsusb bạn có thể nhập lsusb từ chính màn hình dòng lệnh ( terminal)
$ lsusb
lsusb sẽ đưa ra cho bạn các drivers và thiết bị được kết nối trên hệ thống
Cách đọc kết quả, ví dụ
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- Bus 001: nghĩa là nơi thiết bị được gắn kết
- Device 001: nghĩa là thiết bị thứ nhất được gắn kết
- ID: Nghĩa là số ID của thiết bị
- Linux Foundation 2.0 root hub: Tên drivers
File /proc/interrupts
Ta có thể liệt kê danh sách gián đoạn bằng cách dùng lệnh cat đọc file /proc/interrupts
lscpu
Câu lệnh lspcu dùng để hiển thị thông tin về kiến trúc của CPU.
Cú pháp:
$ lscpu
lsblk
lsblk được dùng để hiển thị thông tin các thiết bị lưu trữ như ổ cứng, ổ flash(usb)
Cách kiểm tra distro, phiên bản Linux đang dùng
Ta có thể dùng câu lệnh cat /etc/*-release
để kiểm tra bản phân phối đang dùng
II. Process.
Chương trình là một loạt các hướng dẫn cho máy tính biết phải làm gì. Khi chúng ta chạy một chương trình, các lệnh đó được sao chép vào bộ nhớ và không gian được cấp phát cho các biến và các thứ khác cần thiết để quản lý việc thực hiện nó. Ví dụ chạy chương trình này được gọi là một tiến trình và đó là các tiến trình mà chúng tôi quản lý.
Một process(tiến trình) là một chương trình đang được thực thi, nó là trạng thái đang chạy của một chương trình.
Hệ điều hành quản lý các tiến trình dựa trên ID của tiến trình đó hay được gọi là pID. Mỗi tiến trình trong hệ thống có pID riêng. Bên cạnh đó hệ điều hành cũng quản lý tiến trình qua ID của tiến trình cha(PPID).
1.Các loại tiến trình
Có hai loại tiến trình chính trong linux:
- Foreground process (Tiến trình tương tác) - chúng được khởi tạo và kiểm soát bởi một terminal section. Lấy input từ người dùng và hiển thị output ra màn hình. Khi chạy tiến trình này, không thể truy cập vào command line để chạy cây lệnh khác.
- Background process (Tiến trình không tương tác) là tiến trình không kết nối với terminal. Không cần input từ người dùng. Khi chạy tiến trình này, nó không làm ảnh hưởng đến terminal nên có thể chạy các tiến trình khác.
2.Daemon là gì?
Daemon là một loại tiến trình background đặc biệt, nó mở khi hệ thống khởi động và chạy mãi như một dịch vụ, chúng không chết. Chúng chạy như các tác vụ hệ thống tuy nhiên vẫn có thể được kiểm soát thông qua các tiến trình init.
3. Init process
Init process là process cha của tất cả các process khác trong hệ thống. Nó là process được thực thi đầu tiên khi hệ thống Linux được boot lên, nó quản lý tất cả các process khác. Nó được khởi động bởi kernel nên nó không có tiến trình cha.
Tiến trình init luôn có PID là 1.
Kiểm tra PID của một tiến trình bằng lệnh: pidof
.
Kiểm tra PID của shell hiện tại: echo $$
Kiểm tra PPID của shell hiện tại: echo $PPID
4.Các trạng thái của một tiến trình.
- Running - Là một tiến trình đang chạy hoặc đang chờ để chạy(đợi để gán vào một cpu)
- Waiting là trạng thái mà một tiến trình đang chờ các sự kiện trong hệ thống sảy ra hoặc chờ các tài nguyên phần cứng.
- Stopped - trong trạng thái này, tiến trình bị dừng, thường là do nhận một signal(tin hiệu)
- Zombie - là một tiến trình chết, nó đã bị dừng nhung vẫn có giá trị trong bảng tiến trình.
5.Một số công cụ quản lý tiến trình.
-
ps
- hiển thị các tiến trình đang chạy. -
top
vàhtop
Công cụ dùng để xem và quản lý các tiến trình đang chạy theo thời gian thực.
lsof
: là công cụ liệt kê các tập tin đang được sử dụng và các tiến trình sử dụng chúng.6. Quản lý tiến trình trong Linux.
kill -l
để xem tất cả các signal.
Để gửi signal đến tiến trình sử dụng một số lệnh như kill
, pkill
, killall
,… Ví dụ kill [signal] <PID>
Một số signal thông dụng:
- SIGHUP 1 - gửi đến tiến trình khi terminal điều khiển nó bị đóng.
- SIGINT 2 gửi đến tiến trình khi người dùng gián đoạn nó với Ctrl + C
- SIGQUIT 3 gửi đến tiến trình khi người dùng gửi tin hiệu thoát Ctrl + D
- SIGKILL 9 tín hiệu này ngay lập tức đóng (kill) một tiến trình và tiến trình không có thời gian để chuẩn bị.
- SIGTERM 15 gửi tín hiệu đóng đến tiến trình( cho tiến trình thời gian chuẩn bị và dọn dẹp, nó là tín hiệu mặc định của lệnh kill)
- SIGTSTP 20 gửi tín hiệu khi terminal điều khiển nó yêu cầu nó dừng lại (Ctrl + Z).
Để kill một tiến trình bằng tên, sử dụng pkill hoặc killall.
7.Đọc thông tin hệ thống trong top
.
-
load average: x, x, x là tập hợp gồm 3 số lần lượt là số cpu trung bình mà hệ thống sử dụng trong 1, 5 và 15 phút trước(đây là các khoảng thời gian phổ biến, có thể chỉnh sửa). Ví dụ
load average: 6,0, 3,11, 2
, có nghĩa là trong 1 phút gần đây trung bình 6 cpu được sử dụng, 5 phút trước đến hệ tại trung bình có 3,11 cpu được sử dụng, và 15 phút gần đây trung bình có 2 cpu được sử dụng. Nhìn vào chỉ số load average trong ví dụ này có thể thấy hệ thống gần đây đang tăng tải. - Thông tin về %CPU:
- us: %CPU của các process người dùng sử dụng.
- sy: %CPU của các process hệ thống sử dụng.
- ni : %CPU của các procces ưu tiên thấp đang sử dụng
- id : %CPU đang rảnh
- wa : %CPU đang ở hàng đợi ưu tiên chờ các tiến trình I/O khác xử lý xong
- hi : %CPU xử lý gián đoạn phần cứng
- si : %CPU xử lý gián đoạn phần mềm
- st : %CPU của các VM đang sử dụng
- Thông tin từ các tiến trình đang hoạt động có các cột
- PID – ID của tiến trình
- USER – người dùng sở hữu tiến trình.
- PR – Giá trị priority của tiến trình
- NI – giá trị “NICE” của tiến trình
- VIRT – Ram ảo được sử dụng bởi tiến trình
- RES – Ram vật lý được sử dụng bởi tiến trình
- S – Hiển thị trạng thái của tiến trình: S=sleep R=running Z=zombie (S)
- %CPU – Phần trăm cpu được sử dụng bởi tiến trình
- %MEM – Phần trăm Ram được sử dụng
- TIME+ – tổng thời gian chạy của tiến trình
- COMMAND – tên của tiến trình.