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 Tất Cả Các Hệ Thống Init

2025-02-12

Giới thiệu

Các dịch vụ Linux là các 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 người dùng hoặc chạy máy chủ web. Những dịch vụ này có thể được quản lý thông qua nhiều công cụ khác nhau, tùy thuộc vào phân phối Linux và hệ thống init đang sử dụng.

Biết cách liệt kê các dịch vụ đang chạy là điều cần thiết cho các quản trị viên hệ thống và nhà phát triển. Điều này giúp:

  • Khắc phục sự cố – Kiểm tra xem một dịch vụ quan trọng có đang chạy hay đã thất bại.
  • Giám sát hiệu suất – Xác định các dịch vụ tiêu tốn tài nguyên.
  • Kiểm tra bảo mật – Đảm bảo chỉ những dịch vụ cần thiết mới hoạt động.

Sử dụng systemctl (Cho Các Hệ Thống Dựa Trên Systemd)

Hầu hết các phân phối Linux hiện đại, bao gồm Ubuntu (16.04+), CentOS (7+), Fedora và Debian (8+), sử dụng systemd làm hệ thống init. Lệnh systemctl là công cụ chính để quản lý và liệt kê các dịch vụ trong những hệ thống này.

Kiểm Tra Trạng Thái Của 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 sử 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

Đầu ra sẽ cho biết liệu dịch vụ có đang hoạt động (running), không hoạt động, hay thất bại, cùng với các 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 sử dụng:

systemctl list-units --type=service --state=running

Lệnh này hiển thị một bảng 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

Điều này sẽ bao gồm các dịch vụ có trạng thái đang hoạt động, không hoạt động, thất bạ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 các dịch vụ dựa trên trạng thái của chúng bằng cách sử dụng:

systemctl list-units --type=service --state=failed

Điều này sẽ chỉ liệt kê các dịch vụ đã thất bại, điều này có thể hữu ích cho việc khắc phục sự cố.

Liệt Kê Các Dịch Vụ Được Kích Hoạt Khi Khởi Động

Để kiểm tra các dịch vụ nào được thiết lập để khởi động tự động khi khởi động:

systemctl list-unit-files --type=service | grep enabled

Ví Dụ Đầu Ra

Một đầu ra đ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

  • Sử dụng systemctl status <service> để kiểm tra trạng thái của một dịch vụ cụ thể.
  • Sử dụng systemctl list-units --type=service --state=running để liệt kê các dịch vụ đang hoạt động.
  • Sử dụng systemctl list-units --type=service để xem tất cả các dịch vụ.
  • Sử dụng systemctl list-unit-files --type=service để xem các dịch vụ được kích hoạ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 hoặc các công cụ quản lý dịch vụ khác, bạn có thể sử dụng ps (trạng thái tiến trình) cùng với grep để tìm các tiến trình cụ thể.

Phương pháp này hữu ích khi:

  • Bạn đang làm việc trên một hệ thống Linux tối thiểu thiếu 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.

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

Điều này sẽ tạo ra một danh sách dài các tiến trình đang chạy, bao gồm ID tiến trình (PIDs), 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 sử dụng ps aux | grep <service-name>:

ps aux | grep nginx

Điều này sẽ xuất ra các dòng bao gồm "nginx," cho thấy nếu nó đang chạy. Đầu ra 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 tiên cho biết dịch vụ nginx đang chạy.
  • Dòng cuối cùng (grep --color=auto nginx) là lệnh grep tự nó. Bạn có thể loại bỏ nó bằng cách sử dụng:
ps aux | grep nginx | grep -v grep

Hiển Thị Các Tiến Trình Theo Định Dạng Cây

Để có cái nhìn cấu trúc hơn, hãy sử dụng:

ps fax

Điều này hiển thị một cấu trúc cây của các tiến trình đang chạy, giúp dễ dàng xác định các dịch vụ nào đang chạy và các tiến trình con của chúng.

Tìm Các Dịch Vụ Theo Cổng

Nếu bạn nghi ngờ một dịch vụ đang chạy trên một cổng cụ thể nhưng không chắc chắn về tên dịch vụ, hãy sử dụng:

netstat -tulnp | grep :80

hoặc, nếu netstat không có sẵn:

ss -tulnp | grep :80

Điều này sẽ liệt kê tiến trình đang sử dụng cổng 80 (thường được sử dụng bởi các máy chủ web như Nginx hoặc Apache).

Tóm Tắt

  • Sử dụng ps aux để liệt kê tất cả các tiến trình đang chạy.
  • Sử dụng ps aux | grep <service-name> để kiểm tra một dịch vụ cụ thể.
  • Sử dụng ps fax để có cái nhìn cây về các tiến trình.
  • Sử dụng netstat -tulnp hoặc ss -tulnp để tìm các dịch vụ đang chạy trên các 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 thế nào để tôi kiểm tra xem một dịch vụ có đang chạy trên Linux không?

Bạn có thể sử dụng các phương pháp khác nhau tùy thuộc vào phân phối Linux của bạn:

  • Đối với các hệ thống dựa trên systemd:
    systemctl status <service-name>
    
  • Đối với các hệ thống dựa trên SysVinit:
    service <service-name> status
    
  • Sử dụng ps và grep:
    ps aux | grep <service-name>
    

2. Làm thế nào để tôi liệt kê tất cả các dịch vụ đang chạy?

  • Đối với các hệ thống dựa trên systemd:
    systemctl list-units --type=service --state=running
    
  • Đối với các hệ thống dựa trên SysVinit:
    service --status-all
    
  • Sử dụng lệnh ps:
    ps aux
    

3. Làm thế nào tôi có thể kiểm tra xem một dịch vụ có khởi động khi khởi động không?

  • Đối với systemd:
    systemctl is-enabled <service-name>
    
  • Đối với SysVinit (các hệ thống dựa trên RHEL):
    chkconfig --list <service-name>
    

4. Làm thế nào để tôi khởi động lại một dịch vụ?

  • Đối với các hệ thống dựa trên systemd:
    sudo systemctl restart <service-name>
    
  • Đối với các hệ thống dựa trên SysVinit:
    sudo service <service-name> restart
    

5. Làm thế nào để tôi 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 khi khởi động:
    sudo systemctl disable <service-name>
    

6. Làm thế nào tôi có thể tìm dịch vụ nào đang sử dụng một cổng cụ thể?

Bạn có thể sử 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. Điều gì xảy ra nếu systemctl không được tìm thấy?

Nếu bạn nhận được lỗi như command not found: systemctl, điều đó có nghĩa là hệ thống của bạn có thể không sử dụng systemd. Hãy thử sử dụng:

service --status-all

hoặc

ps aux | grep <service-name>

8. Làm thế nào để tôi liệt kê các dịch vụ đã thất bại?

Đố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 thế nào để tôi kích hoạt ghi nhật ký cho một dịch vụ cụ thể?

Để kiểm tra nhật ký cho một dịch vụ được quản lý bởi systemd, hãy sử 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ể sử dụng top hoặc htop để xem các dịch vụ đang chạy không?

Có! tophtop cung cấp cái nhìn trực tiếp về các tiến trình đang chạy:

  • Sử dụng top:
    top
    
  • Sử dụng htop (tương tác và thân thiện với người dùng):
    htop
    
    (Cài đặt với sudo apt install htop hoặc sudo yum install htop nếu không có sẵn.)