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í...
417 trang |
Chia sẻ: Khủng Long | Lượt xem: 2625 | Lượt tải: 0
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 Menusystem toolsDisk
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ếtsử 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:
- tailieu.pdf