Linux Cho Nguoi Moi Dung

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Linux Cho Nguoi Moi Dung as PDF for free.

More details

  • Words: 37,672
  • Pages: 55
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

Related Documents

Linux Cho Nguoi Moi Dung
November 2019 13
Cho Nguoi
November 2019 28
Hat Cho Nguoi Dan Oan
November 2019 9