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

2025-02-12 · Đã cập nhật 2026-07-06

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):
    systemctl list-units --type=service --state=running
    
    Hoặc, để liệt kê mọi unit dịch vụ bất kể trạng thái:
    systemctl --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, ACTIVESUB 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 systemctl hoặc service.
  • 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ệnh grep. 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 -tulnp hoặc ss -tulnp để tìm các dịch vụ đang chạy trên những cổng cụ thể.
Cách Liệt Kê Các Dịch Vụ Đang Chạy Trên Linux

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ó! tophtop 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):
    htop
    
    (Cài đặt bằng sudo apt install htop hoặc sudo yum install htop nếu chưa có sẵn.)