Bài viết này sẽ giới thiệu với các bạn về cách liệt kê các dịch vụ đang chạy dưới systemd trên CentOS 8 của hệ điều hành Linux. Trong bài viết này chúng ta sẽ tìm hiểu về systemd và cách liệt kê các dịch vụ đang chạy giúp cho chúng ta tự học Linux dể dàng hơn.
1. Giới thiệu về systemd
Các bản Linux hiện đại từ CentOS 7, RHEL 7 trở lên thì init và runlevel được thay thế bởi systemd và cũng thực hiện nhiệm vụ tương tự như init và runlevel. Systemd cũng giống như init là tiến trình chạy đầu tiên trên hệ thống với ID=1.
Các hệ thống sử dụng systemd khi khởi động sẽ nhanh hơn các hệ thống sử dụng init trước đó. Do các hệ thống sử dụng systemd được thay thế loạt các bước được trình tự hoá với kỹ thuật song song cho phép nhiều dịch vụ khởi tạo cùng lúc.
Các shell khởi động phức tạp được thay thế bằng các tệp cấu hình đơn giản, liệt kê những gì phải được thực hiện trước khi một dịch vụ được khởi động, cách thực thi dịch vụ khởi động và điều kiện dịch vụ nào cần được thực hiện khi khởi động xong. Một điều cần lưu ý là /sbin/init bây giờ chỉ trỏ tới /lib/systemd/systemd. Systemd sẽ thay thế cho quá trình init.
Các tiến trình này hoạt động liên tục nhưng cũng không thể để người dùng ngồi nhìn nó chạy mãi. Vì thế, nó được chạy ngầm. Systemd cũng không phải là để chỉ các tiến trình chạy ngầm đó, mà nó là một nhóm các chương trình đặc biệt sẽ quản lý, vận hành và theo dõi các tiến trình khác hoạt động.
Systemctl
là ứng dụng kiểm soát các dịch vụ quản lí hệ thống.
2. Liệt kê các dịch vụ đang chạy dưới systemd
Để liệt kê tất cả các dịch vụ được tải (dịch dụ đó đang hoạt động, đang chạy, đã thoát hoặc chạy không thành công) trên hệ thống thì chúng ta có thể sử dụng tùy chọn type
và list-units
để hiển thị như sau:
[root@localhost ~]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
dracut-shutdown.service loaded active exited Restore /run/initramfs on>
firewalld.service loaded active running firewalld - dynamic firew>
getty@tty1.service loaded active running Getty on tty1
import-state.service loaded active exited Import network configurat>
kdump.service loaded active exited Crash recovery kernel arm>
kmod-static-nodes.service loaded active exited Create list of required s>
lvm2-monitor.service loaded active exited Monitoring of LVM2 mirror>
lvm2-pvscan@8:2.service loaded active exited LVM event activation on d>
NetworkManager-wait-online.service loaded active exited Network Manager Wait Onli>
Hoặc chúng ta có thể chạy lệnh sau kết quả sẽ cho chúng ta như trên:
[root@localhost ~]# systemctl --type=service
Khi chúng ta muốn liệt kê tất cả các dịch vụ đang hoạt động, đang chạy và những dịch vụ đã thoát, bạn có thể thêm tùy chọn --state
cùng với giá trị active
như sau:
[root@localhost ~]# systemctl list-units --type=service --state=active
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
dracut-shutdown.service loaded active exited Restore /run/initramfs on>
firewalld.service loaded active running firewalld - dynamic firew>
getty@tty1.service loaded active running Getty on tty1
import-state.service loaded active exited Import network configurat>
Hoặc lệnh sau:
[root@localhost ~]# systemctl --type=service --state=active
Chúng ta muốn các dịch vụ được tải và đang hoạt động chạy lệnh sau:
[root@localhost ~]# systemctl list-units --type=service --state=running
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing Service
chronyd.service loaded active running NTP client/server
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
NetworkManager.service loaded active running Network Manager
polkit.service loaded active running Authorization Manager
rngd.service loaded active running Hardware RNG Entropy Gatherer Daemon
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
sssd.service loaded active running System Security Services Daemon
Khi một dịch vụ hoạt động nó sẻ sử dụng một cổng. Để có thể xác định cổng mà một tiến trình trình nền chúng ta có thể sử dụng công cụ netstat như sau:
[root@localhost ~]# netstat -ltup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 974/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 974/sshd
udp 0 0 localhost.locald:bootpc 0.0.0.0:* 956/NetworkManager
udp 0 0 localhost:323 0.0.0.0:* 886/chronyd
udp6 0 0 localhost:323 [::]:* 886/chronyd
Trong đó các tùy chọn có ý nghĩa như sau:
-l
: Dùng để in tất cả các cổng nghe.-t
: Hiển thị tất cả các kết nối TCP.-u
: Hiển thị tất cả các kết nối UDP.-n
: In số cổng số (thay vì tên ứng dụng).-p
: Hiển thị tên ứng dụng.
Khi máy chủ của chúng ta có firewall đang hoạt động thì việc chặn hoặc cho phép truy cập đến cổng được chọn, thì chúng ta có thể liệt kê các dịch vụ hoặc cổng đã được mở trong firewall bằng cách thực thi lệnh sau:
[root@localhost ~]# firewall-cmd --list-services
cockpit dhcpv6-client ssh
[root@localhost ~]# firewall-cmd --list-ports
22/tcp 80/tcp
3. Lời kết
Qua bài trên, giúp cho chúng ta hiểu hơn về cách liệt kê các dịch vụ đang chạy dưới systemd trên CentOS 8 của hệ điều hành Linux. Từ đây chúng ta có thể quản lý máy chủ chúng ta một cách tốt hơn.