1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Hệ Điều hành và lập trình linux (242 71itnw30203) Đồ Án phát triển mini shell và chức năng mở rộng(tc64)

24 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồ Án phát triển mini shell và chức năng mở rộng(tc64)
Tác giả Nguyễn Minh Quân, Nguyễn Hữu Duy, Nguyễn Nhật Phát, Phạm Khánh Tài
Trường học Trường Đại Học Văn Lang
Chuyên ngành Hệ Điều hành và lập trình linux
Thể loại Đồ án
Năm xuất bản 2025
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 24
Dung lượng 616,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

0

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 2

1

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 3

2

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 4

3

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 5

4

• 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 6

5

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 7

6

• 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 9

b 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 11

10

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 12

11

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 13

12

• 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 14

13

• 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 15

14

• 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 16

15

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 17

16

▪ 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 18

Ngoà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ó

Ngày đăng: 06/07/2025, 14:35

HÌNH ẢNH LIÊN QUAN

5. Bảng phân công nhóm - Hệ Điều hành và lập trình linux (242 71itnw30203) Đồ Án phát triển mini shell và chức năng mở rộng(tc64)
5. Bảng phân công nhóm (Trang 11)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm