Giải ngố Linux – Phần 4: Quản lý process, thu thập thông tin hệ thống, log và phần cứng

Tiếp theo nội dung Phần 3 – Tìm kiếm, thao tác với file và quản lý quyền với Linux Command Line, kỳ này tôi tôi sẽ chốt hạ các đòn cơ bản của Linux Command Line. Nội dung tập trung trong kỳ này sẽ bao gồm phần:

  • Quản lý 2 dạng foregroundbackground process (tiến trình chạy bình thường và tiến trình chạy ngầm ) ;
  • Thu thập thông tin hệ thống và Log;
  • Xác định thông tin phần cứng.

#1 Quản lý process (tiến trình)

#1.1 Foreground process

Foreground process là tiến trình chạy “không ngầm” – nghĩa là nó sẽ phọt thông tin ra cái shell hiện hành để bạn biết nó đang làm gì. Loại này cung cấp thông tin rõ ràng nhưng có điểm dở là nó chiếm luôn cái shell hiện hành nên bạn chỉ có nước ngồi ngoáy mũi xem nó thể hiện hoặc mở shell khác để làm tiếp thôi. Quản lý foreground process thì có nhiều vấn đề cần nói tuy nhiên có 2 chiêu cơ bản để “tìm và diệt” chắc chắn bạn cần phải nắm.

ps

  • Mục đích: liệt kê các process đang chạy với PID tương ứng
  • Cú pháp: ps aux
ps command
ps command

kill

  • Mục đích: giết mấy cái process (trong phạm vi quản lý của bạn) mà bạn thấy ngứa mắt
  • Cú pháp: kill pid_number
kill command
kill command

Lưu ý:

  • pid_number có thể lấy từ thằng ps;
  • Trước khi kill bạn phải chắc chắn là bạn ra đòn chính xác, đừng kill nhầm system process là bốc sh*t đấy;
  • Ngoài dạng kill (forced kill – cưỡng chế) còn có loại nhẹ nhàng tình cảm hơn là term (terminate gracefully – tắt nhẹ nhàng, tinh tế, không chà đạp đối tác).

#1.2 Background process

Trong quá trình quản lý process bạn cần lưu ý Command Interpreter cũng có thể chạy process ở dạng nền bằng cách thêm dấu “&” (tiếng Mẽo là ampersand). Với cách này, process bị đẩy xuống chạy ngầm (background) nên bạn sẽ có thể tiếp tục kiểm soát shell để tung tóe với các command khác mà không cần mở thêm shell mới.

Với đám process sống trong “thế giới ngầm” này, bạn sẽ cần đến chiêu:

jobs

  • Mục đích: liệt kê các process đang chạy background (ngầm) với job_number tương ứng
  • Cú pháp: jobs
job command
job command

Sau khi đã định vị job_number của process cần tìm, bạn có thể kéo nó lên foreground với chiêu:

fg – foreground

  • Mục đích: phục hồi job lên foreground (tức là chỗ cái shell hiện hành của bạn đấy)
  • Cú pháp: fg %job_number

Sau khi thành công trong việc lôi đầu con hàng đang lẩn trốn trong “thế giới ngầm” lên “mặt đất”, bạn có thể dùng combo Ctrl + Z để dừng process và phục hồi quyền kiểm soát shell. Trường hợp đột nhiên bạn ngứa bẹn đổi ý muốn restart lại process và đẩy vô background thì bạn có thể dùng chiêu:

bg – background

  • Mục đích: đưa job xuống background
  • Cú pháp: bg %job_number
fg và bg command
fg và bg command

Lưu ý:

  • Command yes được dùng để xuất liên tục một dòng string giống nhau. Nếu không chỉ định gì khác thì mặc định thì string là “y”. Thằng này hữu ích trong tình huống bạn muốn mặc định trả lời “yes” cho tất cả câu hỏi từ hệ thống (thường gặp trong quá trình cài đặt). Hiện giờ có thể thay thế bằng option -f (force);
  • /dev/null là dạng file ảo đặc biệt trong Linux hay được dùng để chứa dữ liệu rác mà bạn không muốn hiển thị hoặc xử lý.

#2 Thu thập thông tin hệ thống và log

#2.1 Thu thập thông tin hệ thống

Đối với thông tin hệ thống, bạn có 4 chiên liên quan đến memory, disk, user và kernel cần nắm như sau:

free

  • Mục đích: thể hiện thông tin về memory (bộ nhớ)
  • Cú pháp: free
free command
free command

Lưu ý:

  • Option -h (human readable) sẽ thể hiện dung lượng theo dạng phổ biến như Mebibyte hay Gibibyte (nếu muốn cụ thể hơn thì dùng option -m hoặc -g)
  • Mebibyte (MiB) = 1024 * 1024 = 1,048,576 bytes
  • Megabyte (MB) thường hay được biết đến với giá trị 1,024,000 bytes nhưng thực tế trước khi có khái niệm chuẩn MiB người ta vẫn thường xem MB có giá trị 1,024,000 hoặc 1,048,576 bytes. Nói dông dài thế thôi chứ trong ngữ cảnh thông thường bạn nghĩ MB là MiB cũng không có tác hại gì lớn lắm. Nếu vẫn muốn biết thêm thì bạn bơi vào đây:

Mebibyte – Simple English Wikipedia, the free encyclopedia

Megabyte – Simple English Wikipedia, the free encyclopedia

df – disk free

  • Mục đích: thể hiện thông tin về dung lượng đĩa còn trống trên hệ thống
  • Cú pháp: df

id

  • Mục đích: thể hiện thông tin về user hiện hành và group tương ứng
  • Cú pháp: id

uname

  • Mục đích: thể hiện thông tin về kernel name, hostname, kernel release, kernel vesion, machine type (architecture)
  • Cú pháp: uname -a

Lưu ý: Kernel là gì tôi có đề cập ở nội dung Phần 1: Linux là gì?

df, id và uname command
df, id và uname command

#2.2 Log

Đám command ở Mục 2.1 là kiểu đập phát ăn ngay, khác kiểu ghi nhận lại rồi ăn dần dần như log. Để truy cập log coi có vụ án gì gay cấn diễn ra trên hệ thống không bạn có thể dùng phương án nhanh gọn với command dmesg (bạn có thể cần dùng thêm sudo nếu user không có đủ quyền chạy command). Trường hợp khoái chơi dạng bài bản bạn có thể dùng Systemd journal.

Command journalctl (Systemd journal – kiểu như nhật ký của deamon systemd) lưu trữ log ở nhiều vị trí như:

  • Stdout/stderr (standard output/ standard error);
  • Syslog message;
  • Kernal log.

Bạn có thể réo nó lên với command journalctl để đổ hết tất cả log hiện có theo trình tự thời gian. Nếu thích, bạn có thể dùng thêm các option liên quan:

  • option -r nó sẽ đảo thứ tự (reverse) để bạn có thể xem đám thông tin mới trước;
  • option -f sẽ in new log entry liên tục mỗi khi ghi đám này vô database;
  • option -u giới hạn số lượng message bằng cách chỉ định dịch vụ cụ thể bạn đang quan tâm (ví dụ với ssh bạn sẽ dùng command journalctl -u ssh.service).
journalctl command
journalctl command

Lưu ý: Stdoutstderr tương ứng với standard outputstandard error). Ngoài ra còn có thằng stdinstandard input và đây là bộ 3 nguyên tử của input/output (I/O) connection. Bạn có thể xem thêm ở Standard streams – Wikipedia

#3 Xác định thông tin phần cứng

Như đề cập ở Phần 2: Linux Filesystem và các đòn cơ bản để duyệt và quản lý file với Command Line, kernel xuất thông tin về các phần cứng đã nhận diện thông qua /proc//sys/ virtual file system. Và ứng dụng thường sẽ truy cập đến các thiết bị thông qua các file tạo tại vị trí /dev/, ví dụ như:

  • /dev/sda: đối với đĩa;
  • /dev/sda1: đối với phân vùng;
  • /dev/input/mouse0: đối với chuột;
  • /dev/input/event0: đối với bàn phím;
  • /dev/snd/*: đối với card âm thanh;
  • /dev/ttys*: đối với serial port.

Ngoài ra, bạn cũng có thể sử dụng tool để xem chi tiết với:

  • Lspci (thuộc pciutils package): liệt kê PCI device
  • Lsusb (thuộc usbutils package): liệt kê USB device
  • Lspcmcia (thuộc pcmciautils package): liệt kê PCMCIA card
  • Lsdev (thuộc procinfo package): liệt kê thông tài nguyên các device sử dụng
lspci command
lspci command

Lưu ý:

  • Nếu muốn nó phọt ra nhiều thông tin bạn có thể sử dụng option -v;
  • Nếu bạn thích giải pháp tổng hợp đám rối rắm trên thì có thể dùng command lshw để xuất kết quả theo cấu trúc phân cấp;
  • Tùy thuộc distro, đám Lspci, Lsusb, Lsdev, Lspcmcia, Lshw có thể đã có sẵn. Trường hợp chưa có thì bạn cài thêm (ví dụ thằng Lspcmcia sẽ cài với apt install pcmciautils).

Phù! Đến đây coi như tạm xong mấy đường cơ bản với Linux Command Line rồi đấy. Nếu bạn không nhớ (hoặc không nắm rõ) thì cũng chả sao. Như tôi nói trong mấy kỳ trước, mục tiêu chính là để bạn biết đại khái Linux Command Line có các chức năng cơ bản như thế. Khi nào đụng trận thực tế bạn quay lại xem kỹ sẽ rõ ràng hơn chứ cũng không cần vội vàng làm gì.

3 thoughts on “Giải ngố Linux – Phần 4: Quản lý process, thu thập thông tin hệ thống, log và phần cứng”

    1. Một lần nữa cám ơn bạn đã góp ý. Tôi đã cập nhật tương ứng. Trước giờ tôi tưởng không có ai rảnh mà đọc kỹ từng dòng tôi viết chứ.

Leave a Reply

Your email address will not be published. Required fields are marked *