Sự phát triển của phần mềm mã nguồn mở, nảy sinh một vấn đề là phải có những công cụ lập trình thích hợp trên nền tảng mã nguồn mở như các hệ điều hành linux, unix. Trước yêu cầu đó thì đã xuất hiện một công cụ lập trình rất hiệu quả là lập trình shell ,Linux kernel và module nhân. Linux kernel cũng giống như một thư viện giúp lập trình viên xây dựng các kernel module
Trang 1BAN CƠ YẾU CHÍNH PHỦ
HỌC VIỆN KỸ THUẬT MẬT MÃ
BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH NHÂN LINUX
Hà Nội,03-2022
Giảng viên hướng dẫn: TS
Sinh viên thực hiện:
Nhóm 8
Trang 2LỜI MỞ ĐẦU
Hiện nay trong thời đại khoa học kỹ thuật phát triển, bên cạnh sự phát triển của cácphần mềm mã bản quyền, phần mềm mã nguồn đóng các phần mềm mã nguồn mởcũng có những bước phát triển mạnh mẽ Càng ngày càng có nhiều người tham gia vàothiết kế, lập trình mã nguồn mở Việc các phần mềm mã nguồn mở tung toàn bộchương trình của mình lên mạng làm cho phần mềm mã nguồn mở dễ dàng tiếp cậnhơn với mọi người, dễ dàng được phát triển hơn, được cả một cộng đồng đóng gópchung sức phát triển
Sự phát triển của phần mềm mã nguồn mở, nảy sinh một vấn đề là phải có nhữngcông cụ lập trình thích hợp trên nền tảng mã nguồn mở như các hệ điều hành linux,unix Trước yêu cầu đó thì đã xuất hiện một công cụ lập trình rất hiệu quả là lập trìnhshell ,Linux kernel và module nhân Linux kernel cũng giống như một thư viện giúplập trình viên xây dựng các kernel module Để tìm hiểu kỹ hơn về Linux Kernel vàngôn ngữ shell, nhóm em xin trình bày báo cáo về “Lập trình nhân Linux”
Nội dung báo cào gồm 2 phần:
Phần 1: Giới thiệu chung
Phần 2: Xây dựng chương trình
Trang 3LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn sự hướng dẫn của thầy Phạm Văn Hưởng,nhóm đã có thể hoàn thành tương đối tốt đề tài , đồng thời rút ra được các kinh nghiệmcho mình về nhiều mặt, thấy được những hạn chế và các lỗi cơ bản hay gặp trong quátrình làm bài tập lớn
Mặc dù đã cố gắng trong việc thực hiện đề tài, nhưng với những hạn chế về kiếnthức, kinh nghiệm cũng như thời gian biểu, sản phẩm của chúng em mới chỉ dừng lại ởmức tương đối ổn Bài tập lớn chắc chắn không thể tránh khỏi thiếu sót, nên chúng emrất mong nhận được đánh giá và góp ý của thầy/cô để chúng em có thể cải thiện kĩnăng của mình tốt hơn nữa trong tương lai
Chúng em xin chân thành cảm ơn!
Trang 4MỤC LỤC
DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT i
DANH MỤC HÌNH VẼ ii
DANH MỤC BẢNG BIỂU iv
CHƯƠNG 1 GIỚI THIỆU CHUNG 1
1.1 Tổng quan về Linux 1
1.1.1 Linux là gì ? 1
1.1.2 Các phiên bản của hệ điều hành Linux 2
1.1.3 Ưu nhược điểm 2
1.1.4 Hiệu năng và ứng dụng 3
1.2 Tổng quan về lập trình Shell 4
1.2.1 Shell là gì? 4
1.2.2 Các loại Shell thông dụng 4
1.2.3 Chức năng của Shell 5
1.3 Tổng quan về Linux Kernel 5
1.3.1 Linux Kernel là gì? 5
1.3.2 Chức năng của Linux Kernel 6
1.4 Tổng quan về công cụ hỗ trợ 6
1.4.1 Phần mềm Visual Studio Code 6
1.4.2 Phần mềm Ubuntu 9
1.4.3 Makefile 11
CHƯƠNG 2 XÂY DỰNG CHƯƠNG TRÌNH 13
2.1 Lập trình Shell 13
2.1.1 Quản lý file 13
2.1.2 Lập lịch tác vụ 19
2.1.3 Thiết lập thời gian hệ thống 21
2.1.4 Cài đặt/gỡ bỏ chương trình tự động 23
2.2 Lập trình trong Ubuntu 24
2.2.1 Process 24
2.2.2 Quản lý file 26
2.2.3 Socket 30
2.2.4 Network 35
2.3 Xây dựng mô-đun nhân và tích hợp vào hệ thống 37
2.3.1 Chương trình 37
2.3.2 Đăng kí một device 39
2.3.3 Chương trình tương tác với driver 40
2.4 Build an Ubuntu IoT image 40
2.4.1 Tạo hình ảnh Linux với Buildroot 40
Trang 5KẾT LUẬN 52 TÀI LIỆU THAM KHẢO 53
Trang 6DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT
IDE Integrated Development
EnvironmentGIT Graphical User Interface
DANH MỤC HÌNH V
Trang 7Hình 1 1 Các phiên bản hệ điều hành Linux 2
Hình 1 2 Visual Studio Code 7
Hình 1 3 Ubutu 10
YHình 2 1 Code quản lý file
14 Hình 2 2 Kết quả thực thi chương trình Tạo mới file 14
Hình 2 3 Kết quả thực thi chương trình Tạo mới folder 15
Hình 2 4 Kết quả thực thi chương trình Xóa file 16
Hình 2 5 Kết quả thực thi chương trình Xóa folder 16
Hình 2 6 Kết quả thực thi chương trình tạo mới file hoặc folder 17
Hình 2 7 Kết quả thực thi chương trình Hiển thị danh sách file và thư mục 18
Hình 2 8 Kết quả thực thi chương trình Ddiefu hướng thư mục con hoặc cha 18 Hình 2 9 Kết quả thực thi chương trình Tạo mới tác vụ 20
Hình 2 10 Kết quả thực thi chương trình tạo List tác vụ 21
Hình 2 11 Kết quả thực thi chương trình Lập lịch tác vụ 21
Hình 2 12 Kết quả thực thi thiết lập thời gian hệ thống 21
Hình 2 13 Kết quả thực thi chương trình Thiết lập thời gian hệ thống 23
Hình 2 14 Kết quả thực thi Cài đặt chương trình tự động 23
Hình 2 15 Kết quả thực thi Gỡ bỏ chương trình tự động 24
Hình 2 16 Kết quả thực thi chương trình Xem process id của chương trình hiện tại 26
Hình 2 17 Kết quả thực thi chương trình lấy ra id process hiện tại 27
Hình 2 18 Kết quả thực thi lệnh liệt kê file 28
Hình 2 19 Kết quả thực thi chương trình Tạo file 29
Hình 2 20 Kết quả thực thi chương trình Xóa file 29
Hình 2 21 Kết quả thực thi hàm Đọc file 30
Hình 2 22 Kết quả thực thi chương trình Tcp 31
Hình 2 23 Kết quả thực thi chương trình Udp 32
Hình 2 24 Kết quả thực thi chương trình Raw 33
Hình 2 25 Kết quả thực thi chương trình Raw 34
Hình 2 26 Kết quả thực thi chương trình TCP6 35
Hình 2 27 Kết quả thực thi chương trình udp6 35
Hình 2 28 Kết quả thực thi chương trình raw6 36
Hình 2 29 Kết quả thực thi chương trình Network 38
Hình 2 30 Kết quả thực hiện lệnh đăng kí một device : 40
Trang 8Hình 2 31 Kết quả thực thi chương trình xem id của device đã đăng kí 40
Hình 2 32 Kết quả thực thi chương trình Đăng ký 1 device 41
Hình 2 33 Kết quả thực thi chương trình tương tác với device 41
Hình 2 34 Cây thư mục Board 43
Hình 2 35 Kết quả định cấu hình hình ảnh tùy chỉnh 45
Hình 2 36 Make buildroot 46
Hình 2 37 Cài đặt môi trường khởi chạy máy ảo qemu 49
Hình 2 38 Chạy qemu 50
Hình 2 39 Kết quả thực thi ví dụ 51
Trang 9DANH MỤC BẢNG BIỂU
Bảng 1 1 Bảng các loại Shell thông dụng 4
Trang 10CHƯƠNG 1 GIỚI THIỆU CHUNG
1.1 Tổng quan về Linux
1.1.1 Linux là gì ?
Linux là một hệ điều hành máy tính được phát được phát triển dựa vào mô hình
“Phần mềm tự do” (free software) và việc phát triển phần mềm mã nguồn mở source software)
(open-Thành phần cơ bản của Linux là hạt nhân Linux (Linux kernel), là nhân hệ điềuhành được phát triển bởi Linus Torvalds và được công bố lần đầu tiên vào tháng 9 năm
1991 với phiên bản 0.01
Hầu hết các ngôn ngữ lập trình đều hỗ trợ Linux trực tiếp hoặc thông qua cácports bên thứ ba của cộng đồng Các công cụ phát triển ban đầu được sử dụng để xâydựng cả ứng dụng Linux và chương trình hệ điều hành được tìm thấy trong GNUtoolchain, bao gồm GNU Compiler Collection (GCC) và GNU Build System Trong số
đó, GCC cung cấp trình biên dịch cho Ada, C, C++, Go và Fortran Nhiều ngôn ngữlập trình có một bản triển khai tham khảo đa nền tảng hỗ trợ Linux, ví dụ như PHP,Perl, Ruby, Python, Java, Go, Rust và Haskell Phát hành lần đầu năm 2003, dự ánLLVM cung cấp một trình biên dịch mã nguồn mở đa nền tảng khác cho nhiều ngônngữ Trình biên dịch độc quyền cho Linux bao gồm Intel C++ Compiler, Sun Studio,
và IBM XL C/C++ Compiler BASIC dưới dạng Visual Basic được hỗ trợ dưới cáchình thức như Gambas, FreeBASIC, và XBasic, và BASIC nói chung nhưQuickBASIC hoặc Turbo BASIC dưới dạng QB64
Một tính năng phổ biến của các hệ thống tương tự Unix là bao gồm các ngôn ngữlập trình truyền thống có mục đích cụ thể như scripting, xử lý văn bản hay quản lý vàcấu hình hệ thống nói chung Các bản phân phối Linux hỗ trợ các shell script, awk, sed
và make Nhiều chương trình cũng có ngôn ngữ lập trình nhúng để hỗ trợ việc cấuhình hoặc dùng trong lập trình Ví dụ, biểu thức chính quy được hỗ trợ trong cácchương trình như grep và locate, MTA Sendmail truyền thống trên Unix chứa hệ thốngscripting Turing-đầy đủ của riêng nó, và trình soạn thảo văn bản nâng cao GNU Emacsđược xây dựng xung quanh trình một thông dịch Lisp thông dụng
Hầu hết các bản phân phối cũng bao gồm hỗ trợ cho PHP, Perl, Ruby, Python và cácngôn ngữ động khác Mặc dù không phổ biến bằng, nhưng đôi khi Linux cũng hỗ trợC# (thông qua Mono), Vala, và Scheme Guile Scheme đóng vai trò là một ngôn ngữscripting của các tiện ích hệ thống GNU, tìm cách làm cho các chương trình C nhỏ,tĩnh tuân theo quy tắc Unix có thể được mở rộng nhanh chóng và linh hoạt thông quamột hệ thống scripting với lập trình hàm Một số máy ảo Java và bộ công cụ phát triển
Trang 11Java trên Linux, bao gồm JVM (HotSpot) nguyên thủy của Sun và Hệ thống J2SE REcủa IBM, cũng như nhiều dự án nguồn mở như Kaffe và JikeRVM.
GNOME và KDE là các môi trường desktop phổ biến và cung cấp mộtframework cho phát triển ứng dụng Những dự án này dựa trên các widget toolkitstương ưng là GTK và Qt, mặt khác chúng cũng có thể được sử dụng độc lập vớiframework lớn hơn mình Cả hai đều hỗ trợ nhiều ngôn ngữ Có một số môi trườngphát triển tích hợp có sẵn bao gồm Anjuta, Code::Blocks, CodeLite, Eclipse, Geany,ActiveState Komodo, KDevelop, Lazarus, MonoDevelop, NetBeans, và Qt Creator,trong khi các trình soạn thảo lâu đời như Vim, nano và Emacs vẫn còn phổ biến
1.1.2 Các phiên bản của hệ điều hành Linux
Linux hiện có khá nhiều các bản phân phối khác nhau như Fedora, Ubuntu,OpenSUSE là các phiên bản thương mại, trong khi Debian và Arch Linux là các phiênbản "hướng cộng đồng" Và tất cả đều có một đặc điểm chung là có một Linux kernelbên trong Linux thu hút các lập trình viên bởi tính linh hoạt, sức mạnh, tốc độ và phầnmềm quản lý package cho phép cài đặt phần mềm một cách dễ dàng
Hình 1 1 Các phiên bản hệ điều hành Linux
1.1.3 Ưu nhược điểm
Ưu điểm
Hoàn toàn miễn phí
Đây là ưu điểm nổi bật được người dùng ưa thích và chọn Linux Theo đó, bạnkhông cần tốn bất kỳ chi phí nào vẫn có thể toàn quyền sử dụng đầy đủ tínhnăng, kể cả các ứng dụng văn phòng như OpenOffice, LibreOffice
Bảo mật cao
Trang 12Với Linux, các mã độc, virus hay phần mềm độc hại đều bị ngăn chặn do tínhbảo mật của hệ điều hành này cực kỳ cao Nhờ thế, bạn có thể an tâm sử dụng.
Có khả năng quản lý, điều phối nguồn tài nguyên của hệ thống
Giao diện hệ điều hành Linux đa dạng, có tính năng nâng cấp lên phiên bản mớiliên tục
Khả năng linh hoạt tốt
Linux cho phép người dùng tùy ý điều chỉnh hệ điều hành theo mục đích sửdụng Điều này mang lại khá nhiều thuận tiện cho các lập trình viên và công typhát triển phần mềm
Hoạt động “mượt” ngay cả với máy tính có cấu hình yếu
Các máy tính có cấu hình yếu hoàn toàn có thể vận hành ổn định, trơn tru khinâng cấp lên phiên bản mới của Linux Bởi hệ điều hành này tương đối gọnnhẹ, không tốn quá nhiều tài nguyên của máy tính
Nhược điểm
Linux cũng như bất cứ hệ điều hành nào, nó cũng có một số mặt hạn chế nhất định:
Số lượng ứng dụng chất lượng cao hỗ trợ trên Linux còn hạn chế
Một số nhà sản xuất không phát triển driver hỗ trợ nền tảng Linux
Khó làm quen, đặc biệt nếu bạn đã quá quen thuộc với Windows thì khi chuyểnsang Linux, bạn sẽ cần một khoảng thời gian để làm quen nó
1.1.4 Hiệu năng và ứng dụng
Hiệu năng của Linux trên desktop là một chủ đề gây tranh cãi, ví dụ vào năm
2007 Con Kolivas đã cáo buộc cộng đồng Linux tập trung hiệu năng trên các máy chủ.Ông đã từ bỏ việc phát triển nhân Linux vì thất vọng với sự thiếu tập trung vàodesktop, và sau đó trả lời phỏng vấn "nói tất cả" về chủ đề này Kể từ đó, một lượngphát triển đáng kể đã tập trung vào việc cải thiện trải nghiệm desktop Các dự án nhưsystemd và Upstart (đã dừng năm 2014) nhằm mục đích cho thời gian khởi độngnhanh hơn; các dự án Wayland và Mir nhằm mục đích thay thế X11 đồng thời tăngcường hiệu năng, bảo mật và giao diện của desktop
Nhiều ứng dụng phổ biến có sẵn cho nhiều hệ điều hành Ví dụ, MozillaFirefox, OpenOffice.org/LibreOffice và Blender có các phiên bản có thể tải xuống chotất cả các hệ điều hành chính Thêm vào đó, một số ứng dụng ban đầu được phát triểncho Linux, như Pidgin, và GIMP, đã được ported đến các hệ điều hành khác (bao gồmWindows và macOS) do mức độ phổ biến của chúng Ngoài ra, ngày càng nhiều ứngdụng desktop độc quyền cũng được hỗ trợ trên Linux, ví dụ như Autodesk Maya vàThe Foundry's Nuke trong lĩnh vực hoạt hình và hiệu ứng hình ảnh cao cấp Ngoài racòn có một số công ty đã ported các trò chơi của riêng họ hoặc của các công ty khác
Trang 13sang Linux, với Linux cũng là một nền tảng được hỗ trợ trên cả hai dịch vụ phân phối
kỹ thuật số phổ biến Steam và Desura
Nhiều loại ứng dụng khác có sẵn cho Microsoft Windows và macOS cũng chạytrên Linux Thông thường, một ứng dụng tự do sẽ tồn tại với các chức năng của ứngdụng được tìm thấy trên một hệ điều hành khác hoặc ứng dụng đó sẽ có phiên bản hoạtđộng trên Linux, ví dụ như với Skype và một vài video games như Dota 2 vàTeamFortress 2 Ngoài ra, dự án Wine cung cấp một lớp tương thích Windows để chạy cácdứng dụng Windows chưa sửa đổi trên Linux Nó được tài trợ bởi các doanh nghiệpthương mại bao gồm CodeWeavers,nơi sản xuất một phiên bản thương mại của phầnmềm Từ 2009, Google cũng đã đóng góp tài chính cho dự án Wine, CrossOver, mộtgiải pháp độc quyền dựa trên dự án Wine nguồn mở, hỗ trợ chạy các phiên bảnWindows của Microsoft Office, các ứng dụng Intuit như là Quicken và QuickBooks,Adobe Photoshop CS2, và nhiều game phổ biến như World of Warcraft Trong cáctrường hợp khác, khi không có port Linux của một số phần mềm trong các lĩnh vựcnhư xuất bản trên desktop và âm thanh chuyên nghiệp, thì có phần mềm tương đương
có sẵn trên Cũng có thể chạy các ứng dụng được viết cho Android trên các phiên bảncủa Linux khác bằng Anbox
1.2 Tổng quan về lập trình Shell
1.2.1 Shell là gì?
Shell là chương trình giữa bạn và Linux (hay nói chính xác hơn là giữa bạn với nhânLinux) Mỗi lệnh bạn gõ ra sẽ được Shell diễn dịch rồi chuyển tới nhân Linux Nóimột cách dễ hiểu Shell là bộ diễn dịch ngôn ngữ lệnh, ngoài ra nó còn tận dụng triệt đểcác trình tiện ích và chương trình ứng dụng có trên hệ thống…
1.2.2 Các loại Shell thông dụng
Hiện nay có một số loại shell trong các hệ thống Unix, trong một số trường hợp trongmột hệ thống nào đó có thể có một hoặc nhiều shell cùng tồn tại Một số loại phổ biếnđang tồn tại như: Bourne shell, Korn shell, Cshell,Bash Mỗi loại có sự khác nhaunhưng tất cả đều cung cấp đầy đủ công cụ để thiết lập môi trường giao tiếp giữa người
sử dụng và Unix
Bảng 1 1 Bảng các loại Shell thông dụng
(non-root user)
Câu lệnh mặcđịnh (Root user)
Trang 14Bourne Shell
(sh)
/bin/shand /sbin/sh
Ngoài ra còn có một số Shell khác như: ssh, nfssh, mcsh…
1.2.3 Chức năng của Shell
Việc thao tác với kernel cực kỳ phức tạp phải đòi hỏi có kỹ thuật cao, để giảm sự phứctạp cho người sử dụng và để bảo vệ kernel từ những sai sót của người sử dụng, shell đãđược xây dựng thành lớp bao quanh kernel Người dùng gửi yêu cầu tới shell, shell sẽbiên dịch lại và sau đó sẽ gửi lại đến kernel
Thông thường với UNIX có ba loại shell được sử dụng phổ biến, tất cả đều nhằm mụcđích cung cấp các chức năng sau
Torvalds đã tạo ra Linux kernel vào năm 1991 Ban đầu, ông đặt tên cho dự án làFreax (kết hợp giữa các từ “free”, “freak” và “UNIX”) Nhưng một đồng nghiệp khác
Trang 15của Torvalds lại thích cái tên Linux (sau đó Linux trở thành tên gọi chính thức).Torvalds đã phát hành phiên bản Linux đầu tiên vào năm 1992 theo giấy phép copyleftGNU (giấy phép được tự do sao chép, chỉnh sửa, phân phối và không có tính độcquyền), trở thành một phần quan trọng trong thành công của dự án.
Phần lớn trải nghiệm desktop Linux đến từ dự án GNU, một sáng kiến cũ tạo ra hệđiều hành desktop gần như hoàn chỉnh Tất cả những gì nó cần là một kernel và Linux
đã đáp ứng nhu cầu đó Đây là lý do tại sao một số người gọi hệ điều hành này làGNU/Linux
Những desktop mã nguồn mở và miễn phí khác, như FreeBSD, trông giống với Linux
vì chúng chạy hầu hết các phần mềm GNU giống nhau
Do Linux kernel có sẵn theo giấy phép GNU, nên ít quan tâm đến việc tiếp tục pháttriển một kernel riêng biệt như một phần của dự án GNU Và thay vì tạo ra các kernelcạnh tranh khác, như trong Windows và macOS, nhiều công ty đã chọn sử dụng vàđóng góp cho Linux kernel
Linux kernel đã phát triển thành một dự án lớn chứa hàng triệu dòng code Hàng ngànngười và hơn một nghìn công ty đã đóng góp cho sự phát triển của kernel Đây là mộttrong những ví dụ nổi bật nhất về phần mềm mã nguồn mở và miễn phí trên thế giới
1.3.2 Chức năng của Linux Kernel
Trong khi Linux vẫn là một hệ điều hành desktop tương đối “kén” người dùng, thìkernel lại được sử dụng rộng rãi ở nhiều nơi Nhờ có Android, Linux kernel đã xuấthiện trên hầu hết các điện thoại thông minh, tất cả các loại thiết bị di động, bao gồmnhững thiết bị đeo trên người và camera
Linux là “linh hồn” của 500 siêu máy tính mạnh nhất và phần lớn cơ sở hạ tầngInternet Nói về đám mây có nghĩa là ta đang chủ yếu đề cập đến những máy chủ hỗtrợ Linux được kết nối với nhau
Raspberry Pi nhỏ bé là một máy tính hỗ trợ Linux, có kích thước chỉ bằng thẻ tín dụng,hoàn toàn mở để mọi người sửa đổi và sử dụng trong các dự án theo ý muốn
1.4 Tổng quan về công cụ hỗ trợ
1.4.1 Phần mềm Visual Studio Code
1.4.1.1 Giới thiệu phầm mềm Visual Studio Code
Visual studio là một phần mềm hỗ trợ đắc lực hỗ trợ công việc lập trình website Công
cụ này được tạo lên và thuộc quyền sở hữu của ông lớn công nghệ Microsoft Năm
1997, phần mềm lập trình nay có tên mã Project Boston Nhưng sau đó, Microsoft đãkết hợp các công cụ phát triển, đóng gói thành sản phẩm duy nhất
Trang 16Hình 1 2 Visual Studio Code
Visual Studio là hệ thống tập hợp tất cả những gì liên quan tới phát triển ứng dụng,bao gồm trình chỉnh sửa mã, trình thiết kế, gỡ lỗi Tức là, bạn có thể viết code, sửa lỗi,chỉnh sửa thiết kế ứng dụng dễ dàng chỉ với 1 phần mềm Visual Studio mà thôi Không dừng lại ở đó, người dùng còn có thể thiết kế giao diện, trải nghiệm trongVisual Studio như khi phát triển ứng dụng Xamarin, UWP bằng XAML hay Blendvậy
1.4.1.2 Tính năng Visual Studio Code
Tính đến nay, Visual Studio vẫn được coi là phần mềm lập trình hệ thống hàng đầu,chưa có phần mềm nào có thể thay thế được nó Được đánh giá cao như vậy bởi VisualStudio sở hữu nhiều tính năng cực kỳ hấp dẫn Cụ thể:
Đa nền tảng
Phần mềm lập trình Visual Studio của Microsoft hỗ trợ sử dụng trên nhiều nềntảng khác nhau Không giống như các trình viết code khác, Visual Studio sửdụng được trên cả Windows, Linux và Mac Systems Điều này cực kỳ tiện lợicho lập trình viên trong quá trình ứng dụng
Đa ngôn ngữ lập trình
Không chỉ hỗ trợ đa nền tảng, Visual Studio cũng cho phép sử dụng nhiều ngônngữ lập trình khác nhau từ C#, F#, C/C++, HTML, CSS, Visual Basic,JavaScript,… Bởi vậy, Visual Studio có thể dễ dàng phát hiện và thông báo chobạn khi các chương trình có lỗi
Trang 17 Hỗ trợ website
Visual Studio code cũng hỗ trợ website, đặc biệt trong công việc soạn thảo
và thiết kế web
Kho tiện ích mở rộng phong phú
Mặc dù Visual Studio có hệ thống các ngôn ngữ hỗ trợ lập trình khá đa dạng.Nhưng nếu lập trình viên muốn sử dụng một ngôn ngữ khác, bạn có thể dễ dàngtải xuống các tiện ích mở rộng Tính năng hấp dẫn này được hoạt động như mộtphần chương trình độc lập nên không lo làm giảm hiệu năng của phần mềm
Lưu trữ phân cấp
Phần lớn các tệp dữ liệu đoạn mã của Visual Studio đều được đặt trong các thưmục tương tự nhau Đồng thời, Visual Studio cũng cung cấp một số thư một chocác tệp đặc biệt để bạn lưu trữ an toàn, dễ tìm, dễ sử dụng hơn
Kho lưu trữ an toàn
Với Visual Studio, bạn có thể hoàn toàn yên tâm về tính lưu trữ, bởi phần mềm
đã được kết nối GIT và một số kho lưu trữ an toàn được sử dụng phổ biến hiệnnay
Hỗ trợ thiết bị đầu cuối
Phần mềm Visual Studio cũng tích hợp các loại thiết bị đầu cuối, giúp ngườidùng không cần chuyển đổi giữa hai màn hình hay trở về thư mục gốc khi thựchiện một thao tác cần thiết nào đó
Trang 18vẫn được đánh giá cao về tính chuyên nghiệp Đặc biệt, tính năng này còn cóthể phát hiện tất cả các đoạn mã không đầy đủ, nhắc lập trình viên, gợi ý sửađổi, khai báo biến tự động trong trường hợp lập trình viên quên, giúp bổ sung
cú pháp còn thiếu,…
Tính năng comment
Một tính năng cũng khá hay ho, hỗ trợ cho người lập trình trong trường hợp
“nhớ nhớ quên quên” đó là tính năng bình luận Tính năng này cho phép lậptrình viên để lại nhận xét, giúp dễ dàng ghi nhớ công việc cần hoàn thành,không bỏ sót công đoạn nào
1.4.1.3 Ưu nhược điểm
Được đánh giá là một trong những công cụ lập trình có 1 – 0 – 2, Visual Studio là mộtlựa chọn tuyệt vời dành cho các lập trình viên Đặc biệt là khi công cụ này còn sở hữunhững ưu điểm vượt trội hơn hẳn bất kỳ IDE nào khác như:
Ít dung lượng
Tính năng phong phú, đa dạng và mạnh mẽ
Hỗ trợ nhiều nền tảng khác nhau (Linux, Windows, Mac)
Hỗ trợ đa ngôn ngữ (HTML, CSS, C#, F#, C/C++, JSON, JavaScript,…)
Tính năng Intellisense chuyên nghiệp
Giao diện thân thiện dễ sử dụng
Cập nhật đa dạng phiên bản cho nhiều đối tượng sử dụng khác nhau,…
Tuy nhiên Visual Studio sẽ không phù hợp với những lập trình viên PHP bởi đây làmột ngôn ngữ mã nguồn mở, để có thể lập trình website hoặc web app bằng PHP tốtnhất thì bạn nên tham khảo các IDE dành riêng cho ngôn ngữ PHP tại http://free-php-editor.com/
Cho đến nay, nhà phát triển Microsoft vẫn đang không ngừng cải tiến và ứng dụng cáccông nghệ mới cho Visual Studio Bởi vậy, đây là “cánh tay đắc lực” hỗ trợ cho cácdevelopers, data administrators, testers và bất kỳ ai có nhu cầu tiếp cận, tìm hiểu về lậptrình đều có thể sử dụng Visual Studio
1.4.2 Phần mềm Ubuntu
1.4.2.1 Ubuntu là gì?
Ubuntu là một hệ điều hành trên máy tính, và nó được phát triển dựa trênLinux/Debian GNU Lần đầu được giới thiệu vào năm 2004, tính đến năm 2007,Ubuntu đây là phiên bản chiếm 30% số bản tùy biến của Linux được cài đặt trên máytính, và cũng là bản tuỳ biến Linux phổ biến nhất Công ty Canonical đã và đang chịu
Trang 19trách nhiệm trong việc tài trợ Ubuntu, giúp cho hệ điều hành này có thể phát triểntrong tương lai.
Hình 1 3 Ubutu
Có ba loại phiên bản Ubuntu mà người dùng cần biết đến, bao gồm Ubuntuphiên bản thông thường, phiên bản hỗ trợ lâu dài (LTS) và các dự án khác Thôngthường, bạn nên sử dụng phiên bản hỗ trợ lâu dài để nhận được hỗ trợ trong vòng 3năm đối với máy tính để bàn và 5 năm đối với máy chủ
1.4.2.2 Một số tính năng chính của Ubuntu
Thừa hưởng tính năng nổi bật của Linux: Vì đây là phiên bản hệ điều hànhphát triển dựa trên Linux, vậy nên sẽ thừa hưởng được các tính năng đặc biệtcủa Linux Chẳng hạn như khả năng tùy biến hiệu suất làm việc, tốc độ, cũngnhư khả năng bảo mật trước sự tấn công của malware hay virus
Hỗ trợ người dùng trong việc cài đặt: Để kiểm tra sự tương thích của các phiênbản với máy tính, bạn có thể sử dụng đĩa chạy trực tiếp phiên bản đó của hệđiều hành, từ đó người dùng sẽ quyết định xem có thể cài đặt trên thiết bị của
họ hay không thông qua phần mềm Ubiquity
Ngoài ra, người dùng sử dụng Windows có thể phân vùng lại đĩa cứng để càiđặt Ubuntu, và bạn cũng có thể gỡ bỏ nó khá dễ dàng.ngay cả khi đang sử dụngWindows
Giao diện: Ubuntu hiện đang sử dụng giao diện đồ hoạ Unity, và giao diện nàyđược thiết kế ra với mục đích tối ưu diện tích màn hình sử dụng, đồng thờicũng mang lại trải nghiệm dùng thân thiện
Trang 20 Ứng dụng: Hệ điều hành Ubuntu đã được cài sẵn các phần mềm mã nguồn mở,chẳng hạn như trình duyệt Internet Firefox, bộ ứng dụng văn phòng đến từLibreOffice (phiên bản Ubuntu 10.04 trở đi) hay trình tải file torrentTranmission Ngoài ra, hệ điều hành này cũng có một kho các ứng dụng miễnphí có tên là Ubuntu Software Center.
1.4.2.3 Ưu điểm của Ubuntu
Ưu điểm của hệ điều hành Ubuntu
Không yêu cầu cấu hình mạnh: Thông thường, quá trình cài đặt Ubuntu trênmáy tính sẽ giao động từ 20 - 30 phút, tuỳ theo cấu hình của máy, và bạn chỉcần có thiết bị có dung lượng RAM từ 256MB trở lên Và cấu hình khuyêndùng thì chỉ cần RAM trên 384MB, và CPU là 700 MHz (x86)
Có nhiều ứng dụng miễn phí: Bạn không cần tốn quá nhiều chi phí cho các ứngdụng, và chúng đều có mặt trên Ubuntu Software Center Chẳng hạn như bộứng dụng văn phòng LibreOffice miễn phí cũng đã được cài sẵn trên hệ điềuhành Ubuntu
Khả năng tương tác sâu: Mặc dù đôi khi phải sử dụng các câu lệnh để tương tácvới thiết bị, nhưng nhờ vậy mà người dùng có thể điều khiển phần mềm mộtcách sâu hơn, từ đó hiệu quả công việc sẽ tốt hơn, nhất là khi so sánh với cácgiao diện đồ họa Đồng thời, đây là hệ điều hành mã nguồn mở, thế nên Ubuntu
có độ tùy biến cao
Có tính bảo mật cao: Bạn không cần lo lắng quá nhiều về việc có cần cài đặtcác phần mềm diệt virus như trên Windows bởi vì số lượng malware hay viruskhá ít trên hệ điều hành Ubuntu
1.4.3 Makefile
1.4.3.1 Makefile là gì?
Makefile là một file dạng script chứa các thông tin:
Cấu trúc project (file, sự phụ thuộc)
Trang 211.4.3.3 Nguyên lý biên dịch lại của Makefile
Việc compile lại project dựa vào hai yếu tố:
Thời gian chỉnh sửa (date modified)
Cây phụ thuộc trong Makefile
Có nghĩa là một khi Dependency thay đổi thì Target tương ứng cũng phải đượccompile lại
Trang 22CHƯƠNG 2 XÂY DỰNG CHƯƠNG TRÌNH
2.1 Lập trình Shell
Lập trình shell để quản lý file, lập lịch tác vụ, thiết lập thời gian hệ thống, cài đặt/gỡ
bỏ các chương trình tự động
2.1.1 Quản lý file
2.1.1.1 Khái quát chức năng
Chương trình shell quản lý file bao gồm các chức năng sau:
Tạo mới file , thư mục
Chỉnh sửa thư mục và file
echo "help hiển thị danh sách lệnh"
echo "creatfile tạo một file mới"
echo "creatfolder tạo một folder mới"
echo "deletefile xóa một file"
echo "deletefolder xóa một folder"
echo "copy để copy"
echo "listfile để xem danh sách file"
echo "cdfile để dieu huong file"
Trang 23Hình 2 1 Code quản lý file
2.1.1.3 Tạo mới file
Chương trình nhận vào tên file sau đó thực hiện tạo mới file thông qua lệnhtouch và thông báo tạo file thành công
echo "Tao file $name thanh cong"
Khi nhập lệnh creatfile sẽ thực hiện tạo file mới qua lệnh touch và hiển thị “Taofile $name thanh cong” với $name là tên file Còn khi ta creatfile nhưng không có tênfile sẽ hiển thị “Chua nhap ten file” Hay khi nhập một tên file đã có thì hiển thị “File
da ton tai” Như kết quả hình 2.2 dưới đây
Hình 2 2 Kết quả thực thi chương trình Tạo mới file
Trang 242.1.1.4 Tạo mới folder
Chương trình nhận vào tên thư mục sau đó thực hiện tạo mới thư mục thông qua lệnhmkdir và thông báo tạo thư mục thành công
echo "Tao thu muc $name thanh cong"
Hình 2 3 Kết quả thực thi chương trình Tạo mới folder
Trang 25Hình 2 4 Kết quả thực thi chương trình Xóa file
echo "Xoa thu muc $name thanh cong"
Hình 2 5 Kết quả thực thi chương trình Xóa folder
2.1.1.7 Copy file hoặc folder
Chương trình nhận tên file/thư mục nguồn và nhận tên file/thư mục đích sau đó thựchiện lệnh cp để copy và thông báo copy thành công
Trang 26echo "Copy file $name1 sang $name2 thanh cong"
Hình 2 6 Kết quả thực thi chương trình tạo mới file hoặc folder
2.1.1.8 Hiển thị danh sách file và thư mục
Chương trình nhận tên thư mục cần liệt kê danh sách hoặc sẽ liệt kê danh sách file ởthư mục hiện tại nếu không nhập tên thư mục
Trang 27ls -l
else
ls -l $name
Hình 2 7 Kết quả thực thi chương trình Hiển thị danh sách file và thư mục
2.1.1.9 Điều hướng thư mục con hoặc cha
Chương trình nhận vào tên thư mục con muốn điều hướng đến hoặc sẽ điều hướng đếnthư mục cha nếu không nhập vào tên thư mục sau đó in ra đường dẫn đến thư mục
Trang 282.1.2 Lập lịch tác vụ
2.1.2.1 Khái quát chức năng
Chương trình lâp lịch tác vụ bao gồm các chức năng sau:
Hiển thị list tác vụ
Tạo mới tác vụ
Xóa tác vụ
2.1.2.2 Chương trình
File task.sh thực hiện in 1 dòng chữ và viết vào file log.txt:
echo "crontab is running" >> / home/pink0508/Desktop/BTL_linux/bai1/log.txt
echo "Thiet lap thoi gian lap lich."
echo "Nhap phut"
read min
echo "Nhap gio"
read hour
echo "Nhap ngay tac vu chay hang thang (* cho tat ca cac ngay)."
echo "Neu muon chon ngay rieng le, hay nhap cac ngay ban muon, phan cachboi dau \",\""
read day
echo "Nhap thang tac vu chay (* cho tat ca cac thang)."
echo "Neu muon chon thang rieng le, hay nhap cac thang ban muon, phan cachboi dau \",\""
read month
echo "Nhap ngay tac vu chay trong tuan (* cho tat ca cac ngay)"
echo "Neu chon cac ngay rieng le, hay nhap cac ngay ban muon, phan cach boidau \",\""
echo "Chu Nhat la 0"
read dow
echo "Xac nhan thuc hien thao tac (Y/N)?"
Trang 29else echo "Cancel\n"
Hình 2 9 Kết quả thực thi chương trình Tạo mới tác vụ
Trang 302.1.2.6 Kết quả thực thi chương trình
Hình 2 11 Kết quả thực thi chương trình Lập lịch tác vụ
2.1.3 Thiết lập thời gian hệ thống
Chương trình thiết lập thời gian hệ thống gồm:
Thiết lập thời gian
Thiết lập ngày-tháng- năm
Hiển thị thời gian hiện tại
Xem thời gian
Với lệnh “infor” sẽ trả về kết quả như hình dưới đây
Hình 2 12 Kết quả thực thi thiết lập thời gian hệ thống
Chương trình nhận lệnh “hour” và nhận vào tham số thời gian về giờ với định dạng
“hh:mm:ss” và cài đặt thời gian tạm thời sau đó in ra thời gian ra màn hình