Linux cho ngu’o`’i dùng Tác gia’: Kostromin V. A. Dich bo’’i: Phan Vı˜nh Thinh ˙ ˙
Muc luc ˙ ˙ 1 2
3
´ˆ i HD ¯ H Linux: lich su’’ và các ba’n phân pho ˙ Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ 2.1 Chuaˆ’n bi cài d¯a˘t . . . . . . . . . . . . . . . . . . . . . . . ˙ ˙ 2.2 Phòng xa và nhu˜’ng lo`’i khuyên . . . . . . . . . . . . . . . 2.3 Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆng . . . . . . . . . ˙ 2.3.1 The´ˆ nào là ca´ˆ u trúc "hình hoc cu’a d¯ı˜a" . . . . . . . ˙ 2.3.2 Phân vùng và ba’ng phân vùng cu’a d¯ı˜a . . . . . . . 2.3.3 Quá trình kho’’i d¯oˆng HD ¯ H công ty Microsoft . . . ˙ ´ ` 2.3.4 Vaˆn d¯eˆ vo´’i các d¯ı˜a lo´’n . . . . . . . . . . . . . . . 2.4 Lu’a chon trình kho’’i d¯oˆng . . . . . . . . . . . . . . . . . . ˙ ˙ ˙ 2.4.1 Trình kho’’i d¯oˆng LILO cu’a HD ¯ H Linux . . . . . . ˙ ’ 2.4.2 Các trình kho’i d¯oˆng khác . . . . . . . . . . . . . . ˙ 2.4.3 Các phu’o’ng án kho’’i d¯oˆng . . . . . . . . . . . . . ˙ 2.5 Chuaˆ’n bi các phân vùng trên d¯ı˜a . . . . . . . . . . . . . . ˙ 2.5.1 Lo`’i khuyên khi tao phân vùng . . . . . . . . . . . ˙ 2.5.2 Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯ı˜a . . . . . . . . . . 2.6 Windows NT và Linux: kho’’i d¯oˆng qua OS Loader cu’a NT ˙ 2.7 Su’’ dung trình kho’’i d¯oˆng LILO . . . . . . . . . . . . . . . ˙ ˙ 2.7.1 Cài d¯a˘t và ca´ˆ u hình LILO . . . . . . . . . . . . . . ˙ 2.7.2 Cài d¯a˘t các heˆ d¯ieˆ`u hành khác sau Linux . . . . . . ˙ ˙ 2.7.3 Chuyeˆ’n thu’ muc /boot lên phân vùng DOS . . . . ˙ 2.8 Kho’’i d¯oˆng Linux tu`’ MS-DOS ba˘`ng loadlin.exe . . . . . . ˙ Bash 3.1 Heˆ vo’ là gì? . . . . . . . . . . . . . . . . . . . . . . ˙ 3.2 Các ký tu’ d¯a˘c bieˆt . . . . . . . . . . . . . . . . . . . ˙ ˙ ˙ 3.3 Thu’c thi các câu leˆnh . . . . . . . . . . . . . . . . . ˙ ˙ 3.3.1 Thao tác ; . . . . . . . . . . . . . . . . . . . 3.3.2 Thao tác & . . . . . . . . . . . . . . . . . . 3.3.3 Thao tác && và || . . . . . . . . . . . . . . . 3.4 ¯Daˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n . . . . . . . . . . . . . . 3.4.1 Dòng du˜’ lieˆu vào-ra . . . . . . . . . . . . . ˙ 3.4.2 Leˆnh echo . . . . . . . . . . . . . . . . . . . ˙ 3.4.3 Leˆnh cat . . . . . . . . . . . . . . . . . . . . ˙ 3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng o´ˆ ng và d¯aˆ`u loc ˙ 3.5.1 Su’’ dung >, < và >> . . . . . . . . . . . . . . ˙
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
2
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
3 3 5 6 6 7 8 10 11 11 13 14 14 14 17 17 20 20 23 23 24
. . . . . . . . . . . .
27 27 28 29 29 29 29 30 30 30 31 31 31
MUC LUC ˙ ˙ 3.5.2 Su’’ dung | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.3 ¯Daˆ`u ˙loc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6 Tham bie´ˆ n và˙các bie´ˆ n so´ˆ . Môi tru’o`’ng cu’a heˆ vo’ . . . . . . . . . . . . . 3.6.1 Các dang tham bie´ˆ n khác nhau . . .˙ . . . . . . . . . . . . . . . ˙ ˘´ c cu’a he vo’ . . . . . . . . . . . . . . . . . . . . . . . . 3.6.2 Da´ˆ u nha ˆ ´ 3.6.3 Bieˆn môi tru’o`’ng˙ PATH . . . . . . . . . . . . . . . . . . . . . . 3.6.4 Bie´ˆ n môi tru’o`’ng IFS . . . . . . . . . . . . . . . . . . . . . . . 3.6.5 Thu’ muc hieˆn tho`’i và thu’ muc cá nhân . . . . . . . . . . . . . . ˙ export ˙ 3.6.6 Câu leˆnh . . . . . . ˙. . . . . . . . . . . . . . . . . . . . 3.7 Khai trieˆ’n bieˆ’˙u thu´’c . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.1 Khai trieˆ’n da´ˆ u ngoa˘c . . . . . . . . . . . . . . . . . . . . . . . ˙ 3.7.2 Thay the´ˆ da´ˆ u ngã (Tilde Expansion) . . . . . . . . . . . . . . . 3.7.3 Phép the´ˆ các tham bie´ˆ n và bie´ˆ n so´ˆ . . . . . . . . . . . . . . . . 3.7.4 Phép the´ˆ các câu leˆnh . . . . . . . . . . . . . . . . . . . . . . . ˙ 3.7.5 Phép the´ˆ so´ˆ hoc (Arithmetic Expansion) . . . . . . . . . . . . . ˙ 3.7.6 Phân chia tu`’ (word splitting) . . . . . . . . . . . . . . . . . . . 3.7.7 Khai trieˆ’n các maˆ˜u tên taˆp tin và thu’ muc (Pathname Expansion) 3.7.8 Xóa các ký tu’ d¯a˘c bieˆt ˙. . . . . . . . ˙. . . . . . . . . . . . . . ˙ . . . . . . . . . . . . . . . . . . . . . . 3.8 Shell - moˆt ngôn ngu˜’˙ laˆp˙ trình ˙ tu’ if và test ˙ (hoa˘c [ ]) . . . . . . . . . . . . . . . . . . . . 3.8.1 Toàn ’ ˙ n cu’a bie’u thu´c . . . . . . . . . . . . . . 3.8.2 Toán tu’’ test và d¯ieˆ`u kie ˆ ˆ ’ ˙ ’ 3.8.3 Toán tu’ case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.4 Toán tu’’ select . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.5 Toán tu’’ for . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.6 Toán tu’’ while và until . . . . . . . . . . . . . . . . . . . . . . . 3.8.7 Các hàm so´ˆ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.8.8 Tham so´ˆ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.9 Script cu’a heˆ vo’ và leˆnh source . . . . . . . . . . . . . . . . . . . . . . 3.10 Câu leˆnh sh ˙ . . . . ˙. . . . . . . . . . . . . . . . . . . . . . . . . . . . ˙
iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 34 34 35 36 38 38 38 38 39 39 40 40 41 41 41 41 42 42 42 43 46 46 47 48 48 48 49 50
Danh sách ba’ng 2.1 2.2 3.1 3.2 3.3 3.4
Ca´ˆ u trúc cu’a sector kho’’i d¯oˆng chính . . . ˙ d a cu’a HDH Nhu caˆ`u su’’ dung không gian ¯ı˜ ¯ ˙ Các câu leˆnh d¯aˆ`u loc . . . . . . . . . . . Thay the´ˆ ˙các tham ˙bie´ˆ n d¯a˘c bieˆt . . . . . ˙ ˘´ c ˙. . . . . . . Ký tu’ xác d¯inh dang da´ˆ u nha ˙ ˙ ˙ Các ký tu’ tao maˆ˜u . . . . . . . . . . . . . ˙ ˙
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 15
. . . .
34 36 37 42
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
’ NG DANH SÁCH BA
1
Lo`’i nói d¯aˆ`u
¯Dây là ba’n di˙ch cuo´ˆ n "Linux cho ngu’o`’i dùng" (sêri sách tu˙’ ho˙c) cu’a Kostromin Victor ´ˆ t ít) kinh nghieˆm su’’ dung Linux cu’a teppi. Ba’n go´ˆ c d¯u’o’c Alexeevich coˆng thêm moˆt vài (ra ˙ ˙ ˙ d oc d a ra các liên ke´ t to´i ba’˙n vie´ˆ t trên tie´ˆ ng Nga. Theo yêu caˆ`u cu’a Kostromin˙ A. V., xin ¯u’ ’ ¯u’ ˆ ’ ˙ go´ˆ c d¯ây: http://rus-linux.net/book1.php?name=book1/oglavl http://linux-ve.chat.ru/
Lo`’i ca’m o’n
Xin ca’m o’n các bác sau d¯ã giúp d¯o˜’: Kostromin V. A. d¯ã vie´ˆ t moˆt cuo´ˆ n sách veˆ` Linux cho ˙ mot khoa’ng không trên ngu’o`’i dùng mo´’i tuyeˆt vo`’i; Tru’o’ng Manh Cu’o`’ng d¯ã dành cho teppi ˆ ˙ ˙ và Nguyeˆ˜n Da˘ng ˙ ˜ ’ ´ http://phoc.minidns.net d¯eˆ d¯a˘t cuoˆn sách này; hai bác Nguyeˆn ¯Dai Quý ¯ Hoàng Tuân d¯ã giúp trong ˙vieˆc su’’ dung LATEX. Bác Nguyeˆ˜n ¯Da˙i Quý d¯ã d¯oc và su’’a ˙cho ˙ ´˘ c teppi ˙ tai
[email protected] ne´˙ u nhu teppi ˙có quên ai d phiên ba’n 0.9. Xin hãy gu’’i thu’ nha ¯ó. ˆ ’ ˙
Ba’n quyeˆ`n Cuo´ˆ n "Bash cho ngu’o`’i dùng" này su’’ dung ba’n quyeˆ`n GPL. Nói moˆt cách nga˘´n gon, ban có ˙ nhung xin hãy thêm hai d ˙ o`ng da˜n sau vào ˙ các˙ ba’n theˆ’ làm ba´ˆ t ký thu´’ gì: in, ta˘ng, bán, d¯o´ˆ t,... ¯u’ ’ ˆ ’ ˙ sao cu’a mình: http://rus-linux.net/book1.php?name=book1/oglavl http://teppi.org/l4u/ Tác gia’ Kostromin V. A. cu˜ng nhu’ ngu’o`’i dich không chiu trách nhieˆm veˆ` haˆu qua’ do vieˆc su’’ ˙ ˙ ˙ ˙ ˙ dung cuo´ˆ n sách này gây ra. ˙
Phiên ba’n và caˆp nhaˆt ˙ ˙ Phiên ba’n 0.9 Caˆp nhaˆt cuo´ˆ i cùng Ngày 9 tháng 2 na˘m 2005 ˙ i d ` ˙nghi su’a d ’i, thông báo lo˜i chính ta’, lo˜i kie´ n thu´c cu’a ba’n dich cung nhu d ` nghi giúp Mo ˜ ¯eˆ ˆ ˆ ˆ ’ ¯oˆ ’ ’ ¯eˆ ˙ ˙ d¯o˜’˙dich xin ˙gu’’i cho Phan Vı˜nh Thinh theo d¯ia chı’
[email protected]. ˙ ˙ ˙
Chu’o’ng 1 ´ˆ i HD ¯ H Linux: lich su’’ và các ba’n phân pho ˙
Chu’o’ng 2 Cài d¯a˘t HD ¯ H Linux trên cùng máy tính ˙ vo´’i Windows Van su’ kho’’i d¯aˆ`u nan – Trung Quo´ˆ c ˙ ˙ Thông thu’o`’ng trên các d¯ı˜a cu’a ba’n phân pho´ˆ i Linux d¯ã có hu’o´’ng daˆ˜n nga˘´n gon cách cài d¯a˘t Linux. Ngoài ra, trên Internet ban có theˆ’ tìm tha´ˆ y ra´ˆ t nhieˆ`u cuo´ˆ n sách nó veˆ` va´ˆ n˙ d¯eˆ` này. Và ta´˙ˆ t ˙ Slackware, Fedora, Mandrake, ...) d `u d có cuo´ n huo´ng ca’ các ba’n phân pho´ˆ i lo´’n (Debian, ¯eˆ ¯ã ˆ ’’ daˆ˜n cài d¯a˘t ra´ˆ t chi tie´ˆ t, cho moi tình huo´ˆ ng su’’ dung. Hãy cho`’ d¯o’i và hy vong trong tu’o’ng lai ˙ ´ n sách này. Chính ˙ không xa˙se˜ có ba’n dich Tie´ˆ ng˙ Vieˆt cu’a nhu˜’ng cuo vì va˙ˆ y trong cuo´ˆ n sách ˆ ˙ o´c cu the’ cu’a viec cài d ˘ t, mà xin ba˙n d c hãy tìm các này, tác gia’ se˜ không˙ d¯u’a ra các bu ¯a ¯o ˆ ˆ ’’ ˙ ˙ ˙ ˙ ˙ truo´c khi cài ’ ˜ cuo´ˆ n hu’o´’ng daˆn tu’o’ng u´’ng. Thay vào d¯ó là nhu˜’ng gì ban caˆ`n bie´ˆ t và chuaˆn bi ’’ ˙ ˙ ’ ` ´ ’ d¯a˘t, d¯oˆng tho`’i, tác gia se˜ d¯i cu theˆ và chi tieˆt vào nhu˜’ng gì d¯a˘c bieˆt khi cài d¯a˘t Linux trên máy ˙ d có mot trong các he d˙ `u hành Windows cung nhu vie ˙ ˙ ˙ tính ˜ ¯ã ˆ ˆ ¯ieˆ ’ ˆ c kho’’i d¯oˆng nhieˆ`u heˆ d¯ieˆ`u hành. ˙ ˙ ˙ ˙ ˙ Va´ˆ n d¯eˆ` o’’ choˆ˜, phaˆ`n lo´’n ngu’o`’i dùng Vieˆt Nam tru’o´’c khi ba´˘ t d¯aˆ`u hoc Linux d¯ã làm quen và ra´ˆ t có theˆ’ d¯ã có kinh nghieˆm su’’ dung các˙ HD H dòng Windows nhu’˙Windows 98, Windows ¯ ˙ thuc˙te´ thì tam tho`i Linux khó có the’ là HDH d `u tiên mà nguo`i 2000 và Windows XP. Và trên ¯aˆ ˆ ’ ˆ ’ ’’ ¯ ˙ ˙ ´ ´ dùng làm quen. Nhu’ theˆ, moˆt cách tu’ nhiên, neˆu ngu’o`’i dùng d¯ã làm vieˆc vo´’i HD ¯ H Windows ˙´ i Linux, ˙ thì ho không muo´ n ma´ t d môi ˙truo`ng làm và quye´ˆ t d¯inh thu’’ nghieˆm vo vieˆc quen ¯i ˆ ˆ ’ ’’ ˙ ˙ ˙ ´ thuoˆc cu’a mình, cùng vo´’i nhu˜’ng gì d¯ã tao ra và d¯ã caˆu hình du’o´’i du’o´’i Windows. Ra´ˆ t˙ may là ˙ nha´ t thie´ t pha’i d ˙ không ¯ánh ma´ˆ t ta´ˆ t ca’ nhu˜’ng thu´’ d¯ó. Bo’’i vì trên moˆt máy tính có theˆ’ cùng ˆ ˆ ˙ "chung so´ˆ ng hòa bình hai HD ¯ H và thaˆ˙m chí nhieˆ`u ho’n nu˜’a (ne´ˆ u có d¯u’ choˆ˜ trên d¯ı˜a!). Chính vì the´ˆ , o’’ phía du’o´’i se˜ nói cách cài d¯a˘t HD H Linux trên máy tính d¯ã cài d¯a˘t moˆt trong các heˆ ˙ ¯ ˙ ˙ ˙ d¯ieˆ`u hành cu’a hãng Microsoft.
2.1
Chuaˆ’n bi cài d¯a˘t ˙ ˙
Có theˆ’ cài d¯a˘t Linux ba˘`ng moˆt trong các cách sau: ˙ ˙ • Tu`’ oˆ’ d¯ı˜a CD-ROM • Tu`’ ba’n sao chép Linux trên oˆ’ d¯ı˜a cu´’ng • Tu`’ máy chu’ taˆp tin cu’a mang noˆi boˆ qua NFS; ˙ ˙ ˙ ˙ • Tu`’ máy tính khác trong mang noˆi boˆ qua SMB; ˙ ˙ ˙
4
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
• Tu`’ máy tính o’’ xa (ví du tu`’ Internet) qua giao thu´’c FTP; ˙ • Tu`’ moˆt máy chu’ WWW qua giao thu´’c HTTP. ˙ Theo ý kie´ˆ n cá nhân cu’a tác gia’ thì thuaˆn tieˆn và có tính thu’c te´ˆ nha´ˆ t là cài d¯a˘t Linux tu`’ ˙ ˙ gio˙` không gây khó˙ kha˘n gì. CD-ROM, ho’n nu˜’a vieˆc mua các d¯ı˜a CD bây ’ ˙ Tru’o´’c khi ba´˘ t d¯aˆ`u cài d¯a˘t, hãy thu thaˆp (hãy vie´ˆ t lên moˆt to`’ gia´ˆ y) ta´ˆ t ca’ nhu˜’ng thông tin ca´ˆ u hình caˆ`n thie´ˆ t cu’a máy˙tính. Ne´ˆ u nhu˙’ máy tính cu’a ban˙ tam tho`’i vaˆ˜n còn làm vieˆc du’o´’i ˙ ˙ ˙ HD ¯ H Windows 95/98/2000/XP, thì ba˙n se˜ tìm tha´ˆ y ra´ˆ t nhieˆ`u thông tin ne´ˆ u nha´ˆ n chuoˆ˙t pha’i ’’ d¯ây ban có theˆ’ tìm tha´ˆ y gaˆ`n he´ˆ t ta´ˆ t ca’ vào bieˆ’u tu’o’ng My Computer, chon leˆnh Properties. O ˙ ˙ ˙ thông tin caˆ`n thie´ˆ t. Ne´ˆ u nhu’ ban không tha´ˆ y thông tin nào d¯ó,˙ thì caˆ`n tìm kie´ˆ m theo các cách khác, keˆ’ ca’ vieˆc mo’’ vo’ máy và˙ d¯oc nhu˜’ng dòng chu˜’ trên thie´ˆ t bi. ˙ ˙ ˙ ¯Deˆ’ giúp ba˙n d¯o˙c, xin d¯u’o˙’c d¯u’a ra d¯ây danh sách nhu˜’ng thông tin caˆ`n thu tha˙ˆ p. Xin d¯u`’ng lu’o`’i bie´ˆ ng và hãy co´ˆ ga˘´ng ghi càng nhieˆ`u du˜’ lieˆu veˆ` moˆt thie´ˆ t bi càng to´ˆ t (ta´ˆ t ca’ nhu˜’ng thông tin có theˆ’ tìm tha´ˆ y), nhu˜’ng du˜’ lieˆu này se˜ caˆ`n˙d¯e´ˆ n khi˙ cài d¯a˘t ˙và ca´ˆ u hình, khi mà vieˆc tìm ˙ ˙ kie´ˆ m chúng se˜ khó kha˘n ho’n. ˙ • BIOS: – nhà sa’n xua´ˆ t; – so´ˆ hieˆu phiên ba’n. ˙ • Controller oˆ’ d¯ı˜a cu´’ng: loai (IDE hay SCSI) và dung lu’o’ng cu’a oˆ’ d¯ı˜a (ne´ˆ u nhu’ ban d¯oc ˙ c truy cap o’ che´ d LBA ˙ hay ˙ dùng d¯ı˜a IDE, thì caˆ`n kieˆ˙’m tra xem BIOS có hoˆ˜ tro’ vie ˆ ˆ ’ ˆ ¯oˆ ˙ ˙ ˙ ˙ không): – hda (Master trên controller so´ˆ 1 hay Primary Master); – hdb (Slave trên controller so´ˆ 1 hay Primary Slave); – hdc (Master trên controller so´ˆ 2 hay Secondary Master); – hdd (Slave trên controller so´ˆ 2 hay Secondary Slave). – nhà sa’n xua´ˆ t và so´ˆ maˆ˜u mã cu’a adapter SCSI (ne´ˆ u có). • Dung lu’o’ng cu’a boˆ nho´’ (tính ba`˘ ng Kilobyte ˙ ˙ • CD-ROM: – Giao dieˆn (IDE, SCSI, hay giao dieˆn khác); ˙ ˙ – d¯o´ˆ i vo´’i các oˆ’ d¯ı˜a CD-ROM không pha’i IDE, cu˜ng nhu’ SCSI - nhà sa’n xua´ˆ t và so´ˆ maˆ˜u mã. • Chuoˆt: ˙ – loai chuoˆt (serial, PS/2, hay bus mouse); ˙ ˙ – giao thu´’c (Microsoft, Logitech, MouseMan, v.v. . . ); – so´ˆ nút; – d¯o´ˆ i vo´’i chuoˆt ca˘´m vào coˆ’ng no´ˆ i tie´ˆ p thì caˆ`n so´ˆ thu´’ tu’ cu’a coˆ’ng d¯ó. ˙ ˙ • Cac màn hình ˙
2.2 Phòng xa và nhu˜’ng lo`’i khuyên
5
– nhà sa’n xua´ˆ t; – so´ˆ maˆ˜u mã (hay chipset su’’ dung) ˙ – dung lu’o’ng boˆ nho´’; ˙ ˙ • Màn hình – nhà sa’n xua´ˆ t – so´ˆ maˆ˜u mã; – các giá tri gio´’i han (min, max) cu’a taˆ`n so´ˆ làm mo´’i theo chieˆ`u doc và theo chieˆ`u ˙ ng giá˙ tri này ban d c chı’ có the’ tìm tha´ y trong tài lieu˙ d kèm vo´i màn ngang (nhu ˜’ ¯o ˆ ˆ ¯i ˆ ’ ˙ ˙ ˙ ’ hình, Windows không hieˆn thi nhu˜’ng giá tri này, và chúng ra´ˆ t˙ quan trong trong ˙ ˙ khi ca´ˆ u hình giao dieˆn d¯oˆ` hoa).˙ ˙ ˙ • Ne´ˆ u nhu’ ban d¯oc muo´ˆ n ke´ˆ t no´ˆ i mang (mà UNIX nói chung là HD ¯ H dành cho ma˙ng), ˙ ˙ ˙ thì hãy ghi lai nhu˜’ng du˜’ lieˆu sau: ˙ ˙ ´ ´ – nhà sa’n xuaˆt và soˆ maˆ˜u mã cac mang; ˙ ˙ – d¯ia chı’ IP cu’a mình; ˙ – tên cu’a máy tính trong mang; ˙ – ma˘t na mang con (subnet mask); ˙ ˙ ˙ – d¯ia chı’ IP cu’a gateway; ˙ – d¯ia chı’ IP cu’a các máy chu’ tên mieˆ`n (DNS server); ˙ – d¯ia chı’ IP cu’a máy chu’ WINS(Windows Internet Name Service); ˙ – tên mieˆ`n cu’a công ty ban d¯oc. ˙ ˙ ´ • Loai và nhà sa’n xuaˆt cac âm thanh và game controller (ne´ˆ u nhu’ có) ˙ ˙
2.2
Phòng xa và nhu˜’ng lo`’i khuyên
Tru’o´’c khi cài d¯a˘t HD ¯ H Linux sau Windows, ra´ˆ t nên thu˙’c hieˆ˙n vài thao tác "phòng xa" ("phòng ˙ cháy ho’n chu˜’a cháy"). Vì ra´ˆ t có theˆ’ ban d¯oc se˜ pha’i phân vùng lai oˆ’ d¯ı˜a, thay d¯oˆ’i ba’n ghi ˙ tap tin kho’i d ng cung˙ nhu các tap tin ca´ u hình. kho’’i d¯oˆng (Boot Record) và làm vieˆc vo˙´’i các ˜ ˆ ˆ ˆ ’ ¯oˆ ’ ˙ tác này không pha’i lúc nào ˙ cung d ˙ lai d lai mo ˙ t ke´ t qua’ theo ý ˙muo´ n, và trong Các thao ˜ ¯em ¯em ˆ ˆ ˆ ˙ ’ i ˙d ng nua. Có bie´ t cách thoát ra tru’o`’ng ho’p xa´ˆ u có theˆ’ máy tính cu’a ban d¯oc se˜ ˙không kho ˜’ ˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ´ ` ` ´ ’ ’ khoi tình huoˆng này và phuc hoˆi du˜’ lieˆu caˆn thieˆt không d¯ó còn là moˆt câu hoi. Nhu’ng ro’i vào ˙ ´ t là vo´i nguo`i dùng la`n d `u tiên ˙ cài d ˘ t Linux. Chính tình huo´ˆ ng nhu’ vaˆy he´ˆ t su´’c˙ deˆ˜ dàng nha ¯a ˆ ˆ ¯aˆ ’ ’’ ˙ ` ` ` ` vì vaˆy, d¯aˆu tiên, caˆn tao moˆt d¯ı˜a meˆm kho’’i d¯oˆng hay moˆt d¯ı˜a meˆm giúp phu˙ c hoˆ`i heˆ tho´ˆ ng ˙ Thu´ hai, ca`n ghi˙ lai nhung ˙du lieu có giá tri (backup). ˙ ˙Và thu´ (ne´ˆ u˙ ban d¯oc còn chu’˙a tao). ˜’ ˜’ ˆ ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ ˙ ba, chuaˆ’n bi các taˆp tin (d¯ı˜a meˆ`m, CD) cài d¯a˘t cho heˆ tho´ˆ ng cu˜. Moˆt lo`’i khuyên quan trong ˙ gì d ˙ xa’y ra không theo ý muo´ ˙n thì không ˙ nên hoang˙ mang. Xin chia se’ mo ˙ t khác: ne´ˆ u có ¯ó ˆ ˆ ˙ kinh nghieˆm buoˆ`n: khi laˆ`n d¯aˆ`u tiên tác gia’ cài Linux trên máy tính d¯ã có Windows NT, và ˙ ke´ˆ t qua’ là máy tính không theˆ’ kho’’i d¯oˆng d¯u’o’c. Không hieˆ’u he´ˆ t va´ˆ n d¯eˆ` tác gia’ nghı˜ là không còn cách gì khác ngoài d¯inh dang lai ˙oˆ’ d¯ı˜a và˙ cài d¯a˘t lai tu`’ d¯aˆ`u. Bây gio`’ thì tác gia’ d¯ã hieˆ’u là ˙ không ˙ ˙quye´ t d nh quá˙vo˙i vàng. Vì vay có the’ nói ra˘`ng Werner có theˆ’ phuc hoˆ`i lai ne´ˆ u nhu ˆ ¯i ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ ˜ ’ Almesberger d¯úng, khi trong hu’o´’ng daˆn su’ dung LILO có d¯u’a ra nhu˜’ng lo`’i khuyên sau cho ˙ vay: ngu’o`’i dùng khi ro’i vào tru’o`’ng ho’p khó kha˘n nhu ’ ˆ ˙ ˙
6
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ • Không hoa’ng ho´ˆ t. Ne´ˆ u nhu’ có gì d¯ó không làm vieˆc, hãy thu’’ moi cách d¯eˆ’ tìm ra nguyên ˙ ’ sau khi d ˙mo´i thuc hien các buo´c nhân, kieˆ’m tra lai nhieˆ`u laˆ`n thao tác cu’a mình. Chı ¯ó ’ ’ ˆ ’’ ˙ ˙ ˙ ˜ su’’a loˆi. • Hãy d¯oc tài lieˆu. ¯Da˘c bieˆt trong các tru’o`’ng ho’p, khi heˆ tho´ˆ ng làm nhu˜’ng gì ban d¯oc ˙ i. ˙ ˙ ˙ ˙ ˙ ˙ không ˙mong d¯o ’ ˙
Xin thêm moˆt lo`’i khuyên phoˆ’ bie´ˆ n sau: * Hãy xem các taˆp tin log, tu´’c là các taˆp tin ghi ˙ ˙ ˙ tho´ ng (ca`n tìm chúng trong thu muc /var/log lai su’ kieˆn cu’a he ). ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ Nhu’ d¯ã nói o’’ trên, quá trình cài d¯a˘t HD ¯ H Linux nói riêng không pha’i là d¯eˆ` tài cu’a cuo´ˆ n ˙ sách. Ngu’o`’i dùng caˆ`n tìm các cuo´ˆ n hu’o´’ng daˆ˜n tu’o’ng u´’ng. Tuy nhiên, tác gia’ cu˜ng muo´ˆ n d¯u’a ra vài lo`’i khuyên d¯eˆ’ giúp ngu’o`’i dùng d¯u’a ra quye´ˆ t d¯inh trong khi cài d¯a˘t. ˙ ˙ Thu´’ nha´ˆ t, d¯u`’ng voˆi vàng và hãy chú ý d¯oc nhu˜’ng thông báo se˜ hieˆ’n thi trên màn hình, ˙ chon câu tra’ lo`i. De’ minh ˙ chu´’ng cho lo`’i khuyên này˙ xin d¯u’o’c keˆ’ lai và hãy suy nghı˜ ky˜ khi ’ ¯ ˆ ˙ ˙ ong án ˙ tru’o`’ng ho’p khi tác gia’ cài Red Hat 7.1, và tu’ d¯oˆng nha´ˆ n lên nút Next, vì cho ra˘`ng phu ’’ ˙ ˙the’ truy cap d oc d´ n máy này qua các giao theo ma˘c˙ d¯inh là d¯u’. Ke´ˆ t qua’ là tác gia’ không ˆ ¯u’ ’ ¯eˆ ˆ thu´’c ma˙ ng ˙(telnet, ftp, NFS, Samba), ma˘c dù d¯ã ca´ˆ u hình˙ giao ˙dieˆn mang cho máy. Nguyên ˙ tuo`ng lu’a d oc cài d ˘ t,˙ và tu˙ o`ng lu’a d nhân là˙trong phu’o’ng án theo ma˘c d¯inh thì ¯a ’’ ’ ¯u’ ’ ’’ ’ ¯óng he´ˆ t các ˙ ˙ ˙ ˙ truy caˆp tu`’ mang. ¯Deˆ’ mo’’ truy caˆp này, thì trong quá trình cài d¯a˘t caˆ`n chı’ rõ các dich vu d¯u’o’c ˙ ng chúng ˙ ˙ ˙ ˙ c ˙tu mo’’. Nhu ta quá voˆi vàng! Thu´’ hai, tác gia’ khuyên không nên d¯oˆ`ng ý˙vo´’i vie ˆ ’ ’ ˙ ˙ gõ˙ ` ´ ’ d¯oˆng kho’i d¯oˆng vào giao dieˆn d¯oˆ hoa. Vì cuoˆi cùng ngu’o`’i dùng không khó kha˘n gì khi ˙ lenh startx ˙ ˙ ´ u hình˙ giao dien d ` hoa (ne´ u có gì d làm viec không d câu , còn vieˆc ca ¯ó ¯úng) ˆ ˆ ˆ ¯oˆ ˆ ˆ ˙ ˙ ˙ ˙ ˙ ´ vo´’i ngu’o`’i dùng mo´’i raˆt khó thành công. Sau khi làm xong các công vieˆc phòng xa, caˆ`n quye´ˆ t d¯inh se˜ toˆ’ chu´’c kho’’i d¯oˆng nhieˆ`u ˙ ˙ ˙ HD ¯ H nhu’ the´ˆ nào, chuaˆ’n bi˙ các oˆ’ d¯ı˜a (phân vùng) d¯eˆ’ cài d¯a˘˙t, tu´’c là caˆ`n chia oˆ’ d¯ı˜a thành so´ˆ phân vùng caˆ`n thie´ˆ t. Nhu’ng tru’o´’c khi chuyeˆ’n sang các bu’o´’c cu theˆ’ d¯eˆ’ chuaˆ’n bi oˆ’ d¯ı˜a, xin ˙ d¯u’o’c nói qua moˆt chút veˆ` ca´ˆ u trúc cu’a d¯ı˜a và quá trình kho’’i d¯oˆng˙ HD ¯ H. Ne´ˆ u ai d¯ó không d¯u’ ˙ ˙ ˙ kiên nhaˆ˜n d¯eˆ’ d¯oc phaˆ`n lý thuye´ˆ t này, thì có theˆ’ bo’ qua chúng và chuyeˆ’n tha’˘ ng d¯e´ˆ n va´ˆ n d¯eˆ` ˙ kho’i d ng. chon chu’o’ng trình ’ ¯oˆ ˙ ˙
2.3 2.3.1
Phân vùng trên d¯˜ıa và quá trình kho’’i d¯oˆng ˙ ´ˆ u trúc "hình hoc cu’a d¯˜ıa" The´ˆ nào là ca ˙
Nhu’ ban d¯oc bie´ˆ t, d¯ı˜a cu´’ng goˆ`m vài d¯ı˜a có phu’ lo´’p tu`’ tính, na`˘ m trên cùng moˆt truc và quay vo´’i vaˆn˙ to´ˆ c˙ lo´’n. ¯Doc/Ghi du˜’ lieˆu d¯u’o’c thu’c hieˆn bo’’i các d¯aˆ`u d¯oc na˘`m giu˜’a ˙các ˙d¯ı˜a này, di ˙ rìa ngoài cu ˙ ’ a d ˙a. Vòng ˙ tròn ˙ d `u d c ve ra ˙trên các d a khi quay quanh chuyeˆ˙’n tu`’ tâm d¯ı˜a ra ¯ı˜ ¯aˆ ¯o ˜ ¯ı˜ ˙ ` ` chúng goi là rãnh (track), còn taˆp ho’p các rãnh na˘m choˆng lên nhau goi là cylinder. Moˆ˜i ˙ tin. Vì the´ d ˘ c rãnh lai ˙chia thành các sector, và˙ có ˙theˆ’ ghi vào moˆ˜i sector 512 byte thông ˆ ¯a ˙ ˙ ’ ’ ´ ´ ´ d¯ieˆm cu’a moˆt oˆ d¯ı˜a thu’o`’ng là taˆp ho’p ba sô: soˆ cylinder/soˆ rãnh trong cylinder/soˆ sector trên ˙ cái d `u tiên cu’a các thuat ngu Tie´ ng Anh tuong u´ng: rãnh hay còn˙ vie´ˆ t ta´˘ t là C/H/S ˙(ba chu ˜’ ˜’ ˆ ¯aˆ ˆ ’’ ’ Cyliner/Head/Sector). Ba so´ˆ này goi là ca´ˆ u trúc "hình hoc cu’a d¯ı˜˙a". ¯D˜ıa vo´’i ca´ˆ u trúc hình hoc ˙ ˙ C/H/S có dung lu’o’ng C*H*S*512˙byte. ˙ ¯D˜ıa cu´’ng là các thie´ˆ t bi˙ kho´ˆ i, tu´’ là d¯o˙c và ghi thông tin theo các kho´ˆ i, và kích thu’o´’c nho’ nha´ˆ t cu’a kho´ˆ i ba`˘ ng moˆt sector (512 byte). ¯Deˆ’ có theˆ’ ghi thông tin lên d¯ı˜a, caˆ`n d¯a˘t d¯aˆ`u d¯ı˜a ˙ controller bie´ t ca`n ghi thông tin này vào sector nào. Sector ˙ d¯u’o’c d¯úng vi trí, tu´’c là chı’ cho ˆ ˆ ˙ d¯ánh d¯i˙a chı’ theo so´ˆ thu´’ tu’ cylinder, so´ˆ thu´’ tu’ d¯aˆ`u d¯oc (hay rãnh) và so´ˆ thu´’ tu’ sector trên rãnh. ˙ ˙ ˙ ˙ ˙
2.3 Phân vùng trên d¯˜ıa và quá trình kho’’i d¯oˆng ˙
2.3.2
7
Phân vùng và ba’ng phân vùng cu’a d¯˜ıa
Trong các heˆ tho´ˆ ng Intel oˆ’ d¯ı˜a thu’o`’ng d¯u’o’c chia thành các phân vùng. Ra´ˆ t có theˆ’ nguyên nhân cu’a vieˆ˙c phân vùng là nguyên nhân li˙ch su’’: các phiên ba’n MS-DOS d¯aˆ`u tiên không theˆ’ su’’ dung d¯u’o˙’c các d¯ı˜a lo´’n, mà dung lu’o’ng˙ d¯ı˜a lai phát trieˆ’n nhanh ho’n kha’ na˘ng cu’a DOS. ˙ ra viec chia o’ d a thành˙ các phân ˙ vùng. De’ làm d oc d `u này, trong sector Khi ˙d¯ó d¯ã nghı ˜ ¯u’ ’ ¯ieˆ ˆ ˆ ¯ı˜ ¯ ˆ ˙ ´ ba’ng chia o’ d a thành so´ˆ 0 cu’a d¯ı˜a (sector so˙´ˆ 0 cu’a rãnh d¯aˆ`u tiên trong cylinder so´ˆ 0) ghi nho ˆ ¯ı˜ ’ ˜ các phân vùng (partition table). Moˆi phân vùng d¯u’o’c dùng nhu’ moˆt d¯ı˜a vaˆt lý riêng re˜. Moˆt ˙ nhau có the’˙ cài d ˘ t˙ các he d `u hành ˙ tru’o`’ng ho’p nói riêng d¯ó là trong các phân vùng khác ¯a ˆ ¯ieˆ ˆ ˙ ˙ ˙ khác nhau. Ba’ng phân vùng chu´’a 4 ba’n ghi 16 byte cho 4 phân vùng chính. Moˆ˜i ba’n ghi có ca´ˆ u trúc nhu’ sau: kênh giao tác struct partition { char active; /* char begin[3]; /* char type; /* char end[3]; /* int start; /* int length; /* };
0x80: phân vùng kích hoat, 0: không kích hoat */ ˙ `u tiên, 24˙bit ˆ CHS sector d¯a loai phân vùng (ví du, 83 — LINUX_NATIVE, 82 — LINUX_SWAP) */ ˙ ˙ ´ ˆi cùng, 24 bit */ CHS sector cuo ´ ’a sector d¯a `u tiên (32-bit, tính tu ˆ cu ˆ `’ 0) */ so ´ ˆ sector có trong phân vùng (32 bit) */ so
Ba’ng phân vùng d¯ı˜a thu’o`’ng d¯u’o’c tao bo’’i chu’o’ng trình fdisk. Trên HD ¯ H Linux ngoài ˙ ˙ ` ´ ´ chu’o’ng trình fdisk "truyeˆn thoˆng" (tuy vaˆy raˆt khác so vo´’i chu’o’ng trình fdisk trong MS-DOS và Windows), còn có hai chu’o’ng trình d¯eˆ’˙ làm vieˆc vo´’i phân vùng d¯ı˜a: cfdisk và sfdisk. ˙ d ’ làm viec vo´i ba’ng phân vùng d a: nó Chu’o’ng trình cfdisk, gio´ˆ ng nhu’ fdisk chı’ dành ¯eˆ ¯ı˜ ˆ ’ ˙ ´ ’ ’ không quan tâm chú ý d¯eˆn thông tin có trên d¯ı˜a. Chı khác bieˆt vo´’i fdisk o’ giao dieˆn thuaˆn ˙ ong trình sfdisk có˙ vài kha ˙’ tieˆn: chı’ daˆ˜n su’’ dung leˆnh và heˆ tho´ˆ ng trình d¯o’n (thu’c d¯o’n). Chu ’’ ˙ ˙ ˙ ˙ ˙ na˘ng cao ho’n, ví du, cho phép thao tác trên các phân vùng d¯ã có cu’a d¯ı˜a. ˙ DOS su’’ dung tru’o`’ng begin và end cu’a ba’ng phân vùng và Interrupt 13 cu’a BIOS (Int 13h) d¯eˆ’ truy caˆp to´’˙i d¯ı˜a, vì the´ˆ không theˆ’ su’’ dung d¯ı˜a có dung lu’o’ng lo´’n ho’n 8,4 Gbyte, ngay ca’ ˙ vo´’i các BIOS mo´’i (veˆ` va´ˆ n d¯eˆ` này se˜ nói d¯e˙´ˆ n o’’ sau), còn phân˙ vùng thì không theˆ’ lo´’n ho’n 2,1 Gbyte (nhu’ng d¯ây là do han che´ˆ cu’a heˆ tho´ˆ ng taˆp tin FAT16). ˙ ˙ ˙ Linux thì chı’ su’’ dung tru’o`’ng start và length cu’a ba’ng phân vùng d¯ı˜a và hoˆ˜ tro’ các phân ˙ ˙ vùng chu´’a d¯e´ˆ n 232 sector, tu´’c là dung lu’o’ng có theˆ’ d¯at 2 Tbyte ˙ ˙ Vì trong ba’ng chia oˆ’ d¯ı˜a chı’ có 4 dòng cho các phân vùng, so´ˆ phân vùng chính trên d¯ı˜a ngay tu`’ d¯aˆ`u dã han che´ˆ : không theˆ’ lo´’n ho’n 4. Khi mà 4 phân vùng tro’’ thành ít, thì ngu’o`’i ta sáng che´ˆ ra phân ˙vùng lôgíc. Moˆt trong so´ˆ các phân vùng chính tro’’ thành mo’’ roˆng (loai phân ˙ so´ muo`i sáu). Và trong phân vùng mo’ rong ˙nguo`i ta˙ tao ra vùng - 5 hay F hay 85 trong heˆ co ’ ˆ ’’ ’ ˆ ’’ ˙ mo’ rong không d oc su’ dung truc tie´ p mà ˙ chı’ dùng d ˙’ ghi các phân vùng lôgíc. Phân vùng ¯u’ ’ ’ ¯eˆ ’ ˆ ’ ˆ ˙ ˙ ˙ ˙ ` các phân vùng lôgíc. Sector d¯aˆu tiên cu’a phân vùng mo’’ roˆng ghi nho´’ ba’ng phân vùng vo´’i bo´ˆ n d¯aˆ`u vào: moˆt dùng cho phân vùng lôgíc, moˆt cho phân˙ vùng mo’’ roˆng khác, còn hai cái còn lai không d¯u˙’o’c su’’ dung. Moˆ˜i phân vùng mo’’ ˙roˆng có moˆt ba’ng chia ˙cu’a mình, trong ba’ng ˙ ng gio´ ng nhu ˙ trong ˙ phân vùng mo’ rong chính, ˙ ˙’ dung có hai dòng d ’ d a ra mot này, cu chı’ su ˜ ¯eˆ ¯u’ ˆ ˆ ’ ’ ˆ ’ ˙ Nhu vay, thu d ˙oc mot chuo˜i các ma˘´t xích tu ˙` phân vùng lôgíc và moˆt phân vùng mo’’ roˆng. ¯u ˆ ˆ ˆ ’ ’’ ’ ˙ ˙ ˙ ˙ ˙ ba’ng phân vùng, ma´˘ t xích d¯aˆ`u tiên mô ta’ ba phân vùng chính, và moˆ˜i ma´˘ t xích tie´ˆ p theo – moˆt phân vùng lôgíc và vi trí cu’a ba’ng tie´ˆ p theo. ˙ ˙ Chu’o’ng trình sfdisk trên Linux cho tha´ˆ y toàn boˆ chuoˆ˜i này: ˙
8
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ kênh giao tác [root]# sfdisk -l -x /dev/hda Disk /dev/hda: 784 cylinders, 255 heads, 63 sectors/track Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0 Device /dev/hda1 /dev/hda2 /dev/hda3 /dev/hda4
Boot *
Start 0+ 190 0 0
End 189 783 — —
#cyls 190594 0 0
#blocks 1526143+ 4771305 0 0
Id 6 5 0 0
System FAT16 Extended Empty Empty
/dev/hda5 — — —
190+ 381 190 190
380 783 189 189
191403 0 0
1534176 3237097+ 0 0
6 5 0 0
FAT16 Extended Empty Empty
/dev/hda6 — — —
381+ 381 381 381
783 380 380 380
4030 0 0
3237066 0 0 0
7 0 0 0
HPFS/NTFS Empty Empty Empty
So´ˆ phân vùng lôgíc theo nguyên ta´˘ c không han che´ˆ , vì moˆ˜i phân vùng lôgíc có theˆ’ chu´’a ba’ng phân vùng và các phân vùng lôgíc cu’a mình.˙ Tuy nhiên trên thu’c the´ˆ vaˆ˜n có nhu˜’ng han ˙ che´ˆ . Ví du, Linux không theˆ’ làm vieˆc vo´’i ho’n 15 phân vùng trên các d˙¯ı˜a SCSI và ho’n 63 phân ˙ vùng trên˙ d¯ı˜a IDE. Phân vùng mo’’ roˆng trên moˆt d¯ı˜a vaˆt lý, hay trong moˆt phân vùng mo’’ roˆng chu´’a nó (có ˙ the’ làm mo ˙ t: không ˙ mot chuong trình ˙ phân chia o’ d a˙nào trong so´ d ’ theˆ goi là "me") chı’ có ˆ ˆ ˆ ˆ ¯ı˜ ˆ ¯ã ’’ ˙ ˙ có (fdisk và˙ tu’o’ng tu’) có theˆ’ tao˙ thêm moˆt phân vùng mo’’ roˆng thu´’ hai. ˙ ˙ ˙ ˙ ˆ’ d¯ı˜a trên Linux nói riêng (oˆ’ d¯ı˜a vaˆt lý) d¯u’o’c truy caˆp qua tên cu’a thie´ˆ t bi: /dev/hda, O ˙ ˙ ˙ ´ˆ 1-4 trong˙ tên thie´ˆ t bi: /dev/hdb, /dev/sda, v.v. . . Các phân vùng chính có thêm so ˙ /dev/hda1, /dev/hda2, /dev/hda3, còn phân vùng lôgíc thì có các tên: /dev/hda5, /dev/hda6, /dev/ . . . (ba˘´t d¯aˆ`u tu`’ so´ˆ 5). Tu`’ nhu˜’ng gì d¯eˆ` caˆp d¯e´ˆ n o’’ trên có theˆ’ suy ra tai sao lai có theˆ’ bo’ qua các ˙ thu´˙ba và thu´ tu không tên nhu’ /dev/hda3 hay /dev/hda4˙ (d¯o’n gia’n là phân vùng chính ’ ’ ’ ´ d¯u’o’c tao ra) và ngay sau /dev/hda2 ban d¯oc thaˆy /dev/hda5 (phân vùng lôgíc trong phân ˙ mo ˙ ’ rong /dev/hda2), và sau d ˙thì vie ˙ cd vùng ¯ó ˆ ¯ánh so´ˆ lai theo thu´’ tu’ thông thu’o`’ng. ’ ˆ ˙ ˙ ˙ ´˘ t d `u tu` chu cái cuo´ i Trong Windows các phân vùng lôgíc nhaˆn d¯u’o’c tên˙ (chu˜’ cái), ba ¯aˆ ’ ˜’ ˆ ˙ t d a˙ cu´ng có hai phân vùng chính (C: và D:) dùng dành cho phân vùng chính. Ví du ne´ˆ u mo ˆ ¯ı˜ ’ ˙ vùng mo ˙ ’ rong tao ra hai phân vùng lôgíc, thì nhung và moˆt phân vùng mo’’ roˆng, trong phân ˜’ ’ ˆ ˙ ˙ ˙ ˙ phân vùng lôgíc này se˜ d¯u’o’c d¯a˘t tên E: và F:. Xin nói thêm, trong Windows NT và 2000/XP ˙ vùng d a. có theˆ’ thay d¯oˆ’i tên cu’a các˙phân ¯ı˜
2.3.3
Quá trình kho’’i d¯oˆng HD ¯ H công ty Microsoft ˙
Dù heˆ d¯ieˆ`u hành có là gì, thì d¯eˆ’ có theˆ’ ba´˘ t d¯aˆ`u d¯ieˆ`u khieˆ’n máy tính, caˆ`n nap HD ¯ H vào boˆ˙ ˙ the´ hãy xem xét qua quá trình kho’i d ng cu’a các HDH khác nhau. Chúng ˙ nho´’. Vì ta chı’ quan ¯o ˆ ˆ ’ ¯ ˙ ’ ´ ´ tâm d¯eˆn vieˆc kho’’i d¯oˆng tu`’ oˆ d¯ı˜a cu´’ng, nên se˜ không xem xét d¯eˆn vieˆc kho’’i d¯oˆng tu`’ d¯ı˜a meˆ`m, ˙ qua ma˙ ng. Hãy ba˘´t d `u tu` MS-DOS và MS Windows˙ cu (xin d˙ ` ng quên ra`˘ ng, CD-ROM và ˜ ¯aˆ ’ ¯u’ ˙ ’ vieˆc phát trieˆn và hoàn thieˆn máy tính cá nhân song song vo´’i su’ phát trieˆ’n cu’a HD ¯ H cu’a ˙ ˙ ˙ ´ ´ ’ ’ ’ Microsoft và nhu˜’ng quyeˆt d¯inh su’ dung trong các HD ¯ H này có anh hu’o’ng ma˙nh d¯eˆn quye´ˆ t ˙ ˙ d¯inh cu’a các nhà phát trieˆ’n thie´ˆ t bi). ˙ ˙
2.3 Phân vùng trên d¯˜ıa và quá trình kho’’i d¯oˆng ˙
9
Nhu’ ban d¯oc bie´ˆ t, khi baˆt máy tính d¯aˆ`u tiên se˜ chay chu’o’ng trình POST (Power On Self ˙ dung luong bo nho´, thu’ ˙nghiem bo nho´, và xác d nh các thành Test). Chu’˙o’ng ˙trình xác d¯inh ¯i ˆ ˆ ˆ ’’ ’ ’ ’ ˙ ˙ ˙ ˙ ˙ ’ phaˆ`n khác (bàn phím, oˆ cu´’ng. . . ), kho’’i d¯oˆng các the’ adaptor. Trên màn hình thu’˙o`’ng xua´ˆ t hieˆn ˙ c thu’ nghiem bo nho´, danh sách các thie´ t bi nha˙ n các thông báo veˆ` dung lu’o’ng boˆ nho´’, veˆ` vie ˆ ˆ ˆ ˆ ˆ ’ ’ ˙ co’ng COM ˙ và v.v. . .˙). ˙ ˙ ˙ ra (oˆ’ d¯ı˜a cu´’ng và meˆ`m, boˆ˙ xu’’ lý, ˆ ˙ c thu’ nghiem POST goi Int 19h. Công viec cu’a Int 19h là tìm thie´ t Sau khi hoàn thành vie ˆ ˆ ˆ ˆ ’ ˙ bi kho’’i d¯oˆng. Vieˆc tìm kie˙´ˆ m thu’c hieˆ˙ n theo thu´’ ˙tu’ xác d¯inh trong Setup BIOS và theo cách ˙˘ m dò sector ˙ ˙ ong u´ng. Ne´˙ u d a có ˙ the’ kho’i d ng, thì trong sector so´ tha so´ˆ˙ 0 cu’a các thie´ˆ˙t bi tu ˆ ˆ ¯ı˜ ˆ ’ ¯oˆ ’’ ’ ˙ ˙ ´ ’ ’ ’ ’ 0 cua d¯ı˜a có ban ghi kho’i d¯oˆng chính – Master Boot Record (MBR). Hai byte cuoˆi cùng cua ˙ MBR – "so´ˆ màu nhieˆm", là da´ˆ u hieˆu cho bie´ˆ t sector có MBR, và theo d¯ó d¯ı˜a có theˆ’ kho’’i d¯oˆng. ˙ ˙ ˙ ´ a ba’ng phân vùng d a d nói o’ trên, và mot chuong trình Ngoài "so´ˆ màu nhieˆm" MBR còn chu ¯ı˜ ¯ã ˆ ’ ’ ’’ ˙ nho’ – trình kho’’i d¯oˆ˙ng chính, kích thu’o´’c chı’ có 446 (0x1BE) byte. ˙ Ba’ng 2.1 cho tha´ˆ y ca´ˆ u trúc cu’a sector kho’’i d¯oˆng chính sau khi cài d¯a˘t Windows. ˙ ˙ Dich chuyeˆ’n ˙ 0x000 0x1BE 0x1FE
Ba’ng 2.1: Ca´ˆ u trúc cu’a sector kho’’i d¯oˆng chính ˙ Noˆi dung ˙ Mã cu’a trình kho’’i d¯oˆng chính ˙ Ba’ng phân vùng oˆ’ d¯ı˜a "So´ˆ màu nhieˆm" (0xAA55) ˙
MS-DOS, Windows95 và NT ghi nho´’ DOS MBR trong khi cài d¯a˘t. Ngoài ra cu˜ng có theˆ’ ˙ tao MBR cu’a MS vo´’i câu leˆnh DOS sau: fdisk /mbr. ˙ Xin tro’ lai vo´i quá trình˙ kho’i d ng. Int 19h cu’a BIOS nap trình kho’i d ng chính vào bo ˆ ’ ’ ’ ¯oˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ’ ’ ` ` nho´’ máy tính và chuyeˆn quyeˆn d¯ieˆu khieˆn cho chu’o’ng trình này. Nhu’ng chu’o’ng trình "bé˙ nho’" này không d¯u’ kha’ na˘ng kho’’i d¯oˆng HD ¯ H; ta´ˆ t ca’ nhu˜’ng gì mà nó có theˆ’ làm – d¯ó là na˙p ˙ vào boˆ nho´’ chu’o’ng trình manh ho’n – trình kho’’i d¯oˆng thu´’ hai. ˙ ˙ ˙ ¯Deˆ’ làm d¯u’o˙’c d¯ieˆ`u này, nó tìm trong ba’ng phân vùng kích hoa˙t và d¯o˙c vào boˆ˙ nho´’ trình kho’’i d¯oˆng thu´’ hai, ba˘´t d¯aˆ`u tu`’ sector lôgíc d¯aˆ`u tiên cu’a phân vùng kích hoat. Hãy chú ý d¯e´ˆ n ˙ có d dài khác cum tu`’˙ "ba´˘ t d¯aˆ`u tu`’". Vì trình kho’’i d¯oˆng thu´’ hai trên các heˆ tho´ˆ ng khác nhau ¯oˆ ˙ ˙ ˙ ˙ nhau. Trong phân vùng d¯u’o’c d¯inh dang du’o´’i heˆ tho´ˆ ng taˆp tin FAT, trình kho’’i d¯oˆng thu´’ hai chie´ˆ m ˙ ˙ phân ˙ vùng d ˙nh dang ˙duo´i he tho´ ng tap tin NTFS, ˙ moˆt sector (512 byte). Trong trình kho’’i ¯i ˆ ’’ ˆ ˆ ˙ ˙ ˙ ˙ ˙ d¯oˆng thu´’ hai chie´ˆ m vài sector. ˙ Trình kho’i d ng thu´ hai nap lo´p chuong trình d `u tiên, ca`n thie´ t cho viec kho’i d ng he ¯aˆ ˆ ˆ ˆ ˆ ’ ¯oˆ ’ ’ ’’ ’ ¯oˆ ˙ DOS chuong trình kho’i d ng d ng nap IO.SYS ˙ ˙ a chı˙’ d¯ieˆ`u hành. Trong˙ tru’o`’ng ho’p MS theo d ¯oˆ ¯i ’’ ’ ¯oˆ ˙ SYSINIT ˙ ˙ cu’a môd IO.SYS. ˙ 700h, sau d¯ó MSDOS.SYS˙ và chuyeˆ’n quyeˆ`n d¯ieˆ`u khieˆ’n cho ¯un Ne´ˆ u vì lý do nào d¯ó không tìm tha´ˆ y trên d¯ı˜a phân vùng kích hoat, thì quá trình kho’’ d¯oˆng ˙ ´ˆ m khi su’ dung, nhu˙ ng ´ˆ t hie se˜ tie´ˆ p tuc vo´’i vieˆc xu’’ lý Int 18h. Tru’o`’ng ho’p này trên thu’c te´ˆ ra ’ ’ ˙ ˙ ˙ he d `u ˙ ˙ kha’ na˘ng này có theˆ’ có ích trong tru’o`’ng ho’p nào d¯ó. Trong khi kho’’i d¯oˆng tu`’ xa, khi ˆ ¯ieˆ ˙ ˙ ng. hành kho’’i d¯oˆng tu`’ máy chu’, thì Int này d¯u’o˙’c POST chuyeˆ’n hu’o´’ng lên ROM cu’a cac ma ˙ ˙ ˙ ˙ ¯Do´ˆ i vo´’i các HD ¯ H khác cu’a Microsoft thì quá trình kho’’i d¯oˆ˙ng dieˆ˜n ra tu’o’ng tu˙’. • Windows95 kho’’i d¯oˆng gio´ˆ ng nhu’ DOS nhu’ng thay the´ˆ IO.SYS và MSDOS.SYS bo’’i ˙ Các tap tin DOS d oc giu lai duo´i các tên tuong u´ng IO.DOS và các taˆp tin cu’a mình. ¯u’ ’ ˜’ ˆ ’’ ’’ ’ ˙ ˙ Windows95 se d ’i tên các tap tin MSDOS.DOS. Khi ban d¯o˙c chon kho’’i d¯oˆ˙ ng DOS, ˜ ¯oˆ ˆ ˙ cu’a ˙ ˙ ˙ ˙ cu’a mình vo´’i phaˆ`n mo’’ roˆng w40 và phuc hoˆ`i tên ban d¯aˆ`u cu’a các taˆp tin heˆ tho´ˆ ng ˙ ˙ ˙ ˙ DOS. Quá trình kho’’i d¯oˆng tie´ˆ p tuc vo´’i vieˆc nap IO.SYS. Nhu’ the´ˆ , sector kho’’i d¯oˆng cu’a ˙ ˙ ˙ ˙ DOS và Windows95 là˙ nhu’ nhau.
10
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
• Windows NT4 su’’ dung MBR DOS, nhu’ng thay the´ˆ ba’n ghi kho’’i d¯oˆng cu’a phân vùng kích hoat ba˘`ng cách˙thay the´ˆ NTLDR vào choˆ˜ IO.SYS. ¯Dây là moˆt ˙chu’o’ng trình mang ˙ ’ làm d oc nhie`u thu´. Ví du, có the’ tìm tap tin boot.ini˙ và ne´ u nhu tham˙ so´ và có the ¯u’ ’ ˆ ˆ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ ’ timeout lo´’n ho’n 0, thì d¯u’a ra trình d¯o’n (thu’c d¯o’n) kho’i d¯oˆng. ˙ ˙ Moˆ˜i dòng cu’a phaˆ`n [operating systems] trong taˆp tin boot.ini xác d¯inh moˆt ˙ ˙ phu’o’ng án (moˆt HD H) kho’’i d¯oˆng và d¯u’o’c vie´ˆ t theo maˆ˜u sau: ˙ ¯ ˙ ˆng_thu ˙ ´ _hai="tên_goi_cu ’˙_trình_kho ’’i_d ’a_phu’o’ng_án" d¯ia_chı ’ ¯o ˙ ’ ’ ˙ ˙ ’ ¯D˙ia chı cua trình kho’’i d¯oˆ˙ng thu´’ hai có theˆ là moˆ˙t phân vùng cu˙ theˆ’ nào d¯ó cu’a d¯ı˜a cu˜ng nhu’ taˆp tin kho’’i d¯oˆng. Du’o´’i d¯ây là moˆt ví du taˆp tin boot.ini: ˙ ˙ ˙ ˙ ˙ [operating systems] multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIE multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIE C:\="Microsoft Windows" C:\BOOTSECT.LNX="Linux" Ne´ˆ u ngu’o`’i dùng chon NT, thì se˜ kho’’i d¯oˆng theo d¯ia chı’ phân vùng d¯u’o’c chı’ trên dòng d¯aˆ`u tiên. Trên dòng tu’o’ng ˙u´’ng vo´’i phu’o’ng án ˙Microsoft˙Windows, chı’ d¯u’a ˙ra "C:\", vì tên cu’a taˆp tin kho’’i d¯oˆng d¯u’o’c la´ˆ y theo ma˘c d¯inh: bootsect.dos. Taˆp tin d¯u’o’c nap vào boˆ nho´’ và quá ˙ kho’i d ng ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ trình ’ ¯oˆ d¯u’o’c tie´ˆ p tuc gio´ˆ ng nhu’ khi ba’n ghi kho’’i d¯oˆng d¯u’o’c nap bo’’i mã chu’o’ng trình ˙ ˙ ˙ ˙ ˙ tu`’ MBR. ˙ ¯Do´ˆ i vo´’i vieˆ˙c kho’’i d¯oˆ˙ng các heˆ˙ tho´ˆ ng khác, có theˆ’ su’’ du˙ng cách d¯ó. Chı’ caˆ`n thêm vào boot.ini các dòng chu´’a liên ke´ˆ t d¯e´ˆ n taˆp tin kho’’i d¯oˆng khác. Khi chon các dòng này se˜ kho’’i ˙ ˙ ˙ d¯oˆng HD ¯ H tu’o’ng u´’ng. Trong ví du˙ trên Linux cu˜ng d¯u’o˙’c kho’’i d¯oˆ˙ng theo các này. Trong taˆ˙p ˙ tin C:\BOOTSECT.LNX caˆ`n ghi noˆi dung cu’a ba’n ghi kho’’i d¯oˆng, tao bo’’i Linux (nói d¯úng ˙ ’n cu’a Linux). ˙ ˙ ho’n – LILO, trình kho’’i d¯oˆng tiêu chua ˆ ˙
2.3.4
´ˆ n d¯eˆ` vo´’i các d¯˜ıa lo´’n Va
Trên MS-DOS và các phiên ba’n d¯aˆ`u tiên cu’a Windows truy caˆp to´’i d¯ı˜a (trong d¯ó có ca’ bu’o´’c ˙ cu’a BIOS. Khi này su’ dung kho’’i d¯oˆng d¯aˆ`u tiên cu’a HD H) d¯u’o’c toˆ’ chu´’c qua Int 13 (Int 13h) ’ ¯ ˙ su’ d¯ánh˙ d¯ia chı’ sector trên d¯ı˜a trên˙ co’ so’’ C/H/S (xem trên). Chính xác ho’n: ˙ ˙ • AH — chon thao tác; ˙ • CH — 8 bit nho’ ho’n cu’a so´ˆ cylinder; • CL — 7-6 bit tu’o’ng u´’ng bit lo´’n cu’a so´ˆ cylinder, 5-0 tu’o’ng u´’ng so´ˆ sector; • DH — so´ˆ cu’a d¯aˆ`u d¯oc; ˙ ´ ’ • DL — soˆ cua d¯ı˜a(80h hay 81h). (Caˆ`n lu’u ý ra˘`ng vieˆc d¯ánh so´ˆ cylinder vaˆt lý và rãnh thu’o`’ng ba´˘ t d¯aˆ`u tu`’ 0, còn sector trên ˙` 1). Tuy nhiên trên ˙thuc te´ so´ d `u d c không quá 16, còn so´ sector rãnh d¯ánh so´ˆ ba´˘ t d¯aˆ`u tu ˆ ’ ’ ˆ ˆ ¯aˆ ¯o ˙ d ’ chı’ ra cylinder, ˙ ˜ trên rãnh – không quá 63, và dù có dùng 10 bit BIOS va n không theˆ’ làm ¯eˆ ˆ vieˆc vo´’i d¯ı˜a dung lu’o’ng lo´’n ho’n 1024*63*16*512 = 528 Mbyte. ˙ De’ vuot qua han ˙che´ này, nguo`i ta áp dung nhie`u cách "láu cá" khác nhau. Ví du, Extended ˆ ˆ ’’ ¯ ˆ ’˙’ ˙ khi còn goi là "Large") su’ dung ba bit˙ chua dùng CHS (ECHS) hay˙"Large disk support" (d¯ôi ’ ’ ˙ ˙
2.4 Lu’a chon trình kho’’i d¯oˆng ˙ ˙ ˙
11
d¯e´ˆ n cu’a so´ˆ thu´’ tu’ d¯aˆ`u d¯oc d¯eˆ’ ta˘ng so´ˆ cylinder. Cách này cho pehsp su’’ dung ca´ˆ u trúc "hình ˙ ´ n d ’i Extended hoc gia’ mao cu’a˙ d¯ı˜a" vo´’˙i 1024 cylinder, 128 d¯aˆ`u d¯oc và 63 sector/rãnh. Bie ˆ ¯oˆ ˙ ˙ ˙ ’ CHS thành d¯ia chı’ CHS thu’c (có theˆ chu´’a d¯e´ˆ n 8192 cylinder) d¯u’o’c BIOS thu’c hieˆn. Cách này ˙ dung luong d´ n 8192*16*63*512 =˙ 4 227 858˙ 432˙byte hay 4,2 cho phép làm˙ vieˆc vo´’i d¯ı˜a có ’ ’ ¯eˆ ˙ ˙ Gbyte. Nhu’ng các nhà phát trieˆ’n càng ngày càng ta˘ng maˆt d¯oˆ ghi cu’a d¯ı˜a, so´ˆ d¯ı˜a và so´ˆ rãnh, và ˙ lu˙ong d a. Ví du, so´ sector trên rãnh còn phát minh ra các phu’o’ng pháp khác d¯eˆ’ ta˘ng dung ˆ ’ ’ ¯ı˜ ˙ các rãnh na˘`m ga`n không còn co´ˆ d¯inh mà tro’’ thành khác nhau trên các rãnh ˙khác nhau (trên ˆ ˙ ´ ´ ´ ’ ’ rìa ngoài cua d¯ı˜a, dài ho’n, soˆ sector d¯u’o’c ta˘ng lên). Keˆt qua là boˆ ba soˆ C/H/S không còn pha’n ánh d¯úng ca´ˆ u trúc "hình hoc cu’a d¯ı˜˙a", và các phiên ba’n BIOS˙ cu˜ không theˆ’ hoˆ˜ tro’ truy ˙ caˆp to´’i toàn boˆ không gian d¯ı˜a. ˙ ˙ ˙ Khi d¯ó ngu’o`’i ta nghı˜ ra phu’o’ng pháp khác d¯eˆ’ làm vieˆc vo´’i các d¯ı˜a lên qua Int 13h - d¯ánh ˙ d¯ia chı’ các kho´ˆ i theo d¯u’o`’ng tha˘’ng ("Linear Block Addressing" hay LBA). Không d¯i sâu vào ˙ ´ ’ ` ´ ´ chi tieˆt, có theˆ nói ra˘ng taˆt ca’ sector trên d¯ı˜a d¯u’o’c d¯ánh soˆ moˆt cách tuaˆ`n tu’, ba´˘ t d¯aˆ`u tu`’ sector d¯aˆ`u tiên trên rãnh so´ˆ 0 cu’a cylinder so´ˆ 0. Thay˙ vào choˆ˜ d¯ia˙chı’ CHS moˆ˜˙i sector nhaˆn d¯u’o’c ˙ lôgíc ˙ moˆt d¯ia chı’ lôgíc – so´ˆ thu´’ tu’ cu’a sector trong toˆ’ng so´ˆ ta´ˆ t ca’˙ sector. Vieˆc d¯ánh so´ˆ sector ˙ ˙ ˙ ˙ ba´˘ t d¯aˆ`u tu`’ 0, trong d¯ó sector so´ˆ 0 chu´’a ba’n ghi kho’’i d¯oˆng chính (MBR). Trong Setup BIOS ˙ ’ CHS có dang "Ho˜ tro LBA". Nhu hoˆ˜ tro’ bie´ˆ n d¯oˆ’i so´ˆ thu´’ tu’ theo d¯u’o`’ng tha˘’ng thành d¯ia chı ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ vaˆy, trong các phiên ba’n BIOS mo´’i thu’o`’ng có lu’a chon vo´’i ba phu’o’ng án: "Large", "LBA", ˙ ˙thuc hien bie´ n d ’i d a chı’). và˙ "Normal" (phu’o’ng án cuo´ˆ i cùng có nghı˜a là không ˆ ¯oˆ ¯i ’ ˆ ˙ ˙ ˙ Tuy nhiên trong che´ˆ d¯oˆ LBA vieˆc su’’ dung d¯ı˜a vaˆt lý vaˆ˜n d¯u’o’c thu’c hieˆn qua Int 13h, mà ˙ ˙ ˙ ˙ ˙ ˙ ˙ Int 13h vaˆ˜n su’’ dung boˆ 3D (C,H,S). Vì nguyên nhân này xua´ˆ t hieˆn han che´ˆ lên dung lu’o’ng ˙`u tiên ˙ không the’ d ˙d a cu’a d¯ı˜a: BIOS, và˙ theo˙d¯ó, MS-DOS và các phiên ba’n Windows d¯a ˆ ˆ ¯ánh ¯i ˙ chı’ các d¯ı˜a có dung lu’o’ng lo´’n ho’n 8,4 Gbyte. ˙ Caˆ`n chú ý ra`˘ ng han che´ˆ nói trên chı’ áp dung vo´’i các d¯ı˜a có giao dieˆn IDE. Trong các ˙ so´ cu’a sector d oc chuye ˙ ’n vào các lenh SCSI, và˙ sau d tu d a tìm controller cu’a d¯ı˜a SCSI, ¯u’ ’ ¯ó ’ ¯ı˜ ˆ ˆ ˆ ˙ ˙ ˙ ` ´ ´ ´ ´ ra vi trí caˆn thieˆt, vì theˆ han cheˆ lên dung lu’o’ng d¯ı˜a không xuaˆt hieˆn. ˙ ˙ ˙ ˙ Moˆt laˆ`n nu˜’a muo´ˆ n nha˘´c lai ra˘`ng, ta´ˆ t ca’ nhu˜’ng han che´ˆ nói trên chı’ có ý nghı˜a trong giai ˙ ’ i d ng HDH. Bo’i vì ˙Linux và các phiên ba’n˙ Windows mo´i nha´ t khi làm viec vo´i d a d¯oan kho ˆ ’ ¯ı˜ ’ ¯oˆ ’ ’ ˆ ¯ ˙ ˙ ’ ’ ’ ’ d¯ã không còn su’ dung Int 13 cua BIOS, mà su’ dung driver riêng cua mình. Nhu’ng ˙tru’o´’c khi ˙ cu’a mình, he tho´ ng pha’i d o˙c nap. Vì the´ trong giai d n kho’i d ng d `u có theˆ’ su’’ dung driver ¯u’ ’ ¯oa ¯aˆ ˆ ˆ ˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ˙ ˙ ´ ´ ` ` ´ ` ´ tiên baˆt ky` heˆ thoˆng nào cu˜ng caˆn su’’ dung BIOS. ¯Dieˆu này han cheˆ vieˆc d¯a˘t nhieˆu heˆ thoˆng ˙ không the’ kho’i d ˙ng tu` d ˙ ma˘c˙ dù sau khi ˙ kho’i ra ngoài vùng˙ 8 Gbyte d¯ı˜a d¯aˆ`u tiên: chúng ˆ ’ ¯oˆ ’ ¯ó, ’ ˙ `u. De’ có the ˙ ’ hie’u cách thoát d¯oˆng thì có theˆ’ làm vieˆc vo´’i các d¯ı˜a có dung lu’o’ng lo´’n ho’n nhie ˆ ¯ ˆ ˆ ˆ ˙ ’ i nhung han che´ này, ˙ chúng ta ca`n mot chút˙ kie´ n thu´c ve` quá trình kho’i d ng cu’a HDH kho ˜’ ˆ ˆ ˆ ˆ ’ ˆ ’ ¯oˆ ¯ ˙ ˙ ˙ Linux.
2.4 2.4.1
Lu’a chon trình kho’’i d¯oˆng ˙ ˙ ˙ Trình kho’’i d¯oˆng LILO cu’a HD ¯ H Linux ˙
Trình kho’’i d¯oˆng LILO d¯u’o’c vie´ˆ t bo’’i Werner Almesberber. LILO có theˆ’ kho’’i d¯oˆng nhân ˙ `m, d a cu´ng,˙ và cung có the’ kho’i d ng các he d `u hành khác: PC/MS-DOS, ˙ Linux tu`’ d¯ı˜a me ˜ ¯ı˜ ’ ˆ ˆ ˆ ¯ieˆ ’ ¯oˆ ˙ ˙ DR DOS, OS/2, Windows 95/98, Windows NT/2000/XP, 386BSD, SCO UNIX, Unixware ’ v.v. . . LILO cho phép chon d¯e´ˆ n 16 heˆ d¯ieˆ`u hành khác nhau d¯eˆ kho’’i d¯oˆng. ˙ ˙ ˙ LILO không pha’i là chu’o’ng trình d¯o’n le’ mà là moˆt boˆ goˆ`m nhieˆ`u chu’o’ng trình: trình kho’’i ˙ kho’i d ng, và các tap tin phuc vu: d¯oˆng, các chu’o’ng trình su’’ dung d¯eˆ’ cài d¯a˘t và ca´ˆ u hình˙ trình ˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ˙ ˙ ˙
12
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ • chu’o’ng trình /sbin/lilo, chay du’o´’i Linux, phuc vu d¯eˆ’ ghi ta´ˆ t ca’ thông tin caˆ`n thie´ˆ t ˙ cho˜ tuong u´ng.˙ Ca`˙n chay chuong trình này sau mo˜i trong giai d¯oan kho’’i d¯oˆng vào các ˆ ’’ ’ ˆ ˆ ’’ ˙ ˙ ˙ ’ laˆ`n có thay d¯oˆi trong nhân hay trong taˆp tin ca´ˆ u hình LILO; ˙ • các taˆp tin phuc vu, caˆ`n cho LILO trong tho`’i gian kho’’i d¯oˆng. Nhu˜’ng taˆp tin này thu’o`’ng ˙ ba’n thân trình na`˘ m ˙trong thu˙’ mu˙ c /boot. Quan trong nha´ˆ t trong so´ˆ ˙chúng – d¯ó là ˙ duo´i) và tap tin˙ map (/boot/map); trong tap tin này có chı’ ra kho’’i d¯oˆng (xem phía ˆ ˆ ’’ ˙ ˙ ˙ ´ vi trí cu’a nhân. Moˆt taˆp tin quan trong khác – taˆp tin caˆu hình LILO; thu’o`’ng có tên ˙ ˙ ˙ ˙ ˙ /etc/lilo.conf;
• trình kho’’i d¯oˆng – d¯ây là phaˆ`n LILO d¯u’o’c nap vào boˆ nho´’ d¯aˆ`u tiên qua Int cu’a BIOS; ˙ ˙kho’i d ˙ng cu’a he d `u hành khác. Trình ˙ ng nap nhân Linux hay sector trình kho’’i d¯o ˆ ˆ ¯ieˆ ’ ¯oˆ ˙ ˙ ˙ ˙ kho’i d ng và phuc vu ` ` ` ´ kho’’i d¯oˆng goˆm có hai phaˆn. Phaˆn thu´’ nhaˆt d¯u’o’c ghi vào sector ’ ¯oˆ ˙ `u. Ca’ hai pha`n thuo`ng ˙ ˙ ˙ d¯eˆ’ nap˙phaˆ`n thu´’ hai, có kích thu’o´’c lo´’n ho’n ra´ˆ t nhie ˆ ˆ ’ ’ d¯u’o’c ghi trên ˙ ˙ d¯ı˜a trong taˆp tin /boot/boot.b. ˙ Caˆ`n nho´’ ra`˘ ng, d¯inh dang cu’a sector kho’’i d¯oˆng tao ra bo’’i LILO khác vo´’i d¯inh dang MBR ˙ vào ˙ MBR, thì các he d `u hành ˙ d˙¯ã cài cu’a cu’a DOS. Vì the´ˆ ne´ˆ˙u ghi˙sector kho’’i d¯oˆng LILO ˆ ¯ieˆ ˙ ˙ Microsoft se˜ ngu`’ng kho’’i d¯oˆng (ne´ˆ u nhu’ không có các bieˆn pháp boˆ’ sung). ˙ Sector kho’’i d¯oˆng cu’a LILO có theˆ’ d¯u’o’c thie´ˆ t ke´ˆ d¯eˆ’˙ su’’ dung nhu’ sector kho’’i d¯oˆng cu’a ˙ ˙ phân vùng; trong ˙d¯ó có choˆ˜ cho ba’ng phân˙vùng. Sector kho’’i d¯oˆng cu’a LILO trong khi cài d¯a˘t có theˆ’ d¯a˘t vào nhu˜’ng choˆ˜ sau: ˙ ˙ ˙ • sector kho’’i d¯oˆng cu’a d¯ı˜a meˆ`m trong d¯inh dang Linux (/dev/fd0, . . . ); ˙ ˙ ˙ ` ’ • MBR cua d¯ı˜a cu´’ng d¯aˆu tiên (/dev/hda, /dev/sda, . . . ); • sector kho’’i d¯oˆng cu’a phân vùng chính vo´’i heˆ tho´ˆ ng taˆp tin Linux trên d¯ı˜a cu´’ng d¯aˆ`u tiên ˙ /dev/hda2, . . . ); ˙ ˙ (/dev/hda1, • sector kho’’i d¯oˆng cu’a phân vùng lôgíc trong phân vùng mo’’ roˆng d¯ı˜a cu´’ng d¯aˆ`u tiên (/dev/hda5,˙. . . ). Su’ thaˆt là phaˆ`n lo´’n chu’o’ng trình dang fdisk˙ không d¯eˆ` ra kha’ na˘ng ˙` phân ˙ vùng mo’ rong và tu` cho´ i ˙viec kích hoat phân vùng này. Vì kho’’i d¯oˆng kho’’i d¯oˆng tu ’ ’ ˆ ’ ˆ ˆ ˙ thành pha ˙ `n LILO có chu´a mo˙t chuong trình d˙˘ c biet (activate ˙ vaˆy trong ) cho phép ¯a ˆ ˆ ˆ ’ ’’ ˙ ˙ ˙ ˙ ´ ´ vu’o’t qua han cheˆ này. Tuy nhiên chu’o’ng trình fdisk cu’a ba’n phân phoˆi Linux hoˆ˜ tro’ ˙ hoat phân vùng mo’ rong. Ca`n su’ dung tùy chon -b hoa˘c bie´ n BOOT. ˙ kha’˙ na˘ng kích ˆ ’ ˆ ’ ˆ ˙ ˙ ˙ ˙ ˙ Sector kho’’i d¯oˆng cu’a LILO không theˆ’ d¯a˘t vào các choˆ˜ sau: ˙ ˙ • sector kho’’i d¯oˆng cu’a d¯ı˜a meˆ`m hay phân vùng chính, vo´’i d¯inh dang heˆ tho´ˆ ng taˆp tin ˙ ˙ ˙ ˙ khác Linux; ˙ • trong phân vùng swap cu’a Linux; • trên d¯ı˜a cu´’ng thu´’ hai. Ngoài ra, caˆ`n nho´’ ra˘`ng, LILO trong tho`’i gian kho’’i d¯oˆng nhu˜’ng taˆp tin sau: ˙ ˙ • /boot/boot.b; • /boot/map (tao ra bo’’i leˆnh /sbin/lilo); ˙ ˙
2.4 Lu’a chon trình kho’’i d¯oˆng ˙ ˙ ˙
13
• ta´ˆ t ca’ phiên ba’n nhân kho’’i d¯oˆng (ne´ˆ u ban d¯oc chon phiên ba’n nhân khi kho’’i d¯oˆng); ˙ ˙ ˙ ˙ ˙ • sector kho’’i d¯oˆng cu’a các heˆ d¯ieˆ`u hành khác mà ban d¯oc muo´ˆ n kho’’i d¯oˆng qua LILO; ˙ ˙ ˙ ˙ ˙ • taˆp tin chu´’a các thông báo d¯u’a ra khi kho’’i d¯oˆng (ne´ˆ u d¯u’o’c xác d¯inh). ˙ ˙ ˙ ˙ Nhu’ vaˆy, sector kho’’i d¯oˆng LILO cu˜ng nhu’ nhu˜’ng taˆp tin d¯ã lieˆt kê (trong so´ˆ d¯ó có các taˆp ˙ ˙ ˙ caˆ`n na˘`m trong pham vi˙ 1024 cylinder d¯aˆ`u tiên cu’a d¯ı˜a cu´’ng, tin ban d¯o˙c se˜ cài d¯a˘t sau này) ˙ ˙ ˙ ˙ bo’’i vì chúng caˆ`n d¯u’o’c truy caˆp qua BIOS. Xem phaˆ`n nói veˆ` han che´ˆ cu’a BIOS o’’ trên. ˙ ˙ ˙ Ba´˘ t d¯aˆ`u tu`’ phiên ba’n 21, LILO d¯u’a ra màn hình trình d¯o’n (thu’c d¯o’n) cho phép chon heˆ ˙ ˙ tho´ˆ ng d¯eˆ’ kho’’i d¯oˆng (tru’o´’c d¯ây caˆ`n nha´ˆ n phím Tab d¯eˆ’ goi trình d¯o’n˙ này). ˙ ˙
2.4.2
Các trình kho’’i d¯oˆng khác ˙
Ngoài LILO d¯eˆ’ kho’’i d¯oˆng Linux có theˆ’ kho’’i d¯oˆng các trình kho’’i d¯oˆng khác. ˙ ˙ ˙ • Ne´ˆ u nhu’ tru’o´’c khi cài d¯a˘t Linux d¯ã có HD ¯ H Windows NT/2000/XP, thì trình kho’’i d¯oˆ˙ng ˙ ’ ban d¯oc có theˆ su’’ dung là OS Loader cu’a NT. So sánh vo´’i LILO thì trình kho’’i d¯oˆng ˙ Loader ˙ OS có ít nha´ˆ˙t hai u’u the´ˆ . Thu´’ nha´ˆ t, ta´ˆ t ca’ ca´ˆ u hình cu˜ không bi ma´ˆ t (chúng˙ ta có theˆ’ chon kho’’i d¯oˆng Windows hay Linux theo lu’a chon), và thu´’ hai,˙ có theˆ’ cài d¯a˘t ˙ không the’ kho’i d ng, ví du,˙o’ d a˙thu´ hai trên controller thu´ hai ˙ Linux lên˙d¯ı˜a mà LILO ˆ ˆ ¯ı˜ ’ ¯oˆ ’ ’ ˙ ˙ (Secondary Slave). • Ne´ˆ u nhu’ tru’o´’c khi cài d¯a˘t Linux ban d¯oc chı’ có HD ¯ H Windows 95 hay Windows 98 và ˙ ˙ thì ˙ OS Loader không có Windows NT/2000 hay XP, không d¯u’o’c cài d¯a˘t. Và ne´ˆ u nhu’ vì ˙ ’ su’ d ˙ng chuong trình ´ moˆt lý do nào d¯ó ban d¯oc không muoˆn cài d¯a˘t LILO, thì có the ˆ ’ ¯u ’’ ˙’ i d ng loadlin.exe ˙ (thu ˙ o`ng d kèm vo´i ba’n˙ phân pho´ i Linux); ˙ kho ¯o ¯i ˆ ˆ ’ ’’ ’ ˙ • Tho`’i gian gaˆ`n d¯ây trong thành phaˆ`n ba’n phân pho´ˆ i Linux thu’o`’ng có chu’o’ng trình kho’’i d¯oˆng GRUB. ˙ • Trong thành phaˆ`n OS/2 cu’a công ty IBM có chu’o’ng trình kho’’i d¯oˆng Boot Manager. ˙ d ’ to’i chu´c kho’i Trong ra´ˆ t nhieˆ`u hu’o´’ng daˆ˜n ngu’o`’i ta khuyên dùng chu’o’ng trình này ¯eˆ ˆ ’ ’ ` d¯oˆng nhieˆu HD ¯ H. ˙ • Trong các nguoˆ`n thông tin khác nhau còn nha´˘ c d¯e´ˆ n chu’o’ng trình System Commander; • Thêm moˆt trình kho’’i d¯oˆng khác có trong thành phaˆ`n gói PartitionMagic cu’a công ty ˙ Power Quest. Chúng ta ˙se˜ nói veˆ` chu’o’ng trình này trong phaˆ`n nho’ tie´ˆ p theo. Ngoài ra tác gia’ còn tha´ˆ y ngu’o`’i ta nói d¯e´ˆ n moˆt loat trình kho’’i d¯oˆng khác (moˆt so´ˆ có theˆ’ ˙ ˙ ˙ ˙ trên trang tìm tha´ˆ y trong thu’ muc /public/ftp/pub/Linux/system/boot/loaders ftp://metalab.unc.edu/.˙ Nhu’ng vì tác gia’ không su’’ dung nhu˜’ng chu’o’ng trình này, nên không theˆ’ nói cu theˆ’ cách su’’ dung chúng. Và ta´ˆ t ca’ nhu˜’ng ˙lo`’i khuyên dùng sau cu’a tác gia’ se˜ du’a ˙ trên vieˆc ˙su’’ dung LILO, ˙NT Loader và loadlin.exe. Ne´ˆ u nhu’ có ý muo´ˆ n cài d¯a˘t chu’o’ng trình ˙ thì ban d c ca`n d c huo´ng da˜n cài d ˘ t và su’ dung cu’a nó. ˙ kho’’i d¯oˆ˙ ng khác, ¯o ˆ ¯o ’ ’ ¯a ˆ ’ ˙ ˙ ˙ ˙ ˙ ˙
14
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
2.4.3
Các phu’o’ng án kho’’i d¯oˆng ˙
Nhu’ vaˆy, theo ý kie´ˆ n cu’a tác gia’ có các phu’o’ng án kho’’i d¯oˆng sau: ˙ ˙ • Ne´ˆ u d¯ã cài d¯a˘t Windows NT hay Windows 2000/XP, thì hãy su’’ dung NT Loader. ˙ ˙ • Ne´ˆ u có Windows 95 hay Windows 98 trên FAT16, và ban d¯oc không muo´ˆ n cài d¯a˘t ˙ chu’o’ng trình kho’’i d¯oˆng nào khác, thì có theˆ’ su’’ dung LILO,˙ hoa˘˙c d¯aˆ`u tiên chay DOS và ˙ ˙ sau d¯ó kho’’i d¯oˆng Linux nho`’ chu’o’ng trình loadlin.exe (hay moˆ˙t chu’o’ng trình˙ tu’o’ng tu’, ˙ ˙ ˙ có vài chu’o’ng trình nhu’ vaˆy, nhu’ng chúng ta se˜ không xét d¯e´ˆ n). ˙ • Ne´ˆ u d¯ã cài d¯a˘t Windows 95 OSR2 hay Windows 98 trên FAT32, và ban d¯oc không ˙ Ra ˙´ t nhie`u muo´ˆ n cài d¯a˘t˙ thêm chu’o’ng trình kho’’i d¯oˆng, thì caˆ`n su’’ dung loadlin.exe. ˆ ˆ ˙˘’ ng d nh ra˘`ng không ca`n su’ d˙ ng LILO, ne´ u nhu ˙ phân vùng kích hoat có HOWTO kha ¯i ¯u ˆ ˆ ’ ’ ˙ nguyên nhân. Tuy nhiên thí nghiem ˙kho’i d¯inh dang FAT32,˙ ma˘c dù tác gia’ không rõ ˆ ’ ˙ ˙ ˙ ˙ ´ ’ ’ d¯oˆng Linux qua NT Loader, cài d¯a˘t trên phân vùng FAT32, cua tác gia d¯ã keˆt thúc ˙ không thành công. Vì the´ˆ , trong tru˙’o`’ng ho’p này tác gia’ d¯ã pha’i su’’ dung chu’o’ng trình ˙ to´ t nhiem vu, và tao cho ˙ tác gia’ mot ´an loadlin.exe. Chu’o’ng trình này d¯ã hoàn thành ˆ ˆ ˆ ˆ ˙ ˙ ˙ d ’ kho ˙ tu’o’ng to´ˆ t, vì the´ˆ tác gia’ khuyên ban d¯oc su’’ dung loadlin.exe ¯eˆ ’’i d¯oˆng Linux. ˙ ˙ ˙ ˙ ˙ Trong nhu˜’ng phaˆ`n tie´ˆ p theo tác gia’ se˜ cho bie´ˆ t cách cài d¯a˘t Linux, su’’ dung ta´ˆ t ca’ ba ˙’ i d ng LILO ˙và trình kho’i phu’o’ng án kho’’i d¯oˆng: qua trình kho’’i d¯oˆng NT Loader, trình kho ’ ¯oˆ ’ ˙ ˙ ˙ ’ ` d¯oˆng loadlin.exe. Tuy nhiên tru’o´’c khi cài d¯a˘t trình kho’’i d¯oˆng caˆn chuaˆn bi các phân vùng ˙ d a, hay ít nha´ t là nghı cách to’ chu´c chúng. ˙ ˙ ˙ trên ˜ ¯ı˜ ˆ ˆ ’
2.5 2.5.1
Chuaˆ’n bi các phân vùng trên d¯˜ıa ˙ Lo`’i khuyên khi tao phân vùng ˙
¯Du’a ra lo`’i khuyên o’’ d¯ây không pha’i là vieˆ˙c deˆ˜ dàng, vì phân vùng d¯ı˜a phu˙c thuoˆ˙c ra´ˆ t nhieˆ`u vào ý thích và nhu caˆ`u cu’a chu’ nhân d¯ı˜a. Nhu’ng cu˜ng xin thu’’ d¯u’a ra vài d¯eˆ` nghi sau. Tác ˙ gia’ se˜ d¯a˘t tên d¯ı˜a và phân vùng theo "tiêu chuaˆ’n" cu’a Linux, tu´’c là /dev/hda, /dev/hdb , ˙ v.v. . . d¯o´ˆ i vo´’i d¯ı˜a và /dev/hda1, /dev/hda2, v.v. . . – d¯o´ˆ i vo´’i các phân vùng. Vieˆc phân chia d¯ı˜a thành các phân vùng là caˆ`n thie´ˆ t, bo’’i vì Windows và Linux su’’ dung ˙ luu tru thông tin trên d a và sau d d c chúng tu` d a khác nhau. Chính vì the´ to´ t ho ˙ các cách ¯ı˜ ¯ó ¯o ˆ ˆ ’n ’ ˜’ ’ ¯ı˜ ˙ he´ˆ t là dành cho moˆ˜i heˆ d¯ieˆ`u hành moˆt (hoa˘c thaˆm chí moˆt vài nhu’ chúng ta se˜ tha´ˆ y o’’ du’o´’i) ˙ ˙ ˙ ˙ ˙ phân vùng riêng. ¯Daˆ`u tiên chúng ta hãy xem xét mo˙ˆ t tru’o`’ng ho˙’p d¯o’n gia’n – dung lu’o˙’ng oˆ’ d¯ı˜a cu’a ba˙n d¯o˙c không vu’o’t quá 8,4 Gbyte (nói chính xác ho’n – so´ˆ cylinder không vu’o’t quá 1024). Trong ˙ d ’ d ’ cho˜ cho he tru’o`’ng ho’˙p này moi thu´’ d¯eˆ`u d¯o’n gia’n: ban d¯oc chı’ vieˆc chia d¯ı˜a làm sao ¯eˆ ¯u ˆ ˆ ˙ ˙ ˙ ˙ ˙ ’ ’ d¯ieˆ`u hành se˜ cài d¯a˘t. Có theˆ su’’ dung du˜’ lieˆu cho bie´ˆ t kích thu’o´’c d¯ı˜a nho’ nha´ˆ t caˆ`n thie´ˆ t d¯eˆ cài˙ ˙´ i ca´ u hình co ˙ba’n trong˙ ba’ng 2.2. d¯a˘t heˆ d¯ieˆ`u hành vo ’ ˆ ’ ˙ ˙ Tuy nhiên xin hãy nho´’ ra˘`ng, không nhu˜’ng pha’i tính kích thu’o´’c các taˆp tin cu’a ba’n thân heˆ d¯ieˆ`u hành, mà còn pha’i tính ca’ kích thu’o´’c cu’a các chu’o’ng trình ban d¯o˙ c du’ tính chay. Và ˙ pha’i dành mot pha`n du tru không nho’ cho các chuong trình se cài˙d ˘ t ˙sau này ˙ (không ˙ the’ còn ˜ ¯a ˆ ˆ ˆ ’ ˜’ ’’ ˙ 700 Mbyte dành cho Linux o’ trong ba’ng nói ˙ trên chı’ dành cho tránh kho’i!). Hãy˙ tính ra˘`ng, ’ các chu’o’ng trình cài d¯a˘t cùng vo´’i Linux theo ma˘c d¯inh, trong so´ˆ d¯ó có, ví du, chu’o’ng trình ˙ Do´ i vo´i Windows cung ˙tuong ˙ ˙ soan tha’o ra´ˆ t manh Lyx. ˜ ’ ’ tu’ nhu’ vaˆy. ¯ ˆ ’ ˙ ˙ ˙ ˙
2.5 Chuaˆ’n bi các phân vùng trên d¯˜ıa ˙
15
Ba’ng 2.2: Nhu caˆ`u su’’ dung không gian d¯ı˜a cu’a HD ¯ H Heˆ d¯ieˆ`u hành Yêu caˆ`u ˙ ˙ Windows 95 100 Mbyte Windows 98 200 Mbyte Windows NT 200 Mbyte Windows 2000 700 Mbyte Linux Red Hat 6.2 (Worksta- 700 Mbyte tion vo´’i KDE) Theo kinh nghieˆm cu’a tác gia’ thì d¯eˆ’ làm vieˆc vo´’i Windows 95/98, Windows NT và Linux ˙ là d ’ (ta´ t nhiên, ne´ u ban d c không cài d ˘ t các phân vùng vo´’i ˙kích thu’o´’c 800-1000 Mbyte ¯u ˆ ¯o ¯a ˆ ˙ ˙ ˙ ´ ` các gói chu’o’ng trình lo´’n, nhu’ OpenOffice.Org), còn d¯oˆi vo´’i Windows 200 thì caˆn phân vùng lo´’n ho’n. ’’ d¯ây không theˆ’ chı’ Bây gio`’ chúng ta se˜ xem xét va´ˆ n d¯eˆ` chia các phân vùng cho Linux. O chia moˆt phân vùng. Thu´’ nha´ˆ t, caˆ`n chia moˆt phân vùng swap riêng bieˆt cho Linux. Khi xác ˙ luong cu’a phân vùng swap Linux˙ ca`n tính d´ n nhung ye´ u to´˙ sau: d¯inh dung ˜’ ¯eˆ ˆ ˆ ˆ ’’ ˙ ˙ • Trong Linux, RAM và không gian swap ho’p lai tao thành boˆ nho´’ a’o chung. Ví du, ne´ˆ u ˙ không ˙ ˙ gian swap, ˙ thì se có 384 Mbyte ˙ bo ban d¯oc có 256 MByte RAM và 128 Mbyte ˜ ˆ ˙ ˙ ˙ ’ nho´’ ao. • ¯Deˆ’ làm vieˆc vo´’i Linux caˆ`n ít nha´ˆ t 16 Mbyte boˆ nho´’ a’o, vì the´ˆ ne´ˆ u ban d¯oc chı’ có 4 ˙ thì ca`n phân vùng swap không nho ˙’ hon 12 Mbyte. ˙ ˙ Mbyte RAM, ˆ ’ • Trên Linux kích thu’o´’c moˆt phân vùng swap không theˆ’ vu’o’t quá 128 Mbyte. Nghı˜a là ˙ nhung Linux không the’ phân vùng swap có theˆ’ có˙ kích thu’o´’c lo´’n bao nhiêu tùy thích ˆ ’ su’’ dung ho’n 128 Mbyte. Ne´ˆ u ban d¯oc muo´ˆ n có boˆ nho´’ a’o lo´’n ho’n, thì caˆ`n tao hai phân ˙ ˙ ˙ vùng˙ swap hoa˘c su’’ dung taˆp tin˙ swap. ˙ ˙ ˙ • Khi tính kích thu’o´’c cu’a không gian swapping, caˆ`n nho´’ ra˘`ng kích thu’o´’c quá lo´’n có theˆ’ là vô ích. Trên máy tính vo´’i 16 Mbyte RAM khi cài d¯a˘t Linux vo´’i ca´ˆ u hình chuaˆ’n và các chu’o’ng trình u´’ng dung chuaˆ’n thì 48 Mbyte không˙gian swapping là d¯u’. Còn ne´ˆ u ˙ nho’ nha´ t, thì không ca`n d´ n không gian swap. Ta´ t nhiên, cài d¯a˘t Linux vo´’i ca´ˆ u hình ˆ ˆ ¯eˆ ˆ ˙ o´c chính xác cu’a không gian swap phu thuoc lo´n vào chuong trình se d oc cài kích thu ˜ ¯u’ ’ ˆ ’ ’’ ’’ ˙ ˙ ˙ d¯a˘t. ˙ Nói chung, chı’ nên suy nghı˜ veˆ` va´ˆ n d¯eˆ` dung lu’o’ng cu’a phân vùng swap khi có moˆt d¯ı˜a ˙ phân chia d ’ to’ng so´ dung luong ˙ nho’ và ít boˆ nho´’ RAM. Trong tru’o`’ng ho’p ngu’o’c lai hãy ¯eˆ ˆ ˆ ’ ’ cu’a ˙ ˙ ˙ ˙ ˙ boˆ nho´’ a’o (goˆ`m RAM và phân vùng swap) không nho’ ho’n 128 Mbyte. Còn ne´ˆ u nhu’ ban d¯oc ˙ ˙ có˙ 128 Mbyte RAM hay nhieˆ`u ho’n, thì phân vùng này có theˆ’ không caˆ`n thie´ˆ t. Ta´ˆ t ca’ các phaˆ`n còn lai cu’a Linux và các chu’o’ng trình hoˆ˜ tro’ theo nguyên ta˘´c có theˆ’ d¯a˘t ˙ ˙ vài phân vùng riêng re là ˙ vào moˆt phân vùng. Tuy nhiên, vieˆc d¯a˘t heˆ tho´ˆ ng taˆp tin Linux lên ˜ ˙ a. Ví du, có nhà chuyên ˙gia ˙khuyên ˙ nên ˙dành cho he tho´ ng tap tin Linux ba phân có ý nghı ˜ ˆ ˆ ˆ ˙ ˙ ˙ ´ ´ ´ vùng (neˆu tính ca’ swap thì thành 4). Phân vùng thu´’ nhaˆt (theo ý kieˆn cá nhân tác gia’, 1 Gbyte là d¯u’) se˜ chu´’a heˆ tho´ˆ ng taˆp tin go´ˆ c (/). Phân vùng thu´’ hai dành cho thu’ muc /home. Còn ˙ nhung lý le phân vùng thu´’ ba˙ d¯u’o’c ga˘´˙n vào thu’ muc /usr. Vieˆc phân chia nhu’ vaˆy du’a trên ˜’ ˜ ˙ ˙ ˙ ˙ ˙ ’ ´ ` ’ ’ sau. Dù HD ¯ H Linux có oˆn d¯i˙nh và d¯áng tin caˆ˙y d¯eˆn d¯âu, thì thınh thoang cu˜ng caˆn cài d¯a˘˙t la˙i. Ví du, ban d¯oc muo´ˆ n caˆp nha ˆ t phiên ba’n mo´’i cu’a ba’n phân pho´ˆ i, hoa˘c vì ít kinh nghieˆm su’’ ˙ ˙ ˙ ˙ ˙ ˙ ˙
16
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
dung nên làm ho’ng taˆp tin heˆ tho´ˆ ng quan trong, hoa˘c d¯o’n gia’n là muo´ˆ n cài d¯a˘t moˆt ba’n phân ˙ ˙ ˙ ˙ ´ i khác. Ne´ u nhu ta ˙ ˙ ˙ pho ˆ ˆ ’ ´ˆ t ca’ d¯u’o’c cài d¯a˘t vào moˆt phân vùng, thì khi cài d¯a˘t lai nhu˜’ng du˜’ lieˆu ˙ ˙ ˙ ˙ ˙ ˙ d¯ã làm ra và ghi nho´’ trong thu’ muc cá nhân se˜ bi ma´ˆ t (ne´ˆ u không có ba’n sao chép). Ngoài ra, ˙ `n, hay cài ba`˘ ng phuong pháp khác. Pha`n se˜ bi ma´ˆ t ca’ nhu˜’ng chu’o’ng trình ˙d¯ã cài tu`’ mã nguo ˆ ˆ ’’ ˙ ng gói chuong trình này d oc cài vào thu muc /usr. Ne´ u dành cho thu muc này mot lo´’n nhu ˜’ ¯u ˆ ˆ ’’ ’’ ’ ’ ˙ ˙ ˙ ˙ phân vùng riêng và khi cài d¯a˘t không d¯inh dang lai chúng, thì nhu˜’ng chu’o’ng trình nói trên ˙ ˙ ˙ ˙ se˜ d¯u’o’c giu˜’ lai và có theˆ’ se˜ làm vieˆc (ra´ˆ t có theˆ’ caˆ`n vài ca´ˆ u hình nho’) sau khi cài d¯a˘t lai heˆ ˙ tap tin cu’a Linux FHS (cu the’ xin xem o’ chu˙ong˙ ??)˙ tho´ˆ ng.˙ Trong˙tiêu chuaˆ’n veˆ` heˆ tho´ˆ ng ˆ ˆ ’ ’’ cu˜ng có lo`’i khuyên veˆ` vieˆc d¯a˘˙t thu’ muc˙ /usr lên moˆt phân vùng˙ riêng. ˙ ˙ ˙ ˙ Theo tác gia’ tha´ˆ y, nhu˜’ng ý kie´ˆ n nói trên d¯ã d¯u’ d¯eˆ’ ban d¯oc tu’ tìm ra phu’o’ng án phân chia oˆ’ d¯ı˜a cu’a mình, trong tru’o`’ng ho’p chı’ có moˆt oˆ’ d¯ı˜a nho’. ˙Bây ˙gio`’˙chúng ta xem xét tru’o`’ng ho’p ˙ ˙ ˙ d¯ı˜a vo´’i so´ˆ cylinder lo´’n ho’n 1024. Tu`’ nhu˜’ng gì d¯ã nói d¯e´ˆ n o’’ phaˆ`n tru’o´’c (han che´ˆ dung lu’o’ng d¯ı˜a cu´’ng), caˆ`n d¯a˘t chu’o’ng trình kho’’i d¯oˆng trong pham vi 1024 cylinder d¯aˆ`u˙ tiên. Nhân tieˆ˙n, NT Loader không˙nha´ˆ t thie´ˆ t pha’i ˙ d¯a˘t vào˙ phân vùng NTFS, cu˜ng nhu’ không nha´ˆ t thie´ˆ t pha’˙i d¯a˘t vào phân vùng chu´’a các taˆp tin ˙ cu’a HDH. Nhu d nói o’ trên, d´ i vo´i Linux có the’ d ˘˙t thu muc go´ c cùng vo´i thu˙ muc khác ¯oˆ ’ ˆ ˆ ¯a ’ ’ ’ ’ ¯ã ’ ¯ ˙ còn các ˙ thu muc khác – o’ cho ˙ con /boot vào các cylinder "tha´ˆ p" (trong vòng 1024 d¯aˆ`u tiên), ’ ’ ˆ˜ ˙ nào tùy thích. Nhu’ vaˆy trong tru’o`’ng ho’p này, nhu˜’ng d¯eˆ` nghi cu’a tác gia’ cho ra ba’ng toˆ’ng ke´ˆ t sau: ˙ ˙ ˙ • phaˆ`n kho’’i d¯oˆng cu’a ta´ˆ t ca’ các heˆ tho´ˆ ng Microsoft d¯a˘t vào phân vùng chính d¯aˆ`u tiên cu’a ˙ ˙ d¯ı˜a, vo´’i d¯inh˙ dang FAT16 (DOS); ˙ ˙ • phân vùng chính tie´ˆ p theo dành cho thu’ muc go´ˆ c (/), kích thu’o´’c khoa’ng 1 Gbyte; ˙ • phân vùng chính thu´’ ba dành cho swap cu’a Linux (lo`’i khuyên veˆ` kích thu’o´’c cu’a phân vùng này xem o’’ trên); • phaˆ`n còn lai cu’a d¯ı˜a d¯a˘t thành phân vùng mo’’ roˆng; ˙ ˙ ˙ • trong phân vùng mo’’ roˆng tao các phân vùng lôgíc cho moˆ˜i HD ¯ H se˜ cài d¯a˘˙t: Windows ˙ ˙ 98, Windows NT/2000/XP, và d¯oˆ`ng tho`’i cho các heˆ tho´ˆ ng taˆp tin /home và /usr cu’a ˙ ˙ HD ¯ H Linux (trong /home se˜ d¯a˘˙t các taˆ˙p tin riêng cu’a ngu’o`’i dùng, còn trong /usr – chu’o’ng trình se˜ cài d¯a˘t). ˙ Ta´ˆ t nhiên, ne´ˆ u nhu’ ban d¯oc chı’ có Windows 95 vo´’i FAT16, thì có theˆ’ d¯eˆ’ Windows trên phân vùng d¯aˆ`u tiên. Ne´ˆ u˙nhu’˙trên máy d¯ã cài d¯a˘t Windows NT hay có FAT32, thì moˆt phân ˙ ˙ nd c vùng FAT16 cu˜ng không thu`’a. Thu´’ nha´ˆ t, keˆ’ ca’ trong tru’o`’ng ho’p heˆ tho´ˆ ng có va´ˆ n d¯eˆ`, ba ¯o ˙ ˙ ˙ ˙ ’ ` ’ có theˆ kho’i d¯oˆng tu`’ d¯ı˜a meˆm DOS (tam tho`’i khi chu’a làm quen vo´’i Linux moˆt cách "tu’o`’ng ˙ c bình thuo`ng. Thu´ hai, he tho´ ng tap tin ˙ FAT16 d oc taˆn") và tha´ˆ y d˙¯u’o’c ra˘`ng d¯ı˜a cu´’ng làm vie ¯u’ ’ ˆ ˆ ˆ ˆ ’’ ’ ˙ ˙ ˙ ˙ ˙ ˙ ’ ˜ ´ hoˆ tro’ trên moi HD H, trong d¯ó có Linux, vì theˆ phân vùng này có theˆ phuc vu cho vieˆc trao ¯ ˙ d¯oˆ’i taˆ˙ p tin giu˙˜’a các heˆ tho´ˆ ng. Nhu’ng không nên d¯eˆ’ phân vùng này lo´’n, ˙vì FAT16 su’˙’ dung ˙ gian d a ra´ t không ˙ hop lý. Chính vì vay hãy dành cho phân vùng này khoa’ng 256 hoa ˙ ˘c không ¯ı˜ ˆ ˆ ’ ˙ ˙ ˙ 512 Mbyte. Nhu˜’ng lo`’i khuyên này d¯u’a ra vo´’i gia’ thie´ˆ t ra˘`ng, ban d¯oc chı’ có moˆt d¯ı˜a cu´’ng. Ne´ˆ u nhu’ ban d¯oc có 2, thì vaˆ˜n su’’ dung d¯u’o’c nhu˜’ng lo`’i khuyên˙này,˙ chı’ có d¯ieˆ`u˙ phân vùng swap to´ˆ t ho˙’n d¯a˘˙t trên d¯ı˜a khác vo´’i d¯ı˜˙a dành ˙cho Linux. Ngu’o`’i ta nói ra`˘ ng nhu’ vaˆy ta˘ng to´ˆ c d¯oˆ làm vieˆc ˙ ˙ ˙ trong ˙Linux (cu˜ng deˆ˜ hieˆ’u vì d¯aˆ`u d¯oc ít pha’i chay ho’n). ˙ ˙
2.6 Windows NT và Linux: kho’’i d¯oˆng qua OS Loader cu’a NT ˙
2.5.2
17
Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯˜ıa
Sau khi hoàn thành ke´ˆ t hoach chia oˆ’ d¯ı˜a, caˆ`n lu’a chon công cu d¯eˆ’ d¯u’a ke´ˆ hoach này thành ˙ moi he d `u ˙ chia d a d oc bie´ ˙t d´ n ˙nhie`u nha´˙t là fdisk; trên hieˆn thu’c. Chu’o’ng trình phân ¯ı˜ ¯u’ ’ ˆ ¯eˆ ˆ ˆ ˆ ¯ieˆ ˙ d `˙u có phiên ba’n riêng cu’a chuong trình ˙ ˙ong˙ trình ` hành này. Và không ca n gì ho n ngoài chu ¯eˆ ˆ ’’ ’ ’’ này, ne´ˆ u nhu’ phân chia oˆ’ d¯ı˜a tra´˘ ng, không chu´’a ba´ˆ t ký du˜’ lieˆu nào. Nhu’ng chúng ta d¯ang xem ˙ o’ d a mà không làm ma´ t thông xét tru’o`’ng ho’p d¯ã có HD H nào d¯ó trên d¯ı˜a và caˆ`n phân chia ˆ ˆ ¯ı˜ ¯ ˙ tin. fdisk không thích ho’p cho nhu˜’ng muc d¯ích nhu’ vaˆy. Trong thành phaˆ`n các˙ ba’n phân pho´ˆ i˙ Red Hat và˙BlackCat (ra´ˆ t có theˆ’ trong các ba’n phân pho´ˆ i khác) có chu’o’ng trình fips, phuc vu cho phân chia oˆ’ d¯ı˜a. Tuy nhiên, theo ý kie´ˆ n cu’a ngu’o`’i dùng thì không nên su’’ dung˙ chu˙’o’ng trình này. Vì the´ˆ lo`’i khuyên cu’a tác ˙ mo´i – ne´ u nhu muo´ n phân chia lai o’ d a mà gia’ vo´’i ban d¯oc, nhu˜’ng ngu’o`’i dùng Linux ˆ ˆ ˆ ¯ı˜ ’ ’ ˙ không làm˙ ma´ˆ˙t thông tin, thì hãy tìm chu’o’ng trình Partition Magic cu’a công ty Power Quest (http://www.powerquest.com) và su’’ dung chu’o’ng trình này. ˙ phân chia lai o’ d a mà không làm ma´ t thông tin (tu´c Thu´’ nha´ˆ t, chu’o’ng trình này cho phép ˆ ˆ ¯ı˜ ’ ˙ là, ta´ˆ t ca’ nhu˜’ng cài d¯a˘t và ca´ˆ u hình tru’o´’c d¯ó se˜ d¯u’o’c ghi lai). Khi này, không chı’ tao d¯u’o’c ˙ ’n các phân vùng d có˙ theo˙ý phân vùng mo´’i tu`’ choˆ˜˙ tro´ˆ ng trên d¯ı˜a, mà còn có the˙ˆ’ di chuye ¯ã ˆ muo´ˆ n. Thu´’ hai, chu’o’ng trình này (thaˆm chí trong phiên ba’n dành cho DOS) cung ca´ˆ p moˆt giao dieˆn d¯oˆ` hoa deˆ˜ su’’ dung có hoˆ˜ tro’ ˙chuoˆt, và moi thao tác cu˜ng nhu’ thay d¯oˆ’i d¯eˆ`u tha´ˆ y rõ˙ ràng. ˙ ˙ ˙ ˙ ˙ ˙ ¯Dieˆ`u này ra´ˆ t quan tro˙ng vo´’i ngu’o`’i dùng mo´’i. Khi tao phân vùng caˆ`n d¯eˆ’ ý không cho ranh gio´’i giu˜’a các phân vùng ca´˘ t laˆ˜n nhau. ˙ ’ cho ra˘`ng, nhung thông tin d d a d ’ d ’ ban d c lap ke´ hoach và thuc hien viec Tác gia ˜’ ¯ã ¯u’ ¯u ¯eˆ ¯o ˆ ˆ ˆ ’ ˆ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ’ ´ ´ phân chia oˆ d¯ı˜a thành các phân vùng. Vì theˆ tieˆp theo chúng ta se˜ xem xét các phu’o’ng án cài d¯a˘t hai HD ¯ H trên moˆ˙t máy tính. ˙
2.6
Windows NT và Linux: kho’’i d¯oˆng qua OS Loader cu’a NT ˙
Trong phaˆ`n này, khi nói veˆ` Windows NT xin ngaˆ`m hieˆ’u ca’ Windows 2000 và NT, vì "quan heˆ" cu’a chúng d¯o´ˆ i vo´’i vieˆc cài d¯a˘t Linux hoàn toàn gio´ˆ ng nhau. Chúng ta gia’ thie´ˆ t là Windows ˙ d d oc cài vào phân˙ vùng ˙/dev/hda2 (ne´ u nhu ban d c nho´, /dev/hda1 se dành cho NT ˜ ¯ã ¯u’ ’ ¯o ˆ ’ ’ ˙ d˙˘ t, nghıa là trình kho’i d ng OS phân vùng˙ FAT16). Ne´ˆ u HD H Windows NT d d o c cài ˜ ¯ã ¯u ¯a ’’ ’ ¯oˆ ¯ ˙ ˙ ’ ’ ´ Loader cu˜ng d¯ã d¯u’o’c cài d¯a˘t. Và nhu’ theˆ có theˆ su’’ dung chu’o’ng trình này d¯eˆ kho’’i d¯oˆng˙ Linux. ˙ tin có giá tri cu’a mình. Các ˙ buo´c cài Tác gia’ hy vong ra˘`˙ng ban ˙d¯oc d¯ã sao lu’u nhu˜’ng thông ’’ ˙ ˙ ˙ d¯a˘t có theˆ’ mô˙ ta’ nhu’ sau: ˙ 1. Ne´ˆ u nhu’ ban d¯oc chu’a cài d¯a˘t Linux bao gio`’, thì tru’o´’c khi ba´˘ t d¯aˆ`u caˆ`n chuaˆ’n bi d¯ı˜a meˆ`m kho’’i ˙d¯oˆng˙ và phuc hoˆ`i˙Windows NT. ¯Deˆ’ tao d¯ı˜a meˆ`m kho’’i d¯oˆng chı’ caˆ`n ˙d¯inh ˙ `m, ro`i sao ˙ chép lên d các tap tin ˙ntldr, ntdetect.com và ˙ boot.ini tu` ˙thu dang lai d¯ı˜a me ¯ó ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ ’ ´ ` ’ ’ muc goˆc cua oˆ d¯ı˜a kho’i d¯oˆng NT. Chu’o’ng trình tao d¯ı˜a phuc hoˆi Windows 2000/XP có ˙ ´ ng (lenh Backup trong ˙ Start/Program/Accessories). ˙ theˆ˙’ chay tu`’ trình d¯o’n heˆ tho ˆ ˆ ˙ ˙ ˙ 2. Dùng chu’o’ng trình Partition Magic d¯eˆ’ la´ˆ y moˆt phaˆ`n d¯ı˜a tro´ˆ ng và tu`’ d¯ó tao ra phân vùng ˙ vo´’i dang ext2(3) (heˆ tho´ˆ ng taˆp tin Linux) và phân vùng swap. Cách tính˙ kích thu’o´’c cu’a ˙ chúng˙ d¯ã nói o’’ trên.˙ 3. Cài d¯a˘t Linux theo chı’ daˆ˜n cu’a ba’n phân pho´ˆ i. Trong khi cài d¯a˘t caˆ`n chú ý d¯e´ˆ n nhu˜’ng ˙ d¯ieˆ’m ˙sau:
18
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ • thu´’ nha´ˆ t, trong quá trình cài d¯a˘t nha´ˆ t d¯inh pha’i tao ra các d¯ı˜a meˆ`m kho’’i d¯oˆng ˙ ˙ ˙ (hay tuong tu the´ , tùy thuo ˙ c Linux. Tu´’c là caˆ`n tra’ lo`’i "Yes, make a BOOT DISK" ˆ ’’ ’ ˆ ˙ vào ba’n phân pho´ˆ i) khi d¯u’o’c ho’i có tao d¯ı˜a meˆ`m kho’’i d¯oˆng hay không. ¯D˜ıa meˆ`˙m ˙ Ngoài ra, ˙ có the’ su’ dung d ˙a me`m này d ’ kho’i d ng này se˜ d¯u’o’c dùng d¯e´ˆ n o’’ sau. ¯ı˜ ˆ ¯eˆ ˆ ’ ’ ¯oˆ ˙ ’i ˙ n nua khác vo´i d a me`m kho ˙ cung là mot phuong án kho’i d ng, và ho Linux. ¯Dây ˜ ˜ ˜ ¯o ¯ı ˆ ˆ ˆ ’’ ’ ’ ’ ’ ’ ˙ ˙ d¯oˆng DOS, sau khi kho’’i d¯oˆng heˆ tho´ˆ ng không còn yêu caˆ`u d¯ı˜a meˆ`m nu˜’a, có theˆ’ bo˙’ nó ra kho’i oˆ’, su’’ dung oˆ’˙d¯eˆ’ d¯o˙c các d¯ı˜a meˆ`m khác. Tuy nhiên cách kho’’i d¯oˆng ˙ nên su’ dung thuo`ng xuyên. Chı’ su’ dung trong ˙ này cu˜ng có d¯ieˆ`u tieˆn,˙ vì the´ˆ không ’ ’’ ’ ˙ ˙ ˙ tru’o`’ng ho’p "ba´ˆ t d¯a´˘ c dı˜". ¯D˜ıa meˆ`m này còn caˆ`n thie´ˆ t cho ca´ˆ u hình d¯eˆ’ kho’’i d¯oˆng ˙ ˙ nhieˆ`u HD ¯ H. • thu´’ hai, khi cài d¯a˘t Linux caˆ`n cài LILO vào sector d¯aˆ`u tiên cu’a phân vùng dành cho thu’ muc go´ˆ c ˙(/) cu’a Linux, chu´’ không pha’i vào sector kho’’i d¯oˆng chính cu’a ˙ d¯ı˜a (MBR).˙ Chúng ta gia’ thie´ˆ t Linux d¯u’o’c cài vào phân vùng /dev/hda3 . Nhu’ ˙ vaˆy LILO se˜ d¯u’o’c cài vào sector d¯aˆ`u tiên cu’a /dev/hda3 ˙ ˙ Theo nguyên ta˘´c, ne´ˆ u nhu’ ban d¯oc cài LILO vào MBR, thì không pha’i moi thu´’ d¯ã ho’ng he´ˆ t. Ke´ˆ t qua’ cuo´ˆ i cùng (kho’’˙i d¯oˆ˙ng qua NT Loader) vaˆ˜n có theˆ’ d¯at d¯u’o’c ˙nhu’ng caˆ`n bo’ ˙ và Windows ˙ ra moˆt chút công su´’c. Va´ˆ n d¯eˆ` o’’˙choˆ˜, d¯inh dang MBR tao bo’’i LILO (DOS) ˙ ˙ ˙ ˙ khác nhau. Vì the´ˆ ne´ˆ u ban d¯oc cài LILO vào MBR, thì caˆ`u phuc hoˆ`i lai MBR cu’a ˙ nói˙ cách phuc ho`i, nhung to´ t hon he´ t là ˙ ban d˙ c cài LILO Windows. Tác gia’ cu˜ng se ˜ ¯o ˆ ˆ ’ ˆ ’ ˙ vùng d cài Linux. ˙ ˙ ngay laˆp tu´’c vào sector d¯aˆ`u tiên cu’a phân ¯ã ˙ 4. Sau khi cài d¯a˘t xong, kho’’i d¯oˆng Linux ba`˘ ng d¯ı˜a meˆ`m (ne´ˆ u nhu’ ban d¯oc cài LILO vào ˙ d ng gì d´ n MBR, thì d là kha’ na ˙ ˘ ng˙ duy nha´ t). phân vùng cu’˙a Linux và không ¯oˆ ¯eˆ ¯ây ˆ ˙ 5. Sao chép sector kho’’i d¯oˆng cu’a Linux vào moˆt taˆp tin; taˆp tin này se˜ caˆ`n d¯eˆ’ trình kho’’i ˙ có the’ kho’i d ng Linux. ˙ ˙ Viec sao ˙ chép thuc hien nhu sau: d `u d¯oˆng Windows NT/2000 ¯aˆ ˆ ˆ ’ ¯oˆ ’ ˆ ’ ˙ ˙ ˙ ˙ ˙ ´ ` ´ ´ tiên ga˘n moˆt d¯ı˜a meˆm tra˘ng (mo´’i mua thì càng toˆt), ˙ kênh giao tác [root]# mount -t vfat /dev/fd0 /mnt/floppy
chuyeˆ’n vào thu’ muc /mnt/floppy ˙
kênh giao tác
[root]# cd /mnt/floppy
và thu’c hieˆn câu leˆnh ˙ ˙ ˙
kênh giao tác [root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1
d¯eˆ’ ghi noˆi dung sector kho’’i d¯oˆng cu’a d¯ı˜a /dev/hda3 vào taˆp tin /mnt/floppy/bootsect.lnx. ˙ ˙ ˙ 1 6. Tie´ˆ p theo caˆ`n kho’’i d¯oˆng lai d¯eˆ’ vào Windows NT, ba`˘ ng câu leˆnh: ˙ ˙ ˙ Ghi chú: ne´ˆ u d¯ı˜a C: (/dev/hda1) có d¯inh dang FAT, thì có theˆ’ tao taˆp tin bootsect.lnx trong thu’ muc go´ˆ c cu’a ˙ ’ i d ng không ca`n˙ d a˙ me`m không, ne´ u phân vùng ˙chính d `u d¯ı˜a C:. Tác gia’ không bie´ˆ t (chu’a thu’’) có˙theˆ’ kho ¯aˆ ˆ ¯ı˜ ˆ ˆ ’ ¯oˆ ˙ có va´ n d ` gì, chı’ ca`n sao chép sector kho’i d ng qua d a tiên có d¯inh dang NTFS. Tuy nhiên o’’ d¯ây cu˜ng không ¯o ¯ı˜ ˆ ¯eˆ ˆ ˆ ’ meˆ`m nhu˙’ d¯ang˙ trình bày. Tam tho`’i nhân Linux còn chu’a hoˆ˜ tro’ to´ˆ t vieˆc ghi lên phân vùng NTFS. ˙ ˙ ˙ ˙ 1
2.6 Windows NT và Linux: kho’’i d¯oˆng qua OS Loader cu’a NT ˙
19
kênh giao tác [root]# shutdown -h now
Vì MBR chu’a có gì thay d¯oˆ’i, nên Windows NT se˜ kho’’i d¯oˆng. Trong NT caˆ`n sao chép taˆp tin bootsect.lnx vào thu’ muc go´ˆ c cu’a d¯ı˜a C:, hay chính˙ xác ho’n là vào thu’ muc go´ˆ c ˙’ a phân vùng mà tu` d kho’i d˙ ng Windows NT. Dây có the’ là phân vùng FAT16 ˙ hay cu ˆ ’ ¯ó ’ ¯oˆ ¯ phân vùng NTFS. ¯Da˘c d¯ieˆ’m d¯eˆ’˙ nhaˆn ra phân vùng này là hai taˆp tin ntldr và boot.init ˙ có the’ d ˘ t thuoc tính chu´’a trong d¯ó (nhu˜’ng˙ taˆp tin này có˙ theˆ’ aˆ’n!). Taˆp tin bootsect.lnx ˆ ˆ ¯a ˙ ˙ ˙ chı’ d¯oc (read-only). ˙ ˙ 7. Sau d¯ó tìm taˆp tin boot.ini và thêm vào dòng sau: ˙ C:\bootsect.lnx="LINUX"
(ta´ˆ t nhiên, trong da´ˆ u ngoa˘c kép ban d¯oc có theˆ’ d¯a˘t tên ba´ˆ t ky`.) ˙ ˙ ˙ ˙ 8. Vieˆc còn lai là kho’’i d¯oˆng lai máy tính moˆt laˆ`n nu˜’a, và trong trình d¯o’n chon heˆ d¯ieˆ`u ˙ se ˙ se có˙LINUX. Ne´˙u cho˙ n LINUX, thì˙LILO se d oc chay và sau d nó ˙(LILO) hành ˜ ˜ ¯u’ ’ ˜ ¯ó ˆ ˙ ˙ ˙ nap Linux. ˙ Còn bây gio`’ chúng ta se˜ xem xét tru’o`’ng ho’p ban d¯oc (do vô tình hay co´ˆ ý) cài d¯a˘t LILO ˙ ˙Record, ˙ MBR). Trong truo`ng hop ˙này ba’n vào ba’n ghi kho’’i d¯oˆng chính cu’a d¯ı˜a (Master Boot ’’ ’ ˙ ˙ ghi kho’’i d¯oˆng Windows NT (hay 2000) se˜ bi xóa, và vieˆc kho’’i d¯oˆng Windows NT (bu’o´’c thu´’ 6 o’’ trên) là˙ không theˆ’. Ne´ˆ u nhu’ ban d¯oc vaˆ˜n˙ còn muo´ˆ n˙ su’’ dung ˙trình kho’’i d¯oˆng OS Loader ˙ ˙ thì nhung buo´c trên ˙có thay d ’i mot ˙chút: thay cho cu’a NT, chu´’ không muo´ˆ n dùng LILO, ˜’ ¯oˆ ˆ ’’ ˙ ` bu’o´’c thu´’ 6 caˆn làm các thao tác sau. 1. Kho’’i d¯oˆng Windows NT tu`’ d¯ı˜a meˆ`m kho’’i d¯oˆng (d¯ã tao tru’o´’c khi cài d¯a˘t Linux, ne´ˆ u ˙ thì ban d c ca`n tìm mot máy khác ˙d ˙ ˙ không có ¯o ˆ ¯ang chay Windows NT roˆ`i tao). Trong ˆ ˙ cu’a trình kho ˙ ’ i d ng ca`n chon ˙lenh Recover, ro`i cho˙ n che´ d trình d¯o’n (thu’c˙ d¯o’n) ˆ ˆ ˆ ˆ ¯oˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ˙ ˙ Command mode. Sau d¯ó d¯a˘ng nhaˆp vào tài khoa’n nhà qua’n tri (administrator). ˙ ˙ ` 2. Phuc hoˆi lai ba’n ghi kho’’i d¯oˆng chính cu’a d¯ı˜a. Su’’ dung câu leˆnh fdisk /mbr. Tác gia’ ˙ lenh ˙này thành công, ma ˙ ˘ c dù trong mot so´ bài ˙báo nói cách ˙ phuc ho`i MBR nhu dùng ˆ ˆ ˆ ˆ ’ ˙ pha’i lúc nào cung làm ˙ viec. Trong ˙ Windows 2000 có các le˙nh chuyên dùng vaˆy không ˜ ˆ ˆ ˙ ˙ c ho`i he tho´ ng). Chay hai lenh˙ này theo thu´ tu fixboot và fixmbr (chay tu`’ console phu ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ d¯ã chı’ ra. Sau d¯ó Windows 2000 se˜ kho˙’’i d¯oˆng ˙bình thu’o`’ng.˙ ˙ 3. Kho’’i d¯oˆng lai máy tính tu`’ d¯ı˜a meˆ`m kho’’i d¯oˆng Linux và d¯a˘ng nhaˆp vào heˆ tho´ˆ ng vo´’i ˙ ˙ ˙ ˙ o`i˙dùng root. quyeˆ`n ngu ’’ ’’ d¯aˆ`u taˆp tin này có liên ke´ˆ t d¯e´ˆ n phân 4. Nhaˆp leˆnh cd /etc và mo’’ taˆp tin lilo.conf. O ˙ ˙ ˙ ˙ vùng kho’’i d¯oˆng theo ma˘c d¯inh, ví du, /dev/hda. ˙ ˙ ˙ ˙ 5. Dùng ba´ˆ t ky` trình soan tha’o nào, ví du, CoolEdit cu’a Midnight Commander, d¯eˆ’ thay the´ˆ giá tri này thành ˙phân vùng d¯ã cài˙ Linux lên (chính xác ho’n là thành phân vùng d¯u’o’c ga´˘ n˙nhu’ go´ˆ c (/) cu’a Linux). Ne´ˆ u Linux d¯u’o’c cài vào phân vùng /dev/hda3, thì caˆ`n˙ ghi cái d¯ó, tu´’c là thay the´ˆ /dev/hda thành ˙/dev/hda3. Ne´ˆ u nhu’ ban d¯oc không ˙ tu nhu nho´’ d¯ã cài Linux vào d¯âu, thì hãy chay câu leˆnh mount và tìm ke´ˆ t qua’ ˙tu’o’ng ’ ’ ˙ ˙ ˙ 2 sau : 2
có nghı˜a là tìm phân vùng d¯ã ga˘´n vào thu’ muc go´ˆ c /, trong ví du này là /dev/hda3 ˙ ˙
20
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ kênh giao tác /dev/hda3 on / type reiserfs (rw)
6. Chay leˆnh /sbin/lilo d¯eˆ’ ghi trình kho’’i d¯oˆng vào phân vùng /dev/hda3 (caˆ`n chay ˙ ve` viec phân vùng không pha’i là d ˙`u ˙ lilo ˙ không có tham so´ ). Se có ca’nh báo leˆnh ˜ ¯aˆ ˆ ˆ ˆ ˙ ˙ ` ` tiên trên d¯ı˜a. ¯Dây chính là d¯ieˆu chúng ta caˆn, ba’n ghi kho’’i d¯oˆng cu’a Windows d¯u’o’c giu˜’ ˙ ˙ nguyên ven. ˙ 7. Thu’c hieˆn các bu’o´’c 6-8 nhu’ o’’ trên. ˙ ˙ ˜ Deˆ dàng d¯oán ra ra˘`ng, "quy trình" phu´’c tap vo´’i hai laˆ`n kho’’i d¯oˆng lai chı’ d¯eˆ’ chuyeˆ’n sector ˙ cho ˙ Linux, và phuc ho`i ˙ cu’a phân vùng dành kho’’i d¯oˆng Linux tu`’ MBR vào sector d¯aˆ`u tiên ˆ ˙’ a Windows. ˙ MBR cu Quá trình cài d¯a˘t Linux ke´ˆ t thúc o’’ d¯ây. Ban d¯oc d¯ã có theˆ’ chon HD ¯ H se˜ kho’’i d¯oˆ˙ng và d¯ieˆ`u ˙ ˙ ˙ ˙ khieˆ’n máy tính cu’a mình.
2.7 2.7.1
Su’’ dung trình kho’’i d¯oˆng LILO ˙ ˙ ´ˆ u hình LILO Cài d¯a˘t và ca ˙
Nhu’ d¯ã nói trong phaˆ`n lu’a chon chu’o’ng trình kho’’i d¯oˆng, ne´ˆ u trên máy d¯ã cài Windows 98 ˙ thì˙ lua chon to´ t hon cho trình ˙ kho’i d ng là chuong trình có trong vo´’i heˆ tho´ˆ ng taˆp tin FAT16, ˆ ’ ’ ’ ¯oˆ ’’ ˙ ˙ ˙ ˙ ˙ thành phaˆ`n cu’a moi ba’n phân pho´ˆ i HD H Linux – LILO (LInux LOader). ¯ Gio´ˆ ng nhu’ tru’o`˙’ng ho’p Windows NT, chúng ta se˜ d¯u’a ra các bu’o´’c caˆ`n thu’c hieˆn d¯eˆ’ có theˆ’ ˙ ˙ ˙ kho’’i d¯oˆng nhieˆ`u HD ¯ H. ˙ 1. Tru’o´’c khi cài d¯a˘t Linux hãy chuaˆ’n bi d¯ı˜a meˆ`m kho’’i d¯oˆng Windows. ˙ ˙ ˙ ’ ´ ` 2. Dùng chu’o’ng trình Partition Magic d¯eˆ laˆy phaˆn không gian d¯ı˜a còn tro´ˆ ng và trên d¯ó tao ra moˆt phân vùng ext2(3) (heˆ tho´ˆ ng taˆp tin Linux) và moˆt phân vùng swap. Cách ˙ o’ d ˙a d nói o’ trên. Ne´ u dung ˙ luong o˙’ d a cu´ng vuot quá˙8,4 Gbyte thì hãy d c ky chia ¯o ˜ ˆ ¯ı˜ ¯ã ˆ ’ ’ ’ ˆ ¯ı˜ ’ ’’ ˙ ˙ ˙ các phaˆ`n 2.3 và 2.5. 3. Cài d¯a˘t Linux theo chı’ daˆ˜n d¯i kèm vo´’i ba’n phân pho´ˆ i. Caˆ`n nho´’ ra˘`ng, ne´ˆ u ban muo´ˆ n su’’ dung ˙trình kho’’i d¯oˆng LILO, thì trong quá trình cài da˘t Linux caˆ`n chon phu˙’o’ng án cài ˙ ˙ LILO vào ba’n ghi˙kho’’i d¯oˆng chính (Master Boot Record). Tao các d¯ı˜a˙ meˆ`m kho’’i d¯oˆng ˙ theo nguyên ta˘´c là không˙ba˘´t buoˆc, nhu’ng tác gia’ khuyên ba˙n d¯oc nên làm.3 ˙ ˙ ˙ 4. Bu’o´’c tie´ˆ p theo caˆ`n ca´ˆ u hình LILO d¯eˆ’ có theˆ’ kho’’i d¯oˆng các HD ¯ H theo lu˙’a cho˙n. LILO ˙ ´ ` d¯u’o’c caˆu hình ba˘ng taˆp tin /etc/lilo.conf và câu leˆnh /sbin/lilo. Câu leˆnh này ˙ d ’ cài d ˘ t (hay ˙cài d ˘ t lai) LILO. ˙ ˙ dùng ¯eˆ ¯a ¯a ˙ ˙ ˙ Chúng ta xem xét moˆt ví du nho’ cu’a taˆp tin ca´ˆ u hình LILO. Trong ví du này chúng ˙ ˙ ta se˜ coi nhu’ thie´ˆ t bi˙ /dev/hda1 là phân vùng vo´’i DOS/Windows, còn˙ phân vùng ˙ 3
Ghi chú. Trình kho’’i d¯oˆng LILO không ba˘´t buoˆc pha’i cài d¯a˘t vào ba’n ghi kho’’i d¯oˆng chính cu’a d¯ı˜a, LILO ˙ d oc kích hoa ˙ t và chu´a thu muc go ˙ ´ c cu’a Linux hoa˘c tham có theˆ’ na˘`m o’’ ba’n ghi kho’’i d˙¯oˆng cu’a phân vùng chính ¯u’ ’ ˆ ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ chí trên phân vùng lôgíc trong phân vùng mo’’ roˆng. Trong tru’o`’ng ho’p d¯ó MBR caˆ`n pha’i có kha’ na˘ng nap˙ LILO, ˙ ˙ ˙ ví du khi MBR là trình kho’’i d¯oˆng cu’a MS-DOS hay Windows. Tuy nhiên tác gia’ chu’a nhìn tha´ˆ y su’ caˆ`n thie´ˆ t ˙´ chúng ta cu’a u˙´’ng dung này (ne´ˆ u d¯ã chon˙LILO làm trình kho’’i d¯oˆng chính thì hãy su’’ dung cho "tron boˆ"), vì the ˆ ˙ ˙ ˙ ˙ ˙ ˙ se˜ không xem xét d¯e´ˆ n.
2.7 Su’’ dung trình kho’’i d¯oˆng LILO ˙ ˙
21
/dev/hda2 chu´’a Linux. Trong tru’o`’ng ho’p d¯ó /etc/lilo.conf có dang gaˆ`n nhu’
sau:
˙
˙
kênh giao tác boot = /dev/hda2 compact delay = 50 # message = /boot/bootmesg.txt root = current image = /boot/vmlinuz-2.4.22 label = linux read-only other = /dev/hda1 table = /dev/hda label = dos
Vài lo`’i gia’i thích cho ví du: Dòng boot cho bie´ˆ t thie´ˆ t bi kho’’i d¯oˆng. ˙ ˙ ˙ Dòng compact baˆt che´ˆ d¯oˆ nén taˆp tin map – taˆp tin chu´’a d¯a˘c tính cu’a nhân d¯u’o’c kho’’i ˙ ˙ này˙ta˘ng to´˙ c d cu’a kho’i˙ d ng d `u. ˙ d¯oˆng; tính na˘ng (nén) ¯aˆ ˆ ¯oˆ ’ ¯oˆ ˙ ˙ ˙ Câu leˆnh message dùng d¯eˆ’ d¯u’a ra thông báo theo ý muo´ˆ n khi kho’’i d¯oˆng. ˙ ˙ Ba˘´t d¯aˆ`u tu`’ dòng image là các phaˆ`n nho’ cu’a taˆp tin ca´ˆ u hình, moˆ˜i phaˆ`n tu’o’ng u´’ng vo´’i ˙’ a nguo`i dùng. Trong mo˜i pha`n nhu vay moˆt heˆ d¯ieˆ`u hành se˜ kho’’i d¯oˆng theo lu’a chon cu ˆ ˆ ’’ ’ ˆ ˙ ˙ ˙ ˙ ˙ ` ´ ´ có moˆt dòng label. Trên dòng này ghi tên caˆn nhaˆp vào daˆu nha˘c LILO hay tên ˙se˜ ˙ trong trình d n cu’a LILO d ’ có the’ chon HD ˙ hieˆ’n thi ¯o’ ¯eˆ ˆ ¯ H muo´ˆ n kho’’i d¯oˆ˙ng. Ne´ˆ u nhu’ tên ˙ ˙ không d¯u’o’c nhaˆp sau khoa’ng tho`’i gian chı’ trên dòng delay (tính theo phaˆ`n mu’o`’i giây ˙ vo´i˙ 0,1 giây), thì se kho’i d ng HDH theo ma˘c d nh. Trong ví du này, se – caˆ`n nhân ˜ ˜ ¯i ’ ’ ¯oˆ ¯ kho’’i d¯oˆng Linux theo ma˘c d¯inh, vì phaˆ`˙n ca´ˆ u hình tu’o’ng ˙u´’ng˙vo´’i Linux na˘`m˙d¯aˆ`u tiên ˙ he˙ d `u hành d oc kho’i d ng theo ma˘c d nh khi thêm mot trong ta˙ˆ p tin. Có theˆ’ chı’ ra ¯u’ ’ ¯i ˆ ¯ieˆ ˆ ’ ¯oˆ ˙ . ˙ dòng có˙ dang default=dos˙, tu´’c là su’’ dung˙ tên d¯ã d¯a˘˙ t trên dòng˙ label ˙ ˙ ˙ Dòng table=<device> cho bie´ˆ t tên thie´ˆ t bi chu´’a ba’ng phân chia d¯ı˜a. LILO se˜ không ˙ d¯u’a thông tin veˆ` phân chia d¯ı˜a cho heˆ d¯ieˆ`u hành d¯u’o’c kho’’i d¯oˆng ne´ˆ u bie´ˆ n này không ˙ ˙ là d d oc kho’i d ng d¯u’o’c d¯u’a ra. (Moˆt so´ˆ heˆ d¯ieˆ`u hành có công cu khác ˙d¯eˆ’ xác d¯inh ¯ã ¯u’ ’ ’ ¯oˆ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ` ` tu`’ phân vùng nào.) ¯Du`’ng quên ra˘ng, caˆn thu’c hieˆn câu leˆnh /sbin/lilo, sau khi thay ˙ d ’i bie ˙ d¯oˆ’i chı’ daˆ˜n d¯e´ˆ n ba’ng phân chia d¯ı˜a, tu´’c là˙ thay ¯oˆ ´ˆ n table. Ne´ˆ u d¯a˘t dòng (goi ˙ ˙ là phaˆ`n nho’ thì to´ˆ t ho’n) other = /dev/hda1 trong taˆp tin /etc/lilo.conf , thì ˙ trong thu’ muc go´ˆ c cu’a d¯ı˜a /dev/hda1 (d¯ı˜a C: trong heˆ tho´ˆ ng thuaˆt ngu˜’ Microsoft) caˆ`n ˙ gia’ o’ d na˘`m trình có trình kho’’˙i d¯oˆng phu (không pha’i là chính). Trên moˆ˙t máy cu’a tác ’ ¯ó ˙ ˙ ˙ kho’’i d¯oˆng NT Loader (vì Windows NT d¯u’o’c cài d¯a˘t tru’o´’c Linux), và LILO kho’’i d¯oˆng ˙ ˙ ` kho’i d ng trong tap tin boot.ini ˙ thành công Windows NT. Chı’ caˆ`n d¯a˘t tho`’˙i gian cho ˆ ’ ’ ¯oˆ ˙ Tuy nhiên, ˙ ne´ u vì mot ba˘`ng không, d¯eˆ’ không tha´ˆ y trình d¯o’n ˙kho’’i d¯oˆng cu’a NT Loader. ˆ ˆ ˙ ´ ´ ` lý do nào d¯ó ban muoˆn thaˆy trình d¯o’n này thì giá tri timeout trong taˆp tin boot.ini caˆ˙n ˙ ie`u này có the’ ca ˙ d¯a˘t khác không˙ (tho`’i gian cho`’ d¯u’o’c tính theo giây). ¯D ˆ ˆ ˆ`n thie´ˆ t khi muo´ˆ n ˙ ’ i d ng ca’ Windows 98 tu` trình ˙ d n cu’a NT Loader (trong truo`ng hop này se có 3 kho ˜ ¯o’ ’ ¯oˆ ’ ’’ ’ ˙ ˙ ´ ’ HD ¯ H: Linux, Windows NT và Windows 98, trong trình d¯o’n cua LILO neˆu cho˙n dos thì se˜ hieˆn ra trình d¯o’n cu’a NT Loader roˆ`i tu`’ d¯ó chon moˆt trong hai HD ¯ H Windows d¯eˆ’ ˙ ˙ ˙ kho’’i d¯oˆng). ˙ Ne´ˆ u ban d¯oc muo´ˆ n kho’’i d¯oˆng Windows tru’c tie´ˆ p tu`’ LILO, thì hãy thêm phaˆ`n nho’ sau ˙ ˙ ˙ vào /etc/lilo.conf : ˙
22
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙ kênh giao tác other = /boot/bootsect.dos label = win
trong d¯ó bootsect.dos la´ˆ y tu`’ thu’ muc go´ˆ c cu’a oˆ’ d¯ı˜a chu´’a NT Loader. ˙ 5. Sau khi su’’a xong taˆp tin /etc/lilo.conf theo ý muo´ˆ n, caˆ`n chay câu leˆnh /sbin/lilo ˙ ˜n goi là mapd¯eˆ’ nhu˜’ng thay d¯oˆ’˙i có hieˆu lu’c. Câu leˆnh này (trong tài lieˆu ˙hu’o´’ng da ˆ ˙ ˙ ˙ ˙ ` ’ installer) cài d¯a˘t trình kho’i d¯oˆng phu, mà se˜ d¯u’o’c kích hoat trong laˆn kho’’i˙ d¯oˆng tie´ˆ p ˙ ˙’ thay d ’i bu˙ o´c kho’i d ˙ ng, hãy thuc hien câu ˙ lenh theo. Tru’o´’c khi˙ chay /sbin/lilo d¯e ¯oˆ ’ ’ ˆ ˆ ’ ¯oˆ ’ ˆ ˙ ˙ ˙ ˙ ˙ ´ ´ ´ này vo´’i tham soˆ -t. Khi có tham soˆ này se˜ thu’c hieˆn taˆt ca’ các thu’ tuc cài d¯a˘t trình ˙ kho’i d ng, và ba’˙ng phân˙ chia o’ kho’’i d¯oˆng, tru`’ vieˆc thay d¯oˆ’i taˆp tin map, ba’n ghi˙ sector ˆ ’ ¯oˆ ˙ mo´i. Ne´ u cho thêm tùy chon˙ -v, thì ban d c se d oc d¯ı˜a, tu´’c˙ là chı’ cha˙ y thu’’ ca´ˆ u hình ¯o ˜ ¯u’ ’ ’ ˆ ˙ chi tie´ t ve` nhung gì lenh /sbin/lilo se ˙ thuc hien.˙ ˙ ˙ bie´ˆ t thêm thông tin ˜ ’ ˆ ˆ ˆ ˜’ ˆ ˙ ˙ ˙ Khi /sbin/lilo ghi d¯è noˆi dung mo´’i lên sector kho’’i doˆng, thì noˆi dung cu˜ cu’a ˙ ma˘c d nh ˙ sector này se˜ tu’ d¯oˆng d¯u’o’c˙ ghi nho´’ vào moˆt taˆp tin. Theo ¯i d¯ó là taˆp tin ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ´ˆ cu’a thie´ˆ t bi, ví du, 0300 – /boot/boot.NNNN, trong d¯ó NNNN tu’o’ng u´’ng vo´’i so tu’o’ng u´’ng /dev/hda, 0800 – /dev/sda, v.v. . . Ne´ˆ u taˆp tin này d¯ã có˙ trên d˙¯ı˜a, thì nó không bi ghi d¯è lên. Tuy nhiên có theˆ’ d¯a˘t moˆt tên khác ˙d¯e’ ghi sector kho’’i d¯oˆng, không ˙ . ˙ ˙ nha´ˆ t thie´ˆ˙t pha’i dùng /boot/boot.NNNN Taˆp tin /boot/boot.NNNN có theˆ’ su’’ dung d¯eˆ’ phuc hoˆ`i noˆi dung cu˜ cu’a sector kho’’i ˙ ’ n hon.˙ Câu lenh d ’ thuc hien có d¯oˆ˙ ng, ne´ˆ u không còn cách phuc hoˆ`i nào ˙khác d¯o’n gia ¯eˆ ’ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ dang: ˙ kênh giao tác [root:~#] dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1
hay kênh giao tác [root:~#] dd if=/boot/boot.0800 of=/dev/hda bs=446 count=1
(bs=446 vì chı’ phuc hoˆ`i chu’o’ng trình kho’’i d¯oˆng, và không d¯oˆng gì d¯e´ˆ n ba’ng phân chia ˙ ˙ ˙ d¯ı˜a). Cu˜ng có theˆ’ phuc hoˆ`i MBR cu˜ khi caˆ`n thie´ˆ t ba˘`ng câu leˆnh /sbin/lilo vo´’i tùy chon ˙ ´ t ra`˘ ng, câu lenh này chı’ làm viec d ˙ vo´i d `u kien là thu muc LILO ˙ -u. Nhu’ng caˆ`n bie ˆ ˆ ˆ ¯úng ’ ¯ieˆ ˆ ’ ˙ ˙ (tu´’c là /boot) không thay d¯oˆ’i˙ keˆ’ tu`’ khi cài d¯a˘t. ˙ ˙ MBR cu’a MS-DOS có theˆ’ d¯u’o’c phuc hoˆ`i ba˘`ng cách kho’’i d¯oˆng vào DOS tu`’ d¯ı˜a meˆ`m ˙ ˙ (CD) roˆ`i chay câu leˆnh fdisk /mbr (xem trên). Leˆnh này chı’ ˙thay d¯oˆ’i mã chu’o’ng trình ˙˘` m trong ˙ MBR, mà không thay d ’i ba ˙ kho’’i d¯oˆng na ¯oˆ ’ ng phân chia d¯ı˜a. ˙ 6. Sau khi cài d¯a˘t lai trình kho’’i d¯oˆng caˆ`n kho’’i d¯oˆng lai máy tính và thu’’ các phu’o’ng án ˙ nhau ˙ ˙ ˙ ˙ kho’’i d¯oˆng khác d¯eˆ’ kieˆ’m tra. ˙ ’ ´ ¯Deˆ keˆt thúc phaˆ`n nói veˆ` LILO này chúng ta se˜ xem xét vài khó kha˘n có theˆ’ xua´ˆ t hieˆ˙n khi su’’ dung LILO, và cách kha˘´c phuc (ne´ˆ u có theˆ’). ˙ LILO d oc nap, nó d a˙ra màn hình tu` "LILO". Khi này mo˜i chu cái bie’u thi su ke´ t Khi ˜’ ¯u’ ’ ¯u’ ˆ ˆ ’ ’ ˆ ˙ ˙ ˙ ˙ ´ ´ ’ thúc moˆt hành d¯oˆng nào d¯ó hay keˆt thúc moˆt bu’o´’c nap LILO. Neˆu kho’i d¯oˆng bi bi ngu’ng ˙` ng, thì qua ˙ so´ chu cái d a ra có the’ nha ˙ ˙ ˙ ˙ ˙ giu˜’a chu ¯u’ ˆ ˜’ ˆ ˆ n d¯inh veˆ` nguyên nhân xua´ˆ t hieˆn va´ˆ n d¯eˆ`. ’ ˙ ˙ ˙
2.7 Su’’ dung trình kho’’i d¯oˆng LILO ˙ ˙
23
• Không chu˜’ cái nào hieˆn ra – không có phaˆ`n nào cu’a LILO d¯u’o’c nap. Hoa˘c LILO không ˙ ˙ vùng chu´a LILO chua d oc kích hoa˙t. ˙ d¯u’o’c cài d¯a˘t, hoa˘c phân ’ ’ ¯u’ ’ ˙ ˙ ˙ ˙ ˙ • L [mã loˆ˜i] – trình kho’’i d¯oˆng chính d¯ã d¯u’o’c nap và d¯ã chay (tu´’c là d¯ã nhaˆn d¯u’o’c quyeˆ`n ˙ ˙ kho ˙ ’ i d ng phu ˙ . Mã lo˜i hai ˙ký tu˙cho bie´ t theˆ’ nap trình d¯ieˆ`u khieˆ’n), nhu’ng nó không ˆ ˆ ’ ¯oˆ ’ ˙ ˙ ˙ ˙ ’ ´ ` ` nguyên nhân cu theˆ cu’a vaˆn d¯eˆ (cách gia’i mã caˆn tìm trong tài lieˆu ky˜ thuaˆt cu’a LILO). ˙ không˙d ˘ t d Thông thu’o`’ng ˙thì va´ˆ n d¯eˆ` na’y sinh do oˆ’ d¯ı˜a xa´ˆ u (có khuye´ˆ t taˆt) hay ¯a ¯úng ca´ˆ u ˙ trúc hình hoc cu’a d¯ı˜a. Ne´ˆ u LILO không du`’ng lai o’’ d¯ây, mà tie´ˆ p tuc d¯u’a ra˙ moˆt chuoˆ˜i ˙ lo˜i, thì va´ n d ` thuo`ng de˜ gia’i quye´˙ t. ˙ ˙ vô taˆn các mã ˆ ˆ ¯eˆ ’ ’ ˆ ˆ ˙ • LI – trình kho’’i d¯oˆng chính d¯ã nap d¯u’o’c trình kho’’i d¯oˆng phu, nhu’ng không chay d¯u’o’c ˙ a ca´ u trúc hình ˙ hoc ˙cu’a d a, hoa˘c ta˙p tin boot/boot.b ˙ bi di˙chuyeˆ˙’n nó. Có theˆ’ là loˆ˜i d¯u ¯ı˜ ˆ ’ ˆ ˙ ˙ mà ngu’o`’i dùng quên không chay /sbin/lilo . ˙ ˙ ˙ • LIL — trình kho’’i d¯oˆng phu d¯ã d¯u’o’c chay, nhu’ng nó không theˆ’ nap ba’ng mô ta’ tu`’ taˆp ˙ d ad ˙ ˙ thuo`˙ ng do ˙khuye´˙t tat cu’a o’ d a hoa˘c không tin map. Nguyên nhân ¯u’ ¯úng ca´ˆ u trúc ˆ ˆ ˆ ¯ı˜ ’’ ˙ ˙ hình hoc cu’a d¯ı˜a. ˙ • LIL? – trình kho’’i d¯oˆng phu d¯ã d¯u’o’c nap vào d¯ia chı’ không d¯úng. Thông thu’o`’ng do loˆ˜i ˙’ a d a hoa ˙ ˘ c˙ tap tin /boot/boot.b ˙ d¯u’a ra ca´ˆ u trúc hình˙ hoc cu bi di chuyeˆ’n mà ngu’o`’i ¯ı˜ ˆ ˙ ˙ ˙ ˙ dùng quên không chay /sbin/lilo. ˙ • LIL- – ba’ng mô ta’ trong taˆp tin map bi phá hu’y. Thông thu’o`’ng do loˆ˜i d¯u’a ra ca´ˆ u trúc ˙ /boot/boot.b ˙ hình hoc cu’a d¯ı˜a hoa˘c taˆp tin bi di chuyeˆ’n mà ngu’o`’i dùng quên không ˙ ˙ ˙ ˙ chay /sbin/lilo. ˙ • LILO – ta´ˆ t ca’ các phaˆ`n cu’a LILO d¯u’o’c nap thành công. ˙ ˙
2.7.2
Cài d¯a˘t các heˆ d¯ieˆ`u hành khác sau Linux ˙ ˙
Khi cài d¯a˘t MS-DOS và Windows 95/98, trình kho’’i d¯oˆng cu’a chúng (không phu thuoˆc vào ý ˙ ba’ng muo´ˆ n cu’a˙ ban d¯oc) d¯u’o’c ghi vào Master Boot Record˙ (MBR), và da´ˆ u kích hoa˙ t trong ˙ ’n sang phân vùng MS-DOS (Windows 95/98). Mà trình ˙ kho’i d ng phân vùng se˙˜ d¯u’o˙’c chuye ˆ ’ ¯oˆ ˙ ’ ’ ´ ` ` ` ’ MS-DOS và Windows 95/98 chı "bieˆt" chuyeˆn quyeˆn d¯ieˆu khieˆn cho sector d¯aˆu tiên ˙cu’a phân vùng kích hoat. Nhu’ the´ˆ , ne´ˆ u nhu’ ban d¯oc d¯aˆ`u tiên cài d¯a˘t Linux, và sau d¯ó mo´’i cài d¯a˘t ˙ MS-DOS, thì Linux˙se không ˙ ˙ Windows 95/98 hay theˆ’ kho’’i d¯o˙ˆ ng. Có theˆ’ phuc hoˆ`i lai LILO ˜ ˙ ˙ vùng ba`˘ ng cách chay leˆnh /sbin/lilo (ne´ˆ u LILO d¯u’o’c cài vào MBR), hoa˘c kích ˙hoat phân ˙´ u ˙LILO d oc cài vào phân vùng chính). ˙ ˙ ˙ chu´’a LILO (ne ¯u’ ’ ˆ ˙ Khi có va´ˆ n d¯eˆ` sau khi cài d¯a˘t moˆt heˆ d¯ieˆ`u hành khác sau Linux, thu’o`’ng có theˆ’ gia’i quye´ˆ t ba˘`ng cách kho’’i d¯oˆng vào Linux˙ba˘`ng˙ d¯ı˜a˙ meˆ`m kho’’i d¯oˆng, su’’a lai taˆp tin ca´ˆ u hình LILO (thêm ˙ ˙ ˙ ˙ phaˆ`n nho’ cho HD ¯ H mo´’i), roˆ`i cha˙y /sbin/lilo.
2.7.3
Chuyeˆ’n thu’ muc /boot lên phân vùng DOS ˙
Nhu˜’ng phiên ba’n nhân Linux mo´’i nha´ˆ t hoˆ˜ tro’ kha’ na˘ng d¯a˘t các taˆp tin caˆ`n thie´ˆ t trên giai d¯oan ˙ UMSDOS). ˙ Vì trong ˙ pha`n lo´n các truo`ng ho˙ p kho’’i d¯oˆng vào heˆ tho´ˆ ng taˆp tin MS-DOS (hay ˆ ’ ’’ ’ ˙’ i ˙ ˙ vùng d a o’ d `u (không có han che´ cu’a BIOS), nên cho phép gia phân vùng DOS ˙chie´ˆ m các ¯ı˜ ’ ¯aˆ ˆ quye´ˆ t nhieˆ`u va´ˆ n d¯eˆ` cu’a oˆ’ d¯ı˜a lo´’n, khi mà thu’ muc /boot˙ không theˆ’ na`˘ m trên phân vùng dành ˙ cho Linux.
24
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
¯Deˆ’ thu˙’c hieˆ˙n phu’o’ng án kho’’i d¯oˆ˙ng này, caˆ`n phân vùng DOS o’’ che´ˆ d¯oˆ˙ d¯o˙c/ghi, ta˙o trong d¯ó moˆt thu’ muc (ví du, /dos/linux), và chuyeˆ’n ta´ˆ t ca’ các taˆp tin tu`’ thu’ muc /boot vào ˙ ˙ muc /boot ˙ ; vi trí d¯ó; thu d¯u’˙o’c chuyeˆ’n thành liên ke´ˆ t tu’o’ng tru’ng d¯e´ˆ n˙ thu’ muc /dos/linux ’ ˙ ˙ ˙ ˙ ` ´ ’ ’ mo´’i cua thu’ muc /boot caˆn chı ra trong taˆp tin /etc/lilo.conf, và cuoˆi cùng chay le˙ˆ nh ˙ ˙ ˙ ˙ /sbin/lilo.
2.8
Kho’’i d¯oˆng Linux tu`’ MS-DOS ba˘`ng loadlin.exe ˙
Không chı’ các taˆp tin kho’’i d¯oˆng và nhân có theˆ’ na˘`m trong phân vùng DOS, mà ca’ tie´ˆ n trình ˙ the’ d oc to’ chu´c tu` DOS. Kha’ na˘ng này thuc hien nho` chuong kho’’i d¯oˆng Linux˙ nói chung có ˆ ¯u’ ’ ˆ ’ ’ ’ ˆ ’ ’’ ˙ ˙˘ c biet loadlin.exe, do Hans Lermen (
[email protected])˙vie´ˆ t.˙ Chu’o’ng trình trình d¯a ˆ này thu˙’o`’ng ˙có trên các d¯ı˜a cu’a ba’n phân pho´ˆ i.4 Loadlin.exe cung ca´ˆ p cách kho’’i d¯oˆng Linux tu`’ oˆ’ cu´’ng an toàn nha´ˆ t, khi có phân vùng ˙ án kho’i d ng này d oc khuyên su’ dung cho nguo`i kích hoat là DOS hay Windows. Phu’o’ng ¯u’ ’ ’ ¯oˆ ’ ’’ ˙ ˙ ˙ ˙ ’ ˜ ` dùng Linux mo´’i. Phaˆn lo´’n ngu’o`’i dùng mo´’i (và không chı’ ho) không d¯u’ kiên nhaˆn d¯eˆ d¯oc tài lieˆu ra´ˆ t hay nhu’ng ra´ˆ t dài (và lai vie´ˆ t trên tie´ˆ ng Anh nu˜’a) cu’a˙ LILO. Vì the´ˆ ho thu’o`’ng su’’˙dung ˙ ˙`u hành nào (tác ˙ LILO không d¯úng cách, và ke´ˆ t˙ qua’ là không theˆ’ kho’’i d¯oˆng d¯u’o’c ba´ˆ t ky` heˆ d¯ie ˆ ˙ se thuan tien hon gia’ cu˜ng d¯ã ro’i vào tru’o`’ng ho’p nhu’ vaˆy). ¯Do´ˆ i vo´’i nhu˜’ng˙ ngu’o`’i˙dùng mo´’i thì ˜ ˆ ˆ ’ ˙ ’ i d ng˙và ba˘´t d `u tìm hie’u Linux. Tuy nhiên, "không˙ vào˙ hang khi su’’ dung loadlin.exe d¯eˆ’ kho ¯aˆ ˆ ’ ¯oˆ ˙ cop sao ˙ba˘´t d¯u’o’c cop". ˙ ˙ ˙ Chu’o’ng trình loadlin.exe không yêu caˆ`u pha’i cài d¯a˘t, chı’ caˆ`n d¯a˘t chu’o’ng trình – taˆp tin ˙ nhan ra. Có the’˙dùng loadlin.exe và nhân (a’nh cu’a nhân) lên moˆt trong các˙ d¯ı˜a mà DOS ˆ ˆ ˙ ˙ ’ ’ ` ’ chu’o’ng trình này d¯eˆ kho’i d¯oˆng Linux tu`’ CD hoa˘c tu`’ oˆ d¯ı˜a trong mang mà không caˆn su’’ dung ˙ thành mot công˙ cu tuyet vo`i d ’ kho’i d ˙ ng d¯ı˜a meˆ`m kho’’i d¯oˆng. Kha’ na˘˙ng này bie´ˆ n loadlin.exe ˆ ˆ ’ ¯eˆ ’ ¯oˆ ˙ ˙ ˙ ˙ ˙ ´ ` Linux khi có vaˆn d¯eˆ vo´’i LILO. Phiên ba’n 1.6 cu’a loadlin.exe làm vieˆc vo´’i moi ca´ˆ u hình DOS và có ra´ˆ t ít han che´ˆ . Phiên ˙ p các nhân lo´n (các bzImage) ˙ và các a’nh ba’n này có theˆ’ su’’ dung boˆ nho´’ mo’’ roˆng;˙ có theˆ’ na ’ ˙ ˙ ˙ ˙ d¯ı˜a a’o (initrd) tru’c tie´ˆ p vào vùng boˆ nho´’ na`˘ m trên. Vieˆc su’’ dung˙ loadlin.exe không˙ có nghı˜a là Linux làm vieˆc du’o´’i DOS, vì chu’o’ng trình ˙ ’ i d ng lôgíc" cu’a máy tính, và sau d DOS d˙ oc thay the´ hoàn toàn ba`˘ ng này hoˆ˜˙ tro’ "kho ¯ó ¯u’ ’ ˆ ’ ¯oˆ ˙ ˙ ˙ ´ ´ ’ ’ ’ Linux. Neˆu nhu’ ban d¯oc muoˆn quay tro’ lai DOS, thì phai kho’i d¯oˆng lai máy tính, ví du, ba`˘ ng ˙ ˙ ˙ ˙ câu leˆnh reboot.˙ ˙ ˙ Nhu’ vaˆy, caˆ`n làm gì d¯eˆ’ có theˆ’ su’’ dung chu’o’ng trình loadlin.exe. ˙ ˙ • Trên máy tính cu’a ban (ta´ˆ t nhiên vo´’i boˆ xu’’ lý 386 hoa˘c cao ho’n) caˆ`n cài d¯a˘t DOS hay ˙ ˙ ˙ ˙ WINDOWS 95. • Caˆ`n có a’nh nén cu’a nhân Linux (zImage, bzImage)5 . • Chu’o’ng trình loadlin.exe. Có theˆ’ tìm tha´ˆ y trên d¯ı˜a phân pho´ˆ i o’’ dang không nén hay trong gói LOADLIN16.TGZ. Gói nén này còn chu´’a hu’o´’ng daˆ˜n su’’dung˙ DOC\MANUAL.TXT, taˆp tin tham so´ˆ ví du DOC\TEST.PAR, và hu’o´’ng daˆ˜n cách d¯u’a˙ các tham so´ˆ DOC\PARAMS.DOC ˙ ` ng quên ra`˘ ng chúng ˙ (d là nhu˜’ng taˆp tin DOS). ¯u’ ˙ 4
moˆt so´ˆ ba’n phân pho´ˆ i còn có gói cài d¯a˘t cho chu’o’ng trình này, thông thu’o`’ng ghi taˆp tin loadlin.exe vào thu’ ˙ ˙ muc cu’˙a ngu’o`’i dùng root ˙ 5 Ghi chú. zImage là d nh dang nhi phân cu cu’a nhân, bzImage là d nh dang mo´i hon (so´ phiên ba’n nhân lo´n ˜ ¯i ¯i ’ ’ ˆ ’ ˙ ˙ kích ˙ thuo´c lên to´i 2 Mbyte. Tie´ p theo ho’n 1.3.73) có kích thu’o´’c˙ lên ˙to´’i 1 Mbyte, do d¯ó, nhân khi gia’i nén có ˆ ’’ ’ chúng ta se˜ chı’ nói veˆ` các taˆp tin zImage, ma˘c dù ban d¯oc có theˆ’ thay the´ˆ zImage thành bzImage ˙ ˙ ˙ ˙
2.8 Kho’’i d¯oˆng Linux tu`’ MS-DOS ba`˘ ng loadlin.exe ˙
25
Ne´ˆ u ban chay loadlin.exe không có tham so´ˆ ˙ ˙ C:\LOADLIN> loadlin thì se˜ nhaˆn d¯u’o’c hu’o´’ng daˆ˜n su’’ dung nga˘´n gon. Thuaˆn tieˆn ho’n d¯eˆ’ d¯oc hu’o´’ng daˆ˜n này, khi ˙ Linux) ˙ ˙ ˙ chay chu’o’ng˙ trình˙ vo´’i tham so´ˆ more˙ (gio´ˆ ng trong ˙ C:\LOADLIN> loadlin | more Bây gio`’ chúng ta có theˆ’ xem xét các bu’o´’c cài d¯a˘t Linux khi su’’ dung loadlin.exe d¯eˆ’ kho’’i ˙ ˙ d¯oˆng. ˙ 1. Chia các phân vùng cho Linux (cách làm xem phaˆ`n 2.5) 2. Cài d¯a˘t Linux vào phân vùng d¯ã chia. LILO caˆ`n cài d¯a˘t vào sector d¯aˆ`u tiên cu’a phân vùng ˙Linux d¯eˆ’ không ghi d¯è lên MBR và không bi ˙ ma´ˆ t kha’ na˘ng kho’’i d¯oˆng vào ˙ ˙ Windows. 3. Sau khi ke´ˆ t thúc phaˆ`n cài d¯a˘t hãy kho’’i d¯oˆng Linux (ne´ˆ u không có cách nào khác, hãy ˙ Ga˘´n phân vùng ˙ su’’ dung d¯ı˜a meˆ`m kho’’i d¯oˆng). DOS (gia’ thie´ˆ t là /dev/hda1, còn phân ˙ ˙ vùng Linux là /dev/hda3): kênh giao tác [root]# mount -t vfat /dev/hda1 /mnt/C
Tao thu’ muc /mnt/C/loadlin và gia’i nén taˆp tin LOADLIN16.TGZ vào d¯ó. Ngoài ra˙ sao chép˙ tu`’ thu’ muc /boot vào thu’ muc d¯ó˙ ca’ taˆp tin chu´’a a’nh cu’a nhân Linux. Có ˙´ t nho` ta˙p tin /etc/lilo.conf: tìm trong theˆ’ tìm taˆp tin chu´’a ˙a’nh cu’a nhân caˆ`n thie ˆ ’ ˆ ˙ ˙´ y tên ca`n thie´ t o’ phía bên pha’i da´ u taˆp tin ca´ˆ u hình dòng "image=..." và ban d¯oc se˜ tha ˆ ˆ ˆ ’ ˆ ˙ ˙ ˙ ` ’ ba˘ng. Ví du tên cua taˆp tin này là vmlinuz-2.4.22. Sao chép taˆp tin vmlinuz-2.4.22 tu`’ ˙ ˙ ˙ ´ˆ t /boot vào /mnt/C/loadlin và d¯oˆ’i tên thành vmlinuz (vieˆc d¯oˆ’i tên là không nha ˙ ´ thieˆt, và chı’ có ý nghı˜a thuaˆn tieˆn cho su’’ dung): ˙ ˙ ˙ kênh giao tác [root]# cp /boot/vmlinuz-2.4.22 /mnt/C/loadlin/vmlinuz
4. Bây gio`’i kho’’i d¯oˆng lai máy tính vào DOS tru’c tie´ˆ p (ne´ˆ u ban d¯oc có Windows 95/98 thì caˆ`n nha´ˆ n phím ˙
˙ khi kho’’i d¯oˆng d¯eˆ’ hieˆ’n˙ thi trình d¯o’n˙ cho˙ phép chon DOS), hoa˘c ˙ ˙ ˙ qua hoˆp thoai lu’a chon khi nha´ˆ n ˙leˆnh ta´˘ t máy (shutdown) Windows 95/98. ˙ ˙ ˙ ˙ ˙ Sau khi vào DOS hãy chuyeˆ’n sang thu’ muc C:\LOADLIN (leˆnh CD \LOADLIN) và ˙ ˙ thu’c hieˆn leˆnh ˙ ˙ ˙ C:\LOADLIN> LOADLIN vmlinuz /dev/hda3 ro vga=ask
hoa˘c, ne´ˆ u ban d¯oc muo´ˆ n nap nhân cùng vo´’i oˆ’ d¯ı˜a RAM: ˙ ˙ ˙ ˙ C:\LOADLIN> LOADLIN vmlinuz /dev/ram rw initrd=diskimage
Còn có theˆ’ ghi ta´ˆ t ca’ các tham so´ˆ cu’a leˆnh loadlin.exe vào taˆp tin (ví du vo´’i tên params) ˙ ˙ ˙ và goi câu leˆnh d¯ó o’’ dang sau: ˙ ˙ ˙ C:\LOADLIN> LOADLIN @params
Kha’ na˘ng này d¯a˘c bieˆt có ích khi d¯u’a nhieˆ`u tham so´ˆ dòng leˆnh và khi d¯oˆ dài ˙ so´ cu’a câu˙ lenh cu’a dòng leˆnh lo´’˙n ho’n˙ 127 ký tu’. Mô ta’ d¯aˆ`y d¯u’ ta´ˆ t ca’ các tham ˆ ˆ ˙ loadlin.exe ˙có theˆ’ tìm tha´ˆ y trong˙ taˆp tin PARAMS.DOC hoa˘c Internet trên trang ˙ ˙ http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html và http://rsphy1.anu.edu/ gpg109/Bo HOWTO.html
26
Cài d¯a˘t HD ¯ H Linux trên cùng máy tính vo´’i Windows ˙
Bây gio`’ ban d¯oc có theˆ’ su’’ dung cách này d¯eˆ’ kho’’i d¯oˆng Linux. Công vieˆc duy nha´ˆ t còn ˙ pha’i gõ ˙leˆnh loadlin vo´’i ta´ˆ t ca’ ˙các tham so´ˆ sau moˆ˜˙i laˆ`n kho’’i d¯oˆng lai là làm sao˙d¯eˆ’ không ˙ vào tap tin autoexec.bat hoa˘c tao mot tap tin lenh˙(ví ˙ lai. Có theˆ’ vie´ˆ t thêm leˆnh goi loadlin ˆ ˆ ˆ ˆ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ’ ´ du, linux.bat), và khi chay taˆp tin này, máy tính se˜ chuyeˆn vào cheˆ d¯oˆ DOS tru’o´’c, sau˙ d¯ó thì ˙ y Linux. Tác gia’ cho˙ra˘`ng ˙ nhung thông tin d d a ra o’ trên d ’ d ’ ˙tao tap tin bat ca`n thie´ t. cha ˜’ ¯ã ¯u’ ¯u ¯eˆ ˆ ˆ ˆ ’ ˙ ˙ ˙ ` ` ` Caˆn nói thêm ra˘ng, không d¯u’o’c kho’’i d¯oˆng Linux tu`’ giao dieˆn d¯oˆ hoa DOS/Windows và caˆ`n ˙ ˙ va˘n ba’n thông thuo`ng), (d¯ây ˙là taˆp tin ta˘´t moˆt vài tùy chon trong taˆp˙tin aˆ’n C:\MSDOS.SYS ’’ ˙ ˙ hai dòng ˙ sau (ne´ u chua có): ba˘`ng ˙cách thêm vào ˆ ’ BootGUI=0 Logo=0
Dòng d¯aˆ`u tiên ta´˘ t giao dieˆn d¯oˆ` hoa, và DOS se˜ d¯u’o’c kho’’i d¯oˆng thay cho Windows 95/98. ˙ ˙ ˙ ˙ (D ¯ eˆ’ cha˙y giao dieˆ˙n d¯oˆ` ho˙a, caˆ`n nhaˆ˙p câu leˆ˙nh C:> win). Logo=0 ta˘´t vieˆc hieˆ’n thi bieˆ’u tu’o’ng Windows (cu’’a soˆ’). Va´ˆ n d¯eˆ` o’’ choˆ˜, d¯o´ˆ i vo´’i moˆt so´ˆ cac ˙ ˙ t màn˙hình tro´ ng ro˜ng sau khi kho’i d ng, ne´ u nhu có˙ hie’n thi ˙ d a ra mo màn hình Linux se ˜ ¯u’ ˆ ˆ ˆ ˆ ˆ ’ ¯oˆ ’ ˙ ˙ ˙ bieˆ’u tu’o’ng Windows. ˙
Chu’o’ng 3 Bash To´ˆ t goˆ˜ ho’n to´ˆ t nu’o´’c so’n – ca dao tuc ngu˜’ Vieˆt Nam ˙ ˙ Trong phaˆ`n này chúng ta se˜ d¯eˆ` caˆp d¯e´ˆ n va´ˆ n d¯eˆ` làm vieˆc vo´’i Linux o’’ che´ˆ d¯oˆ text, hay còn ˙ ng nguo`i dùng Linux ˙ ˙ o`ng nghı se d¯u’o’c goi là console hoa˘c terminal. Nhu mo´’i (newbie) thu ˜’ ˜ ˜ ’’ ’’ ˙ gio` làm viec ˙o’ che´ d này, vì d có giao dien d ` hoa. Tuy nhiên d là mot ý kie´ n cha’˘˙ng bao ¯ã ¯ây ˆ ’ ˆ ¯oˆ ˆ ¯oˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ ’ ` ´ ` ´ ’ sai laˆm, bo’i vì raˆt nhieˆu công vieˆc có theˆ thu’c hieˆn nhanh và thuaˆn tieˆn trong cheˆ d¯oˆ này ho’n ˙ ´ d˙ text cu’a HDH˙Linux ˙ không pha’i ˙là che´ d là su’’ dung giao dieˆn d¯oˆ` hoa. Và ˙dù sao thì che ˆ ¯oˆ ˆ ¯oˆ ¯ ˙ ˙ ˙ ˙ ´ ´ ´ text moˆt tieˆn trình cu’a MS-DOS. Vì Linux là HD H d¯a tieˆn trình, nên ngay trong cheˆ d¯oˆ text˙ ¯ ˙ ’ na˘ng làm viec trong vài cu’a so’. Và d ’ soan tha’o mot tap tin va˘n ba’n không˙ nha´ t d¯ã có kha ¯eˆ ˆ ˆ ˆ ˆ ’ ˆ ˙ ˙các máy có ca´ u hình pha`n thie´ˆ t pha’i chay các trình˙ soan tha’o lo´’n và chaˆm chap ˙(d¯a˘c bieˆt trên ˆ ˆ ˙ ˙ ˙ ˙ cu´’ng tha´ˆ p) cu˙’ a môi tru’o`’ng ˙d¯oˆ` hoa. ˙
3.1
Heˆ vo’ là gì? ˙
Chúng ta thu’o`’ng nói "ngu’o`’i dùng làm vieˆc vo´’i heˆ d¯ieˆ`u hành". ¯Dieˆ`u này không hoàn toàn ˙ d oc˙ thuc hien bo’i mot chuong trình d ˘ c biet. d¯úng, vì trên thu’c te´ˆ "liên heˆ" vo´’i ngu’o`’i dùng ¯a ¯u’ ’ ˆ ’ ˆ ’ ˆ ’’ ˙ d d ` cap - he vo’˙, hay˙ shell, ˙ d ’ làm˙ viec trong che´ ˙d text ˙ Có hai dang cu’˙a chu’o’ng trình ¯ã ¯eˆ ˆ ¯eˆ ˆ ˆ ˆ ¯oˆ ˙ (Graphical User Interface), ˙ (giao dieˆn˙ dòng leˆnh) và giao dieˆn d¯oˆ` ˙hoa GUI thu’c hieˆn˙"liên ˙ ˙ ˙ ˙ ˙ nào heˆ" vo´’i ngu’o`’i dùng trong môi tru’o`’ng d¯oˆ` hoa. Caˆ`n nói ngay ra`˘ ng, ba´ˆ t ky` chu’o’˙ng trình ˙ trong Linux có theˆ’ kho’’i d¯oˆng tu`’ dòng leˆnh˙ cu’a heˆ vo’ (ne´ˆ u máy chu’ X d¯ã chay), cu˜ng nhu’ ˙ nh cu’a he vo’ tuong d ong ˙vo´i viec nháy qua giao dieˆn d¯oˆ` hoa. Chay˙ chu’o’ng trình˙ tu`’ dòng le ˆ ˆ ’ ’ ¯u’ ’ ’ ˆ ˙ ˙ ˙ ˙ ˙ ˙ trình ’ ´ ’ (d¯úp) chuoˆt lên bieˆu tu’o’ng cua chu’o’ng trình trong GUI. ¯Du’a các tham soˆ cho chu’o’ng ˙ nh tuong d ˙ong vo´i viec chúng ta kéo và tha’ cái gì d lên bie’u tuong chuong trình trên dòng le ¯ó ˆ ˆ ’’ ’ ’ ¯u’ ’ ’ ˆ ’’ ˙ ˙ ˙ ’ ` ´ trong môi tru’o`’ng d¯oˆ hoa. Nhu’ng ma˘t khác, moˆt soˆ chu’o’ng trình không theˆ chay o’’ GUI và chı’ ˙ lenh. Nói ˙ngoài le` mo ˙ ˙ có theˆ’ thu’c hieˆn tu`’ dòng ˆ ˆ ˆ t chút, tên goi "heˆ vo’" bi pha’n d¯o´ˆ i ra´ˆ t nhieˆ`u. ˙ ˙ ˙ ˙ ˙ ˙ ˙ Theo ý kie´ˆ n cu’a moˆt so´ˆ chuyên gia ngôn ngu˜’ cu˜ng nhu’ chuyên gia Linux thì nên goi chu’o’ng ˙ trình này moˆt cách˙d¯úng ho’n là "trình xu’’ lý leˆnh" hay "trình biên dich leˆnh". Tuy nhiên, tên goi "heˆ vo’" ˙(shell) d¯u’o’c dùng cho các chu’o’ng˙ trình dùng d¯eˆ’ biên di˙ch leˆ˙nh trong che´ˆ d¯oˆ text ˙ mo ˙ i he tho´ ng UNIX. ˙ Trên các he tho´ ng UNIX d `u tiên có mo˙t chu˙ong trình, goi là˙ sh, trên ¯aˆ ˆ ˆ ˆ ˆ ˆ ’’ ˙ d có vie´ˆ t ta˘´t˙ cu’a˙ shell. Sau d¯ó, vài bie´ˆ n˙ theˆ’ cu’a sh d¯u’o’c phát trieˆ’n và˙ làm to´ˆ t ho’n, trong ¯ó Bourne shell - phiên ba’n mo’’ roˆng cu’a sh, vie´ˆ˙t bo’’i Steve Bourne. Du’ án GNU (du’ án phát trieˆ’n chu’o’ng trình u´’ng dung cu’a˙ Stollman, xem http://www.gnu.org/) ˙sau d¯ó cho ra˙ d¯o`’i heˆ vo’ bash, tên goi cu’a nó d¯u˙’o’c gia’i mã ra là Bourne-again shell, tu´’c là "lai là heˆ vo’ ˙ ˙ ˙ ˙ ˙
28
Bash
cu’a Bourne". Trên tie´ˆ ng Anh d¯ây là moˆt cách cho’i chu˜’, vì tu`’ Bourne d¯oc gio´ˆ ng vo´’i tu`’ borne (sinh ra, d¯e’ ra), và nhu’ the´ˆ bash còn có˙ theˆ’ gia’i mã là "shell d¯u’o’c sinh ˙ra laˆ`n hai". Tie´ˆ p theo chúng ta se˜ chı’ xem xét bash, vì the´ˆ o’’ du’o´’i khi nói d¯e´ˆ n heˆ vo’˙, xin ngaˆ`m hieˆ’u d¯ó là bash Tu’ moˆt mình bash không thu’c hieˆn moˆt công vieˆc u´’ng dung˙ nào. Nhu’ng nó hoˆ˜ tro’ vieˆc thu’c thi˙ mo˙ i chu’o’ng trình khác, tu`’˙ vieˆc˙ tìm ˙kie´ˆ m chu’o˙’ng trình˙ d¯u’o’c goi, chay chúng d˙¯e´ˆ n ˙vieˆc ˙toˆ’ ˙ lieu d `u vào/d `u ra. Ngoài ˙ ra, he vo’ chiu trách nhiem˙ ve` công ˙ ˙ c vo´i các bie´ n˙môi chu´’c du vie ˜’ ˆ ¯aˆ ¯aˆ ˆ ˆ ˆ ˆ ˆ ’ ˙ tham so´ lenh. ˙ Nhung tính cha´ t tru’o`’ng và ˙thu’c hieˆn moˆt vài bie´ˆ n d¯oˆ’i (the´ˆ˙, hoán˙d¯oˆ’i vi trí) các ˆ ˆ ˆ ’ ˙ cu manh cu’a ngu ˙ o`i dùng, d là nó chính cu’a heˆ˙ vo’, ˙nho`’ ˙d¯ó d¯u’a heˆ vo’ tro’’ thành moˆt công ¯ó ’’ ˙ d d oc chu´ng minh ra`˘ ng, bao goˆ`m moˆ˙t ngôn ngu˜’ laˆp trình˙ d¯o’n gia’n. Trong˙ toán hoc˙ tu`’ lâu ¯ã ¯u’ ’ ’ ˙ t toán nào˙ cung có the’ d oc xây dung tu` hai ˙ (ba) thao tác˙ co ba’n và mot toán ba´ˆ t ky` moˆt thua ˜ ˆ ˆ ˆ ¯u’ ’ ’ ’ ’ ˙ ˙ ˙ tien ˙ ˙ ` ´ ` tu’’ d¯ieˆu kieˆn. Heˆ vo’ cung caˆp các toán tu’’ d¯ieˆu kieˆn và toán tu’’ vòng la˘p. Nó su’’ dung các ˆ ˙ ˙ ˙ d¯eˆ’ làm ích và chu˙’o’ng trình khác (có trong thành phaˆ`n he˙ˆ d¯ieˆ`u hành, hay d¯u’o˙’c cài d¯a˘t riêng) ˙ d a các tham ˙ ho˜ tro. Do`ng tho`i ˙cho phép các thao tác co’ ba’n cho ngôn ngu˜’ laˆp trình mà nó ¯u’ ˆ ’¯ ˆ ’ ˙ ˙ ´ ´ ’ ’ soˆ cu˜ng nhu’ keˆt qua làm vieˆc cua moˆt chu’o’ng trình to´’i các chu’o’ng trình khác hay to´’i ngu’o`’i ˙ t ngôn˙ ngu lap trình manh. Dây cung là su´c manh và là mot dùng. Ke´ˆ t qua’ thu d¯u’o’c là mo ˜’ ˆ ˜ ˆ ˆ ’ ¯ ˙ ˙ ˙ ˙ ˙ ’ ´ ` ` ´ trong các chu´’c na˘ng chính cu’a heˆ vo’. Tru’o´’c khi ba˘t d¯aˆu phaˆn này, ban d¯oc nên bieˆt các toˆ ho’˙p ˙’n viec nhap du lieu trên dòng lenh. ˙ Nên ˙ nho´ ít nha´ t cách ˙su’ phím chính, su’’ dung d¯eˆ’ d¯ieˆ`u khie ˆ ˆ ˜’ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ ˙ các phím có mui tên. dung cu’a các (toˆ’ ˙ho’p) phím +, +, và ˜ ˙ ˙
3.2
Các ký tu’ d¯a˘c bieˆt ˙ ˙ ˙
Heˆ vo’ bash su’’ dung moˆt vài ký tu’ tu`’ boˆ 256 ký tu’ ASCII cho các muc d¯ính riêng, hoa˘c d¯eˆ’ ˙ bie˙ˆ’u thi các thao ˙tác nào˙ d¯ó, hoa˘c ˙d¯eˆ’ bie´ˆ˙n d¯oˆ’i bieˆ’u˙thu´’c. Các ký tu’ này˙ bao goˆ`m: ˙ ˙ ˙ ‘ ~ ! @ # $ % ^ & * ( ) _ -- [ ] { } : ; ’ " / \ > < và ký tu’ vo´’i mã 0, ký tu’ hàng mo´’i (tao ra khi nha´ˆ n phím <Enter>) và ký tu’ khoa’ng tra˘´ng. Phu ˙ tình huo´ ng các ˙ ký tu d ˘ c˙biet này có the’ su’ dung vo´i ý nghıa ˙d ˘ c biet cu’a nó hay˙ thuoˆc vào ˜ ¯a ˆ ˆ ˆ ’ ˆ ’ ¯a ’ ˙ ˙ ˙ ˙ ˙ ˙ ´ ’ su’ dung nhu’ moˆt ký tu’ thông thu’o`’ng. Nhu’ng trong d¯a soˆ các tru’o`’ng ho’p không ˙khuyên dùng ˙ tu vo´i giá ˙ tri thu ˙´ hai. Truo´c he´ t d là viec su’ dung chúng trong ˙tên tap tin và thu muc. các ký ˆ ’ ˆ ’ ’ ’ ’ ’ ˆ ¯ó ’ ˙ ˙ ˙ ˙ ´ ´ ´ Tuy nhiên các ký tu’ _, - và . (daˆu gach du’o´’i, gach ngang và daˆu chaˆm) thu’˙o`’ng d¯u’o’c su’’ du˙ng ˙ cho tha´ y ˙không pha’i lúc nào chúng cung có ˙giá tri ˙d ˘ c trong tên taˆp tin, và˙ d¯ây là moˆt ví du ˜ ¯a ˆ ˙ bieˆt. Trong˙ tên taˆp tin chı’ da´ˆ u˙cha´ˆ m ˙(.) và gach chéo (/) có giá tri d¯a˘c bieˆt. Ký hieˆu gach ˙chéo ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ dùng d¯eˆ’ phân chia tên các thu’ muc trong d¯u’o`’ng daˆ˜n, còn da´ˆ u cha´ˆ m có giá tri d¯a˘c bieˆt khi nó ˙ a d˘c là ký tu’ d¯aˆ`u tiên trong tên taˆp tin˙ (cho bie´ˆ t taˆp tin là "aˆ’n"). Vieˆc d¯u’a ngay ta´ˆ˙t ca˙’ ý nghı ˜ ¯a ˙ ˙ ˙ ˙ ´ bieˆt cu’a nhu˜’ng ký tu’ này và các tình huoˆng su’’ dung chúng tam tho`’i không có ích. Chúng ˙ta ˙ ca`n su’ dung ˙ d´ n. Tuy nhiên, 3 ký hieu có se˜˙xem xét chúng daˆ˙`n daˆ`n trong các phaˆ`n sau, khi ¯eˆ ˆ ˆ ’ ˙ nguoc) có the’ goi là "ký˙ hieu ý nghı˜a lo´’n và caˆ`n d¯eˆ` caˆp d¯e´ˆ n d¯aˆ`u tiên. Ký hieˆu \ (gach chéo ˆ ˆ ’’ ˙ ˙ ˙ ˙ ˙ ´ ´ ´ xóa bo’ ý nghı˜a d¯a˘c bieˆt" cho baˆt ky` ký tu’ d¯a˘c bieˆt nào, d¯u´’ng ngay sau \. Ví du, neˆu muoˆ˙ n ˙˘´ ng ˙trong tên tap tin, thì˙ chúng ˙ ˙ta ca`n d ˘ t truo´c ký tu khoa’ng tra ˙ ˘´ ng d mot su’’ dung khoa’ng tra ¯ó ˆ ˆ ˆ ¯a ’ ’ ’ ˙ ˙ ˙ ˙ ˙ ˙ da´ˆ u Ví du, câu leˆnh sau: ˙ ˙ kênh giao tác teppi82@teppi:~$ cp lennon_imagine lennon\ imagine
Các ký tu’ ’ và " (ngoa˘c d¯o’n và ngoa˘c kép) có theˆ’ goi là "các ký tu’ trích daˆ˜n". Moˆ˜i ký tu’ ˙ d oc su’ du˙ng trong mot ca ˙ ˙ ˙ ˙ này luôn luôn ¯u’ ’ ’ ˆ ˘ p vo´’i ba’n sao cu’a chính nó d¯eˆ’ d¯óng khung moˆt bieˆ’u ˙ nhu ˙trong các va˘˙n ba ˙’ n, sách báo, . . . thông thuo`ng. Ne´ u nhu mo˙t d n thu´’c nào d¯ó, gio´ˆ ng ˆ ’ ’’ ’ ˆ ¯oa ˙ ˙
3.3 Thu’c thi các câu leˆnh ˙ ˙
29
va˘n ba’n nào d¯ó d¯a˘t trong ngoa˘c d¯o’n, thì ta´ˆ t ca’ các ký tu’ na`˘ m trong ngoa˘c d¯o’n này có giá ˙ ˙ ’ lai vo´i ví du su’ tri nhu’ các ký tu’ thông thu’o`’ng,˙ khôn moˆt ký tu’ nào có ý ˙nghı˜a d¯a˘c bieˆt. Tro ’ ’ ’ ˙ ˙ ˙ tên "lennon ˙ ˙ ˙ ˙ ˙ dung khoa’ng tra˘´ng trong tên taˆp tin o’’ trên, có theˆ’ nói, ne´ˆ u muo´ˆ n d¯a˘t taˆp tin cái ˙ ˙ ˙ imagine" caˆ`n d¯u’a tên d¯ó vào da´˙ˆ u ngoa˘c: ˙ kênh giao tác teppi82@teppi:~$ cp lennon_imagine ’lennon imagine’
Su’ khác nhau trong cách su’’ dung ký tu’ ’ và " d¯ó là, trong ngoa˘c d¯o’n ma´ˆ t ý nghı˜a d¯a˘c bieˆt ´ˆ t ca’˙ các ký tu’, còn trong ngoa˘c˙kép - ta´ˆ˙t ca’ chúng ngoai tru`’ $,˙ ’ và \ (da´ˆ u d¯ô la, ˙ngoa˘˙c ta ˙ ˙ ˙ nguoc). ˙ d¯o’n và da´ˆ u gach ’’ ˙ ˙
3.3
Thu’c thi các câu leˆnh ˙ ˙
Nhu’ d¯ã nói o’’ trên, moˆt trong các chu´’c na˘ng chính cu’a heˆ vo’ là toˆ’ chu´’c vieˆc thu’c hieˆn các câu ˙ o`˙i dùng hai leˆnh mà ngu’o`’i dùng ˙d¯u’a vào trên dòng leˆnh. Heˆ vo’, nói˙ riêng, cung ca´ˆ p ˙cho ngu ’’ ˙ ˙ ˙ thao tác d¯a˘c bieˆt d¯eˆ’ toˆ’ chu´’c vieˆc d¯u’a các câu leˆnh trên dòng leˆnh: ; và &. ˙ ˙ ˙ ˙ ˙
3.3.1
Thao tác ;
Ma˘c dù ngu’o`’i dùng thu’o`’ng chı’ nhaˆp trên dòng leˆnh tu`’ng câu leˆnh moˆt, nhu’ng còn có theˆ’ d¯u’a vào˙ dòng leˆnh d¯ó ngay laˆp tu´’c vài˙ câu leˆnh, và ˙chúng se˜ thu’c˙ hieˆn ˙laˆ`n lu’o’t tu`’ câu leˆnh này ˙ khác. De’ làm ˙ d oc d `u này˙ ca`n su’ dung ký tu d˙ ˘ c bie ˙ t - ;. Ne ˙´ u dùng ký˙ tu này d¯e´ˆ n câu leˆnh ¯u’ ’ ¯ieˆ ˆ ˆ ’ ˆ ˆ ’ ¯a ’ ¯ ˙ các câu lenh, thì ˙câu lenh tie´ p theo se˙d oc coi˙ nhu ˙ tham ˙ so´ cu’a lenh phía tru ˙ o´c. d¯eˆ’ phân chia ˜ ¯u’ ’ ˆ ˆ ˆ ˆ ˆ ’ ’’ ˙ gì d gio´ ng nhu˙sau: ˙ Nhu’ vaˆy, ne´ˆ u nhaˆp vào˙ dòng leˆnh cái ¯ó ˆ ’ ˙ ˙ ˙ kênh giao tác teppi82@teppi:~$ command1 ; command2
thì heˆ vo’ d¯aˆ`u tiên se˜ thu’c hieˆn câu leˆnh command1, cho`’ cho leˆnh d¯ó hoàn thành, sau d¯ó ˙ ˙ ˙thành, sau ˙ d lai d a ra dòng nhap ˙lenh và cho` các hành d ng chay command2, cho`’ leˆnh hoàn ¯ó ¯u’ ¯oˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ tie´ˆ ˙p theo cu’a ngu’o`’i dùng.
3.3.2
Thao tác &
Thao tác & d¯u’o’c dùng d¯eˆ’ toˆ’ chu´’c vieˆc thu’c hieˆn các câu leˆnh trong che´ˆ d¯oˆ neˆ`n sau. Ne´ˆ u d¯a˘t ˙ tra’˙lai quye ˙ `n d `u khie ˙ ’n cho nguo`i ˙dùng ngay sau khi ˙ da´ˆ u & ngay sau˙ câu leˆnh, thì heˆ vo’ se ˜ ˆ ¯ieˆ ˆ ’’ ˙ ˙ câu lenh˙ d hoàn thành. Ví du, ne´ u nhap vào dòng lenh chay câu leˆnh, mà không d¯o’i cho ¯ó ˆ ˆ ˆ ˆ ˙ ˙ ˙ ˙ ˙ ˙ ’ "command1 & command2 &", thì heˆ vo chay câu leˆnh command1, ngay laˆp tu´’c chay le˙ˆ nh ˙ ’ lai dòng ˙ nha˙p lenh cho nguo`i dùng.˙ ˙ ˙ command2, và sau d¯ó không chaˆm treˆ˜ tra ˆ ˆ ’’ ˙ ˙ ˙ ˙
3.3.3
Thao tác && và ||
Các thao tác && và || lá nhu˜’ng thao tác d¯ieˆ`u khieˆ’n. Ne´ˆ u trên dòng leˆnh là command1 && command2, thì command2 se˜ thu’c hieˆn và chı’ thu’c hieˆn trong tru’o`’ng ho’p ˙trang thái thoát ra cu’a leˆnh ˙ (0), ˙ tu´c là lenh˙d thu ˙ ˙ ˙ ˙ command1 ba˘`ng không ¯ó ’c hieˆn thành công. Moˆt cách tu’o’ng tu’, ne´ˆ u dòng ˆ ’ ˙ ˙ ˙ ˙ ˙ leˆnh có dang command1 || command2, thì command2 se˜ thu’c hieˆn và chı’ thu’c hieˆn khi ˙ ng thái˙thoát cu’a lenh command1 khác không. Chúng ta se không ˙ xem ˙ xét ma˘t ky ˙ thua ˙ t cu’a tra ˜ ˜ ˆ ˆ ˙ ˙ ˙ ˙
30
Bash
vieˆc thu’c hieˆn moˆt câu leˆnh nào d¯ó. Chı’ có theˆ’ nói nga´˘ n gon ra`˘ ng, heˆ vo’ pha’i tìm mã (code) ˙ ong˙ trình, ˙ nap˙ mã d ˙vào bo nho´, chuye’n các tham so´ d˙ nhap trên˙ dòng lenh vào cho câu chu ¯ó ˆ ¯ã ˆ ˆ ˆ ˆ ’’ ’ ˙ ˙ ˙ leˆnh, và sau khi thu’c hieˆn xong thì theo moˆt cách nào d¯ó tra’ lai ke´ˆ t qua’ thu’˙c hieˆn leˆnh này ˙ nguo`i dùng hay˙ tie´ n˙ trình khác. Chúng˙ta se xem xét qua các ˙ buo´c này.˙ Buo´˙c d `˙u tiên cho ˜ ˆ ’’ ’’ ’ ’ ¯aˆ tìm kie´ˆ m câu leˆnh. Các câu leˆnh chia thành hai loai: noˆi trú (mã cu’a chúng có trong mã cu’a chính heˆ vo’) và˙ ngoai trú (mã˙ cu’a chúng na`˘ m trong˙ moˆ˙t taˆp tin riêng le’ trên d¯ı˜a). Heˆ vo’ luôn ˙ i trú, còn d ’ tìm các lenh ngoai ˙trú ˙nguo`i dùng, theo nguyên ˙ta˘´c, pha’i luôn tìm˙ tha´ˆ y leˆnh no ¯eˆ ˆ ˆ ’’ ˙ ˜n d `y d ’ to´i tap tin tu˙ong u´ng.˙ Tuy nhiên d ’ go "gánh na˘ng" cho nguo`i chı’ cho heˆ vo’ d¯u˙’o`’ng da ¯eˆ ˜’ ˆ ¯aˆ ¯u ’ ˆ ’’ ’’ ’ ˙ ˙ ˙ ´ ’ dùng heˆ vo bieˆt cách tìm leˆnh ngoai trú trong các thu’ muc, mà d¯u’o’c lieˆt kê trong d¯u’o`’ng daˆ˜n ˙ Chı’ khi (he vo’) không ˙ ˙ ’ tìm tha´ y tap tin ca`n˙ thie´ t trong ˙ các ˙ thu muc d nó mo´i tìm kie´ˆ m. the ¯ó, ˆ ˆ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ ´ ` ` ` quyeˆt d¯inh ra˘ng ngu’o`’i dùng d¯ã nhaˆm khi nhaˆp tên leˆnh. Veˆ cách thêm thu’ muc vào d¯u’o`’ng daˆ˜n tìm˙kie´ˆ m chúng ta se˜ nói d¯e´ˆ n o’’ du’o´’i, còn ˙bây gio`’˙chúng ta se˜ xem xét cách ˙heˆ vo’ toˆ’ chu´’c vieˆc d¯u’a du˜’ lieˆu vào cho câu leˆnh d¯ang thu’c hieˆn và vieˆc d¯u’a ke´ˆ t qua’ to´’i cho ngu’˙o`’i dùng. ˙ ˙ ˙ ˙ ˙ ˙
3.4 ¯Daˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n 3.4.1
Dòng du˜’ lieˆu vào-ra ˙
Khi moˆt chu’o’ng trình d¯u’o’c thu’c hieˆn, nó d¯u’o’c cung ca´ˆ p ba dòng du˜’ lieˆu (hay còn goi là ˙ ˙ ˙ ˙ ˙ ˙ kênh): ˙ • d¯aˆ`u vào tiêu chuaˆ’n (standard input hay stdin). Qua kênh này du˜’ lieˆu d¯u’o’c d¯u’a vào cho ˙ ˙ chu’o’ng trình; • d¯aˆ`u ra tiêu chuaˆ’n (standard output hay stdout). Qua kênh này chu’o’ng trình d¯u’a ra ke´ˆ t qua’ làm vieˆc cu’a mình; ˙ • kênh thông báo loˆ˜i tiêu chuaˆ’n (standard error hay stderr). Qua kênh này chu’o’ng trình d¯u’a ra thông tin veˆ` loˆ˜i. Tu`’ d¯aˆ`u vào tiêu chuaˆ’n chu’o’ng trình chı’ có theˆ’ d¯oc, còn hai d¯aˆ`u ra và kênh thông báo loˆ˜i ˙ d `u vào có liên ke´ t1 vo´i bàn phím, còn d¯u’o’c chu’o’ng trình su’’ dung chı’ d¯eˆ’ ghi. Theo ma˘c d¯inh ¯aˆ ˆ ’ ˙ o´ng d´ n terminal cu’a˙ngu˙o`i dùng. Nói cách khác, toàn bo thông tin d¯aˆ`u˙ ra và kênh báo loˆ˜i hu ¯e ˆ ˆ ’’ ’’ ˜ cu’a leˆnh hay chu’o’ng trình mà ngu’o`’i dùng d¯ã chay, và ta´ˆ t ca’ nhu˜’ng thông báo loˆi,˙ d¯u’o’c d¯u’a ˙ d `u ra cu’’a˙ soˆ’ terminal. Tuy nhiên, chúng ta se˜ tha´ˆ y o’˙’ du’o´’i, có theˆ’ chuyeˆ’n hu’o´’ng thông báo ¯aˆ ra (ví du, vào taˆp tin). ¯Deˆ’ cho tha´ˆ y kênh thông báo loˆ˜i tiêu chuaˆ’n làm vieˆc nhu’ the´ˆ nào, hãy ˙ nh ls vo´i mot tham so´ không d ˙ thu’c hieˆ˙n câu le ¯úng, ví du dùng tham so´ˆ là moˆt tên taˆp tin ˆ ˆ ’ ˆ ˙ ˙`n tai. Trong ˙ ˙ p này, ls d a mot tin nha˘´n˙báo lo˜i ra kênh thông˙ báo lo˜˙i tiêu không to tru’o`’ng ho ¯u’ ˆ ˆ ˆ ˆ ’ ˙ o`ng hop này kênh thông báo lo˜i tiêu chua’n chuaˆ’n. Tuy ˙nhiên, d¯o´ˆ i vo´’i ngu’o˙`’i dùng thì trong tru ˆ ˆ ’’ ’ ˙ ’ ˜ ` ´ ’ ’ không khác gì vo´’i d¯aˆu ra tiêu chuaˆn, bo’i vì chúng ta cu˜ng thaˆy thông báo loˆi d¯ó trên cu’a soˆ’ terminal. Làm vieˆc vo´’i d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n d¯u’o’c minh hoa to´ˆ t nha´ˆ t qua ví du các ˙ ˙ ˙ ˙ leˆnh echo và cat. ˙
3.4.2
Leˆnh echo ˙
Câu leˆnh echo dùng d¯eˆ’ chuyeˆ’n to´’i d¯aˆ`u ra tiêu chuaˆ’n dòng ký tu’, mà d¯u’o’c d¯u’a vào làm tham ˙ ta´ t công ˙ viec. Hãy thu’ thuc so´ˆ cho˙ nó. Sau d¯ó leˆnh này d¯u’a ra tín hieˆu chuyeˆ’n dòng và hoàn ˆ ˆ ’ ’ ˙ ˙ ˙ hieˆn câu leˆnh sau: ˙ ˙ ˙ 1
gio´ˆ ng liên ke´ˆ t hóa hoc ˙
3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng ´oˆng và d¯aˆ`u loc ˙
31
kênh giao tác [user]$ echo ’xin chao cac ban!’
Tôi nghı˜ ra`˘ ng lo`’i gia’i thích se˜ là thu`’a thãi (chı’ xin hãy su’’ dung da´ˆ u ngoa˘c d¯o’n, ne´ˆ u không ˙ ke´ˆ t qua’ có theˆ’ se˜ khác. Ne´ˆ u ban d¯oc chú ý thì có theˆ’ gia’i thích˙tai sao lai khác). ˙ ˙ ˙ ˙
3.4.3
Leˆnh cat ˙
Chúng ta se˜ xem xét leˆnh cat o’’ d¯ây vì leˆnh này thu’o`’ng làm vieˆc vo´’i d¯aˆ`u vào và d¯aˆ`u ra tiêu ˙’ a lenh cat huo´ng to´i˙d `u ra tiêu chua’n. De’ chu´ng chuaˆ’n. Theo ma˘c d¯inh˙ke´ˆ t qua’ làm vieˆc cu ˆ ˆ ¯ ˆ ’ ’’ ’ ¯aˆ ˙ theo ˙ ma˘c d nh tie´ p nha ˙ n dòng ˙ du lieu nhap vào, hãy chay lenh cat không minh là leˆnh này ˜’ ˆ ¯i ˆ ˆ ˆ ˆ ˙ tro ˙’ chuye’n to ˙ ˙ ˙ ˙ ˙ ˙´ . Ke´ t qua’ là con có tham so ˆ ˆ ˆ ´’i moˆt dòng mo´’i, và ho’n nu˜’a có ve’ nhu’ không có gì xa’y ra. Lúc này câu leˆnh cho`’ các ký tu’ d¯e´ˆ n tu`’˙ d¯aˆ`u vào tiêu chuaˆ’n. Hãy nhaˆp ba´ˆ t ky` ký tu’ nào, ˙ to´i ˙ lap tu´c trên màn ˙ hình, tu´c là chuong trình ngay la˙p tu´c d a chúng và nó se˜ xua´ˆ t hieˆn ngay ˆ ’ ˆ ’ ¯u’ ’ ’’ ’ ˙ ˙ ˙ ’ ’ ´ ´ ` d¯aˆu ra tiêu chuaˆn. Có theˆ tieˆp tuc nhaˆp các ký tu’, và chúng cu˜ng se˜ xuaˆt hieˆn trên màn hình. ˙ d ’ nhap vào ˙ theo tu`ng dòng, vì the´ ne´˙ u ban nha´ n phím Thông thu’o`’ng bàn phím d¯u’o’c ca´ˆ˙ u hình ¯eˆ ˆ ˆ ˆ ˆ ’ ˙ ˙ ˙ <Enter>, dòng ký tu’ ban vu`’a nhaˆp se˜ d¯u’o’c d¯u’a to´’i leˆnh cat, và leˆnh này se˜ lai d¯u’a du˜’ lieˆu ra ˙ ˜i dòng ký tu ˙ nhap vào ˙se d oc hie˙n ra ˙ d˙ `u ra tiêu˙ chua’n.˙Nhu vay, mo màn hình thông qua ˜ ¯u’ ’ ˆ ¯aˆ ˆ ˆ ’ ˆ ’ ˆ ˙ cat. Ne´ u nha´ n˙ to’ ho ˙ ˙ ˙ hay laˆ`n: moˆt laˆ`n khi gõ và laˆ`n thu´’ hai bo’’i câu leˆnh ˆ ˆ ˆ ’p phím +, ˙ ˙ ˙ mà dùng d¯eˆ’ ngu`’ng vieˆc nhaˆp du˜’ lieˆu, chúng ta se˜ qua lai dòng nhaˆp leˆnh. Cu˜ng có theˆ’ su’’ ˙ ˙ ˙’ d ’ du`ng ˙chu˙ong trình d dung toˆ’ ho’p phím +, mà ˙là câu leˆnh trong heˆ vo ¯eˆ ’ ¯ang chay. ’’ ˙ ˙ ˙ ˙ ´ ´ Neˆu d¯u’a tên moˆt taˆp tin vào làm tham soˆ cho leˆnh cat, thì noˆi dung cu’a leˆnh này se˜ d¯u’˙o’c ˙`u ra tiêu chua˙’n d¯u’a to´’i d¯aˆ`u vào˙tiêu˙ chuaˆ’n, tu`’ d¯ó leˆnh cat se˜ d¯o˙ c noˆi dung này˙ và d¯u’a to´’i d¯a ˆ ˆ ˙ ˙ ˙ (xem so’ d¯oˆ`). `u vào tiêu chua `u ra ˆi dung ta ˆp tin -> ¯Da ˆ ˆ’n (stdin) --cat--> d¯a ˆ No ˙ ˙ ’ ˆn (stdout) tiêu chua ¯Dây chı’ là moˆ˙t tru’o`’ng ho˙’p riêng cu’a vieˆ˙c chuyeˆ’n hu’o´’ng du˜’ lieˆ˙u d¯aˆ`u vào, moˆ˙t co’ che´ˆ ra´ˆ t có ích cu’a heˆ vo’. Và ta´ˆ t nhiên chúng ta caˆ`n xem xét ky˜ ho’n co’ che´ˆ này. ˙
3.5
Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng ´oˆng và d¯aˆ`u loc ˙
Ma˘c dù, nhu’ d¯ã nói o’’ trên, thông thu’o`’ng d¯aˆ`u vào/d¯aˆ`u ra cu’a moˆt chu’o’ng trình liên ke´ˆ t vo´’i ˙ d ˘ c biet cho phép chuye’n các˙ d¯aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n, trong heˆ vo’ còn có các môi tru’o`’ng ¯a ˆ ˆ ˙ ˙ ˙ ` ` hu’o´’ng d¯aˆu vào/d¯aˆu ra.
3.5.1
Su’’ dung >, < và >> ˙
¯Deˆ’ chuyeˆ’n hu’o´’ng d¯aˆ`u vào/ra, su’’ du˙ng các ký hieˆ˙u ">", "<" và ">>". Thu’o`’ng su’’ du˙ng vieˆ˙c chuyeˆ’n hu’o´’ng d¯u˜’ lieˆu ra cu’a câu leˆnh vào taˆp tin. Du’o´’i d¯ây là moˆt ví du tu’o’ng u´’ng: ˙ ˙ kênh ˙ giao tác ˙ ˙ maikhai@fpt:/some/where$ ls -l > /home/maikhai/ls.txt
Theo leˆnh này danh sách taˆp tin và thu’ muc con cu’a thu’ muc, mà tu`’ d¯ó ngu’o`’i dùng ˙ tap tin /home/maikhai/ls.txt; ˙ ˙ thu’c hieˆn le˙ˆ nh ls2 se˜ d¯u’o’c ghi vào khi này ne´ˆ u taˆp tin ˆ ˙ ˙ ˙ ˙ ˙ ˙ 2
thu’ muc hieˆn tho`’i ˙ ˙
32
Bash
ls.txt không toˆ`n tai, thì nó se˜ d¯u’o’c tao ra; ne´ˆ u taˆp tin d¯ã có, thì noˆi dung cu’a nó se˜ bi ˙ sách nói trên.˙ Ne´˙u ban không ˙ muo´ n xóa noi dung ˙ xóa và ghi d¯è bo’’i danh cu˜ mà ghi thêm˙ ˆ ˆ ˆ ˙ ˙ du˜’ lieˆu d¯aˆ`u ra vào cuo´ˆ i taˆp tin, thì caˆ`n su’’ dung ký hieˆu >> thay cho >. Khi này khoa’ng ˙ có ý nghı ˙ a và chı’ dùng vo´i muc d tra´˘ ng˙ tru’o´’c và sau các ký ˙hieˆu > hay >> không ˜ ¯ích thuaˆn ’ ˙ ’n huo´ng không chı’ vào tap tin, mà còn to´i d `u˙ vào cu’a mo ˙t tieˆn, deˆ˜ nhìn. Ban có theˆ’ chuye ¯a ˆ ˆ ˆ ˆ ’’ ’ ˙ ˙ ˙ ˙ ’ ´ câu leˆnh khác hay to´’i moˆt thieˆt bi nào d¯ó (ví du, máy in). Ví du, d¯eˆ d¯u’a noˆi dung taˆp tin ˙ ’ su’ dung˙ lenh ˙ ˙ ˙’ a so’ terminal thu ˙´ hai3 có the /home/maikhai/ls.txt vu`’a˙tao o’’ trên to´’i cu ˆ ˆ ’ ’ ’ ˆ ˙ ˙ ˙ sau: kênh giao tác maikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2
Nhu’ ban tha´ˆ y, > dùng d¯eˆ’ chuyeˆ’n hu’o´’ng du˜’ lieˆu cu’a d¯aˆ`u ra. Chu´’c na˘ng tu’o’ng tu’ d¯o´ˆ i vo´’i ˙´ tu` trong tap tin ls.txt nhu sau ˙ (chú ý, d¯aˆ`u vào d¯u˙’o’c thu’c hieˆn bo’’i <. Ví du, có theˆ’ d¯e´ˆ m so ˆ ’ ˆ ’ ˙ lenh d n gia’n hon): ˙ t ví˙ du minh ˙ d¯ây chı’ là mo hoa, trên˙thu’c te´ˆ thu’o`’ng su’’ dung câu ¯o’ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ ˙ kênh giao tác maikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt
Cách chuyeˆ’n hu’o´’ng này thu’o`’ng d¯u’o’c su’’ dung trong các script, cho các câu leˆnh mà thu’o`’ng ˙ mot thao tác tie´ˆ p nhaˆn (hay cho`’) du˜’ lieˆu vào tu`’ bàn˙ phím.˙Trong script dùng d¯eˆ’ tu’ d¯oˆng hóa ˆ ˙ ˙ ˙ ˙ ˙ ghi sa˜˘ n ’ ` ´ nào d¯ó, có theˆ d¯u’a các thông tin caˆn thieˆt cho câu leˆnh tu`’ taˆp tin: trong taˆp tin này ˙ >> làm viec˙ vo´i các kênh tiêu nhu˜’ng gì caˆ`n d¯eˆ’ thu’c hieˆn leˆnh d¯ó. Bo’’i vì các ký hieˆu˙<, > và ˆ ’ ˙ chúng không chı’ d o˙c dùng theo các cách ˙quen thuoc, thuo`ng chuaˆ’n (d¯aˆ`u vào hoa˙˘ c d¯aˆ`˙u ra), ¯u’ ’ ˆ ’’ ˙ ˙ ˙ ’ ´ dùng, mà còn có theˆ theo cách khác, "la ma˘t" ho’n. Ví du, các câu leˆnh sau là tu’o’ng d¯u’o’ng: ˙ ˙ ˙ kênh giao tác [user]$ [user]$ [user]$ [user]$
cat > file cat>file >file cat > file cat
Tuy nhiên, tu’ chúng (không có moˆt leˆnh nào, tu´’c là không có kênh tiêu chuaˆ’n nào cho ˙ ˙ ˙ leˆnh) các ký tu’ chuye ˆ’n hu’o´’ng này không theˆ’ d¯u’o’c su’’ dung, nhu’ the´ˆ không theˆ’, ví du, nhaˆp ˙ dòng lenh˙sau: ˙ ˙ ˙ ˙ vào ˆ ˙ kênh giao tác [user]$ file1 > file2
mà thu d¯u’o’c ba’n sao cu’a moˆt taˆp tin nào d¯ó. Nhu’ng d¯ieˆ`u này không làm gia’m giá tri cu’a ˙ ’n có cho moi câu lenh. Khi này, có the’ chuye’n hu˙ o´ng co’ che´ˆ này, bo’˙’i vì các kênh tiêu˙ chua ˆ ˆ ˆ ˆ ’’ ˙ khác. De’ làm d oc d `u này, ca`n không chı’ d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n, mà còn ˙các kênh ¯u ¯ie ˆ ˆ ˆ ’ ’ ¯ ˙ ’ ’ ’ ´ ´ ` ´ d¯a˘t tru’o´’c ký hieˆu chuyeˆn hu’o´’ng soˆ cu’a kênh muoˆn chuyeˆn. ¯Daˆu vào tiêu chuaˆn stdin có soˆ 0, ˙’n stdout - so´ 1, kênh thông báo lo˜i stderr - so´ 2. Tu´c là lenh chuye’n huo´ng có d¯a˙ˆ`u ra tiêu chua ˆ ˆ ˆ ˆ ˆ ˆ ’ ’’ dang d¯aˆ`y d¯u’ nhu’ sau (xin d¯u’o’c nha˘´c lai, khoa’ng tra˘´ng canh > là không ˙nha´ˆ t thie´ˆ t): ˙ ˙ ˙ ˙ command N > M 3
ban caˆ`n dùng toˆ’ ho’p phím ++ d¯eˆ’ chuyeˆ’n to´’i cu’’a soˆ’ terminal này và d¯a˘ng nhaˆp tru’o´’c ˙ ˙ ˙
3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng ´oˆng và d¯aˆ`u loc ˙
33
Trong d¯ó, N và M - so´ˆ cu’a kênh tiêu chuaˆ’n (0, 1, và 2) hoa˘c tên taˆp tin. Trong moˆt vài ˙ hay tên tap tin, ˙ vì tru’o`’ng ho’p có su’’ dung các ký hieˆu <, > và >> mà không chı’ ˙ra so´ˆ kênh ˆ ˙ ˙ ˙ ˙ vào choˆ˜ còn thie´ˆ u se˜ d¯a˘t, theo ma˘c d¯inh, 1 ne´ˆ u dùng >, tu´’c là d¯aˆ`u ra tiêu chuaˆ’n, hoa˘c 0 ne´ˆ u ˙ dich ˙ Nhu ˙ the´ , khi không có so´ nào chı’ ra, > se d oc biên dùng <, tu´’c là d¯aˆ`u vào ˙tiêu chuaˆ’n. ˜ ¯u’ ’ ˆ ’ ˆ ˙ n là 1 >, còn < se˜ d¯u’o’c biên dich là 0 <. Ngoài vieˆc chuyeˆ’n hu’o´’ng các kênh tiêu˙ chuaˆ’n d¯o ’ ˙ ˙ ˙ gia’n nhu’ vaˆy, còn có kha’ na˘ng không nhu˜’ng chuyeˆ’n hu’o´’ng du˜’ lieˆu vào kênh này hay kênh ˙ sao chép noi dung cu’a các kênh tiêu chua’n d Ký ˙hieu & dùng d ’ thuc hien khác, mà còn ¯eˆ ’ ˆ ˆ ˆ ˆ ¯ó. ˙ ˙ ˙ o´c so´ cu’a kênh se chuye’n du lieu d´eˆn: ˙ d¯ieˆ`u này, khi d¯a˘t nó (&) tru ˜ ˆ ˜’ ˆ ¯ ’’ ˆ ˙ ˙ command N > &M Leˆnh này có nghı˜a là, d¯aˆ`u ra cu’a kênh vo´’i so´ˆ N d¯u’o’c gu’’i d¯e´ˆ n ca’ d¯aˆ`u ra tiêu chuaˆ’n, và sao ˙´ i kênh có so´ M. Ví du, d ’ sao chép thông báo lo˜˙i vào d `u ra tiêu chua’n, ca`n dùng lenh chép to ¯aˆ ¯eˆ ˆ ˆ ˆ ˆ ˆ ’ ˙ 2>&1, còn 1>&2 sao chép stdout vào stderr. Kha’ na˘ng này d¯a˘c bieˆt có ích khi muo´ˆ n ghi d˙¯aˆ`u ˙ trên ˙ màn hình, vu`a ghi chúng ra vào taˆp tin, vì khi d¯ó chúng ta vu`’a có theˆ’ nhìn tha´ˆ y thông báo ’ ˙ vào taˆp tin. Ví du, tru’o`’ng ho’p sau thu’o`’ng d¯u’o’c u´’ng dung trong các script chay khi kho’’i d¯oˆng ˙ ˙ ˙ ˙ ˙ ˙ ˙ Linux: kênh giao tác teppi82@teppi:~$ cat hiho > /dev/null cat: hiho: No such file or directory teppi82@teppi:~$ cat hiho > /dev/null 2>&1
3.5.2
Su’’ dung | ˙
Moˆt tru’o`’ng ho’p d¯a˘c bieˆt cu’a chuyeˆ’n hu’o´’ng d¯aˆ`u ra là su’ toˆ’ chu´’c các d¯u’o`’ng o´ˆ ng (ha y còn có ˙ giu˙ a các ˙ chuong trình, hoa˘c ba˘ng chuye ˙`n). Hai hay vài câu lenh, mà d `u ra theˆ˙’ goi là kênh ˜’ ¯aˆ ˆ ˆ ’’ ˙ cách nhau, cu’a leˆ˙nh tru’o´’c dùng làm d¯aˆ`u vào cho leˆnh˙sau, liên ke´ˆ t vo´’i nhau (có theˆ’ nói phân ˙ ´ n) bo’i ký hieu gach tha’˘ ng d ´ ng ˙ ne´ˆ u muo ¯u’ - "|". Khi này d¯aˆ`u ra tiêu chuaˆ’n cu’a leˆnh d¯u´’ng bên ˆ ˆ ’ ˙ ˙ ˙ ’ i so vo´i |. trái so vo´’i | du’o’c chuyeˆ’n d¯e´ˆ n d¯aˆ`u vào tiêu chuaˆ’n cu’a chu’o’ng trình, du´’ng bên pha ’ ˙ Ví du: ˙ kênh giao tác maikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l
Dòng này có nghı˜a là ke´ˆ t qua’ cu’a leˆnh cat, tu´’c là noˆi dung taˆp tin ls.txt, se˜ d¯u’o’c chuyeˆ’n ˙ trên và chı’ la´ y˙ ra nhung ´ d¯eˆn d¯aˆ`u vào cu’a leˆnh grep, leˆnh này˙ se˜ phân chia noˆ˙i dung nói ˜’ ˆ ˙ ˙ ˙ ’ ´ ´ ’ ’ dòng nào có chu´’a tu`’ knoppix. ¯Deˆn lu’o’t mình, keˆt qua cua leˆnh grep d¯u’o’c chuyeˆn to´’i d¯aˆ`u ˙ dòng thu d oc. Duo`˙ng o´ ng su’ du˙ng d ’ ke´ t hop vài vào cu’a leˆnh wc -l, mà tính so´ˆ nhu˜’ng ¯u’ ’ ¯ ’ ’ ˆ ¯eˆ ˆ ’ ’ ˙ ˙ ˙ ˙ trên ’ ˜ ´ chu’o’ng trình nho’ lai vo´’i nhau (moˆi chu’o’ng trình thu’c hieˆn moˆt bieˆn d¯oˆi xác d¯inh nào d¯ó d¯aˆ`u vào) tao thành˙ moˆt leˆnh toˆ’ng quát, mà ke´ˆ t qua’˙ cu’a ˙nó se˜˙ là moˆt bie´ˆ n d¯oˆ’i˙ phu´’c tap. Caˆ`n ˙ thu ˙ c hien ta´ t ca’ các câu lenh có trong d o`ng ˙ ˙ chú ý ra˘`ng,˙ heˆ vo’ goi và ¯u’ ’ o´ˆ ng cùng moˆt lúc, chay ˆ ’ ˆ ˆ ˙ ˙ t ba’n ˙sao he ˙ vo’ riêng. Vì the´ ˙ngay khi chuong trình thu´ nha´ t ba ˙ ˙ moˆ˜i leˆnh d¯ó trong mo ˆ ˆ ˆ ’’ ’ ˆ ´˘ t d¯aˆ`u d¯u’a ˙ ’ o’ d `u ra, chu˙ong trình tie´˙ p theo ba˘´t d `u xu’ lý ke´ t qua’ này. Cung y nhu vay, các lenh ke´ˆ t qua ˜ ¯aˆ ˆ ˆ ˆ ’ ¯aˆ ’’ ’ ’ ˆ ˙ ´ ´ tieˆp theo thu’c hieˆn các công vieˆc cu’a mình: cho`’ du˜’ lieˆu tu`’ leˆnh tru’o´’c và d¯u’a keˆt qua’ cho le˙ˆ nh ˙´ ng nhu ˙ mot dây chuye ˙ `n sa’n xua´ t. Ne´ u nhu ˙ muo´˙ n mot lenh nào d ke´ t thúc hoàn ˙ tie´ˆ p theo, gio ¯ó ˆ ˆ ˆ ˆ ˆ ˆ ˆ ’ ˆ ’ ˆ ˙ mo ˙ t dòng ca’ ký hieu dây ˙ n lenh tie´ p theo, ban có the’ sue’ dung trên toàn, tru’o´’c khi thu’c hie ˆ ˆ ˆ ˆ ’ ˆ ˆ ˙ ˙ ˙ ˙ cho` ˙ ˙ ˙ ’ ’ ˜ ` ´ ´ ´ ´ ’ chuyeˆn |, cu˜ng nhu’ daˆu chaˆp phaˆy ;. Tru’o´’c moˆi daˆu chaˆm phaˆy, heˆ vo se˜ du`’ng lai và ’ ˙ ra (giá cho d¯e´ˆ n khi thu’c hieˆn xong ta´ˆ t ca’ các câu leˆnh tru’o´’c cu’a d¯u’o`’ng o´ˆ ng. ˙Trang thái thoát ˙ ˙ ˙ ˙
34
Bash
tri lôgíc, mà d¯u’o’c tra’ lai sau khi thu’c hieˆn xong chu’o’ng trình) cu’a moˆt d¯u’o`’ng o´ˆ ng se˜ trùng ˙ ra cu ˙’ a câu lenh sau ˙ cùng ˙ trong d o`ng o´ ng. O ’’ tru’o´’c˙câu leˆnh d¯aˆ`u tiên cu’a vo´˙’i trang thái thoát ¯u’ ’ ˆ ˆ ˙ ˙ d¯u’o`’ng o´ˆ ng có theˆ’ d¯a˘t ký hieˆu "!", khi d¯ó trang thái thoát ra cu’a d¯u’o`’ng o´ˆ ng˙ se˜ là phu’ d¯inh ˙ trong d o`ng o´ ng. Tu´c là ne´ u trang thái thoát ˙ lôgíc cu’a trang thát ˙thoát ra ˙cu’a leˆnh cuo´ˆ i cùng ¯u’ ’ ˆ ˆ ’ ˙ ng thái thoát ra cu’a d o`ng o´ ng se ba˘`ng 1 và ˙nguoc lai. He ra cu’a leˆnh ˙cuo´ˆ i cùng ba˘`ng 0 thì tra ˜ ¯u’ ’ ˆ ˆ ’’ ˙ ˙ ˙ ˙ ˙ ´ ´ ` vo’ cho`’ cho taˆt ca’ các câu leˆnh keˆt thúc roˆi mo´’i xác d¯inh và d¯u’a ra giá tri này. ˙ ˙ ˙
3.5.3 ¯Daˆ`u loc ˙
Ví du cuo´ˆ i cùng o’’ trên (ví du vo´’i câu leˆnh grep) có theˆ’ dùng d¯eˆ’ minh hoa cho moˆt khái nieˆm ˙ ng khác, d là, daˆ`u lo˙ c chuong˙ trình. Da`u loc - d là lenh (hay chu ˙ ong trình), ˙ ˙´ p mà tie qua tro ¯ó ˆ ¯ó ˆ ’’ ¯ ’’ ¯ ˆ ˙ ˙ ˙ ˙ ’ ´ ` ´ ’ ’ nhaˆn du˜’ lieˆu vào, thu’c hieˆn moˆt vài bieˆn d¯oˆi trên du˜’ lieˆu này và d¯u’a ra keˆt qua o’ d¯aˆu ra tiêu ˙ ’n (tu` d˙ còn có˙ the’ ˙chuye˙’n d´ n noi nào d theo ý˙muo´ n cu’a nguo`i dùng). Các câu lenh chua ¯ó ˆ ˆ ˆ ¯eˆ ˆ ˆ ’ ’’ ’ ¯ây ˙ ` ` ´ - d¯aˆu loc bao goˆm các leˆnh d¯ã nói d¯eˆn o’’ trên cat, more, less, wc, cmp, diff, ˙ ng câu lenh có˙trong ba’ng 3.1 và ca’ nhu ˜’ ˆ ˙ Ba’ng 3.1: Các câu leˆnh d¯aˆ`u loc ˙ ˙ Leˆnh Mô ta’ nga˘´n gon ˙ ˙ grep, fgrep, egrep Tìm trong taˆp tin hay du˜’ lieˆu d¯aˆ`u vào các dòng có chu´’a maˆ˜u va˘n ba’n ˙ d a các dòng˙này to´i d `u ra tiêu chua’n d¯u’o’c chı’ ra và ¯u’ ˆ ’ ¯aˆ ˙ tr Trong du˜’ lieˆu d¯aˆ`u vào thay the´ˆ các ký tu’ o’’ ô thu´’ nha´ˆ t bo’’i các ký tu’ tu’o’ng ˙ chu´a u´’ng o’’ ô thu´˙’ hai. Hãy thu’’ gõ leˆnh tr ˙abc ABC roˆ`i gõ vài dòng ’ ˙ các ký tu’ abc! ˙ comm So sánh hai taˆp tin theo tu`’ng dòng moˆt và d¯u’a vào d¯aˆ`u ra tiêu chuaˆ’n 3 ˙ ng dòng chı’ ga˘p o’ tap tin ˙ thu´ nha´ t, hai - nhung dòng chı’ coˆt : moˆt - nhu ˜’ ˜’ ’ ˆ ’ ˆ ˙ ng˙dòng có trong ca’ hai tap tin. ga˙˘ p o’’ taˆ˙p tin thu´’ hai, và ba - nhu ˜’ ˆ ˙ ˙ ˙ ’ ’ ` ´ ’ pr D i nh da ng ta p tin hay no i dung cu a d u tiêu chua n d in a n. ¯a ¯e ˆ ˆ ˆ ˆ ˆ ˆ ¯ ˙ ˙ ˙’ ˙ sed Trình soan thao taˆp tin theo dòng, su’’ dung d¯eˆ’ thu’c hieˆn moˆt vài bie´ˆ n d¯oˆ’i ˙ u d `u vào ˙ (la´ y tu` tap tin hay ˙d `u vào tiêu ˙ chua ˙ ’n)˙ trên du˜’ lie ¯aˆ ˆ ¯aˆ ˆ ’ ˆ ˆ ˙ ˙ Moˆt d¯aˆ`u loc d¯a˘c bieˆt, câu leˆnh tee, nhân d¯ôi du˜’ lieˆu d¯aˆ`u vào, moˆt ma˘t gu’’i du˜’ lieˆu này ˙ ’n, ma ˙ ˘ t khác˙ghi nó (du lieu) vào tap ˙tin (nguo`i dùng˙ ca`n˙ d ˘ t tên). De ˙˜ tha´ y d¯e´ˆ n d¯aˆ`˙u ra tiêu˙ chua ˜’ ˆ ˆ ˆ ˆ ¯a ˆ ˆ ’’ ˙ ˙ ˙ ˙ ’ ` ’ ra˘ng theo chu´’c na˘ng cua mình leˆnh tee tu’o’ng tu’ nhu’ nhóm ký tu’ chuyeˆn hu’o´’ng 1>&file. ˙ ng các bie’u thu´˙c chính quy (d `u khie’n), Kha’ na˘ng cu’a d¯aˆ`u loc có theˆ’ mo’’ ˙roˆng vo´’i vieˆc su’’ du ¯ieˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ’ ˜ ´ ´ ´ cho phép, ví du, toˆ chu´’c tìm kieˆm theo các maˆu tìm kieˆm tu`’ d¯o’n gia’n d¯eˆn phu´’c tap và ra´ˆ t ˙ ´ n, chúng ta có the’ nói ra´ t nhie`u ve` chuye’n huo´ng và d `u loc. Nhu ˙ ng noi phu´’c tap. Ne´ˆ u muo ¯aˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ’’ ’ ˙ có trong pha`n lo´n các cuo´ n sách ve` UNIX và Linux (xem pha`n lo`˙i ke´ t). Vì va˙y, dung này ˆ ’ ˆ ˆ ˆ ’ ˆ ˆ ˙´ n chúng ta se˜ du`’ng o’’ d¯ây và chuyeˆ’n sang moˆt phaˆ`n khác, d¯u’o’c goi là "môi tru’o`’ng và các bie ˆ ˙ ˙ ˙ môi tru’o`’ng" tao bo’’i heˆ vo’. ˙ ˙
3.6
´ˆ . Môi tru’o`’ng cu’a heˆ vo’ Tham bie´ˆ n và các bie´ˆ n so ˙
Khái nieˆm tham bie´ˆ n trong heˆ vo’ bash tu’o’ng u´’ng vo´’i khái nieˆm bie´ˆ n so´ˆ trong các ngôn ngu˜’ ˙ i (hay ID) cu’a tham bie´ n có the ˙ ’ là mot tu` bao go`m các ký tu laˆp trình˙ thông thu’o`’ng. Tên go ˆ ˆ ˆ ’ ˆ ’ ˙ ˙ ˙ ˙ ´ ´ ` ´ ’ ’ ’ bang chu˜’ cái, chu˜’ soˆ, daˆu gach du’o´’i (chı ký tu’ d¯aˆu tiên cua tu`’ này không d¯u’o’c là chu˜’ soˆ), và ca’ nhu˜’ng ký tu’ sau: , , #, , - ˙(gach ngang), $,,˙0, _ (gach du’o´’i). Chúng ta nói ˙ra˘`ng, tham bie´ˆ n ˙ ˙ ˙
´ˆ . Môi tru’o`’ng cu’a heˆ vo’ 3.6 Tham bie´ˆ n và các bie´ˆ n so ˙
35
d¯u’o’c xác d¯inh hay d¯u’o’c d¯a˘t ra, ne´ˆ u ngu’o`’i dùng ga´˘ n cho nó moˆt giá tri. Giá tri có theˆ’ là moˆt ˙ ´ y giá tri cu’a tham bie´ n, nguo`i ta su ˙’ dung ˙ký tu $ o˙’ truo´c tên cu’˙a ˙ tro´ ng˙ro˜ng. De’ nhìn ˙ tha dòng ˆ ˆ ˆ ˆ ’’ ’ ’ ’ ’’ ¯ ˆ ˙ ˙ ˙ nó. Nhu’ vaˆy, leˆnh: ˙ ˙ kênh giao tác maikhai@fpt:/sm$ echo parameter
hieˆ’n thi tu`’ parameter, còn leˆnh ˙ ˙ kênh giao tác maikhai@fpt:/sm$ echo $parameter
hieˆ’n thi giá tri cu’a tham bie´ˆ n parameter (ta´ˆ t nhiên ne´ˆ u nhu’ tham bie´ˆ n d¯ó du’o’c xác d¯inh). ˙ ˙ ˙ ˙
3.6.1
Các dang tham bie´ˆ n khác nhau ˙
Tham bie´ˆ n chia thành ba dang: tham bie´ˆ n vi trí, tham bie´ˆ n d¯a˘c bieˆt (các ký tu’ d¯a˘c bieˆt d¯ã nói ˙ và các bie´ n so ˙ ˙ ˙ ˙ ˙ o’’ trên chính là tên cu’a nhu˜˙’ng tham bie´ˆ n này) ˆ ´ˆ cu’a heˆ vo’. Tên (ID) cu’a tham bie´ˆ n vi trí goˆ`m moˆt hay vài chu˜’ so´ˆ (nhu’ng không có tham bie´ˆ n vi trí ˙0). Giá tri cu’a tham bie´ˆ n ˙´ cho lenh, d oc d a ra khi chay he vo’ (tham so ˙´ d `u tiên là giá ˙ tri cu’a tham vi trí là˙ các tham so ¯u’ ’ ¯u’ ˆ ˆ ˆ ˆ ¯aˆ ˙´ n 1, tham so´ thu´ hai - ˙tham bie ˙´ n 2, v.v. . . ). Có ˙ the ˙’ dùng câu lenh set d ’ thay ˙d ’i giá tri bie ¯eˆ ¯oˆ ˆ ˆ ’ ˆ ˆ ˆ cu’a tham bie´ˆ n vi trí. Giá tri cu’a các tham bie´ˆ n này cu˜ng thay d¯oˆ’˙i trong khi heˆ vo’ thu’c hieˆn˙ ˙ so´ (chúng ˙ ta se xem xét va´ n d ` này o’ duo´i). Các tham bie´ n d˙ ˘ c biet˙ không ˙ moˆt trong các hàm ˜ ˆ ˆ ¯eˆ ˆ ¯a ˆ ’ ’’ ˙ c hie ˙ gì ˙khác ho’n là các maˆ˜u, mà su’ thay the´ˆ (phép the´ˆ , phép hoán d¯oˆ’i) chúng d¯u’o’c thu ’ ˆ n nhu’ ˙ ˙ ˙ ˙ trong ba’ng 3.2: Các tham bie´ˆ n d¯a˘c bieˆt, d¯u’o’c lieˆt kê o’’ ba’ng trên, có moˆt d¯ieˆ’m khác bieˆt d¯ó là chı’ có theˆ’ ˙ ˙ the’ gán ˙ các ˙ giá tri cho các tham ˙bie´ n này. Bie´ˆ n ˙môi truo`ng, nhìn "nha˘´c" d¯e´ˆ n chúng, không ˆ ˆ ’’ ˙ ´ ´ tu`’ phía heˆ vo’, d¯ó là các tham bieˆn d¯u’o’c d¯a˘t tên. Giá tri cu’a bieˆn môi tru’o`’ng d¯u’o’c gán nho`’ ˙ dang sau: ˙ ˙ ˙ ˙ thao tác có ˙ kênh giao tác [user]$ name=value
Trong d¯ó, name - tên cu’a bie´ˆ n, còn value - giá tri muo´ˆ n gán cho bie´ˆ n (có theˆ’ là moˆt dòng tro´ˆ ng). Tên cu’a bie´ˆ n môi tru’o`’ng chı’ có theˆ’ bao goˆ`m˙ các chu˜’ so´ˆ , chu˜’ cái và không d¯u’o˙’c ba˘´t d¯aˆ`u bo’’i moˆt chu˜’ so´ˆ . (Tin ra˘`ng sau khi d¯oc d¯oan vie´ˆ t veˆ` tham bie´ˆ n vi trí thì các ban d¯ã hieˆ˙’u ˙ ’ i mot chu so´ .) Giá tri ˙ có the’ là ba ˙´ t ky` mot tai sao moˆt bie˙´ˆ n môi tru’o`’ng không theˆ’ ba˘´t˙d¯aˆ`u bo ˜’ ˆ ˆ ˆ ˆ ’ ˆ ˙ ˙ ˙ ˙ ´ ` ´ ’ dòng va˘n ban nào. Neˆu giá tri có chu´’a nhu˜’ng ký tu’ d¯a˘c bieˆt, thì caˆn d¯a˘t nó (giá tri) vào daˆ˙u ˙ chu´a các da´ u ngoa˘˙c này. ˙ Ne ˙´ u mot bie´ n˙ môi truòng˙ d oc xác ngoa˘c. Giá tri ta´ˆ t nhiên se˜ không ¯u’ ’ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ vo´i ’ ` ´ ´ d¯inh, thì cu˜ng có theˆ bi xóa bo’ ba˘ng leˆnh noˆi trú unset. Taˆp ho’p taˆt ca’ các bieˆn này cùng ’ ˙ ˙ ˙ ˙ ˙ ˙ ’ ’ ’ các giá tri d¯ã gán cho chúng goi là môi tru’o`’ng (enviroment) cua heˆ vo. Có theˆ xem nó (môi ˙ ` lenh set khi không ˙ có tham so´ (có the’ ca`n dùng d o`˙ng o´ ng ’set | less", tru’o`’ng) nho ¯u’ ’ ˆ ˆ ˆ ˆ ’ ˆ ˙ ’ ´ ` ´ ´ neˆu môi tru’o`’ng lo´’n, có nhieˆu bieˆn). ¯Deˆ xem giá tri cu’a moˆt bieˆn môi tru’o`’ng cu theˆ’, thay vì dùng leˆnh set (khi này caˆ`n tìm trong ke´ˆ t qua’ cu’a˙nó bie´ˆ n˙ muo´ˆ n xem), có theˆ’ ˙su’’ dung leˆnh ˙ ˙ echo:˙ kênh giao tác [user]$ echo $name
36
Bash
Tham bie´ˆ n *
@
# ? - (gach ngang) ˙ $
0
_ (gach du’o´’i) ˙
Ba’ng 3.2: Thay the´ˆ các tham bie´ˆ n d¯a˘c bieˆt ˙ ˙ Quy luaˆt thay the´ˆ ˙´ ’ Thay theˆ bo’i các tham bie´ˆ n vi trí, ba´˘ t d¯aˆ`u tu`’ tham bie´ˆ n thu´’ nha´ˆ t. Ne´ˆ u su’ ˙ ˘ c kép, thì tham bie´ n này se d oc thay˙ thay the´ˆ thu’c hieˆn trong da´ˆ u ngoa ˜ ¯u’ ’ ˆ ˙ cách ´ˆ t, mà tao ra tu`˙’ ta ´ˆ t ca’ các tham bie´ˆ n vi trí, phân bo’’i moˆt tu`’˙duy ˙nha ˙ ˙ ˙ nhau bo’’i ký tu’ d¯aˆ`u tiên cu’a bie´ˆ n so´ˆ IFS (se˜ nói d¯e´ˆ n o’’ sau). Tu´’c là "$" ˙ ´ i "$1c$2c. . . ", trong d c - ký tu d `u tiên trong giá tri tu’o’ng d¯u’o’ng vo ¯ó ’ ’ ¯aˆ ˙ cu’a bie´ˆ n so´ˆ IFS. Ne´ˆ u giá tri cu’a IFS tro´ˆ ng, hoa˘c không d¯u’o’c xác d¯inh˙ ˙ nhau bo’i các khoa ˙ ’ ng tra´˘ ng. ˙ ˙ giá tri, thì tham bie´ˆ n phân cách ’ ˙ Thay the´ˆ bo’’i tham bie´ˆ n vi trí, ba˘´t d¯aˆ`u tu`’ tham bie´ˆ n thu´’ nha´ˆ t. Ne´ˆ u thay the´ˆ ˙ thì mo˜i tham bie´ n se d oc thay the´ bo’i mot thu’c hieˆn trong ngoa˘c kép, ˆ ˆ ˜ ¯u’ ’ ˆ ’ ˆ ˙ ˙ ˙ ˙ ˙ ´ tu`’ riêng bieˆt. Tu´’c là, "$@" tu’o’ng d¯u’o’ng vo´’i "$1" "$2" . . . Neˆu không có tham bie´ˆ n ˙vi trí, thì giá tri se˜ không d¯u’o’c thie´ˆ t laˆp (tham bie´ˆ n se˜ bi x ˙ ˙ ˙ ˙ ˙ Thay the´ˆ bo’’i giá tri thaˆp phân cu’a các tham bie´ˆ n vi trí. ˙ ˙ ˙ Thay the´ˆ bo’’i trang thái thoát ra cu’a câu leˆnh cuo´ˆ i cùng trong d¯u’o`’ng o´ˆ ng, ˙ n trong che´ d ne`n truo´˙c. mà d¯u’o’c thu’c hie ˆ ˆ ¯oˆ ˆ ’’ ˙ ˙ ˙ ´ ’˙ Thay theˆ bo’i giá tri các co`’, flag, d¯u’o’c d¯a˘t bo’’i leˆnh noˆi trú set hay trong ˙ ˙ ˙ ˙ khi chay heˆ vo’. ˙ ˙ ˙ Thay the´ˆ bo’’i so´ˆ cu’a tie´ˆ n trình (PID - process identificator) Thay the´ˆ bo’’i so´ˆ cu’a tie´ˆ n trình (PID) cuo´ˆ i cùng trong so´ˆ các câu leˆnh thu’c ˙ ˙ hieˆn trong neˆ`n sau. ˙ Thay the´ˆ bo’’i tên heˆ vo’ hay tên cu’a script d¯ang chay. Ne´ˆ u bash chay ˙ moˆt taˆp tin leˆnh nào˙ d¯ó, thì $0 có giá tri ba`˘ ng tên cu’a˙ taˆp tin này. Trong ˙ oc lai giá tri này ba˘`ng d˙ o`ng da˜n d `u ˙d ’ d´ n he vo’ (ví tru˙’o`’ng˙ ho’p ngu ¯u’ ’ ˆ ¯aˆ ¯u ¯eˆ ˆ ’’ ˙ ˙ ˙ ˙ ˙ du, /bin/bash ˙ Thay the´ˆ bo’’i tham so´ˆ cuo´ˆ i cùng cu’a câu leˆnh tru’o´’c trong so´ˆ các câu leˆnh ˙ bie´ n hay bie´ n so´ , thì se˙ su’ d¯ã d¯u’o’c thu’c hieˆn (ne´ˆ u d¯ó lai là moˆt tham ˜ ’ ˆ ˆ ˆ ˙ ˙ ˙ ˙ ˙ dung giá tri cu’a n ˙ ˙
Trong d¯ó, caˆ`n thay name bo’’i tên bie´ˆ n (nhu’ vaˆy, trong tru’o`’ng ho’p này, ban lai caˆ`n pha’i ˙ ban se tha´ y trong ˙ ke´ t qua’˙cu’a˙ lenh set, ´ bieˆt tên cu’a bie´ˆ n muo´ˆ n xem). Trong so´ˆ các bie´ˆ n, mà ˜ ˆ ˆ ˆ ˙ la`n liên có nhu˜’ng bie´ˆ n ra´ˆ t thú vi. Xin hãy chú ý d¯e´ˆ n, ví du, bie´ˆ n˙ RANDOM. Ne´ˆ u thu’’ chay vài ˆ ˙ ˙ ˙ tie´ˆ p câu leˆnh sau: ˙ kênh giao tác maikhai@fpt:/sw$ echo $RANDOM
thì moˆ˜i laˆ`n ban se˜ nhaˆn d¯u’o’c moˆt giá tri mo´’i. Nguyên nhân là vì bie´ˆ n này tra’ lai moˆt giá ˙ ˙’ ng 0˙- 32 ˙768. ˙ ˙ ˙ khoa tri ngaˆ˜u nhiên4 trong ˙
3.6.2
´ˆ u nha´˘ c cu’a heˆ vo’ Da ˙
Moˆt trong các bie´ˆ n ra´ˆ t quan trong có tên PS1. Bie´ˆ n này cho bie´ˆ t dang cu’a da´ˆ u nha˘´c, mà bash ˙ nhap câu lenh tie´ p theo. Theo ma ˙ ˘ c d nh thì bie´ n này d oc d¯u’˙a ra trong khi cho`’ ngu’o`’i dùng ¯i ¯u’ ’ ˆ ˆ ˆ ˆ ˙ ˙ ˙ ˙ ˙ ´ ’ gán giá tri "\s-\v\$ , tuy nhiên trên các ban phân phoˆi khác nhau thu’o`’ng có các script ˙ 4
random là tu`’ tie´ˆ ng Anh có nghı˜a ngaˆ˜u nhiên
´ˆ . Môi tru’o`’ng cu’a heˆ vo’ 3.6 Tham bie´ˆ n và các bie´ˆ n so ˙
37
kho’’i d¯oˆng (hay script d¯a˘ng nhaˆp) xác d¯inh lai bie´ˆ n này. Nói chung thì trong bash có ta´ˆ t ca’ ˙ các tru ˙ o`ng˙ hop khác nhau. Bie´ n PS1 d a ra dang cu’a da´ u bo´ˆ n da´ˆ˙u nha˘´c, d¯u’o’c su’’ dung trong ¯u’ ˆ ˆ ’’ ’ ˙ ˙ ˙ ˙ nha˘´c khi heˆ vo’ cho`’ nhaˆp leˆnh. Da´ˆ u nha˘´c thu´’ hai, xác d¯inh bo’’i bie´ˆ n PS2, xua´ˆ t hieˆn khi heˆ vo’ ˙ ˙ mot vài du lieu ca`n thie´ t nào ˙ d d ’ có the’ tie´ p tuc cha ˙ y câu le ˙ nh cho`’ ngu’o`’i ˙dùng nhaˆp thêm ˜’ ˆ ˆ ¯ó ¯eˆ ˆ ˆ ˆ ˆ ˆ ˙ ˙ ˙ ˙ i. Theo ma ˙ ˘ c d nh bie ˙´ n PS2 có giá tri ">". Ra´ t có the’ ba (chu’o’ng trình) d¯ã go ¯i ˆ ˆ ˆ n d¯ã nhìn tha´ˆ y ˙ ˙ ˙ ˙ ˙ da´ˆ u nha´˘ c này, khi chay leˆnh cat d¯eˆ’ d¯u’a du˜’ lieˆu vào tu`’ bàn phím vào taˆp tin. Moˆt ví du khác ˙ có dang nhu d nói. Da ˙´ u nha˘´c, ˙xác d nh ˙ ˙ y˙ lenh này da´ u nha˘´c se - leˆnh ftp, sau khi cha ˜ ¯i bo’’i ˆ ˆ ˆ ’ ¯ã ˙ lenh ˙ ˙ ˙ bie´ˆ˙n PS3, su’’ dung trong ˆ select. Da´ˆ u nha˘´c, xác d¯inh bo’’i bie´ˆ n PS4, d¯u’o’c d¯u’a ra tru’o´’c ˙ ˙ ˙ ˙ moˆ˜i câu leˆnh, trong lúc bash theo dõi quá trình thu’c hieˆn. Giá tri theo ma˘c d¯inh - "+". Ne´ˆ u ˙ ´ n, ban có the’ thay d ’i các bie´ n PS1 và ˙ PS2. ˙ Khi này˙ có the’ ˙su’ du ˙ có mong muo ¯oˆ ˆ ˆ ’ ng ba´ˆ t ky` ký ˆ ˆ ˙ tu’ nào nhaˆp tu`’ bàn phím, cu˜ng nhu’ moˆt vài ký tu’ chuyên dùng d¯eˆ’ xác d¯inh da˙ ng da´ˆ u nha´˘ c ˙ trong ˙ba’ng 3.3 (chı’ d a ra mot vài trong ˙ ˙ so´ˆ chúng làm ví du, danh sách˙ d¯aˆ`y ˙d¯u’ xem trong nhu ¯u’ ˆ ’ ˙ ˙ trang man cu’a bash - gõ leˆnh "man bash"). ˙ Ba’ng 3.3: Ký tu’ xác d¯inh dang da´ˆ u nha˘´c ˙ ˙ ´ Cum ký tu’ Giá tri (keˆt qua’ thu d¯u’o’c) ˙ ˙ ˙ ˙ ˙ \a Tín hieˆu âm thanh (mã ASCII 07) ˙ \d Tho`’i gian o’’ dang "Thu´’, tháng, ngày", ví du, Sun, Dec, 26. ˙ ˙ \h Tên máy (hostname) d¯e´ˆ n da´ˆ u cha´ˆ m d¯aˆ`u tiên. \H Tên máy d¯aˆ`y d¯u’, ví du teppi.phanthinh.com ˙ \t Tho`’i gian hieˆn tho`’i o’’ dang 24 gio`’: HH:MM:SS (gio`’:phút:giây) ˙ ˙ \T Tho`’i gian hieˆn tho`’i o’’ dang 12 gio`’: HH:MM:SS ˙ ˙ \@ Tho`’i gian hieˆn tho`’i o’’ dang 12 gio`’ am/pm (sáng/chieˆ`u) ˙ ˙ \u Tên ngu’o`’i dùng d¯ã chay heˆ vo’, ví du teppi ˙ ˙ ˙ \w Tên d¯aˆ`y d¯u’ cu’a thu’ muc làm vieˆc hieˆn tho`’i (ba˘´t d¯aˆ`u tu`’ go´ˆ c), ví du ˙ ˙ ˙ ˙ /home/teppi82/project/l4u \W Thu’ muc hieˆn tho`’i (không có d¯u’o`’ng daˆ˜n) ˙ ˙ \$ Ký tu’ #, ne´ˆ u heˆ vo’ d¯u’o’c chay bo’’i ngu’o`’i dùng root, và ký tu’ $, ne´ˆ u heˆ vo’ ˙ ˙ ˙ o`ng. ˙ ˙ d¯u’o’c chay bo’’i ˙ngu’o`’i dùng thu ’’ ˙ ˙ \nnn Ký tu’ có mã heˆ tám nnn ˙ ˙ \n Dòng mo´’i (chuyeˆ’n dòng) \s Tên heˆ vo’ ˙ \# So´ˆ hieˆn tho`’i cu’a câu leˆnh ˙ ˙ \\ Da´ˆ u gach ngu’o’c (backslash) \[ Sau ký˙ tu’ này ˙ta´ˆ t ca’ các ký tu’ se˜ không d¯u’o’c in ra. ˙ d oc in ra.˙ \] Ke´ˆ t thúc˙chuoˆ˜i các ký tu’ không ¯u’ ’ \! So´ˆ thu´’ tu’ cu’a leˆnh hieˆn ˙tho`’i trong li˙ ch su’’ các câu leˆnh d¯ã dùng. ˙ ˙ ˙ ˙ ˙ So´ˆ cu’a leˆnh (so´ˆ thu´’ tu’ cu’a leˆnh d¯ang thu’c hieˆn trong buoˆ’i làm vieˆc hieˆn tho`’i) có theˆ’ khác ˙ ˙ danh˙ sách "lich˙ su’ các ˙ câu lenh", bo’i vì˙ danh˙ sách còn chu´a ca’ vo´’i so´ˆ cu’a chính nó trong ˆ ’ ’ ’ nhu˜’ng câu leˆnh d¯ã d¯u’o’c ghi lai trong taˆp˙ tin lich su’’. Sau˙ khi giá tri cu’a bie´ˆ n d¯u’o’c heˆ vo’ d¯oc ˙ the´ theo ˙ các quy ˙ luat ˙mo’ rong trong ba’ng trên, ˙ ˙ xa’y ˙ra xong, se˜ xa’y˙ ra su’ thay d¯oˆ`ng tho`˙’i còn ˆ ˆ ’ ˆ ˙ ˙ ˙ su’ thay the´ˆ trong tên các câu leˆnh, trong các bieˆ’u thu´’c so´ˆ hoc, và su’ chia tu`’ (word splitting). ˙ ˙ the´ này o’ duo´i.Ví du, sau˙khi thuc˙ hien lenh (vì trong dòng Chúng ta se˜ nói d¯e´ˆ n nhu˜’ng su’ thay ˆ ’ ’’ ’ ˆ ˆ ˙ ˙ ˙ ˙ ˙ ´ ´ ´ ´ va˘n ba’n có khoa’ng troˆng, nên nhaˆt thieˆt pha’i có daˆu ngoa˘c): kênh giao tác ˙ [user/root]$ PS1="[\u@\h \W]\$"
38
Bash
thì trong da´ˆ u nha´˘ c se˜ có da´ˆ u mo’’ ngoa˘c vuông, tên ngu’o`’i dùng, ký hieˆu , tên máy, khoa’ng tra˘´ng, tên cu’a thu’ muc hieˆn tho`’i (không˙ có d¯u’o`’ng daˆ˜n), da´ˆ u d¯óng ngoa˘˙c vuông, và ký hieˆu ˙ làm ˙ viec nguo`i dùng bình thuo`ng) hay #(ne´ u he˙ vo’ chay duo´i ngu˙o`i $ (ne´ˆ u trên heˆ vo’ d¯ang ˆ ˆ ˆ ’’ ’’ ’’ ’’ ˙ ˙ ˙ ˙ dùng root).
3.6.3
Bie´ˆ n môi tru’o`’ng PATH
Còn moˆt bie´ˆ n cu˜ng quan trong nu˜’a có tên PATH. Bie´ˆ n này d¯u’a ra danh sách d¯u’o`’ng daˆ˜n d¯e´ˆ n các˙ thu’ muc, mà bash˙ se˜ tìm kie´ˆ m taˆp tin (tru’o`’ng ho’p riêng là các taˆp tin leˆnh) ˙ trong tru’o`’ng ho˙’p, d¯u’o`’ng daˆ˜n d¯aˆ`y d¯u’ d¯e´ˆ n taˆ˙p tin không d¯u’o’˙c d¯u’a ra. Các thu˙’ muc trong ˙ ˙ ˙ ˙ danh sách này phân cách nhau bo’’i da´ˆ u hai cha´ˆ m (:). Theo ma˘c d¯inh bie´ˆ n PATH chu´’a ˙ ˙ các thu’ muc /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, tu´’c là có ˙ dang: /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: ¯Deˆ’ thêm thu’ muc ˙ danh sách này, ca`n thuc hien câu lenh sau: ˙ vào ˆ ˆ ’ ˆ ˙ ˙ ˙ kênh giao tác [user]$ PATH=$PATH:new_path
Khi tìm kie´ˆ m, heˆ vo’ "luc loi" các thu’ muc theo d¯úng thu´’ tu’ d¯ã lieˆt kê trong bie´ˆ n PATH. ˙ ’ d a˙ vào˙ danh sách này ˙ thu muc hien tho ˙ ` i, khi˙ thêm vào bie´ n PATH Moˆt chú ý nho’, có the ˆ ¯u’ ˆ ˆ ’ ’ ˙ ˙ ˙ ´ ´ ` ’ moˆt daˆu chaˆm (.). Tuy nhiên, d¯ây là d¯ieˆu không khuyên làm vo´’i lý do bao maˆt: ngu’o`’i có ác ˙ the’ d ˘ t vào thu muc dùng chung mot chuong trình nào d có cùng tên vo´˙i mot trong so´ ý có ¯ó, ˆ ¯a ˆ ˆ ’ ’’ ’ ˆ ˙ ˙ ˙ ˙ nhu˜’ng câu leˆnh thu’o`’ng dùng bo’’i root, nhu’ng thu’c hieˆn nhu˜’ng chu´’c na˘ng khác hoàn toàn (d¯a˘c ˙’m ne´ u thu muc hien tho`i d ´ ng o’ d˙`u danh ˙ sách tìm kie´ m). ˙ bieˆt nguy hie ˆ ˆ ˆ ˆ ’ ’ ¯u’ ’ ¯aˆ ˙ ˙ ˙
3.6.4
Bie´ˆ n môi tru’o`’ng IFS
Bie´ˆ n này xác d¯inh ký tu’ (cum ký tu’) phân cách (Internal Field Separator), su’’ dung trong thao ˙ lenh, mà he vo’ thuc hien truo´c khi chay mo˙ t câu lenh nào tác phân chia tu`’˙ngu˜’ khi˙ bie´ˆ˙n d¯oˆ’i dòng ˆ ˆ ˆ ˆ ’ ˆ ’’ ˙ ’ ng_tra ˙ ˘´ ng>". ’ ˙ ˙ ˙ ˙ ´ ’ ’ Neˆu thu’ gõ leˆnh "echo $IFS", ban se˜ nhaˆn d¯u’o’c moˆt ngac nhiên nho. ˙ ˙ ˙ ˙ ˙ ˙
3.6.5
Thu’ muc hieˆn tho`’i và thu’ muc cá nhân ˙ ˙ ˙
Tên cu’a thu’ muc hieˆn tho`’i ghi trong bie´ˆ n môi tru’o`’ng vo´’i tên PWD, và giá tri cu’a bie´ˆ n này thay d¯oˆ’i sau moˆ˜i laˆ`n˙ cha˙y chu’o’ng trình cd (cu˜ng nhu’ moˆ˜i laˆ`n thay d¯oˆ’i thu’ muc˙ hieˆn tho`’i theo ba´ˆ t ky` cách nào, ví du,˙ qua Midnight Commander). Tu’o’ng tu’ nhu’ vaˆy tên d¯aˆ`˙y d¯u’ ˙(goˆ`m ca’ d¯u’o`’ng ˙ d cho, ˙ ghi trong bie´ n HOME. daˆ˜n) cu’a thu’ muc˙cá nhân cu’a ngu’o`’i dùng, chay tie´ˆ n trình ¯ã ˆ ˙ ˙
3.6.6
Câu leˆnh export ˙
Khi heˆ vo’ chay moˆt chu’o’ng trình hay câu leˆnh nào d¯ó, nó (heˆ vo’) cung ca´ˆ p cho chúng moˆt ˙ ´ n môi˙ truo`˙ng. De’ có the’ cung ca´ p bie ˙ ´ n môi truo`ng cho ˙ tie´ n trình chay tu` he vo’, ca`˙n phaˆ`n bie ˆ ˆ ˆ ˆ ˆ ˆ ’’ ¯ ˆ ’’ ’ ˆ ˙ ˙ ´ gán giá tri cho bieˆn này vo´’i leˆnh export, tu´’c là thay vì ˙ ˙ kênh giao tác
[user]$ name=value
caˆ`n gõ:
3.7 Khai trieˆ’n bieˆ’u thu´’c
39 kênh giao tác
[user]$ export name=value
Trong tru’o`’ng ho’p này, ta´ˆ t ca’ các chu’o’ng trình chay tu`’ heˆ vo’ (keˆ’ ca’ ba’n sao thu´’ hai cu’a ˙ nhu˙ vay, tu´c là su’ dung giá tri cu’a chính heˆ vo’) se˜ có ˙quyeˆ`n truy caˆp to´’i các bie´ˆ n d¯u’o’c gán ’ ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ ˙ chúng qua tên.
3.7
Khai trieˆ’n bieˆ’u thu´’c
’ d¯oc các câu le ´ ˆ vo ˆnh nhu’ the ˆ nào? Khi heˆ vo’ nhaˆn d¯u’o’c moˆt dòng Hay he ˙ ˙ ˙’ ˙ c "phân ˙ ˙ ngu ` leˆnh này d¯ó caˆn thu’c hieˆn, nó (heˆ vo) tru’o´’c khi chay câu leˆnh thu’˙c hieˆn vie tích ˜’ ˆ ˙ ˙ (gio ˙ ´ ng trong ˙ ngôn ngu, phân˙ tích chu ˙’ ngu˙, vi ngu ˙ ). ˙Mot trong nhung pháp" dòng leˆnh này ˜’ ˜’ ˜’ ˜’ ˆ ˆ ˙ ˙ ˙ bu’o´’c cu’a su’ phân tích này là phép mo’’ hay khai trieˆ’n bieˆ’u thu´’c (expansion). Trong bash có ˙ trie’n bie’u thu´c: ba’y loai khai ˆ ˆ ’ ˙ • Khai trieˆ’n da´ˆ u ngoa˘c (brace expansion); ˙ • Thay the´ˆ da´ˆ u ngã (tilde expansion); • Phép the´ˆ các tham bie´ˆ n và bie´ˆ n so´ˆ ; • Phép the´ˆ các câu leˆnh; ˙ • Phép the´ˆ so´ˆ hoc (thu’c hieˆn tu`’ trái sang pha’i); ˙ ˙ ˙ • Phép chia tu`’ (word splitting); • Khai trieˆ’n các maˆ˜u tên taˆp tin và thu’ muc (pathname expansion). ˙ ˙ Các thao tác này d¯u’o’c thu’c hieˆn theo d¯úng thu´’ tu’ lieˆt kê trên. Chúng ta se˜ xem xét chúng ˙ ˙ ˙ ˙ ˙ theo tu´’ tu’ này. ˙
3.7.1
´ˆ u ngoa˘c Khai trieˆ’n da ˙
Khai trieˆ’n da´ˆ u ngoa˘c to´ˆ t nha´ˆ t minh hoa trên ví du. Gia’ thie´ˆ t, chúng ta caˆ`n tao thu’ muc con ˙ d hoa˘c thay d˙ ’i nguo`i dùng ˙ so’ huu cu’a vài tap tin cùng ˙ moˆt lúc. ˙ Có trong moˆt thu’ muc nào ¯ó, ¯oˆ ˆ ’’ ’ ˜’ ˙ ˙ theˆ’ thu’c˙hieˆn d¯ieˆ`˙u này nho`’ các˙ câu leˆnh sau: ˙ ˙ ˙ kênh giao tác [user]$ mkdir /usr/src/unikey/{old,new,dist,bugs} [root]# chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}
Trong tru’o`’ng ho’p d¯aˆ`u, trong thu’ muc /usr/src/unikey/ se˜ tao ra các thu’ muc con ˙ u cu’a các tap tin ˙ sau old,new,dist, ˙và bugs. Trong tru’o`˙’ng ho’p thu´’ hai, ngu’o`’i dùng so’’ hu ˜’ ˆ ˙ ˙ se˜ thay d¯oˆ’i (thành root): • /usr/ucb/ex • /usr/lib/ex?.?
40
Bash • /usr/ucb/edit • /usr/lib/ex?.? • /usr/ucb/ex • /usr/lib/how_ex • /usr/ucb/edit • /usr/lib/how_ex
Tu´’c là vo´’i moˆ˜i ca˘p da´ˆ u ngoa˘c se˜ tao ra vài dòng riêng re˜ (so´ˆ nhu˜’ng dòng này ba˘`ng so´ˆ tu`’ ˙ ghi thêm ˙ ` na˘ng trong da´ˆ u ngoa˘˙c) ba`˘ ng cách vào tru’o´’c moˆ˜i tu`’ trong ngoa˘c nhu˜’ng gì d¯u´’ng tru’o´’c ˙ ˙ ˘ c. Mot ví du khác: da´ˆ u ngoa˘c, và ghi thêm vào sau moˆ˜i tu`’ này nhu˜’ng gì d¯u´’ng sau da´ˆ u ngoa ˆ ˙ ˙ trie ˙ ’n da´ u˙ ngoa˘c dòng a{d,c,b}e khi khai trieˆ’n se˜ thu d¯u’o’c ba tu`’ "ade ace abe". Khai ˆ ˆ ˙ ’ ´ ’ d¯u’o’c thu’c hieˆn tru’o´’c các dang khai trieˆn khác trong dòng leˆnh, ho’n nu˜’a taˆt ca các ký tu’ d¯a˘˙ c ˙ ˘ c, se d oc giu không thay ˙ d˙’i ˙ ˙dòng lenh, ke’˙ca’ nhung ký tu na˘`m trong da´ u ngoa bieˆ˙t có trong ˜’ ˜ ¯u’ ’ ˜’ ¯oˆ ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ (chúng se˜ d¯u’o’c biên dich o’’ các bu’o´’c phía sau). ˙ ˙
3.7.2
´ˆ u ngã (Tilde Expansion) Thay the´ˆ da
Ne´ˆ u nhu’ tu`’ ba˘´t d¯aˆ`u vo´’i ký tu’ da´ˆ u ngã (’∼’), ta´ˆ t ca’ các ký tu’ d¯u´’ng tru’o´’c da´ˆ u gach chéo d¯aˆ`u tiên ˙ không có da´ u gach chéo) se˙d oc hie’u là tên ngu ˙ o`i dùng (login (hay ta´ˆ t ca’ các ký tu’ ne´ˆ u nhu ˜ ¯u’ ’ ˆ ˆ ’ ’’ ˙ d ´ ng ngay phía sau da´ u ngã), name). Ne´ˆ u nhu’ tên˙ này là moˆt dòng roˆ˜ng (tu´’c˙ là da´ˆ u gach chéo ¯u’ ˆ ˙ ˙ thì da´ˆ u ngã se˜ d¯u’o’c thay the´ˆ bo’’i giá tri cu’a bie´ˆ n HOME. Và ne´ˆ u giá tri cu’a bie´ˆ n HOME không ˙ se d oc thay the´ ˙bo’i d o`ng da˜n d `u d ’ d´ n thu ˙muc cá nhân cu’a nguo`i d¯u’o’c gán thì da´ˆ u ngã ˜ ¯u’ ’ ˆ ’ ¯u’ ’ ˆ ¯aˆ ¯u ¯eˆ ’ ’’ ˙ mà d chay he vo’. Ne´˙u nhu ngay sau da´ u ngã (và truo´c da´ u gach ˙chéo) là mot tu` trùng dùng, ¯ã ˆ ˆ ˆ ˆ ’ ’ ’’ ˆ ˙ the´ bo’i vo´’i tên cu’a moˆt˙ngu’˙o`’i dùng ho’p pháp, thì da´ˆ u ngã coˆng vo´’i tên ngu’o`˙’i dùng d¯u’o’c thay ˆ ’ ˙ sau da´ u ngã d¯u’o`’ng daˆ˜n d¯aˆ`˙y d¯u’ d¯e´ˆ n thu’ mu˙ c cá nhân cu’a ngu’o`’i ˙dùng này. Ne´ˆ u nhu’ tu`’ d¯u´’ng ˆ không pha’i là tên cu’a moˆt ngu˙’o`’i dùng (và không roˆ˜ng), thì tu`’ không bi thay d¯oˆ’i. Ne´ˆ u nhu’ sau ˙ u này se d oc thay the´ bo’i tên d `u d ’ cu’a thu ˙ muc hien tho`i (tu´c là da´ˆ u ngã là ’+’, hay ký hie ˜ ¯u’ ’ ¯aˆ ¯u ˆ ˆ ’ ˆ ’ ’ ’ ˙´ u ngã là ’-’, thì thay the´ giá tri cu’a bie ˙ ´ n ˙OLDPWD (thu giá tri cu’a bie´ˆ n PWD). Ne´ˆ˙u du´’ng sau da ˆ ˆ ˆ ’ ˙ "). ˙ muc "cu ˜ ˙
3.7.3
´ˆ Phép the´ˆ các tham bie´ˆ n và bie´ˆ n so
Ký tu’ $ d¯u’o’c su’’ dung cho các thao tác the´ˆ tham bie´ˆ n, the´ˆ các câu leˆnh và the´ˆ các bieˆ’u thu´’c so´ˆ ho˙c. Bieˆ’˙u thu´’c ˙hay tên d¯u´’ng sau $ có theˆ’ d¯u’o’c d¯u’a vào ngoa˘c, ˙không nha´ˆ t thie´ˆ t, nhu’ng ˙ n, vì da´ u ngoa˘c phân cách bie’u thu´c vo´i các ˙ tu` hay ký tu˙ d ´ ng sau. Nhu vay, d ’ goi ra´ˆ t tie ˆ ˆ ˆ ’ ’ ’ ’ ¯u’ ’ ˆ ¯eˆ ˙ ˙ ˙ ˙ ca`n d˙˘ t giá tri cu’a tham bie´ˆ n nói chung cu˜ng nhu’ bie´ˆ n môi tru’o`’ng nói riêng trong dòng leˆnh, ˆ ¯a ˙ ˙ ˙ ’ ´ ` ´ ´ ´ ’ ’ bieˆu thu´’c dang $parameter. Daˆu ngoa˘c chı caˆn thieˆt, neˆu tên cua tham bieˆn có chu´’a vài chu ˜’ so´ˆ , hoa˘c khi˙ theo sau tên còn có các ˙ký tu’ khác, mà chúng ta không muo´ˆ n heˆ vo’ "hieˆ’u laˆ`m" ˙ ta´ t ca’ các giá tri cu’a bie´ n so´ xa’y ˙ra phép the´ da´ u chúng˙là moˆt phaˆ`n cu’a tên tham bie´ˆ n. Trong ˆ ˆ ˆ ˆ ˆ ngã (∼), su’˙khai trieˆ’n tham bie´ˆ n và bie´ˆ n so´ˆ , phép the´ˆ các câu˙ leˆnh, phép the´ˆ các bieˆ’u thu´’c so´ˆ ˙ tu` không xa’y ra, tru` truo`ng hoc, cu˜ng ˙nhu’ xóa các ký tu’ trích daˆ˜n (xem du’o´’i). Su’ phân chia ’ ’ ’’ ˙ ˙ ˙ ’ ˜ ´ ’ ’ ’ ho’p "$" (lo`’i giai thích xem o’ bang soˆ 3). Su’ khai trieˆn các maˆu tên taˆp tin và thu’ muc cu˜ng ˙ ˙ ˙ ˙ không d¯u’o’c thu’c hieˆn. ˙ ˙ ˙
3.7 Khai trieˆ’n bieˆ’u thu´’c
3.7.4
41
Phép the´ˆ các câu leˆnh ˙
Phép the´ˆ các câu leˆnh là moˆt công cu ra´ˆ t mang cu’a bash. Ý nghı˜a cu’a nó na`˘ m o’’ choˆ˜ thay the´ˆ ˙ tên các câu leˆnh bo˙’’i ke´ˆ t qua˙’ thu’c hieˆ˙n cu’a chúng. Có hai dang phép the´ˆ leˆnh: $(command) ˙ ˙ ˙ ˙ ´ và ‘command‘ Neˆu u´’ng dung dang thu´’ hai (chú ý o’’ d¯ây˙su’’ dung da´ˆ u "ngoa ˘ c d¯o’n ngu’o’c", ˙ ˘ c se có chu ˙ ´c phím cho nó thu’o`’ng na˘`m trên˙ phím˙ Tab), thì da´ˆ u gach ngu’o’c (\) ˙o’’ trong da´ˆ u ngoa ˜ ’ ˙ oc) là mot ˙ sau nó (da´ u gach ngu na˘ng nhu’ moˆt ký tu’ thông thu’o`’ng, tru`’ tru’o`’ng ho’p,˙ khi d¯u´’ng ˆ ˆ ’’ ˙ ˙ trong ˙ngoa˘c ta˙o $, ‘, hay moˆt˙ \. Ne´ˆ u˙ nhu’ su’’ dung dang $(command), thì ta´ˆ t ca’ các ký tu’ d¯u´’ng ˙ ký tu ˙ nào có ý nghıa d ˘ c biet. Ne´ u phép ˙ the´ câu lenh xa ˙’ y ˙ra thành moˆt ˙câu leˆnh, không có ˜ ¯a ˆ ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ ˙ phía trong ngoa˘c kép, thì trong ke´ˆ t qua’ cu’a phép the´ˆ se˜ không thu’c hieˆn phép phân chia tu`’ và ˙˜u tên tap tin và thu muc. ˙ ˙ su’ khai trieˆ’n ma ˆ ˆ ’ ˙ ˙ ˙
3.7.5
´ˆ hoc (Arithmetic Expansion) Phép the´ˆ so ˙
Phép the´ˆ so´ˆ hoc cho phép tính giá tri cu’a moˆt bieˆ’u thu´’c so´ˆ hoc và thay the´ˆ nó (bieˆ’u thu´’c) ˙ ˙ the´ so´ ˙hoc: $[expression] bo’’i ke´ˆ t qua’ thu˙ d¯u’o’c. Có hai dang phép ((expression)) ˆ ˆ ˙ Trong d¯ó expression d¯u’o’c˙ hieˆ’u (d¯u’o’c bash˙ d¯oc) nhu’ khi d¯u´’ng trong ngoa˘c kép, nhu’ng ˙ Phía trong ˙ nhu˜’ng da´ˆ u ngoa˘c kép o’’ trong˙ expression lai d¯u˙’o’c d¯oc nhu’ moˆt ký tu’ thu’o`’ng. ˙ ´ câu le˙nh. Cú˙ pháp cu’a bie’u thu´c expression ˙có thu’c hieˆn các phép the´ˆ tham˙ bie´ˆ n˙ và the ˆ ˆ ˆ ’ ˙ cú pháp cu’a bie’u thu´c so´ hoc cu’a ngôn ˙ ngu C, cu the’ hon ve` va´ n expression tu’o’ng˙ tu’ nhu ˜’ ˆ ˆ ’ ˆ ˆ ’ ’ ˆ ˙ ˙ cu’a bash. Ví d¯eˆ` này có theˆ’ d¯oc trong˙ phaˆ`n ARITHMETIC EVALUATION cu’a trang man du, câu leˆnh ˙ ˙ ˙ kênh giao tác [user]$ echo $((2 + 3 * 5))
cho ke´ˆ t qua’ ba`˘ ng "17". Ne´ˆ u bieˆ’u thu´’c không chính xác, bash se˜ d¯u’a ra thông báo loˆ˜i.
3.7.6
Phân chia tu`’ (word splitting)
Sau khi thu’c hieˆn xong các phép the´ˆ tham bie´ˆ n, the´ˆ leˆnh, và the´ˆ các bieˆ’u thu´’c so´ˆ hoc, heˆ vo’ lai ˙ ˙lenh mot la`n nua (nhung o’ dang thu˙ d oc sau các phép the´ nói trên) ˙ và ˙ thu˙c phân tích dòng ¯u’ ’ ˆ ˆ ˆ ˜’ ˆ ’ ’ ’ ˙ ˙ ˙ ˙ ˙ ˜ ` ’ ’ hieˆn vieˆc phân chia tu`’ (word splitting). Thao tác này na˘m o’ choˆ, heˆ vo tìm trong dòng leˆnh ˙ ký tu phân chia, xác d nh bo’i bie´ n IFS (xem trên), và nho ˙` d chia nho’ dòng le˙ nh ta´ˆ t˙ ca’ các ¯i ˆ ’ ’ ˆ ’ ¯ó ˙ ˙ ˜ ´ ` ´ thành các tu`’ riêng re˜ trong các choˆ tu’o’ng u´’ng. Neˆu giá tri cu’a IFS ba˘ng moˆt dòng troˆng,˙thì ˙ ˙ the´ nào trong vieˆc phân chia tu`’ se˜ không xa’y ra. Ne´ˆ u trong dòng leˆnh không thu’c hieˆn phép ˆ ˙ ˙ ˙ ˙ ’ các phép the´ˆ keˆ trên, thì phân chia tu`’ cu˜ng không xa’y ra.
3.7.7
Khai trieˆ’n các maˆ˜u tên taˆp tin và thu’ muc (Pathname Expansion) ˙ ˙
Phép the´ˆ tên d¯u’o`’ng daˆ˜n và taˆp tin (Pathname expansion) su’’ dung d¯eˆ’ chı’ nho`’ moˆt maˆ˜u nho’ ˙ (hay thu muc), tuong u´ng vo´i ma ˙ ˙ gon mà có theˆ’ chı’ ra vài taˆp tin ’ ’’ ’ ’ ˆ˜u này. Sau khi phân chia tu`’, ˙ chon -f, thì bash ˙ và˙ ne´ˆ u nhu’ không d¯u’a ra tùy se˜ tìm kie´ˆ m trong tu`’ng tu`’ cu’a dòng leˆnh các ˙ ký tu’ *, ?, và [. Ne´ˆ u tìm tha´ˆ y tu`’ vo´’i moˆt hay vài ký tu’ nhu’ vaˆy, thì tu`’ này se˜ d¯u’˙o’c xem ˙ danh sách d˙ o`ng da˜˙n, tuong u´ng vo´i ma˙˜u này. nhu’˙moˆt maˆ˜u, và caˆ`n thay the´ˆ bo’’i các tu`’ trong ¯u’ ’ ˆ ’’ ’ ’ ˆ ˙ không tìm tha´ y tên tuong u´ng vo´i ma˜u, và bie´ n nullglob không d oc d a ra, thì tu` Ne´ˆ u nhu ¯u’ ’ ¯u’ ˆ ˆ ’ ’’ ’ ’ ˆ ’ se˜ không thay d¯oˆ’i, tu´’c là các ký tu’ d¯a˘c bieˆt bi ma´ˆ t giá tri và hieˆ’u nhu’ các ký˙tu’ thu’o`’ng. Ne´ˆ u ˙˜n tu ˙ ˙ ˙ nhu’ bie´ˆ n này d¯u’o’c xác d¯inh, mà d˙¯u’o`’˙ng da ˆ ’o’ng u´’ng vo´’i maˆ˜u không tìm tha´ˆ y, thì tu`’ se˜ bi ˙ xóa kho’i dòng leˆ˙nh. Các ˙ký tu’ dùng d¯eˆ’ tao maˆ˜u có các giá tri trong ba’ng 3.4 ˙ ˙ ˙ ˙
42
Bash
Ba’ng 3.4: Các ký tu’ tao maˆ˜u ˙ ˙
Ký tu’ Quy luaˆt thay the´ˆ ˙ ˙ * Tu’o’ng u´’ng vo´’i ba´ˆ t ky` dòng ký tu’ nào, keˆ’ ca’ dòng roˆ˜ng. Ví du, v*.txt ˙ ˙ se˜ d¯u’o’c thay the´ˆ bo’’i vnoss.txt, vnlinux.txt và vntex.txt ˙ tap tin này to`n tai), và *.png se tuong u´ng ta´ t ca’ các tap tin có (ne´ˆ u các ˜ ’’ ’ ˆ ˆ ˆ ˆ ˙ ˙ ˙ ` ` ` phaˆn mo’’ roˆng png (taˆp tin d¯oˆ hoa hai chieˆu). ˙ ˙ ˙ ? Tu’o’ng u´’ng ba´ˆ t ký moˆt ký tu’ d¯o’n nào. Ví du, maˆ˜u file?.txt se˜ d¯u’o’c ˙ thaythe´ˆ ˙ bo’’i các tên teˆ˙p sau ˙ ˙ file1.txt, file2.txt, file3.txt, và filea.txt (ne´ˆ u chúng toˆ`n tai), nhu’ng file23.txt thì không. ˙ [...] Tu’o’ng u´’ng ba´ˆ t ky` ký tu’ nào trong so´ˆ các ký tu’ na˘`m trong da´ˆ u ngoa˘c ˙ ´ˆ u ˙tru`’ (-), ví du c-f, bieˆ˙’u cách nhau bo’’i da vuông này. Ca˘p ký tu’, phân ˙´ t ký ký ˙ tu nào, theo tu` d ’n, na˘`m giua hai ký tu ˙ này, ke’ ca’ thi moˆt dãy; ba ˜’ ˆ ˆ ’ ’ ’ ¯ieˆ ˙ ˙ ˙ ˙ ˜ hai ký tu’ tao ra dãy (c và f trong ví du) cu˜ng tu’o’ng u´’ng vo´’i maˆu. Ne´ˆ u ˙ trong ngoa˘c vuông là hay˙ , thì ma˜u (o’ vi trí này) se tuong ký tu’ d¯aˆ`˙u tiên ˜ ’’ ˆ ’ ˆ ˙ d oc chı’ ra trong ˙ u´’ng ˙ta´ˆ t ca’ các ký tu’, không ngo ¯u’ ’ ˙ ˙ Maˆ˜u tên taˆp tin ra´ˆ t thu’o`’ng xuyên su’’ dung trong dòng leˆnh có chu´’a ls. Hãy tu’o’’ng tu’o’ng ˙ ˙ c, trong d có ˙chu´a mot so´ luong lo´n các tap˙tin là ban muo´ˆ n xem thông tin cu’a moˆt thu’ mu ¯ó ˆ ’ ˆ ˆ ’’ ’ ˙ ˙ ˙ ˙ ˙ ˙ ’ ’ ’ d¯u các dang, ví du, taˆp tin hình anh, phim vo´’i dang gif, jpeg, avi, v.v. . . . ¯Deˆ thu d¯u’o’c thông ˙ jpeg, có the’ dùng câu lenh ˙ ˙ tin chı’ cu’˙ a taˆp tin˙dang ˆ ˆ ˙ ˙ ˙ kênh giao tác
[user]$ ls *.jpg
Ne´ˆ u trong thu’ muc có nhieˆ`u taˆp tin, mà tên cu’a chúng là các so´ˆ goˆ`m bo´ˆ n chu˜’ so´ˆ (thu’ muc ˙ thì lenh sau ˙ chı’ d a ra danh sách các tap tin có so´ tu` 0500 d´ n 0999: ˙ /proc là moˆt ví du+), ¯u’ ¯eˆ ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ kênh giao tác
[user]$ ls -l 0[5-9]??
3.7.8
Xóa các ký tu’ d¯a˘c bieˆt ˙ ˙ ˙
Sau khi làm xong ta´ˆ t ca’ các phép the´ˆ , các ký tu’ \, ‘ và " còn lai trong dòng leˆnh (chúng ˙ he´ t. ˙ d¯u’o’c su’’ dung d¯eˆ’ huy’ bo’ giá tri d¯a˘c bieˆt cu’a các˙ký tu’ khác) se˜ bi xóa ˆ ˙ ˙ ˙ ˙ ˙ ˙ ˙
3.8
Shell - moˆt ngôn ngu˜’ laˆp trình ˙ ˙
Nhu’ d¯ã nói o’’ trên, d¯eˆ’ có theˆ’ xây du’ng ba´ˆ t ky` gia’i thuaˆt nào, cu˜ng caˆ`n có các toán tu’’ kieˆ’m tra ˙ d¯ieˆ`u kieˆn. Heˆ vo’ bash hoˆ˜ tro’ các˙ toán tu’’ lu’a chon if...then...else và case, cu˜ng ˙ ˙ ˙ ˙ ˙ ’ ’ nhu’ các toán tu’ vòng la˘p for, while, until, nho`’ d¯ó nó (bash) tro’ thành moˆt ngôn ˙ ngu˜’ laˆp trình manh. ˙ ˙ ˙
3.8.1
Toàn tu’’ if và test (hoa˘c [ ]) ˙
Ca´ˆ u trúc cu’a toán tu’’ d¯ieˆ`u kieˆn có dang thu gon nhu’ sau: if list1 then list2 else list3 ˙ và list3 ˙ fi trong d¯ó, list1, list2, là ˙các chuoˆ˜i câu leˆnh, phân cách nhau bo’’i da´ˆ u ˙
3.8 Shell - moˆt ngôn ngu˜’ laˆp trình ˙ ˙
43
pha’y và ke´ˆ t thúc bo’’i moˆt da´ˆ u cha´ˆ m phaˆ’y hay ký tu’ dòng mo´’i. Ngoài ra, các chuoˆ˜i này có theˆ’ d¯u’o’c d¯u’a vào da´ˆ u ngoa˘˙c nhon: list. Toán tu’’ if kieˆ˙’m tra giá tri d¯u’o’c tra’ lai bo’’i các câu leˆnh ˙ tri ˙ d oc ˙tra’ lai bo’i câu le˙ nh ˙ ˙ ˙ có vài câu lenh, thì kie’m tra giá tu`’ list1. Ne´ˆ u trong danh sách ¯u’ ’ ˆ ˆ ˆ ’ ˙ ˙ ˙ ˙ ˙ ´ ´ ` ’ cuoˆi cùng cua danh sách. Neˆu giá tri này ba˘ng 0, thì se˜ thu’c hieˆn các leˆnh tu`’ list2; còn ˙ c hien nhung lenh tu` ˙list3. ˙ Giá˙ tri d oc tra’ lai bo’i ne´ˆ u giá tri này khác không, thì se˜ thu ˜’ ¯u’ ’ ˆ ’ ˆ ’ ’ ˙ ˙ ˙ ˙ ˙ ˙ ˙ a ra. ˜ toán tu’’ if nhu’ vaˆy, trùng vo´’i giá tri mà chuoˆi leˆnh thu’c hieˆn (list2 hoa˘c list3) d¯u ’ ˙ ˙ ˙ ˙ Dang d¯aˆ`y d¯u’ cu’a˙ leˆnh if nhu’ sau: ˙ ˙ if list then list ˙ [ elif list then list ] ... [ else list ] fi (o’’ d¯ây da´ˆ u ngoa˘c vuông chı’ có nghı˜a là, nhu˜’ng gì na`˘ m trong nó, ngoa˘c vuông, không nha´ˆ t ˙ mà có theˆ’ d¯u’o’c thie´ˆ t pha’i có). Bieˆ’u˙ thu´’c d¯u´’ng sau if hay elif thu’o`’ng là câu leˆnh test, ˙ ˙ ’ ’ ´ bieˆu thi bo’’i daˆu ngoa˘c vuông [ ]. Leˆnh test thu’c hieˆn phép tính moˆt bieˆu thu´’c nào d¯ó, và ˙ ’u thu´c là d ˙ và 1 trong˙ truo`˙ng hop nguoc la ˙ ˙ tri 0, ne´ u bie tra’ lai giá ¯úng, ˆ ˆ ’ ’’ ’ ’ ’ i. Bieˆ’u thu´’c d¯u’o’c d¯u’a ˙ ˙ ong trình ˙ to´’i chu test nhu’ moˆt tham so´ˆ cu’a chu’o’ng trình. ˙Thay vì˙ gõ˙ ’’ ˙ test expression có theˆ’ d¯u’a bieˆ’u thu´’c expression vào ngoa˘c vuông: ˙ [ expression ] Caˆ`n chú ý ra`˘ ng, test và [ d¯ó là hai tên cu’a cu’a cùng moˆt chu’o’ng trình, chu´’ không pha’i là moˆt phép bie´ˆ n hóa thaˆ`n thông nào d¯ó cu’a heˆ vo’ bash (chı’ ˙là cú pháp cu’a [ d¯òi ho’i pha’i có ˙ ˜ cu’a test trong ca´ u trúc if có the’ su’ dung da´ˆ u d˙¯óng ngoa˘c). Và cu˜ng caˆ`n chú ý ra`˘ ng o’’ cho ˆ ˆ ˆ ’ ˙ ba´ˆ t ky` chu’o’ng˙ trình nào. ¯Deˆ’ ke´ˆ t thúc muc này, chúng ta d¯u’a ra ví du su’’ dung if: ˙ ˙ ˙ kênh giao tác if [ -x /usr/bin/unicode_start ] ; then unicode_start else echo "hello world" fi
Veˆ` toán tu’’ test (hay [...]) caˆ`n d¯i sâu ho’n.
3.8.2
Toán tu’’ test và d¯ieˆ`u kieˆn cu’a bieˆ’u thu´’c ˙
Bieˆ’u thu´’c d¯ieˆ`u kieˆn, su’’ dung trong toán tu’’ test, d¯u’o’c xây du’ng trên co’ so’’ kieˆ’m tra thuoˆc ˙ ˙ các dòng ˙ ˙ tính taˆp tin, so sánh và các so sánh so´ˆ hoc thông thu˙’o`’ng. Bieˆ’u thu´’c phu´’c tap ho’n ˙ ˙ ˙ d¯u’o’c tao ra tu`’ các thao tác d¯o’n và kép sau ("nhu˜’ng viên gach co’ so’’"): ˙ ˙ ˙ • -a file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i. • -b file ¯Dúng ne´ˆ u file toˆ`n ta˙i, và là moˆ˙t taˆ˙p tin thie´ˆ t bi˙ kho´ˆ i (block device) d¯a˘˙c bieˆ˙t. • -c file ¯Dúng ne´ˆ u file toˆ`n ta˙i, và là moˆ˙t taˆ˙p tin thie´ˆ t bi˙ ký tu˙’ (charater device) d¯a˘˙c bieˆ˙t. • -d file ¯Dúng ne´ˆ u file toˆ`n ta˙i và là moˆ˙t thu’ mu˙c. • -e file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i.
44
Bash • -f file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và là moˆ˙t taˆ˙p tin thông thu’o`’ng. • -g file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và d¯u’o˙’c d¯a˘˙t bit thay d¯oˆ’i nhóm. • -h file hay -L file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và là liên ke´ˆ t meˆ`m (liên ke´ˆ t tu’o˙’ng tru’ng). • -k file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và d¯u’o˙’c d¯a˘˙t bit sticky. • -p file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và là tên cu’a moˆ˙t o´ˆ ng (kênh FIFO). • -p file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và là tên cu’a moˆ˙t o´ˆ ng (kênh FIFO). • -r file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và có quyeˆ`n d¯o˙c. • -s file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và kích thu’o´’c lo´’n ho’n không. • -t fd ¯Dúng ne´ˆ u boˆ˙ mô ta’ cu’a taˆ˙p tin (fd) mo’’ và chı’ lên terminal. • -u file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và d¯u’o˙’c d¯a˘˙t bit thay d¯oˆ’i ngu’o`’i dùng. • -w file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và có quyeˆ`n ghi. • -x file ¯Dúng ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và có quyeˆ`n thu˙’c thi. • -0 file ¯Dúng, ne´ˆ u taˆ˙p tin có tên file và chu’ so’’ hu˜’u cu’a nó là ngu’o`’i dùng mà ID có hieˆ˙u lu˙’c chı’ d¯e´ˆ n. • -G file ¯Dúng, ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và thuoˆ˙c veˆ` nhóm, xác d¯i˙nh bo’’i ID nhóm có hieˆ˙u lu’c. ˙ • -S file ¯Dúng, ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và là socket. • -N file ¯Dúng, ne´ˆ u taˆ˙p tin có tên file toˆ`n ta˙i và thay d¯oˆ’i tu`’ laˆ`n d¯u’o˙’c d¯o˙c cuo´ˆ i cùng. • file1 -nt file2 ¯Dúng, ne´ˆ u taˆ˙p tin file1 có tho`’i gian su’’a d¯oˆ’i muoˆ˙n ho’n file2.
3.8 Shell - moˆt ngôn ngu˜’ laˆp trình ˙ ˙
45
• file1 -ot file2 ¯Dúng, ne´ˆ u taˆ˙p tin file1 "già" ho’n file1 (tru’o`’ng ho˙’p ngu’o˙’c la˙i cu’a tru’o`’ng ho˙’p trên). • file1 -ef file2 ¯Dúng, ne´ˆ u taˆ˙p tin file1 và file2 có cùng mo˙ˆ t so´ˆ thie´ˆ t bi˙ và chı’ so´ˆ mô ta’ inode. • -o optname ¯Dúng, ne´ˆ u tùy cho˙n optname cu’a heˆ˙ vo’ d¯u’o˙’c kích hoa˙t. Chi tie´ˆ t xin xem trên trang man bash. • -z string ¯Dúng, ne´ˆ u d¯oˆ˙ dài cu’a chuoˆ˜i string ba˘`ng không. • -n string ¯Dúng, ne´ˆ u d¯oˆ˙ dài cu’a chuoˆ˜i khác không. • string1 == string2 ¯Dúng, ne´ˆ u hai chuoˆ˜i trùng nhau. Có theˆ’ thay hai == ba˘`ng moˆ˙t =. • string1 !== string2 ¯Dúng, ne´ˆ u hai chuoˆ˜i không trùng nhau. • string1 < string2 ¯Dúng, ne´ˆ u chuoˆ˜i string1, theo tu`’ d¯ieˆ’n, d¯u´’ng tru’o´’c chuoˆ˜i string2 (d¯o´ˆ i vo´’i ngôn ngu˜’ hieˆn tho`’i). ˙ • string1 > string2 ¯Dúng, ne´ˆ u chuoˆ˜i string1, theo tu`’ d¯ieˆ’n, d¯u´’ng sau chuoˆ˜i string2 (d¯o´ˆ i vo´’i ngôn ngu˜’ hieˆn tho`’i). ˙ • arg1 OP arg2 ’’ d¯ây OP là moˆt trong các phép so sánh so´ˆ hoc: -eq (ba`˘ ng), -ne (khác, không ba`˘ ng), O ˙ (lo´n hon), -ge (lo´n hon hoa˘c ba˘`ng). -lt (nho’ ho’n),˙ -le (nho’ ho’n hoa˘c ba˘`ng), -gt ’ ’ ’ ’ ˙ ˙ ’’ choˆ˜ các tham so´ˆ arg1 và arg2 có theˆ’ su’’ dung các so´ˆ nguyên (âm hoa˘c du’o’ng). O ˙ ˙ Tu`’ các bieˆ’u thu´’c d¯ieˆ`u kieˆn co’ ba’n này có theˆ’ xây du’ng các bieˆ’u thu´’c phu´’c tap theo ý ˙ thuo`ng PHU ˙ ng) và HOA ˙ ’ DINH, VÀ (co ˘ C: muo´ˆ n nho`’ các phép lôgíc thông ˆ ’’ ¯ ˙ ˙ ˙ • !(expression) Phép phu’ d¯inh. ¯Dúng, ne´ˆ u bieˆ’u thu´’c sai. ˙ • expression1 -a expression2 Phép coˆng lôgic AND. ¯Dúng ne´ˆ u ca’ hai bieˆ’u thu´’c d¯eˆ`u d¯úng. ˙ • expression1 -o expression2 Phép lôgíc hoa˘c OR. ¯Dúng ne´ˆ u moˆt trong hai bieˆ’u thu´’c d¯úng. ˙ ˙
46
Bash
3.8.3
Toán tu’’ case
Dang cu’a toán tu’’ case nhu’ sau: ˙ case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ...+ esac Câu leˆnh case d¯aˆ`u tiên khai trieˆ’n tu`’ word, và so sánh nó (word) vo´’i moˆ˜i tu`’ trong maˆ˜u ˙ theo thu´ tu. Sau khi tìm tha´ y su trùng nhau d `u tiên thì du`ng viec so sánh lai, và pattern ¯aˆ ˆ ˆ ’ ’ ’ ’ ˙ ’ lai bo’i toán ˙ tu’ ˙ thu’c hieˆn danh sách list các câu leˆnh d¯u´˙’ng sau maˆ˜u d¯ã tìm tha´ˆ y. Giá tri tra ’ ’ ˙ ba˘`ng ˙ 0, ne´ u không tìm tha´ y su trùng ˙ này, nhau nào. Trong tru’o`’ng ho’p ngu’o˙’c lai,˙ tra’ lai giá tri ˆ ˆ ’ ˙’ case ˙ ˙ la´ y tu`˙ mà câu leˆnh cuo´ˆ i cùng trong danh˙ sách list d¯u’a ra. Ví du su’’ dung˙ toán tu sau ˆ ’ ’ ˙ ˙ ˙ script /etc/rc.d/rc.sysinit (FreeBSD-style): kênh giao tác case "$UTC" in yes|true) CLOCKFLAGS="$CLOCKFLAGS -u"; CLOCKDEF="$CLOCKDEF (utc)"; ;; no|false) CLOCKFLAGS="$CLOCKFLAGS --localtime"; CLOCKDEF="$CLOCKDEF (localtime)"; ;; esac
Ne´ˆ u bie´ˆ n so´ˆ (UTC) nhaˆn giá tri yes hoa˘c true, thì se˜ thu’c hieˆn ca˘p leˆnh thu´’ nha´ˆ t, nhaˆn ˙˘ p thu´ hai. ˙ ˙ ˙ ˙ ˙ ˙ ˙ giá tri no hoa˘c false - ca ’ ˙ ˙ ˙
3.8.4
Toán tu’’ select
Toán tu’’ select cho phép toˆ’ chu´’c hoˆi thoai vo´’i ngu’o`’i dùng. Nó có dang sau: ˙ ˙ ˙ select name [ in word; ] do list; done Lúc d¯aˆ`u tu`’ maˆ˜u word hình thành moˆt danh sách nhu˜’ng tu`’ tu’o’ng u´’ng vo´’i maˆ˜u này. Taˆp ˙ báo lo˜i tiêu chua’n, hon nua mo˜i tu` d oc d kèm ˙ ho’p nhu˜’ng tu`’ này d¯u’o’c d¯u’a vào kênh thông ˆ ˆ ’ ˜’ ˆ ’ ¯u’ ’ ¯i ˙ ˙ ˙ vo´’i moˆt so´ˆ thu´’ tu’. Ne´ˆ u maˆ˜u word bi bo’ qua (không có trong toán tu’’ select), thì se˜ d¯u’a vào ˙ bie´ n vi˙ trí (xem trên) theo˙ mot cách tuong tu. Sau d da´ u nha˘´c PS3 d oc d a ra, các tham ¯ó, ˆ ¯u’ ’ ¯u’ ˆ ˆ ’’ ’ ˙ ˙ ˙ ’ ˜ ˜ và heˆ vo’ cho`’ chuoˆi nhaˆp vào trên d¯aˆ`u vào tiêu chuaˆn. Ne´ˆ u chuoˆi nhaˆp vào có chu´’a˙so´ˆ , tu’o’ng u´’ng ˙vo´’i moˆt trong các ˙so´ˆ d¯ã hieˆn ra, thì bie´ˆ n name se˜ d¯u’o’c gán giá ˙tri ba`˘ ng tu`’ d¯i kèm vo´’i so´ˆ ˙ p vào mot dòng ro˙˜ng, thì so´ và tu` se d oc hie ˙ ˙ này. Ne´ˆ u nha ˆ ˆ ˆ ˆ ’ ˜ ¯u’ ’ ˆ n ra them moˆt laˆ`n nu˜’a. Ne´ˆ u nhaˆp ˙ ˙ ˙ ˙ ˙ Chuo˜i mà ngu˙o`i vào ba´ˆ t ky` moˆt giá tri nào khác, thì bie´ˆ n name se˜ nhaˆn giá tri ba`˘ ng không. ˆ ’’ ˙ d oc ˙ghi lai trong bie´ n REPLY. Danh ˙sách lenh ˙ list d oc thuc hien vo´i giá dùng nhaˆp vào, ¯u’ ’ ¯u’ ’ ˆ ˆ ’ ˆ ’ ˙ ˙ n. Sau˙ d là mot script nho’ (xin hãy gõ˙ không da´ u ne ˙ ˙ ˙ tri bie´ˆ n name d¯ã cho ¯ây ˆ ˆ ´ˆ u console cu’a ban ˙ a ho˜ tro viec hie’n˙ thi Tie´ ng Viet):˙ ˙ chu ˆ ˆ ˆ ’ ˆ ’ ˆ ˙ ˙ ˙ ˙ kênh giao tác #!/bin/sh echo "Ban thích dùng OS nào?" ˙ select var in "Linux" "Gnu Hurd" "Free BSD" "MacOSX" "Solaris" "QNX" break done echo "Ban d¯ã chon $var" ˙ ˙
"Other";
3.8 Shell - moˆt ngôn ngu˜’ laˆp trình ˙ ˙
47
Ghi d¯oan trên vào moˆt taˆp tin (ví du, select.sh), thay d¯oˆ’i d¯eˆ’ taˆp tin thành kha’ thi (ví ˙ hình se hien ra câu ˙ ˙ ˙ y (./select.sh). Trên màn du, chmod˙ 755 select.sh), và cha ˜ ˆ ˙ ˙ ˙ ho’i sau: kênh giao tác Ban thích dùng OS nào? ˙ 1) Linux 3) Free BSD 2) Gnu Hurd 4) MacOSX #?
5) Solaris 6) QNX
7) Other
Hãy nha´ˆ n moˆt trong 7 so´ˆ d¯u’a ra (tu`’ 1 d¯e´ˆ n 7). Ne´ˆ u ban nhaˆp 4 (nha´ˆ n ca’ <Enter>), thì se˜ ˙ ˙ ˙ tha´ˆ y thông báo sau: kênh giao tác Ban d¯ã chon MacOSX ˙ ˙
3.8.5
Toán tu’’ for
Toán tu’’ for làm vieˆc có khác moˆt chút so vo´’i for trong các ngôn ngu˜’ laˆp trình thông thu’o`’ng. ˙ ’ m giá tri cu ˙’ a mot bie´ n so´ nào d (lên hoa˘c xuo´ ng) ˙ mot d n vi sau mo˜i Thay vì ta˘ng hoa˘c gia ¯ó ˆ ˆ ˆ ˆ ˆ ¯o’ ˆ ˙ bie´ n˙d trong ˜n cho `’ ˙d¯u’a sa ˘ vòng la˘p, thì nó˙gán giá tri tie´ˆ˙p theo ˙trong danh sách tu ˆ ¯ó ˙ la˘p. Nói chung ca ˙´ u trúc có dang sau: moˆ˜i vòng ˆ ˙ ˙ for name in words do list done Quy luaˆt xây du’ng danh sách leˆnh (list) gio´ˆ ng trong toán tu’’ if. Ví du. Script sau tao ˙ ˙ ˙ các taˆp tin ˙fu1, fu2, và fu3: ˙ ˙ kênh giao tác for a in 1 2 3 ; do touch fu$a done
Có theˆ’ gõ ba dòng này trên moˆt dòng leˆnh, ke´ˆ t qua’ thu d¯u’o’c tu’o’ng tu’ vo´’i script. Dang ˙ ˙ ˙ ˙ toˆ’ng quát cu’a toán tu’’ for nhu’ sau:˙ for name [ in word; ] do list ; done ¯Daˆ`u tiên cu˜ng xa’y ra su˙’ khai trieˆ’n tu`’ word theo quy luaˆ˙t khai trieˆ’n bieˆ’u thu´’c (xem trên). Sau d¯ó bie´ˆ n name laˆ`n lu’o’t d¯u’o’c gán các giá tri thu d¯u’o’c tu`’ su’ khai trieˆ`n này, và thu’c hieˆn ˙ mo˜˙i la`n nhu vay. Ne´˙u không˙ có "in ˙ word", thì danh sách ˙ lenh ˙ danh sách leˆnh list trong ˆ ˆ ˆ ˆ ’ ˆ ˙ ˙ ˙ ´ ˆn vi trí d¯ã d¯u’a ra. Trên Linux có list d¯u’o’c thu’c hieˆn moˆt laˆ`n cho moˆ˜i tham bie ˙ ˙ ˙ ˙ ˙ chu’o’ng trình seq, tie´ˆ p nhaˆn hai so´ˆ nguyên làm tham so´ˆ , và d¯u’a ra chuoˆ˜i ta´ˆ t ca’ các so´ˆ na˘`m giu˜’a hai so´ˆ này (coˆng thêm˙ ca’ chúng). Nho`’ câu leˆnh này có theˆ’ su’’ dung for cu’a bash làm ˙ trong các ngôn ngu lap trình ˙ thông thuo`ng. De˙’ làm d oc d `u này chı’ vieˆc nhu’ toán tu’’ for ˜’ ˆ ¯u’ ’ ¯ieˆ ’’ ¯ ˆ ˙ ˙ caˆ`˙n vie´ˆ t vòng la˘p for nhu’ sau: ˙ kênh giao tác for a in $( seq 1 6 ) ; do cat fu$a done
Câu leˆnh (script) này d¯u’a ra màn hình noˆi dung cu’a 10 taˆp tin (ne´ˆ u có): "fu1", ..., "fu10". ˙ ˙ ˙
48
Bash
3.8.6
Toán tu’’ while và until
Toán tu’’ while làm vieˆc tu’o’ng tu’ nhu’ if, nhu’ng vòng la˘p các câu leˆnh trong list2 chı’ ˙ n không tho ˙ ’ a mãn. Ca´ u trúc có thu’c hieˆn khi d¯ieˆ`u kieˆn˙ còn d¯úng,˙ và se˜ ngu`’ng khi d¯ieˆ`u kie ˆ ˆ ˙ ˙ ˙ ˙ dang nhu’ sau: ˙ while list1 do list2 done Ví du: ˙ kênh giao tác while [ -d directory ] ; do ls -l directory >> logfile echo -- SEPARATOR -- >> logfile sleep 60 done
Chu’o’ng trình (script) trên se˜ theo dõi và ghi lai noˆi dung cu’a thu’ muc directory theo ˙ tu˙ong tu nhu toán tu’˙ while: tu`’ng phút ne´ˆ u thu’ muc còn toˆ`n tai. Toán tu’’ until ’’ ’ ’ ’ ˙ ˙ ˙ until list1 do list2 done D ¯ ieˆ’m khác bieˆ˙t na˘`m o’’ choˆ˜, su’’ du˙ng giá tri˙ phu’ d¯i˙nh cu’a d¯ieˆ`u kieˆ˙n list1, tu´’c là list2 thu’c hieˆn, ne´ˆ u câu leˆnh cuo´ˆ i cùng trong danh sách list1 tra’ lai trang thái thoát ra khác ˙ ˙ ˙ ˙ ˙ không.
3.8.7
´ˆ Các hàm so
Cú pháp Heˆ vo’ bash cho phép ngu’o`’i dùng tao các hàm so´ˆ cho mình. Hàm so´ˆ làm vieˆc và
d¯u’o’c su’’ dung˙ gio´ˆ ng nhu’ các câu leˆnh thông thu˙’o`’ng cu’a heˆ vo’, tu´’c là chúng ta có theˆ’ tu˙’ tao ˙ mo´i. Hàm so´ có ca´ u trúc ˙ nhu sau: ˙ ˙ ˙ các˙ câu leˆnh ˆ ˆ ’ ’ ˙ function name () { list } Ho’n nu˜’a tu`’ function không nha´ˆ t thie´ˆ t pha’i có, name xác d¯inh tên cu’a hàm (dùng d¯eˆ’ goi hàm), còn phaˆ`n thâm cu’a hàm so´ˆ tao bo’’i danh sách các câu leˆnh˙ list, na˘`m giu˜’a { và }. ˙ câu lenh này se d oc thuc hien mo ˙˜i khi tên name d oc goi˙ (gio´ ng nhu mot lenh thông Các ˜ ¯u’ ’ ¯u’ ’ ˆ ˆ ˆ ’ ˆ ’ ˆ ˆ ˙ `n chú ý ra˘`ng˙ hàm˙ có the ˙ ’ là d qui, tu´c là goi hàm ˙ so´˙ o’ ngay trong pha ˙ `n˙ thân cu’a thu’o`’ng). Ca ¯eˆ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ ´ ´ nó. Hàm soˆ thu’c hieˆn trong pham vi heˆ vo’ hieˆn tho`’i: không có tieˆn trình mo´’i nào d¯u’o’c chay ˙ so ˙´ (khác vo´i˙viec cha ˙ y script). ˙ ˙ ˙ khi biên dich hàm ˆ ’ ˆ ˙ ˙ ˙
3.8.8
´ˆ Tham so
Khi hàm so´ˆ d¯u’o’c goi d¯eˆ’ thu’c hieˆn, các tham so´ˆ cu’a hàm se˜ tro’’ thành các tham bie´ˆ n vi trí ˙ ˙ xem ˙trên)˙trong tho`i gian thuc hien hàm này. Chúng d oc d ˘ t các˙tên (positional parameters, ¯u’ ’ ¯a ’ ’ ˆ ˙ ˙ ˙´˘ t d `u tu` ´ ´ ´ nhu’ $n, trong d¯ó n là soˆ cu’a tham soˆ mà chúng ta muoˆn su’’ dung. Vieˆc d¯ánh ˙so´ˆ ba ¯aˆ ’ ˙ tham ˙ so´ mot lúc nho` $*, 1, nhu’ vaˆy $1 là tham so´ˆ d¯aˆ`u tiên. Cu˜ng có theˆ’ su’’ dung ta´ˆ t ca’ các ˆ ˆ ’ ˙ và d¯u’a ra˙ so´ˆ thu´’ tu’ cu’a tham so´ˆ nho`’ $# Tham so´ˆ vi ˙trí so´ˆ 0 không thay d¯oˆ’i. Trong khi thu’c ˙ nh noi trú return (trong pha`n ˙thâm cu’a hàm), thì hàm so´ se bi du`ng la ˙i hieˆn ne´ˆ u ga˘p câu le ˆ ˆ ˆ ˆ ˜ ’ ˙ `u khie˙’n d o˙ c trao cho câu lenh d ´ ng sau hàm. Khi thuc hien xong hàm ˙ so´ , các ˙ và˙quyeˆ`n d¯ie ¯u’ ˆ ˆ ¯u’ ’ ˆ ˆ ’ ˆ ˙ ˙ ˙ ˙ tham bie´ˆ n vi trí và tham bie´ˆ n d¯aˆc bieˆt # se˜ d¯u’oc tra’ lai các giá tri mà chúng có tru’o´’c khi chay ˙ ˙ ˙ ˙ ´ˆ n˙ noˆi boˆ (local) ˙ ˙ hàm. Bie Ne´ˆ u muo´ˆ n tao ˙moˆt ˙tham bie´ˆ n d¯ia phu’o’ng, có theˆ’ su’’ dung tu`’ khóa local. Cú pháp d¯u’a ra ˙ ´ ng het các tham ˙ bie´ˆ n d¯ia phu˙’o’ng gio bie´ˆ n khác, chı’ có˙ d¯ieˆ`u caˆ`n d¯u´’ng sau tu`’ khóa local: ˆ ˆ ˙ ˙
3.9 Script cu’a heˆ vo’ và leˆnh source ˙ ˙
49
local name=value. Du’o´’i d¯ây là moˆt ví du hàm so´ˆ , thu’c hieˆn công vieˆc cu’a leˆnh seq d¯ã ˙ ˙ ˙ ˙ ˙ ˙ nha˘´c d¯e´ˆ n o’’ trên: kênh giao tác seq() { local I=$1; while [ $2 != $I ]; do { echo -n "$I "; I=$(( $I + 1 )) }; done; echo $2 }
Caˆ`n chú ý d¯e´ˆ n tùy chon -n cu’a echo, nó (tùy chon) hu’y bo’ vieˆc tao dòng mo´’i. Ma˘c dù ˙ ích ˙ `u ý nghıa vo´i muc d chúng ˙ ta muo´ n o’˙ d ˙ nhung se ra´ t có tùy chon này không có nhie ˜ ’ ˜ ˆ ¯ích ˆ ˆ ’ ¯ây, ’ ˙ ˙ ´ˆ tính giai thu`’a fact Moˆt ví du khác: trong các hàm so´ˆ vo´’i muc d¯ích khác. Hàm so ˙ ˙ ˙ kênh giao tác fact() { if [ $1 = 0 ]; then echo 1; else { echo $(( $1 * $( fact $(( $1 -- 1 )) ) )) }; fi }
¯Dây là hàm so´ˆ giai thu`’a, moˆ˙t ví du˙ cu’a hàm d¯eˆ˙ qui. Hãy chú ý d¯e´ˆ n su˙’ khai trieˆ’n so´ˆ ho˙c, và phép the´ˆ các câu leˆnh. ˙
3.9
Script cu’a heˆ vo’ và leˆnh source ˙ ˙
Script cu’a heˆ vo’ chı’ là các taˆp tin có chu´’a chuoˆ˜i leˆnh. Tu’o’ng tu’ hàm so´ˆ script có theˆ’ d¯u’o’c ˙ mot câu lenh. Cú ˙ pháp truy cap d´ n các ˙ tham so´ cu ˙ ˙ thu’c hieˆn nhu ˆ ˆ ¯eˆ ˆ ˜ ng nhu’ hàm so´ˆ . Trong các ’ ˆ tru˙’o`’ng ˙ho’p thông˙ thu’o`’ng˙ khi chay script se˜ ˙có moˆt tie´ˆ n trình mo´’i d¯u’o’c chay. ¯Deˆ’ có theˆ’ thu’c ˙ o’ trong ba’n bash hie˙n tho`i, ca`n su’ dung ˙ câu lenh source, ˙ hay˙mot da´ u cha´ m "." ˙ hieˆn script ˆ ˆ ˆ ˆ ˆ ’ ’ ˆ ’ ˙`ng nghıa cu’a source). Trong˙ truo`ng hop này˙script chı ˙’ d n gia’n là mot tham ˙ so´ cu’a lenh (d¯o ˜ ¯o’ ˆ ˆ ˆ ˆ ’’ ’ ˙ ˙ ˙ nói trên. Câu leˆnh se˜ có dang: ˙ ˙ [arguments] source filename Câu leˆnh này d¯oc và thu’c hieˆn các câu leˆnh có trong taˆp tin filename trong môi tru’o`’ng ˙ d˙nh bo’i câu le ˙ nh cuo´ i cùng˙ cu’a filename. Ne´ u filename hieˆn tho`’i,˙và tra’ lai ˙giá tri, xác ¯i ˆ ˆ ˆ ’ ˙ ˙ thì ˙d o`ng da˜n, ˙liet kê trong bie´ n so´ PATH, se d oc su’ dung d ’ không chu´’a da´ˆ u ˙gach chéo, ˜ ¯u’ ’ ¯u’ ’ ’ ¯eˆ ˆ ˆ ˆ ˆ ˙ nha´˙t thie´ t ˙ tìm taˆp tin có tên ˙filename. Taˆp tin này không nha´ˆ t thie´ˆ t pha’i kha’ thi (không ˆ ˆ ˙ ˙ ´ ´ ` ’ phai có bit x). Neˆu trong thu’ muc, lieˆt kê trong PATH, không tìm thaˆy taˆp tin caˆn, thì se˜ tìm ˙ nó (taˆp tin) trong thu’ muc hieˆn ˙tho`’i. ˙Ne´ˆ u có các tham so´ˆ (d¯u’a ra arguments, xem d¯inh dang ˙ ˙ ˙ ˙ ˙
50
Bash
câu leˆnh o’’ trên), thì trong tho`’i gian thu’c hieˆn script chúng se˜ thành các tham bie´ˆ n vi trí. Ne´ˆ u ˙ có tham so´ , thì tham bie´ n vi trí˙không ˙ thay d ’i. Giá tri (trang thái), mà lenh ˙source không ¯oˆ ˆ ˆ ˆ ˙ ˙ ˙ tra’ lai, trùng vo´’i giá tri, tra’ lai bo’’i câu leˆnh cuo´ˆ i cùng trong script. Ne´ˆ u không ˙câu leˆnh nào ˙ ˙ tha´ y tap˙ tin filename, thì trang thái thoát ba`˘ ng 0. ˙ tìm d¯u’o’c˙ thu’c hieˆn, hoa˘c không ˆ ˆ ˙ ˙ ˙ ˙ ˙ ˙
3.10
Câu leˆnh sh ˙
Ban luôn luôn có theˆ’ chay moˆt ba’n sao cu’a heˆ vo’ bash nho`’ câu leˆnh bash hay sh. Khi này ˙ y ˙mot script nào d˙ ne´ u d a tên cu’a script ˙ nhu’ moˆt tham so´ˆ cho có˙ theˆ’ ba˘´t ba’n sao này cha ¯ó, ˆ ¯u’ ˆ ˙ ˙ ’ ` leˆnh bash. Nhu’ vaˆy, d¯eˆ thu’c hieˆn script myscript caˆn d¯u’a câu leˆnh "sh ˙ myscript". ˙ ´ u xem noi dung˙ cu’a mot˙ tap ˙tin script nào d (nhung tap tin nhu˙ vay có ra´ t nhie`u trên Ne ˜’ ¯ó ˆ ˆ ˆ ˆ ˆ ˆ ˆ ’ ˆ ˙ ˙ ˙ ˙ ˙ ´ ´ ` ` heˆ thoˆng), ban se˜ thaˆy dòng d¯aˆu tiên có dang sau: #!/bin/sh. ¯Dieˆu này có nghı˜a là, khi ˙ chúng ta goi˙script d¯eˆ’ thu’c hieˆn nhu’ moˆt leˆ˙nh thông thu’o`’ng, thì /bin/sh se˜ giúp chúng ta ˙ ’ thay ˙ the´ dòng ˙ này ˙ bo’i liên ke´ t d´ n ba´ t ky` mot chuong trình nào, ˙ i thu´. Có the "thu xe´ˆ p" mo ˆ ˆ ¯eˆ ˆ ˆ ˆ ’ ’’ ’ ˙ ˙ mà se˜ d¯oc taˆp tin và thu’c hieˆn các câu leˆnh tu’o’ng u´’ng. Ví du, script trên ngôn ngu˜’ Perl ba´˘ t ˙ có dang !/bin/perl. ˙ ˙ ˙ t chú ý khác là ký ˙tu # dùng d ’ vie´ t lo`i chú thích d¯aˆ`u bo’’i ˙dòng Mo ¯eˆ ˆ ’ ˆ ’ ˙ ˙ ˙ trong script. Ta´ˆ t ca’ nhu˜’ng gì d¯u´’ng sau ký tu’ này d¯e´ˆ n cuo´ˆ i dòng se˜ d¯u’o’c coi là chú thích và bi ˙ bash bo’ qua (tu´’c là heˆ vo’ se˜ không xem dòng này là câu leˆnh). Ne´ˆ u˙ ban muo´ˆ n kieˆ’m chu´’ng˙ lai tác dung cu’a ký tu’ ˙này, thì hãy nhaˆp vào dòng leˆnh moˆt˙ câu leˆnh ba´ˆ˙t ky`, và d¯a˘t tru’o´’c nó ˙ lenh) ˙ ký tu #, ví˙du "# ls", ban˙se tha´ y ra`˘ ng he ˙ vo’ bo ˙’ qua câu ˙ lenh này. ˙ (câu ˜ ˆ ˆ ˆ ˆ ’ ’ ˙ ˙ hoc nga˘´n go ˙ n ve` bash tai d˙ Ta´ t nhiên, còn˙ ra´ t nhie`u va´ n d ` quan Chúng ta se˜˙ du`’ng bài ¯ây. ˆ ˆ ˆ ˆ ˆ ¯eˆ ˙ m vi cu’a bài ˙ hoc, ví du, qua’n lý tie´ n trình, lich su’ câu trong caˆ`n xem xét nhu’ng na˘`˙m ngoài pha ˆ ’ ˙ ˙ ˙ ˙ ˙ ` ´ ` ´ ’ leˆnh, mô ta veˆ thu’ vieˆn readline, tín hieˆu, v.v. . . Các ban se˜ tìm thaˆy thông tin caˆn thieˆt trong ˙ cuo´ n huo´ng da˜n ˙khác hoa˘c trên trang ˙ man bash.˙ các ˆ ˆ ’’ ˙
3.10 Câu leˆnh sh ˙
51