101.3 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
101 Kiến trúc Hệ thống |
Mục tiêu: |
101.3 Thay đổi mức chạy/ mục tiêu khởi động và tắt hoặc khởi động lại Hệ thống |
Bài: |
1 trên 1 |
Giới thiệu
Một đặc điểm chung giữa các hệ điều hành tuân theo các nguyên tắc thiết kế Unix là việc sử dụng các tiến trình riêng biệt để kiểm soát các chức năng khác nhau của hệ thống. Các tiến trình này được gọi là trình nền (hay nói chung hơn là các dịch vụ). Chúng cũng chịu trách nhiệm về các tính năng mở rộng bên dưới hệ điều hành như dịch vụ ứng dụng mạng (máy chủ HTTP, chia sẻ tệp, email, v.v.), cơ sở dữ liệu, cấu hình theo yêu cầu, v.v. .Mặc dù Linux sử dụng hạt nhân nguyên khối, nhiều khía cạnh cấp thấp của hệ điều hành vẫn sẽ bị ảnh hưởng bởi trình nền như việc cân bằng tải và cấu hình tường lửa.
Việc trình nền nào nên hoạt động sẽ tùy thuộc vào mục đích của hệ thống. Tập hợp các trình nền đang hoạt động cũng có thể được sửa đổi trong thời gian chạy; vì vậy, các dịch vụ có thể được khởi động và dừng mà không cần phải khởi động lại toàn bộ hệ thống. Để giải quyết vấn đề này, mọi bản phân phối Linux lớn đều có cung cấp một số dạng tiện ích quản lý dịch vụ để kiểm soát hệ thống.
Các dịch vụ có thể được kiểm soát bởi các tệp lệnh vỏ hoặc bởi một chương trình và các tệp cấu hình hỗ trợ của nó. Phương pháp đầu tiên được triển khai theo tiêu chuẩn SysVinit hay còn được gọi là System V hoặc chỉ SysV. Phương pháp thứ hai được triển khai bởi systemd và Upstart. Trước đây, các trình quản lý dịch vụ dựa trên SysV là được các bản phân phối Linux sử dụng nhiều nhất. Ngày nay, các trình quản lý dịch vụ dựa trên systemd thường phổ biến hơn trong hầu hết các bản phân phối Linux. Trình quản lý dịch vụ là chương trình đầu tiên được hạt nhân khởi chạy trong quá trình khởi động; vì vậy, PID (số nhận dạng tiến trình) của nó luôn là 1
.
SysVinit
Trình quản lý dịch vụ dựa trên tiêu chuẩn SysVinit sẽ cung cấp các tập hợp trạng thái hệ thống được xác định trước được gọi là mức chạy và các tệp tệp lệnh dịch vụ tương ứng của chúng sẽ được thực thi. Các mức chạy được đánh số từ 0
đến 6
và thường được chỉ định cho các mục đích sau:
- Mức chạy số 0
-
Tắt hệ thống.
- Mức chạy 1, s hoặc single
-
Chế độ một người dùng, không có mạng và các khả năng không cần thiết khác (chế độ bảo trì).
- Mức chạy 2, 3 hoặc 4
-
Chế độ đa người dùng. Người dùng có thể đăng nhập bằng bảng điều khiển hoặc mạng. Mức chạy số 2 và 4 không được sử dụng thường xuyên.
- Mức chạy số 5
-
Chế độ đa người dùng. Nó tương đương với mức 3 và có thêm đăng nhập chế độ đồ họa.
- Mức chạy số 6
-
Khởi động lại hệ thống.
Chương trình chịu trách nhiệm quản lý các mức chạy và trình nền/tài nguyên liên quan là /sbin/init
. Trong quá trình khởi tạo hệ thống, chương trình init
sẽ xác định mức chạy được yêu cầu được chỉ định bởi tham số hạt nhân hoặc trong tệp /etc/inittab
và tải các tệp lệnh liên quan được liệt kê ở đó cho mức chạy đã xác định. Mỗi mức chạy có thể có nhiều tệp dịch vụ liên quan, thường là các tệp lệnh trong thư mục /etc/init.d/
. Vì không phải tất cả các mức chạy đều tương đương trong tất cả các bản phân phối của Linux nên chúng ta cũng có thể tìm thấy một mô tả ngắn về mục đích của mức chạy trong các bản phân phối dựa trên SysV.
Cú pháp của tệp /etc/inittab
sẽ sử dụng định dạng này:
id:runlevels:action:process
id
là tên chung có độ dài tối đa bốn ký tự được sử dụng để xác định mục nhập. Mục nhập runlevels
là danh sách các số mức chạy để thực hiện một hành động cụ thể. Thuật ngữ action
sẽ xác định cách thức init
sẽ thực thi tiến trình được chỉ định bởi thuật ngữ process
. Các hành động có sẵn là:
boot
-
Tiến trình sẽ được thực hiện trong quá trình khởi tạo hệ thống. Trường
runlevels
sẽ bị bỏ qua. bootwait
-
Tiến trình sẽ được thực thi trong quá trình khởi tạo hệ thống và
init
sẽ đợi cho đến khi tiến trình kết thúc sysinit
-
Tiến trình sẽ được thực hiện sau khi khởi tạo hệ thống dù mức chạy là gì. Trường
runlevels
sẽ bị bỏ qua. wait
-
Tiến trình sẽ được thực thi cho các mức chạy nhất định và
init
sẽ đợi cho đến khi tiến trình kết thúc để tiếp tục. respawn
-
Tiến trình sẽ được bắt đầu lại nếu bị chấm dứt.
ctrlaltdel
-
Tiến trình sẽ được thực thi khi quá trình init nhận được tín hiệu
SIGINT
được kích hoạt khi ta nhấn chuỗi phím Ctrl+Alt+Del.
Mức chạy mặc định — mức sẽ được chọn nếu không có mức nào khác được cung cấp làm tham số hạt nhân — cũng sẽ được xác định trong /etc/inittab
trong mục nhập id:x:initdefault
. x
là số của mức chạy mặc định. Con số này sẽ không bao giờ là 0
hoặc 6
vì nó sẽ khiến hệ thống tắt hoặc khởi động lại ngay sau khi kết thúc quá trình khởi động. Một tệp /etc/inittab
điển hình sẽ giống như dưới đây:
# Default runlevel id:3:initdefault: # Configuration script executed during boot si::sysinit:/etc/init.d/rcS # Action taken on runlevel S (single user) ~:S:wait:/sbin/sulogin # Configuration for each execution level l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Action taken upon ctrl+alt+del keystroke ca::ctrlaltdel:/sbin/shutdown -r now # Enable consoles for runlevels 2 and 3 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux # For runlevel 3, also enable serial # terminals ttyS0 and ttyS1 (modem) consoles S0:3:respawn:/sbin/getty -L 9600 ttyS0 vt320 S1:3:respawn:/sbin/mgetty -x0 -D ttyS1
Lệnh telinit q
nên được thực thi sau mỗi lần sửa đổi tệp /etc/inittab
. Đối số q
(hoặc Q
) sẽ yêu cầu init tải lại cấu hình của nó. Bước này rất quan trọng trong việc tránh gián đoạn hệ thống do cấu hình không chính xác trong /etc/inittab
.
Các tệp lệnh được init
sử dụng để thiết lập từng mức chạy sẽ được lưu trữ trong thư mục /etc/init.d/
. Mỗi mức chạy sẽ có một thư mục được liên kết trong /etc/
được đặt tên là /etc/rc0.d/
, /etc/rc1.d/
, /etc/rc2.d/
, v.v., với các tệp lệnh sẽ được thực thi khi mức chạy tương ứng bắt đầu. Vì cùng một tệp lệnh có thể được sử dụng bởi nhiều mức chạy khác nhau, các tệp trong các thư mục đó sẽ chỉ là các liên kết tượng trưng đến các tệp lệnh thực tế trong /etc/init.d/
. Ngoài ra, chữ cái đầu tiên của tên tệp liên kết trong thư mục của mức chạy cho biết dịch vụ sẽ được bắt đầu hay kết thúc cho mức chạy tương ứng. Tên tệp của liên kết bắt đầu bằng chữ cái K
(kill) xác định dịch vụ sẽ bị hủy khi nhập mức chạy. Nếu bắt đầu bằng chữ cái S
(start), dịch vụ sẽ được bắt đầu khi vào mức chạy. Ví dụ: thư mục /etc/rc1.d/
sẽ có nhiều liên kết đến các tệp lệnh mạng bắt đầu bằng chữ cái K
vì mức chạy 1 là mức chạy một người dùng và không có kết nối mạng.
Lệnh runlevel
sẽ hiển thị mức chạy hiện tại cho hệ thống. Lệnh runlevel
sẽ hiển thị hai giá trị: giá trị đầu tiên là mức chạy trước đó và giá trị thứ hai là mức chạy hiện tại:
$ runlevel N 3
Chữ cái N
trong đầu ra cho thấy mức chạy đã không thay đổi kể từ lần khởi động trước. Trong ví dụ này, runlevel 3
là mức chạy hiện tại của hệ thống.
Chương trình init
tương tự có thể được sử dụng để luân phiên giữa các mức chạy trong một hệ thống đang chạy mà không cần phải khởi động lại. Lệnh telinit
cũng có thể được sử dụng để luân phiên giữa các mức chạy. Ví dụ: các lệnh telinit 1
, telinit s
hoặc telinit S
sẽ chuyển hệ thống sang mức chạy 1.
systemd
Hiện tại, systemd là bộ công cụ được sử dụng rộng rãi nhất để quản lý tài nguyên và dịch vụ hệ thống (được systemd gọi là các đơn vị). Một đơn vị sẽ bao gồm tên, loại và tệp cấu hình tương ứng. Ví dụ: đơn vị cho tiến trình máy chủ httpd (như máy chủ web Apache) sẽ là httpd.service
trên các bản phân phối dựa trên Red Hat và tệp cấu hình của nó cũng sẽ được gọi là httpd.service
(trên các bản phân phối dựa trên Debian, đơn vị này là được đặt tên là apache2.service
).
Có bảy loại đơn vị systemd riêng biệt:
service
-
Loại đơn vị phổ biến nhất, được dành cho các tài nguyên hệ thống đang hoạt động có thể được khởi tạo, gián đoạn và tải lại.
socket
-
Loại đơn vị ổ nối có thể là ổ nối hệ thống tệp hoặc ổ nối mạng. Tất cả các đơn vị ổ nối đều có một đơn vị dịch vụ tương ứng được tải khi ổ nối nhận được yêu cầu.
device
-
Một đơn vị thiết bị được liên kết với một thiết bị phần cứng xác định bởi hạt nhân. Một thiết bị sẽ chỉ được coi là một đơn vị systemd nếu có tồn tại quy tắc udev cho mục đích này. Một đơn vị thiết bị có thể được sử dụng để giải quyết các phần phụ thuộc cấu hình khi phát hiện các phần cứng nhất định (với điều kiện là các thuộc tính từ quy tắc udev có thể được sử dụng làm tham số cho đơn vị thiết bị).
mount
-
Đơn vị gắn kết là một định nghĩa điểm gắn kết trong hệ thống tệp, tương tự như một mục nhập trong
/etc/fstab
. automount
-
Một đơn vị automount cũng là một định nghĩa điểm gắn kết trong hệ thống tệp nhưng sẽ được gắn tự động. Mỗi đơn vị gắn kết tự động sẽ có một đơn vị gắn kết tương ứng. Đơn vị này sẽ được bắt đầu khi điểm gắn kết tự động được truy cập.
target
-
Một đơn vị mục tiêu là một nhóm các đơn vị khác được quản lý như một đơn vị.
snapshot
-
Đơn vị hình ảnh tức thời là một trạng thái đã lưu của trình quản lý systemd (không khả dụng trên mọi bản phân phối Linux).
Lệnh chính để điều khiển các đơn vị systemd là systemctl
. Lệnh systemctl
được sử dụng để thực thi tất cả các tác vụ liên quan đến kích hoạt, hủy kích hoạt, thực thi, gián đoạn, giám sát đơn vị, v.v. Chẳng hạn như đối với đơn vị hư cấu có tên unit.service
, các hành động systemctl
phổ biến nhất sẽ là:
systemctl start unit.service
-
Khởi động
unit
. systemctl stop unit.service
-
Dừng
unit
. systemctl restart unit.service
-
Khởi động lại
unit
. systemctl status unit.service
-
Hiển thị trạng thái của
unit
, bao gồm cả việc nó có đang chạy hay không. systemctl is-active unit.service
-
Hiển thị "hoạt động" (active) nếu
unit
đang chạy hoặc ngược lại. systemctl enable unit.service
-
Kích hoạt
unit
, tức làunit
sẽ tải trong quá trình khởi tạo hệ thống. systemctl disable unit.service
-
unit
sẽ không khởi động cùng hệ thống. systemctl is-enabled unit.service
-
Xác minh xem
unit
có khởi động cùng hệ thống hay không. Câu trả lời sẽ được lưu trữ trong biến$?
. Giá trị0
cho biếtunit
sẽ khởi động cùng hệ thống và giá trị1
cho biết rằngunit
sẽ không khởi động cùng hệ thống.
Note
|
Các bản cài đặt mới hơn của systemd sẽ thực sự liệt kê cấu hình của một đơn vị cho thời gian khởi động. Ví dụ: $ systemctl is-enabled apparmor.service enabled |
Nếu không có đơn vị nào khác có cùng tên tồn tại trong hệ thống thì hậu tố sau dấu chấm có thể bị loại bỏ. Ví dụ: nếu chỉ có một đơn vị httpd
thuộc loại service
thì chỉ cần httpd
đã là đủ để làm thông số đơn vị cho systemctl
.
Lệnh systemctl
cũng có thể kiểm soát các mục tiêu hệ thống. Ví dụ: đơn vị multi-user.target
sẽ kết hợp tất cả các đơn vị theo yêu cầu của môi trường hệ thống đa người dùng. Nó cũng tương tự như mức chạy số 3 trong một hệ thống sử dụng SysV.
Lệnh systemctl isolate
sẽ luân phiên giữa các mục tiêu khác nhau. Vì vậy, để thay thế thủ công nhằm mục tiêu multi-user
:
# systemctl isolate multi-user.target
Có các mục tiêu (target) tương ứng cho các mức chạy SysV bắt đầu từ runlevelO.target
cho đến runlevel6.target
. Tuy nhiên, systemd không sử dụng tệp /etc/inittab
. Để thay đổi mục tiêu hệ thống mặc định, ta có thể thêm tùy chọn systemd.unit
vào danh sách tham số hạt nhân. Ví dụ: để sử dụng multi-user.target
làm mục tiêu tiêu chuẩn, tham số hạt nhân sẽ phải là systemd.unit=multi-user.target
. Tất cả các tham số hạt nhân có thể được duy trì bằng cách thay đổi cấu hình trình tải khởi động.
Một cách khác để thay đổi mục tiêu mặc định là sửa đổi liên kết tượng trưng /etc/systemd/system/default.target
để nó trỏ đến mục tiêu mong muốn. Việc xác định lại liên kết có thể được thực hiện bằng chính lệnh systemctl
:
# systemctl set-default multi-user.target
Tương tự, ta có thể xác định mục tiêu khởi động mặc định của hệ thống bằng lệnh sau:
$ systemctl get-default graphical.target
Tương tự như các hệ thống sử dụng SysV, mục tiêu mặc định không bao giờ nên trỏ đến shutdown.target
vì nó tương ứng với mức chạy 0 (tắt máy).
Ta có thể tìm thấy các tệp cấu hình được liên kết với mọi đơn vị trong thư mục /lib/systemd/system/
. Lệnh systemctl list-unit-files
sẽ liệt kê tất cả các đơn vị khả dụng và hiển thị nếu chúng được kích hoạt để khởi động khi hệ thống khởi động. Tùy chọn --type
sẽ chỉ chọn các đơn vị cho một loại nhất định (như trong systemctl list-unit-files --type=service
và systemctl list-unit-files --type=target
).
Các đơn vị đang hoạt động hoặc các đơn vị đã hoạt động trong phiên hệ thống hiện tại có thể được liệt kê bằng lệnh systemctl list-units
. Giống như tùy chọn list-unit-files
, lệnh systemctl list-units --type=service
sẽ chỉ chọn các đơn vị thuộc loại service
và lệnh systemctl list-units --type=target
sẽ chỉ chọn các đơn vị thuộc loại target
.
systemd cũng chịu trách nhiệm kích hoạt và phản hồi các sự kiện liên quan đến nguồn điện. Lệnh systemctl suspend
sẽ đặt hệ thống ở chế độ năng lượng thấp và giữ dữ liệu hiện tại trong bộ nhớ. Lệnh systemctl hibernate
sẽ sao chép tất cả dữ liệu bộ nhớ vào đĩa để trạng thái hiện tại của hệ thống có thể được khôi phục sau khi tắt nguồn. Các hành động liên quan đến các sự kiện như vậy sẽ được xác định trong tệp /etc/systemd/logind.conf
hoặc trong các tệp riêng biệt bên trong thư mục /etc/systemd/logind.conf.d/
. Tuy nhiên, tính năng systemd này chỉ có thể được sử dụng khi không có trình quản lý năng lượng nào khác đang chạy trong hệ thống, chẳng hạn như trình nền acpid
. Trình nền acpid
là trình quản lý năng lượng chính cho Linux và sẽ cho phép điều chỉnh tốt hơn các hành động sau các sự kiện liên quan đến năng lượng như đóng nắp máy tính xách tay, pin yếu hoặc mức sạc pin.
Upstart
Các tệp lệnh khởi tạo được Upstart sử dụng sẽ nằm trong thư mục /etc/init/
. Các dịch vụ hệ thống có thể được liệt kê bằng lệnh initctl list
. Lệnh này cũng hiển thị trạng thái hiện tại của các dịch vụ và số PID của chúng (nếu có).
# initctl list avahi-cups-reload stop/waiting avahi-daemon start/running, process 1123 mountall-net stop/waiting mountnfs-bootclean.sh start/running nmbd start/running, process 3085 passwd stop/waiting rc stop/waiting rsyslog start/running, process 1095 tty4 start/running, process 1761 udev start/running, process 1073 upstart-udev-bridge start/running, process 1066 console-setup stop/waiting irqbalance start/running, process 1842 plymouth-log stop/waiting smbd start/running, process 1457 tty5 start/running, process 1764 failsafe stop/waiting
Mọi hành động Upstart đều có lệnh độc lập của riêng nó. Ví dụ: lệnh start
có thể được sử dụng để khởi tạo cửa sổ dòng lệnh ảo thứ sáu:
# start tty6
Trạng thái hiện tại của tài nguyên có thể được xác minh bằng lệnh status
:
# status tty6 tty6 start/running, process 3282
Và việc gián đoạn một dịch vụ có thể được thực hiện bằng lệnh stop
:
# stop tty6
Upstart không sử dụng tệp /etc/inittab
để xác định các mức chạy, nhưng các lệnh kế thừa runlevel
và telinit
vẫn có thể được sử dụng để xác minh và luân phiên giữa các mức chạy.
Note
|
Upstart được phát triển cho bản phân phối Ubuntu Linux để giúp tạo điều kiện khởi động song song các tiến trình. Ubuntu đã ngừng sử dụng Upstart từ năm 2015 và chuyển từ Upstart sang systemd. |
Tắt máy và Khởi động lại
Một lệnh rất truyền thống được sử dụng để tắt hoặc khởi động lại hệ thống được gọi là shutdown
. Lệnh shutdown
sẽ bổ sung các chức năng cho tiến trình tắt nguồn: lệnh này sẽ tự động thông báo cho tất cả những người dùng đã đăng nhập bằng thông báo cảnh báo trong các phiên vỏ của họ và các lần đăng nhập mới sẽ bị ngăn chặn. Lệnh shutdown
đóng vai trò trung gian cho các quy trình SysV hoặc systemd, nghĩa là nó sẽ thực thi hành động được yêu cầu bằng cách gọi hành động tương ứng trong trình quản lý dịch vụ đã được hệ thống thông qua.
Sau khi shutdown
được thực thi, tất cả các tiến trình đều sẽ nhận được lần lượt tín hiệu SIGTERM
và SIGKILL
. Sau đó, hệ thống sẽ tắt hoặc thay đổi mức chạy của nó. Theo mặc định, khi cả hai tùy chọn -h
hoặc -r
đều không được sử dụng, hệ thống sẽ chuyển sang mức chạy 1, nghĩa là chế độ một người dùng. Để thay đổi các tùy chọn mặc định cho shutdown
, lệnh phải được thực hiện theo cú pháp sau:
$ shutdown [option] time [message]
Chỉ có tham số time
là bắt buộc. Tham số time
sẽ xác định khi nào hành động được yêu cầu được thực thi. Nó sẽ chấp nhận các định dạng sau:
hh:mm
-
Định dạng này chỉ định thời gian thực hiện là giờ (h) và phút (m).
+m
-
Định dạng này chỉ định số phút chờ trước khi thực thi.
now
or+0
-
Định dạng này xác định việc thực thi ngay lập tức.
Tham số message
là văn bản cảnh báo được gửi tới tất cả các phiên cửa sổ dòng lệnh của những người dùng đã đăng nhập.
Việc triển khai SysV cho phép giới hạn người dùng có thể khởi động lại máy bằng cách nhấn Ctrl+Alt+Del. Điều này có thể thực hiện được bằng cách đặt tùy chọn -a
cho lệnh shutdown
ở dòng liên quan đến ctrlaltdel
trong tệp /etc/inittab
. Bằng cách này, chỉ những người dùng có tên người dùng nằm trong tệp /etc/shutdown.allow
mới có thể khởi động lại hệ thống bằng tổ hợp phím Ctrl+Alt+Del.
Lệnh systemctl
cũng có thể được sử dụng để tắt hoặc khởi động lại máy trong các hệ thống sử dụng systemd. Để khởi động lại hệ thống, ta nên sử dụng lệnh systemctl reboot
. Để tắt hệ thống, ta nên sử dụng lệnh systemctl poweroff
. Cả hai lệnh đều yêu cầu quyền gốc để chạy vì người dùng thông thường không thể thực hiện các tiến trình đó.
Note
|
Một số bản phân phối Linux sẽ liên kết $ sudo which poweroff /usr/sbin/poweroff $ sudo ls -l /usr/sbin/poweroff lrwxrwxrwx 1 root root 14 Aug 20 07:50 /usr/sbin/poweroff -> /bin/systemctl |
Không phải hoạt động bảo trì nào cũng sẽ yêu cầu tắt hoặc khởi động lại hệ thống. Tuy nhiên, khi cần thay đổi trạng thái của hệ thống sang chế độ một người dùng, điều quan trọng là phải cảnh báo những người dùng đã đăng nhập để họ không bị tổn hại do các hoạt động của họ sẽ bị chấm dứt đột ngột.
Tương tự như cách lệnh shutdown
thực hiện khi tắt nguồn hoặc khởi động lại hệ thống, lệnh wall
có thể gửi thông báo đến các phiên cửa sổ dòng lệnh của tất cả người dùng đã đăng nhập. Để làm như vậy, quản trị viên hệ thống chỉ cần cung cấp tệp hoặc viết trực tiếp thông báo dưới dạng tham số cho lệnh wall
.
Bài tập Hướng dẫn
-
Làm thế nào để lệnh
telinit
có thể được sử dụng để khởi động lại hệ thống? -
Điều gì sẽ xảy ra với các dịch vụ liên quan đến tệp
/etc/rc1.d/K90network
khi hệ thống tiến vào mức chạy 1? -
Bằng cách sử dụng lệnh
systemctl
, làm cách nào để người dùng có thể xác minh xem đơn vịsshd.service
có đang chạy hay không? -
Trong một hệ thống dựa trên systemd, lệnh nào phải được thực thi để cho phép kích hoạt đơn vị
sshd.service
trong quá trình khởi tạo hệ thống?
Bài tập Mở rộng
-
Trong hệ thống dựa trên SysV, giả sử mức chạy mặc định được xác định trong
/etc/inittab
là 3 nhưng hệ thống luôn bắt đầu ở mức chạy 1. Nguyên nhân có thể là gì? -
Mặc dù có thể tìm thấy tệp
/sbin/init
trong các hệ thống dựa trên systemd nhưng nó chỉ là một liên kết tượng trưng đến một tệp thực thi khác. Trong các hệ thống như vậy, tệp được trỏ bởi/sbin/init
là gì? -
Làm cách nào để xác minh mục tiêu hệ thống mặc định trong hệ thống dựa trên systemd?
-
Làm cách nào để hủy khởi động lại hệ thống đã lên lịch bằng cách sử dụng lệnh
shutdown
?
Tóm tắt
Nội dung bài học này bao gồm các tiện ích chính được sử dụng làm trình quản lý dịch vụ của các bản phân phối Linux. Mỗi tiện ích như SysVinit, systemd và Upstart đều có cách tiếp cận riêng để kiểm soát các dịch vụ hệ thống và trạng thái hệ thống. Bài học đã đi qua các chủ đề sau:
-
Dịch vụ hệ thống là gì và vai trò của chúng trong hệ điều hành.
-
Khái niệm và cách sử dụng cơ bản của các lệnh SysVinit, systemd và Upstart.
-
Cách chính xác để khởi động, dừng và khởi động lại các dịch vụ hệ thống và chính hệ thống.
Các lệnh và tiến trình đã được nhắc tới là:
-
Các lệnh và tệp liên quan đến SysVinit, như
init
,/etc/inittab
vàtelinit
. -
Lệnh systemd chính:
systemctl
. -
Các lệnh khởi động:
initctl
,status
,start
,stop
. -
Các lệnh quản lý năng lượng truyền thống như
shutdown
và lệnhwall
.
Đáp án Bài tập Hướng dẫn
-
Làm thế nào để lệnh
telinit
có thể được sử dụng để khởi động lại hệ thống?Lệnh
telinit 6
sẽ chuyển sang mức chạy 6, tức là khởi động lại hệ thống. -
Điều gì sẽ xảy ra với các dịch vụ liên quan đến tệp
/etc/rc1.d/K90network
khi hệ thống tiến vào mức chạy 1?Do có chữ
K
ở đầu tên tệp nên các dịch vụ liên quan sẽ bị dừng. -
Bằng cách sử dụng lệnh
systemctl
, làm cách nào để người dùng có thể xác minh xem đơn vịsshd.service
có đang chạy hay không?Với lệnh
systemctl status sshd.service
hoặcsystemctl is-active sshd.service
. -
Trong một hệ thống dựa trên systemd, lệnh nào phải được thực thi để cho phép kích hoạt đơn vị
sshd.service
trong quá trình khởi tạo hệ thống?Lệnh
systemctl enable sshd.service
được thực thi bởi siêu người dùng.
Đáp án Bài tập Mở rộng
-
Trong hệ thống dựa trên SysV, giả sử mức chạy mặc định được xác định trong
/etc/inittab
là 3 nhưng hệ thống luôn bắt đầu ở mức chạy 1. Nguyên nhân có thể là gì?Các tham số
1
hoặcS
có thể có trong danh sách tham số của hạt nhân. -
Mặc dù có thể tìm thấy tệp
/sbin/init
trong các hệ thống dựa trên systemd nhưng nó chỉ là một liên kết tượng trưng đến một tệp thực thi khác. Trong các hệ thống như vậy, tệp được trỏ bởi/sbin/init
là gì?Nhị phân systemd chính:
/lib/systemd/systemd
. -
Làm cách nào để xác minh mục tiêu hệ thống mặc định trong hệ thống dựa trên systemd?
Liên kết tượng trưng
/etc/systemd/system/default.target
sẽ trỏ đến tệp đơn vị được xác định là mục tiêu mặc định. Lệnhsystemctl get-default
cũng có thể được sử dụng. -
Làm cách nào để hủy khởi động lại hệ thống đã lên lịch bằng cách sử dụng lệnh
shutdown
?Nên sử dụng lệnh
shutdown -c
.