Chúng tôi lựa chọn chủ đề "Phát triển Mini Shell và các chức năng mở rộng" vì shell là một thành phần cốt lõi trong hệ điều hành, đặc biệt là trong các hệ thống dựa trên Unix/Linux.. Vi
Trang 10
TRƯỜNG ĐẠI HỌC VĂN LANG
KHOA CÔNG NGHỆ THÔNG TIN
Đồ án phát triển mini shell và chức năng
mở rộng(TC64)
( ) ())(
BÁO CÁO ĐỒ ÁN MÔN HỌC HK242
HỆ ĐIỀU HÀNH VÀ LẬP TRÌNH LINUX (242_71ITNW30203)
Nhóm sinh viên thực hiện (Họ tên – Mã SV):
1 Nguyễn Minh Quân – 2274802010723 (Trưởng nhóm)
2 Nguyễn Hữu Duy - 2274802010117
3 Nguyễn Nhật Phát – 2274802010632
4 Phạm Khánh Tài - 2274802010776
TP Hồ Chí Minh – năm 2025
Trang 21
MỤC LỤC
MỞ ĐẦU 3
1 Lí do chọn Chủ đề 3
2 Những lợi ích của việc phát triển mini shell và các chức năng mở rộng 3
a Kiến thức về hệ điều hành 3
b Quản lý tiến trình và tài nguyên 4
c Tính cô lập và bảo mật: 4
d Quản lý tiến trình và môi trường làm việc: 4
e Tính linh hoạt và mở rộng: 4
3 Đối tượng, phạm vi tìm hiểu 5
a Người sử dụng (Users): 5
b Quản lý người dùng và nhóm trong mini shell 5
c Cơ chế phân quyền và truy cập trong mini shell 6
4 Phương pháp thực hiện 6
a Thu thập và quản lý dữ liệu trong mini shell 8
b Phân tích và quản lý người dùng trong mini shell 8
c Quản lý người dùng trong môi trường mini shell mở rộng 9
5 Bảng phân công nhóm 10
CHƯƠNG 1: GIỚI THIỆU CHỦ ĐỀ ĐỒ ÁN 11
1 Khái quát nội dung lý thuyết cơ bản 11
2 Các tính năng mở rộng trong Mini Shell 12
3 Ý nghĩa và ứng dụng của Mini Shell trong lập trình hệ thống 13
CHƯƠNG 2: KẾT QUẢ THỰC HIỆN 15
1 Công cụ và môi trường phát triển 15
2 Các bước thực hiện 16
2.1 Thiết kế cấu trúc và tính năng của Mini Shell: 16
2.2 Xử lý lệnh và xử lý lỗi: 16
2.3 Quản lý tiến trình nền: 16
2.4 Quản lý lịch sử lệnh: 16
2.5 Kiểm thử và gỡ lỗi: 17
Trang 32
3 Phát triển các chức năng mở rộng 17
4 Kết quả thực hiện 17
4.1 Biên dịch tệp và kết nối tệp 17
4.2 Thực thi lệnh: 17
4.3 Hiệu quả của các tính năng mở rộng 20
KẾT LUẬN VÀ ĐỀ XUẤT 22
Trang 43
MỞ ĐẦU
1 Lí do chọn Chủ đề
Chúng tôi lựa chọn chủ đề "Phát triển Mini Shell và các chức năng mở rộng" vì shell
là một thành phần cốt lõi trong hệ điều hành, đặc biệt là trong các hệ thống dựa trên
Unix/Linux Shell là một chương trình đóng vai trò như trình thông dịch lệnh
(command-line interpreter), cho phép người dùng tương tác trực tiếp với hệ điều hành thông qua các câu lệnh văn bản Đây là công cụ cực kỳ mạnh mẽ, hỗ trợ thực thi chương trình, quản lý tiến trình, thao tác với file hệ thống, và tự động hóa tác vụ thông qua scripting
Việc phát triển một mini shell không chỉ giúp chúng tôi hiểu rõ hơn về nguyên lý hoạt
động của shell, mà còn rèn luyện kỹ năng lập trình hệ thống như xử lý tiến trình (process), tín hiệu (signal), và quản lý bộ nhớ Ngoài ra, quá trình mở rộng mini shell với các tính năng như:
• Thực thi lệnh nền (background processes)
• Hỗ trợ scripting đơn giản
• Xử lý nhiều lệnh cùng lúc (pipeline, redirect)
Hỗ trợ plugin mở rộng sẽ giúp mini shell trở nên linh hoạt và gần với một môi trường shell thực tế Đây cũng là cơ hội để áp dụng kiến thức lý thuyết vào một bài toán thực tiễn, từ
đó nâng cao tư duy hệ thống và khả năng lập trình chuyên sâu
2 Những lợi ích của việc phát triển mini shell và các chức năng mở rộng
Việc xây dựng một mini shell không chỉ mang lại hiểu biết sâu sắc về hệ điều hành mà còn
có nhiều lợi ích thực tế như:
a Kiến thức về hệ điều hành
• Phát triển mini shell giúp hiểu rõ cách hệ điều hành quản lý tiến trình, bộ nhớ
và quyền truy cập
Trang 54
• Giúp lập trình viên làm việc hiệu quả hơn với môi trường Linux thông qua thao tác trực tiếp với hệ thống
b Quản lý tiến trình và tài nguyên
• Shell cung cấp các tính năng như chạy tiến trình nền (background process), điều khiển tín hiệu (signal handling) và quản lý tài nguyên hiệu quả
• Hỗ trợ mở rộng để quản lý quyền truy cập và thực thi lệnh một cách an toàn hơn
• Tạo ra một nền tảng linh hoạt để phát triển các công cụ hỗ trợ lập trình viên hoặc quản trị hệ thống
d Quản lý tiến trình và môi trường làm việc:
• Mini shell có thể hỗ trợ quản lý tiến trình (background & foreground process), cho phép dừng, tiếp tục hoặc hủy tiến trình một cách linh hoạt
• Cung cấp tính năng tùy chỉnh môi trường làm việc như biến môi trường, alias, và scripting để tối ưu hóa thao tác sử dụng
Trang 65
3 Đối tượng, phạm vi tìm hiểu
• Trong hệ điều hành Linux, shell là một thành phần quan trọng giúp người dùng giao
tiếp với hệ thống thông qua dòng lệnh Việc phát triển mini shell không chỉ giúp
hiểu rõ cách hệ điều hành quản lý tiến trình mà còn tạo ra một môi trường tùy chỉnh linh hoạt để thực thi lệnh
• Mini shell có thể được mở rộng với nhiều tính năng như quản lý tiến trình, hỗ trợ scripting, và tích hợp các lệnh nâng cao để tối ưu hóa hiệu suất làm việc
• Đồ án này sẽ tập trung vào nghiên cứu cách xây dựng một mini shell cơ bản và mở rộng các chức năng quan trọng, giúp người dùng quản lý và tương tác với hệ thống hiệu quả hơn
b Quản lý người dùng và nhóm trong mini shell
• Mini shell cần hỗ trợ quản lý người dùng với định danh (UID) và nhóm (GID)
• Thông tin người dùng và nhóm có thể được lưu trữ trong một tập tin cấu hình riêng hoặc sử dụng hệ thống xác thực của Linux
• Việc quản lý nhóm giúp thiết lập quyền truy cập vào tài nguyên trong môi trường shell
Trang 76
• Mini shell có thể bổ sung tùy chọn tương tự group-add trong Docker để thêm người dùng vào nhóm cụ thể
c Cơ chế phân quyền và truy cập trong mini shell
• Mini shell có thể áp dụng cơ chế phân quyền tương tự POSIX để quản lý quyền truy cập vào tệp tin và thư mục
• Hỗ trợ các quyền cơ bản như đọc, ghi, thực thi theo từng cấp độ: chủ sở hữu, nhóm và người khác
• Có thể triển khai chức năng quản lý quyền bằng lệnh nội bộ như chmod, chown, umask
• Mini shell có thể bổ sung tùy chọn tương tự read-only của Docker để hạn chế quyền ghi trên thư mục hoặc tệp tin nhất định
• Phát triển tính năng quản lý người dùng và nhóm: Triển khai các lệnh nội bộ
để tạo, chỉnh sửa, xóa người dùng và nhóm
• Cơ chế phân quyền và bảo mật: Xây dựng mô-đun quản lý quyền truy cập theo POSIX
• Mở rộng chức năng: Hỗ trợ các tính năng bổ sung như xử lý chuỗi lệnh, script nội bộ, hoặc tích hợp với hệ thống Linux
• Xác định và áp dụng quy tắc bảo mật: Đề xuất và thực hiện các quy tắc bảo mật phù hợp cho người dùng và nhóm trong mini shell, bao gồm nguyên tắc
Trang 8• Cơ chế phân quyền và truy cập:
o Mini shell có thể triển khai cơ chế phân quyền theo mô hình POSIX,
hỗ trợ quyền đọc, ghi, thực thi trên tập tin và thư mục
o Hỗ trợ các lệnh nội bộ như chmod, chown, umask để quản lý quyền truy cập
o Cung cấp tính năng hạn chế quyền truy cập với tùy chọn tương tự read-only để chỉ cho phép đọc tệp, giảm thiểu rủi ro bảo mật
• Thực hiện kiểm tra và giám sát:
o Xây dựng các lệnh nội bộ giúp kiểm tra danh sách người dùng, nhóm
và quyền truy cập trong mini shell
o Hỗ trợ ghi log hoạt động của người dùng để tăng cường bảo mật
• Liên tục cải tiến và nâng cao:
o Đánh giá và cải tiến hệ thống quản lý định danh người dùng trong mini shell
o Xây dựng tính năng mở rộng như hỗ trợ xác thực, mã hóa mật khẩu, tích hợp PAM (Pluggable Authentication Modules) để tăng cường bảo mật và hiệu suất
Trang 9b Phân tích và quản lý người dùng trong mini shell
- Thu thập và phân tích dữ liệu
Trang 10- So sánh mô hình quản lý người dùng
• So sánh mô hình quản lý trong mini shell với Linux:
o Phân tích sự tương đồng và khác biệt giữa mô hình quản lý người dùng của mini shell với Linux
o Đánh giá ưu điểm và nhược điểm của từng phương pháp
• So sánh hiệu suất và bảo mật:
o Đánh giá khả năng mở rộng, tính bảo mật và tính linh hoạt của mô hình quản lý người dùng trong mini shell
o Đề xuất phương pháp tối ưu phù hợp với mục tiêu của hệ thống
c Quản lý người dùng trong môi trường mini shell mở rộng
• Phân tích tệp cấu hình người dùng:
o Mini shell có thể hỗ trợ một tệp cấu hình riêng để quản lý danh sách người dùng và nhóm, tương tự như /etc/passwd và /etc/group trên Linux
o Hỗ trợ đọc và thống kê dữ liệu từ tệp cấu hình này để quản lý thông tin người dùng
• Tích hợp quản lý quyền truy cập:
o Mini shell có thể mở rộng với chức năng kiểm soát quyền truy cập bằng cách áp dụng các chính sách bảo mật
o Hỗ trợ phân quyền và kiểm soát hoạt động của từng người dùng theo nguyên tắc least privilege
Trang 1110
5 Bảng phân công nhóm
1 Nguyễn Minh Quân 2274802010723
Tổng hợp nội dung báo cáo, lập trình phần xử lý
lệnh
100%
2 Nguyễn Hữu Duy 2274802010117
Tìm kiếm tài liệu, viết phần lý thuyết và tổng quan shell, mini shell
100%
3 Nguyễn Nhật Phát 2274802010632
Phát triển chức năng quản lý tiến trình nền, lịch sử lệnh, kiểm thử
100%
4 Phạm Khánh Tài 2274802010776
Phát triển các chức năng
mở rộng (plugin, scripting)
100%
Trang 1211
CHƯƠNG 1: GIỚI THIỆU CHỦ ĐỀ ĐỒ ÁN
1 Khái quát nội dung lý thuyết cơ bản
- Trong hệ điều hành Linux, shell là một thành phần quan trọng giúp người dùng giao
tiếp và tương tác với hệ thống thông qua dòng lệnh Shell có thể coi là một giao diện người dùng giữa người và hệ điều hành, cho phép thực hiện các lệnh, quản lý tệp tin, và thực hiện các tác vụ khác nhau
- Mini shell là một phiên bản thu nhỏ của shell, thường được phát triển để giúp người
lập trình hiểu rõ hơn về cách thức hoạt động của các shell thực tế, cũng như cung cấp môi trường thử nghiệm để phát triển các tính năng mở rộng như quản lý tiến trình, xử lý tín hiệu, và thực thi các lệnh
Các thành phần chính trong một shell:
• Command line interface (CLI): Cho phép người dùng nhập lệnh và nhận kết
quả từ hệ thống
• Process Management: Quản lý các tiến trình (process), bao gồm cả tiến trình
nền (background process) và tiến trình nền (foreground process)
• Redirection: Quản lý các thao tác chuyển hướng đầu vào/đầu ra (input/output redirection)
• Pipes: Cho phép kết nối các lệnh với nhau thông qua các ống (pipe) để tạo
chuỗi các thao tác
• Signal Handling: Quản lý các tín hiệu hệ thống (signals) như dừng, tiếp tục,
hoặc thoát khỏi tiến trình
Mini shell thường được sử dụng để tìm hiểu về các nguyên lý cơ bản trong shell như:
• Quản lý tiến trình (chạy lệnh, tiến trình nền)
Trang 1312
• Cách hệ điều hành xử lý các lệnh nhập vào
• Các kỹ thuật quản lý tín hiệu và lỗi
• Cách thực hiện các thao tác chuyển hướng (redirection) và pipeline
a So sánh Shell và Mini-Shell trong Linux
Tiêu chí Shell chuẩn (Bash, Zsh, etc.) Mini-Shell (tự xây dựng)
Tính năng
Đầy đủ: scripting, biến môi trường, điều
kiện, vòng lặp, pipeline, redirect, job
control, plugin
Giới hạn: chỉ hỗ trợ một số tính năng cơ bản như thực thi lệnh, redirect, pipeline (nếu cài thêm)
Hiệu năng Tối ưu và ổn định do được phát triển lâu
dài
Phụ thuộc vào mức độ tối ưu của nhóm phát triển
Tính mở
rộng Rất cao, hỗ trợ plugin, tùy chỉnh
Có thể mở rộng nhưng cần tự thiết kế cơ chế
Khả năng
học hỏi Dùng để học cách sử dụng hệ thống
Dùng để học cách hệ thống vận hành bên
trong Khả năng
tích hợp
Tích hợp tốt với hệ thống và các công cụ
Ưu điểm Mạnh mẽ, đa chức năng, tương thích cao Gọn nhẹ, tùy biến theo mục tiêu học tập
Nhược
điểm Phức tạp nếu muốn hiểu sâu bên trong
Không đầy đủ chức năng, mất thời gian xây dựng lại từ đầu
2 Các tính năng mở rộng trong Mini Shell
- Một mini shell có thể được mở rộng để hỗ trợ nhiều tính năng mạnh mẽ giúp cải thiện trải nghiệm người dùng và khả năng tương tác với hệ thống:
Trang 1413
• Quản lý tiến trình:
o Foreground Process: Lệnh chạy trong chế độ foreground, nghĩa là người dùng cần đợi đến khi lệnh hoàn thành
o Background Process: Lệnh chạy trong chế độ background, nghĩa
là người dùng có thể tiếp tục thực hiện các tác vụ khác trong khi lệnh đang thực thi
• Chuyển hướng đầu vào/đầu ra (Redirection):
o >` (Output Redirection): Chuyển hướng đầu ra của một lệnh vào một tệp tin
o < (Input Redirection): Chuyển hướng đầu vào từ một tệp tin vào lệnh
o >> (Append Redirection): Thêm dữ liệu vào cuối tệp tin thay vì ghi đè
• Pipes (|): Cho phép kết nối đầu ra của một lệnh làm đầu vào cho lệnh tiếp
theo, tạo thành một chuỗi các lệnh
3 Ý nghĩa và ứng dụng của Mini Shell trong lập trình hệ thống
Mini shell không chỉ giúp người dùng hiểu về cách thức hoạt động của các shell thực tế mà còn đóng vai trò quan trọng trong việc phát triển các công cụ và ứng dụng hệ thống Việc phát triển mini shell giúp lập trình viên nắm vững những nguyên lý cơ bản của hệ điều hành Linux, đồng thời tạo ra một môi trường dễ dàng thử nghiệm và mở rộng với các tính năng như:
Trang 1514
• Quản lý hệ thống và tiến trình: Hiểu rõ cách thức hệ điều hành Linux quản
lý tiến trình, tài nguyên hệ thống
• Xử lý lệnh: Nâng cao khả năng xử lý lệnh và tạo ra các công cụ quản lý lệnh tùy chỉnh
• Tích hợp và mở rộng: Mini shell có thể mở rộng bằng cách tích hợp với các công cụ hệ thống hoặc các module, plugin bên ngoài để cải thiện tính năng
và khả năng mở rộng
Trang 1615
CHƯƠNG 2: KẾT QUẢ THỰC HIỆN
1 Công cụ và môi trường phát triển
Trong quá trình phát triển mini shell, các công cụ và môi trường sử dụng gồm có:
• Hệ điều hành: Linux
• Trình biên dịch: GCC (GNU Compiler Collection)
o GCC là chuyển đổi file sang hệ nhị phân để máy tính có thể đọc được dùng cho ngôn ngữ lập trình C
o Ngoài GCC ra chúng ta có thể dùng DevOps khá là hiện đại và tối ưu hơn GCC nhưng nếu muốn hiểu sâu
• Ngôn ngữ lập trình: C (hoặc Java cho phiên bản chuyển đổi)
• Các thư viện cần thiết:
o Thư viện chuẩn C (stdio.h, stdlib.h, string.h, unistd.h, sys/types.h, sys/wait.h, fcntl.h)
o Thư viện POSIX cho việc xử lý tín hiệu và tiến trình
• IDE/Editor: Visual Studio Code, hoặc bất kỳ trình soạn thảo mã nguồn nào hỗ trợ C
• Mục đích sửa dụng GCC mà không phải DevOps
o Dùng GCC (GNU Compiler Collection) để build mini shell hoặc bất kỳ chương trình C/C++ nào sẽ giúp bạn hiểu sâu hơn về cách hệ thống hoạt động
o Nếu Dúng DevOps cho mini shell thì :
▪ Dễ quản lý code và phiên bản
▪ Build, test, đóng gói và deploy tự động
▪ Cộng tác nhóm chuyên nghiệp hơn
Trang 1716
▪ Dễ mở rộng: sau này bạn muốn thêm logging, hỗ trợ plugin, xác thực người dùng, thì DevOps vẫn scale tốt
2 Các bước thực hiện
2.1 Thiết kế cấu trúc và tính năng của Mini Shell:
o Xác định các tính năng cơ bản của mini shell như: thực thi lệnh, hỗ trợ các lệnh nội bộ (exit, cd, history, jobs), chuyển hướng đầu vào/đầu ra (>, <, >>),
và chạy tiến trình nền
o Tạo lịch sử lệnh và lưu trữ quá trình thực thi
2.2 Xử lý lệnh và xử lý lỗi:
o Phát triển cơ chế tách các lệnh nhập vào thành các tham số
o Cập nhật các hàm để xử lý chuyển hướng đầu vào/đầu ra (ví dụ: > và >> cho ghi đè và ghi tiếp vào tệp, < cho đọc tệp)
o Triển khai cơ chế thực thi lệnh sử dụng fork(), execvp() và waitpid()
o Tạo một mảng để lưu trữ các lệnh đã thực thi
o Hiển thị lịch sử lệnh bằng cách sử dụng một hàm riêng biệt
Trang 18Ngoài các tính năng cơ bản, các tính năng mở rộng có thể được triển khai như:
• Hỗ trợ plugin: Cho phép mở rộng các tính năng của mini shell bằng cách tích hợp các plugin
• Hỗ trợ scripting: Cho phép thực thi các tập lệnh shell (script)
• Hỗ trợ tự động hoàn thành lệnh: Thêm tính năng autocomplete cho lệnh và tên tệp
4.2.1 Shell có thể thực thi các lệnh như echo, ls, cat
Các lệnh Thực thi cơ bản ls, pwd, cd <thư_mục>, mkdir <tên_thư_mục>… đây là những lệnh cơ bản mà shell có