Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.98 MB, 70 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<i><b>Cán bộ hướng dẫn: </b></i>
<b>TS. Phạm Văn Hưởng </b>
<i><b>Sinh viên thực hiện: </b></i>
<b>Mai Trung Kiên </b>
<b>Nguyễn Thị Bích Ngọc Cao Văn Văn </b>
<b>CT050329 CT050335 CT050353 </b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><small>LỜI NÓI ĐẦU ... 2</small>
<small>CHƯƠNG 1:GIỚI THIỆU CHUNG ... 3</small>
<small>1.1Tổng quan về Linux ... 3</small>
<small>1.1.1Khái niệm hệ điều hành Linux ... 3</small>
<small>1.1.2Cấu trúc hệ điều hành Linux ... 4</small>
<small>1.1.3Ưu và nhược điểm của hệ điều hành Linux ... 5</small>
<small>1.1.4Vai trò của Linux trong các hệ thống thông tin hiện nay ... 7</small>
<small>1.2Tổng quan về lập trình Shell ... 7</small>
<small>1.2.1Khái niệm ... 7</small>
<small>1.2.2Các loại Shell thơng dụng ... 8</small>
<small>1.2.3Chức năng của Shell ... 9</small>
<small>1.3Tổng quan về Linux Kernel ... 10</small>
<small>1.3.1Khái niệm ... 10</small>
<small>1.3.2Chức năng của Linux Kernel ... 10</small>
<small>CHƯƠNG 2:XÂY DỰNG CHƯƠNG TRÌNH ... 12</small>
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5"><small>Hình 1.1 Hệ điều hành Linux ... 4</small>
<small>Hình 1.2 Cấu trúc hệ điều hành Linux ... 5</small>
<small>Hình 2.1 Chức năng Hiển thị danh sách file ... 17</small>
<small>Hình 2.2 Chức năng Tạo file mới ... 17</small>
<small>Hình 2.3 Chức năng Xố file ... 18</small>
<small>Hình 2.4 Chức năng Chỉnh sửa file ... 18</small>
<small>Hình 2.5 Chức năng Hiển thị nội dung file ... 18</small>
<small>Hình 2.6 Chức năng Thay đổi thuộc tính file thành Chỉ đọc ... 19</small>
<small>Hình 2.7 Chức năng thay đổi thuộc tính file thành Chỉ ghi và File ẩn... 19</small>
<small>Hình 2.8 Chức năng Nén file ... 20</small>
<small>Hình 2.9 Chức năng Tạo lập lịch ... 21</small>
<small>Hình 2.10 Chức năng Hiển thị thời gian hệ thống... 23</small>
<small>Hình 2.11 Chức năng Cài đặt thời gian hệ thống ... 24</small>
<small>Hình 2.12 Chức năng Đồng bộ thời gian hệ thống ... 24</small>
<small>Hình 2.13 Chức năng Cài đặt chương trình tự động ... 26</small>
<small>Hình 2.14 Chức năng Gỡ bỏ chương trình tự động ... 26</small>
<small>Hình 2.15 Chức năng Tạo một tiến trình mới ... 30</small>
<small>Hình 2.16 Chức năng Tạm dừng một tiến trình ... 31</small>
<small>Hình 2.17 Chức năng Tiếp tục một tiến trình đang tạm dừng ... 31</small>
<small>Hình 2.18 Chức năng Kết thúc một tiến trình đang chạy ... 31</small>
<small>Hình 2.19 Chức năng Theo dõi một tiến trình ... 32</small>
<small>Hình 2.20 Chức năng Hiển thị danh sách file ... 38</small>
<small>Hình 2.21 Chức năng Thêm file mới ... 38</small>
<small>Hình 2.22 Chức năng Cập nhật nội dung file ... 39</small>
<small>Hình 2.23 Chức năng Xố file ... 39</small>
<small>Hình 2.24 Chức năng Hiển thị nội dung file ... 39</small>
<small>Hình 2.25 Chức năng Thay đổi thuộc tính của file thành Chỉ đọc ... 40</small>
<small>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</small>
<small>Hình 2.27 Chức năng Quản lý Socket ... 51</small>
<small>Hình 2.28 Chức năng Kiểm tra trạng thái kết nối mạng ... 54</small>
<small>Hình 2.29 Chức năng Kết nối wifi ... 55</small>
<small>Hình 2.30 Chức năng Cài đặt và sử dụng ứng dụng quản lý mạng ... 55</small>
<b><small>Hình 2.31 Kết quả thực thi chương trình Ma trận ... Error! Bookmark not defined.</small></b>
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6"><small>Bảng 2.1 Mô tả các chức năng của Quản lý file ... 13</small>
<small>Bảng 2.2 Mô tả các chức năng của Lập lịch tác vụ ... 20</small>
<small>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</small>
<small>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</small>
<small>Bảng 2.5 Mô tả các chức năng của Quản lý tiến trình ... 27</small>
<small>Bảng 2.6 Mơ tả các chức năng của Quản lý file ... 33</small>
<small>Bảng 2.7 Mô tả Quản lý Socket ... 41</small>
<small>Bảng 2.8 Mô tả các chức năng Quản lý mạng ... 52</small>
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Mặc dù nhóm đã cố gắng hồ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 q Thầy Cơ và các bạn để chúng em có thể hồn thiện sản phẩm của mình hơn nữa.
<b>Nhóm sinh viên thực hiện đề tài </b>
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">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 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.
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9"><i><b>1.1.1 Khái niệm hệ điều hành Linux </b></i>
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 tồ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 tồ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,... Ngồ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.
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10"><i>Hình 1.1 Hệ điều hành Linux </i>
<i><b>1.1.2 Cấu trúc hệ điều hành Linux </b></i>
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ể.
<i>Nhân (Kernel): </i>
✓ 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.
<i>Shell: </i>
✓ 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.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="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.
<i>Hình 1.2 Cấu trúc hệ điều hành Linux </i>
<i><b>1.1.3 Ưu và nhược điểm của hệ điều hành Linux </b></i>
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.
<i>Ưu điểm của hệ điều hành Linux: </i>
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="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 ln 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.
<i>Nhược điểm của hệ điều hành Linux: </i>
✓ Độ 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.
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13"><i><b>1.1.4 Vai trò của Linux trong các hệ thống thơng tin hiện nay </b></i>
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 tố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.
<i><b>1.2.1 Khái niệm </b></i>
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
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="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.
<i><b>1.2.2 Các loại Shell thơng dụng </b></i>
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.
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="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 hồ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.
<i><b>1.2.3 Chức năng của Shell </b></i>
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
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="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.
<i><b>1.3.1 Khái niệm </b></i>
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.
<i><b>1.3.2 Chức năng của Linux Kernel </b></i>
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à
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="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ẻ.
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18"><i><b>2.1.1 Quản lý file </b></i>
<i>2.1.1.1. Phân tích thiết kế </i>
Đố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.
Xố 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.
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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:"
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="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."
</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="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"
</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="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 "Thốt chương trình!!!" echo " "
break ;; *)
echo "Lựa chọn không hợp lệ" echo " "
;; esac
done
<i>2.1.1.3. Kết quả thực thi chương trình </i>
</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23"><i>Hình 2.1 Chức năng Hiển thị danh sách file </i>
<i>Hình 2.2 Chức năng Tạo file mới </i>
</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24"><i>Hình 2.3 Chức năng Xố file </i>
<i>Hình 2.4 Chức năng Chỉnh sửa file </i>
<i>Hình 2.5 Chức năng Hiển thị nội dung file </i>
</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25"><i>Hình 2.6 Chức năng Thay đổi thuộc tính file thành Chỉ đọc </i>
<i>Hình 2.7 Chức năng thay đổi thuộc tính file thành Chỉ ghi và File ẩn </i>
</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26"><i>Hình 2.8 Chức năng Nén file </i>
<i><b>2.1.2 Lập lịch tác vụ </b></i>
<i>2.1.2.1 Phân tích thiết kế </i>
Đố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
<i>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 </i>
#!/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"
</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="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."
<i>2.1.2.3 Kết quả thực thi chương trình </i>
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.
<i>Bảng 2.3 Mô tả các chức năng của Thiết lập thời gian hệ thống </i>
</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28"><i>2.1.3.2 Chương trình </i>
#!/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 " "
</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="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
<i>2.1.3.3 Kết quả thực thi chương trình </i>
<i>Hình 2.10 Chức năng Hiển thị thời gian hệ thống </i>
</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30"><i>Hình 2.11 Chức năng Cài đặt thời gian hệ thống </i>
<i>Hình 2.12 Chức năng Đồng bộ thời gian hệ thống </i>
<i><b>2.1.4 Cài đặt/ gỡ bỏ chương trình tự động </b></i>
<i>2.1.4.1 Phân tích thiết kế </i>
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.
</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31"><b>Chức năng Mô tả Cách thực hiện </b>
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
<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 </i>
#!/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
</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32"><i>2.1.4.3 Kết quả thực thi chương trình </i>
<i>Hình 2.13 Chức năng Cài đặt chương trình tự động </i>
<i>Hình 2.14 Chức năng Gỡ bỏ chương trình tự động </i>
</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">Tạo một tiến trình mới <sup>Chức năng này sẽ tạo mới </sup>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 <sup>Chức năng này sẽ tạm </sup>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 <sup>Chức năng này sẽ theo dõi </sup>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().
<i>Bảng 2.5 Mô tả các chức năng của Quản lý tiến trình </i>
</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34"><i>2.2.1.2 Chương trình </i>
#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);
</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="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.
</div>