dmesg Linux là lệnh được sử dụng để hiển thị các thông điệp mà kernel ghi vào bộ đệm vòng (ring buffer). Trong bài viết dưới đây, mình sẽ hướng dẫn bạn chi tiết cách sử dụng lệnh dmesg để xác định các sự cố khởi động, kiểm tra việc nhận diện thiết bị mới và lọc thông tin kernel log một cách hiệu quả.
Những điểm chính
- Khái niệm lệnh dmesg: Hiểu rõ bản chất công cụ hiển thị thông báo từ bộ đệm vòng của kernel giúp bạn nắm bắt tình trạng vận hành của nhân hệ thống.
- Chức năng chính: Nắm vững vai trò của dmesg trong việc kiểm soát quá trình khởi động, giám sát kết nối phần cứng và phát hiện lỗi driver kịp thời.
- Hướng dẫn sử dụng chi tiết: Thành thạo các kỹ thuật xem log, lọc thông tin theo từ khóa), phân loại mức độ ưu tiên và định dạng thời gian dễ đọc.
- Xử lý lỗi phổ biến: Trang bị kỹ năng khắc phục sự cố không nhận diện thiết bị ngoại vi và xử lý các lỗi về quyền hạn khi can thiệp vào bộ đệm.
- Lưu ý khi vận hành: Nắm được các quy tắc về đặc quyền truy cập và giới hạn dung lượng bộ đệm để đảm bảo không bỏ sót các dữ liệu sự cố quan trọng.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến lệnh dmesg.
Lệnh dmesg là gì?
Lệnh dmesg (viết tắt của Display Message) là một công cụ dòng lệnh thiết yếu trong hệ thống Linux, được sử dụng để hiển thị các bản ghi được ghi lại trong bộ đệm Ring Buffer của kernel. Các bản ghi này cung cấp thông tin quan trọng về các sự kiện khởi động hệ thống, quá trình phát hiện phần cứng, cấu hình driver và các lỗi hệ thống phát sinh.

Chức năng của lệnh dmesg
Các chức năng chính của lệnh dmesg là:
- Kiểm soát quá trình khởi động hệ thống: Lệnh dmesg trích xuất toàn bộ bản ghi điệp từ lúc nhân hệ thống bắt đầu nạp, giúp phát hiện các lỗi nạp driver hoặc các linh kiện phần cứng không tương thích ngay từ giai đoạn đầu.
- Giám sát kết nối phần cứng thời gian thực: dmesg ghi nhận và hiển thị các sự kiện khi thiết bị ngoại vi được kết nối hoặc ngắt kết nối, cung cấp thông tin chi tiết về tên thiết bị và cấu hình được nhận diện.
- Xác định lỗi nhân hệ thống: dmesg truy vết các sự cố nghiêm trọng như lỗi bộ nhớ, lỗi trình điều khiển thiết bị hoặc các cảnh báo từ hệ thống quản lý tài nguyên.
- Kiểm tra trạng thái tài nguyên phần cứng: Bạn sẽ được cung cấp thông số chi tiết về CPU, dung lượng RAM khả dụng, các điểm gắn kết ổ đĩa và trạng thái của các cổng giao tiếp.
- Phân tích nhật ký tường lửa: Lệnh dmesg sẽ hiển thị các gói tin bị chặn hoặc các cảnh báo bảo mật nếu hệ thống tường lửa được cấu hình để ghi log vào kernel.

Cú pháp và các tùy chọn dmesg cơ bản
Cú pháp cơ bản của lệnh dmesg là:
dmesg [OPTIONS]Trong đó:
- dmesg: Tên lệnh, dùng để hiển thị các bản ghi trong kernel ring buffer.
- [OPTIONS]: Các tùy chọn điều khiển cách hiển thị/lọc log.
Dưới đây là bảng các tùy chọn phổ biến của dmesg:
| Tùy chọn dmesg | Chức năng | Cú pháp ví dụ |
|---|---|---|
| (Không tùy chọn) | Hiển thị toàn bộ log kernel tính từ khi khởi động. | dmesg |
| -H | Sử dụng chế độ phân trang và định dạng dễ đọc cho người dùng. | dmesg -H |
| -T | Hiển thị mốc thời gian ở định dạng ngày giờ cụ thể. | dmesg -T |
| -w | Theo dõi log kernel theo thời gian thực). | dmesg -w |
| -C | Xóa sạch nội dung bộ đệm vòng. | sudo dmesg -C |
| -L | Hiển thị các tính năng Localized log. | dmesg -L |
Cách sử dụng lệnh dmesg chi tiết
1. Xem toàn bộ Kernel Log
Để hiển thị tất cả các thông điệp từ bộ đệm kernel và có thể cuộn trang để xem nội dung dài, bạn hãy sử dụng lệnh sau kết hợp với less:
dmesg | less
Bạn có thể cuộn qua nội dung từng trang một. Để tìm kiếm một từ khóa cụ thể, ví dụ: USB, bạn hãy gõ phím / sau đó nhập chuỗi cần tìm như /USB.


2. Hiển thị log ở định dạng dễ đọc
Để hiển thị log kèm theo mốc thời gian chính xác, có màu sắc phân loại và tự động phân trang, bạn hãy sử dụng lệnh dưới đây:
dmesg -HTùy chọn -H giúp người dùng dễ dàng theo dõi các cấp độ log khác nhau thông qua màu sắc và giao diện phân trang tích hợp.

3. Lọc thông điệp theo thiết bị hoặc thành phần phần cứng
Để chỉ xem các thông điệp liên quan đến một thành phần phần cứng cụ thể, bạn hãy sử dụng lệnh dmesg kết hợp với grep. Ví dụ, để lọc thông tin về ổ đĩa, bạn dùng lệnh:
dmesg | grep 'sd'
Để lọc thông tin liên quan đến bộ nhớ RAM, bạn sử dụng lệnh:
dmesg | grep 'Memory'
Việc kết hợp này giúp bạn nhanh chóng tìm thấy các lỗi hoặc thông tin cấu hình của các thiết bị cụ thể như USB, card mạng hay các thông báo chứa từ khóa “error”.
4. Xem các thông điệp theo cấp độ ưu tiên
Để chỉ hiển thị các thông điệp có mức độ quan trọng nhất định, bạn hãy sử dụng tùy chọn -l. Ví dụ, để chỉ hiển thị các thông điệp lỗi (error) và cảnh báo (warning), bạn chạy lệnh sau:
dmesg -l err,warn
Các cấp độ log phổ biến bao gồm: err (Error), warn (Warning), crit (Critical), info (Information) và debug.
5. Xem các thông điệp mới nhất
Để tập trung vào các sự kiện vừa mới phát sinh trong bộ đệm vòng, bạn hãy sử dụng lệnh sau:
dmesg -kTùy chọn này giúp người dùng dễ dàng theo dõi các sự kiện vừa xảy ra, rất hữu ích ngay sau khi bạn vừa kết nối một thiết bị mới vào máy tính.

6. Xóa sạch bộ đệm kernel
Để xóa toàn bộ các thông điệp hiện tại khỏi bộ đệm kernel nhằm phục vụ việc kiểm tra thiết bị mới mà không bị lẫn log cũ, bạn hãy sử dụng lệnh sau với quyền root:
sudo dmesg -CSau khi thực hiện lệnh xóa, bộ đệm sẽ chỉ bắt đầu ghi lại các thông điệp phát sinh sau thời điểm đó.

Kiểm tra kết quả thành công
Khi bạn kết nối một thiết bị USB mới, hãy chạy lệnh dmesg | tail để xác nhận kernel đã phát hiện, gán địa chỉ và tải driver thành công cho thiết bị. Ngoài ra, khi sử dụng tùy chọn -T, các mốc thời gian trong log phải được hiển thị rõ ràng theo định dạng ngày giờ thông thường.
Cách xử lý lỗi phổ biến khi chạy lệnh dmesg
Trong quá trình vận hành và trích xuất dữ liệu từ Kernel Ring Buffer, bạn có thể gặp phải một số tình huống sau:
1. Sự cố không nhận diện thiết bị ngoại vi
- Nguyên nhân: Thường do xung đột Driver (Module), thiếu nguồn cấp hoặc lỗi vật lý.
- Giải pháp: Bạn sử dụng lệnh
dmesg -l errđể lọc riêng các bạn ghi lỗi. Log hệ thống thường chỉ đích danh Module nhân nào đang thất bại trong quá trình nạp hoặc nhận dạng thiết bị.
2. Lỗi từ chối thực thi khi xóa bộ đệm
- Nguyên nhân: Thao tác can thiệp và làm sạch bộ đệm vòng yêu cầu đặc quyền hệ thống cao nhất.
- Giải pháp: Đảm bảo bạn thực thi lệnh với quyền quản trị thông qua tiền tố
sudo.
Lưu ý
Hành động này sẽ xóa sạch dữ liệu hiện tại trong buffer, bạn hãy cân nhắc sao lưu nếu cần thiết.
3. Quá tải thông tin và mất dữ liệu cũ
- Nguyên nhân: Lưu lượng log quá lớn gây khó khăn cho việc truy vấn. Ngoài ra, do đặc tính Ring Buffer, các dữ liệu cũ sẽ bị ghi đè khi bộ nhớ đầy.
- Giải pháp: Bạn nên kết hợp với các công cụ điều hướng và lọc dữ liệu như
| less(để cuộn trang) hoặc| grep <keyword>(để lọc từ khóa mục tiêu).
Từ kinh nghiệm thực tế của mình, sau nhiều năm quản trị hệ thống Linux, mình nhận thấy thói quen hữu ích nhất là chạy dmesg | tail -50 ngay sau mỗi lần kết nối thiết bị mới hoặc khi hệ thống có biểu hiện bất thường. Ngoài ra, trước khi dùng dmesg -C để xóa bộ đệm, mình luôn sao lưu log hiện tại bằng lệnh dmesg -T > ~/dmesg_backup_$(date +%F).log — việc này đã cứu mình không ít lần khi cần truy lại nguyên nhân sự cố sau đó. Một điều nữa mình muốn chia sẻ là đừng chỉ dựa vào mỗi dmesg, bạn hãy kết hợp thêm với journalctl -k và kiểm tra các file trong /var/log/ để có cái nhìn toàn diện hơn, đặc biệt là trên các máy chủ production nơi mà việc bỏ sót một dòng log có thể khiến bạn mất hàng giờ để xử lý sự cố.

Lưu ý khi sử dụng lệnh dmesg
Khi thực thi lệnh dmesg để kiểm tra hệ thống, bạn cần lưu ý các vấn đề kỹ thuật sau để đảm bảo dữ liệu thu thập được là chính xác và hữu ích:
- Bản chất của bộ đệm vòng: dmesg lưu trữ log trong một bộ đệm có dung lượng giới hạn. Khi bộ đệm đầy, các thông điệp cũ nhất sẽ bị ghi đè bởi thông điệp mới. Do đó, nếu xảy ra sự cố, bạn cần thực hiện truy xuất log ngay lập tức để tránh mất dữ liệu quan trọng.
- Đặc quyền truy cập: Trên nhiều bản phân phối Linux hiện đại như Ubuntu hoặc Debian, quyền xem log nhân bị hạn chế để bảo mật. Bạn phải sử dụng sudo dmesg để có thể đọc được đầy đủ các thông tin nhạy cảm về hệ thống.
- Quản lý mốc thời gian: Mặc định, dmesg hiển thị thời gian dưới dạng số giây tính từ lúc hệ thống khởi động, gây khó khăn cho việc đối chiếu. Do đó bạn hãy sử dụng tham số -T hoặc –ctime để chuyển đổi sang định dạng ngày giờ thực tế.
- Cẩn trọng với lệnh xóa bộ đệm: Lệnh dmesg -C sẽ xóa sạch bộ đệm vòng của nhân, do đó bạn hãy thận trọng khi dùng lệnh này trên môi trường Production vì lệnh sẽ làm mất dấu vết của các lỗi hệ thống vừa xảy ra, gây khó khăn cho việc kiểm tra sự cố.
- Tương tác với log hệ thống: Bạn cần phân biệt rằng dmesg chỉ lấy dữ liệu từ bộ đệm RAM của nhân, trong khi các file như /var/log/kern.log là dữ liệu đã được ghi xuống ổ cứng. Nếu máy chủ bị khởi động lại đột ngột, dữ liệu trong dmesg sẽ bị xóa, lúc này bạn phải tìm trong các file log cũ.

Câu hỏi thường gặp
Làm thế nào để theo dõi log kernel liên tục theo thời gian thực?
Trong trường hợp bạn muốn giám sát các sự kiện phần cứng hoặc hệ thống liên tục theo thời gian thực, hãy sử dụng lệnh sau:dmesg -w
Tùy chọn này giữ cho phiên làm việc luôn mở và tự động cập nhật các thông điệp mới nhất lên màn hình.
Làm thế nào để kiểm tra xem hệ thống có vừa tắt tiến trình do thiếu RAM hay không?
Để tìm kiếm các sự kiện mà nhân Linux buộc phải dừng một ứng dụng vì cạn kiệt bộ nhớ vật lý, bạn hãy thực hiện lệnh lọc sau:dmesg | grep -i "oom killer"Lệnh này giúp bạn xác định nhanh chóng liệu máy chủ có đang gặp tình trạng quá tải RAM nghiêm trọng dẫn đến việc các tiến trình bị tắt hay không.
Tôi có thể sử dụng dmesg để kiểm tra thông tin card mạng hoặc ổ cứng cụ thể không?
Có, bạn hoàn toàn có thể kết hợp với lệnh lọc để tìm thông tin về các thiết bị phần cứng cụ thể. Để kiểm tra các thông điệp liên quan đến card mạng, bạn hãy dùng lệnh:dmesg | grep -i ethHoặc để kiểm tra thông tin liên quan đến các cổng kết nối ngoại vi, bạn sử dụng lệnh:dmesg | grep -i pci
Lệnh dmesg trên các bản phân phối khác nhau như Arch Linux hay Ubuntu có khác gì nhau không?
Về cơ bản, lệnh dmesg là một công cụ chuẩn của nhân Linux nên cú pháp và chức năng sẽ đồng nhất trên hầu hết các bản phân phối (Distro). Tuy nhiên, trên một số hệ thống sử dụng systemd như Arch Linux, bạn cũng có thể xem log tương tự bằng lệnh journalctl -k, nhưng dmesg vẫn là công cụ nhanh nhất để truy cập thẳng vào bộ đệm vòng của kernel.
Lệnh dmesg là công cụ kiểm tra lỗi cấp kernel cơ bản và quan trọng nhất trong Linux. Việc thành thạo cách đọc log, sử dụng grep để lọc thông tin và phân loại thông điệp theo mức độ quan trọng sẽ giúp bạn xác định thành công các vấn đề về khởi động và nhận diện thiết bị một cách chính xác.




