Bài viết này sẽ giới thiệu các bạn về nhân Linux (Linux kernel) cùng với các tiến trình init và các dịch dụ của Linux.
1. Nhân Linux ( Linux Kernel)
Nhân Linux ( Linux kernel ) là một hạt nhân monolithic cho các hệ điều hành tương tự Unix. Hệ điều hành Linux dựa trên hạt nhân này và được triển khai trên cả hai hệ thống máy tính: máy tính có nhân và hệ thống máy chủ.
Nhân Linux ( Linux Kernel ) sau khi được boot loader nạp thì nó tự giải nén và tự cài đặt lên bộ nhớ hệ thống nơi mà nó nằm ở đó cho đến khi tắt máy.
Khi nhân ( kernel ) được nạp vào RAM, thì ngay lập tức sẽ khởi tạo và cấu hình bộ nhớ của máy tính và cũng cấu hình tất cả các phần cứng được gắn vào hệ thống. Việc làm này bao gồm tất cả các bộ vi xử lý, các hệ thống phụ I/O, các thiết bị lưu trữ,… Nhân ( kernel ) cũng tải một số ứng dụng không gian mà người dùng cần.
2. Tổng quan về tiến trình /sbin/init
Sau khi chọn kernel trong file cấu hình của boot loader, hệ thống sẽ tự động nạp chương trình init trong thư mục /sbin.
Tiến trình này có ID = 1 Init là cha của tất cả các tiến trình khác mà có trên hệ thống Linux.
Lưu ý: Không dược sử dụng lệnh kill đối với init này.
Init xử lý việc gắn và xoay vòng vào hệ thống tập tin gốc thực sự cuối cùng.
2.1. File cấu hình run level /etc/inittab
- Runlevel 0: Level Shutdown hệ thống.
- Runlevel 1: Level chỉ dùng cho 1 người dùng để sửa lỗi hệ thống tập tin.
- Runlevel 2: Không sử dụng.
- Runlevel 3: Level dùng cho nhiều người dùng nhưng chỉ giao tiếp dạng text (không có giao diện).
- Runlevel 4: Không sử dụng.
- Runlevel 5: Level dùng cho nhiều người dùng và được cung cấp giao diện đồ họa.
- Runlevel 6: Level Reboot hệ thống.
Sau khi xác định run level. Chương trình /sbin/init sẽ thực thi các file statup script được đặt trong các thư mục con của thư mục /etc/rc.d.
Script sử dụng run level từ 0 đến 6 để xác định thư mục chứa file script chỉ định cho từng level như: /etc/rc.d/rc0.d đến /etc/rc.d/rc6.d.
Bên cạnh việc khởi động hệ thống, init có trách nhiệm giữ cho hệ thống hoạt động và tắt. Một trong những nhiệm vụ của nó là hành động khi cần thiết như một người quản lý cho tất cả các quy trình nhân ( kernel ). Init sẽ dọn dẹp sau khi hoàn thành, và khởi động lại dịch vụ đăng nhập của người dùng khi cần thiết khi người dùng đăng nhập và đăng xuất, và thực hiện cho các dịch vụ hệ thống nền khác.
3. Tổng quan về systemd
Các bản Linux hiện đại như CENTOS 7, RHEL 7 gần đây 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ẽ mất 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.
3.1. Các thành phần của Systemd
Về cơ bản thì systemd tương đương với một chương trình quản lý hệ thống và các dịch vụ trong Linux. Nó cung cấp một số các tiện ích như sau
systemctl
: dùng để quản lý trạng thái của các dịch vụ hệ thống (bắt đầu, kết thúc, khởi động lại hoặc kiểm tra trạng thái hiện tại)journald
: dùng để quản lý nhật ký hoạt động của hệ thống (hay còn gọi là ghi log)logind
: dùng để quản lý và theo dõi việc đăng nhập/đăng xuất của người dùngnetworkd
: dùng để quản lý các kết nối mạng thông qua các cấu hình mạngtimedated
: dùng để quản lý thời gian hệ thống hoặc thời gian mạngudev
: dùng để quản lý các thiết bị và firmware
Systemd sẽ bắt đầu mọi thứ trong file /etc/systemd/system/basic.target trước khi bắt đầu multi-user service.
Systemd sử dụng mục tiêu thay vì runlevel. Systemd có hai mục tiêu chính: multi-user.target và graphical.target tương ứng với runlevel 3 và runlevel 5.
Systemd là một chương trình quản lý rất nhiều tính năng, giúp cho việc quản lý hệ thống trở nên dễ dàng hơn.
4. Các kiểu startup
Để xem, khởi động, dừng, khởi động lại, bật hoặc tắt các dịch vụ hệ thống, sử dụng systemctl lệnh được mô tả bên dưới. Các lệnh service và chkconfig vẫn có trong hệ thống và hoạt động như mong đợi.
Các đơn vị dịch vụ kết thúc với .service phần mở rộng của tệp và phục vụ một mục đích tương tự như các tập lệnh init.
4.1. Systemctl
systemctl start name.service
: Bắt đầu 1 dịch vụ.
systemctl stop name.service
: Dừng một dịch dụ.
systemctl restart name.service
: Thoát và bắt đầu dịch vụ.
systemctl reload name.service
: Tải lại cấu hình.
systemctl status name.service
: Kiểm tra dịch vụ có hoạt động hay không.
systemctl enable name.service
: Bật dịch vụ khởi động cùng với hệ thống.
systemctl disable name.service
: Tắt dịch vụ.
systemctl try-restart name.service
: Chỉ khởi động lại một dịch vụ nếu nó đang chạy.
4.1.1. Ví dụ mở dịch vụ httpd bằng systemd:
Chúng ta dùng để mở httpd: systemctl start httpd
Sau đó kiểm tra httpd hoạt động chưa dùng: systemctl status httpd
4.2. Service
service name start
: Bắt đầu một dịch vụ
service name stop
: Dừng một dịch vụ
service name restart
: Thoát và bắt đầu dịch vụ.
service name reload
: Tải lại cấu hình.
service name status
: Kiểm tra dịch vụ có hoạt động hay không.
service name condrestart
: Chỉ khởi động lại một dịch vụ nếu nó đang chạy.
4.2.1. Ví dụ mở dịch vụ mysql bằng service:
Chúng ta dùng để mở httpd: service mysql start
Sau đó kiểm tra httpd hoạt động chưa dùng: service mysql status
4.3. Chkconfig
chkconfig name on
: Bật dịch vụ.
chkconfig name off
: Tắt dịch vụ.
chkconfig --list name
: Kiểm tra xem một dịch vụ có được kích hoạt không.
chkconfig --list
: Liệt kê tất cả các dịch vụ và kiểm tra nếu chúng được kích hoạt.