Báo cáo Lập trình nhân linux (KMA)

70 0 0
Tài liệu đã được kiểm tra trùng lặp
Báo cáo Lập trình nhân linux (KMA)

Đ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

Tổng hợp những câu hỏi cần thiết và quan trọng của môn Lập trình nhân Linux (KMA). Tài liệu này giúp các bạn sinh viên có thể vượt qua các bài kiểm tra giữa kỳ, cuối kỳ và đạt kết quả cao nhất. Xin cảm ơn các bạn đã xem và tải tài liệu.

Trang 1

HỌC VIỆN KỸ THUẬT MẬT MÃ

Khoa Công nghệ thông tin

BÁO CÁO BÀI TẬP LỚN MÔN HỌC LẬP TRÌNH NHÂN LINUX

ĐỀ TÀI: SỐ 24

Cán bộ hướng dẫn:

TS Phạm Văn Hưởng

Sinh viên thực hiện:

Mai Trung Kiên

Nguyễn Thị Bích Ngọc Cao Văn Văn

CT050329 CT050335 CT050353

Trang 2

HỌC VIỆN KỸ THUẬT MẬT MÃ Khoa Công nghệ thông tin

BÁO CÁO BÀI TẬP LỚN MÔN HỌC LẬP TRÌNH NHÂN LINUX

Trang 3

LỜI NÓI ĐẦU 2

CHƯƠNG 1:GIỚI THIỆU CHUNG 3

1.1Tổng quan về Linux 3

1.1.1Khái niệm hệ điều hành Linux 3

1.1.2Cấu trúc hệ điều hành Linux 4

1.1.3Ưu và nhược điểm của hệ điều hành Linux 5

1.1.4Vai trò của Linux trong các hệ thống thông tin hiện nay 7

1.2Tổng quan về lập trình Shell 7

1.2.1Khái niệm 7

1.2.2Các loại Shell thông dụng 8

1.2.3Chức năng của Shell 9

1.3Tổng quan về Linux Kernel 10

1.3.1Khái niệm 10

1.3.2Chức năng của Linux Kernel 10

CHƯƠNG 2:XÂY DỰNG CHƯƠNG TRÌNH 12

Trang 5

DANH MỤC HÌNH ẢNH

Hình 1.1 Hệ điều hành Linux 4

Hình 1.2 Cấu trúc hệ điều hành Linux 5

Hình 2.1 Chức năng Hiển thị danh sách file 17

Hình 2.2 Chức năng Tạo file mới 17

Hình 2.3 Chức năng Xoá file 18

Hình 2.4 Chức năng Chỉnh sửa file 18

Hình 2.5 Chức năng Hiển thị nội dung file 18

Hình 2.6 Chức năng Thay đổi thuộc tính file thành Chỉ đọc 19

Hình 2.7 Chức năng thay đổi thuộc tính file thành Chỉ ghi và File ẩn 19

Hình 2.8 Chức năng Nén file 20

Hình 2.9 Chức năng Tạo lập lịch 21

Hình 2.10 Chức năng Hiển thị thời gian hệ thống 23

Hình 2.11 Chức năng Cài đặt thời gian hệ thống 24

Hình 2.12 Chức năng Đồng bộ thời gian hệ thống 24

Hình 2.13 Chức năng Cài đặt chương trình tự động 26

Hình 2.14 Chức năng Gỡ bỏ chương trình tự động 26

Hình 2.15 Chức năng Tạo một tiến trình mới 30

Hình 2.16 Chức năng Tạm dừng một tiến trình 31

Hình 2.17 Chức năng Tiếp tục một tiến trình đang tạm dừng 31

Hình 2.18 Chức năng Kết thúc một tiến trình đang chạy 31

Hình 2.19 Chức năng Theo dõi một tiến trình 32

Hình 2.20 Chức năng Hiển thị danh sách file 38

Hình 2.21 Chức năng Thêm file mới 38

Hình 2.22 Chức năng Cập nhật nội dung file 39

Hình 2.23 Chức năng Xoá file 39

Hình 2.24 Chức năng Hiển thị nội dung file 39

Hình 2.25 Chức năng Thay đổi thuộc tính của file thành Chỉ đọc 40

Hình 2.26 Chức năng Thay đổi thuộc tính của file thành Chỉ ghi và File ẩn 40

Hình 2.27 Chức năng Quản lý Socket 51

Hình 2.28 Chức năng Kiểm tra trạng thái kết nối mạng 54

Hình 2.29 Chức năng Kết nối wifi 55

Hình 2.30 Chức năng Cài đặt và sử dụng ứng dụng quản lý mạng 55

Hình 2.31 Kết quả thực thi chương trình Ma trận Error! Bookmark not defined.

Trang 6

DANH MỤC BẢNG BIỂU

Bảng 2.1 Mô tả các chức năng của Quản lý file 13

Bảng 2.2 Mô tả các chức năng của Lập lịch tác vụ 20

Bảng 2.3 Mô tả các chức năng của Thiết lập thời gian hệ thống 21

Bảng 2.4 Mô tả các chức năng của Cài đặt/gỡ bỏ chương trình tự động 25

Bảng 2.5 Mô tả các chức năng của Quản lý tiến trình 27

Bảng 2.6 Mô tả các chức năng của Quản lý file 33

Bảng 2.7 Mô tả Quản lý Socket 41

Bảng 2.8 Mô tả các chức năng Quản lý mạng 52

Trang 7

Mặc dù nhóm đã cố gắng hoàn thành đề tài trong phạm vi và khả năng cho phép, nhưng chắc chắn sẽ không tránh khỏi những thiếu sót, kính mong sự cảm thông và tận tình chỉ bảo của quý Thầy Cô và các bạn để chúng em có thể hoàn thiện sản phẩm của mình hơn nữa

Nhóm sinh viên thực hiện đề tài

Trang 8

LỜI NÓI ĐẦU

Trong thế giới kỹ thuật hiện đại, hệ điều hành Linux đã trở thành nền tảng cơ bản không thể thiếu cho nhiều hệ thống và ứng dụng Với sức mạnh linh hoạt và sự phổ biến ngày càng tăng, việc hiểu sâu hơn về cách hoạt động của hệ thống Linux và khả năng tùy chỉnh nó thông qua lập trình trở thành một yêu cầu cần thiết đối với các nhà phát triển và quản trị hệ thống

Dự án này không chỉ đơn giản là một khám phá sâu hơn vào cách thức Linux hoạt động, mà còn là một cơ hội để tận dụng sức mạnh của lập trình để tạo ra các công cụ quản lý hệ thống mạnh mẽ và linh hoạt Chúng em tự hào giới thiệu dự án lập trình nhân Linux, nơi mà chúng ta sẽ khám phá và áp dụng những kiến thức về lập trình vào việc:

✓ Quản lý file và lập lịch tác vụ: Điều chỉnh và quản lý các tập tin, thư mục, cũng như lập kế hoạch cho các nhiệm vụ định kỳ trên hệ thống Linux thông qua lập trình shell

✓ Quản lý tiến trình, file, socket và mạng trong Ubuntu: Khám phá và điều khiển các tiến trình, tập tin, kết nối socket và mạng trên hệ điều hành Ubuntu thông qua việc lập trình sâu

✓ Xây dựng và tích hợp mô – đun nhân vào hệ thống: Tạo ra các mô – đun nhân tùy chỉnh và tích hợp chúng vào hệ thống để tăng cường khả năng và hiệu suất của hệ thống

✓ Interrupts: Hiểu và xử lý các sự kiện ngắt (interrupts) trên hệ thống, cung cấp khả năng phản ứng linh hoạt và hiệu suất cho các ứng dụng

Dự án này không chỉ là một cơ hội để học hỏi mà còn là một thử thách để áp dụng kiến thức vào thực tiễn Chúng em kỳ vọng rằng sau khi hoàn thành dự án, các thành viên sẽ có được sự hiểu biết sâu sắc hơn về hệ thống Linux và khả năng lập trình, từ đó nâng cao kỹ năng và trải nghiệm của mình trong lĩnh vực này

Chân thành cảm ơn sự tham gia và nỗ lực của mọi người trong dự án này Hãy cùng nhau tạo ra những giá trị mới và khám phá sức mạnh của Linux thông qua lập trình

Trang 9

CHƯƠNG 1: GIỚI THIỆU CHUNG 1.1 Tổng quan về Linux

1.1.1 Khái niệm hệ điều hành Linux

Hệ điều hành Linux là một hệ điều hành mã nguồn mở (open – source) dựa trên nhân Linux (Linux kernel), một phần cốt lõi của hệ thống Linux kernel được phát triển bởi một nhóm lập trình viên trên toàn thế giới dưới sự chỉ đạo của Linus Torvalds từ năm 1991 Hệ điều hành Linux không chỉ là một kernel, mà còn bao gồm một số các thành phần khác như các tiện ích dòng lệnh, thư viện, và các công cụ hỗ trợ

Linux được thiết kế để hoạt động trên nhiều loại phần cứng khác nhau, từ các máy tính cá nhân thông thường đến máy chủ, thiết bị nhúng, và các hệ thống nhúng Sự linh hoạt và tính đa dạng này là một trong những điểm mạnh của Linux, giúp nó trở thành một trong những hệ điều hành phổ biến nhất trên thế giới

Một trong những đặc điểm quan trọng của Linux là tính bảo mật và ổn định cao Do là một hệ điều hành mã nguồn mở, Linux thường nhận được sự hỗ trợ đa dạng từ cộng đồng lập trình viên trên toàn cầu, điều này giúp nó có những bản vá lỗi và cập nhật định kỳ, giữ cho hệ thống luôn được bảo mật và ổn định

Linux cũng là nền tảng cho nhiều hệ điều hành khác nhau, được gọi là các bản phân phối (distribution) Linux Các bản phân phối này có thể được tinh chỉnh và tùy chỉnh cho các mục đích sử dụng cụ thể, từ việc sử dụng cho máy tính cá nhân đến máy chủ, điện thoại thông minh, máy tính bảng, và nhiều thiết bị khác nữa

Hầu hết các bản Linux đều hỗ trợ rất nhiều ngôn ngữ lập trình, đặc biệt công cụ GCC cho phép người lập trình có thể biên dịch và thực thi ứng dụng viết bằng nhiều ngôn ngữ lập trình khác nhau: C/C++, Java, Ngoài ra, Linux còn hỗ trợ ngôn ngữ lập trình để phát triển các ứng dụng đồ họa như: JTK+, Qt,

Ngày nay, Linux được phân ra làm nhiều nhánh như: Ubuntu, Linux Mint, Fedora,… Được sử dụng thông dụng nhất hiện nay đang là Ubuntu

Trang 10

Hình 1.1 Hệ điều hành Linux

1.1.2 Cấu trúc hệ điều hành Linux

Cấu trúc của hệ điều hành Linux bao gồm nhân Linux là lõi, Shell là giao diện giữa người dùng và hệ thống, và các ứng dụng là các chương trình mà người dùng chạy trên hệ điều hành để thực hiện các tác vụ cụ thể

Nhân (Kernel):

✓ Nhân Linux (Linux Kernel) là lõi của hệ điều hành Linux Nó là phần chịu trách nhiệm trực tiếp cho việc quản lý tài nguyên phần cứng và cung cấp các dịch vụ cho các chương trình ứng dụng

✓ Nhiệm vụ chính của nhân bao gồm quản lý tiến trình, quản lý bộ nhớ, quản lý tập tin, giao tiếp với thiết bị phần cứng và cung cấp các dịch vụ hệ thống

Shell:

✓ Shell là giao diện giữa người dùng và hệ điều hành Linux Nó cho phép người dùng tương tác với hệ thống thông qua dòng lệnh hoặc giao diện đồ họa

Trang 11

✓ Shell cũng là một ngôn ngữ lập trình kịch bản, cho phép người dùng viết các tập lệnh để tự động hóa công việc hoặc thực hiện các tác vụ phức tạp hơn

Hình 1.2 Cấu trúc hệ điều hành Linux

1.1.3 Ưu và nhược điểm của hệ điều hành Linux

Hệ điều hành Linux có nhiều ưu điểm như tính mã nguồn mở, bảo mật và ổn định cao, khả năng tùy chỉnh và hiệu suất cao, nhưng vẫn có một số nhược điểm như độ dễ sử dụng, hỗ trợ ứng dụng, hỗ trợ phần cứng và yêu cầu kiến thức kỹ thuật

Ưu điểm của hệ điều hành Linux:

Trang 12

✓ Mã nguồn mở (Open Source): Linux là một hệ điều hành mã nguồn mở, điều này có nghĩa là mã nguồn của nó có thể được xem xét, sửa đổi và phân phối miễn phí Điều này tạo điều kiện cho sự linh hoạt và sự phát triển không giới hạn từ cộng đồng lập trình viên trên toàn thế giới

✓ Bảo mật và ổn định: Linux nổi tiếng với tính bảo mật và ổn định cao Cộng đồng lập trình viên luôn cập nhật và vá lỗi hệ thống, giúp người dùng tránh khỏi các lỗ hổng bảo mật và các vấn đề không mong muốn khác

✓ Khả năng tùy chỉnh cao: Linux cung cấp sự linh hoạt và khả năng tùy chỉnh cao cho người dùng và quản trị viên hệ thống Người dùng có thể tinh chỉnh và cấu hình hệ thống của họ theo ý muốn, từ việc chọn lựa giao diện người dùng đến cấu hình nhân hệ thống

✓ Hiệu suất cao và tương thích phần cứng tốt: Linux được thiết kế để hoạt động hiệu quả trên nhiều loại phần cứng khác nhau, từ các máy tính cá nhân đến máy chủ và thiết bị nhúng Nó cung cấp hiệu suất tốt và tương thích tốt với nhiều loại phần cứng

✓ Chi phí rẻ: Linux đang là 1 phần mềm miễn phí Chính vì vậy đối với thắc mắc ưu điểm nổi bật của Linux là gì thì đây chính là một trong những lý do khiến cho hệ điều hành này vẫn giữ vững được vị thế trên thị trường

Nhược điểm của hệ điều hành Linux:

✓ Độ dễ sử dụng và trải nghiệm người dùng: Mặc dù đã có sự tiến bộ trong việc cải thiện giao diện người dùng, nhưng Linux vẫn đôi khi không thân thiện và dễ sử dụng như một số hệ điều hành khác, đặc biệt đối với người dùng mới

✓ Hỗ trợ ứng dụng: Mặc dù có nhiều ứng dụng mã nguồn mở và có sẵn cho Linux, nhưng vẫn có một số ứng dụng thương mại hoặc chưa được phát triển đầy đủ trên nền tảng này

✓ Hỗ trợ phần cứng có thể hạn chế: Mặc dù Linux tương thích với nhiều loại phần cứng, nhưng đôi khi vẫn có thể gặp phải vấn đề với một số thiết bị phần cứng cụ thể do sự thiếu hỗ trợ từ nhà sản xuất hoặc vấn đề driver ✓ Kiến thức kỹ thuật yêu cầu: Sử dụng và quản lý Linux hiệu quả đòi hỏi kiến

thức kỹ thuật và kinh nghiệm, điều này có thể là một thách thức đối với người dùng mới hoặc không có kinh nghiệm về hệ điều hành này

Trang 13

1.1.4 Vai trò của Linux trong các hệ thống thông tin hiện nay

Linux đóng một vai trò quan trọng trong các hệ thống thông tin hiện nay, từ máy chủ và cloud đến thiết bị nhúng và máy tính cá nhân, nhờ tính ổn định, bảo mật, hiệu suất và khả năng tùy chỉnh của nó

Máy chủ (Servers): Linux thường được sử dụng rộng rãi trong các máy chủ do tính ổn định, bảo mật cao và khả năng tùy chỉnh linh hoạt Các máy chủ Linux được sử dụng cho các dịch vụ web, email, cơ sở dữ liệu, ứng dụng đám mây và nhiều hơn nữa

Hệ thống Cloud: Các hệ thống cloud lớn như AWS, Google Cloud và Microsoft Azure thường sử dụng Linux làm nền tảng cơ sở để chạy và quản lý các dịch vụ và hạ tầng điện toán đám mây của họ

Hệ thống mạng: Linux được sử dụng trong việc triển khai và quản lý các hệ thống mạng, bao gồm tường lửa (firewalls), máy chủ DNS (DNS servers), định tuyến (routers) và các thiết bị mạng khác

Hệ thống nhúng (Embedded Systems): Linux thích hợp cho các hệ thống nhúng do tính linh hoạt và khả năng tùy chỉnh cao của nó Nó được sử dụng trong các thiết bị như điện thoại thông minh, máy tính bảng, thiết bị IoT (Internet of Things), và các thiết bị nhúng khác

HPC (High – Performance Computing): Trong các môi trường tính toán hiệu suất cao, Linux thường được sử dụng cho việc quản lý và điều khiển các cụm máy tính đám mây (clusters) và hệ thống siêu máy tính (supercomputers)

Phát triển Phần Mềm và Test Automation: Linux là một nền tảng phát triển phần mềm phổ biến với các công cụ và thư viện lập trình mạnh mẽ Nó cũng được sử dụng rộng rãi trong tự động hóa thử nghiệm (test automation) và CI/CD pipelines Desktop và Laptop: Mặc dù phổ biến hơn trong các hệ thống máy chủ và nhúng, Linux cũng được sử dụng trong máy tính cá nhân cho mục đích phát triển phần mềm, đồ họa, văn phòng và các nhu cầu khác

1.2 Tổng quan về lập trình Shell

1.2.1 Khái niệm

Lập trình Shell là quá trình viết các tập lệnh hoặc scripts sử dụng ngôn ngữ lập trình shell để thực hiện các tác vụ trên hệ điều hành Unix – like (bao gồm cả Linux) Shell scripting cho phép người dùng tự động hóa các công việc hằng ngày, thực hiện

Trang 14

các tác vụ hệ thống phức tạp, và tương tác với các chương trình và dịch vụ khác trên hệ thống

Một số khái niệm cơ bản trong lập trình shell bao gồm:

✓ Shell: Là môi trường hoạt động nơi người dùng nhập các lệnh và chạy các scripts Các shell phổ biến nhất trong Unix – like là Bash (Bourne Again Shell), cùng với sh, csh, ksh và zsh

✓ Tập lệnh (Script): Là một tập hợp các lệnh và các câu lệnh điều kiện được viết trong một tập tin văn bản để thực hiện một loạt các tác vụ nhất định ✓ Biến (Variables): Được sử dụng để lưu trữ dữ liệu và giá trị tạm thời trong

quá trình thực thi script

✓ Câu lệnh (Commands): Là các hành động được thực thi bởi shell, bao gồm các lệnh hệ thống như ls, mkdir, rm, và cũng có thể là các ứng dụng hoặc các tập lệnh khác

✓ Cấu trúc điều khiển (Control Structures): Bao gồm các cấu trúc như điều kiện (if, elif, else), vòng lặp (for, while) để điều khiển luồng thực thi của script

✓ Đối số (Arguments): Là các giá trị được truyền vào script khi nó được gọi, giúp tạo ra các script linh hoạt và tái sử dụng được

Lập trình shell có thể được sử dụng cho nhiều mục đích, bao gồm quản lý file, tự động hóa công việc, xử lý dữ liệu và tương tác với hệ thống và các ứng dụng khác Điều này giúp tiết kiệm thời gian và giảm thiểu sai sót trong quá trình thao tác và quản lý hệ thống

1.2.2 Các loại Shell thông dụng

Lập trình Shell là quá trình tạo ra các tập lệnh (scripts) để thực thi các tác vụ trên hệ thống thông qua môi trường dòng lệnh của hệ điều hành Shell scripting thường sử dụng các ngôn ngữ lập trình như Bash (Bourne Again Shell), Zsh (Z Shell), Fish (Friendly Interactive Shell), hoặc các phiên bản khác của các shell để tạo ra các tập lệnh có thể tự động hóa các tác vụ, thực hiện chuỗi lệnh, xử lý dữ liệu, và thực hiện các thao tác hệ thống khác

Các loại shell thông dụng bao gồm:

✓ Bash (Bourne Again Shell): Bash là một trong những shell phổ biến nhất và thường được mặc định trên hầu hết các hệ thống Linux Nó là một phiên bản mở rộng của Bourne Shell (sh), với nhiều tính năng tiện ích và dễ sử dụng hơn

Trang 15

✓ Zsh (Z Shell): Zsh là một shell mạnh mẽ và linh hoạt, cung cấp nhiều tính năng tiên tiến hơn so với Bash như tự hoàn thành (auto – completion), các themes và plugins, và nhiều tính năng khác

✓ Fish (Friendly Interactive Shell): Fish là một shell dòng lệnh hiện đại, được thiết kế để có trải nghiệm người dùng tốt nhất với giao diện thân thiện và tính năng tự động hoàn thành thông minh

✓ Dash (Debian Almquist Shell): Dash là một shell nhỏ gọn và tối ưu được sử dụng trong môi trường hệ thống Linux như Debian và Ubuntu Nó được biết đến với tốc độ thực thi nhanh và sử dụng ít tài nguyên hệ thống

✓ Ksh (Korn Shell): Ksh là một shell mạnh mẽ và phổ biến, cung cấp nhiều tính năng mở rộng so với Bourne Shell

Mỗi loại shell có các tính năng và cú pháp riêng biệt, phù hợp cho các mục đích và yêu cầu sử dụng khác nhau Người dùng có thể chọn loại shell phù hợp nhất với nhu cầu và kỹ năng lập trình của mình

1.2.3 Chức năng của Shell

Shell là một phần quan trọng của hệ thống điều hành Linux, cung cấp giao diện tương tác giữa người dùng và hệ thống, cho phép thực thi các lệnh, quản lý tiến trình, thực hiện các tập lệnh tự động, và thực hiện nhiều chức năng khác Shell có nhiều chức năng quan trọng trong hệ thống điều hành Linux, bao gồm:

✓ Tương tác với người dùng: Shell cung cấp một giao diện dòng lệnh cho người dùng để tương tác với hệ thống Người dùng có thể nhập lệnh và nhận kết quả ngay lập tức từ hệ thống

✓ Thực thi các lệnh: Shell thực thi các lệnh mà người dùng nhập vào Điều này bao gồm thực hiện các lệnh hệ thống như quản lý tập tin, chạy chương trình, quản lý tiến trình, và nhiều hơn nữa

✓ Quản lý tiến trình (Process Management): Shell cho phép người dùng quản lý các tiến trình trên hệ thống Các lệnh như ps, top, kill được sử dụng để liệt kê, kiểm soát và kết thúc các tiến trình

✓ Thực hiện tập lệnh (Script Execution): Shell là một ngôn ngữ lập trình kịch bản, cho phép người dùng viết và thực thi các tập lệnh (scripts) Điều này cho phép tự động hóa các tác vụ, tạo ra các luồng lệnh phức tạp và thực hiện các tác vụ tự động

✓ Quản lý biến và môi trường: Shell quản lý các biến môi trường và biến shell, cho phép người dùng đặt và truy xuất các giá trị môi trường, làm việc

Trang 16

với các biến shell, và thực hiện các thao tác tương tác với môi trường hệ thống

✓ Điều hướng File và I/O: Shell cung cấp các cú pháp để điều hướng đầu vào và đầu ra của các chương trình Các lệnh như >, <, | được sử dụng để điều hướng dữ liệu giữa các chương trình và tệp tin

✓ Tùy biến môi trường làm việc: Shell cho phép người dùng tùy chỉnh môi trường làm việc của họ, bao gồm cài đặt các alias, các biến môi trường, và các cài đặt shell khác để phù hợp với nhu cầu và sở thích cá nhân

1.3 Tổng quan về Linux Kernel

1.3.1 Khái niệm

Linux Kernel là một phần cốt lõi của hệ điều hành Linux, là một chương trình máy tính cung cấp giao tiếp trực tiếp với phần cứng và quản lý tài nguyên phần cứng Nó là trái tim của hệ thống Linux, đảm bảo hoạt động của các phần mềm và cung cấp các dịch vụ cho người dùng và các ứng dụng khác

1.3.2 Chức năng của Linux Kernel

Linux Kernel chịu trách nhiệm quản lý và điều phối các tài nguyên của hệ thống, cung cấp giao diện cho các ứng dụng và người dùng sử dụng để tương tác với phần cứng và các tài nguyên hệ thống Linux Kernel có nhiều chức năng quan trọng trong hệ thống điều hành Linux, bao gồm:

✓ Quản lý tiến trình (Process Management): Kernel quản lý việc tạo, quản lý và lập lịch cho các tiến trình trên hệ thống Nó cung cấp các cơ chế cho việc tạo tiến trình mới, xử lý việc chuyển đổi giữa các tiến trình, quản lý bộ nhớ và ngắt, cũng như điều phối tài nguyên giữa các tiến trình

✓ Quản lý bộ nhớ (Memory Management): Kernel quản lý việc phân bổ và sử dụng bộ nhớ trên hệ thống Nó quản lý bộ nhớ ảo, bộ nhớ vật lý, và các phân trang bộ nhớ để đảm bảo rằng mỗi tiến trình có quyền truy cập vào bộ nhớ một cách an toàn và hiệu quả

✓ Quản lý File System: Kernel quản lý hệ thống tập tin trên hệ thống Nó cung cấp giao diện cho việc tạo, đọc, ghi và xóa các tập tin và thư mục trên các hệ thống tập tin được gắn kết Kernel hỗ trợ nhiều hệ thống tập tin như EXT4, Btrfs, XFS, NTFS, và nhiều hơn nữa

✓ Quản lý thiết bị (Device Management): Kernel quản lý các thiết bị phần cứng trên hệ thống, bao gồm các ổ đĩa, bàn phím, màn hình, card mạng và

Trang 17

các thiết bị ngoại vi khác Nó cung cấp giao diện cho việc truy cập vào các thiết bị này thông qua các driver thiết bị

✓ Quản lý mạng (Networking): Kernel triển khai các giao thức mạng như TCP/IP, UDP, và ICMP để hỗ trợ kết nối mạng Nó cung cấp giao diện cho việc tạo và quản lý các kết nối mạng, cũng như thực hiện các giao tiếp mạng qua các card mạng

✓ Bảo Mật: Kernel cung cấp các cơ chế bảo mật để bảo vệ hệ thống khỏi các mối đe dọa Điều này bao gồm kiểm soát quyền truy cập tập tin, quản lý người dùng và nhóm, và thiết lập các chính sách bảo mật khác

✓ Quản lý tài nguyên hệ thống (System Resource Management): Kernel quản lý và phân phối các tài nguyên hệ thống như CPU, bộ nhớ, I/O và mạng giữa các tiến trình và ứng dụng trên hệ thống Điều này bao gồm việc quản lý lịch trình CPU, bộ đệm I/O, và các khối nhớ được chia sẻ

Trang 18

CHƯƠNG 2: XÂY DỰNG CHƯƠNG TRÌNH 2.1 Lập trình Shell

2.1.1 Quản lý file

2.1.1.1 Phân tích thiết kế

Đối với chức năng quản lý file, chúng em tìm hiểu và phân tích ra bảy chức năng chính liên quan đến file bao gồm:

Hiển thị danh sách file Chức năng này sẽ tiến hành thực hiện hiển thị tất cả các file và thư mục có trong folder hiện tại

Thực hiện bằng cách sử dụng chương trình ls ở trong linux

Tạo file mới Chức năng này sẽ tiến hành tạo ra file ở trong thư mục hiện tại và sử dụng tên được truyền vào làm tên file

Thực hiện bằng cách sử dụng chương trình touch ở trong linux

Xoá file Chức năng này sẽ tiến hành xoá file ở trong thư mục hiện tại

Thực hiện bằng cách sử dụng chương trình rm ở trong linux

Chỉnh sửa file Chức năng này sẽ tiến hành mở trình soạn thảo trên file, cho phép thực hiện chỉnh sửa nội dung file

Thực hiện bằng cách sử dụng chương trình vim ở trong linux

Hiển thị nội dung file Chức năng này sẽ tiến hành hiển thị nội dung của file lên console

Thực hiện bằng cách sử dụng chương trình cat ở trong linux

Thay đổi thuộc tính file Chức năng này cho phép người dùng thay đổi thuộc tính của một file, bao gồm chỉ đọc (chỉnh sửa quyền ghi), chỉ ghi (chỉnh sửa

Thực hiện bằng cách thay đổi quyền bằng lệnh chmod và mv để chuyển thành file ẩn

Trang 19

quyền đọc), chuyển đổi file thành file ẩn

Nén file Chức năng này cho phép người dùng nén một file trên hệ thống Linux

Thực hiện bằng cách sử dụng lệnh tar với các tuỳ chọn -czf để nén file thành

#Tạo file mới create_file () {

echo "Nhập tên file mới:" read filename

echo "Nhập tên file cần xóa:" read filename

echo "Nhập tên file cần chỉnh sửa:"

Trang 20

read filename nano $filename

echo "File $filename đã được chỉnh sửa." echo " "

#Thay đổi thuộc tính file change_file_attribute () {

echo "Nhập tên file cần thay đổi thuộc tính:" read filename

while true do

echo "Chọn loại thuộc tính muốn thay đổi:" echo "1 Chỉ đọc"

echo "2 Chỉ ghi" echo "3 File ẩn" echo "4 Thoát" read attribute_choice case $attribute_choice in

1)

chmod u-w $filename #Loại bỏ quyền ghi của người dùng echo "Đã thay đổi thuộc tính của $filename thành chỉ đọc." echo " "

;; 2)

chmod u-r $filename #Loại bỏ quyền đọc của người dùng echo "Đã thay đổi thuộc tính của $filename thành chỉ ghi." echo " "

;; 3)

mv $filename $filename #Chuyển file thành file ẩn echo "Đã chuyển $filename thành file ẩn."

Trang 21

echo " " ;;

4)

echo "Thoát chương trình" echo " "

break ;; *)

echo "Lựa chọn không hợp lệ" echo " "

;; esac done echo " " }

tar -czf "$output_name.tar.gz" "$input_name"

echo "Đã nén $input_name thành $output_name.tar.gz" else

echo "Không tìm thấy $input_name" fi

echo " " }

while true do

echo "===============MENU===============" echo "Chọn một trong các chức năng sau:"

echo "1 Hiển thị danh sách file" echo "2 Tạo file mới"

echo "3 Xóa file" echo "4 Chỉnh sửa file"

echo "5 Hiển thị nội dung file"

Trang 22

echo "6 Thay đổi thuộc tính file" echo "7 Nén file"

echo "8 Thoát" read choice

case $choice in 1)

display_files ;;

2)

create_file ;;

3)

delete_file ;;

4)

edit_file ;;

5)

display_file_content ;;

6)

change_file_attribute ;;

7)

compress_file ;;

8)

echo "Thoát chương trình!!!" echo " "

break ;; *)

echo "Lựa chọn không hợp lệ" echo " "

;; esac

done

2.1.1.3 Kết quả thực thi chương trình

Trang 23

Hình 2.1 Chức năng Hiển thị danh sách file

Hình 2.2 Chức năng Tạo file mới

Trang 24

Hình 2.3 Chức năng Xoá file

Hình 2.4 Chức năng Chỉnh sửa file

Hình 2.5 Chức năng Hiển thị nội dung file

Trang 25

Hình 2.6 Chức năng Thay đổi thuộc tính file thành Chỉ đọc

Hình 2.7 Chức năng thay đổi thuộc tính file thành Chỉ ghi và File ẩn

Trang 26

Hình 2.8 Chức năng Nén file

2.1.2 Lập lịch tác vụ

2.1.2.1 Phân tích thiết kế

Đối với lập lịch tác vụ chúng em phân tích ra như sau:

Tạo lập lịch Chức năng này sẽ tiến hành tạo lập lịch tiến trình tuỳ thuộc vào thông tin người dùng nhập vào

Sử dụng chương trình crontab để tạo lập lịch tiến trình

Bảng 2.2 Mô tả các chức năng của Lập lịch tác vụ 2.1.2.2 Chương trình

#!/bin/sh

# Đặt đường dẫn đến tệp cần tạo filepath="/home/van/bc/shell" # Đặt lệnh cron job

croncmd="touch $filepath"

# Đặt chuỗi công việc định kỳ '00 8 * * *' nghĩa là công việc sẽ chạy vào lúc 8 giờ sáng hàng ngày

cronjob="00 8 * * * $croncmd"

Trang 27

# Thêm công việc định kỳ mới vào danh sách công việc định kỳ hiện tại (crontab -l ; echo "$cronjob") | crontab -

# In thông báo xác nhận

echo "Đã thêm lịch trình tạo tệp vào 8:00 sáng hàng ngày."

2.1.2.3 Kết quả thực thi chương trình

Hiển thị thời gian thực Chức năng hiển thị thời gian thực sẽ hiển thị thời gian ngày tháng của hệ thống cũng như múi giờ

Sử dụng chương trình date để thực hiện xem giờ của hệ thống

Cài đặt thời gian hệ thống Chức năng cài đặt thời gian hệ thống được sử dụng để cập nhật lại thời gian ở trong hệ thống

Sử dụng chương trình date để thực hiện sửa thời gian ở trong hệ thống Đồng bộ thời gian hệ

thống

Chức năng đồng bộ thời gian hệ thống được sử dụng để tự động cập nhật lại thời gian thực của hệ thống

Sử dụng chương trình ntpdate để thực hiện tự động cập nhật lại thời gian của hệ thống

Bảng 2.3 Mô tả các chức năng của Thiết lập thời gian hệ thống

Trang 28

2.1.3.2 Chương trình

#!/bin/bash

# Hàm hiển thị thời gian thực function hien_thi_thoi_gian_thuc { date +"%A, %d %B %Y %T %Z" echo " "

}

# Hàm cài đặt thời gian hệ thống

function cai_dat_thoi_gian_he_thong {

# Tạm thời tắt dịch vụ systemd-timesyncd sudo systemctl stop systemd-timesyncd

# Nhập thời gian mới từ người dùng

read -p "Nhập thời gian mới (YYYY-MM-DD HH:MM:SS): " thoi_gian_moi

# Kiểm tra định dạng thời gian mới

if ! date -d "$thoi_gian_moi" >/dev/null 2>&1; then

echo "Định dạng thời gian không hợp lệ Thời gian phải có định dạng YYYY-MM-DD HH:MM:SS"

return fi

# Cài đặt thời gian hệ thống bằng timedatectl sudo timedatectl set-time "$thoi_gian_moi"

# Kiểm tra trạng thái và thông tin thời gian hệ thống sudo timedatectl status

sudo date -s "$thoi_gian_moi"

echo "Đã cập nhật thời gian hệ thống thành công" echo " "

Trang 29

do

echo "============MENU============" echo "1 Hiển thị thời gian thực"

echo "2 Cài đặt thời gian hệ thống" echo "3 Đồng bộ thời gian hệ thống" echo "0 Thoát"

read -p "Chọn chức năng: " lua_chon case $lua_chon in

3)

dong_bo_thoi_gian_he_thong ;;

0)

echo "Cảm ơn bạn đã sử dụng chương trình!!!" echo " "

break; ;; esac

done

2.1.3.3 Kết quả thực thi chương trình

Hình 2.10 Chức năng Hiển thị thời gian hệ thống

Trang 30

Hình 2.11 Chức năng Cài đặt thời gian hệ thống

Hình 2.12 Chức năng Đồng bộ thời gian hệ thống

2.1.4 Cài đặt/ gỡ bỏ chương trình tự động

2.1.4.1 Phân tích thiết kế

Chức năng cài đặt và gỡ bỏ các chương trình tự động, chúng em xây dựng hai chương trình đó là install và uninstall

Trang 31

Chức năng Mô tả Cách thực hiện

Install

Chức năng install sẽ tiến hành cài chương trình được chỉ định

Dùng lệnh sudo apt-get install với cờ -y để tiến hành cài đặt tất cả các gói

Uninstall

Chức năng uninstall sẽ tiến hành gỡ cài đặt chương trình được chỉ định

Dùng lệnh sudo apt-get remove với cờ -y để tiến hành gỡ cài đặt tất cả các gói

Bảng 2.4 Mô tả các chức năng của Cài đặt/gỡ bỏ chương trình tự động 2.1.4.2 Chương trình

#!/bin/bash

#Nhập tên chương trình và tùy chọn từ người dùng

read -p "Nhập tên chương trình:(VD: sl) " program_name read -p "Bạn muốn cài đặt hay gỡ bỏ? (in/un): " action

#Kiểm tra tùy chọn của người dùng và thực hiện hành động tương ứng if [ "$action" = "in" ]; then

#Cài đặt chương trình

if sudo apt-get install $program_name; then

echo "Đã cài đặt $program_name thành công" else

echo "Không thể cài đặt $program_name" fi

elif [ "$action" = "un" ]; then #Gỡ bỏ chương trình

if sudo apt-get remove $program_name; then

echo "Đã gỡ bỏ $program_name thành công" else

echo "Không thể gỡ bỏ $program_name" fi

else

echo "Tùy chọn không hợp lệ" fi

Trang 32

2.1.4.3 Kết quả thực thi chương trình

Hình 2.13 Chức năng Cài đặt chương trình tự động

Hình 2.14 Chức năng Gỡ bỏ chương trình tự động

Trang 33

Tạo một tiến trình mới Chức năng này sẽ tạo mới một tiến trình mới

Sử dụng lệnh hệ thống fork() để tạo một tiến trình mới

Tạm dừng một tiến trình Chức năng này sẽ tạm dừng một tiến trình

Sử dụng để tạm dừng một tiến trình đang chạy bằng cách sử dụng lệnh hệ thống kill() và gửi tín hiệu SIGSTOP đến tiến trình đó

Tiếp tục một tiến trình đang tạm dừng

Chức năng này sẽ tiếp tục một tiến trình đang tạm dừng

Sử dụng để tiếp tục một tiến trình đang tạm dừng bằng cách sử dụng lệnh kill() và gửi tín hiệu SIGCONT đến tiến trình

Kết thúc một tiến trình đang chạy

Chức năng này sẽ kết thúc một tiến trình đang chạy

Sử dụng để kết thúc một tiến trình đang chạy bằng cách sử dụng lệnh hệ thống kill() và gửi tín hiệu SIGTERM đến tiến trình đó

Theo dõi một tiến trình Chức năng này sẽ theo dõi một tiến trình

Sử dụng để theo dõi trạng thái của một tiến trình đang chạy bằng cách sử dụng hàm waitpid()

Bảng 2.5 Mô tả các chức năng của Quản lý tiến trình

Trang 34

2.2.1.2 Chương trình

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/wait.h> int main() {

int choice;//Lựa chọn của người dùng

int conOrExit;//Lựa chọn tiếp tục, hay thoát chương trình do {

printf("\n==========MENU==========\n"); printf("1 Tao mot tien trinh moi\n");

printf("2 Tam dung mot tien trinh\n");

printf("3 Tiep tuc mot tien trinh dang tam dung\n"); printf("4 Ket thuc mot tien trinh dang chay\n"); printf("5 Theo doi mot tien trinh\n");

printf("6 Thoat\n"); printf("Chon: "); scanf("%d", &choice); switch (choice) {

case 1:

pid_t pid = fork();

if (pid == 0) {//Tien trinh con

printf("Tien trinh con da duoc tao ");

printf("Tien trinh con se ngu trong 60 giay.\n"); sleep(60);

exit(0);

} else if (pid > 0) {//Tien trinh cha

printf("Tien trinh cha tiep tuc PID cua tien trinh con: %d\n", pid);

} else {

printf("Loi khi tao tien trinh moi.\n"); }

break; case 2:

printf("Vui long nhap ID cua tien trinh de tam dung: "); pid_t pid_to_suspend;

scanf("%d", &pid_to_suspend);

Trang 35

//Sử dụng kill với tín hiệu SIGSTOP để tạm dừng if (kill(pid_to_suspend, SIGSTOP) == -1) { printf("Loi khi tam dung tien trinh.\n"); } else {

printf("Tien trinh da duoc tam dung.\n"); }

break; case 3:

printf("Vui long nhap ID cua tien trinh de tiep tuc: "); pid_t pid_to_resume;

printf("Vui long nhap ID cua tien trinh de ket thuc: "); pid_t pid_to_kill;

printf("Vui long nhap ID cua tien trinh de theo doi: "); pid_t pid_to_monitor;

scanf("%d", &pid_to_monitor);

//Sử dụng waitpid để kiểm tra tiến trình đó có đang chạy hay không

Ngày đăng: 08/05/2024, 15:54

Tài liệu cùng người dùng

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

Tài liệu liên quan