TÌM HIỂU VỀ HỆ ĐIỀU HÀNH LINUX
1. Tổng quan về Linux
Linux là một hệ điều hành mã nguồn mở, được phát triển dựa trên nhân Linux. Nhân Linux kết hợp với các GNU( General Puclic License ) để trở thành một hệ điều hành hoàn chỉnh. Linux nổi bật với tính ổn định, bảo mật cao và khả năng tùy chỉnh linh hoạt. Linux được sử dụng rộng rãi trên nhiều nền tảng, từ máy chủ, siêu máy tính, thiết bị nhúng đến máy tính cá nhân và điện thoại.

2. Đặc điểm của Linux
3.1. Monolithic kernel:
- Chức năng: Quản lý các tiến trình (processes) và luồng (threads), bao gồm lập lịch (scheduling), tạo, hủy, và đồng bộ hóa.
- Cơ chế:
- Chức năng: Quản lý bộ nhớ vật lý và bộ nhớ ảo, đảm bảo các tiến trình không xung đột.
- Cơ chế:
- Chức năng: Quản lý lưu trữ dữ liệu trên ổ cứng, USB, hoặc các thiết bị khác.
- Cơ chế:
- Chức năng: Quản lý phần cứng như CPU, ổ cứng, GPU, và thiết bị ngoại vi.
- Cơ chế:
- Chức năng: Xử lý giao tiếp mạng, từ truyền gói tin đến kết nối internet.
- Cơ chế:
- Linux cho phép tải hoặc gỡ bỏ các mô-đun nhân (.ko files) trong thời gian thực mà không cần khởi động lại hệ thống.
- Công cụ như modprobe hoặc lsmod hỗ trợ quản lý mô-đun.
3.2. Linux Userland:
- Sử dụng GNU tools (bash, coreutils, glibc).
- Shell scripting cực kỳ mạnh (bash, zsh, fish): đóng vai trò như một trình thông dịch lệnh, giúp người dùng tương tác với kernel và thực thi chương trình.
- Có 2 loại shell chính:
Zsh (Z Shell): nâng cao hơn Bash (theme, plugin qua Oh-My-Zsh). Mặc định trên macOS từ Catalina.
Ksh (Korn Shell): phổ biến trong Unix thương mại (AIX, Solaris).
Fish (Friendly Interactive SHell):Gợi ý lệnh thông minh, dễ dùng cho người mới.
FileSystem: hệ thống file: các thiết bị phần cứng, quy trình, socket mạng, và cả dữ liệu đều được biểu diễn dưới dạng tệp hoặc thư mục. Điều này giúp Linux quản lý tài nguyên một cách thống nhất và linh hoạt.
- Cấu trúc phân cấp: Tất cả bắt đầu từ thư mục gốc (/), các thư mục con được tổ chức theo cây thư mục.
- Tính mô-đun: Linux hỗ trợ nhiều loại filesystem (ext4, Btrfs, XFS, v.v.), có thể được gắn (mount) vào hệ thống tại các điểm khác nhau.
- POSIX tuân thủ: Hệ thống tệp Linux tuân theo chuẩn POSIX, đảm bảo tính tương thích với các hệ thống Unix-like.
3.2.1. Cấu trúc thư mục chuẩn (Filesystem Hierarchy Standard - FHS)
FHS định nghĩa cách tổ chức các thư mục trong Linux để đảm bảo tính nhất quán giữa các bản phân phối. Dưới đây là các thư mục quan trọng và vai trò của chúng:
1. Tổng quan về Linux
Linux là một hệ điều hành mã nguồn mở, được phát triển dựa trên nhân Linux. Nhân Linux kết hợp với các GNU( General Puclic License ) để trở thành một hệ điều hành hoàn chỉnh. Linux nổi bật với tính ổn định, bảo mật cao và khả năng tùy chỉnh linh hoạt. Linux được sử dụng rộng rãi trên nhiều nền tảng, từ máy chủ, siêu máy tính, thiết bị nhúng đến máy tính cá nhân và điện thoại.
2. Đặc điểm của Linux
- Mã nguồn mở: người dùng có thể phát triển ứng dụng, chỉnh sửa, phân phối lại.
- Đa dạng distro: hàng trăm bản phân phối phục vụ các nhu cầu khác nhau.
- Tương thích Unix: Linux tuân theo chuẩn POSIX, tương thích với nhiều công cụ Unix.
- Miễn phí: hầu hết các distro đều miễn phí, một số như RHEL coshoox trợ trả phí.
- Bảo mật: cơ chế phân quyền file, SELinux, AppArmor, firewall mạnh mẽ ( iptables, nftables).
- Đa nhiệm: một lúc chạy nhiều tiến trình.
- Ổn định và tin cậy: máy chủ Linux uptime hàng năm không cần reboot.
- Mạng: hỗ trợ TCP/IP Stack ngay trong kernel. Các dịch vụ mạng như DNS, Web Server, VPN Server chạy rất tốt trên Linux
- Tùy biến cao: có thể build một hệ thống Linux cực nhẹ hoặc cực nặng, có thể rebuild kernel để tối ưu phần cứng riêng.
- Hệ thống tập tin mạnh mẽ: filesystem hiện địa: ext4, xfs, btrfs, zsf.
- Hệ thống package quản lý phần mềm: apt ( Ubuntu/Debian), yum/dnf ( CentOS/RedHat), pacman (Arch Linux).
- Khả năng ảo hóa & container: linux hỗ trợ KVM ( kernel virtual machine), LXC ( linux container), Docker, Podman, OpenVZ. Cơ sở cho toàn bộ ngành công nghệ cloud hiện đại.
- Tiêu thụ tài nguyên thấp: Linux hoạt động tốt trên cả máy tính yếu.
3.1. Monolithic kernel:
- Chịu trách nhiệm quản lý phần cứng và cung cấp các dịch vụ cơ bản cho phần mềm.
- Tất cả các chức năng chính ( driver, memory, management) chạy trong kernel.
- Có khả năng modilar loading ( module kernel có thể thêm/bớt runtime).
- Các thành phần chính của Linux kernel
- Chức năng: Quản lý các tiến trình (processes) và luồng (threads), bao gồm lập lịch (scheduling), tạo, hủy, và đồng bộ hóa.
- Cơ chế:
- Linux sử dụng preemptive multitasking, cho phép hệ thống ngắt một tiến trình để chuyển sang tiến trình khác, tối ưu hóa hiệu suất CPU.
- Lập lịch tiến trình dựa trên thuật toán như CFS (Completely Fair Scheduler), đảm bảo phân bổ tài nguyên công bằng.
- Mỗi tiến trình được gán một PID (Process ID) và có không gian địa chỉ riêng, được bảo vệ bởi cơ chế virtual memory.
- Giao tiếp giữa các tiến trình (IPC): Bao gồm pipe, semaphore, message queue, và shared memory.
- Chức năng: Quản lý bộ nhớ vật lý và bộ nhớ ảo, đảm bảo các tiến trình không xung đột.
- Cơ chế:
- Bộ nhớ ảo (Virtual Memory): Mỗi tiến trình có không gian địa chỉ riêng, được ánh xạ tới bộ nhớ vật lý hoặc bộ nhớ swap trên ổ cứng.
- Phân trang (Paging): Bộ nhớ được chia thành các trang (pages) nhỏ, thường 4KB, để quản lý hiệu quả.
- Swap Space: Khi RAM đầy, các trang ít sử dụng được chuyển sang ổ cứng.
- Memory Allocation: Sử dụng các cơ chế như slab allocator để cấp phát bộ nhớ động cho nhân và tiến trình.
- Bảo vệ bộ nhớ: Ngăn chặn truy cập trái phép giữa các tiến trình bằng cơ chế MMU (Memory Management Unit).
- Chức năng: Quản lý lưu trữ dữ liệu trên ổ cứng, USB, hoặc các thiết bị khác.
- Cơ chế:
- Linux hỗ trợ nhiều hệ thống tập tin như ext4, XFS, Btrfs, FAT32, NTFS.
- Virtual File System (VFS): Một lớp trừu tượng cho phép nhân tương tác với các hệ thống tập tin khác nhau một cách thống nhất.
- Inode: Cấu trúc dữ liệu lưu trữ thông tin về tệp (quyền, kích thước, vị trí).
- Mounting: Gắn các hệ thống tập tin vào cây thư mục gốc (/).
- Chức năng: Quản lý phần cứng như CPU, ổ cứng, GPU, và thiết bị ngoại vi.
- Cơ chế:
- Device Drivers: Mô-đun giao tiếp giữa nhân và phần cứng. Linux hỗ trợ hàng nghìn driver, từ card mạng đến cảm biến IoT.
- /dev Directory: Các tệp đặc biệt (như /dev/sda, /dev/tty) đại diện cho thiết bị.
- udev: Hệ thống quản lý thiết bị động, tự động phát hiện và cấu hình thiết bị khi được kết nối.
- Chức năng: Xử lý giao tiếp mạng, từ truyền gói tin đến kết nối internet.
- Cơ chế:
- Network Stack: Dựa trên mô hình TCP/IP, xử lý các giao thức như HTTP, FTP, DNS.
- Netfilter: Framework cho phép lọc gói tin, NAT, và firewall (như iptables hoặc nftables).
- Socket: Giao diện lập trình để các ứng dụng giao tiếp qua mạng.
- Linux cho phép tải hoặc gỡ bỏ các mô-đun nhân (.ko files) trong thời gian thực mà không cần khởi động lại hệ thống.
- Công cụ như modprobe hoặc lsmod hỗ trợ quản lý mô-đun.
3.2. Linux Userland:
- Sử dụng GNU tools (bash, coreutils, glibc).
- Shell scripting cực kỳ mạnh (bash, zsh, fish): đóng vai trò như một trình thông dịch lệnh, giúp người dùng tương tác với kernel và thực thi chương trình.
- Có 2 loại shell chính:
- Bourne Shell Compatible (sh-style)
Zsh (Z Shell): nâng cao hơn Bash (theme, plugin qua Oh-My-Zsh). Mặc định trên macOS từ Catalina.
Ksh (Korn Shell): phổ biến trong Unix thương mại (AIX, Solaris).
- C Shell Compatible (csh-style)
Fish (Friendly Interactive SHell):Gợi ý lệnh thông minh, dễ dùng cho người mới.
FileSystem: hệ thống file: các thiết bị phần cứng, quy trình, socket mạng, và cả dữ liệu đều được biểu diễn dưới dạng tệp hoặc thư mục. Điều này giúp Linux quản lý tài nguyên một cách thống nhất và linh hoạt.
- Cấu trúc phân cấp: Tất cả bắt đầu từ thư mục gốc (/), các thư mục con được tổ chức theo cây thư mục.
- Tính mô-đun: Linux hỗ trợ nhiều loại filesystem (ext4, Btrfs, XFS, v.v.), có thể được gắn (mount) vào hệ thống tại các điểm khác nhau.
- POSIX tuân thủ: Hệ thống tệp Linux tuân theo chuẩn POSIX, đảm bảo tính tương thích với các hệ thống Unix-like.
3.2.1. Cấu trúc thư mục chuẩn (Filesystem Hierarchy Standard - FHS)
FHS định nghĩa cách tổ chức các thư mục trong Linux để đảm bảo tính nhất quán giữa các bản phân phối. Dưới đây là các thư mục quan trọng và vai trò của chúng:
- / (Root): Thư mục gốc, chứa tất cả các thư mục và tệp khác.
- /bin: Chứa các tệp thực thi (binary) cơ bản cần thiết cho hệ thống, như ls, cp, cat. Dùng trong chế độ single-user hoặc khi khởi động.
- /sbin: Chứa các tệp thực thi hệ thống, dùng bởi quản trị viên, như fdisk, reboot.
- /etc: Chứa tệp cấu hình hệ thống, ví dụ:
- /etc/fstab: Danh sách các điểm gắn filesystem.
- /etc/passwd: Thông tin người dùng.
- /etc/hosts: Ánh xạ tên miền và địa chỉ IP.
- /home: Thư mục cá nhân của người dùng, ví dụ /home/username. Mỗi người dùng có thư mục riêng để lưu trữ dữ liệu.
- /var: Chứa dữ liệu thay đổi trong quá trình hoạt động, như:
- /var/log: Nhật ký hệ thống (syslog, messages).
- /var/cache: Bộ nhớ đệm ứng dụng.
- /var/www: Dữ liệu web server.
- /tmp: Thư mục lưu trữ tệp tạm thời, thường bị xóa khi khởi động lại.
- /dev: Chứa các tệp thiết bị, đại diện cho phần cứng:
- /dev/sda: Ổ cứng hoặc SSD.
- /dev/null: “Hố đen” để bỏ qua đầu ra.
- /dev/random: Tạo số ngẫu nhiên.
- /proc: Hệ thống tệp ảo, chứa thông tin về quy trình và hệ thống:
- /proc/cpuinfo: Thông tin CPU.
- /proc/meminfo: Thông tin bộ nhớ.
- /proc/[PID]: Thông tin về quy trình với ID cụ thể.
- /sys: Hệ thống tệp ảo khác, cung cấp thông tin về kernel và thiết bị (sysfs).
- /usr: Chứa dữ liệu không cần thiết khi khởi động:
- /usr/bin: Các chương trình người dùng.
- /usr/lib: Thư viện chia sẻ.
- /usr/local: Phần mềm tự biên dịch hoặc cài đặt thủ công.
- /boot: Chứa các tệp cần thiết để khởi động, như kernel (vmlinuz), initramfs, và cấu hình GRUB.
- /mnt và /media: Điểm gắn tạm thời cho thiết bị ngoài (USB, ổ cứng). /media thường dùng cho thiết bị gắn tự động.
- /opt: Chứa phần mềm tùy chọn, thường là phần mềm thương mại.
- /root: Thư mục cá nhân của người dùng root.