Phần mềm mã nguồn mở

Tài liệu Phần mềm mã nguồn mở: PHẦN MỀM MÃ NGUỒN MỞ KHÁI NIỆM VỀ MÃ NGUỒN MỞ  Open Source: phần mềm có mã nguồn mở  Free software: phần mềm miễn phí, đôi khi free software đƣợc dùng với ý nghĩa bao gồm cả open- source software và free software  Phần mềm nguồn mở (PMNM) đƣợc cung cấp dƣới cả dạng mã và nguồn, không chỉ là miễn phí về giá mua mà chủ yếu là miễn phí về bản quyền: ngƣời dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung qui định trong giấy phép PMNM (ví dụ General Public Licence – GPL) KHÁI NIỆM VỀ MÃ NGUỒN MỞ  Richard Stallman (MIT) đƣa ra khái niệm đầu tiên về mã nguồn mở 1984 (GNU)  Thành lập FSF (Free Software Fundation, 1985) để quản lý dự án GNU  Phân biệt : OPEN & FREE LỢI ÍCH CỦA OPEN SOURCE  Tự do sao chép, chia sẻ  Nhiều bản phân phối, không bị ràng buộc vào nhà cung cấp  Bảo mật tốt  Dễ dàng thay đổi, phát triển theo mục đích  Hỗ trợ cồng đồng cao BẤT LỢI CỦA OS  Không đảm bảo vì không thu phí...

pdf417 trang | Chia sẻ: Khủng Long | Lượt xem: 2445 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Phần mềm mã nguồn mở, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
PHẦN MỀM MÃ NGUỒN MỞ KHÁI NIỆM VỀ MÃ NGUỒN MỞ  Open Source: phần mềm có mã nguồn mở  Free software: phần mềm miễn phí, đôi khi free software đƣợc dùng với ý nghĩa bao gồm cả open- source software và free software  Phần mềm nguồn mở (PMNM) đƣợc cung cấp dƣới cả dạng mã và nguồn, không chỉ là miễn phí về giá mua mà chủ yếu là miễn phí về bản quyền: ngƣời dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung qui định trong giấy phép PMNM (ví dụ General Public Licence – GPL) KHÁI NIỆM VỀ MÃ NGUỒN MỞ  Richard Stallman (MIT) đƣa ra khái niệm đầu tiên về mã nguồn mở 1984 (GNU)  Thành lập FSF (Free Software Fundation, 1985) để quản lý dự án GNU  Phân biệt : OPEN & FREE LỢI ÍCH CỦA OPEN SOURCE  Tự do sao chép, chia sẻ  Nhiều bản phân phối, không bị ràng buộc vào nhà cung cấp  Bảo mật tốt  Dễ dàng thay đổi, phát triển theo mục đích  Hỗ trợ cồng đồng cao BẤT LỢI CỦA OS  Không đảm bảo vì không thu phí  Quá nhiều phiên bản : khó chọn lựa  Nhập nhằng về bản quyền  Ví dụ : Autocad, MatLab vs Octave CƠ HỘI KINH DOANH  Open source đã đƣợc chấp nhận trong các công ty lớn.. Thậm chí Microsoft đã phải lƣu tâm đến Open Source nhƣ đối thủ to lớn.  Các doanh nghiệp vừa và nhỏ cũng sẽ ƣa chuộng phần mềm Open Source hơn.  Open Source đã giành đƣợc khoảng 70% thị trƣờng ứng dụng Web, và dƣờng nhƣ con số này vẫn tiếp tục tăng lên hàng năm. CÁC LOẠI GIẤY PHÉP ▪Phần mềm thƣơng mại (Commercial Software) ▪Phần mềm thử nghiệm giới hạn (Limited Trial Software) ▪Phần mềm “chia sẻ” (Shareware) Phần mềm sử dụng phi thƣơng mại (Non- commercial Use) Phần mềm không phải trả phần trăm cho nhà sản xuất (Royalties Free Binaries Software). Thƣ viện phần mềm không phải trả phần trăm (Royalties Free Software Libraries). CÁC LOẠI GIẤY PHÉP PHẦN MỀM MÃ NGUỒN MỞ KIỂU BSD – (OPEN SOURCE BSD-STYLE)  Một nhóm nhỏ khép kín (closed team) đã phát triển các PMNM theo giấy phép phân phối Berkely (BSD – Berkely Software Distribution) cho phép sử dụng và phân phối lại các phần mềm này dƣới dạng mã nhị phân và mã nguồn. Tuy ngƣời dùng có quyền sửa đổi mã, nhƣng về nguyên tắc nhóm phát triển không cho phép ngƣời dùng tự do lấy mã nguồn từ kho mã ra sửa (gọi là check-out) và đƣa mã đã sửa vào lại kho mã mà không đƣợc họ kiểm tra trƣớc (gọi là các “check-in”).  PMNM kiểu Apache (Open Source Apache-style) Chấp nhận nguồn mở kiểu BSD nhƣng cho phép những ngƣời ngoài nhóm phát triển xâm nhập vào lõi của mã nền (core codebase), tức là đƣợc phép thực hiện các “check-in”. CỘNG ĐỒNG MÃ NGUỒN MỞ GNU  Cộng đồng GNU ( “Gnu is Not Unix”) đã xây dựng nhiều ứng dụng trên Unix (Linux) : Word proccessing ,Office, Game, Multimedia, networking và các compiler , interpriter , programming languages  GNU – Phi lợi nhuận song cần tuân thủ một số quy định về bản quyền của GNU - GPL (General Public License) – “copyleft”( thay cho “copyright”)  GNU cung cấp bộ biên dịch C/C++bao gồm :  gcc trình biên dịch C  g++ trình biên dịch C++  gdb Debug  GNU make Trình quản lý mã nguồn và trợ giúp biên dịch  bash shell  Các ngôn ngữ PHP&MySQL , Python , Perl thuộc loại mã nguồn mở GIẤY PHÉP CÔNG CỘNG GNU (GPL)  Giấy phép công cộng GNU Phiên bản 2, tháng 6/1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111- 1307, USA  Mọi ngƣời đều đƣợc phép sao chép và lƣu hành bản sao nguyên bản nhƣng không đƣợc phép thay đổi nội dung của giấy phép này. BẢN QUYỀN  Các chƣơng trình tuân theo GNU Copyleft hoặc GPL (General Public License) có bản quyền nhƣ sau [1] :  Tác giả vẫn là sở hữu của chương trình của mình.  Ai cũng được quyền bán copy của chương trình với giá bất kỳ mà không phải trả cho tác giả ban đầu.  Người sở hữu chương trình tạo điều kiện cho người khác sao chép chương trình nguồn để phát triển tiếp chương trình CÁC ĐIỀU KIỆN VÀ ĐIỀU KHOẢN.  Áp dụng những điều khoản trên nhƣ thế nào đối với chƣơng trình của bạn  Nếu bạn xây dựng một chƣơng trình mới, và muốn cung cấp một cách tối đa cho công chúng sử dụng, bạn cần phát triển chƣơng trình đó thành phần mềm tự do để ai cũng có thể cung cấp lại và thay đổi theo những điều khoản nhƣ trên.  Để làm đƣợc việc này, hãy đính kèm những thông báo nhƣ sau cùng với chƣơng trình của mình. An toàn nhất là đính kèm chúng trong phần đầu của tập tin mã nguồn để thông báo một cách hiệu quả nhất về việc không có bảo hành; và mỗi tệp tin đều phải có ít nhất một dòng về “bản quyền” và trỏ đến toàn bộ thông báo.  Một dòng đề tên chương trình và nội dung của nó.  Bản quyền (C) năm, tên tác giả.  Chƣơng trình này là phần mềm tự do, bạn có thể cung cấp lại và/hoặc chỉnh sửa nó theo những điều khoản của Giấy phép Công cộng của GNU do Tổ chức Phần mềm Tự do công bố; phiên bản 2 của Giấy phép, hoặc bất kỳ một phiên bản sau đó (tuỳ sự lựa chọn của bạn).  Chƣơng trình này đƣợc cung cấp với hy vọng nó sẽ hữu ích, tuy nhiên KHÔNG CÓ BẤT KỲ MỘT BẢO HÀNH NÀO; thậm chí kể cả bảo hành về KHẢ NĂNG THƢƠNG MẠI hoặc TÍNH THÍCH HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ. Xin xem Giấy phép Công cộng của GNU để biết thêm chi tiết. CÁC ĐIỀU KIỆN VÀ ĐIỀU KHOẢN. NHẬP MÔN LINUX Email : hoangvinh@free.fr Nội dung Lịch sử phát triển Linux Hệ thống Linux Cài đặt Linux Quản lý Linux Toàn cảnh hệ điều hành Operating Systems Windows personal 95; 98; Me Unix standard Unix Free Windows professional Macintosh NT; 2000; XP; Vista; 7; 8 BSD; System V; Solaris Free BSD; Linux System 1-7; Mac OS (Unix kernel) OS usage – 09/2012 Tại sao sử dụng unix 1. Linux – HĐH ổn định và mạnh : Đƣợc kiểm tra bởi số lƣợng lớn ngƣời dùng 2. Linux đƣợc trang bị một số lƣợng lớn phần mềm : không chỉ riêng về phía lập trình viên mà còn dành cho ngƣời sử dụng 3. Linux thƣờng xuyên đƣợc cập nhật để chống lại lổ hổng và virus 4. Linux – miễn phí và có thể cài đặt trên nhiều hệ thống phần cứng khác nhau 5. Sử dụng Linux : đóng góp và chia sẻ lẫn nhau Một vài khuyết điểm  Khó tìm driver  Hỗ trợ cộng đồng – Không đảm bảo 100%  Không phải là 1 hệ thống Linux duy nhất Windows vs linux 1. Windows dễ dàng cài đặt : 2. Windows là miễn phí : 3. Windows thƣờng xuyên nhiễm virus : 4. Windows đƣợc dùng tại các công ty, nên chúng ta phải học nó : 5. Linux chỉ dùng để lập trình trên Console : 6. Linux không hỗ trợ các chƣơng trình của Windows : 7. Linux nhanh hơn Windows : Đúng và Sai Sai Đúng Đúng và Sai Đúng và Sai Đúng và Sai Đúng và Sai Lịch sử phát triển unix 1. 1962 : Time-sharing (CTSS) đƣợc phát triển tại MIT và rất thành công 2. 1965 : MIT + Bell Labs + General Electric : MULTICS (MULTiplexed Information & Computing Services) mục đích thƣơng mại nhƣng không thành công 3. 1969 : Ken Thompson và Dennis Ritchie viết 1 phiên bản nhân (kernel ) đầu tiên cho 1 HĐH trong phòng thí nghiệm BELL, và đặt tên là UNIX (lấy cảm hứng từ MULTCICS) 4. Năm 1970 : Dennis Ritchie tạo ra ngôn ngữ C, và đã viết lại UNIX bằng C. Lịch sử phát triển unix 1. 1974 : xuất bản The Unix Timesharing System, Comm. Ritchie & Thompson nhận giải thƣởng ACM Turing Award năm 1984 2. 1980 : BSD – Berkerly Systems Distribution 3. 1987 : Minix – Unix đƣợc dùng trong giáo dục 4. 25/08/1991 : Linus Torvalds cho ra đời Linux version 0.01 5. 01/1992, Linus cho ra version 0.12 với shell và C compiler Lịch sử phát triển unix Sở hữu unix Các hãng sở hữu UNIX bản quyền Các hãng sở hữu UNIX miễn phí OPEN GROUP sở hữu : • Tên gọi UNIX ® • Chuẩn Single UNIX Specification Đặc điểm chính của HĐH Linux 1. Nhiều tiến trình (process) 2. Truy cập nhiều ngƣời dùng 3. Swap bộ nhớ lên đĩa 4. Nạp module thực hiện khi cần 5. Cùng sử dụng chƣơng trình 6. Thƣ viện chung Đặc điểm chính của HĐH Linux 1. Bộ đệm động của đĩa 2. System VIPC 3. Hỗ trợ các định dạng hệ thống tập tin khác nhau 4. Khả năng hỗ trợ mạng 5. Khả năng chạy chương trình của HĐH khác 6. Làm việc trên các phần cứng khác nhau CÁC PHIÊN BẢN LINUX  Nhiều phiên bản Linux hiện đang tồn tại  Số hiệu phiên bản theo định dạng : X.YY.ZZ • Nếu YY là số chẵn : phiên bản ổn định. • Nếu YY là số lẻ : phiên bản thử nghiệm . • Chú ý phân biệt số phiên bản của hệ điều hành (Linux kernel) với phiên bản của các phân phối (ví dụ RedHat 9.0 với kernel Linux 2.4.5-15). Bản phân phối linux (LINUX DISTRIBUTION) CÀI ĐẶT LINUX hoangvinh@free.fr Cài đặt HĐH LINUX - Fedora  Software : Fedora 17 DVD   Yêu cầu phần cứng : o CPU : 400 MHz processor o Ít nhất : 1 GB RAM o Ổ cứng : 10 GB trống 1. Sửa cấu hình máy để boot từ ổ CDROM 2. Đặt đĩa số 1 vào ổ CDROM và khởi động lại máy 3. Lựa chọn một phương pháp cài đặt, ví dụ text 4. Chọn kiểu cài đặt , server hay máy trạm hay custom 5. Chia lại ổ đĩa cứng (Patitions) 6. Lựa chọn các gói sẽ cài đặt (RPM) 7. Linux tự làm việc 8. Cấu hình lại nếu có yêu cầu hiển thị trên màn hình. Tiến trình cài đặt bình thường như cài đặt HĐH Windows Màn hình đăng nhập FEDORA CÀI ĐẶT FEDORA TRÊN MÁY ẢO  Máy chính cài bộ cài đặt VMWare Workstation Trên HĐH đang sử dụng : XP, 7  Máy ảo : Cài đặt thông qua File DVD Fedora ISO  VMWare Player : Chƣơng trình chạy (Play)máy ảo Yêu cầu lớp ở lớp thực hành :  Cài đặt Fedora 17 trên máy ảo bằng file .ISO  Đặt username theo dạng : tên.”chữ cái đầu họ và chữ lót”.MSSV CÀI ĐẶT FEDORA TRÊN MÁY ẢO  Ví dụ : Trần Văn An. MSSV : 0910203040  Username đặt là : antv0910203040  Lƣu cài đặt máy ảo và chép vào USB (khuyến cáo 8GB trở lên) CÀI ĐẶT NHIỀU HỆ ĐIỀU HÀNH CÙNG LINUX  Mục đích : tận dụng thế mạnh của nhiều HĐH khác nhau để lập trình, giải trí.  Song Song : Linux + Win XP/Win 7  Chú ý : Backup dữ liệu trƣớc khi cài đặt Partition và phân chia partition 23 1. Để dễ quản lý HDD , ta chia nó ra thành nhiều vùng khác nhau. Mỗi vùng nhƣ thế ta gọi là một partition. 2. Số lƣợng partition đƣợc giới hạn trên một ổ cứng - Có tối đa là 4 primary partition 3. Có duy nhất một active partition Để chia nhiều hơn bốn partition, ta cần tạo một extended partition (cái này là primary), và trong extended partition này, ta sẽ tạo các partition gọi là logical partition. Số lƣợng logical partition là không giới hạn . Nhƣng bạn nên nhớ rằng logical partition không thể là một active partition đƣợc. Khái niệm Partition và phân chia Partition 25 Phân chia partition Dùng “partition magic” để phân chia HDD thành nhiều partitions khác nhau và theo sơ đồ nhƣ sau để cài chung Linux, Windows trên đó:  Partition label , Kiểu Size Status log/pri hda :  hda1 Windows FAT32 > 4GB active primary .  hda2 /boot ext3 >= 100MB primary .  hda3 extended xxx primary .  hda4 Setup FAT32 xxx logical .  hda5 / (root) ext3 > 3GB logical .  hda6 swap sizeof RAM hoặc 2 * sizeof(RAM) PHÂN VÙNG ĐĨA CỨNG  Mỗi HĐH sẽ cài đặt trên 1 (hoặc nhiều) phân vùng riêng biệt.  Boot Sector : Mảng dữ liệu chứa thông tin về partition, thƣờng ở sector đầu tiên của partition  MBR(Master Boot Record) : Khi khởi động từ đĩa cứng BIOS cũng tìm đến sector đầu tiên của đĩa cứng 26 Khái niệm Bootloader 27 1. Với Microsoft Windows 9x trở về trƣớc, khái niệm bootloader chỉ là đặt 3 tập tin command.com, msdos.sys, io.sys vào bootsector của ổ C:\ - partition đầu tiên trên HDD, rồi khi boot thì nạp chúng. 2. Cải tiến thêm một chút so với Win9x, WinNT, Win2K(XP), Win7 có trình bootloader riêng. Hệ thống này bao gồm 3 files: ntldr , NTDETECT.COM , boot.ini 3. Thông tin về hệ điều hành sẽ đặt trong boot.ini và bootloader sẽ đọc nội dung file này để detect (dò tìm) hệ điều hành và load chúng.Do đó bạn có thể cài chung WinNT(XP) và Win9x trên một HDD. Khái niệm Bootloader 28  Với Linux thì khác: có 2 bootloader phổ biến là LILO (Linux Loader) và GRUB (Grand Unified Bootloader). Cấu hình và chƣơng trình đƣợc đặt trong /boot trên parttion của HDD . Ngoài ra còn có một bản link từ /etc/LILO.conf hay /etc/GRUB.conf lƣu thông tin về hệ điều hành trên máy .  LILO và GRUB đều có thể load windows OS hay nói chính xác hơn là chuyển quyền load boot program cho boot sector nằm trên một partition nào đó. Vì vậy, với NT bootloader hay LILO hoặc GRUB, ta có thể cài chung Linux và Windows trên cùng một HDD. Đối với Linux, không có khái niệm các ổ đĩa khác nhau. Toàn bộ các thƣ mục và tập tin đƣợc “gắn” lên (mount) và tạo thành một hệ thống tập tin thống nhất, bắt đầu từ gốc „/‟ /-----+ !-------/bin !-------/sbin !-------/usr------/usr/bin ! !------/usr/sbin ! !------/usr/local ! !------/usr/doc ! !-------/etc !-------/lib !-------/var-------/var/adm !-------/var/log !-------/var/spool !-------/mnt  “Mount point” Nơi gắn các thiết bị ! Các thƣ mục chính trong Linux • / thư mục gốc root • /bin /usr/bin/usr/local/bin : thƣ mục chứa chƣơng trình • /boot : chứa nhân vmlinuz (phiên bản kernel ví dụ : vmlinuz-2.2.20) và các file khởi động • /dev : thƣ mục chứa các file đặc biệt dùng để giao tiếp các thiết bị ( HDD, sound card, VGA) • /etc : file cài đặt cấu hình của hệ thống và các script • /etc/rc.d scripts khởi động hệ thống • /etc/X11 scripts cài đặt máy chủ X • /etc/init.d script kiểm tra máy chủ • /etc/cron.d mô tả các việc theo thời gian thực hiện • /etc/skel file sao chép trong thƣ mục cá nhân của user mới • /home thƣ mục cá nhân của user Các thư mục chính trong Linux  /lib thƣ viện và module của nhân Linux  /mnt thƣ mục mount các thiết (cd, disk, nfs ..) (dƣới Debian tồn tại thƣ mục /cdrom et /floppy, dƣới thƣ mục gốc).  /opt thƣ mục cài đặt các ứng (nhƣ starOffice, java ..)  /root thƣ mục cá nhân của super-user root  /sbin các file thực thi bởi admin hệ thống  /tmp lƣu trữ các file tạm  /usr chứa các chƣơng trình đƣợc truy cập bởi tất cá các user  /var biến dữ liệu liên quan đến máy (dữ liệu in ấn, theo dõi truy cập http, smb .. trong /var/log)  /proc chứa đựng "image" của hệ thống (/proc/kcore là « ảnh » của RAM) Thực hành : cat /proc/cpuinfo, cat /proc/net/arp, cat /proc/interrupts QUẢN LÝ LINUX hoangvinh@free.fr 33  Nhân (kernel) đƣợc xem nhƣ là trái tim của hệ điều hành. Nó đƣợc nạp vào RAM lúc khởi động và duy trì hệ thống đến khi tắt máy.  Hầu hết Linux kernel đƣợc xây dựng nhƣ một tập hợp của các module  Các module cần thiết có thể đƣợc biên dịch vào hạt nhân trong lúc xây dựng nó. Kernel Linux 34  Linux là hạt nhân động, nó có thể “nạp” hay “giải phóng” các module trong lúc vận hành mà không cần phải khởi động lại hệ thống.  Dựa vào những đặt điểm trên ta có thể nói: Linux có thể vận hành đƣợc rất nhiều thiết bị một cách dễ dàng.  VD: Để vận hành đƣợc thiết bị mới nhà phát triển chỉ cần “port” module liên quan đến thiết bị để kernel nhận dạng thiết bị mới. Kernel Linux 35 • Phiên bản Linux Kernel đầu tiên là 0.01 • Linux Torvalds công bố lần đầu tiên trên Internet ngày 17/09/1991 • Mã nguồn Linux kernel đƣợc phân phối tự do và miễn phí (www.kernel.org) • Hiện tại phiên bản mới nhất của Linux Kernel là 3.6.2 Kernel Linux Các thành phần chính của Kernel Linux 36 Linux kernel bao gồm 5 subsytems chính:  Quản lý các tiến trình (The Process Manager)  Quản lý bộ nhớ (The Memory Manager)  Hệ thống tập tin ảo (VFS)  Giao tiếp mạng (Network Interface)  Inter-Process Communication Interface. Để vận hành đƣợc các phần trên , chƣơng trình ngƣời dùng cần phải ra các lời gọi hệ thống “System call”. 37  Đáp ứng các nhu cầu cấp thấp (về phần cứng) cho chƣơng trình  Cung cấp môi trƣờng vận hành cho các tiến trình (process) và luồng (thread). Kernel Linux MỘT SỐ LỆNH CƠ BẢN TERMINAL LINUX hoangvinh@free.fr Giao diện ngƣời dùng  Giao diện ngƣời dùng IHM cho phép user giao tiếp với máy  Shell là một phần của HĐH cho phép ngƣời dùng giao tiêp với máy  Có 2 loại IHM  GUI ( Graphical user interface)  CLI (Command line interface) Làm quen với Terminal  Từ Systems. Chọn Terminal Root và Su 41 • Ngƣời dùng cao cấp nhất (root user) ở GNU/Linux là superuser. Trong quá trình cài đặt Fedore không dùng quyền root mà giao quyền quản trị hệ thống cho ngƣời dùng bằng cách dùng lệnh su . •Tài khoản ngƣời dùng đầu tiên, trong quá trình cài đặt Ubuntu, sẽ đƣợc gắn quyền su. •Ngƣời cài đặt hệ thống Fedora sẽ có khả năng tạo ra tài khoản ngƣời dùng mới, cũng nhƣ giao quyền sudo thông qua ứng dụng quản lý ngƣời dùng và nhóm ngƣời dùng Users and Groups •Khi cần thực hiện một chƣơng trình với quyền root, sudo sẽ hỏi password và sẽ kiểm tra user đƣợc giao quyền chạy chƣơng trình sudo hay không. •Đăng nhập vào root : $su --login 42 Dùng trình sudo trong terminal : - $su . Ví dụ : $ su root - Nhấn phím “Enter”, - sudo sẽ hỏi password của user. Sudo sẽ nhớ lại password của user trong một thời gian nhất định. Chức năng này cho phép user có quyền sudo đỡ phải nhập password của mình nhiều lần khi phải thực hiện một loạt câu lệnh quản trị hệ thống một cách liên tiếp. Lưu ý. : Mỗi lần thực hiện các công việc quản trị hệ thống, có nguy cơ phá hỏng hệ thống nếu làm sai ! Root và Sudo Một số lệnh cơ bản - Các phím tắt • CTrL+C  Kết thúc chay CT • CTrL+q • CTrL+x • Up/Down  Di chuyên về lệnh trước /sau đó • TAB : gõ tắt tên tập tin, thư mục Các lệnh thao tác trên hệ thống tập tin Kí tự Chức năng *?[ ] Kí tự đại diện hay theo mẫu & Chạy ứng dụng ở chế độ nền (background) ; Dấu phân cách nhiều lệnh trên một dòng lệnh. > Định hướng dữ liệu xuất ra file. < Định hướng dữ liệu nhập từ file. >> Định hướng dữ liệu xuất ra cuối file nếu file đã tồn tại. | Định hướng dữ liệu xuất là dữ liệu nhập cho lệnh tiếp theo. $ Sử dụng biến môi trường. Ký tự đại diện : *,? , []  Ký tự * cho phép thay thế một chuỗi bằng * Ký tự đại diện : *,? , []  Ký tự « ?» cho phép thay thế để tìm kiếm Ký tự đại diện : *,? , []  Ký tự « [] » dùng để thay thế tập hợp ký tự riêng lẻ, có thể sử dụng dấu - để liệt kê một khoảng ký tự liền nhau Một số lệnh cơ bản  Lệnh uname : cho phép xem phiên bản hệ thống  $ ls: Hiển thị tên tập tin và thƣ mục con trong một thƣ mục.  Một số Tùy chọn:  -a: hiển thị tất cả kể cả tập tin ẩn  -F: puts a / after directories, an * after executables, and an @ after links  -l: hiển thị thông tin đầy đủ  -R: hiển thị nội dung của thƣ mục con  -s: hiển thị kích thƣớc tập tin Một số lệnh cơ bản Một số lệnh cơ bản  Lệnh man : tra cứu ý nghĩa lệnh  Lệnh halt : tắt hệ thống  Lệnh shutdown : tắt HT Một số lệnh cơ bản  Lệnh cal : hiển thị lịch  Lệnh date : hiển thị ngày  Lệnh who : hiển thị danh sách các user  Lệnh echo : hiển thị 1 tin nhắn. 1 biến Một số lệnh cơ bản  cp : copy 1 file hay thƣ mục  mv : move hay rename 1 file  rm : xóa 1 file  unlink: xóa 1 file  mkdir : tạo 1 thƣ mục  rmdir : xóa 1 thƣ mục  pwd : hiển thị thƣ mục đang làm việc của user  top : cho biết thông tin chi tiết chƣơng trình đang chạy  uptime : cho biết thời gian load hệ thống Một số lệnh cơ bản  cd : Thay đổi thƣ mục làm việc  $cd .  $cd .. Một số lệnh cơ bản – Xem file 1. cat : xem nội dung file. 2. Ví dụ : $cat tailieu1.txt vanban.doc >tonghop.doc 3. more : hiển thị thêm thông tin. 4. less : hiển thị file 1 cách tƣơng tác. 5. ps : Xem tất cả cá tiến trình đang hoạt động 6. kill : hủy bỏ tiến trình với ID tƣơng ứng 7. clear : xóa màn hình 8. passwd : thay đổi password (nhập password cũ và password mới) Một số lệnh cơ bản 1. du : Dung lƣợng xấp xỉ thƣ mục 2. wc : Số dòng, số ký tự của 1 file 3. less foo.txt : hiển thị nội dung file foo.txt ra màn hình Terminal 4. cp foo.txt bar.txt : copy file foo.txt ra bar.txt 5. mv foo.txt hoge.txt : đổi tên file foo.txt thành hoge.txt 6. mv bin sbin : đổi tên folder bin thành sbin 7. rm text.txt : xoá file text.txt 8. rm -r bin : xoá thƣ mục bin 9. rm -rf * : Xoá tất cả mọi thứ ở thƣ mục hiện hành mà không cần xác nhận lại. ( Cẩn thận lệnh này) 10. ln -s foo.txt bar.txt : tạo bar.txt links đến text.txt 11. touch : tạo tập tin Một số lệnh cơ bản  Quan sát tiến trình GUI : Main menu|system tools|system monitor  $ps -ax | more  Các process đang thực thi  $pstree  process in a tree format Ví dụ : Sao chép tập tin : ~/]$cp 57 Xóa tập tin : /]$rm Tạo tập tin : /]$touch 58 Xem nội dung tập tin : cat , less 59 Lệnh more dùng với “|” để xâu chuỗi 60  Main menu|Home Một số lưu ý : “/” Root directory −$pwd  Thư mục làm việc −$locate sapa.sxw  Tìm file . Hoặc Main menu | Seach for file  Các options của lệnh ls có thể tham khảo bằng lệnh $man ls Sử dụng file system bằng GUI Duyệt tìm tập tin  ~]$find -name filename –print  ~]$locate  Update database bằng lệnh $sudo updatedb Trước khi locate 62 Duyệt tìm tập tin  Sử dụng lệnh locate tìm kiếm đơn giản, thực thi nhanh . Ví dụ tìm các file có tên bắt đầu bằng chuỗi “test” và kết thúc bởi 1 số từ 0-9  #locate test[0-9] • Sử dụng lệnh locate tìm kiếm đơn giản, thực thi nhanh . Ví dụ tìm các file có tên bắt đầu bằng chuỗi “test” và kết thúc bởi 1 số từ 0-9 64 • Sử dụng lệnh find : #find –name Dùng lệnh grep để tìm một chuỗi trong tập tin $sudo updatedb $grep –L “string” 65  Tìm đƣờng dẫn đến thƣ mục hiện hành #echo $path  Lệnh tìm location của chương trình : #which ifconfig #locate ipconfig Kích thƣớc tập tin  Xem kích thƣớc tập tin bằng lệnh ls -l  Xem kích thƣớc thƣ mục bằng lệnh du -sh 67 Tên tập tin • Tên tập tin có thể có khoảng trống (space) • Sử dụng tên tập tin có khoảng trống trong dòng lệnh: – Đƣa tên tập tin vào ngoặc: $ mkdir “a b c” – Sử dụng ký tự \: $ cd a\ b\ c – Sử dụng phím TAB Xóa thƣ nục không rỗng (not empty) 68 Một số lệnh nén tập tin trong Terminal 1. Nén tập tin chuẩn gzip: #gzip tên_tập_tin 2. Nén 'thƣ mục' vào 'tên.tar.gz„: #tar cvfz tên.tar.gz tên_TM 3. Giải nén 'tập_tin.gz„ : #gunzip tập_tin.gz 4. Nén tập tin 1, 2 vào tên.tar: # tar cvf tên.tar tập_tin_1 tập_tin_2 5. Giải nén các tập tin có trong tập tin 'tên.tar : #tar xvf tên.tar 6. Giải nén các tập tin có trong tập tin 'archive.tar.gz„ : # tar jxvf tên.tar.bz2 7. Nén 'tập tin' với chuẩn bzip : #bzip2 tên_tập_tin 8. Giải nén 'tên_tập_tin.bz2„ : #bunzip2 tên_tập_tin.bz2 69 QUẢN LÝ TÀI KHOẢN NGƢỜI DÙNG VÀ NHÓM hoangvinh@free.fr 71 Nội dung  Khái niệm quản trị ngƣời dùng  Fedora User Manager  Cơ chế lƣu trữ thông tin tài khoản ngƣời dùng  Các lệnh quản lý ngƣời dùng  Một số mô hình phân quyền 72 Linux – HĐH đa ngƣời dùng 1. Linux giống UNIX là HĐH đa ngƣời dùng 2. Khái niệm đa ngƣời dùng là khái niệm quan trọng trong các HĐH hiện đại nhƣ WinNT/2000/XP/2003, MAC OS 3. Khái niệm đa ngƣời dùng trở nên hết sức quan trọng khi hiện nay hầu nhƣ tất cả máy tính đều nối mạng (LAN, Internet) 73 Chức năng quản lý tài khoản người dùng Linux sử dụng nhiều tài khoản ngƣời dùng để đảm bảo: 1. Chỉ cho phép những ngƣời có quyền đƣợc sử dụng hệ thống 2. Quyền truy cập các tài nguyên (tập tin, thiết bị) đƣợc phân bố hợp lý 3. Mỗi ngƣời dùng có một thƣ mục riêng để lƣu trữ dữ liệu 4. Tự động thực thi các chƣơng trình riêng biệt cho từng ngƣời dùng 74 Phân loại người dùng  Có hai nhóm ngƣời dùng :  Ngƣời dùng bình thƣờng (normal user)  Ngƣời quản trị hệ thống (superuser hay administrator)  Mục đích :  An toàn và bảo mật hệ thống  Trình độ kỹ thuật của ngƣời dùng  Ngƣời quản trị hệ thống của Linux là root (cao nhất)  Không sử dụng tài khoản root để làm việc khi không cần thiết !!! 75 Công việc của ngƣời quản trị  Bảo trì, nâng cấp hệ thống  Cài đặt phần mềm, các thiết bị dùng chung  Sao lƣu dữ liệu  Quản lý ngƣời dùng Các thông tin về ngƣời dùng  Tên tài khoản (Account Name): dùng để đăng nhập vào hệ thống, phải là duy nhất  Tên đầy đủ (Username): tên đầy đủ của ngƣời dùng, có thể trùng nhau  Mật khẩu (Password): phải dài ít nhất 6 ký tự  Giao diện dòng lệnh mặc định (Login Shell): danh sách đƣợc lấy từ tập tin /etc/shells, có thể đƣợc gõ vào Quản lý tài khoản Quản lý tài khoản  Mỗi ngƣời sử dụng trên hệ thống đƣợc mô tả qua các thông tin sau: 1. username : tên ngƣời sử dụng 2. password : mật khẩu (nếu có) 3. uid : số nhận dạng (user identify number ) 4. gid : số của nhóm (group identify number ) 5. comment : chú thích 6. Thƣ mục chủ của tài khoản (home directory ) 7. Shell đăng nhập (chƣơng trình chạy lúc bắt đầu phiên làm việc)  Các thông tin trên đƣợc chứa trong tập tin /etc/passwd Quản lý tài khoản : Nhóm ngƣời dùng  Một nhóm ngƣời sử dụng đƣợc mô tả bằng các thông tin sau:  groupname : tên của nhóm  gid : số của nhóm (gid: group identify number)  danh sách các tài khoản thuộc nhóm  Các thông tin trên đƣợc chứa trong tập tin /etc/group 78 Quản lý ngƣời dùng bằng giao diện dòng lệnh 1. Xem định danh : lệnh id ]#id 2. Chuyển đổi tài khoản : lệnh su ~]#su 3. Thêm tài khoản : lệnh useradd ~]#useradd 4. Thay đổi mật khẩu : lệnh passwd ~]#paswd 5. Thay đổi thông tin ngƣời dùng : lệnh chfn ~#chfn 6. Thay đổi giao diện dòng lệnh : lệnh chsh ~#chsh 7. Thay đổi tài khoản : lệnh usermod 8. Hủy tài khoản : lệnh userdel ~]#userdel Quản lý tài khoản : Nhóm ngƣời dùng  Tạo user :  Cú pháp: #useradd [option] -c “Thông tin ngƣời dùng” -d -m : Tạo thƣ mục cá nhân nếu chƣa tồn tại -g $useradd –c “Nguyen Van An – Server Admin” –g serveradd nguyenvan Quản lý tài khoản : Nhóm ngƣời dùng  Tạo nhóm : $groupadd  Xóa nhóm : $groupdel  Xem thông tin về Group và user  $id  $groups Quản lý tài khoản : Nhóm ngƣời dùng  Thay đổi thông tin cá nhân:  Cú pháp: #usermod [option]  Những option tƣơng tự Useradd  Ví dụ: #usermod –g kinhdoanh quocvan //chuyển quocvan từ nhóm server admin sang nhóm kinh doanh.  Xóa ngƣời dùng  Cúpháp : #userdel [option]  Vídụ : #userdel –r quocvan  Khóa/Mở khóa ngƣời dùng  passwd –l / passwd –u  usermod –L / usermod –U  Trong /etc/shadow có thể khóa tài khoản bằng cách thay từ khóa x bằng từ khóa *. Quản lý nhóm – Xem user  Xem tất cả các user trong hệ thống  $cat /etc/passwd | grep /home Thay đổi mật khẩu  [vinh1@(none) vinhth]$ passwd  Nếu là root user, ta có thể thay đổi mật khẩu mọi user acount dƣới quyền 84 Quản lý thành viên bằng gpasswd Với username là tên của thành viên và groupname là tên nhóm . Một số cờ dùng để quản lý thành viên trong nhóm : #gpasswd [flag] username groupname -a thêm một user vào nhóm -d Xóa một user ra khỏi nhóm -A –M Chuyển một user vào nhóm và xóa toàn bộ các user cũ đã có trong nhóm. Dùng các công cụ soạn thảo (ví dụ $vi/etc/group) mở file /etc/group . Xoá các user cần thiết và lƣu lại file đã sửa. Thoát ra khỏi EDITER kiểm tra lại. 85 Sử dụng gpasswd để quản lý nhóm Các trường chỉ thông tin của tập tin (dùng ls) -rw-r--r-- 1 fido users 163 Dec 7 14:31 myfile • Cột đầu chỉ ra quyền truy cập tập tin • Cột 2 chỉ số liên kết (link) đối với tập tin hay thư mục • Cột 3, 4 chỉ chủ sở hữu và nhóm sở hữu • Cột 5 chỉ độ dài của tập tin • Cột 6 chỉ thời gian thay đổi cuối cùng • Cột 7 chỉ tập tin hay thư mục Các thông tin về nhóm 87 Quản lý tài khoản bằng GUI  Đòi hỏi quyền root để thực thi  Là chƣơng trình quản lý ngƣời dùng bằng giao diện đồ họa  Cách chạy chƣơng trình: chọn mục System Settings | Users and Groups trong menu Application  Một số tác vụ thƣờng gặp:  thêm / xóa / sửa một ngƣời dùng  thêm / xóa / thay đổi thành viên một nhóm Quản lý tài khoản bằng GUI 90 Thông tin lưu trữ tài khoản trong Linux  Thông tin về tài khoản ngƣời dùng trong Linux đƣợc lƣu trữ dƣới dạng tập tin văn bản (text file) trong thƣ mục /etc 1. Thông tin ngƣời dùng : /etc/passwd 2. Mật khẩu ngƣời dùng: /etc/shadow 3. Thông tin nhóm: /etc/group 91 Tập tin /etc/passwd  Là cơ sở dữ liệu các tài khoản ngƣời dùng trên Linux dƣới dạng tập tin văn bản  Mỗi tài khoản ngƣời dùng chiếm một dòng, các trƣờng ngăn cách nhau bởi dấu “:” Tập tin /etc/passwd  Tên tài khoản  Nơi giữ chỗ cho mật khẩu (ký tự x)  Mã tài khoản  Mã nhóm chính  Mô tả tài khoản  Thƣ mục riêng  Giao diện dòng lệnh 93 Tập tin /etc/shadow  Là nơi lƣu trữ mật khẩu đã đƣợc mã hóa  Mục tiêu: không lƣu mật khẩu ở tập tin /etc/passwd để tránh bị bẻ khóa, tăng cƣờng độ bảo mật của hệ thống  Sau khi đã mã hóa thì mật khẩu KHÔNG BAO GIỜ ĐƯỢC GIẢI MÃ NỮA !  Để kiểm tra mật khẩu thì hệ thống sẽ mã hóa chuỗi ký tự nhập vào và so sánh với mật khẩu đã mã hóa (Dùng hàm băm) 94 Cấu trúc tập tin /etc/shadow  Tên tài khoản  Mật khẩu đã mã hóa: − Bắt đầu bằng *  tài khoản đã bị vô hiệu hóa (disable) − Bắt đầu bằng !!  tài khoản tạm thời bị khóa (locked)  Ngày đổi mật khẩu (tính từ 1/1/1970)  Ngày có thể đổi mật khẩu (0 = bất kỳ lúc nào)  Ngày phải đổi mật khẩu  Ngày báo mật khẩu sắp hết hạn  Số ngày sẽ vô hiệu hóa tài khoản nếu không đổi mật khẩu đúng hạn  Ngày sẽ tự động vô hiệu hóa tài khoản  Dự trữ để sử dụng sau 95 Cấu trúc tập tin /etc/shadow 96 Tập tin /etc/group Lƣu thông tin về các nhóm  Tên nhóm  Nơi giữ chỗ cho mật khẩu nhóm (ký tự x)  Mã nhóm  Danh sách các thành viên của nhóm (phân cách nhau bằng dấu phẩy) QUẢN LÝ TẬP TIN hoangvinh@free.fr Quản lý tập tin - hệ thống tập tin  Chức năng của hệ thống tập tin:  Tổ chức dữ liệu ngƣời dùng và dữ liệu hệ thống  Đảm bảo khả năng bảo mật của hệ thống  Trình quản lý hệ thống tập tin trên Linux  Các thiết bị phần cứng cũng đƣợc quản lý nhƣ tập tin (thƣ mục /dev)  Các tiến trình cũng đƣợc quản lý bởi hệ thống tập tin (thƣ mục /proc)  Linux hỗ trợ nhiều hệ thống tập tin khác nhau 98 99 Các kiểu tập tin: 1. Tập tin bình thƣờng (file) 2. Thƣ mục (directory) 3. Thiết bị khối (block device) 4. Thiết bị ký tự (character device) 5. Liên kết (link) 6. Ống (FIFO) 7. Khe kết nối (socket) Kiểu tập tin không phân biệt bằng phần mở rộng của tên tập tin Quản lý tập tin – kiểu tập tin Quản lý tập tin – kiểu tập tin Xem kiểu tập tin bằng lện ls -l: $ls -l abc -rw-r--r-- 1 root root 0 Jan 19 19:09 abc  Tập tin bình thƣờng : ký tự -  Thƣ mục : ký tự d  Thiết bị khối : ký tự b  Thiết bị ký tự : ký tự c  Liên kết : ký tự l  Ống : ký tự p  Khe kết nối : ký tự s 100 101 Mô hình phân quyền trên tập tin 1. Không ai đƣợc đọc tập tin của tôi 2. Tất cả đều có thể đọc tập tin của tôi 3. Một số ngƣời có thể đọc tập tin của tôi 4. Một số ngƣời có thể ghi tập tin của tôi 5. Tất cả đều có thể đọc, có vài ngƣời có thể ghi tập tin của tôi 6. Một số ngƣời có thể đọc, có vài ngƣời có thể ghi tập tin của tôi 102 Mô hình phân quyền trên tập tin 103 Mô hình phân quyền trên tập tin 104 Mô hình phân quyền trên tập tin 105 Mô hình phân quyền trên tập tin 106 Mô hình phân quyền trên tập tin 107 Chú ý với tài khoản root  Có thể xóa các tập tin khi gõ lệnh sai  Có thể làm hỏng hệ thống khi cài đặt phần mềm:  Có thể có phần mềm ác ý, cố tình ghi đè tập tin /etc/passwd khi cài đặt  Lƣu ý : KHÔNG DÙNG ROOT ĐỂ LÀM VIỆC, khi cần thì sử dụng lệnh su. Các quyền truy xuất trên tập tin  Khi tập tin đƣợc tạo lập, các thông tin sau đây đồng thời đƣợc ghi lại:  uid của ngƣời tạo tập tin  gid của ngƣời tạo tập tin  Các quyền thâm nhập tập tin khác . . .  Tập tin đƣợc bảo vệ bởi một tập hợp các bit định nghĩa quyền thâm nhập r w x r w x r w x suid sgid owner group other  Quyền trên tập tin đƣợc chia thành 3 nhóm: cho ngƣời sở hữu, cho nhóm kết hợp và cho những ngƣời khác Quản lý tập tin  r : Quyền đọc nội dung tập tin, thƣ mục  w : Quyền tạo và xoá nội dung tập tin, tạo và xóa tập tin trong thƣ mục  x : Quyền thực thi tập tin. Quyền truy xuất qua lại trên thƣ mục.  - : Không có quyền  Các quyền với thƣ mục chỉ có hiều lực ở một mức nhất định, thƣ mục con có thể đƣợc bảo vệ trong khi thƣ mục cha thì không.  Lệnh $ ls -lF liệt kê danh sách các tập tin và các thuộc tính của chúng trong một danh mục, qua đó ta có thể xem các thông tin nhƣ loại tập tin, quyền truy nhập, ngƣời sở hữu và kích thƣớc của tập tin. . . Quản lý tập tin Mỗi tập tin có một ngƣời sở hữu (owner) Mỗi tập tin kết hợp với một nhóm (group) Mỗi nhóm bao gồm nhiều ngƣời dùng (user) Tập tin đƣợc phân quyền theo ngƣời dùng và nhóm kết hợp Thay đổi ngƣời sở hữu: lệnh chown Thay đổi nhóm kết hợp: lệnh chgrp 111 Quản lý tập tin Quyền theo mã nhị phân 112 • 0 or - - - : No permissions at all • 4 or r- - : read-only • 2 or -w-: write-only (rare) • 1 or - -x: execute • 6 or rw-: read and write • 5 or r-x: read and execute • 3 or -wx: write and execute (rare) • 7 or rwx: read, write, and execute 113 Một tập tin với quyền 751 có nghĩa là • Người sở hữu có quyền read, write, và execute bằng 4+2+1=7 • Nhóm có quyền read và execute bằng 4+1=5 • Các đối tượng còn lại có quyền execute bằng 1. Ví dụ Thay đổi quyền dùng lệnh chmod 114 • Thay đổi quyền truy cập mới cho myfile . ~#ls -l myfile ~#chmod 345 myfile ~#ls -l myfile Lưu ý : 345 tương đương quyền -wx r-- x-r Thay đổi quyền tƣơng đối 115 • Cấp quyền cho ai  tất cả user ,  Nhóm sở hữu ,  user ngoài nhóm sở hữu ,  chỉ cho một user thôi ▫ Các thao tác : cấp mới , thêm , xóa quyền thêm quyền , bớt quyền , thiết lập quyền ▫ Quyền gì : read, write, execute  thực thi ,  đọc ,  ghi ,  lập bít SUID hay SGID Thay đổi quyền tƣơng đối  Cú pháp :  $ chmod {a,u,g,o}{+,-,=}{r,w,x}  Trong đó :  u (user), g (group), o (other), a (all)  Các toán tử :  + thêm quyền.  - bớt quyền.  = gán giá trị khác Ví dụ sử dụng thay quyền tƣơng đối 117 Quyền đặc biệt  Một số chƣơng trình do ngƣời dùng thực thi phải có quyền cao hơn mới hoàn thành đƣợc tác vụ.  Ví dụ lệnh passwd phải đƣợc quyền ghi vào tập tin /etc/shadow (nơi chỉ root mới có quyền truy cập)  Quyền đặc biệt (setuid) cho phép chƣơng trình khi chạy có quyền root  Quyền đặc biệt đƣợc ký hiệu bằng ký tự s 118 Thay đổi ngƣời hoặc nhóm sở hữu tập tin  Lệnh chown cho phép thay đổi ngƣời sở hữu, nhóm sở hữu trên tập tin.  $chown [tùy-chọn]... [chủ][.nhóm] Thay đổi ngƣời hoặc nhóm sở hữu tập tin  Lệnh chgrp cho phép thay đổi nhóm sở hữu trên tập tin.  $chgrp [tùy-chọn]... {nhóm|--reference=nhómR} Umask  Thay đổi quyền mặc định cho một tập tin: dùng lệnh umask (user file-creation mode )mask hay user-mask  Base Permission là giá trị đƣợc thiết lập sẵn cho user bình thƣờng : + đối với file thông thƣờng giá trị BS là 666 (rw-rw- rw-) + đối với thƣ mục (file đặc biệt) giá trị BS là 777 (rwxrwxrwx)  BS Umask  Giá trị Mask sẽ “che đi” một số bit trong Base Permission để tạo ra quyền truy cập chính thức cho file Umask Liên kết 1. Liên kết tƣơng tự nhƣ shortcut trong windows 2. Mục đích: Dễ dàng thay thế, nâng cấp các chƣơng trình, thƣ viện, tập tin mà không ảnh hƣởng đến toàn bộ hệ thống 3. Có 2 loại liên kết: liên kết cứng và liên kết mềm 4. Linux định danh một tập tin bằng một số nguyên là inode 5. inode là duy nhất trong một phân vùng đĩa 6. Liên kết cứng có cùng inode với tập tin gốc, là tập tin gốc với tên khác 7. Liên kết mềm có inode khác với tập tin gốc, là tập tin chứa liên kết tới tập tin gốc 8. Sử dụng lệnh ln[-s] để tạo liên kết cứng/mềm 124 Dùng lệnh ln để tạo liên kết $ln [option] Bài tập : Tìm hiểu thêm về lệnh $ln 125 Thuộc tính thời gian  Mỗi tập tin có 3 thuộc tính thời gian:  mtime: thời điểm tập tin bị thay đổi nội dung lần cuối  atime: thời điểm tập tin đƣợc truy xuất lần cuối  ctime: thời điểm thuộc tính tập tin bị thay đổi lần cuối  Xem các thuộc tính này bằng lệnh: $ ls -l –time = atime abc  Cập nhật các thuộc tính này bằng lệnh: $ touch -m abc $ touch -a abc 126 QUẢN LÝ PHẦN CỨNG Quản lý phần cứng – CD ROM 128  Dùng GUI :  Main Menusystem toolsDisk management CDROM  Ejecting a CDROM $eject  Gỡ CDROM ra khỏi ổ $eject –t  Dừng CD Dùng terminal : Kích phải CDROM  eject   Mount /unmount cdrom dùng file /etc/fstab Thêm vào file /etc/fstab dòng lệnh sau: /dev/cdrom /mnt/cdrom iso9660 defaults,n oauto,user,ro 0 0  Mounting a device: #mkdir /mnt/cdrom #cd /mnt/cdrom #mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom Quản lý phần cứng 130 Lưu ý : Chỉ có Root mới được quyền quản lý Hardware Về root : # $su -  Nhập password  root]# #ls /pro Hoặc : Main menu | system tools | Hardware Browser| Nhập password của root  Hardware Browser Quản lý phần cứng – Hệ thống 131  System monitor : Main menu system tools system monitor  #df –h  File system  #fdisk –l  Kiểm tra các patitions Quản lý phần cứng - Disk  GUI : Disk Management  CLI : $ fdisk –l  Lƣu ý : Root user mới có quyền truy cập $su - Quản lý phần cứng - Disk  Bất kỳ ổ đĩa nào muốn truy cập đƣợc từ hệ thống tập tin đều phải ở trạng thái đƣợc gắn (mounted) vào hệ thống tại “mount point”  Ổ đĩa có thể đƣợc gắn tự động khi khởi động (sử dụng tập tin cấu hình /etc/fstab), hay gắn thủ công bằng lệnh mount  Một ổ đĩa có thể có nhiều phân vùng, mỗi phân vùng có thể chứa một hệ thống tập tin khác nhau 133 Quản lý ổ đĩa và phân vùng Một số ổ đĩa quan trọng trong Linux: ▫ Ổ CDROM: /dev/cdrom ▫ Ổ đĩa mềm: /dev/fd0 ,dev/fd1 ▫ Ổ đĩa cứng IDE:  Ký hiệu :/dev/hda ,/dev/hdb  Các phân vùng: /dev/hda1 ,/dev/hda2 ▫ Ổ đĩa cứng SCSI:  Ký hiệu : /dev/sda ,/dev/sdb  Các phân vùng: /dev/sda1 ,/dev/sda2 134 Quản lý phần cứng - Disk Các hệ thống tập tin đƣợc Linux hỗ trợ:  FAT, FAT32  NTFS  EXT, EXT2, EXT3 (mặc định của LINUX)  CDROM  Linux cho phép làm việc với nhiều loại hệ thống tập tin thông qua cơ chế hệ thống tập tin ảo (Virtual File System – VFS) 135 Danh sách các hệ thống tập tin đƣợc hỗ trợ nằm trong tập tin /proc/filesystems 136 Quản lý phần cứng - Disk  Các lệnh thao tác trên phân vùng đĩa cứng: fdisk, parted, cfdisk, sfdisk, disk druid  Chú ý: Các thao tác trên phân vùng đĩa sẽ hủy toàn bộ dữ liệu !!!  Các bƣớc để thêm một ổ đĩa cứng mới:  Phát hiện ổ đĩa mới  Phân vùng ổ đĩa mới  Định dạng các phân vùng  Gắn các phân vùng vào hệ thống tập tin 137 138 Ví dụ sử dụng lệnh fdisk Bảo trì hệ thống tập tin  Mục tiêu: Ngăn chặn sự mất mát dữ liệu, bảo đảm cho hệ thống vận hành chính xác và hiệu quả  Một số biện pháp:  Tắt máy đúng cách  Tạo đĩa khởi động dự phòng  Thƣờng xuyên sao lƣu dữ liệu quan trọng  Kiểm tra và sửa lỗi hệ thống tập tin: sử dụng lệnh fsck  Lập kế hoạch bảo trì hệ thống tập tin: sử dụng lệnh tune2fs 139 Thông tin về thiết bị mạng 140 Thông tin về thiết bị mạng trong thƣ mục /sbin #/sbin/ifconfig #cat /etc/modules.conf  Show configfile cuûa eth0 141 Các PCI devices trên hệ thống ]#/sbin/lspci  Cổng USB ]#/sbin/lsUSB Thông tin về thiết bị mạng 142 #/sbin/ifconfig –a  Các devices + status Thông tin về thiết bị mạng 143 #/sbin/route  Kiểm tra router nối vào mạng Thông tin về thiết bị mạng Thông tin về thiết bị ngoại vi Lƣu ý : Phải có quyền root ( $su - ) #cat /etc/sysconfig/keyboard (mouse) Hoặc : Main menu  system setting  Keyboard (Mouse,Display,sound card . . .)  Configuring the Desktop on GNOME Trên Desktop Control Center (Control Panel) : Mail menu | Preferences | Control Center About myself  Thông tin cá nhân trong tệp /etc/passwd Accessibility  CD properties config CDROM , mount CDROM (magicdev).  Back ground  Control Center Preferences  File management  File type and program  Fonts  Mouse and keyboard  Menu and toolbars  Keyboard shortcuts ... Cấu hình lại hệ thống kết nối internet : Modem, xDSL Eithernet Card : Main menu|system tools|Internet| configuration Wizard Lưu ý : Chỉ root mới được thay đổi cấu hình  $ su – Chọn type of connection | forward  tiếp tục theo chỉ dẫn 2.10.2. Cấu hình mạng (Network Configuration Tool) Main menu | System setting | Network •Kết nối Analog Modem Network configuration | New | Modem connection |Forward  Nhập các thông tin cần thiết Kết nối INTERNET Kết nối IDSL,DSL Chọn xDSL  Nhập các thông số trong configure DSL connection |Forward  Apply Kết nối LAN Chọn Ethernet Connection | Select Eithernet device  Configure Network setting | Phương thức cung câp IP Address (Chọn Dialup khi dùng PPP) Nếu không dùng cấp IP ADD tự động  nhập các địa chỉ IP, Subnetmask,Defauld Gateway Address Kết nối INTERNET  Chọn DNS  Thiết lập Doman Name Server  IDSN and Token ring  Wireless card and VPN CÁC ỨNG DỤNG TRÊN MẠNG • Web browser : Kích biểu tương Mozilla trên Panel hoặc $mozilla . • Cài đặt Mozilla Proxies : Edit |Preferences |Advances | Proxies • News client and E-mail : Kích biểu tượng Ximian trên panel Tools setting  Thêm ,xoá ,thay đổi Mail Account và các thông số khác NÂNG CẤP VÀ CÀI ĐẶT PACKAGES TRONG LINUX 151 Nâng cấp và cài đặt phần mềm dùng RPM 1. GÓI RPM VÀ CÁC TÍNH CHẤT CỦA GÓI 2. RPM VÀ CÁC CÔNG CỤ QUẢN LÝ GÓI (RPM Tools) 3. RPM console commands 4. RPM and security 5. MỘT SỐ VÍ DỤ 1. Là các gói được cài trong HĐH mã nguồn mở LINUX do ReadHat đề xuất. Các gói này có thể được cài đặt , gỡ bỏ hoặc nâng cấp. Các gói RPM có đuôi là .rpm 2. Lợi ích khi sử dụng tiện ích RPM i. Đơn giản,dễ sử dụng nhờ giao diện GUI hoặc từ dòng lệnh ii. Dễ nâng cấp , quản lý , bảo trì iii. Dễ truy vấn , tư vấn từ các nguồn khác nhau iv. Dễ dàng gỡ bỏ gói (Uninstall Packet)  Refresh hệ thống v. Dễ dàng kiểm tra , giám sát hệ thống. vi. Tính bảo mật  Kiểm tra tính toàn vẹn của dữ liệu.(Hash value) RPM : RedHat Packet Manager 1. Desktop : X window System GNOME,KDE 2. Applications:Editors, Office/ Productivity ,Sound/Video.. . 3. Server:Server Config Tools,WEB server, Mail Server, DNS, FTP Server .. . 4. Development : Development tools,.. . 5. System: Administration tools,system tools,Printing Support Packet Management Tools Functions Các gói trên đƣợc chia thành hai loại : • Các gói chuẩn – standard • Các gói phụ -Extra Cấu trúc của gói RPM Quản lý gói bằng GUI : 1.Main Menu | System setting | Add/remove Application  Add ,Remove,Install Package 1.Ƣu điểm : • Cho phép cải tạo mạng FPT,HTML • Thông tin đầy đủ về gói • Kiểm tra gói : Tính toàn vẹn,MD sum 2.Cú pháp #rpm [tùy chọn] ( Lƣu ý “#”) • Dùng lệnh man rpm để tìm hiểu hiểu cách dùng lệnh rpm quản lý gói RPM. • Định vị gói RPM $su – #cd /mnt/cdrom/Fedora/RPMS Quản lý gói từ dòng lệnh CLI Các options được sử dụng với rpm : -p  Thông tin về các gói trong <file- name> -i  Thông tin về các gói như tên , phiên bản, size, ngày đóng gói -a  Thông tin về các gói được cài trong hệ thống -f  Truy vấn gói sở hữu một file nào đó -l  Liệt kê các file trong một gói -c  Liệt kê các file cấu hình trong một gói Quản lý gói từ dòng lệnh CLI Truy vấn (query) packages từ dòng lệnh (CLI) dùng tùy chọn #.../RPMS]#rpm –q [options] Các tùy chọn : -q : Cung cấp tên , phiên bản, số phát hành -qa : Liệt kê tất cả các gói đã cài đặt -qf : Truy vấn gói liên kết với tập tin -qp : truy vấn gói -qi : Cung cấp các thông tin về gói -ql : Liệt kê các tập tin liên kết với gói Quản lý gói từ dòng lệnh CLI 160 Cài đặt gói RPM dùng tùy chọn #rpm –i [option] Ví dụ : #rpm –i quota 1.55-4.i386.rpm a. Các bƣớc thực thi lệnh  Kiểm tra tính phụ thuộc  Kiểm tra khả năng xung đột  Xử lý các tập tin cấu hình  Cài đặt tập tin  Xử lý sau cài đặt  Cập nhât dữ liệu Quản lý gói từ dòng lệnh CLI 161 Một số tùy chọn khi cài đặt một gói  v :Cung cấp thông tin đầy dủ của gói  h :Hiển thị trạng thái đang cài đặt nhờ dấu #  -percent : Hiện thị lƣợng công việc đã thực hiện (%)  -test cài đặt thử và báo lỗi  -replacefiles : Thay thế gói cũ bằng một gói mới  -force : Cài đặt không quan tâm đến lỗi tranh chấp Ví dụ : #rpm –ivh nano-1.2.1-4.i386.rpm mutt-1.4.1- 3.i386.rpm Quản lý gói từ dòng lệnh CLI Quản lý gói từ dòng lệnh CLI Quản lý gói từ dòng lệnh CLI Trường hợp gói đã được cài đặt sẵn: #rpm –ivh bad-1.0-1.i386.rpm bad package bad-1.0.1-1.i368 is already installed Thay thế một gói đã có sẵn #rpm –ivh replacepkgs bad-1.0-1.i386.rpm Kiểm tra một gói dùng tùy chọn #rpm –Vp #rpm –V #rpm –Vf Quản lý gói từ dòng lệnh CLI Tranh chấp : Khi hai gói có các file trùng tên nhau song nội dung có thể khác nhau • Ví dụ : #rpm –ivh –1.0-1.i386.rpm Bad/bin/badfile conflicts with file from good –1.0-1 #rpm –ivh replacefiles • Lƣu ý : Tốt hơn nên chọn gói nào cần thiết , xóa các gói không cần Quản lý gói từ dòng lệnh CLI Gỡ bỏ gói #rpm –e [Tùy chọn] Nâng cấp #rpm –Uvh  Gỡ bỏ version cũ cài version mới Freshening package #rpm –Fvh #rpm –Fvh *.rpm Quản lý gói từ dòng lệnh CLI Cài đặt các gói dạng phi Linux 167 File dạng TAR được tạo ra bởi lệnh TAR trên CLI. Đây là file Nén (Archive) không phải dạng chuẩn cho Linux Các gói binary dưới dạng TAR: 1. Tải file chkwww-0.4.3.tar.gz từ địa chỉ www.sourseforge.net vào /usr/local 2. Sử dụng gzip để giải nén #gzip –dv pychkwww_0.4.TAR.gz pychkwww_0.4.tar.gz: 81.6% --replaced with pychkww_0.4.TAR Các options : -d  decompresses the file -v  In tiến trình lên màn hình -f  Ghi đè file mới lên file cũ Giải nén gói .TAR #tar –xvf Các options: -x This option extracts the files -v Hiển thị tiến trình “unTAR” -f Ghi đè lên file cũ Kiểm tra thư mục mới được tạo bởi “unTAR” #ls –al pychkww Giải nén gói .TAR Yum : Install, Update, Uninstall  Nâng cấp hệ thống #yum update (cần quyền su)  Tìm kiếm các gói trong database #yum search any-package  Tra cứu thông tin về gói # yum info any-package  Cài đặt 1 gói : #yum install any-package  Ví dụ : $ yum install gkrellm  Gỡ bỏ cài đặt : #yum remove any-package  Danh sách các gói : # available yum list|less  Xem các gói đã cài đặt #yum list installed|less  Danh sách các gói đã cập nhật #yum list updates|less Yum : Install, Update, Uninstall  Dọn dẹp hệ thống Ví dụ : #yum clean all  Group install yum groupinstall "groupname" 171 Bổ sung, loại bỏ và nâng cấp phần mềm trên Fedora  Chƣơng trình Add/Remove Applications – đây là cách đơn giản nhất để quản l. các phần mềm trong Fedora  Synaptic – Đây là một chƣơng trình cao cấp để quản lý phần mềm ở chế độ đồ hoạ.  APT – Đây là một câu lệnh rất mạnh, dùng ở chế đọ Terminal hoặc console, cho phép quản lý các gói phần mềm. $su $yum install apt 2. Yumex – Fedora  # yum install yumex.noarch (quyền root) 173 Quản lý gói phần mềm bằng lệnh APT : # yum install apt  Cài đặt một gói phần mềm : #sudo apt-get install  Loại bỏ một gói phần mềm : #sudo apt-get remove  Tải xuống và cập nhật danh sách các gói phần mềm : #sudo apt-get update  Nâng cấp hệ thống với các gói phần mềm mới hơn : #sudo apt-get upgrade  Liệt kê các lệnh và lựa chọn đƣợc dùng với APT : #apt-get help Bổ sung thêm kho phần mềm 175 E M A I L : H O A N G V I N H @ F R E E . F R Soạn thảo trên Linux Chương trình soạn thảo vi  Vi là một editor chuẩn trên hê ̣ thống UNIX  Hoạt động dưới 2 chế độ :  Insert mode  Standard command mode  Kích hoạt bằng phím và Esc  Ví dụ : $ vi thiduvi.txt Di chuyển chuột  Vi sử dụng 4 phím hjkl để di chuyển trong command mode.  h – di chuyển sang trái  j – di chuyển xuống  k – di chuyển lên  l – di chuyển sang phải  ) - cuối câu  ( - đầu câu  } - đầu đoạn văn  { - cuối đoạn văn Điều khiển  u : Undo lại thao tác trước đó  dw - xóa 1 từ  d^ - xóa ký tự từ con trỏ đến đầu dòng  3dw - xóa 3 từ  d$ - xóa ký tự từ con trỏ đến cuối dòng  dd - xóa dòng hiện hành Thao tác trên tập tin :w - ghi vào tập tin :x - lưu và thoát khỏi chế độ soạn thảo :wq - lưu và thoát khỏi chế độ soạn thảo :q - thoát nếu ko có thay đổi :q! - thoát không lưu LẬP TRÌNH SHELL hoangvinh@free.fr Nội dung  Kernel  Shell và lập trình Shell Kernel ?  Kernel là trái tim của HĐH Linux  Đảm nhận các vai trò sau :  Quản lý I/O  Quản lý tiến trình(process)  Quản lý tập tin  Quản lý thiết bị  Quản lý bộ nhớ Linux Shell Shell giúp cho chúng ta : Công việc của Shell Các loại Shell trên Linux 5  Bourne shell: còn gọi là sh, do Steve Bourne tạo ra  C-shell: còn gọi là csh, đi kèm với BSD UNIX  Korn shell: còn gọi là ksh, do David Korn tạo ra  Born Again shell: còn gọi là bash, tương tự nhưng mới hơn Bourne shell. Bash là shell mặc định của Linux  Người dùng có thể chuyển đổi giữa các shell  Hiển thị Shell : # echo $SHELL Sử dụng Shell  $ date --help  $ man ls  $ info bash Tiến trình (Process)  Tiến trình là một loại chương trình đảm nhiệm bởi PC.  # ls –lR  Tại sao cần tiến trình ?  # ls / -R | wc –l  # ls / -R | wc -l & Minh họa tiến trình  Xem tất cả các tiến trình  $ps  kill {PID}  $ ps –ag : Lấy thông tin từ các tiến trình đang chạy  $ kill 0 : tắt tất cả process ngoại trừ Shell đang dùng 9Các lệnh quản lý tiến trình  Lệnh ps: Xem danh sách các tiến trình $ps $ps aux  Lệnh kill: Hủy tiến trình $kill 1653 $kill -s SIGTERM 1653  Lệnh top: Xem tần suất sử dụng tài nguyên của các tiến trình $top Chuyển đổi người dùng 10  Lệnh id : Hiển thị định danh người dùng hiện thời $id  Lệnh su : Chuyển đổi người dùng hiện thời $su $su user1 Liệt kê người dùng  Lệnh who: Liệt kê những người dùng đang đăng nhập  $ who 11 Tắt và khởi động lại máy  Lệnh shutdown: Tắt máy $shutdown -h now $shutdown -h -t5  Lệnh reboot: Khởi động lại máy $reboot $shutdown -r now Gắn các ổ đĩa • Lệnh mount: Gắn các ổ đĩa $mount /dev/cdrom /mnt/cdrom • Lệnh umount: Gỡ bỏ các ổ đĩa $umount /mnt/cdrom Phím điều khiển 12 Ctrl-C, Ctrl-\: Kết thúc tiến trình hiện thời Ctrl-Z: Tạm dừng tiến trình hiện thời Ctrl-D: Kết thúc việc nhập liệu Ctrl-U: Xóa toàn bộ dòng lệnh bên trái con trỏ Ctrl-W: Xóa một từ bên trái con trỏ Ctrl-A: Di chuyển đến đầu dòng lệnh Ctrl-E: Di chuyển đến cuối dòng lệnh Phím điều khiển 13 Các phím di chuyển  Phím mũi tên lên, xuống: di chuyển trong lịch sử các lệnh đã được gõ  Phím mũi tên trái, phải: di chuyển trong dòng lệnh  Phím BACKSPACE: xóa ký tự bên trái con trỏ  Phím ENTER: thực thi lệnh • Lệnh history: Làm việc với lịch sử các lệnh đã được gõ $history $!2 !! : thực thi lệnh vừa được gõ !pw : thực thi lệnh đã được gõ bắt đầu bằng pw !$ : sử dụng đối số đã được gõ !* : sử dụng lại tất cả đối số của lệnh vừa được gõ Thao tác phím 14 Khả năng tự hoàn tất  Sử dụng phím TAB để hoàn tất lệnh hay tên tập tin, tên thư mục Một số ký tự đặc biệt  # đặt ở đầu dòng lệnh, đánh dấu dòng lệnh như là chú thích  ; ngăn cách các lệnh, cho phép đánh nhiều lệnh trên một dòng  & đặt ở cuối dòng lệnh, cho phép chạy lệnh ở chế độ nền (dấu nhắc sẽ lập tức hiện ra)  \ tiếp tục dòng lệnh ở dòng mới  | chuyển đầu ra của lệnh này thành đầu vào của lệnh kia  (;) Gộp các lệnh trong dấu () các lệnh được phân cách bởi “;” 15 Cú pháp lệnh  Cú pháp chung  Command [Options] [Argument]  Command = Tên lệnh  Options = Các tùy chọn của lệnh  Argument = Các đối số của lệnh Các ký hiệu đại diện nhóm tập tin 16  “*” đại diện cho một chuỗi (có thể rỗng) các ký tự bất kỳ  “?” đại diện cho một ký tự bất kỳ  “[ ]” đại diện cho một ký tự bất kỳ trong ngoặc vuông, có thể sử dụng dấu - để liệt kê một khoảng ký tự liền nhau Chuyển hướng Input Output  Trong Linux có thể chuyển Output thành input  $ ls> filename  Có 3 loại chuyển hướng : > ; >>; <  > Redirector Symbol  $ ls > myfiles # ghi đè thông tin nếu đã tồn tại file  >> Redirector Symbol  Syntax: Linux-command >> filename  $ date >> myfiles # thêm thông tin vào phần cuối của file  < Redirector Symbol  Linux-command < filename  $ cat < myfiles # Nhận đầu vào lệnh vào tập tin Ống dẫn (pipe)  Ống dẫn là cách để kết nối output của một chương trình thành input của một chương trình khác mà không dùng file tạm  Ống dẫn thường dùng đễ thực thi nhiều hơn 1 câu lệnh trên cùng một dòng.  Cú pháp : command1 | command2 Lập trình Shell  Chương trình shell là một loạt các câu lệnh.  Biến trong Shell :  Biến hệ thống (System variables )  Biến do người dùng định nghĩa (User defined variables UDV) Một vài biến hệ thống  Xem các biến trong hệ thống $set |more System Variable Meaning BASH=/bin/bash Our shell name BASH_VERSION='4.2.24(1)-release' Our shell version name COLUMNS=65 No. of columns for our screen HOME=/home/anhpham Our home directory PATH=/usr/lib/ccache Our path settings USER=anhpham User name who is currently login to this PC Ưu và nhược của Shells  Ưu điểm :  Ngôn ngữ diễn dịch : dễ dàng dò tìm và phát hiện lỗi; thay đổi chỉnh sửa script không cần phải biên dịch lại từ đầu.  Ngôn ngữ phù hợp với ứng dụng : ống nối, thay thế lệnh và các biến trong môi trường Unix  Cho phép kết nối các thành phần với các ngôn ngữ khác :  Input-Output dẫn xuất : các biến, lỗi, kết quả Ưu và nhược của Shells  Nhược điểm :  Bắt nguồn từ Unix, ngôn ngữ lập trình dùng để lập trình, cú pháp của shell không dễ tiếp cận cho người mới bắt đầu.  Thêm hoặc bớt khoảng trắng trong câu lệnh sẽ gây lỗi cú pháp  bash sở hữu nhiều cú pháp để thao tác cùng một chức năng => đôi khi gây ra sự không tương thích với các phiên bản shell  Các ký tự đặc biệt dùng trong câu lệnh sẽ có ý nghĩa khác nhau trong từng hoàn cảnh khác nhau, gây khó khăn khi sử dụng Định nghĩa biến người dùng  Cú pháp : variablename = value  Ví dụ :  $ a=90 # this is ok  $ 90=a # Error, NOT Ok, giá trị phải ở bên phải  Định nghĩa biến ‘xe' có giá trị Bus  $ xe=Bus  Định nghĩa biến n có giá trị 10  $ n=10 Quy tắc đặt tên biến ( UDV và System Variable)  Tên biến phải bắt đầu bằng 1 ký tự chữ cái hoặc (_), được tiếp bởi 1 ký tự chữ cái.  Biến hợp lệ :  HOME  SYSTEM_VERSION  no  Không dùng khoảng trắng trước và sau dấu “=”  $ no =10 #không hợp lệ  $ no= 10 #không hợp lệ  $ no = 10 #không hợp lệ  $ no=10 # OK  Biến phân biệt chữ hoa và chữ thường  $ No=11  $ NO=20  $ nO=2 Quy tắc đặt tên biến ( UDV và System Variable)  Có thể đặt biến NULL như sau:  $ no=  $ no=“”  Không dùng ?,* etc để đặt tên biến  Để xuất giá trị biến, thêm vào $  $ no=10  $ echo $no Ví dụ minh hoạ  Định nghĩa biến x có giá trị 3 và xuất ra màn hình  $ x=3  $ echo $x  Định nghĩa biến k có giá trị xy  $ k=xyi  $ echo $k  In tổng của hai số  $ echo 6 + 3  $ expr 6 + 3  $ expr 6+3 Viết Shell script  Ctrl + D  Để thực thi shell :  $ ./firstshell --.error  $ chmod +x firstshell  $ ./first $ cat > first shell # # My first shell script # clear echo “test" Làm thế nào sử dụng Shell  chmod để gán quyền execute cho script  Cú pháp : chmod +x shell-script-name chmod 777 shell-script-name  Thực thi script : Cú pháp : ./shell-program-name Ví dụ : $ ./first  Hoặc :  $ bash shell-program-name  $ /bin/sh shell-program-name Làm thế nào sử dụng Shell  $ /bin/sh /home/vinhth/shellscript  Thư mục /bin chứa các file thực thi. Có thể chạy script trực tiếp khi copy vào thư mục /bin  $ cp first ~/bin  $ first Một số lệnh liên quan đến lập trình Shell  echo [options] [string, variables...]  -n : không in ký tự xuống dòng.  -e : cho phép hiểu những ký tự theo sau dấu trong chuỗi  a : alert (tiếng chuông)  b : backspace  c : không xuống dòng  n : xuống dòng  r : về đầu dòng  t : tab  : dấu Một số lệnh liên quan đến lập trình Shell  Dấu nháy kép - “Double Quotes” : tất cả trong “” sẽ được bỏ qua (ngoại trừ \ và $)  Dấu nháy đơn – ‘Single quotes’ : tất cả trong ‘’ không thay đổi  Dấu nháy huyền- `Back quotes`: thực thi câu lệnh  $ echo “Today is date” ( Xuất chuỗi )  $ echo "Today is `date`". ( Xuất giá trị ngày)  Shell và số học :  $ expr 1 + 3 (CHÚ Ý KHOẢNG TRẮNG)  $ echo "expr 6 + 3”  $ expr 10 \* 3 (PHÉP NHÂN : \*)  $ $ echo "expr 6 + 3" # Xuất : expr 6 + 3  $ echo 'expr 6 + 3' # Xuất : expr 6 + 3 Một số lệnh liên quan đến lập trình Shell  echo $(( 20 + 5 ))  x=5 echo $(( x++ )) echo $(( x++ ))  x=2 y=3 echo $(( x ** y )) Tính toán trên Shell  $ bc # tính toán trên Linux  5 – 2  7  5 / 2  5 > 2  0 # trả lời của hệ thống  5 > 12  5 == 10  5 != 2  5 == 5  12 < 2 Xử lý câu lệnh  Thực hiện câu lệnh với 1 file không tồn tại  $ ls file_luu_tru  $ file_luu_tru : No such file or directory Sự cần thiết của tham số trong câu lệnh  $ rm {file-name}  $ ls -a /* Ví dụ minh họa  Lưu script Ctrl+d  $ chmod +x demo  $ ./demo Hello World  $ cp demo ~/bin  $ demo $ cat > demo #!/bin/sh # # Script that demos, command line # echo "Total number of command line argument are $#" echo "$0 is script name" echo "$1 is first argument" echo $2 is second argument" echo "All of them are :- $*" Trạng thái thoát  Mặc định sau khi kết thúc câu lệnh, hệ thống sẽ trả về 2 giá trị :  Lệnh thành công, giá trị =0  Lệnh không thành công, lỗi : giá trị >0  $ rm thu_muc  rm: cannot remove thu_muc': No such file or directory  $ echo $?  $ ls  $ echo $? CẤU TRÚC ĐIỀU KHIỂN hoangvinh@free.fr Cấu trúc : if..fi  $cat sho  $echo $  $ chmod +x sho  $./sho fs  $ ./sho foo if condition then command1 if condition is true or if exit status of condition is 0 (zero) ... ... fi $ cat > sho #!/bin/sh # #Script to print file # if cat $1 then echo -e "\n\nFile $1, found and successfully echoed" Fi Cấu trúc : if..fi  $ chmod +x trmif cat > trmif# # Script to test rm command and exist status # if rm $1 then echo "$1 file deleted" fi Cấu trúc : if..fi – kiểm tra biểu thức  $ chmod +x soduong  $ ./soduong 5  $./soduong -45  $./soduong  ./soduong: test: -gt: unary operator expected $ cat > soduong #!/bin/sh # # Script to see whether argument is positive # if test $1 -gt 0 then echo "$1 number is positive" fi Toán tử trong Shell Script Toán tử trong Shell Script  Toán tử trên chuỗi :  Trên file  Kết hợp Cấu trúc : if...else...fi if condition then command1 if condition is true or if exit status of condition is 0(zero) ... ... else command2 if condition is false or if exit status of condition is >0 (nonzero) ... ... fi $ cat > kiemtra #!/bin/sh # # kiem tra so duong hay am # if [ $# -eq 0 ] then echo "$0 : You must give/supply one integers" exit 1 fi if test $1 -gt 0 then echo "$1 number is positive" else echo "$1 number is negative" fi Cấu trúc if-then-else lồng nhau if condition then condition is zero (true - 0) execute all commands up to elif statement elif condition1 condition1 is zero (true - 0) execute all commands up to elif statement elif condition2 condition2 is zero (true - 0) execute all commands up to elif statement else None of the above condtion,condtion1,condtion2 are true (i.e. all of the above nonzero or false) execute all commands up to fi fi $ cat > etf #!/bin/sh # Script to test if..elif...else # if [ $1 -gt 0 ]; then echo "$1 is positive" elif [ $1 -lt 0 ] then echo "$1 is negative" elif [ $1 -eq 0 ] then echo "$1 is zero" else echo "$1 is not number, give number" fi Vòng lặp for for { variable name } in { list } do execute one for each item in the list until the list is not finished (And repeat all statement between do and done) done $ cat > testfor #!/bin/sh for i in 1 2 3 4 5 do echo “Xin chao $i times" done Vòng lặp for $ cat > mtable #!/bin/sh # kiem tra vong lap if [ $# -eq 0 ] then echo "Error – Cau lenh sai" echo "Syntax : $0 number" echo “Xuat ra bang cuu chuong" exit 1 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i \* $n`" done Vòng lặp while while [ condition ] do command1 command2 command3 .. .... done $cat > nwhile #!/bin/sh #Script to test while statement # if [ $# -eq 0 ] then echo "Error – Cau lenh sai" echo "Syntax : $0 number" echo " In ra bang cuu chuong" exit 1 fi n=$1 i=1 while [ $i -le 10 ] do echo "$n * $i = `expr $i \* $n`" i=`expr $i + 1` done Cấu trúc in case case $variable-name in pattern1) command ... .. command;; pattern2) command ... .. command;; patternN) command ... .. command;; *) command ... .. command;; esac $ cat > car # if no vehicle name is given # i.e. -z $1 is defined and it is NULL # if no command line arg if [ -z $1 ] then rental="*** Unknown vehicle ***" elif [ -n $1 ] then # otherwise make first arg as rental rental=$1 fi case $rental in “xehoi") echo "For $rental Rs.20 per k/m";; “xedap") echo "For $rental Rs.5 per k/m";; “honda") echo "For $rental 20 paisa per k/m";; *) echo "Sorry, I can not gat a $rental for you";; esac Lệnh break và continue #!/bin/sh a=10 while [ $a -lt 10 ] do echo $a a=`expr $a + 1` done $cat breaktest #!/bin/sh a=0 while [ $a -lt 10 ] do echo $a if [ $a -eq 5 ] then break fi a=`expr $a + 1` done Lệnh break và continue $ cat >continuetest #!/bin/sh NUMS="1 2 3 4 5 6 7" for NUM in $NUMS do Q=`expr $NUM % 2` if [ $Q -eq 0 ] then echo "Number is an even number!!" continue fi echo "Found odd number" done Câu lệnh read  Cú pháp : read varible1, varible2,...varibleN $ cat > sayhello # #Script to read your name from key-board # echo "Your first name please:" read fname echo "Hello $fname, Lets be friend!" command1;command2  $ date;who - Chức năng: Cho phép ước lượng một biểu thức chứa biến - Ví dụ: foo=10 x=foo y=‘$’$x echo $y  Kết quả $foo Dùng lệnh evan foo=10 x=foo eval y=‘$’$x echo $y Kết quả : 10 Lệnh eval Lệnh exec - Chức năng: Dùng để gọi một lệnh bên ngoài khác. Thông thường lệnh exec sẽ gọi một shell phụ khác với shell mà script đang thực thi Lệnh exit n - Chức năng: Dùng để thoát ra khỏi shell đang gọi và trả về mã lỗi n - Mã lỗi ‘0’ được coi là thành công Lệnh exec và exit Lệnh printf - Chức năng: Tương tự như lệnh printf của thư viện C - Danh sách các ký tự đặc biệt dùng chung với dấu “\”, gọi là chuỗi thoát Lệnh return - Chức năng: Trả về giá trị của hàm Lệnh set - Chức năng: Dùng để thiết lập giá trị cho các tham số môi trường như $1,$2,$3,v.v... Ngoài ra, lệnh này còn có chức năng loại bỏ những khoảng trắng không cân thiết và đặt nội dung của chuỗi truyền cho nó vào các biến tham số #set This is parameter #echo $1 This #echo $2 is Lệnh return và set Lệnh shift - Chức năng: Di chuyển nội dung các tham số môi trường $1, $2,$3,v.v... xuống một vị trí. (Do ta chỉ có tối đa 9 tham số $1..$9) Lệnh trap (tham khảo thêm) Lệnh shift, trap - Chức năng: Loại bỏ biến khỏi môi trường shell - Lệnh unset rất ít được sử dụng - Ví dụ: #!/bin/sh foo=“Hello World” echo $foo unset foo echo $foo - Kết quả chương trình sẽ in ra chuỗi rỗng (do lúc này biến foo không tồn tại nữa) Lệnh unset Lệnh đi kèm /dev/null  Cú pháp : command > /dev/null : gửi tới những output không muốn xuất hiện  $ ls > /dev/null Biến cục bộ và toàn cục  Biến cục bộ (local variables) là các biến ta sử dụng. Nếu tải bản copy của shell $/bin/bash, shell mới sẽ bõ qua tất cả các biến cũ  Ví dụ : $x=5 $echo $x 5 $/bin/bash $echo $x NOTE:-Empty line printed $x=7 $exit $echo $x Từ khóa export  Có thể copy biến shell cũ tới shell mới, biến như vậy gọi là biến toàn cục.  Cú pháp : export variable1, variable2,.....variableN  $ xe=Bus  $ echo $xe  Bus  $ export xe  $ /bin/bash  $ echo $xe  Bus  $ exit  $ echo $xe Điều kiện thực th: && và ||  Toán tử điều khiển :  && : AND  Cú pháp command1 && command2 : command1 được thực thi, iff command1 trả về giá trị thoát 0.  || : OR  Cú pháp : command1 || command2 : command2 được thực thi iff command1 trả về giá trị thoát non-zero Hoặc : command1 && comamnd2 if exist status is zero || command3 if exit status is non-zero Input – Output chuyển hướng  $ cat > myft  This is my file # ctrl D  $ cal  $ cal >myfile #lưu  $ cat >number  $sort <number Input – Output chuyển hướng $cat >demosc #!/bin/sh if [ $# -ne 2 ] then echo "Error : Number are not supplied" echo "Usage : $0 number1 number2" exit 1 fi ans=`expr $1 + $2` echo "Sum is $ans" Hàm  Hàm có vai trò quan trọng trong Shell function-name ( ) { command1 command2 ..... ... commandN return } $ SayHello() { echo "Hello $LOGNAME !” return } Dò lỗi – debug trong shell - Do script là lệnh văn bản được shell thông dịch nên việc dò lỗi không khó như các chương trình biên dịch nhị phân - Quá trình dò lỗi thì shell sẽ in ra số thứ tự của dòng gây lỗi. Ta cũng có thể thêm vào lệnh echo để in ra nội dung của các biến có khả năng gây lỗi cho chương trình  Có thể dùng set để đặt một số tùy chọn cho shell hoặc đặt thêm tham số khi gọi shell thực thi script $ bash -x script-name $ bash -x domains.sh Một số tùy chọn khi dùng lệnh set 70 71 Xử lý chuỗi 1. Khởi tạo một chuỗi string=abcDefghu1234EDstuV 2. Lấy độ dài một chuỗi $ echo {#string} echo `expr length $string` echo `expr "$string" : ".*"` 3. Định vị một ký tự trong string $ echo `expr index "$string" c ` $echo `expr index "$string" E` 72 stringZ=abcABC123ABCabc 4.Lọc N ký tự đầu tiên của chuỗi $echo ${stringZ:0} echo ${stringZ:7:3} # lấy từ vị trí thứ 7, 3 ký tự 5.Lọc các ký tự từ đầu chuỗi trừ N ký tự cuối cùng ${string: -N} echo ${stringZ:-4} echo ${stringZ:(-4)} 6.Lọc N ký tự bắt đầu từ ký tự số M echo `expr substr $string M N ` 7.Lọc các ký tự từ a* đến u (đầu tiên) $ echo ${stringZ#a*C} # 123ABCabc $echo ${stringZ#a*3} Xử lý chuỗi 73 stringZ=abcABC123ABCabc $echo ${stringZ#*123} ${stringZ%kytu* kytu} #abcDef1234ED ${stringZ%substr* kytu} #abcDefghu1 ${stringZ%%kytu* kytu} #abcDefgh ${string/substr/replacement} #xyzDefghu1234EdstuV $ echo ${stringZ% *} : xóa từ bên phải Xử lý chuỗi 74 12. Loc N ký tự kể từ ký tự thứ M vd : N=3 , M=4 read N echo `expr substr $string $M $N ` # Def 13.Lọc các ký tự kể từ chuỗi con “substr” string1=xyzabcd123xyzthung {string1%%substr*} #xyz 14. Lọc N ký tự đầu tiên ${string1:N} #N=3:abcd123xyzthung ${string1#kytu*kytu} #abcd123xyzthung 15.Lọc các ký tự kể từ substr trở về trươc ${string1##*substr}#thung Xử lý chuỗi 75 Xử lý chuỗi trong shell #!/bin/bash string=abcDefghu1234EDstuV echo ${#string} 19 echo `expr lengt#h $string` #19 echo `expr index "$string" c ` #3 echo `expr index "$string" E ` #14 echo ${string:2} # cDefghEDstuVF echo ${string: -3} # tuV echo `expr substr $string 3 5 `# cDefg echo ${string#a*u} # 1234EDstuV 76 Xử lý chuỗi trong script echo ${string#*123} #4EDstuV echo ${string##a*u} # V echo ${string%s*V} #abcDefghu1234ED echo ${string%234*V} #abcDefghu1 echo ${string%%u*V} #abcDefgh echo ${string/abc/xyz} #xyzDefghu1234EDstuV read N echo `expr substr $string 3 $N ` 77 Xử lý mảng  array[xx] 1.Khai báo mảng : declare –a array 2. Lấy giá trị mảng : ${array[xx]} ${array[@]} hoặc ${array[*]} : lâý tât ́ cả phân tử của mảng ${#array[@]} hoăc ̣${#array[*]} : tông số phâǹ tử của mảng Ví dụ : array[5]=`expr ${array[11]} + ${array[13]}` Một cách khác array=( zero one two three four ) -> array[0]=zero ; array[4]=four 78  Cách khác : array=( [xx]=XXX [yy]=YYY ...)array=([17]=seventeen [21]=twenty-one) Ví dụ : array=( zero one two three four five )echo ${array[0]} # zeroecho ${array:0} # zero echo ${array:1} # ero : lâý từ vị trí số 1 cuả phân tử thư ́ nhất Xử lý mảng 79 arrayZ=( one two three four five five )  echo ${#array[0]} # 3 : chiều dai ̀ cua ̉ phần tử thứ nhấtecho ${#array} # 4echo ${#array[1]} # 3 : chiều dai ̀ cua ̉ phần tử thứ 2echo ${#array[*]} # 6 : số phần tử của mảngecho ${#array[@]} # 6 : số phân ̀ tử của mảng. Ví dụ :array2=( [0]="first element" [1]="second element" [3]="fourth element" )echo ${array2[0]} # first elementecho ${array2[1]} # second elementecho ${array2[2]} # không khơi ̉tao ̣nên có gia ́trị nullecho ${array2[3]} # fourth element 80 Xử lý mảng  Ví dụ : arrayZ=( one two three four five five ) echo ${arrayZ[@]:0} # one two three four five five echo ${arrayZ[@]:1} # two three four five five : lâý từ̉ phân tử thứ 1 81 echo ${arrayZ[@] 2} # two three : lây ́ phân tử 1 đến 2  Khai báo mảng rỗng array0=( first second third ) array1=( ' ' ) # "array1" có 1 phần tử rôñg. array2=( ) # mảng rỗng  82  Thêm phân tử vào mảng array0=( "${array0[@]}" "new1" ) # ${array0[@]} là toan bộ mang cũ, new1 là phần tử mớiarray1=( "${array1[@]}" "new1" )array2=( "${array2[@]}" "new1" ) hoặcarray0[${#array0[*]}]="new2"array1[${#array1[*]}]="new2"array2[${#array2[*]}]="new2" 83  Sao chép mảngarray2=( "${array1[@]}" ) hoặcarray2="${array1[@]}" 2. Xóa mảng : unset Ví dụ : unset array[1] : xoá phân tử thứ 2 của mảng arrayunset array : xóa tòan bô ̣ mảng #!/bin/bash while : do clear echo "--------------------------------------- " echo " Main Menu" echo "--------------------------------------- " echo "[1] Show today date/time" echo "[2] Show all files in current directory" Tạo menu tương tać vơí ngươì dùng. 85 echo "[3] Show calendar"echo "[4] Exit/Stop"echo "======================="echo -n "Enter your choice [1-4]: "read choicecase $choice in1) echo "Today is `date` "echo "Press Enter key to continue ..."; read;;2) echo "Files in $PWD"; ls -lecho "Press Enter key to continue..."; read;;3) cal ; echo "Press Enter key to continue..."; read;;4) exit 0;;*) echo "Please choice 1,2,3,4. Press Enter key to continue..."; read;;esacdone Tạo menu tương tać vơí ngươì dùng. LẬP TRÌNH C TRÊN LINUX Nội dung  Ngôn ngữ C  Minh họa Hello world Ngôn ngữ C – điều kiện cần  3 công cụ cần thiết để viết lập trình trên ngôn ngữ C :  Trình soạn thảo ( text editor) : vi, gedit  Trình biên dịch ( compiler) : GNU Compiler Collection (GCC)  $ gcc  Thư viện chuẩn của C ( C standard library) : glibc  $ locate glibc "Hello, World!" Source Code #include main() { printf("Hello, world!\n"); return 0; } Phân tích "Hello, World!"  Dòng đầu tiên trong ngôn ngữ C : preprossor directive và luôn bắt đầu bằng dấu #.  Hàm main ()  Dấu ; Compile hello.c  Biên dịch chương trình hello.c bằng gcc như sau :  $Gcc –o hello hello.c  -o : tạo ra file thực thi  $ ls hello.c hello  $./hello 7Nhập môn lập trình Linux  UNIX – Hệ điều hành server mạnh , được thử thách qua thời gian. Chưa có đối  Windows 2000 server ra đời – cạnh tranh với UNIX  Cả UNIX và Win 2k sản phẩm có bản quyền ( Mặc dù Unix là sản phẩm mã nguồn mở - SUN đã thương mại hóa)  Linux ra đời trên nền tảng Unix , được toàn cộng đồng phát triển và là sản phẩm mã nguồn mở rất phổ biến  Linux là kernel cung cấp những chức năng tối thiểu của OS Unix.  Ưu điểm Linux : Ổn định, biến.tính kế thừa. Mọi chương trình trên Unix đều có thể chạy trên Linux ( Giống nhau 98%) Cộng đồng mã nguồn mở GNU 8  Cộng đồng GNU ( “Gnu is Not Unix”) đã xây dựng nhiều ứng dụng trên Unix (Linux) : Word proccessing ,Office, Game, Multimedia, networking và các compiler , interpriter , programming languages  GNU – Phi lợi nhuận song cần tuân thủ một số quy định về bản quyền của GNU - GPL (General Public License) – “copyleft”( thay cho “copyright”) GNU cung cấp bộ biên dịch C/C++bao gồm :  gcc trình biên dịch C  g++ trình biên dịch C++  gdb Debug  GNU make Trình quản lý mã nguồn và trợ giúp biên dịch  bash shell Lập trình trên Linux 9 Ngôn ngữ C hỗ trợ rất tốt cho lập trình trên Linux.Tuy nhiên nó không phải là lựa chọn duy nhất.Có thể dùng Pascal , Assembler , Perl , Java , PHP  Chương trình Linux tồn tại trên hai dạng : thực thi ( file binary) giống như file *.exe trong DOS và thông dịch (script) giống như file *.bat . Hai dạng file này có thể hoán đổi cho nhau . Để chay chương trình cần cấp quyền thực thi “x”  Đường dẫn tới tập tin binary /bin/,/user/bin,user/local/bin ,./  Cài biến môi trường PATH = /bin:/user/bin:/user/local/bin:. 10 Phát triển chương trình trên ngôn ngữ c Chương trình trên Linux  Trình biên dịch gcc thường nằm trong /usr/bin hoặc /usr/local/bin. Khi biên dịch nó cần sự hỗ trợ của các file C header trong /usr/include hoặc /usr/local/include  Các thư viện liên kết nằm trong /lib hoặc /usr/local/lib.  Các thư viện chuẩn của gcc nằm trong /usr/lib/gcc-lib  Chương trình nhị phân có thể nằm ở bất kỳ đâu song khi thực thi ta cần chỉ đường dẫn thông qua biến môi trường PATH Header file 11 Định nghĩa hàm , khai báo các hằng với cấu trúc dữ liệu cần thiết khi biên dịch.Các header năm trong /usr/include;/usr/local/include hoặc các thư mục con /usr/include/asm hoặc /usr/include/sys ví dụ : #include .h Một số đường dẫn đến các file header mặc định như /usr/include/g++-2 (dùng cho trình biên dịch C++) Nếu muốn tổ chức các header của riêng mình nằm ngoài thư mục mặc định , ta phải chỉ rõ đường dẫn đến thư mục đó khi biên dịch bằng tùy chọn –I gcc –I/usr/mypro/include test.c –o test 12  Khi sử dụng hàm nào đó của thư viện hệ thống , để biêt hàm này được định nghĩa trong file header nào ta dùng lệnh man.Ví dụ hàm kill() $man 2 kill Sử dụng hai file header sys/types.h và signal.h Các file thư viện 13 Dùng để trình biên dịch bắt lỗi cú pháp , kiểm tra kiểu chương trình và tạo các object file.Trong Linux các file thư viện có phần mở rộng là.a,.so hoặc.sa và bắt đầu bằng lib . ví dụ libutil.a ; libc.so Hai loại liên kết :Static Link Library (.a) và Dinamic Link Library(.so) Dùng lệnh ls /usr/lib để xem các thư viện Tạo object file (.o) dùng tùy chọn –c ( giống .obj) trên C Thư viện liên kết tĩnh : Trình biên dịch lấy toàn bộ mã thực thi của hàm thư viện và đưa vào chương trình chính.Ví dụ program.c a. Tạo hai thư viện đối tượng từ mã nguồn bob.c và alice.c  bob.o và alice.o Thư viện 16 Xây dựng hàm lib.h $gedit lib.h Viết hàm program.c 17 18  File thư viện .a là file chứa tập hợp các file thư viện đối tượng .o , là một dạng file nén được tạo bởi lệnh ar Đã có thư viện libfoo.a , ta liên kết lại với chương trình chính 19 Tương thích giữa Linux và Windows/DOS Linux Windows/DOS Ý nghĩa func.o func.obj File đối tượng lib.a lib.lib Static link lib program program.exe Execute file lib.so lib.dll Dinamic link lib 20 Thư viện liên kết động  Nhược điểm của TVLK tĩnh : Nhúng mã nhị phân vào chương trình khi biên dịch. Rất tốn không gian bộ nhớ và phải biên dịch lại mỗi khi thay đổi chương trình.  Thư viện liên kết động giải quyết vấn đề trên.Trình liên kết chỉ lưu các tham chiếu đến các hàm trong thư viện liên kết .Khi thực thi , HDH sẽ chính thức nạp thư viện liên kết cần thiết vào bộ nhớ.Như vậy , nhiều chương trình có thể sử dụng chung một DLL duy nhất.  Thư viện liên kết động trong Linux có phần mở rộng .so  Để biên dịch file thư viện để đưa vào liên kếtsử dụng tùy chọn –fpic hoặc –fPIC (Position Independence Code) 21 Tạo file đối tượng cho DLL Tạo liên kết động cho các file .o trên – Dùng tùy chọn –shared # chỉ đường dẫn đến thư mục chưa libfoo.so Biên dịch lại program.c Kiểm tra HDH có tìm ra các file thư viện liên kết động dùng lệnh ldd 22 CÁC CÔNG CỤ QUẢN LÝ HỖ TRỢ LẬP TRÌNH QUẢN LÝ NHIỀU MÃ NGUỒN Vấn đề nảy sinh khi phát triển những phần mềm lớn là phải biên dịch nhiều lần các mã nguồn . Linux cung cấp cho ta công cụ make . Công cụ này đảm bảo chỉ những file thay đổi nội dung mới phải biên dịch lại.Công cụ make còn được dùng để tạo ra một file kết xuất từ nhiều file nguồn khác nhau.Ngoài ra make còn được sử dụng rất nhiều trong việc quản lý gói , cài đặt , gỡ bỏ các ứng dụng Có nhiều loại makefile khác nhau như phiên bản thử nghiệm (trail) , phiên bản chính thức hay (beta), phiên bản dò lỗi (Debug). Các makefile khác nhau có thể sử dụng để biên dịch các phần khác nhau của dự án. 23 Tập tin makefile  Chương trình make không tự nó tạo ra các ứng dụng , nó phải được hướng dẫn , lập trình viên phải tạo ra một file chứa thông tin hướng dẫn chương trình make cách úng dụng sẽ được xây dựng và biên dịch.File chứa thông tin đó goi là makefile  Tập tin makefile thường đặc tả các phụ thuộc và các quy tắc dẫn đến phụ thuộc.Một phụ thuộc (dependences) gồm nhiều file liên quan đến nhau và cùng có một mục đích (tagget).Quy tắc (rules) là các hướng dẫn hay quy định để các file phụ thuốc tạo ra kết quả. Thông thường file đích hay file kết quả là các file thư viện .o hay .out Cú pháp sử dụng trong makefile 24 Các tham số và tùy chọn :Ba tùy chọn thông dụng nhất là : -k yêu cầu make “cứ tiếp tục” chạy khi phát sinh lỗi thay vì phải dừng khi có lỗi đầu tiên. -n yêu cầu make in ra các thao tác mà nó thực thi song không thực thi các thao tác đó để xuất ra kết quả -f chỉ định tập tin mà make phải diễn dịch. Nếu không có tùy chọn –f , trình make sẽ diễn dịch file có tên là makefile hoặc Makefile ngay trong thư mục hiện hành nơi chứa makefile 25 Để tạo ra file thực thi , ta phải truyền tên file thực thi cho make thông qua tham số dòng lệnh. Nếu không make sẽ chọn tên file đích đầu tiên mà nó tìm được làm tên của chương trình Ví dụ : $make # tương đương với $make makefile Thông thường từ khóa all được chọn như tập tin đích đầu tiên trong make .Sau đó các file đích khác đều phụ thuộc vào file ban đầu này. all : myapp myapp.1 Cú pháp sử dụng trong makefile Xây dựng các phụ thuộc (dependences) 26 Các phụ thuộc xác lập mối quan hệ giữa các file nguồn trong ứng dụng.Trong makefile ta xây dựng các phụ thuộc bằng cách viết tên file đích đầu tiên , tiếp theo là dấu “:” Kế đến là các file phụ thuộc các nhau bằng khoảng trắng hay“tab”. Ví dụ : myapp: main.o 2.o 3.o main.o: main.c a.h 2.o: 2.c a.h b.h 3.o: 3.c b.h c.h Makefile trên cho ta biết sự phụ thuộc của myapp vào main.o và 3.o ; main.o phụ thuộc vào main.c và a.h;2.o phụ thuộc vào 2.c,a.h và b.h.... 27 Xây dựng các quy tắc Sau khi xác định các phụ thuộc , ta cần chỉ rõ các quy tắc hay cách thức tạo ra các file đích.Quy tắc chính là câu trả lời cho câu hỏi “ phải làm gì để tạo ra file đích?” ví dụ để tạo 2.o lệnh gì sẽ phải sử dụng ? . Đó chính là gcc –c 2.c. Cần lưu ý các quy tắc phải được ghi thụt đầu dòng vào 1 ”tab”. Cuối dòng cũng không để khoảng trắng . Một số trình make sẽ không chịu diễn đạt quy tắc nếu cuối dòng có khoảng trắng.Ta xét một ví dụ tổng quát dưới đây 28 - Tạo makefile1 29 - Chạy makefile1 với tùy chọn –f (do tên makefile không phải mắc định) Dòng báo lỗi thông báo ta chưa có quy tắc để thực hiện makefile đích main.c. Tất nhiên rồi vì ta chưa có các file nguồn main.c,2.c,3.c để make thực hiện các quy tắc .Ta sẽ tạo ra các file nguồn này. Trước hết ta dùng lệnh touch để tạo các file header rỗng ( vì lệnh touch tạo ra các file rỗng). 30 Kế tiếp ta sẽ tạo ra các file nguồn main.c,2.c,3.c với nội dung sau: 31 Chạy lại make : Trình make không thực hiện trình tự các quy tắc đã được liệt kê trong makefile . Make sẽ tìm đến đích mà myapp cần thiết phải biên dịch trước tiên (2.c). 32  Xóa 3.o xem thử make sẽ làm việc như thế nào?  Make sẽ nhận ra 3.o không có và sẽ tiến hành biên dịch lại 3.o Sau đó thực hiện make theo quy tắc trong makefile.  Trong makefile có thể dùng “#” để đánh dấu dòng chú thích (comment).Vì makefile là một trình cài đặt thật sự nên rất cần các chú thích tương ứng ,giúp người đọc chương trình rõ ràng và dễ hiểu hơn. 33 ĐIỀU KHIỂN MACRO BẰNG makefile  Macro được sử dụng để thay đổi các tùy chọn khi áp dụng các quy tắc biên dịch. Make hỗ trợ các lệnh điều khiển các macro bên trong makefile , giúp ta điều khiển các hoạt động của makefile uyển chuyển hơn .Hỗ trợ cho việc biên dịch , gỡ rối được được thuận lợi bằng cách tối ưu hóa các tùy chọn .  Macro trong make được định nghĩa bởi cú phấp :  MACRO=value ; #MACRO rỗng nếu sau dấu “=” LÀ KHOẢNG TRẮNG  Để truy xuất giá trị của MACRO ta dùng cú pháp : $(MACRONAME) hoặc $MACRONAME  Thường MACRO được định nghĩa trong chương trình , tuy nhiên nó có thể được định nghĩa trên dòng lệnh Ví dụ khi cần định nghĩa trình biên dịch cần sử dụng là gcc ta viết CC=gcc . Macro được định nghĩa trên dòng lệnh có giá trị ưu tiên hơn được định nghĩa trong chương trình makefile.Ta sẽ tìm hiểu kỹ vấn đề này qua ví dụ makefile2 dưới đây : 34 1.Dùng Text Editor tạo makefile2 có nội dung dưới đây . /*makefile2*/ all: myapp #Trình biên dịch cần sử dụng CC=gcc # Thư mục chứa các file include INCLUDE=. # Tùy chọn biên dịch trên dòng lệnh trong quá trình phát triển CFLAGS=-g –Wall –ansi # Tùy chọn trong quá trình hoàn thiện sản phẩm CFLAGS=-O –Wall –ansi myapp: main.o 2.o 3.o $(CC) –o myapp main.o 2,o 3.o main.o: main.c a.h $(CC) –I$(INCLUDE) $(CFLAGS) –c 2.o 2.o: 2.c a.h b.h $(CC) –I$(INCLUDE) $(CFLAGS) –c 3.c 35 2. Sau đó xóa hết các file *.o đã tạo trước đây : $rm *.o myapp 3. Chạy lại make 36 QUẢN LÝ NHIỀU ĐÍCH (multi target) /*makefile3*/ all: myapp # Trình biên dịch cần sử dụng CC=gcc # Vị trí chứa file cài đặt INSTDIR=./ # Thư mục chứa các file header INCLUDE=./ # Tùy chọn biên dịch trên dòng lệnh trong q/t phát triển CFLAGS=-g -Wall -ansi # Tùy chọn trong quá trình hoàn chỉnh sản phẩm CFLAGS=-O -Wall -ansi 37 # Đích biên dịch khi thực thi myapp: main.o 2.o 3.o $(CC) -o myapp main.o 2.o 3.o main.o: main.c a.h $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c 2.o: 2.c a.h b.h $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c 3.o: 3.c b.h c.h $(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c 38 # Đích thực hiện xóa các file trung gian clean: -rm main.o 2.o 3.o # Đich thực hiện khi cài đặt,có thể bỏ phụ thuộc myapp nếu đã thực hiện all: trứơc đó install: myapp @if [ -d $(INSTDIR) ]; \ then \ # cp myapp $(INSTDIR); \ chmod a+x $(INSTDIR)/myapp; \ chmod og-w $(INSTDIR)/myapp; \ echo "Install in $(INSTDIR)"; \ else \ echo "Sorry , $(INSTDIR) does not exist!"; \ fi 39  Ký tự “-“ trước lệnh rm yêu cầu make không báo lỗi nếu các file.o không có trên đĩa.  Ký tự “@” yêu cầu make không hiển thị lên màn hình console nội dung các lệnh thực thi trước khi lệnh được thực thi.  Ta sẽ thực thi makefile3 đối với các đích : Đầu tiên đối với đích all: Lập trình PHP & MySQL  Công cụ sử dụng :Bộ cài đặt “PHP,MySQL,Apache” EasyPHP 5.3 Xampp ( for windows or for Linux) Thư mục làm việc: EasyPHP : /www Xampp : /htdos url: ( 127.0.0.1) Hostname: localhost; username :root; password:root Ví dụ WB : Mozilla Firefox PHẦN 1: NGÔN NGỮ PHP Giới thiệu ngôn ngữ PHP  PHP - viết tắt của PHP Hypertext Preprocessor –  Do Rasmus Lerdorf phát triển từ một gói công cụ có tên là "Personal Home Pages" (nghĩa đầu tiên của PHP). (1994)  Được hoàn thành vào khoảng giữa năm 1995  Sau đó PHP được cải tiến và mở rộng bộ máy nhúng và bổ sung thêm một số hàm API đơn giản cho phép các lập trình viên khác tự do bổ sung nhiều tính năng vào ngôn ngữ bằng cách viết các module cho nó  Cấu trúc của ngôn ngữ được tinh chế, kết cấu thân thiện đối với những người sử dụng các ngôn ngữ hướng đối tượng hay các ngôn ngữ hướng thủ tục. Xử lý các trang HTML  Cách thức hoạt động của hệ trình duyệt (Web Client) và máy chủ cung cấp dịch vụ Web (Web server ) :  Bước 1: Trình duyệt gửi một yêu cầu HTTP đến máy chủ, yêu cầu một file nào đó  Bước 2: Máy chủ sẽ chuyển yêu cầu này đến chương trình xử lý tương ứng, chính là chương trình Web server.  Bước 3: Web server phân tích chuỗi yêu cầu nhận được, kiểm tra khách yêu cầu gì. Nếu là các file bình thường (không phải là các file chứa các đoạn mã script thực thi phía máy chủ), nó sẽ tìm kiếm file đó và trả về cho trình duyệt ở máy khách.  Nếu đó là các file chứa các đoạn mã script thực thi phía máy chủ (các chương trình CGI, hay các file thư viện liên kết động ISAPI, hoặc các file *.asp hay *.php), sẽ triệu gọi chương trình thực thi các đoạn mã này. Chương trình này chạy các đoạn mã, trả chúng về cho Web server dưới khuôn dạng của HTML. Sau đó, Web server mới trả kết quả lấy được cho trình duyệt. Xử lý các trang PHP Phân tích chương trình Chương trình “Hello world” đầu tiên <?php echo ("hello, world"); ?> Điều đầu tiên : đoạn mã thực thi PHP luôn luôn được đặt trong thẻ . Phía máy chủ sẽ chỉ thực thi các đoạn mã nằm trong thẻ này. Tất cả các đoạn mã khác nằm ngoài thẻ trên đều không được xử lý trực tiếp trên server mà được đưa về trình duyệt. <?php // Đoạn mã PHP đặt ở đây ?> Điều thứ 2 : chương trình phải được đặt trong các file *.php. Web server là chỉ triệu gọi các chương trình xử lý tương ứng với các file có đuôi xác định trước (*.PHP)  Điều thứ 3 :Trong file *.php , ngoài các đoạn script PHP, bạn có thể đặt bất kỳ cái gì theo khuôn dạng HTML, kể cả các đoạn JavaScript chạy trên máy khách. Tức là ngoại trừ các đoạn script PHP ra thì nó không khác gì một file HTML thông thường  Điều thứ 4 : Có thể đặt nhiều đoạn mã xử lý PHP khác nhau trong cùng một file PHP. Các đoạn mã PHP này sẽ được thực thi lần lượt từ đầu file xuống dưới. Hãy xem ví dụ sau: <?php echo ("hello, world"); ?> Xin chao tat ca cac ban, day la chuong trinh PHP dau tien cua toi <?php echo (" CHAO CAC BAN ") ?>  Cuối cùng: Kết thúc mỗi câu lệnh của PHP đều là một dấu chấm phẩy (";"), ngoại trừ một vài trường hợp (ta sẽ được biết sau này)  Cách sử dụng hàm duy nhất trong bài này: echo()  Hàm echo được sử dụng để trả về nội dung của các biến, hằng, chuỗi... cho trình duyệt. Ở ví dụ trên, hàm echo trả về chuỗi "hello, world" và chuỗi "<p align=right> CHAO CAC BAN ". Các thẻ HTML trong chuỗi sẽ được giữ nguyên khi nó được đưa về trình duyệt, và nó sẽ được xử lý như các thẻ HTML khác. Một số lưu ý Dấu chú thích: Chúng ta có thể sử dụng một số dấu chú thích sau trong PHP: // dòng văn bản chú thích (chỉ áp dụng trên một dòng) /* Đoạn văn bản chú thích */ (nằm trong cặp /* và */ Lưu ý rằng các dấu chú thích này chỉ có hiệu lực trong các đoạn mã nhúng PHP Ký tự giải phóng Hãy chú ý đến dòng chữ sau: My name's “ten" Để in nó ra màn hình, ta sẽ làm như sau: <?php echo ("My name's “ten""); ?> Rất tiếc là sai. PHP có quy định một số ký tự đặc biệt (Dấu ngoặc kép (") là một trong các ký tự đó). Một vài phiên bản của web server khi gặp lỗi này đã không thực hiện nữa, , nó sẽ tự động chèn một dấu (\) trước ký tự gây lỗi này. Ký tự này (\) được gọi là ký tự giải phóng (Escaping character). Đoạn mã đúng như sau: <?php echo ("My name's: \“ten\""); ?> Một số các ký tự đặc biệt mà có thể được chỉ rõ với ký tự giải phóng gạch chéo \\ Ký tự Nối tiếp Nghĩa \' Dấu móc lửng (') \" Dấu móc kép (") \\ Dấu gạch chéo (\) \$ Dấu $ \n Ký tự tạo dòng mới \r Ký tự về đầu dòng \t Ký tự Tab Hãy xem ví dụ dưới đây <?php $name=“HoTen"; echo("Giá trị của biến \$name là $name”); ?> Hằng và biến  PHP quy định bất kỳ từ nào có dấu $ ở trước đều là tên của biến. Ví dụ: $ten : xác định một biến có tên là ten $custome_name: xác định một biến có tên là custome_name  Tên biến là chuỗi các ký tự chỉ bao gồm các chữ số, chữ cái (a..z) và dấu gạch dưới ( _ ). Phân biệt các biến chữ hoa và chữ thường . Tên biến không bắt đầu bằng các chữ số (0.. 9)  Gán giá trị cho các biến: $tên_biến = giá trị cần gán; Ví dụ: $nam_sinh=1980; $ho_ten="Ten"; Các kiểu dữ liệu trong PHP  Có 3 kiểu dữ liệu cơ bản: Integer, double và string. Ngoài ra còn một số kiểu dữ liệu khác như array,object.  Kiểu giá trị Integer sử dụng 4 byte của bộ nhớ. Đây là kiểu giá trị nguyên (không phải là số thực) và có giá trị nằm trong khoảng từ -2 tỷ đến 2 tỷ.  Kiểu dữ liệu double là kiểu dữ liệu số thực (8byte), cho phép chứa các số thưc.  Kiểu String được sử dụng để chứa các dữ liệu như là các ký tự văn bản, ký tự đặc biệt và các chữ số. Dữ liệu kiểu string được đặt trong cặp dấu ngoặc kép ("") (hay còn gọi là chuỗi ký tự). Ví dụ: 2: Kiểu integer; 2.0: kiểu double "2": Kiểu xâu "2 gio": Kiểu xâu Định nghĩa hằng  Hàm define() được sử dụng để tạo một hằng số: Cấu trúc : define ("tên_hằng","giá trị của hằng");  Ví dụ: define ("LOP_T07A","SSV=45");/* Định nghĩa hằng LOP_T07A với giá trị là "SSV=45“ */ define ("diem_so",9.5);/* định nghĩa hằng diem_so với giá trị là 9.5 ;*/ Lay giá trị của hang: echo ("Tên lop: ".LOP_T07A); Điều này tương đương với echo ("Tên lop: LOP_T07A"); <?php define("YELOW","#ffff00"); define("WHITE","#ffffff"); define("SISO",45); if(defined("YELOW")) { echo ("\n"); echo ("SI_SO=".SISO."\n"); } ?> Ví dụ Một số hằng xây dựng sẵn (built in constant)  PHP có chứa một số hằng được xây dựng sẵn. TRUE và FALSE là 2 hằng đã được dựng sẵn với chỉ định true (1) false (0) và / hoặc một xâu rỗng)  PHP_VERSION chỉ định phiên bản của bộ phân tích PHP mà bạn đang dùng hiện tại.  PHP_OS chỉ hệ điều hành mà trình phân tích PHP đang chạy. echo (PHP_OS); // in ra màn hình "Linux"  _FILE_and_LINE_ trả về tên của đoạn script (đoạn mã nhúng) đang được phân tích tại dòng hiện thời trong đoạn mã script.  PHP còn cung cấp một số hàm để thông báo lỗi như E_ERROR, E_WARNING, E_PARSE và E_NOTICE. Để xem các thông tin về môi trường PHP đang sử dụng , dùng hàm phpinfo(): <?php phpinfo(); ?> </HTML Lừa kiểu và ép kiểu dữ liệu Kiểu dữ liệu của biến sẽ được tự động xác định bởi giá trị đặt vào biến $a=1 // $a là kiểu integer $a=1.2 // Bây giờ, nó là kiểu double $a="1" // Và bây giờ nó là kiểu string Chuyển kiểu chuỗi phải tuân theo 2 nguyên tắc sau: - Chỉ những chuỗi bắt đầu là một xâu các chữ số. Nếu chuỗi bắt đầu bằng một giá trị số hợp lệ, chuỗi này sẽ được xác định như giá trị của nó, trong trường hợp khác, nó sẽ trả về 0. VD: chuỗi "35 tuổi" sẽ được ước lượng là 35, nhưng chuỗi "tuổi 35" sẽ chỉ xác định giá trị 0. - Một chuỗi chỉ được xác định như kiểu double nếu giá trị kiểu double được miêu tả bao gồm toàn bộ chuỗi. Chuỗi "3.4", "- 4.2" sẽ được ước lượng như giá trị thực 3.4 và -4.2. Nếu không phải là ký tự kiểu số thực được đưa vào chuỗi, giá trị của chuỗi đó sẽ được ước lượng như là một số nguyên. Chuỗi "3.4 dollar" sẽ thành số nguyên 3. PHP sẽ thực hiện "lừa kiểu" giữa 2 kiểu số. Khi thực hiện một phép toán số học giữa kiểu thực và kiểu nguyên, kết quả sẽ là số thực $a=1 //$a là một số nguyên $b= 1.0 //$b là số thực $c=$a+$b //$c là kiểu số thực , = 2.0 $d = $c+"6th“ //$d là kiểu số thực = 8.0 Ép kiểu dữ liệu Ép kiểu dữ liệu cho phép thay đổi kiểu dữ liệu của biến $a=11.2 // $a là kiểu thực $a=(int)$a // $ a là kieu int,giá trị = 11 $a= (double)$a // $a trở về kiểu thực = 11.0 $b= (string)$a// $b là giá trị kiểu chuỗi ="11" Ngoài ra, chúng ta còn được phép ép kiểu (array) và (object) ( integer) tương đương với (int); (fload) và (real) tương đương với (double) Một số hàm tiện ích khác PHP có một số hàm hỗ trợ làm việc với các biến  gettype($ten_bien) trả về giá trị là kiểu của biến. "integer","double","string","array","object","class","unkn own type" Ví dụ: echo(gettype($name));  settype($ten_bien,"kieu_du_lieu") đặt kiểu dữ liệu cho biến $ten_bien.Có thể có một trong các kiểu sau: "integer","double","string","array","object" Kiểu dữ liệu không được đặt, giá trị false sẽ được trả về, nếu thành công, trả về giá trị true. $a=7.5; //$a là kiểu thực settype($a,"integer"); // bây giờ nó là một số nguyên có giá trị 7  Hàm isset($ten_bien) xác định xem biến $ten_bien đã đặt một giá trị nào đó hay chưa. Nếu biến đó đã có giá trị, hàm trả về true. Trong truờng hợp ngược lại, hàm trả về giá trị false;  Hàm unset($ten_bien) được sử dụng để huỷ bỏ biến $ten_bien, giải phóng bộ nhớ bị chiếm dụng của biến đó  Ví dụ $id=“12345”; if isset($id) {echo (“Du lieu da được gán”);} else {echo (“Dư lieu chưa đươc gán”);} unset($id); if (!isset($id)) {echo (“Dũ liệu chưa được nạp”); } Cấu trúc điều khiển Để lập trình giải một bài toán nào đó, chúng ta phải sử dụng các câu lệnh sau: a. Lệnh gán: được sử dụng để đặt một giá trị vào một biến nào đó. b. Lệnh rẽ nhánh: Được sử dụng để xác định xem chương trình sẽ thực hiện công việc gì trong điều kiện ra sao c. Lệnh lặp: Cho phép chương trình của bạn tự động lặp lại các thao tác nào đó Quá trình xây dựng các bước để thực hiện một bài toán nào đó, gọi là quá trình xây dựng thuật giải. Lệnh gán Cú pháp: $ten_bien = gia_tri; Ví dụ: $ngay_sinh="1/4/1980"; $que_quan="Thanh Hoa"; $luong=300000; Lệnh rẽ nhánh có dạng sau  if (điều kiện) { công việc cần làm } Ví dụ: if ($name=“ten") { echo ("Good morning, my boss"); } Nếu khối lệnh bao gồm duy nhất một dòng lệnh, ta có thể bỏ cặp dấu {} : if ($name=“ten") echo ("Good morning, my boss");  Nhưng nếu nhiều hơn một dòng lệnh, ta phải đưa chúng vào cặp dấu ngoặc {}: if ($name==“ten") { echo ("Good morning, my boss"); echo ("Have a romantic day!"); }  Điều kiện có thể là đúng, có thể là sai, có thể là tổng hợp của nhiều điều kiện. ví dụ if ("false" ) echo ("Khong co gi ca"); if (($name==“ten") && ($pass=="test")) echo ($name. "đã nhập đúng password"); Đoạn lệnh trên tương đương với: if ($name==“ten") { if ($pass=="test") echo ($name. "đã nhập đúng password"); }  Câu lệnh rẽ nhánh đầy đủ: Nếu điều kiện kiểm tra trả về false (sai), thực thi một khối mã lệnh khác bằng từ khoá else Ví dụ: if (($name=="sinh") && ($pass=="test")) { echo ("Good day,”.$name); } else { echo {"Sai mat khau!") } Chú ý đến một ngoại lệ sau: Trước từ khoá else không bao giờ có dấu chấm phẩy (;) Lệnh rẽ nhiều nhánh:  Với câu lệnh if, PHP cho phép chúng ta rẽ nhiều nhánh thông qua từ khoá elseif: if (dieu_kien1) { doan_lenh_1; } elseif (dieu_kien_2) { doan_lenh_2 } elseif (dieu_kien_3) } // bao nhiêu từ khoá elseif cũng được else { doan_lenh_n }  Để khắc phục thao tác lặp đi lặp lại việc kiểm tra giá trị của biến $thu,. PHP cho phép ta sử dụng câu lệnh switch-case switch ($bien){ case gia_tri 1: doan_lenh_1; break; case gia_tri 2: doan_lenh_2; break; case gia_tri n: doan_lenh_n; break; default: doan_lenh_khac; } Lệnh điều khiển vòng lặp Lệnh điều khiển vòng lặp PHP cung cấp hai kiểu vòng lặp: vòng lặp while (lặp kiểm tra điều kiện, cho đến khi điều kiện được thoả mãn) và vòng lặp for (xác định số lần lặp lại) Vòng lặp while Vòng lặp while là một dạng vòng lặp đơn giản nhất, cấu trúc của nó gần giống như lệnh if: while (điều kiện) { //Khoi cau lenh can lap } Ví dụ 1: Tính tổng từ 1 đến 5: <?php $i=0; $tong=0; while ($i<=5) { $tong=$tong+$i; $i+=1; } ?> Vòng lặp này giống như vòng lặp while, nhưng thay vì kiểm tra điều kiện vào lúc đầu của đoạn lệnh cần lặp, thì nó lại kiểm tra giá trị điều kiện vào cuối vòng lặp. Điều này có nghĩa là nó luôn luôn thực hiện đoạn lệnh cần lặp ít nhất một lần. Cấu trúc của nó như sau: do { Đoạn (khối) câu lệnh cần lặp } while (điều kiện); Vòng lặp do...while <?php $i=1; do { ?> <?php $i+=1; }while ($i<=3); ?> Ví dụ: Vòng lặp for Vòng lặp for, với ý nghĩa đầu tiên là lặp với số lần định trước, có cấu trúc như sau: for ( $biến = giá_trị_đầu; $biến < (hay <=) giá_trị_kết_thúc; tăng_biến_đếm) { // Khối câu lệnh } Một biến dạng khác của vòng lặp for, gần giống như lệnh rẽ nhánh if và while: for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3): // Khối câu lệnh endfor; Các phép toán số học Các phép toán quan hệ Các phép toán logic Ghép hai biến kiểu string $first =“HO”; $second=“TEN”; $fulname=$first.””.$second; echo ($fulname); echo ($first.”HO”); echo (“${first}TEN” Các phép toán trên bit AND & Kết quả OR || Kết quả XOR ^ Kết quả 1&1 1&0 0&1 0&0 1 0 0 0 1||1 1||0 0||1 0||0 1 1 1 0 1^1 1^0 0^1 0^0 0 1 1 0 Phép dịch n vị trí Dịch trái >n Tăng / giảm : $var++ ; ++$var ; $var-- ;--$var Toán tử sizeof()-Xác định dung lượng bộ nhớ mà đối tượng chiếm dụng Biểu thức điều kiện  Biểu thức điều kiện có dạng: Y = a1?a2:a3 Nếu a1!==0 thì Y=a2 Nếu a1==0 thì Y=a3 Ví dụ : Tìm max=$a>$b?a:b Mảng ( Arrray) Là một danh sách các phần tử có cùng kiểu dữ liệu.Mảng có thể là mảng một chiều hay nhiều chiều. Mảng có 2 thành phần là chỉ mục (key) và giá trị. Chỉ mục có thể là số nguyên hoặc là chuỗi . Khởi tạo mảng: $arr[key] = value; $arr[] = value; $arr=array($key1=>value1,$key2=>value2); $arr = array(value1, value2); Mảng một chiều có chỉ mục  Là mảng được quản lý bằng cách sử dụng chỉ số dưới kiểu integer để biểu thị vị trí của giá trị yêu cầu.  Cú pháp: $name[index1];  Ví dụ: một mảng một chiều có thể được tạo ra như sau: $laptop[0]="Dell"; $laptop[1]="IBM"; $laptop[2]="Acer";  Khi thực thi dòng lệnh sau: print $laptop[1]; trình duyệt sẽ hiển thị dòng sau: IBM.  Có thể sử dụng hàm array( ) của PHP để tạo ra một mảng.Ví dụ: $laptop=array("Dell","IBM","Acer");  Lưu ý : Khác với các ngôn ngữ lập trình khác ( nhu Pascal chẳng hạn) , phần tử đầu tiên của mảng có chỉ mục (index) là 0 , không phải 1 . Nhưng khi khai báo mảng , chỉ mục khởi đầu không nhất thiết là 0 .  ví dụ : $laptop = array("Dell","IBM","Acer"); Để lấy phần tử đầu tiên gọi echo $laptop[0]; Nhưng nếu khai báo $arr[5] = 1; thì chỉ mục tiếp theo là 6. $arr[] = 3; // key là 6 Mảng một chiều kết hợp:  Dùng để ánh xạ một mảng thường sử dụng các “từ” hơn là sử dụng các số ( integer), nó giúp ta giảm bớt thời gian và các mã yêu cầu để hiển thị một giá trị cụ thể. Ví dụ: bạn muốn ghi lại tất cả các loại máy tính và các hãng quen thuộc . $computer["laptop"] = "Dell IBM Acer"; $computer["desktop"] = "mekong"; $computer["Ipod"] = "Apple";  Sử dụng hàm array( ) của PHP để tạo ra một mảng loại này, ví dụ như sau: $computer = array( "laptop" => "Dell IBM Acer", "desktop" => "mekong", "Ipod" => "Apple"); Khi truy xuất phần tử mảng : echo $computer["laptop"]; Sẽ xuất ra : Dell IBM Acer Khi truy xuất” echo $computer[“desktop"]; Kết quả ?????? Mảng nhiều chiều có chỉ mục: Giống như mảng một chiều có chỉ mục, ngoại trừ việc nó có thêm một mảng chỉ mục được dùng để chỉ định một phần tử. Cú pháp: $name[in

Các file đính kèm theo tài liệu này:

  • pdftailieu.pdf
Tài liệu liên quan