Cách Liệt Kê Các Dịch Vụ Đang Chạy Trên Linux: Hướng Dẫn Hoàn Chỉnh Cho Mọi Hệ Thống Init
Trả Lời Nhanh: Cách Liệt Kê Các Dịch Vụ Đang Chạy Trên Linux
Để liệt kê các dịch vụ đang chạy trên Linux, hãy dùng một trong những lệnh sau tùy theo hệ thống init của bạn:
- systemd (Ubuntu 24.04, Debian 12, CentOS/RHEL 9, Fedora 40+ và hầu hết các bản phân phối hiện đại vào năm 2026):
Hoặc, để liệt kê mọi unit dịch vụ bất kể trạng thái:systemctl list-units --type=service --state=runningsystemctl --type=service - SysVinit / các hệ thống cũ hơn (hoặc để bao gồm cả các script init cũ):
service --status-all
systemd là hệ thống init mặc định trên gần như mọi bản phân phối Linux phổ biến hiện nay, nên systemctl list-units --type=service --state=running chính là câu trả lời trong đại đa số trường hợp. Lệnh này in ra một bảng các dịch vụ đang hoạt động cùng với trạng thái LOAD, ACTIVE và SUB của chúng. Nếu không tìm thấy systemctl, hệ thống của bạn không chạy systemd — hãy chuyển sang service --status-all (SysVinit) hoặc rc-status (OpenRC).
Phần còn lại của hướng dẫn sẽ giải thích chi tiết từng cách, bao gồm việc lọc theo trạng thái, kiểm tra các dịch vụ khởi động cùng hệ thống, và tìm dịch vụ theo cổng.
Giới thiệu
Dịch vụ Linux là những tiến trình nền chạy liên tục để thực hiện các tác vụ hệ thống, chẳng hạn như quản lý mạng, xử lý đăng nhập của người dùng hay chạy máy chủ web. Những dịch vụ này có thể được quản lý bằng nhiều công cụ khác nhau, tùy vào bản phân phối Linux và hệ thống init đang dùng. Tính đến năm 2026, systemd là hệ thống init tiêu chuẩn trên gần như toàn bộ các bản phân phối lớn, nên phần lớn hướng dẫn này sẽ tập trung vào lệnh systemctl.
Biết cách liệt kê các dịch vụ đang chạy là điều thiết yếu với quản trị viên hệ thống và lập trình viên. Nó giúp ích cho:
- Xử lý sự cố – Kiểm tra xem một dịch vụ quan trọng có đang chạy hay đã bị lỗi.
- Giám sát hiệu năng – Xác định những dịch vụ ngốn nhiều tài nguyên.
- Kiểm tra an ninh – Đảm bảo chỉ những dịch vụ cần thiết mới đang hoạt động.
Sử dụng systemctl (Cho Các Hệ Thống Dựa Trên Systemd)
Hầu hết các bản phân phối Linux hiện đại đều dùng systemd làm hệ thống init. Điều này bao gồm các bản phát hành hiện hành năm 2026 như Ubuntu (từ 16.04 đến 24.04 LTS trở lên), Debian (từ 8 đến 12 "Bookworm" trở lên), Fedora (40+), CentOS Stream / RHEL / Rocky Linux / AlmaLinux (từ 7 đến 9 trở lên), và openSUSE. Lệnh systemctl là công cụ chính để quản lý và liệt kê dịch vụ trên tất cả các hệ thống này.
Kiểm Tra Trạng Thái Của Một Dịch Vụ Riêng Lẻ
Để kiểm tra xem một dịch vụ cụ thể có đang chạy hay không, hãy dùng:
systemctl status <service-name>
Ví dụ, để kiểm tra xem máy chủ web nginx có đang chạy hay không:
systemctl status nginx
Kết quả sẽ cho biết dịch vụ đang hoạt động (running), không hoạt động (inactive), hay bị lỗi (failed), kèm theo nhật ký để gỡ lỗi.
Liệt Kê Tất Cả Các Dịch Vụ Đang Hoạt Động
Để liệt kê tất cả các dịch vụ đang chạy, hãy dùng:
systemctl list-units --type=service --state=running
Lệnh này hiển thị một bảng gồm tất cả các dịch vụ hiện đang chạy cùng với trạng thái của chúng.
Liệt Kê Tất Cả Các Dịch Vụ (Bao Gồm Cả Những Dịch Vụ Không Hoạt Động)
Nếu bạn muốn xem tất cả các dịch vụ, bất kể chúng có đang chạy hay không:
systemctl list-units --type=service
Danh sách này sẽ bao gồm các dịch vụ ở trạng thái đang hoạt động, không hoạt động, bị lỗi, hoặc ở các trạng thái khác.
Lọc Các Dịch Vụ Theo Trạng Thái
Bạn có thể lọc dịch vụ dựa trên trạng thái của chúng bằng cách dùng:
systemctl list-units --type=service --state=failed
Lệnh này chỉ liệt kê những dịch vụ bị lỗi, rất hữu ích cho việc xử lý sự cố.
Liệt Kê Các Dịch Vụ Được Bật Khi Khởi Động
Để kiểm tra những dịch vụ nào được thiết lập tự khởi động cùng hệ thống:
systemctl list-unit-files --type=service | grep enabled
Ví Dụ Kết Quả
Một kết quả điển hình của systemctl list-units --type=service --state=running có thể trông như thế này:
UNIT LOAD ACTIVE SUB DESCRIPTION
cron.service loaded active running Regular background program processing daemon
networking.service loaded active running Raise network interfaces
ssh.service loaded active running OpenBSD Secure Shell server
systemd-logind.service loaded active running Login Service
Tóm Tắt
- Dùng
systemctl status <service>để kiểm tra trạng thái của một dịch vụ riêng lẻ. - Dùng
systemctl list-units --type=service --state=runningđể liệt kê các dịch vụ đang hoạt động. - Dùng
systemctl list-units --type=serviceđể xem tất cả các dịch vụ. - Dùng
systemctl list-unit-files --type=serviceđể xem các dịch vụ được bật khi khởi động.
Sử Dụng ps và grep Để Liệt Kê Các Tiến Trình Đang Chạy
Nếu bạn muốn liệt kê các dịch vụ đang chạy mà không phụ thuộc vào systemctl hay các công cụ quản lý dịch vụ khác, bạn có thể dùng ps (process status - trạng thái tiến trình) kết hợp với grep để tìm những tiến trình cụ thể.
Cách này hữu ích khi:
- Bạn đang làm việc trên một hệ thống Linux tối giản, không có lệnh
systemctlhoặcservice. - Bạn muốn kiểm tra xem một tiến trình cụ thể có đang chạy hay không, bất kể hệ thống init là gì.
Liệt Kê Tất Cả Các Tiến Trình Đang Chạy
Lệnh ps aux hiển thị tất cả các tiến trình đang chạy trên hệ thống:
ps aux
Lệnh này sẽ cho ra một danh sách dài tất cả các tiến trình đang chạy, bao gồm mã tiến trình (PID), mức sử dụng CPU, mức sử dụng bộ nhớ và tên lệnh.
Tìm Kiếm Một Dịch Vụ Cụ Thể
Để kiểm tra xem một dịch vụ cụ thể có đang chạy hay không, hãy dùng ps aux | grep <service-name>:
ps aux | grep nginx
Lệnh này sẽ in ra các dòng có chứa "nginx", cho biết nó có đang chạy hay không. Kết quả có thể trông như thế này:
root 1034 0.0 0.3 49536 3412 ? Ss 12:34 0:00 nginx: master process /usr/sbin/nginx
www-data 1035 0.0 0.2 49536 2824 ? S 12:34 0:00 nginx: worker process
user 2045 0.0 0.0 14856 900 pts/0 S+ 12:35 0:00 grep --color=auto nginx
Ở đây:
- Hai dòng đầu cho thấy dịch vụ nginx đang chạy.
- Dòng cuối (
grep --color=auto nginx) chính là bản thân lệnhgrep. Bạn có thể loại nó ra bằng cách dùng:
ps aux | grep nginx | grep -v grep
Hiển Thị Các Tiến Trình Theo Dạng Cây
Để có cái nhìn trực quan và có cấu trúc hơn, hãy dùng:
ps fax
Lệnh này hiển thị các tiến trình đang chạy dưới dạng cây phân cấp, giúp bạn dễ dàng nhận ra dịch vụ nào đang chạy cùng các tiến trình con của chúng.
Tìm Dịch Vụ Theo Cổng
Nếu bạn nghi ngờ có một dịch vụ đang chạy trên một cổng nhất định nhưng không chắc tên dịch vụ, hãy dùng:
netstat -tulnp | grep :80
hoặc, nếu không có sẵn netstat:
ss -tulnp | grep :80
Lệnh này sẽ liệt kê tiến trình đang dùng cổng 80 (cổng thường được các máy chủ web như Nginx hay Apache sử dụng).
Tóm Tắt
- Dùng
ps auxđể liệt kê tất cả các tiến trình đang chạy. - Dùng
ps aux | grep <service-name>để kiểm tra một dịch vụ cụ thể. - Dùng
ps faxđể xem các tiến trình dưới dạng cây. - Dùng
netstat -tulnphoặcss -tulnpđể tìm các dịch vụ đang chạy trên những cổng cụ thể.
Câu Hỏi Thường Gặp (FAQ)
1. Làm sao để kiểm tra xem một dịch vụ có đang chạy trên Linux không?
Bạn có thể dùng nhiều cách khác nhau tùy theo bản phân phối Linux của mình:
- Với các hệ thống dựa trên systemd:
systemctl status <service-name> - Với các hệ thống dựa trên SysVinit:
service <service-name> status - Dùng ps và grep:
ps aux | grep <service-name>
2. Làm sao để liệt kê tất cả các dịch vụ đang chạy?
- Với các hệ thống dựa trên systemd:
systemctl list-units --type=service --state=running - Với các hệ thống dựa trên SysVinit:
service --status-all - Dùng lệnh
ps:ps aux
3. Làm sao để kiểm tra xem một dịch vụ có khởi động cùng hệ thống không?
- Với systemd:
systemctl is-enabled <service-name> - Với SysVinit (các hệ thống dựa trên RHEL):
chkconfig --list <service-name>
4. Làm sao để khởi động lại một dịch vụ?
- Với các hệ thống dựa trên systemd:
sudo systemctl restart <service-name> - Với các hệ thống dựa trên SysVinit:
sudo service <service-name> restart
5. Làm sao để dừng hoặc vô hiệu hóa một dịch vụ?
- Để dừng một dịch vụ tạm thời:
sudo systemctl stop <service-name> - Để ngăn một dịch vụ khởi động cùng hệ thống:
sudo systemctl disable <service-name>
6. Làm sao để tìm ra dịch vụ nào đang dùng một cổng cụ thể?
Bạn có thể dùng netstat hoặc ss để tìm các dịch vụ đang chạy trên một cổng cụ thể:
netstat -tulnp | grep :80
hoặc
ss -tulnp | grep :80
7. Phải làm gì nếu không tìm thấy systemctl?
Nếu bạn gặp lỗi kiểu như command not found: systemctl, tức là hệ thống của bạn có thể không dùng systemd. Hãy thử dùng:
service --status-all
hoặc
ps aux | grep <service-name>
8. Làm sao để liệt kê các dịch vụ bị lỗi?
Với các hệ thống dựa trên systemd, hãy chạy:
systemctl list-units --type=service --state=failed
9. Làm sao để bật ghi nhật ký cho một dịch vụ cụ thể?
Để xem nhật ký của một dịch vụ do systemd quản lý, hãy dùng:
journalctl -u <service-name>
Để xem nhật ký theo thời gian thực:
journalctl -u <service-name> -f
10. Tôi có thể dùng top hoặc htop để xem các dịch vụ đang chạy không?
Có! top và htop cho bạn cái nhìn trực tiếp về các tiến trình đang chạy:
- Dùng
top:top - Dùng
htop(tương tác và thân thiện với người dùng):
(Cài đặt bằnghtopsudo apt install htophoặcsudo yum install htopnếu chưa có sẵn.)
