Professional Documents
Culture Documents
Ba’n quyê`n
Cuô´n "Bash cho ngu’ò’i dùng" này su’’ dung ba’n quyê`n GPL. Nói môt cách ngă´n gon, ban có
˙ nhung xin hãy thêm hai d̄u˙ òng dâ˜n sau vào
thê’ làm bâ´t ký thú’ gì: in, tăng, bán, d̄ô´t,... ˙ các˙ ba’n
’ ’’
sao cu’a mình: ˙
http://rus-linux.net/book1.php?name=book1/oglavl
http://teppi.org/l4u/
Tác gia’ Kostromin V. A. cũng nhu’ ngu’ò’i dich không chiu trách nhiêm vê` hâu qua’ do viêc su’’
dung cuô´n sách này gây ra. ˙ ˙ ˙ ˙ ˙
˙
Phiên ba’n và câp nhât
Phiên ba’n 0.9 ˙ ˙
Câp nhât cuô´i cùng Ngày 9 tháng 2 năm 2005
Mo ˙ i d̄ê` ˙nghi su’a d̄ô’i, thông báo lô˜i chính ta’, lô˜i kiê´n thúc cu’a ba’n dich cũng nhu d̄ê` nghi giúp
’ ’ ’
d̄õ’˙dich xin ˙gu’’i cho Phan Vı̃nh Thinh theo d̄ia chı’ teppi@vnlinux.org. ˙ ˙
˙ ˙ ˙
Chu’o’ng 1
´i
¯ H Linux: lich su’’ và các ba’n phân phô
HD
˙
Chu’o’ng 2
Cài d̄ăt HD
¯ H Linux trên cùng máy tính
˙
vó’i Windows
• Tù’ máy chu’ tâp tin cu’a mang nôi bô qua NFS;
˙ ˙ ˙ ˙
• Tù’ máy tính khác trong mang nôi bô qua SMB;
˙ ˙ ˙
4 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
• Tù’ máy tính o’’ xa (ví du tù’ Internet) qua giao thú’c FTP;
˙
• Tù’ môt máy chu’ WWW qua giao thú’c HTTP.
˙
Theo ý kiê´n cá nhân cu’a tác gia’ thì thuân tiên và có tính thu’c tê´ nhâ´t là cài d̄ăt Linux tù’
CD-ROM, ho’n nũ’a viêc mua các d̄ı̃a CD bây ˙ giò˙ không gây khó˙ khăn gì. ˙
’
˙
Tru’ó’c khi bă´t d̄â`u cài d̄ăt, hãy thu thâp (hãy viê´t lên môt tò’ giâ´y) tâ´t ca’ nhũ’ng thông tin
câ´u hình câ`n thiê´t cu’a máy˙tính. Nê´u nhu˙’ máy tính cu’a ban˙ tam thò’i vâ˜n còn làm viêc du’ó’i
˙ ˙ ˙
HD ¯ H Windows 95/98/2000/XP, thì ba˙n sẽ tìm thâ´y râ´t nhiê`u thông tin nê´u nhâ´n chuô˙t pha’i
vào biê’u tu’o’ng My Computer, chon lênh Properties. O ’’ d̄ây ban có thê’ tìm thâ´y gâ`n hê´t tâ´t ca’
thông tin câ`n thiê´t. Nê´u nhu’ ban không thâ´y thông tin nào d̄ó,˙ thì câ`n tìm kiê´m theo các cách
˙ ˙ ˙
khác, kê’ ca’ viêc mo’’ vo’ máy và˙ d̄oc nhũ’ng dòng chũ’ trên thiê´t bi.
˙ ˙ ˙
¯Dê’ giúp ba˙n d̄o˙c, xin d̄u’o˙’c d̄u’a ra d̄ây danh sách nhũ’ng thông tin câ`n thu thâ˙p. Xin d̄ù’ng
lu’ò’i biê´ng và hãy cô´ gă´ng ghi càng nhiê`u dũ’ liêu vê` môt thiê´t bi càng tô´t (tâ´t ca’ nhũ’ng thông
tin có thê’ tìm thâ´y), nhũ’ng dũ’ liêu này sẽ câ`n˙d̄ê´n khi˙ cài d̄ăt ˙và câ´u hình, khi mà viêc tìm
kiê´m chúng sẽ khó khăn ho’n. ˙ ˙ ˙
• BIOS:
• Chuôt:
˙
– loai chuôt (serial, PS/2, hay bus mouse);
˙ ˙
– giao thú’c (Microsoft, Logitech, MouseMan, v.v. . . );
– sô´ nút;
– d̄ô´i vó’i chuôt că´m vào cô’ng nô´i tiê´p thì câ`n sô´ thú’ tu’ cu’a cô’ng d̄ó.
˙ ˙
• Cac màn hình
˙
2.2 Phòng xa và nhũ’ng lò’i khuyên 5
• Không hoa’ng hô´t. Nê´u nhu’ có gì d̄ó không làm viêc, hãy thu’’ moi cách d̄ê’ tìm ra nguyên
˙ ’ sau khi d̄ó˙mói thuc hiên các buóc
nhân, kiê’m tra lai nhiê`u lâ`n thao tác cu’a mình. Chı ’ ’ ’’
su’’a lô˜i. ˙ ˙ ˙
• Hãy d̄oc tài liêu. ¯Dăc biêt trong các tru’ò’ng ho’p, khi hê thô´ng làm nhũ’ng gì ban d̄oc
không ˙mong d̄o˙ i. ˙
’
˙ ˙ ˙ ˙ ˙
˙
Xin thêm môt lò’i khuyên phô’ biê´n sau: * Hãy xem các tâp tin log, tú’c là các tâp tin ghi
lai su’ kiên cu’a hê ˙ thô´ng (câ`n tìm chúng trong thu muc /var/log ˙ ). ˙
’
˙ ˙ ˙ ˙ ˙
Nhu’ d̄ã nói o’’ trên, quá trình cài d̄ăt HD
˙ ¯ H Linux nói riêng không pha’i là d̄ê` tài cu’a cuô´n
sách. Ngu’ò’i dùng câ`n tìm các cuô´n hu’ó’ng dâ˜n tu’o’ng ú’ng. Tuy nhiên, tác gia’ cũng muô´n d̄u’a
ra vài lò’i khuyên d̄ê’ giúp ngu’ò’i dùng d̄u’a ra quyê´t d̄inh trong khi cài d̄ăt.
˙ ˙
Thú’ nhâ´t, d̄ù’ng vôi vàng và hãy chú ý d̄oc nhũ’ng thông báo sẽ hiê’n thi trên màn hình,
và hãy suy nghı̃ kỹ khi ˙ chon câu tra’ lòi. Dê’ minh
˙ chú’ng cho lò’i khuyên này˙ xin d̄u’o’c kê’ lai
’ ¯
˙
tru’ò’ng ho’p khi tác gia’ cài Red Hat 7.1, và tu’ d̄ông nhâ´n lên nút Next, vì cho ră`ng phu ˙
˙ ong án
’’
theo măc˙ d̄inh là d̄u’. Kê´t qua’ là tác gia’ không ˙ ˙thê’ truy câp d̄uoc d̄ê´n máy này qua các giao
’’
thú’c ma˙ ng ˙(telnet, ftp, NFS, Samba), măc dù d̄ã câ´u hình˙ giao ˙diên mang cho máy. Nguyên
nhân là˙trong phu’o’ng án theo măc d̄inh thì ˙ tuòng lu’a d̄uoc cài d̄ăt,˙ và tu˙ òng lu’a d̄óng hê´t các
’’ ’ ’’ ’’ ’
truy câp tù’ mang. ¯Dê’ mo’’ truy câ˙p này, ˙ thì trong quá trình˙ cài d̄ăt˙ câ`n chı’ rõ các dich vu d̄uoc
’’
mo’’. Nhu˙ ng chúng˙ ˙
ta quá vôi vàng! ˙
Thú’ hai, tác gia’ khuyên không nên d̄ô`ng ý˙vó’i viê
˙ c ˙tu
’ ’
’ ˙ ` ´
d̄ông kho’i d̄ông vào giao diên d̄ô hoa. Vì cuôi cùng ngu’ò’i dùng không khó khăn gì khi gõ ˙ ˙
˙ lênh startx
câu ˙ ˙ ´ u hình˙ giao diên d̄ô` hoa (nê´u có gì d̄ó làm viêc không d̄úng)
, còn viêc câ
˙ ˙
vó’i ngu’ò’i dùng mó’i râ´t khó thành công. ˙ ˙ ˙
Sau khi làm xong các công viêc phòng xa, câ`n quyê´t d̄inh sẽ tô’ chú’c kho’’i d̄ông nhiê`u
˙ ˙ ˙
HD ¯ H nhu’ thê´ nào, chuâ’n bi˙ các ô’ d̄ı̃a (phân vùng) d̄ê’ cài d̄ă˙t, tú’c là câ`n chia ô’ d̄ı̃a thành sô´
phân vùng câ`n thiê´t. Nhu’ng tru’ó’c khi chuyê’n sang các bu’ó’c cu thê’ d̄ê’ chuâ’n bi ô’ d̄ı̃a, xin
d̄u’o’c nói qua môt chút vê` câ´u trúc cu’a d̄ı̃a và quá trình kho’’i d̄ông˙ HD ˙
¯ H. Nê´u ai d̄ó không d̄u’
˙ ˙ ˙
kiên nhâ˜n d̄ê’ d̄oc phâ`n lý thuyê´t này, thì có thê’ bo’ qua chúng và chuyê’n thă’ng d̄ê´n vâ´n d̄ê`
chon chu’o’ng trình ˙ kho’i d̄ông.
’
˙ ˙
Ba’ng phân vùng d̄ı̃a thu’ò’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 "truyên thông" (tuy vây rât khác so vó’i chu’o’ng trình fdisk trong MS-DOS
và Windows), còn có hai chu’o’ng trình d̄ê’˙ làm viêc vó’i phân vùng d̄ı̃a: cfdisk và sfdisk.
Chu’o’ng trình cfdisk, giô´ng nhu’ fdisk chı’ dành ˙ d̄ê’ làm viêc vói ba’ng phân vùng d̄ı̃a: nó
’
´ ˙
không quan tâm chú ý d̄ên thông tin có trên d̄ı̃a. Chı khác biêt vó’i fdisk o’’ giao diên thuân
’
tiên: chı’ dâ˜n su’’ dung lênh và hê thô´ng trình d̄o’n (thu’c d̄o’n). Chu ˙ ong trình sfdisk có˙ vài kha ˙’
’’
˙ ˙ ˙ ˙ ˙
nă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’ò’ng begin và end cu’a ba’ng phân vùng và Interrupt 13 cu’a BIOS (Int 13h)
d̄ê’ truy câp tó’˙i d̄ı̃a, vì thê´ không thê’ su’’ dung d̄ı̃a có dung lu’o’ng ló’n ho’n 8,4 Gbyte, ngay ca’
˙
vó’i các BIOS mó’i (vê` vâ´n d̄ê` này sẽ nói d̄ê˙´ n o’’ sau), còn phân˙ vùng thì không thê’ ló’n ho’n 2,1
Gbyte (nhu’ng d̄ây là do han chê´ cu’a hê thô´ng tâp tin FAT16).
˙ ˙ ˙
Linux thì chı’ su’’ dung tru’ò’ng start và length cu’a ba’ng phân vùng d̄ı̃a và hô˜ tro’ các phân
˙
vùng chú’a d̄ê´n 232 sector, tú’c là dung lu’o’ng có thê’ d̄at 2 Tbyte ˙
˙ ˙
Vì trong ba’ng chia ô’ d̄ı̃a chı’ có 4 dòng cho các phân vùng, sô´ phân vùng chính trên d̄ı̃a
ngay tù’ d̄â`u dã han chê´: không thê’ ló’n ho’n 4. Khi mà 4 phân vùng tro’’ thành ít, thì ngu’ò’i ta
sáng chê´ ra phân ˙vùng lôgíc. Môt trong sô´ các phân vùng chính tro’’ thành mo’’ rông (loai phân
vùng - 5 hay F hay 85 trong hê co ˙ sô´ muòi sáu). Và trong phân vùng mo’ rông ˙nguòi ta˙ tao ra
’ ’’ ’ ’’
các phân vùng lôgíc. Phân vùng ˙ mo’ rông không d̄uoc su’ dung truc tiê´p mà ˙ chı’ dùng d̄ê˙’ ghi
’ ’’ ’ ’
các phân vùng lôgíc. Sector d̄â`u tiên ˙cu’a phân vùng˙ mo’’ rô˙ng ghi˙ nhó’ ba’ng phân vùng vó’i
bô´n d̄â`u vào: môt dùng cho phân vùng lôgíc, môt cho phân˙ vùng mo’’ rông khác, còn hai cái
còn lai không d̄u˙’o’c su’’ dung. Mô˜i phân vùng mo’’ ˙rông có môt ba’ng chia ˙cu’a mình, trong ba’ng
˙
này, cũng giô´ng nhu˙ trong ˙ phân vùng mo’ rông chính, ˙ ˙’ dung có hai dòng d̄ê’ d̄ua ra môt
chı’ su
’ ’ ’ ’
phân vùng lôgíc và môt phân vùng mo’’ rông. ˙ Nhu vây, thu d̄u˙oc môt chuô˜i các mă´t xích tù ˙
’ ’’ ’
˙ ˙ ˙ ˙
ba’ng phân vùng, mă´t xích d̄â`u tiên mô ta’ ba phân vùng chính, và mô˜i mă´t xích tiê´p theo –˙
môt phân vùng lôgíc và vi trí cu’a ba’ng tiê´p theo.
˙ ˙
Chu’o’ng trình sfdisk trên Linux cho thâ´y toàn bô chuô˜i này:
˙
8 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
Sô´ phân vùng lôgíc theo nguyên tă´c không han chê´, vì mô˜i phân vùng lôgíc có thê’ chú’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 thê´ vâ˜n có nhũ’ng han
chê´. Ví du, Linux không thê’ làm viêc vó’i ho’n 15 phân vùng trên các d̄ı̃a ˙ SCSI và hon 63 phân ˙
’
vùng trên˙ d̄ı̃a IDE. ˙
Phân vùng mo’’ rông trên môt d̄ı̃a vât lý, hay trong môt phân vùng mo’’ rông chú’a nó (có
’
thê goi là "me") chı’ có ˙ thê’ làm mô
˙ t: không ˙ môt chuong trình ˙ phân chia ô’ d̄ı̃a˙nào trong sô´ d̄ã
’’
˙
có (fdisk và˙ tu’o’ng tu’) có thê’ tao˙ thêm môt phân ˙ vùng mo’’ rông thú’ hai.
’ ˙ ˙ ˙ ˙
Ô d̄ı̃a trên Linux nói riêng (ô’ d̄ı̃a vât lý) d̄u’o’c truy câp qua tên cu’a thiê´t bi: /dev/hda,
˙
/dev/hdb, /dev/sda, v.v. . . Các phân vùng chính có thêm sô
˙ ˙ ´ 1-4 trong˙ tên thiê´t bi:
/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/
˙
. . . (bă´t d̄â`u tù’ sô´ 5). Tù’ nhũ’ng gì d̄ê` câp d̄ê´n o’’ trên có thê’ suy ra tai sao lai có thê’ bo’ qua các
tên nhu’ /dev/hda3 hay /dev/hda4˙ (d̄o’n gia’n là phân vùng chính ˙ thú˙ba và thú tu không
’ ’ ’
´
d̄u’o’c tao ra) và ngay sau /dev/hda2 ban d̄oc thây /dev/hda5 (phân vùng lôgíc trong phân
vùng ˙ mo ˙ ’ rông /dev/hda2), và sau d̄ó ˙thì viê ˙ c d̄ánh sô´ lai theo thú tu thông thuòng.
’ ’ ’ ’’
˙
Trong Windows các phân vùng lôgíc nhâ ˙ n d̄uoc tên˙ (chũ cái), bă ˙ ´ t d̄â`u tù chũ cái cuô´i
’’ ’ ’ ’
dùng dành cho phân vùng chính. Ví du nê´u mô ˙ t d̄ı̃a˙ cúng có hai phân vùng chính (C: và D:)
’
và môt phân vùng mo’’ rông, trong phân ˙ vùng mo ˙ ’ rông tao ra hai phân vùng lôgíc, thì nhũng
’ ’
˙ ˙ ˙ ˙
phân vùng lôgíc này sẽ d̄u’o’c d̄ăt tên E: và F:. Xin nói thêm, trong Windows NT và 2000/XP
có thê’ thay d̄ô’i tên cu’a các˙phân ˙ vùng d̄ı̃a.
Nhu’ ban d̄oc biê´t, khi bât máy tính d̄â`u tiên sẽ chay chu’o’ng trình POST (Power On Self
Test). Chu’˙o’ng ˙trình xác d̄inh ˙ dung luong bô nhó, thu’ ˙nghiêm bô nhó, và xác d̄inh các thành
’’ ’ ’ ’
phâ`n khác (bàn phím, ô’ cú’ng. . . ), kho’’˙i d̄ông˙ các the’ adaptor.
˙ ˙ Trên
˙ màn hình thu˙òng xuâ´t hiên
’’
các thông báo vê dung lu’o’ng bô nhó’, vê viêc thu’ nghiêm bô nhó’, danh sách các thiê´t bi nhâ˙ n
` ` ˙ ’
ra (ô’ d̄ı̃a cú’ng và mê`m, bô˙ xu’’ lý,
˙ cô’ng COM ˙ và v.v. . .˙). ˙ ˙ ˙
˙
Sau khi hoàn thành viêc thu’’ nghiêm POST goi Int 19h. Công viêc cu’a Int 19h là tìm thiê´t
bi kho’’i d̄ông. Viêc tìm kiê˙´ m thu’c hiê˙ n theo thú’ ˙tu’ xác d̄inh trong Setup
˙ BIOS và theo cách
˙ ˙ ˙ ˙ ˙ ˙ ˙ ’
thăm dò sector sô´ 0 cu’a các thiê´t bi tu’o’ng ú’ng. Nê´u d̄ı̃a có thê kho’’i d̄ông, thì trong sector sô´
0 cu’a d̄ı̃a có ba’n ghi kho’’i d̄ông chính ˙ – Master Boot Record (MBR). Hai ˙ byte cuô´i cùng cu’a
˙
MBR – "sô´ màu nhiêm", là dâ´u hiêu cho biê´t sector có MBR, và theo d̄ó d̄ı̃a có thê’ kho’’i d̄ông.
˙ ˙ a ba’ng phân vùng d̄ı̃a d̄ã nói o’ trên, và môt chuong trình˙
Ngoài "sô´ màu nhiêm" MBR còn chú ’ ’ ’’
nho’ – trình kho’’i d̄ô˙ng chính, kích thu’ó’c chı’ có 446 (0x1BE) byte. ˙
˙
Ba’ng 2.1 cho thâ´y câ´u trúc cu’a sector kho’’i d̄ông chính sau khi cài d̄ăt Windows.
˙ ˙
• Windows NT4 su’’ dung MBR DOS, nhu’ng thay thê´ ba’n ghi kho’’i d̄ông cu’a phân vùng
kích hoat bă`ng cách˙thay thê´ NTLDR vào chô˜ IO.SYS. ¯Dây là môt ˙chu’o’ng trình mang
˙ ’ làm d̄uoc nhiê`u thú. Ví du, có thê’ tìm tâp tin boot.ini˙ và nê´u nhu tham˙ sô´
và có thê ’’ ’ ’
˙ ˙ ˙ ’
timeout ló’n ho’n 0, thì d̄u’a ra trình d̄o’n (thu’c d̄o’n) kho’i d̄ông.
˙ ˙
Mô˜i dòng cu’a phâ`n [operating systems] trong tâp tin boot.ini xác d̄inh môt
phu’o’ng án (môt HD ¯ H) kho’’i d̄ông và d̄u’o’c viê´t theo mâ˜u sau: ˙ ˙ ˙
d¯ia_chı ’˙_trình_kho ˙
’’i_d ˙
¯ông_thú’_hai="tên_goi_cu ’a_phu’o’ng_án"
˙ ’ ’ ˙ ˙
¯D˙ia chı cua trình kho’’i d̄ô˙ng thú’ hai có thê là mô˙t phân vùng cu˙ thê’ nào d̄ó cu’a d̄ı̃a cũng
’
nhu’ tâp tin kho’’i d̄ông. Du’ó’i d̄ây là môt ví du tâ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"
Nê´u ngu’ò’i dùng chon NT, thì sẽ kho’’i d̄ông theo d̄ia chı’ phân vùng d̄u’o’c chı’ trên dòng d̄â`u
tiên. Trên dòng tu’o’ng ˙ú’ng vó’i phu’o’ng án ˙Microsoft˙Windows, chı’ d̄u’a ˙ra "C:\", vì tên cu’a
tâp tin kho’’i d̄ông d̄u’o’c lâ´y theo măc d̄inh: bootsect.dos. Tâp tin d̄u’o’c nap vào bô nhó’ và quá
˙ kho’i d̄ông ˙ d̄uoc˙tiê´p tuc giô´ng˙ nhu ˙ khi ba’n ghi kho’i d̄ô
˙ ˙ ˙ ˙
trình ’ ’’ ’ ’ ng d̄u’o’c nap bo’’i mã chu’o’ng trình
tù’ MBR. ˙ ˙ ˙ ˙ ˙ ˙
¯Dô´i vó’i viê˙c kho’’i d̄ô˙ng các hê˙ thô´ng khác, có thê’ su’’ du˙ng cách d̄ó. Chı’ câ`n thêm vào
boot.ini các dòng chú’a liên kê´t d̄ê´n tâp tin kho’’i d̄ông khác. Khi chon các dòng này sẽ kho’’i
˙ ˙ ˙
d̄ông HD
˙ ¯ H tu’o’ng ú’ng. Trong ví du˙ trên Linux cũng d̄u’o˙’c kho’’i d̄ô˙ng theo các này. Trong tâ˙p
tin C:\BOOTSECT.LNX câ`n ghi nôi dung cu’a ba’n ghi kho’’i d̄ông, tao bo’’i Linux (nói d̄úng
ho’n – LILO, trình kho’’i d̄ông tiêu chuâ ˙ ’n cu’a Linux). ˙ ˙
˙
• CL — 7-6 bit tu’o’ng ú’ng bit ló’n cu’a sô´ cylinder, 5-0 tu’o’ng ú’ng sô´ sector;
(Câ`n lu’u ý ră`ng viêc d̄ánh sô´ cylinder vât lý và rãnh thu’ò’ng bă´t d̄â`u tù’ 0, còn sector trên
˙ 1). Tuy nhiên trên ˙thuc tê´ sô´ d̄â`u d̄oc không quá 16, còn sô´ sector
rãnh d̄ánh sô´ bă´t d̄â`u tù
’ ’
trên rãnh – không quá 63, và dù có dùng 10 bit ˙ d̄ê’ chı’ ra cylinder,
˙ BIOS vâ˜n không thê’ làm
viêc vó’i d̄ı̃a dung lu’o’ng ló’n ho’n 1024*63*16*512 = 528 Mbyte.
˙ Dê’ vuot qua han ˙chê´ này, nguòi ta áp dung nhiê`u cách "láu cá" khác nhau. Ví du, Extended
¯ ’’ ’’
CHS (ECHS) ˙ hay˙"Large disk support" (d̄ôi ˙ khi còn goi là "Large") su’ dung ba bit˙ chua dùng
’ ’
˙ ˙
2.4 Lu’a chon trình kho’’i d̄ông 11
˙ ˙ ˙
d̄ê´n cu’a sô´ thú’ tu’ d̄â`u d̄oc d̄ê’ tăng sô´ cylinder. Cách này cho pehsp su’’ dung câ´u trúc "hình
hoc gia’ mao cu’a˙ d̄ı̃a" vó’˙i 1024 cylinder, 128 d̄â`u d̄oc và 63 sector/rãnh. Biê ˙ ´ n d̄ô’i Extended
˙ ˙ ˙
CHS thành d̄ia chı’ CHS thu’c (có thê’ chú’a d̄ê´n 8192 cylinder) d̄u’o’c BIOS thu’c hiên. Cách này
cho phép làm˙ viêc vó’i d̄ı̃a có ˙ dung luong d̄ê´n 8192*16*63*512 =˙ 4 227 858˙ 432˙byte hay 4,2
’’
Gbyte. ˙ ˙
Nhu’ng các nhà phát triê’n càng ngày càng tăng mât d̄ô ghi cu’a d̄ı̃a, sô´ d̄ı̃a và sô´ rãnh, và
còn phát minh ra các phu’o’ng pháp khác d̄ê’ tăng dung ˙ lu˙ong d̄ı̃a. Ví du, sô´ sector trên rãnh
’’
không còn cô´ d̄inh mà tro’’ thành khác nhau trên các rãnh ˙khác nhau (trên ˙ các rãnh nă`m gâ`n
˙
rìa ngoài cu’a d̄ı̃a, dài ho’n, sô´ sector d̄u’o’c tăng lên). Kê´t qua’ là bô ba sô´ C/H/S không còn
pha’n ánh d̄úng câ´u trúc "hình hoc cu’a d̄ı̃a", ˙ và các phiên ba’n BIOS˙ cũ không thê’ hô˜ tro truy
’
câp tó’i toàn bô không gian d̄ı̃a. ˙ ˙
˙ ˙
Khi d̄ó ngu’ò’i ta nghı̃ ra phu’o’ng pháp khác d̄ê’ làm viêc vó’i các d̄ı̃a lên qua Int 13h - d̄ánh
d̄ia chı’ các khô´i theo d̄u’ò’ng thă’ng ("Linear Block Addressing" ˙ hay LBA). Không d̄i sâu vào
˙ ´ ’
chi tiêt, có thê nói răng tât ca’ sector trên d̄ı̃a d̄u’o’c d̄ánh sô môt cách tuâ`n tu’, bă´t d̄â`u tù’ sector
` ´ ´
d̄â`u tiên trên rãnh sô´ 0 cu’a cylinder sô´ 0. Thay˙ vào chô˜ d̄ia˙chı’ CHS mô˜˙i sector nhân d̄u’o’c
môt d̄ia chı’ lôgíc – sô´ thú’ tu’ cu’a sector trong tô’ng sô´ tâ´t ca’˙ sector. Viêc d̄ánh sô´ sector ˙ lôgíc ˙
˙ ˙ ˙ ˙
bă´t d̄â`u tù’ 0, trong d̄ó sector sô´ 0 chú’a ba’n ghi kho’’i d̄ông chính (MBR). Trong Setup BIOS
hô˜ tro’ biê´n d̄ô’i sô´ thú’ tu’ theo d̄u’ò’ng thă’ng thành d̄ia chı ˙ ’ CHS có dang "Hô˜ tro LBA". Nhu
’ ’
˙
vây, trong các phiên ba’n BIOS mó’i thu’ò’ng có lu’a chon vó’i ba phu’o’˙ng án: "Large",
˙ ˙ ˙ "LBA",
và˙ "Normal" (phu’o’ng án cuô´i cùng có nghı̃a là không ˙ ˙thuc hiên biê´n d̄ô’i d̄ia chı’).
’
˙ ˙ ˙
Tuy nhiên trong chê´ d̄ô LBA viêc su’’ dung d̄ı̃a vât lý vâ˜n d̄u’o’c thu’c hiên qua Int 13h, mà
˙ ˙ ˙ ˙ ˙ ˙
Int 13h vâ˜n su’’ dung bô 3D (C,H,S). Vì nguyên nhân này xuâ´t hiên han chê´ lên dung lu’o’ng ˙
cu’a d̄ı̃a: BIOS, và˙ theo˙d̄ó, MS-DOS và các phiên ba’n Windows d̄â ˙`u tiên
˙ không thê’ d̄ánh ˙d̄ia
chı’ các d̄ı̃a có dung lu’o’ng ló’n ho’n 8,4 Gbyte. ˙
˙
Câ`n chú ý ră`ng han chê´ nói trên chı’ áp dung vó’i các d̄ı̃a có giao diên IDE. Trong các
controller cu’a d̄ı̃a SCSI, ˙ sô´ cu’a sector d̄uoc chuyê ˙ ’n vào các lênh SCSI, và˙ sau d̄ó tu d̄ı̃a tìm
’’ ’
˙
ra vi trí câ`n thiê´t, vì thê´ han chê´ lên dung lu’o’ng d̄ı̃a không xuâ´˙ t hiên. ˙
˙ ˙ ˙ ˙
Môt lâ`n nũ’a muô´n nhă´c lai ră`ng, tâ´t ca’ nhũ’ng han chê´ nói trên chı’ có ý nghı̃a trong giai
d̄oan kho ˙ ’ i d̄ông HDH. Bo’i vì ˙Linux và các phiên ba’n˙ Windows mói nhâ´t khi làm viêc vói d̄ı̃a
’ ¯ ’ ’ ’
˙ ˙ ’ ’ ’ ’
d̄ã không còn su’ dung Int 13 cua BIOS, mà su’ dung driver riêng cua mình. Nhu’ng tru’ó’c khi ˙
có thê’ su’’ dung driver ˙ cu’a mình, hê thô´ng pha’i d̄uo˙c nap. Vì thê´ trong giai d̄oan kho’i d̄ông d̄â`u
’’ ’
tiên bâ´t kỳ hê thô´ng nào cũng câ`n˙ su’’ dung BIOS.˙ ¯Diê
˙ ˙`u này han chê´ viêc d̄ă˙t nhiê`u hê ˙ thô´ng
ra ngoài vùng˙ 8 Gbyte d̄ı̃a d̄â`u tiên: chúng ˙ không thê’ kho’i d̄ô˙ng tù d̄ó,˙ măc˙ dù sau khi
’ ’
˙ kho’i
’
d̄ông thì có thê’ làm viêc vó’i các d̄ı̃a có dung lu’o’ng ló’n ho’n nhiê ˙ `u. Dê’ có thê ˙ ’ hiê’u cách thoát
˙ ’ i nhũng han chê´ này, ˙ chúng ta câ`n môt chút˙ kiê´n thúc vê` quá trình ¯
kho ’ ’ kho’’i d̄ông cu’a HD ¯ H
Linux. ˙ ˙ ˙
• chu’o’ng trình /sbin/lilo, chay du’ó’i Linux, phuc vu d̄ê’ ghi tâ´t ca’ thông tin câ`n thiê´t
˙ chô˜ tuong úng.˙ Câ`˙n chay chuong trình này sau mô˜i
trong giai d̄oan kho’’i d̄ông vào các ’’ ’ ’’
˙ ˙ ˙
lâ`n có thay d̄ô’i trong nhân hay trong tâp tin câ´u hình LILO;
˙
• các tâp tin phuc vu, câ`n cho LILO trong thò’i gian kho’’i d̄ông. Nhũ’ng tâp tin này thu’ò’ng
nă`m ˙trong thu˙’ mu˙ c /boot. Quan trong nhâ´t trong sô´ ˙chúng – d̄ó là ˙ ba’n thân trình
kho’’i d̄ông (xem phía ˙ duói) và tâp tin˙ map (/boot/map); trong tâp tin này có chı’ ra
’’
˙
vi trí cu’a nhân. Môt tâp tin quan ˙ trong khác – tâp tin câ´u hình LILO;
˙ thu’ò’ng có tên
˙
/etc/lilo.conf;
˙ ˙ ˙ ˙
• trình kho’’i d̄ông – d̄ây là phâ`n LILO d̄u’o’c nap vào bô nhó’ d̄â`u tiên qua Int cu’a BIOS;
trình kho’’i d̄ô ˙ ng nap nhân Linux hay sector ˙ ˙kho’i d̄ô˙ng cu’a hê d̄iê`u hành khác. Trình
’
kho’’i d̄ông gôm có hai phân. Phân thú’ nhât d̄u’o’c ghi˙ vào sector
˙` ˙ ` ` ´ ˙ kho’i d̄ông và phuc vu
’
d̄ê’ nap˙phâ`n thú’ hai, có kích thu’ó’c ló’n ho’n râ´t nhiê
˙ `u. Ca’ hai phâ`n thuòng ˙ ˙ ˙
’ ’ d̄u’o’c ghi trên
˙
d̄ı̃a trong tâp tin /boot/boot.b. ˙
˙
Câ`n nhó’ ră`ng, d̄inh dang cu’a sector kho’’i d̄ông tao ra bo’’i LILO khác vó’i d̄inh dang MBR
cu’a DOS. Vì thê´ nê´˙u ghi˙sector kho’’i d̄ông LILO ˙ vào ˙ MBR, thì các hê d̄iê`u hành ˙ ˙ cài cu’a
d̄ã
˙
Microsoft sẽ ngù’ng kho’’i d̄ông (nê´u nhu’ không có các biên pháp bô’ sung). ˙
Sector kho’’i d̄ông cu’a LILO ˙ có thê’ d̄u’o’c thiê´t kê´ d̄ê’˙ su’’ dung nhu’ sector kho’’i d̄ông cu’a
phân vùng; trong ˙d̄ó có chô˜ cho ba’ng phân˙vùng. ˙ ˙
Sector kho’’i d̄ông cu’a LILO trong khi cài d̄ăt có thê’ d̄ăt vào nhũ’ng chô˜ sau:
˙ ˙ ˙
• sector kho’’i d̄ông cu’a d̄ı̃a mê`m trong d̄inh dang Linux (/dev/fd0, . . . );
˙ ˙ ˙
’ `
• MBR cua d̄ı̃a cú’ng d̄âu tiên (/dev/hda, /dev/sda, . . . );
• sector kho’’i d̄ông cu’a phân vùng chính vó’i hê thô´ng tâp tin Linux trên d̄ı̃a cú’ng d̄â`u tiên
(/dev/hda1, ˙ /dev/hda2, . . . ); ˙ ˙
• sector kho’’i d̄ông cu’a phân vùng lôgíc trong phân vùng mo’’ rông d̄ı̃a cú’ng d̄â`u tiên
(/dev/hda5,˙. . . ). Su’ thât là phâ`n ló’n chu’o’ng trình dang fdisk˙ không d̄ê` ra kha’ năng
˙ phân
kho’’i d̄ông kho’’i d̄ông tù ˙ vùng mo’ rông và tù chô´i ˙viêc kích hoat phân vùng này. Vì
’ ’ ’
˙ thành phâ
vây trong ˙ `n LILO có chúa mô˙t chuong trình d̄ă˙ c biêt (activate
˙ ) cho phép
’ ’’
˙ ´ ˙ ˙ ˙
vu’o’t qua han chê này. Tuy nhiên chu’o’ng trình fdisk cu’a ba’n phân phôi Linux hô˜ tro’
´
kha’˙ năng kích
˙ hoat phân vùng mo’ rông. Câ`n su’ dung tùy chon -b hoăc biê´n BOOT. ˙
’ ’
˙ ˙ ˙ ˙ ˙
Sector kho’’i d̄ông cu’a LILO không thê’ d̄ăt vào các chô˜ sau:
˙ ˙
• sector kho’’i d̄ông cu’a d̄ı̃a mê`m hay phân vùng chính, vó’i d̄inh dang hê thô´ng tâp tin
khác Linux; ˙ ˙ ˙ ˙ ˙
Ngoài ra, câ`n nhó’ ră`ng, LILO trong thò’i gian kho’’i d̄ông nhũ’ng tâp tin sau:
˙ ˙
• /boot/boot.b;
• tâ´t ca’ phiên ba’n nhân kho’’i d̄ông (nê´u ban d̄oc chon phiên ba’n nhân khi kho’’i d̄ông);
˙ ˙ ˙ ˙ ˙
• sector kho’’i d̄ông cu’a các hê d̄iê`u hành khác mà ban d̄oc muô´n kho’’i d̄ông qua LILO;
˙ ˙ ˙ ˙ ˙
• tâp tin chú’a các thông báo d̄u’a ra khi kho’’i d̄ông (nê´u d̄u’o’c xác d̄inh).
˙ ˙ ˙ ˙
Nhu’ vây, sector kho’’i d̄ông LILO cũng nhu’ nhũ’ng tâp tin d̄ã liêt kê (trong sô´ d̄ó có các tâp
tin ban d̄o˙c sẽ cài d̄ăt sau này) ˙ câ`n nă`m trong pham vi˙ 1024 cylinder ˙ ˙
d̄â`u tiên cu’a d̄ı̃a cú’ng,
˙ ˙ ˙ ˙
bo’’i vì chúng câ`n d̄u’o’c truy câp qua BIOS. Xem phâ`n nói vê` han chê´ cu’a BIOS o’’ trên.
˙ ˙ ˙
Bă´t d̄â`u tù’ 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 hê
thô´ng d̄ê’ kho’’i d̄ông (tru’ó’c d̄ây câ`n nhâ´n phím Tab d̄ê’ goi trình d̄o’n˙ này). ˙ ˙
˙ ˙
• Nê´u nhu’ tru’ó’c khi cài d̄ăt Linux d̄ã có HD ¯ H Windows NT/2000/XP, thì trình kho’’i d̄ô˙ng
’ ˙
ban d̄oc có thê su’’ dung là OS Loader cu’a NT. So sánh vó’i LILO thì trình kho’’i d̄ông
˙ Loader
OS ˙ có ít nhâ´˙t hai u’u thê´. Thú’ nhâ´t, tâ´t ca’ câ´u hình cũ không bi mâ´t (chúng˙ ta
có thê’ chon kho’’i d̄ông Windows hay Linux theo lu’a chon), và thú’ hai,˙ có thê’ cài d̄ăt
Linux lên˙d̄ı̃a mà LILO ˙ không thê’ kho’i d̄ông, ví du,˙ô’ d̄ı̃a˙thú hai trên controller thú hai
’ ’ ’
˙
(Secondary Slave). ˙ ˙
• Nê´u nhu’ tru’ó’c khi cài d̄ăt Linux ban d̄oc chı’ có HD¯ H Windows 95 hay Windows 98 và
không có Windows NT/2000 ˙ ˙ thì
hay XP, ˙ OS Loader không d̄u’o’c cài d̄ăt. Và nê´u nhu’ vì
´
môt lý do nào d̄ó ban d̄oc không muôn cài d̄ăt LILO, thì có thê ˙ ’ su’ d̄u˙ng chuong trình
’ ’’
kho˙’ i d̄ông loadlin.exe
˙ (thu˙ òng d̄i kèm vói ba’n˙ phân phô´i Linux); ˙
’ ’’ ’
˙
• Thò’i gian gâ`n d̄ây trong thành phâ`n ba’n phân phô´i Linux thu’ò’ng có chu’o’ng trình kho’’i
d̄ông GRUB.
˙
• Trong thành phâ`n OS/2 cu’a công ty IBM có chu’o’ng trình kho’’i d̄ông Boot Manager.
˙ d̄ê’ tô’i chúc kho’i
Trong râ´t nhiê`u hu’ó’ng dâ˜n ngu’ò’i ta khuyên dùng chu’o’ng trình này ’ ’
`
d̄ông nhiêu HD
¯ H.
˙
• Trong các nguô`n thông tin khác nhau còn nhă´c d̄ê´n chu’o’ng trình System Commander;
• Thêm môt trình kho’’i d̄ông khác có trong thành phâ`n gói PartitionMagic cu’a công ty
˙
Power Quest. Chúng ta ˙sẽ nói vê` chu’o’ng trình này trong phâ`n nho’ tiê´p theo.
Ngoài ra tác gia’ còn thâ´y ngu’ò’i ta nói d̄ê´n môt loat trình kho’’i d̄ông khác (môt sô´ có thê’
˙ ˙
tìm thâ´y trong thu’ muc /public/ftp/pub/Linux/system/boot/loaders ˙ ˙ trên trang
ftp://metalab.unc.edu/.˙ Nhu’ng vì tác gia’ không su’’ dung nhũ’ng chu’o’ng trình này, nên không
thê’ nói cu thê’ cách su’’ dung chúng. Và tâ´t ca’ nhũ’ng ˙lò’i khuyên dùng sau cu’a tác gia’ sẽ du’a
trên viêc ˙su’’ dung LILO, ˙NT Loader và loadlin.exe. Nê´u nhu’ có ý muô´n cài d̄ăt chu’o’ng trình ˙
kho’’i d̄ô˙ ng khác,
˙ thì ban d̄oc câ`n d̄oc huóng dâ˜n cài d̄ăt và su’ dung cu’a nó. ˙
’’ ’
˙ ˙ ˙ ˙ ˙ ˙
14 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
Ba’ng 2.2: Nhu câ`u su’’ dung không gian d̄ı̃a cu’a HD
¯ H
Hê d̄iê`u hành Yêu câ`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 vó’i KDE)
Theo kinh nghiêm cu’a tác gia’ thì d̄ê’ làm viêc vó’i Windows 95/98, Windows NT và Linux
các phân vùng vó’i ˙kích thu’ó’c 800-1000 Mbyte ˙ là d̄u’ (tâ´t nhiên, nê´u ban d̄oc không cài d̄ăt
các gói chu’o’ng trình ló’n, nhu’ OpenOffice.Org), còn d̄ô´i vó’i Windows 200 ˙ thì ˙
˙ câ`n phân vùng
ló’n ho’n.
Bây giò’ chúng ta sẽ xem xét vâ´n d̄ê` chia các phân vùng cho Linux. O ’’ d̄ây không thê’ chı’
chia môt phân vùng. Thú’ nhâ´t, câ`n chia môt phân vùng swap riêng biêt cho Linux. Khi xác
d̄inh dung˙ luong cu’a phân vùng swap Linux˙ câ`n tính d̄ê´n nhũng yê´u tô´˙ sau:
’’ ’
˙ ˙
• Trong Linux, RAM và không gian swap ho’p lai tao thành bô nhó’ a’o chung. Ví du, nê´u
ban d̄oc có 256 MByte RAM và 128 Mbyte ˙ không
˙ ˙ gian swap, ˙ thì sẽ có 384 Mbyte ˙ bô
˙ ˙
nhó’ a’o. ˙
• ¯Dê’ làm viêc vó’i Linux câ`n ít nhâ´t 16 Mbyte bô nhó’ a’o, vì thê´ nê´u ban d̄oc chı’ có 4
Mbyte RAM, ˙ thì câ`n phân vùng swap không nho ˙’ hon 12 Mbyte. ˙ ˙
’
• Trên Linux kích thu’ó’c môt phân vùng swap không thê’ vu’o’t quá 128 Mbyte. Nghı̃a là
phân vùng swap có thê’ có˙ kích thu’ó’c ló’n bao nhiêu tùy thích ˙ nhung Linux không thê’
’
su’’ dung ho’n 128 Mbyte. Nê´u ban d̄oc muô´n có bô nhó’ a’o ló’n ho’n, thì câ`n tao hai phân
vùng˙ swap hoăc su’’ dung tâp tin˙ swap. ˙ ˙ ˙
˙ ˙ ˙
• Khi tính kích thu’ó’c cu’a không gian swapping, câ`n nhó’ ră`ng kích thu’ó’c quá ló’n có thê’
là vô ích. Trên máy tính vó’i 16 Mbyte RAM khi cài d̄ăt Linux vó’i câ´u hình chuâ’n và
các chu’o’ng trình ú’ng dung chuâ’n thì 48 Mbyte không˙gian swapping là d̄u’. Còn nê´u
˙ nho’ nhâ´t, thì không câ`n d̄ê´n không gian swap. Tâ´t nhiên,
cài d̄ăt Linux vó’i câ´u hình
kích thu˙ óc chính xác cu’a không gian swap phu thuôc lón vào chuong trình sẽ d̄uoc cài
’’ ’ ’’ ’’
d̄ăt. ˙ ˙ ˙
˙
Nói chung, chı’ nên suy nghı̃ vê` vâ´n d̄ê` dung lu’o’ng cu’a phân vùng swap khi có môt d̄ı̃a
nho’ và ít bô nhó’ RAM. Trong tru’ò’ng ho’p ngu’o’c lai hãy ˙ phân chia d̄ê’ tô’ng sô´ dung luong ˙
’ ’ cu’a
˙ ˙ ˙ ˙
bô nhó’ a’o (gô`m RAM và phân vùng swap) không nho’ ho’n 128 Mbyte. Còn nê´u nhu’ ban d̄oc ˙
có˙ 128 Mbyte RAM hay nhiê`u ho’n, thì phân vùng này có thê’ không câ`n thiê´t. ˙ ˙
Tâ´t ca’ các phâ`n còn lai cu’a Linux và các chu’o’ng trình hô˜ tro’ theo nguyên tă´c có thê’ d̄ăt
vào môt phân vùng. Tuy nhiên, ˙ ˙ vài phân vùng riêng rẽ là
viêc d̄ăt hê thô´ng tâp tin Linux lên ˙
˙
có ý nghı̃a. Ví du, có nhà chuyên ˙gia ˙khuyên ˙ nên ˙dành cho hê thô´ng tâp tin Linux ba phân
vùng (nê´u tính ca’ swap thì thành 4). Phân vùng thú’ nhâ´t (theo ý˙ kiê´n cá nhân
˙ ˙ tác gia’, 1 Gbyte
là d̄u’) sẽ chú’a hê thô´ng tâp tin gô´c (/). Phân vùng thú’ hai dành cho thu’ muc /home. Còn
phân vùng thú’ ba˙ d̄u’o’c gă´˙n vào thu’ muc /usr. Viêc phân chia nhu’ vây du’a trên ˙ nhũng lý lẽ
’
sau. Dù HD ˙ ’ ˙ ´ ˙ ’ ’˙ ˙ `
¯ H Linux có ôn d̄i˙nh và d̄áng tin câ˙y d̄ên d̄âu, thì thınh thoang cũng cân cài d̄ă˙t la˙i.
Ví du, ban d̄oc muô´n câp nhâ t phiên ba’n mó’i cu’a ba’n phân phô´i, hoăc vì ít kinh nghiêm su’’
˙ ˙ ˙ ˙ ˙ ˙ ˙
16 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
dung nên làm ho’ng tâp tin hê thô´ng quan trong, hoăc d̄o’n gia’n là muô´n cài d̄ăt môt ba’n phân
˙ ´ i khác. Nê´u nhu tâ ˙ ˙ ˙ ˙ ˙ ˙
phô ’ ´ t ca’ d̄u’o’c cài d̄ăt vào môt phân vùng, thì khi cài d̄ăt lai nhũ’ng dũ’ liêu
˙ ˙ ˙ ˙
d̄ã làm ra và ghi nhó’ trong thu’ muc cá nhân sẽ bi mâ´t (nê´u không có ba’n sao chép). Ngoài ra, ˙ ˙
sẽ bi mâ´t ca’ nhũ’ng chu’o’ng trình ˙d̄ã cài tù’ mã nguô ˙ `n, hay cài bă`ng phuong pháp khác. Phâ`n
’’
˙ ng gói chuong trình này d̄uoc cài vào thu muc /usr. Nê´u dành cho thu muc này môt
ló’n nhũ ’ ’’ ’’ ’ ’
phân vùng riêng và khi cài d̄ăt không ˙ d̄inh dang la˙i chúng, thì nhũng chuong trình ˙ nói trên ˙
’ ’’
˙ ˙ ˙ ˙
sẽ d̄u’o’c giũ’ lai và có thê’ sẽ làm viêc (râ´t có thê’ câ`n vài câ´u hình nho’) sau khi cài d̄ăt lai hê
thô´ng.˙ Trong˙tiêu chuâ’n vê` hê thô´ng ˙ tâp tin cu’a Linux FHS (cu thê’ xin xem o’ chu˙ong˙ ??)˙
’ ’’
cũng có lò’i khuyên vê` viêc d̄ă˙t thu’ muc˙ /usr lên môt phân vùng˙ riêng.
˙ ˙ ˙ ˙
Theo tác gia’ thâ´y, nhũ’ng ý kiê´n nói trên d̄ã d̄u’ d̄ê’ ban d̄oc tu’ tìm ra phu’o’ng án phân chia
ô’ d̄ı̃a cu’a mình, trong tru’ò’ng ho’p chı’ có môt ô’ d̄ı̃a nho’. ˙Bây ˙giò’˙chúng ta xem xét tru’ò’ng ho’p
d̄ı̃a vó’i sô´ cylinder ló’n ho’n 1024. ˙ ˙ ˙
Tù’ nhũ’ng gì d̄ã nói d̄ê´n o’’ phâ`n tru’ó’c (han chê´ dung lu’o’ng d̄ı̃a cú’ng), câ`n d̄ăt chu’o’ng trình
kho’’i d̄ông trong pham vi 1024 cylinder d̄â`u˙ tiên. Nhân tiê˙n, NT Loader không˙nhâ´t thiê´t pha’i
d̄ăt vào˙ phân vùng NTFS, ˙ cũng nhu’ không nhâ´t thiê´t pha’˙i d̄ăt vào phân vùng chú’a các tâp tin
˙ cu’a HDH. Nhu d̄ã nói o’ trên, d̄ô´i vói Linux có thê’ d̄ă˙t thu muc gô´c cùng vói thu˙ muc
khác ¯ ’ ’ ’ ’ ’ ’
˙ còn các ˙ thu muc khác – o’ chô ˙
con /boot vào các cylinder "thâ´p" (trong vòng 1024 d̄â`u tiên), ’ ’ ˜
nào tùy thích. ˙
Nhu’ vây trong tru’ò’ng ho’p này, nhũ’ng d̄ê` nghi cu’a tác gia’ cho ra ba’ng tô’ng kê´t sau:
˙ ˙ ˙
• phâ`n kho’’i d̄ông cu’a tâ´t ca’ các hê thô´ng Microsoft d̄ăt vào phân vùng chính d̄â`u tiên cu’a
d̄ı̃a, vó’i d̄inh˙ dang FAT16 (DOS); ˙ ˙
˙ ˙
• phân vùng chính tiê´p theo dành cho thu’ muc gô´c (/), kích thu’ó’c khoa’ng 1 Gbyte;
˙
• phân vùng chính thú’ ba dành cho swap cu’a Linux (lò’i khuyên vê` kích thu’ó’c cu’a phân
vùng này xem o’’ trên);
• phâ`n còn lai cu’a d̄ı̃a d̄ăt thành phân vùng mo’’ rông;
˙ ˙ ˙
• trong phân vùng mo’’ rông tao các phân vùng lôgíc cho mô˜i HD ¯ H sẽ cài d̄ă˙t: Windows
˙ ˙
98, Windows NT/2000/XP, và d̄ô`ng thò’i cho các hê thô´ng tâp tin /home và /usr cu’a
˙ ˙
HD¯ H Linux (trong /home sẽ d̄ă˙t các tâ˙p tin riêng cu’a ngu’ò’i dùng, còn trong /usr –
chu’o’ng trình sẽ cài d̄ăt).
˙
Tâ´t nhiên, nê´u nhu’ ban d̄oc chı’ có Windows 95 vó’i FAT16, thì có thê’ d̄ê’ Windows trên
phân vùng d̄â`u tiên. Nê´u˙nhu’˙trên máy d̄ã cài d̄ăt Windows NT hay có FAT32, thì môt phân
vùng FAT16 cũng không thù’a. Thú’ nhâ´t, kê’ ca’ trong ˙ ˙ n d̄oc
tru’ò’ng ho’p hê thô´ng có vâ´n d̄ê`, ba
˙ ˙
có thê’ kho’’i d̄ông tù’ d̄ı̃a mê`m DOS (tam thò’i khi chu’a làm quen vó’i Linux môt cách "tu ˙ òng˙
’’
tân") và thâ´y d̄u˙ oc ră`ng d̄ı̃a cúng làm viê
˙ c bình thuòng. Thú hai, hê thô´ng tâp tin ˙ FAT16 d̄uoc
’’ ’ ’’ ’ ’’
˙
hô˜ tro’ trên moi HD ˙ H, trong d̄ó có ˙
Linux, vì ´
thê phân vùng này có˙ ’
thê phu˙c vu cho viê c ˙
trao
¯
d̄ô’i tâ˙ p tin giũ˙’a các hê thô´ng. Nhu’ng không nên d̄ê’ phân vùng này ló’n, ˙vì FAT16 ˙ su’˙’ dung
không ˙ gian d̄ı̃a râ´t không ˙ hop lý. Chính vì vây hãy dành cho phân vùng này khoa’ng 256 hoă ˙ c
’
512 Mbyte. ˙ ˙ ˙
Nhũ’ng lò’i khuyên này d̄u’a ra vó’i gia’ thiê´t ră`ng, ban d̄oc chı’ có môt d̄ı̃a cú’ng. Nê´u nhu’
ban d̄oc có 2, thì vâ˜n su’’ dung d̄u’o’c nhũ’ng lò’i khuyên˙này,˙ chı’ có d̄iê`u˙ phân vùng swap tô´t
ho˙’n d̄ă˙t trên d̄ı̃a khác vó’i d̄ı̃a
˙ dành ˙cho Linux. Nguòi ta nói ră`ng nhu vây tăng tô´c d̄ô làm viêc
’’ ’
trong ˙Linux (cũng dê˜ hiê’u vì d̄â`u d̄oc ít pha’i chay ho’n). ˙ ˙ ˙
˙ ˙
2.6 Windows NT và Linux: kho’’i d̄ông qua OS Loader cu’a NT 17
˙
3. Cài d̄ăt Linux theo chı’ dâ˜n cu’a ba’n phân phô´i. Trong khi cài d̄ăt câ`n chú ý d̄ê´n nhũ’ng
d̄iê’m ˙sau: ˙
18 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
• thú’ nhâ´t, trong quá trình cài d̄ăt nhâ´t d̄inh pha’i tao ra các d̄ı̃a mê`m kho’’i d̄ông
Linux. Tú’c là câ`n tra’ lò’i "Yes, make˙ ˙
a BOOT DISK" ˙ (hay tuong tu thê´, tùy thuô˙ c
’’ ’
vào ba’n phân phô´i) khi d̄u’o’c ho’i có tao d̄ı̃a mê`m kho’’i d̄ông hay không. ¯Dı̃a mê`˙m
˙
này sẽ d̄u’o’c dùng d̄ê´n o’’ sau. ˙ Ngoài ra, ˙ có thê’ su’ dung d̄ı̃a ˙ mê`m này d̄ê’ kho’i d̄ông
’ ’
Linux. ¯Dây ˙ cũng là môt phuong án kho’i d̄ông, và ho ˙ ’i
˙ n nũa khác vói d̄ı̃a mê`m kho
’’ ’ ’ ’ ’ ’
˙ ˙
d̄ông DOS, sau khi kho’’i d̄ông hê thô´ng không còn yêu câ`u d̄ı̃a mê`m nũ’a, có thê’
bo˙’ nó ra kho’i ô’, su’’ dung ô’˙d̄ê’ d̄o˙c các d̄ı̃a mê`m khác. Tuy nhiên cách kho’’i d̄ông
này cũng có d̄iê`u tiên,˙ vì thê´ không ˙ nên su’ dung thuòng xuyên. Chı’ su’ dung trong
’ ’’ ’
˙
˙ ˙ ˙
tru’ò’ng ho’p "bâ´t d̄ă´c dı̃". ¯Dı̃a mê`m này còn câ`n thiê´t cho câ´u hình d̄ê’ kho’’i d̄ông
nhiê`u HD ˙ ˙
¯ H.
• thú’ hai, khi cài d̄ăt Linux câ`n cài LILO vào sector d̄â`u tiên cu’a phân vùng dành
cho thu’ muc gô´c ˙(/) cu’a Linux, chú’ không pha’i vào sector kho’’i d̄ông chính cu’a
d̄ı̃a (MBR).˙ Chúng ta gia’ thiê´t Linux d̄u’o’c cài vào phân vùng /dev/hda3 ˙ . Nhu’
˙
vây LILO sẽ d̄u’o’c cài vào sector d̄â`u tiên cu’a /dev/hda3
˙ ˙
Theo nguyên tă´c, nê´u nhu’ ban d̄oc cài LILO vào MBR, thì không pha’i moi thú’ d̄ã ho’ng
hê´t. Kê´t qua’ cuô´i cùng (kho’’˙i d̄ô˙ng qua NT Loader) vâ˜n có thê’ d̄at d̄u’o’c ˙nhu’ng câ`n bo’
ra môt chút công sú’c. Vâ´n d̄ê` o’’˙chô˜, d̄inh dang MBR tao bo’’i LILO ˙ và Windows
˙ (DOS)
˙ ˙ ˙ ˙
khác nhau. Vì thê´ nê´u ban d̄oc cài LILO vào MBR, thì câ`u phuc hô`i lai MBR cu’a
Windows. Tác gia’ cũng sẽ ˙ nói˙ cách phuc hô`i, nhung tô´t hon hê´t là ˙ ban d̄o ˙ c cài LILO
’ ’
ngay lâp tú’c vào sector d̄â`u tiên cu’a phân ˙ vùng d̄ã cài Linux. ˙ ˙
˙
4. Sau khi cài d̄ăt xong, kho’’i d̄ông Linux bă`ng d̄ı̃a mê`m (nê´u nhu’ ban d̄oc cài LILO vào
phân vùng cu’˙a Linux và không ˙ d̄ông gì d̄ê´n MBR, thì d̄ây là kha’ năng ˙ ˙ duy nhâ´t).
˙
5. Sao chép sector kho’’i d̄ông cu’a Linux vào môt tâp tin; tâp tin này sẽ câ`n d̄ê’ trình kho’’i
d̄ông Windows NT/2000 ˙ có thê’ kho’i d̄ông Linux.
˙ ˙ Viêc sao ˙ chép thuc hiên nhu sau: d̄â`u
’ ’ ’
˙ ´ ` ´ ˙
tiên găn môt d̄ı̃a mêm trăng (mó’i mua thì càng tôt), ´ ˙ ˙ ˙
˙
kênh giao tác
[root]# mount -t vfat /dev/fd0 /mnt/floppy
d̄ê’ ghi nôi dung sector kho’’i d̄ông cu’a d̄ı̃a /dev/hda3 vào tâp tin /mnt/floppy/bootsect.lnx.
1 ˙ ˙ ˙
6. Tiê´p theo câ`n kho’’i d̄ông lai d̄ê’ vào Windows NT, bă`ng câu lênh:
˙ ˙ ˙
1
Ghi chú: nê´u d̄ı̃a C: (/dev/hda1) có d̄inh dang FAT, thì có thê’ tao tâp tin bootsect.lnx trong thu’ muc gô´c cu’a
d̄ı̃a C:. Tác gia’ không biê´t (chu’a thu’’) có˙thê’ kho
˙ ’ i d̄ông không câ`n˙ d̄ı̃a˙ mê`m không, nê´u phân vùng ˙chính d̄â`u
’
tiên có d̄inh dang NTFS. Tuy nhiên o’’ d̄ây cũng không ˙ có vâ´n d̄ê` gì, chı’ câ`n sao chép sector kho’i d̄ông qua d̄ı̃a
’
mê`m nhu’ d̄ang trình bày. Tam thò’i nhân Linux còn chu’a hô˜ tro’ tô´t viêc ghi lên phân vùng NTFS. ˙
˙ ˙
˙ ˙ ˙
2.6 Windows NT và Linux: kho’’i d̄ông qua OS Loader cu’a NT 19
˙
Vì MBR chu’a có gì thay d̄ô’i, nên Windows NT sẽ kho’’i d̄ông. Trong NT câ`n sao chép
tâp tin bootsect.lnx vào thu’ muc gô´c cu’a d̄ı̃a C:, hay chính˙ xác ho’n là vào thu’ muc gô´c
˙’ a phân vùng mà tù d̄ó kho’i d̄ô˙ ˙
cu ’ ’ ng Windows NT. ¯Dây có thê’ là phân vùng FAT16 hay
phân vùng NTFS. ¯Dăc d̄iê’m d̄ê’˙ nhân ra phân vùng này là hai tâp tin ntldr và boot.init
chú’a trong d̄ó (nhũ’ng˙ tâp tin này có˙ thê’ â’n!). Tâp tin bootsect.lnx
˙ có thê’ d̄ăt thuôc tính
chı’ d̄oc (read-only). ˙ ˙ ˙ ˙
˙
7. Sau d̄ó tìm tâp tin boot.ini và thêm vào dòng sau:
˙
C:\bootsect.lnx="LINUX"
(tâ´t nhiên, trong dâ´u ngoăc kép ban d̄oc có thê’ d̄ăt tên bâ´t kỳ.)
˙ ˙ ˙ ˙
8. Viêc còn lai là kho’’i d̄ông lai máy tính môt lâ`n nũ’a, và trong trình d̄o’n chon hê d̄iê`u
hành ˙ sẽ có˙LINUX. Nê´˙u cho˙ n LINUX, thì˙LILO sẽ d̄uoc chay và sau d̄ó nó ˙(LILO) ˙ sẽ
’’
nap Linux. ˙ ˙ ˙
˙
Còn bây giò’ chúng ta sẽ xem xét tru’ò’ng ho’p ban d̄oc (do vô tình hay cô´ ý) cài d̄ăt LILO
vào ba’n ghi kho’’i d̄ông chính cu’a d̄ı̃a (Master Boot˙ ˙Record,˙ MBR). Trong truòng hop ˙này ba’n
’’ ’
˙ ˙
ghi kho’’i d̄ông Windows NT (hay 2000) sẽ bi xóa, và viêc kho’’i d̄ông Windows NT (bu’ó’c thú’
6 o’’ trên) là˙ không thê’. Nê´u nhu’ ban d̄oc vâ˜n˙ còn muô´n˙ su’’ dung ˙trình kho’’i d̄ông OS Loader
cu’a NT, chú’ không muô´n dùng LILO, ˙ ˙ thì nhũng buóc trên ˙có thay d̄ô’i môt ˙chút: thay cho
’ ’’
`
bu’ó’c thú’ 6 cân làm các thao tác sau. ˙
1. Kho’’i d̄ông Windows NT tù’ d̄ı̃a mê`m kho’’i d̄ông (d̄ã tao tru’ó’c khi cài d̄ăt Linux, nê´u
không có ˙ thì ban d̄oc câ`n tìm môt máy khác ˙d̄ang cha˙y Windows NT rô`˙i tao). Trong
trình d̄o’n (thu’c˙ d̄o’n)
˙ cu’a trình kho
˙ ’ i d̄ông câ`n chon ˙lênh Recover, rô`i cho˙ n chê´ d̄ô
’
Command mode. Sau d̄ó d̄ăng nhâp vào˙ tài khoa’n nhà
˙ ˙ qua
˙ ’ n tri (administrator).
˙ ˙
˙ ˙
`
2. Phuc hôi lai ba’n ghi kho’’i d̄ông chính cu’a d̄ı̃a. Su’’ dung câu lênh fdisk /mbr. Tác gia’
dùng˙ lênh ˙này thành công, mă ˙ c dù trong môt sô´ bài ˙báo nói cách ˙ phuc hô`i MBR nhu
’
˙ pha’i lúc nào cũng làm
vây không ˙ viêc. Trong ˙ Windows 2000 có các lê˙nh chuyên dùng
˙
fixboot và fixmbr (chay tù’ console phu˙ c hô`i hê thô´ng). Chay hai lênh˙ này theo thú tu
’ ’
˙
d̄ã chı’ ra. Sau d̄ó Windows 2000 sẽ kho˙’’i d̄ông ˙bình thu’ò’ng.˙ ˙ ˙
˙
3. Kho’’i d̄ông lai máy tính tù’ d̄ı̃a mê`m kho’’i d̄ông Linux và d̄ăng nhâp vào hê thô´ng vó’i
˙ òi˙dùng root.
quyê`n ngu ˙ ˙ ˙
’’
4. Nhâp lênh cd /etc và mo’’ tâp tin lilo.conf. O ’’ d̄â`u tâp tin này có liên kê´t d̄ê´n phân
˙ ˙ ˙
vùng kho’’i d̄ông theo măc d̄inh, ví du, /dev/hda. ˙
˙ ˙ ˙ ˙
5. Dùng bâ´t kỳ trình soan tha’o nào, ví du, CoolEdit cu’a Midnight Commander, d̄ê’ thay
thê´ 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 gă´n˙nhu’ gô´c (/) cu’a Linux). Nê´u Linux d̄u’o’c cài vào phân vùng /dev/hda3, thì
câ`n˙ ghi cái d̄ó, tú’c là thay thê´ /dev/hda thành ˙/dev/hda3. Nê´u nhu’ ban d̄oc không
nhó’ d̄ã cài Linux vào d̄âu, thì hãy chay câu lênh mount và tìm kê´t qua’ ˙tu’o’ng ˙ tu nhu
’ ’
sau : 2 ˙ ˙ ˙
2
có nghı̃a là tìm phân vùng d̄ã gă´n vào thu’ muc gô´c /, trong ví du này là /dev/hda3
˙ ˙
20 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
6. Chay lênh /sbin/lilo d̄ê’ ghi trình kho’’i d̄ông vào phân vùng /dev/hda3 (câ`n chay
lênh ˙ lilo
˙ không có tham sô´). Sẽ có ca’nh báo ˙ vê` viêc phân vùng không pha’i là d̄â˙`u
˙ ˙ ’ i d̄ông cu’a Windows d̄uoc giũ
tiên trên d̄ı̃a. ¯Dây chính là d̄iê`u chúng ta câ`n, ba’n ghi kho ’ ’’ ’
nguyên ven. ˙ ˙
˙
7. Thu’c hiên các bu’ó’c 6-8 nhu’ o’’ trên.
˙ ˙
Dê dàng d̄oán ra ră`ng, "quy trình" phú’c tap vó’i hai lâ`n kho’’i d̄ông lai chı’ d̄ê’ chuyê’n sector
˜
kho’’i d̄ông Linux tù’ MBR vào sector d̄â`u tiên ˙ cu’a phân vùng dành ˙ cho˙ Linux, và phuc hô`i
MBR cu ˙’ a Windows. ˙
Quá trình cài d̄ăt Linux kê´t thúc o’’ d̄ây. Ban d̄oc d̄ã có thê’ chon HD ¯ H sẽ kho’’i d̄ô˙ng và d̄iê`u
˙
khiê’n máy tính cu’a mình. ˙ ˙ ˙
3. Cài d̄ăt Linux theo chı’ dâ˜n d̄i kèm vó’i ba’n phân phô´i. Câ`n nhó’ ră`ng, nê´u ban muô´n su’’
dung ˙trình kho’’i d̄ông LILO, thì trong quá trình cài dăt Linux câ`n chon phu˙’o’ng án cài
˙
LILO vào ba’n ghi˙kho’’i d̄ông chính (Master Boot Record). ˙ Tao các d̄ı̃a˙ mê`m kho’’i d̄ông
theo nguyên tă´c là không˙bă´t buôc, nhu’ng tác gia’ khuyên ba˙n d̄oc nên làm.3 ˙
˙ ˙ ˙
4. Bu’ó’c tiê´p theo câ`n câ´u hình LILO d̄ê’ có thê’ kho’’i d̄ông các HD
¯ H theo lu˙’a cho˙n. LILO
´ ` ˙
d̄u’o’c câu hình băng tâp tin /etc/lilo.conf và câu lênh /sbin/lilo. Câu lênh này
dùng˙ d̄ê’ cài d̄ăt (hay ˙cài d̄ăt lai) LILO. ˙ ˙
˙ ˙ ˙
Chúng ta xem xét môt ví du nho’ cu’a tâp tin câ´u hình LILO. Trong ví du này chúng
ta sẽ coi nhu’ thiê´t bi˙ /dev/hda1 ˙ ˙
là phân vùng vó’i DOS/Windows, còn˙ phân vùng
˙
3
Ghi chú. Trình kho’’i d̄ông LILO không bă´t buôc pha’i cài d̄ăt vào ba’n ghi kho’’i d̄ông chính cu’a d̄ı̃a, LILO
˙ ng cu’a phân vùng chính
có thê’ nă`m o’’ ba’n ghi kho’’i d̄ô ˙ d̄uoc kích hoa
˙ t và chúa thu muc gô ˙ ´ c cu’a Linux hoăc thâm
’’ ’ ’
chí trên phân vùng lôgíc trong phân vùng mo’’ rông. Trong tru’ò’ng ho’p d̄ó MBR câ`n pha’i có kha’ năng nap˙ LILO,
˙ ˙ ˙ ˙ ˙
˙ ˙
ví du khi MBR là trình kho’’i d̄ông cu’a MS-DOS hay Windows. Tuy nhiên tác gia’ chu’a nhìn thâ´y su’ câ`n thiê´t ˙
cu’a ú˙’ng dung này (nê´u d̄ã chon˙LILO làm trình kho’’i d̄ông chính thì hãy su’’ dung cho "tron bô"), vì thê ˙´ chúng ta
˙
sẽ không xem xét d̄ê´n. ˙ ˙ ˙ ˙ ˙
2.7 Su’’ dung trình kho’’i d̄ông LILO 21
˙ ˙
/dev/hda2 chú’a Linux. Trong tru’ò’ng ho’p d̄ó /etc/lilo.conf có dang gâ`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 lò’i gia’i thích cho ví du: Dòng boot cho biê´t thiê´t bi kho’’i d̄ông.
˙ ˙ ˙
Dòng compact bât chê´ d̄ô nén tâp tin map – tâp tin chú’a d̄ăc tính cu’a nhân d̄u’o’c kho’’i
d̄ông; tính năng (nén) ˙ này˙tăng tô´˙ c d̄ô cu’a kho’i˙ d̄ông d̄â`u. ˙ ˙
’
˙ ˙ ˙
Câu lênh message dùng d̄ê’ d̄u’a ra thông báo theo ý muô´n khi kho’’i d̄ông.
˙ ˙
Bă´t d̄â`u tù’ dòng image là các phâ`n nho’ cu’a tâp tin câ´u hình, mô˜i phâ`n tu’o’ng ú’ng vó’i
môt hê d̄iê`u hành sẽ kho’’i d̄ông theo lu’a chon cu ˙’ a nguòi dùng. Trong mô˜i phâ`n nhu vây
’’ ’
có môt dòng label. Trên dòng này ghi tên cân nhâp vào dâu nhăc LILO hay tên ˙sẽ
˙ ˙ ˙ ˙ ˙ ` ´ ´
˙ trong trình d̄on cu’a LILO d̄ê’ có thê’ chon HD
hiê’n thi ˙
˙
’
˙ ¯ H muô´n kho’’i d̄ô˙ng. Nê´u nhu’ tên
không d̄u’o’c nhâp sau khoa’ng thò’i gian chı’ trên dòng delay (tính theo phâ`n mu’ò’i giây
– câ`n nhân ˙ vói˙ 0,1 giây), thì sẽ kho’i d̄ông HDH theo măc d̄inh. Trong ví du này, sẽ
’ ’ ¯
kho’’i d̄ông Linux theo măc d̄inh, vì phâ`˙n câ´u hình tu’o’ng ˙ú’ng˙vó’i Linux nă`m˙d̄â`u tiên
trong tâ˙ p tin. Có thê’ chı’ ra˙ hê˙ d̄iê`u hành d̄uoc kho’i d̄ông theo măc d̄inh khi thêm môt
’’ ’
dòng có˙ dang default=dos˙, tú’c là su’’ dung˙ tên d̄ã d̄ă˙ t trên dòng˙ label ˙ . ˙
˙ ˙ ˙
Dòng table=<device> cho biê´t tên thiê´t bi chú’a ba’ng phân chia d̄ı̃a. LILO sẽ không
d̄u’a thông tin vê` phân chia d̄ı̃a cho hê d̄iê`u hành ˙ d̄u’o’c kho’’i d̄ông nê´u biê´n này không
d̄u’o’c d̄u’a ra. (Môt sô´ hê d̄iê`u hành có công cu khác ˙d̄ê’ xác d̄inh
˙ ˙ là d̄ã d̄uoc kho’i d̄ông
’’ ’
tù’ phân vùng nào.) ¯Dù’ng quên ră`ng, câ`n thu’c hiên câu lênh /sbin/lilo,˙ sau khi thay
˙ ˙ ˙ ˙ ˙ ˙
d̄ô’i chı’ dâ˜n d̄ê´n ba’ng phân chia d̄ı̃a, tú’c là˙ thay ˙ d̄ô’i biê˙´ n table. Nê´u d̄ăt dòng (goi
là phâ`n nho’ thì tô´t ho’n) other = /dev/hda1 trong tâp tin /etc/lilo.conf ˙ ˙
, thì
˙
trong thu’ muc gô´c cu’a d̄ı̃a /dev/hda1 (d̄ı̃a C: trong hê thô´ng thuât ngũ’ Microsoft) câ`n
có trình kho’’˙i d̄ông phu (không pha’i là chính). Trên mô˙t máy cu’a tác ˙ gia’ o’ d̄ó nă`m trình
’
kho’’i d̄ông NT Loader˙ ˙(vì Windows NT d̄uoc cài d̄ăt tru ˙ óc Linux), và LILO kho’i d̄ông
’’ ’’ ’
˙ ’ ` ˙ ˙ ’
thành công Windows NT. Chı cân d̄ăt thò’i gian chò’ kho’i d̄ông trong tâp tin boot.ini ˙
bă`ng không, d̄ê’ không thâ´y trình d̄o’n ˙kho’’i d̄ông cu’a NT Loader. ˙ Tuy nhiên, ˙ nê´u vì môt
lý do nào d̄ó ban muô´n thâ´y trình d̄o’n này thì giá tri timeout trong tâp tin boot.ini câ`˙n
˙
d̄ăt khác không˙ (thò’i gian chò’ d̄u’o’c tính theo giây). ¯D ˙ iê`u này có thê’ câ
˙ `n thiê´t khi muô´n
kho˙ ’ i d̄ông ca’ Windows 98 tù trình ˙ d̄on cu’a NT Loader (trong truòng hop này sẽ có 3
’ ’ ’ ’’ ’
˙ ˙
HD ¯ H: Linux, Windows NT và Windows 98, trong trình d̄o’n cua LILO nê´u cho˙n dos ’
thì sẽ hiên ra trình d̄o’n cu’a NT Loader rô`i tù’ d̄ó chon môt trong hai HD
˙ ˙ ˙ ¯ H Windows d̄ê’
kho’’i d̄ông).
˙
Nê´u ban d̄oc muô´n kho’’i d̄ông Windows tru’c tiê´p tù’ LILO, thì hãy thêm phâ`n nho’ sau
˙ ˙
vào /etc/lilo.conf : ˙ ˙
22 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
trong d̄ó bootsect.dos lâ´y tù’ thu’ muc gô´c cu’a ô’ d̄ı̃a chú’a NT Loader.
˙
5. Sau khi su’’a xong tâp tin /etc/lilo.conf theo ý muô´n, câ`n chay câu lênh /sbin/lilo
d̄ê’ nhũ’ng thay d̄ô’˙i có hiêu lu’c. Câu lênh này (trong tài liêu ˙hu’ó’ng dâ ˙ ˜n goi là map-
installer) cài d̄ăt trình kho’’i d̄ông phu, mà sẽ d̄u’o’c kích hoat trong lâ`n kho’’i˙ d̄ông tiê´p
˙ ˙ ˙ ˙
theo. Tru’ó’c khi˙ chay /sbin/lilo ˙ ˙’ thay d̄ô’i bu˙ óc kho’i d̄ô˙ ng, hãy thuc hiên câu
d̄ê ’’ ’ ’
˙ lênh
˙ ˙ ˙
này vó’i tham sô´ -t. Khi có tham sô´ này sẽ thu’c hiên tâ´t ca’ các thu’ tuc cài d̄ăt trình ˙ ˙
kho’’i d̄ông, trù’ viêc thay d̄ô’i tâp tin map, ba’n ghi˙ sector ˙ kho’i d̄ông, và ba’˙ng phân˙ chia ô’
’
˙ mói. Nê´u cho thêm tùy chon˙ -v, thì ban d̄oc sẽ d̄uoc
d̄ı̃a, tú’c˙ là chı’ cha˙ y thu’’ câ´u hình ’ ’’
´ ˙ ´ `
biêt thêm thông tin chi tiêt vê nhũ’ng gì lênh /sbin/lilo sẽ thu’c hiên. ˙ ˙ ˙ ˙
˙ ˙ ˙
Khi /sbin/lilo ghi d̄è nôi dung mó’i lên sector kho’’i dông, thì nôi dung cũ cu’a
sector này sẽ tu’ d̄ông d̄u’o’c˙ ghi nhó’ vào môt tâp tin. Theo ˙ măc d̄inh˙ d̄ó là tâp tin
˙ ˙ ˙
/boot/boot.NNNN, trong d̄ó NNNN tu’o’ng ú’ng vó’i sô
˙ ˙ ˙ ˙
´ cu’a thiê´t bi, ví du, 0300˙ –
tu’o’ng ú’ng /dev/hda, 0800 – /dev/sda, v.v. . . Nê´u tâp tin này d̄ã có˙ trên d̄ı̃a, ˙ thì nó
không bi ghi d̄è lên. Tuy nhiên có thê’ d̄ăt môt tên khác ˙d̄e’ ghi sector kho’’i d̄ông, không
nhâ´t thiê´˙t pha’i dùng /boot/boot.NNNN ˙ . ˙ ˙
Tâp tin /boot/boot.NNNN có thê’ su’’ dung d̄ê’ phuc hô`i nôi dung cũ cu’a sector kho’’i
d̄ô˙ ng, nê´u không còn cách phuc hô`i nào ˙khác d̄o’n gia ˙ ’ n hon.˙ Câu lênh d̄ê’ thuc hiên có
’ ’
˙
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 hô`i chu’o’ng trình kho’’i d̄ông, và không d̄ông gì d̄ê´n ba’ng phân chia
d̄ı̃a). ˙ ˙ ˙
Cũng có thê’ phuc hô`i MBR cũ khi câ`n thiê´t bă`ng câu lênh /sbin/lilo vó’i tùy chon
˙ ´ t ră`ng, câu lênh này chı’ làm viêc d̄úng˙ vói d̄iê`u kiên là thu muc LILO
-u. Nhu’ng câ`n biê
˙
’ ’
(tú’c là /boot) không thay d̄ô’i˙ kê’ tù’ khi cài d̄ăt. ˙ ˙ ˙
˙
MBR cu’a MS-DOS có thê’ d̄u’o’c phuc hô`i bă`ng cách kho’’i d̄ông vào DOS tù’ d̄ı̃a mê`m
(CD) rô`i chay câu lênh fdisk /mbr ˙ ˙
(xem trên). Lênh này chı’ ˙thay d̄ô’i mã chu’o’ng trình
˙` m trong
kho’’i d̄ông nă ˙ MBR, mà không thay d̄ô’i ba ˙’ ng phân chia d̄ı̃a.
˙
6. Sau khi cài d̄ăt lai trình kho’’i d̄ông câ`n kho’’i d̄ông lai máy tính và thu’’ các phu’o’ng án
kho’’i d̄ông khác˙ nhau
˙ ˙
d̄ê’ kiê’m tra. ˙ ˙
˙
’
¯Dê kêt thúc phâ`n nói vê` LILO này chúng ta sẽ xem xét vài khó khăn có thê’ xuâ´t hiê˙n khi
´
su’’ dung LILO, và cách khă´c phuc (nê´u có thê’).
˙ LILO d̄uoc nap, nó d̄ua˙ra màn hình tù "LILO". Khi này mô˜i chũ cái biê’u thi su kê´t
Khi ’’ ’ ’ ’ ’
˙ ˙ ´ ´ ’
thúc môt hành d̄ông nào d̄ó hay kêt thúc môt bu’ó’c nap LILO. Nêu kho’i d̄ông bi bi ngu’ng ˙ ˙
giũ’a chù˙ ng, thì qua
˙ sô´ chũ cái d̄ua ra có thê’ nhâ˙ n d̄inh ˙vê` nguyên nhân xuâ´t hiê˙ n vâ˙´ n˙d̄ê`.
’ ’ ’
˙ ˙ ˙
2.7 Su’’ dung trình kho’’i d̄ông LILO 23
˙ ˙
• Không chũ’ cái nào hiên ra – không có phâ`n nào cu’a LILO d̄u’o’c nap. Hoăc LILO không
d̄u’o’c cài d̄ăt, hoăc phân ˙ vùng chúa LILO chua d̄uoc kích hoa˙t. ˙ ˙
’ ’ ’’
˙ ˙ ˙ ˙ ˙
• L [mã lô˜i] – trình kho’’i d̄ông chính d̄ã d̄u’o’c nap và d̄ã chay (tú’c là d̄ã nhân d̄u’o’c quyê`n
d̄iê`u khiê’n), nhu’ng nó không ˙ thê’ nap trình˙ kho˙ ’ i d̄ông phu˙ . Mã lô˜i hai ˙ký tu˙cho biê´t
’ ’
nguyên nhân cu thê’ cu’a vâ´n d̄ê` (cách gia’i mã câ`n tìm trong˙tài liêu kỹ thuât cu˙’ a LILO).
˙ ˙
Thông thu’ò’ng ˙thì vâ´n d̄ê` na’y sinh do ô’ d̄ı̃a xâ´u (có khuyê´t tât) hay ˙ không˙d̄ăt d̄úng câ´u
trúc hình hoc cu’a d̄ı̃a. Nê´u LILO không dù’ng lai o’’ d̄ây, mà˙ tiê´p tuc d̄u’a ra˙ môt chuô˜i
vô tân các mã ˙ lô˜i, thì vâ´n d̄ê` thuòng dê˜ gia’i quyê´˙ t. ˙ ˙
’’
˙
• LI – trình kho’’i d̄ông chính d̄ã nap d̄u’o’c trình kho’’i d̄ông phu, nhu’ng không chay d̄u’o’c
˙ a câ´u trúc hình
nó. Có thê’ là lô˜i d̄u ˙ hoc ˙cu’a d̄ı̃a, hoăc tâ˙p tin boot/boot.b
˙ bi di˙chuyê˙’n
’
mà ngu’ò’i dùng quên không chay /sbin/lilo ˙ . ˙ ˙ ˙
˙
• LIL — trình kho’’i d̄ông phu d̄ã d̄u’o’c chay, nhu’ng nó không thê’ nap ba’ng mô ta’ tù’ tâp
tin map. Nguyên nhân ˙ thuò˙ ng do ˙khuyê´˙t tât cu’a ô’ d̄ı̃a hoăc không ˙ d̄ua d̄úng câ´u trúc
˙
’’ ’
hình hoc cu’a d̄ı̃a. ˙ ˙
˙
• LIL? – trình kho’’i d̄ông phu d̄ã d̄u’o’c nap vào d̄ia chı’ không d̄úng. Thông thu’ò’ng do lô˜i
d̄u’a ra câ´u trúc hình˙ hoc cu ˙’ a d̄ı̃a hoă
˙ c˙ tâp tin /boot/boot.b
˙ bi di chuyê’n mà ngu’ò’i
dùng quên không chay /sbin/lilo.˙ ˙ ˙ ˙
˙
• LIL- – ba’ng mô ta’ trong tâp tin map bi phá hu’y. Thông thu’ò’ng do lô˜i d̄u’a ra câ´u trúc
hình hoc cu’a d̄ı̃a hoăc tâp tin ˙ /boot/boot.b ˙ bi di chuyê’n mà ngu’ò’i dùng quên không
˙
chay /sbin/lilo. ˙ ˙ ˙
˙
• LILO – tâ´t ca’ các phâ`n cu’a LILO d̄u’o’c nap thành công.
˙ ˙
2.7.2 Cài d̄ăt các hê d̄iê`u hành khác sau Linux
˙ ˙
Khi cài d̄ăt MS-DOS và Windows 95/98, trình kho’’i d̄ông cu’a chúng (không phu thuôc vào ý
muô´n cu’a˙ ban d̄oc) d̄u’o’c ghi vào Master Boot Record˙ (MBR), và dâ´u kích hoa˙ t trong ˙ ba’ng
phân vùng sẽ˙ d̄u’o˙’c chuyê
˙ ’n sang phân vùng MS-DOS (Windows 95/98). Mà trình ˙ kho’i d̄ông
’
˙
MS-DOS và Windows 95/98 chı "biêt" chuyên quyên d̄iêu khiên cho sector d̄âu tiên ˙cu’a
’ ´ ’ ` ` ’ `
phân vùng kích hoat. Nhu’ thê´, nê´u nhu’ ban d̄oc d̄â`u tiên cài d̄ăt Linux, và sau d̄ó mó’i cài d̄ăt
Windows 95/98 hay ˙ MS-DOS, thì Linux˙sẽ không ˙ thê’ kho’’i d̄ô˙ ng. Có thê’ phuc hô`i lai LILO
˙
bă`ng cách chay lênh /sbin/lilo (nê´u LILO d̄u’o’c cài vào MBR), ˙ hoăc kích ˙hoat phân˙ vùng
chú’a LILO (nê˙´ u ˙LILO d̄uoc cài vào phân vùng chính). ˙ ˙ ˙
’’
˙
Khi có vâ´n d̄ê` sau khi cài d̄ăt môt hê d̄iê`u hành khác sau Linux, thu’ò’ng có thê’ gia’i quyê´t
bă`ng cách kho’’i d̄ông vào Linux˙bă`ng˙ d̄ı̃a˙ mê`m kho’’i d̄ông, su’’a lai tâp tin câ´u hình LILO (thêm
phâ`n nho’ cho HD ˙ ˙ ˙ ˙
¯ H mó’i), rô`i cha˙y /sbin/lilo.
¯Dê’ thu˙’c hiê˙n phu’o’ng án kho’’i d̄ô˙ng này, câ`n phân vùng DOS o’’ chê´ d̄ô˙ d̄o˙c/ghi, ta˙o trong
d̄ó môt thu’ muc (ví du, /dos/linux), và chuyê’n tâ´t ca’ các tâp tin tù’ thu’ muc /boot vào
˙ muc /boot
d̄ó; thu ˙ d̄u’˙o’c chuyê’n thành liên kê´t tu’o’ng tru’ng d̄ê´n˙ thu’ muc /dos/linux
˙ ; vi trí
’
mó’i cua thu’ muc /boot cân chı ra trong tâp tin /etc/lilo.conf, và cuôi cùng chay lê˙ nh
’ ˙ ˙ ` ’ ˙ ˙ ´
/sbin/lilo.
˙ ˙ ˙ ˙
• Chu’o’ng trình loadlin.exe. Có thê’ tìm thâ´y trên d̄ı̃a phân phô´i o’’ dang không nén hay trong
gói LOADLIN16.TGZ. Gói nén này còn chú’a hu’ó’ng dâ˜n su’’dung˙ DOC\MANUAL.TXT,
tâp tin tham sô´ ví du DOC\TEST.PAR, và hu’ó’ng dâ˜n cách d̄u’a˙ các tham sô´ DOC\PARAMS.DOC
˙ ng quên ră`ng chúng
(d̄ù ˙ là nhũ’ng tâp tin DOS).
’
˙
4
môt sô´ ba’n phân phô´i còn có gói cài d̄ăt cho chu’o’ng trình này, thông thu’ò’ng ghi tâp tin loadlin.exe vào thu’
muc cu’˙a ngu’ò’i dùng root ˙ ˙
˙ 5 Ghi chú. zImage là d̄inh dang nhi phân cũ cu’a nhân, bzImage là d̄inh dang mói hon (sô´ phiên ba’n nhân lón
’ ’ ’
ho’n 1.3.73) có kích thu’ó’c˙ lên ˙tó’i 1 Mbyte,
˙ ˙ kích
do d̄ó, nhân khi gia’i nén có ˙ thuóc lên tói 2 Mbyte. Tiê´p theo
’’ ’
chúng ta sẽ chı’ nói vê` các tâp tin zImage, măc dù ban d̄oc có thê’ thay thê´ zImage thành bzImage
˙ ˙ ˙ ˙
2.8 Kho’’i d̄ông Linux tù’ MS-DOS bă`ng loadlin.exe 25
˙
3. Sau khi kê´t thúc phâ`n cài d̄ăt hãy kho’’i d̄ông Linux (nê´u không có cách nào khác, hãy
˙ Gă´n phân vùng
su’’ dung d̄ı̃a mê`m kho’’i d̄ông). ˙ DOS (gia’ thiê´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 tâp tin LOADLIN16.TGZ vào d̄ó. Ngoài
ra˙ sao chép˙ tù’ thu’ muc /boot vào thu’ muc d̄ó˙ ca’ tâp tin chú’a a’nh cu’a nhân Linux. Có
thê’ tìm tâp tin chú’a ˙a’nh cu’a nhân câ`n thiê
˙´ t nhò tâ˙p tin /etc/lilo.conf: tìm trong
’
˙
tâp tin câ´u hình dòng "image=..." và ban d̄oc sẽ thâ ˙´ y tên câ`n thiê´t o’ phía bên pha’i dâ´u
’
˙` ’ ˙ ˙
băng. Ví du tên cua tâp tin này là vmlinuz-2.4.22. Sao chép tâp tin vmlinuz-2.4.22 tù’
˙ ˙ ˙
/boot vào /mnt/C/loadlin và d̄ô’i tên thành vmlinuz (viêc d̄ô’i tên là không nhâ ´t
´
thiêt, và chı’ có ý nghı̃a thuân tiên cho su’’ dung): ˙
˙ ˙ ˙
kênh giao tác
[root]# cp /boot/vmlinuz-2.4.22 /mnt/C/loadlin/vmlinuz
4. Bây giò’i kho’’i d̄ông lai máy tính vào DOS tru’c tiê´p (nê´u ban d̄oc có Windows 95/98 thì
câ`n nhâ´n phím ˙<F8>˙ khi kho’’i d̄ông d̄ê’ hiê’n˙ thi trình d̄o’n˙ cho˙ phép chon DOS), hoăc
qua hôp thoai lu’a chon khi nhâ´n ˙lênh tă´t máy (shutdown)
˙ ˙
Windows 95/98. ˙
˙ ˙ ˙ ˙ ˙
Sau khi vào DOS hãy chuyê’n sang thu’ muc C:\LOADLIN (lênh CD \LOADLIN) và
thu’c hiên lênh ˙ ˙
˙ ˙ ˙
C:\LOADLIN> LOADLIN vmlinuz /dev/hda3 ro vga=ask
hoăc, nê´u ban d̄oc muô´n nap nhân cùng vó’i ô’ d̄ı̃a RAM:
˙ ˙ ˙ ˙
C:\LOADLIN> LOADLIN vmlinuz /dev/ram rw initrd=diskimage
Còn có thê’ ghi tâ´t ca’ các tham sô´ cu’a lênh loadlin.exe vào tâp tin (ví du vó’i tên params)
và goi câu lênh d̄ó o’’ dang sau: ˙ ˙ ˙
˙ ˙ ˙
C:\LOADLIN> LOADLIN @params
Kha’ năng này d̄ăc biêt có ích khi d̄u’a nhiê`u tham sô´ dòng lênh và khi d̄ô dài
cu’a dòng lênh ló’˙n ho’n˙ 127 ký tu’. Mô ta’ d̄â`y d̄u’ tâ´t ca’ các tham
˙ sô´ cu’a câu˙ lênh
loadlin.exe ˙có thê’ tìm thâ´y trong˙ tâp tin PARAMS.DOC hoă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̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙
Bây giò’ ban d̄oc có thê’ su’’ dung cách này d̄ê’ kho’’i d̄ông Linux. Công viêc duy nhâ´t còn
lai là làm sao˙d̄ê’ không
˙ pha’i gõ ˙lênh loadlin vó’i tâ´t ca’ ˙các tham sô´ sau mô˜˙i lâ`n kho’’i d̄ông
˙
lai. Có thê’ viê´t thêm lênh goi loadlin˙ vào tâp tin autoexec.bat hoăc tao môt tâp tin lênh˙(ví
˙ , linux.bat), và khi cha
du ˙ y tâ˙p tin này, máy ˙tính sẽ chuyê’n vào chê´˙ d̄ô˙DOS˙ tru˙óc, sau˙ d̄ó thì
’’
cha ˙ y Linux. Tác gia’ cho˙ră`ng˙ nhũng thông tin d̄ã d̄ua ra o’ trên d̄u’ d̄ê’ ˙tao tâp tin bat câ`n thiê´t.
’ ’ ’
Câ`˙n nói thêm ră`ng, không d̄u’o’c kho’’i d̄ông Linux tù’ giao diên d̄ô` hoa ˙DOS/Windows
˙ và câ`n
˙ ˙ ˙ ˙
tă´t môt vài tùy chon trong tâp tin â’n C:\MSDOS.SYS (d̄ây là tâp tin văn ba’n thông thu’ò’ng),
bă`ng ˙cách thêm vào ˙ hai dòng˙ sau (nê´u chua có):
’
˙
BootGUI=0
Logo=0
Dòng d̄â`u tiên tă´t giao diên d̄ô` hoa, và DOS sẽ d̄u’o’c kho’’i d̄ông thay cho Windows 95/98.
˙ ˙ ˙ ˙
¯ ê’ cha˙y giao diê˙n d̄ô` ho˙a, câ`n nhâ˙p câu lê˙nh C:> win).
(D
Logo=0 tă´t viêc hiê’n thi biê’u tu’o’ng Windows (cu’’a sô’). Vâ´n d̄ê` o’’ chô˜, d̄ô´i vó’i môt sô´ cac
màn hình Linux sẽ ˙ d̄ua ra mô˙ t màn˙hình trô´ng rô˜ng sau khi kho’i d̄ông, nê´u nhu có˙ hiê’n thi ˙
’ ’ ’
biê’u tu’o’ng Windows. ˙ ˙ ˙
˙
Chu’o’ng 3
Bash
cu’a Bourne". Trên tiê´ng Anh d̄ây là môt cách cho’i chũ’, vì tù’ Bourne d̄oc giô´ng vó’i tù’ borne
(sinh ra, d̄e’ ra), và nhu’ thê´ bash còn có˙ thê’ gia’i mã là "shell d̄u’o’c sinh ˙ra lâ`n hai". Tiê´p theo
chúng ta sẽ chı’ xem xét bash, vì thê´ o’’ du’ó’i khi nói d̄ê´n hê vo’˙, xin ngâ`m hiê’u d̄ó là bash
Tu’ môt mình bash không thu’c hiên môt công viêc ú’ng dung˙ nào. Nhu’ng nó hô˜ tro’ viêc thu’c
thi˙ mo˙ i chu’o’ng trình khác, tù’˙ viêc˙ tìm ˙kiê´m chu’o˙’ng trình˙ d̄u’o’c goi, chay chúng d̄ê ˙´ n ˙viêc ˙tô’
chú’c dũ’ liêu d̄â`u vào/d̄â`u ra. Ngoài ra, hê vo’ chiu trách nhiêm vê` công viêc vó’i các biê´n˙môi
˙ ˙ ˙ ˙ ˙
tru’ò’ng và ˙thu’c hiên môt vài biê´n d̄ô’i (thê´˙, hoán˙d̄ô’i vi trí) các
˙ tham sô´ lênh.
˙ Nhung tính châ´t
’
chính cu’a hê˙ vo’, ˙nhò’ ˙d̄ó d̄u’a hê vo’ tro’’ thành môt công ˙ cu manh cu’a ngu ˙ òi dùng, d̄ó là nó
’’
bao gô`m mô˙t ngôn ngũ’ lâp trình˙ d̄o’n gia’n. Trong˙ toán hoc˙ tù’ lâu ˙ d̄ã d̄uoc chúng minh ră`ng,
’’ ’
˙ t toán nào˙ cũng có thê’ d̄uoc xây dung tù hai
bâ´t kỳ môt thuâ ˙ (ba) thao tác˙ co ba’n và môt toán
’’ ’ ’ ’
˙ n. Hê
tu’’ d̄iê`u kiê ˙ vo’ cung câ´p các toán tu’ ˙d̄iê`u kiên˙ và toán tu’ vòng lăp. Nó su’ dung các ˙ tiên
’ ’ ’
ích và chu˙’o’ng trình ˙ khác (có trong thành phâ`n hê˙ d̄iê`u hành, hay d̄u’o˙’c cài d̄ăt riêng)˙ ˙
d̄ê’ làm
các thao tác co’ ba’n cho ngôn ngũ’ lâp trình mà nó ˙ hô˜ tro. Dô`ng thòi ˙cho phép ˙ d̄ua các tham
’¯ ’ ’
´ ´ ’ ’ ˙ ˙
sô cũng nhu’ kêt qua làm viêc cua môt chu’o’ng trình tó’i các chu’o’ng trình khác hay tó’i ngu’ò’i
dùng. Kê´t qua’ thu d̄u’o’c là mô ˙ t ngôn˙ ngũ lâp trình manh. Dây cũng là súc manh và là môt
’ ¯ ’
trong các chú’c năng chính cu’a˙ hê vo’. Tru’ó’c ˙khi bă´t d̄â`u˙ phâ`n này, ban d̄oc nên biê
˙ ˙ ´ t các tô’ ho˙p
’
’ ` ˙’ ˙ ˙
phím chính, su’ dung d̄ê d̄iêu khiên viêc nhâp dũ’ liêu trên dòng lênh. Nên nhó’ ít nhât cách su’’
’ ´ ˙
dung cu’a các (tô’ ˙ho’p) phím <Ctrl>+<C>, ˙ ˙ ˙
<Ctrl>+<D>, <Tab> và ˙ các phím có mũi tên.
˙ ˙
và ký tu’ vó’i mã 0, ký tu’ hàng mó’i (tao ra khi nhâ´n phím <Enter>) và ký tu’ khoa’ng tră´ng. Phu
thuôc vào˙ tình huô´ng các ˙ ký tu d̄ăc˙biêt này có thê’ su’ dung vói ý nghı̃a ˙d̄ăc biêt cu’a nó hay˙
’ ’ ’
’ ˙ ˙ ˙ ˙ ´ ˙
su’ dung nhu’ môt ký tu’ thông thu’ò’ng. Nhu’ng trong d̄a sô các tru’ò’ng ho’p không ˙ ˙khuyên dùng
các ký ˙ tu vói giá
˙ tri thú
˙ hai. Truóc hê´t d̄ó là viêc su’ dung chúng trong ˙tên tâp tin và thu muc.
’ ’ ’ ’’ ’ ’
˙ ˙
Tuy nhiên các ký tu’ _, - và . (dâ´u gach du’ó’i, ga ˙ ch ngang
˙ và dâ´u châ´m) thu˙òng d̄uoc su’ du˙ng
’’ ’’ ’
trong tên tâp tin, và˙ d̄ây là môt ví du ˙ cho thâ´y ˙không pha’i lúc nào chúng cũng có ˙giá tri ˙d̄ăc
biêt. Trong˙ tên tâp tin chı’ dâ´u˙châ´m ˙(.) và gach chéo (/) có giá tri d̄ăc biêt. Ký hiêu gach ˙chéo ˙
˙ ˙ ˙ ˙ ˙ ˙ ˙
dùng d̄ê’ phân chia tên các thu’ muc trong d̄u’ò’ng dâ˜n, còn dâ´u châ´m có giá tri d̄ăc biêt khi nó ˙
là ký tu’ d̄â`u tiên trong tên tâp tin˙ (cho biê´t tâp tin là "â’n"). Viêc d̄u’a ngay tâ´˙t ca˙’ ý nghı̃a
˙ d̄ăc
˙ ˙
biêt cu’a nhũ’ng ký tu’ này và các tình huông su’’ dung chúng tam thò’i không có ích. Chúng ˙ta
´ ˙ ˙
sẽ˙xem xét chúng dâ˙`n dâ`n trong các phâ`n sau, khi ˙ câ`n su’ dung
’
˙ d̄ê´n. Tuy nhiên, 3 ký hiêu có
ý nghı̃a ló’n và câ`n d̄ê` câp d̄ê´n d̄â`u tiên. Ký hiêu \ (gach chéo ˙ nguoc) có thê’ goi là "ký˙ hiêu
’’
xóa bo’ ý nghı̃a d̄ăc biêt" cho bât kỳ ký tu’ d̄ăc biêt nào, d̄ú’ng ngay˙ sau \. Ví du
˙ ´ ˙ ˙ ˙ , nê´u muô´˙ n
su’’ dung khoa’ng tră ˙´ ng ˙trong tên tâp tin, thì˙ chúng˙ ˙ta câ`n d̄ăt truóc ký tu khoa’ng tră
˙ ´ ng d̄ó môt
’’ ’
˙
dâ´u V̇í du, câu lênh sau: ˙ ˙ ˙ ˙
˙ ˙
kênh giao tác
teppi82@teppi:~$ cp lennon_imagine lennon\ imagine
Các ký tu’ ’ và " (ngoăc d̄o’n và ngoăc kép) có thê’ goi là "các ký tu’ trích dâ˜n". Mô˜i ký tu’
này luôn luôn ˙ d̄uoc su’ du˙ng trong môt că
˙ p vói ba’n sao cu
˙’ a chính nó d̄ê˙’ d̄óng khung môt biê’u˙
’’ ’ ’
˙ nhu ˙trong các văn
thú’c nào d̄ó, giô´ng ˙ ba˙’ n, sách báo, . . . thông thuòng. Nê´u nhu mô˙t d̄oan
’ ’’ ’
˙ ˙
3.3 Thu’c thi các câu lênh 29
˙ ˙
văn ba’n nào d̄ó d̄ăt trong ngoăc d̄o’n, thì tâ´t ca’ các ký tu’ nă`m trong ngoăc d̄o’n này có giá
˙
tri nhu’ các ký tu’ thông thu’ò’ng,˙ khôn môt ký tu’ nào có ý ˙nghı̃a d̄ăc biêt. Tro
˙ ’ lai vói ví du su’
’ ’ ’
˙ ˙ ˙ ˙ ˙ ˙ ˙ tên "lennon
dung khoa’ng tră´ng trong tên tâp tin o’’ trên, có thê’ nói, nê´u muô´n d̄ăt tâp tin cái ˙
˙
imagine" câ`n d̄u’a tên d̄ó vào dâ´˙ u ngoă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 ngoăc d̄o’n mâ´t ý nghı̃a d̄ăc biêt
´ t ca’˙ các ký tu’, còn trong ngoăc˙kép - tâ´˙t ca’ chúng ngoai trù’ $,˙ ’ và \ (dâ´u d̄ô la, ˙ngoă˙c
tâ
˙ nguoc).
d̄o’n và dâ´u gach ˙ ˙ ˙
’’
˙ ˙
thì hê vo’ d̄â`u tiên sẽ thu’c hiên câu lênh command1, chò’ cho lênh d̄ó hoàn thành, sau d̄ó
˙
chay command2, ˙
chò’ lênh hoàn ˙thành, sau
˙ d̄ó lai d̄ua ra dòng nhâp ˙lênh và chò các hành d̄ông
’ ’
tiê´˙p theo cu’a ngu’ò’i dùng. ˙ ˙ ˙ ˙ ˙
viêc thu’c hiên môt câu lênh nào d̄ó. Chı’ có thê’ nói ngă´n gon ră`ng, hê vo’ pha’i tìm mã (code)
chu ˙ ong˙ trình,˙ nap˙ mã d̄ó˙vào bô nhó, chuyê’n các tham sô´ d̄ã˙ nhâp trên˙ dòng lênh vào cho câu
’’ ’
lênh, và sau khi˙ thu’c hiên xong ˙ thì theo môt cách nào d̄ó tra’ la˙ i kê´t qua’ thu˙c hiên lênh này
’
cho ngu’ò’i dùng hay tiên trình khác. Chúng ta sẽ xem xét qua các bu’ó’c này. Bu’ó’˙c d̄â`˙u tiên -
˙ ˙ ´ ˙ ˙ ˙ ˙
tìm kiê´m câu lênh. Các câu lênh chia thành hai loai: nôi trú (mã cu’a chúng có trong mã cu’a
chính hê vo’) và˙ ngoai trú (mã˙ cu’a chúng nă`m trong˙ mô˙t tâp tin riêng le’ trên d̄ı̃a). Hê vo’ luôn
luôn tìm˙ thâ´y lênh nô ˙ i trú, còn d̄ê’ tìm các lênh ngoai ˙trú ˙nguòi dùng, theo nguyên ˙tă´c, pha’i
’’
˙ ˜n d̄â`y d̄u’ tói tâp tin tu˙ong úng.˙ Tuy nhiên d̄ê’ gõ "gánh năng" cho nguòi
chı’ cho hê vo’ d̄u˙’ò’ng dâ ’ ’’ ’ ’ ’’
˙ ˙
dùng hê vo biêt cách tìm lênh ngoai trú trong các thu’ muc, mà d̄u’o’c liêt kê trong d̄u’ò’ng dâ˜n
’ ´ ˙
˙ Chı’ khi (hê vo’) không
tìm kiê´m. ˙ ˙ ’ tìm thâ´y tâp tin câ`n˙ thiê´t trong
thê ˙ các
˙ thu muc d̄ó, nó mói
’ ’
˙ ˙
quyê´t d̄inh ră`ng ngu’ò’i dùng d̄ã nhâ`m khi nhâp tên lênh. Vê` cách thêm thu’ mu ˙ c vào d̄uòng
’’
dâ˜n tìm˙kiê´m chúng ta sẽ nói d̄ê´n o’’ du’ó’i, còn ˙bây giò’˙chúng ta sẽ xem xét cách ˙hê vo’ tô’ chú’c
viêc d̄u’a dũ’ liêu vào cho câu lênh d̄ang thu’c hiên và viêc d̄u’a kê´t qua’ tó’i cho ngu’˙ò’i dùng.
˙ ˙ ˙ ˙ ˙ ˙
• d̄â`u vào tiêu chuâ’n (standard input hay stdin). Qua kênh này dũ’ liêu d̄u’o’c d̄u’a vào cho
chu’o’ng trình; ˙ ˙
• d̄â`u ra tiêu chuâ’n (standard output hay stdout). Qua kênh này chu’o’ng trình d̄u’a ra kê´t
qua’ làm viêc cu’a mình;
˙
• kênh thông báo lô˜i tiêu chuâ’n (standard error hay stderr). Qua kênh này chu’o’ng trình
d̄u’a ra thông tin vê` lô˜i.
Tù’ d̄â`u vào tiêu chuâ’n chu’o’ng trình chı’ có thê’ d̄oc, còn hai d̄â`u ra và kênh thông báo lô˜i
d̄u’o’c chu’o’ng trình su’’ dung chı’ d̄ê’ ghi. Theo măc d̄inh ˙ d̄â`u vào có liên kê´t1 vói bàn phím, còn
’
d̄â`u˙ ra và kênh báo lô˜i hu˙ óng d̄ê´n terminal cu’a˙ngu˙òi dùng. Nói cách khác, toàn bô thông tin
’’ ’’
cu’a lênh hay chu’o’ng trình mà ngu’ò’i dùng d̄ã chay, và tâ´t ca’ nhũ’ng thông báo lô˜i,˙ d̄u’o’c d̄u’a
ra cu’’a˙ sô’ terminal. Tuy nhiên, chúng ta sẽ thâ´y o’˙’ du’ó’i, có thê’ chuyê’n hu’ó’ng thông báo ˙ d̄â`u
ra (ví du, vào tâp tin). ¯Dê’ cho thâ´y kênh thông báo lô˜i tiêu chuâ’n làm viêc nhu’ thê´ nào, hãy
thu’c hiê˙n câu lê ˙ nh ls vói môt tham sô´ không d̄úng, ví du dùng tham sô´˙ là môt tên tâp tin
’
không˙ ˙`n tai. Trong
tô ˙ tru’ò’ng ho˙ p này, ls d̄ua môt tin nhă´n˙báo lô˜i ra kênh thông˙ báo lô˜˙i tiêu
’ ’
chuâ’n. Tuy ˙nhiên, d̄ô´i vó’i ngu’ò˙’i dùng thì trong tru
˙ òng hop này kênh thông báo lô˜i tiêu chuâ’n
’’ ’
` ’ ’ ˙
không khác gì vó’i d̄âu ra tiêu chuân, bo’i vì chúng ta cũng thâ´y thông báo lô˜i d̄ó trên cu’’a sô’
terminal. Làm viêc vó’i d̄â`u vào và d̄â`u ra tiêu chuâ’n d̄u’o’c minh hoa tô´t nhâ´t qua ví du các
lênh echo và cat. ˙ ˙ ˙ ˙
˙
Tôi nghı̃ ră`ng lò’i gia’i thích sẽ là thù’a thãi (chı’ xin hãy su’’ dung dâ´u ngoăc d̄o’n, nê´u không
˙
kê´t qua’ có thê’ sẽ khác. Nê´u ban d̄oc chú ý thì có thê’ gia’i thích˙tai sao lai khác).
˙ ˙ ˙ ˙
¯Dây chı’ là mô˙t tru’ò’ng ho˙’p riêng cu’a viê˙c chuyê’n hu’ó’ng dũ’ liê˙u d̄â`u vào, mô˙t co’ chê´ râ´t
có ích cu’a hê vo’. Và tâ´t nhiên chúng ta câ`n xem xét kỹ ho’n co’ chê´ này.
˙
3.5 Chuyê’n hu’ó’ng d̄â`u vào/d̄â`u ra, d̄u’ò’ng ´ông và d̄â`u loc
˙
Măc dù, nhu’ d̄ã nói o’’ trên, thông thu’ò’ng d̄â`u vào/d̄â`u ra cu’a môt chu’o’ng trình liên kê´t vó’i
các˙ d̄â`u vào/d̄â`u ra tiêu chuâ’n, trong hê vo’ còn có các môi tru’ò’ng
˙ d̄ăc biêt cho phép chuyê’n
hu’ó’ng d̄â`u vào/d̄â`u ra. ˙ ˙ ˙
Theo lênh này danh sách tâp tin và thu’ muc con cu’a thu’ muc, mà tù’ d̄ó ngu’ò’i dùng
thu’c hiên lê˙ nh ls2 sẽ d̄u’o’c ghi vào
˙ tâp tin /home/maikhai/ls.txt;
˙ ˙ khi này nê´u tâp tin
˙ ˙ ˙ ˙ ˙ ˙
2
thu’ muc hiên thò’i
˙ ˙
32 Bash
ls.txt không tô`n tai, thì nó sẽ d̄u’o’c tao ra; nê´u tâp tin d̄ã có, thì nôi dung cu’a nó sẽ bi
xóa và ghi d̄è bo’’i danh ˙ sách nói trên.˙ Nê´˙u ban không ˙ muô´n xóa nôi dung
˙ cũ mà ghi thêm˙
˙ ˙
dũ’ liêu d̄â`u ra vào cuô´i tâp tin, thì câ`n su’’ dung ký hiêu >> thay cho >. Khi này khoa’ng
tră´ng˙ tru’ó’c và sau các ký ˙hiêu > hay >> không ˙ có ý nghı̃a ˙ và chı’ dùng vói muc d̄ích thuân
’
˙ ’n huóng không chı’ vào tâp tin, mà còn tói d̄â`u˙ vào cu’a mô
tiên, dê˜ nhìn. Ban có thê’ chuyê ˙t
’’ ’
˙ ˙ ˙
câu lênh khác hay tó’i môt thiê´t bi nào d̄ó (ví du, máy in). Ví du, d̄ê’ d̄u’a nôi dung tâp tin ˙
˙
/home/maikhai/ls.txt ˙ vù’a˙tao o’’ trên tó’i cu
˙’ a sô’ terminal thú ˙ ’ su’ dung˙ lênh
˙ hai3 có thê
’ ’ ’
sau: ˙ ˙ ˙
kênh giao tác
maikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2
Nhu’ ban thâ´y, > dùng d̄ê’ chuyê’n hu’ó’ng dũ’ liêu cu’a d̄â`u ra. Chú’c năng tu’o’ng tu’ d̄ô´i vó’i
˙´ tù trong tâp tin ls.txt nhu sau
d̄â`u vào d̄u˙’o’c thu’c hiên bo’’i <. Ví du, có thê’ d̄ê´m sô ’ ’
˙ (chú ý,
d̄ây chı’ là mô˙ t ví˙ du minh
˙ ˙ lênh d̄on gia’n hon):
hoa, trên˙thu’c tê´ thu’ò’ng su’’ dung câu ’ ’
˙ ˙ ˙ ˙ ˙ ˙
kênh giao tác
maikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt
Cách chuyê’n hu’ó’ng này thu’ò’ng d̄u’o’c su’’ dung trong các script, cho các câu lênh mà thu’ò’ng
tiê´p nhân (hay chò’) dũ’ liêu vào tù’ bàn˙ phím.˙Trong script dùng d̄ê’ tu’ d̄ông hóa
˙ môt thao tác
˙ ˙ ˙ ˙ ˙ ghi să˜n
nào d̄ó, có thê’ d̄u’a các thông tin câ`n thiê´t cho câu lênh tù’ tâp tin: trong tâp tin này
nhũ’ng gì câ`n d̄ê’ thu’c hiên lênh d̄ó. Bo’’i vì các ký hiêu˙<, > và
˙ >> làm viêc˙ vói các kênh tiêu
’
chuâ’n (d̄â`u vào hoă˙ c d̄â`˙u ra),
˙ chúng không chı’ d̄uo˙c dùng theo các cách ˙quen thuôc, thuòng
’’ ’’
˙ ’ ´ ˙ ˙
dùng, mà còn có thê theo cách khác, "la măt" ho’n. Ví du, các câu lênh sau là tu’o’ng d̄u’o’ng:
˙ ˙ ˙
kênh giao tác
[user]$ cat > file
[user]$ cat>file
[user]$ >file cat
[user]$ > file cat
Tuy nhiên, tu’ chúng (không có môt lênh nào, tú’c là không có kênh tiêu chuâ’n nào cho
˙ ˙ ˙thê’ d̄uoc su’ dung, nhu thê´ không thê’, ví du, nhâp
’n hu’ó’ng này không
lênh) các ký tu’ chuyê ’’ ’ ’
˙ dòng lênh˙sau:
vào ˙ ˙ ˙ ˙
˙
kênh giao tác
[user]$ file1 > file2
mà thu d̄u’o’c ba’n sao cu’a môt tâp tin nào d̄ó. Nhu’ng d̄iê`u này không làm gia’m giá tri cu’a
co’ chê´ này, bo’˙’i vì các kênh tiêu˙ chuâ ˙ ’n có cho moi câu lênh. Khi này, có thê’ chuyê’n hu˙ óng
’’
không chı’ d̄â`u vào và d̄â`u ra tiêu chuâ’n, mà còn ˙các kênh ˙ khác. Dê’ làm d̄uoc d̄iê`u này, câ`n
¯ ’ ’
´ cu’a kênh muô´n chuyê’n. ¯Dâ`u vào tiêu chuâ˙’n stdin có sô´ 0,
d̄ăt tru’ó’c ký hiêu chuyê’n hu’ó’ng sô
d̄â˙`u ra tiêu chuâ
˙’n stdout - sô´ 1, kênh thông báo lô˜i stderr - sô´ 2. Túc là lênh chuyê’n huóng có
’ ’’
dang d̄â`y d̄u’ nhu’ sau (xin d̄u’o’c nhă´c lai, khoa’ng tră´ng canh > là không ˙nhâ´t thiê´t):
˙ ˙ ˙ ˙
command N > M
3
ban câ`n dùng tô’ ho’p phím <Ctrl>+<Alt>+<F2> d̄ê’ chuyê’n tó’i cu’’a sô’ terminal này và d̄ăng nhâp tru’ó’c
˙ ˙ ˙
3.5 Chuyê’n hu’ó’ng d̄â`u vào/d̄â`u ra, d̄u’ò’ng ´ông và d̄â`u loc 33
˙
Trong d̄ó, N và M - sô´ cu’a kênh tiêu chuâ’n (0, 1, và 2) hoăc tên tâp tin. Trong môt vài
tru’ò’ng ho’p có su’’ dung các ký hiêu <, > và >> mà không chı’ ˙ra sô´ kênh ˙ hay tên tâp tin,˙ vì
˙ ˙ ˙ ˙
vào chô˜ còn thiê´u sẽ d̄ăt, theo măc d̄inh, 1 nê´u dùng >, tú’c là d̄â`u ra tiêu chuâ’n, hoăc 0 nê´u
dùng <, tú’c là d̄â`u vào ˙tiêu chuâ’n. ˙ Nhu
˙ thê´, khi không có sô´ nào chı’ ra, > sẽ d̄uoc biên
’ ’’
˙ dich
là 1 >, còn < sẽ d̄u’o’c biên dich là 0 <. Ngoài viêc chuyê’n hu’ó’ng các kênh tiêu˙ chuâ’n d̄o ˙ n
’
˙ ˙ ˙
gia’n nhu’ vây, còn có kha’ năng không nhũ’ng chuyê’n hu’ó’ng dũ’ liêu vào kênh này hay kênh
khác, mà còn ˙ sao chép nôi dung cu’a các kênh tiêu chuâ’n d̄ó. Ký ˙hiêu & dùng d̄ê’ thuc hiên
’
˙ óc sô´ cu’a kênh sẽ chuyê’n dũ liêu d̄ê´n: ˙
d̄iê`u này, khi d̄ăt nó (&) tru ˙ ˙
’’ ’
˙ ˙
command N > &M
Lênh này có nghı̃a là, d̄â`u ra cu’a kênh vó’i sô´ N d̄u’o’c gu’’i d̄ê´n ca’ d̄â`u ra tiêu chuâ’n, và sao
˙ i kênh có sô´ M. Ví du, d̄ê’ sao chép thông báo lô˜˙i vào d̄â`u ra tiêu chuâ’n, câ`n dùng lênh
chép tó’
2>&1, còn 1>&2 sao chép stdout ˙ vào stderr. Kha’ năng này d̄ăc biêt có ích khi muô´n ghi d̄â ˙ `u
˙ ˙
ra vào tâp tin, vì khi d̄ó chúng ta vù’a có thê’ nhìn thâ´y thông báo trên màn hình, vù’a ghi chúng
vào tâp ˙tin. Ví du, tru’ò’ng ho’p sau thu’ò’ng d̄u’o’c ú’ng dung trong các script chay khi kho’’i d̄ô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
Dòng này có nghı̃a là kê´t qua’ cu’a lênh cat, tú’c là nôi dung tâp tin ls.txt, sẽ d̄u’o’c chuyê’n
d̄ên d̄â`u vào cu’a lênh grep, lênh này˙ sẽ phân chia nô˙i dung nói
´ ˙ trên và chı’ lâ´y˙ ra nhũng
’
˙ ˙ ´ ˙
dòng nào có chú’a tù’ knoppix. ¯Dên lu’o’t mình, kêt qua cua lênh grep d̄u’o’c chuyên tó’i d̄â`u
´ ’ ’ ’
vào cu’a lênh wc -l, mà tính sô´ nhũ’ng ˙ dòng thu d̄uoc. Duò˙ng ô´ng su’ du˙ng d̄ê’ kê´t hop vài
’’ ¯ ’’ ’ ’
˙ ˜ ˙ ´ ’ ˙
chu’o’ng trình nho’ lai vó’i nhau (môi chu’o’ng trình thu’c hiên môt biên d̄ôi xác d̄inh nào d̄ó trên ˙
d̄â`u vào) tao thành˙ môt lênh tô’ng quát, mà kê´t qua’˙ cu’a ˙nó sẽ˙ là môt biê´n d̄ô’i˙ phú’c tap. Câ`n
chú ý ră`ng,˙ hê vo’ goi và ˙ thu˙ c hiên tâ´t ca’ các câu lênh có trong d̄uòng
’
˙ ˙
’ ’ ô´ng cùng môt lúc, chay
mô˜i lênh d̄ó trong˙ ˙ t ba’n ˙sao hê
mô ˙ vo’ riêng. Vì thê´˙ngay khi chuong trình thú nhâ´t bă ˙ ´ t d̄â`u d̄u˙ a
’’ ’ ’
˙ ’ o’ d̄â`u ra, chu˙ong trình tiê´˙ p theo bă´t d̄â`u xu’ lý kê´t qua’ này. Cũng y nhu vây, các lênh
kê´t qua ’ ’’ ’ ’
tiê´p theo thu’c hiên các công viêc cu’a mình: chò’ dũ’ liêu tù’ lênh tru’ó’c và d̄u’a kê´t qua ˙ ’ cho lê˙ nh
tiê´p theo, giô ˙´ ng nhu
˙ môt dây chuyê ˙ `n sa’n xuâ´t. Nê´u nhu ˙ muô´˙ n môt lênh nào d̄ó kê´t thúc hoàn ˙
’ ’
toàn, tru’ó’c khi thu’c hiê ˙ n lênh tiê´p theo, ban có thê’ sue’ dung trên ˙ mô
˙ t dòng ca’ ký hiêu dây
’
chuyê`n |, cũng nhu’ dâ´u châ´p phâ’y ;. Tru’ó’c mô˜i dâ´u châ´m phâ’y, hê˙ vo’ sẽ dù’ng lai và
˙ ˙ ˙ ˙ ˙ ˙ chò
’
cho d̄ê´n khi thu’c hiên xong tâ´t ca’ các câu lênh tru’ó’c cu’a d̄u’ò’ng ô´ng. ˙Trang thái thoát ˙ ra (giá
˙ ˙ ˙ ˙
34 Bash
tri lôgíc, mà d̄u’o’c tra’ lai sau khi thu’c hiên xong chu’o’ng trình) cu’a môt d̄u’ò’ng ô´ng sẽ trùng
vó˙’i trang thái thoát
˙ ra cu ˙’ a câu lênh sau
˙ cùng˙ trong d̄uòng ô´ng. O
’’ ’’ tru’ó’c˙câu lênh d̄â`u tiên cu’a
d̄u’ò’ng ô´ng có thê’ d̄ăt ký hiêu "!", khi d̄ó trang thái thoát ra cu’a d̄u’ò’ng ô´ng˙ sẽ là phu’ d̄inh
˙ ˙
lôgíc cu’a trang thát ˙thoát ra ˙cu’a lênh cuô´i cùng ˙ trong d̄uòng ô´ng. Túc là nê´u trang thái thoát
’’ ’
˙
ra cu’a lênh ˙cuô´i cùng bă`ng 0 thì tra ˙ ng thái thoát ra cu’a d̄uòng ô´ng sẽ bă`ng 1 và ˙nguoc lai. Hê
’’ ’’
vo’ chò’ cho tâ´t ca’ các câu lênh kê´t ˙thúc rô`i mó’i xác d̄inh và d̄u’a ra giá tri này.
˙ ˙ ˙ ˙
˙ ˙ ˙
d̄u’o’c xác d̄inh hay d̄u’o’c d̄ăt ra, nê´u ngu’ò’i dùng gă´n cho nó môt giá tri. Giá tri có thê’ là môt
dòng˙ trô´ng˙rô˜ng. Dê’ nhìn
˙ thâ ˙’ dung ˙ký tu $ o˙’ truóc tên cu’˙a
˙ ´ y giá tri cu’a tham biê´n, nguòi ta su
¯ ’’ ’ ’ ’ ’’
nó. Nhu’ vây, lênh: ˙ ˙ ˙
˙ ˙
kênh giao tác
maikhai@fpt:/sm$ echo parameter
hiê’n thi giá tri cu’a tham biê´n parameter (tâ´t nhiên nê´u nhu’ tham biê´n d̄ó du’o’c xác d̄inh).
˙ ˙ ˙ ˙
Trong d̄ó, name - tên cu’a biê´n, còn value - giá tri muô´n gán cho biê´n (có thê’ là môt
dòng trô´ng). Tên cu’a biê´n môi tru’ò’ng chı’ có thê’ bao gô`m˙ các chũ’ sô´, chũ’ cái và không d̄u’o˙’c
bă´t d̄â`u bo’’i môt chũ’ sô´. (Tin ră`ng sau khi d̄oc d̄oan viê´t vê` tham biê´n vi trí thì các ban d̄ã hiê˙’u
tai sao môt biê˙´ n môi tru’ò’ng không thê’ bă´t˙d̄â`u bo ˙ ’ i môt chũ sô´.) Giá tri
’ ’
˙ có thê’ là bâ
˙´ t kỳ môt
˙ ˙ ˙ ˙
dòng văn ba’n nào. Nê´u giá tri có chú’a nhũ’ng ký tu’ d̄ăc biêt, thì câ`n d̄ăt nó (giá tri) vào dâ´˙u
ngoăc. Giá tri tâ´t nhiên sẽ không ˙ chúa các dâ´u ngoă˙c này.˙ Nê ˙´ u môt biê´n˙ môi truòng˙ d̄uoc xác
’ ’ ’’
d̄inh, thì cũng có thê’ bi xóa bo’ bă`ng lênh nôi trú unset. Tâp ho’p˙tâ´t ca’ các biê´n này cùng
˙ ˙ ˙ ˙ vói
’
˙ ˙ ˙ ˙ ˙ ˙
’
các giá tri d̄ã gán cho chúng goi là môi tru’ò’ng (enviroment) cua hê vo. Có thê xem nó (môi’ ’
tru’ò’ng) nhò˙ lênh set khi không ˙ có tham sô´ (có thê’ câ`n dùng d̄uò˙ng ô´ng ’set | less",
’ ’’
´ ˙
nêu môi tru’ò’ng ló’n, có nhiêu biên). ¯Dê xem giá tri cu’a môt biên môi tru’ò’ng cu thê’, thay vì
` ´ ’ ´
dùng lênh set (khi này câ`n tìm trong kê´t qua’ cu’a˙nó biê´n˙ muô´n xem), có thê’ ˙su’’ dung lênh
echo:˙ ˙ ˙
kênh giao tác
[user]$ echo $name
36 Bash
Trong d̄ó, câ`n thay name bo’’i tên biê´n (nhu’ vây, trong tru’ò’ng ho’p này, ban lai câ`n pha’i
biêt tên cu’a biê´n muô´n xem). Trong sô´ các biê´n, mà
´ ˙ ban sẽ thâ´y trong
˙ kê´t qua’˙cu’a˙ lênh set,
có nhũ’ng biê´n râ´t thú vi. Xin hãy chú ý d̄ê´n, ví du, biê´n˙ RANDOM. Nê´u thu’’ chay vài ˙ lâ`n liên
tiê´p câu lênh sau: ˙ ˙ ˙
˙
kênh giao tác
maikhai@fpt:/sw$ echo $RANDOM
thì mô˜i lâ`n ban sẽ nhân d̄u’o’c môt giá tri mó’i. Nguyên nhân là vì biê´n này tra’ lai môt giá
˙
tri ngâ˜u nhiên4 trong ˙’ ng 0˙- 32 ˙768. ˙
khoa ˙ ˙
˙
kho’’i d̄ông (hay script d̄ăng nhâp) xác d̄inh lai biê´n này. Nói chung thì trong bash có tâ´t ca’
bô´n dâ´˙u nhă´c, d̄u’o’c su’’ dung trong
˙ các tru ˙ òng˙ hop khác nhau. Biê´n PS1 d̄ua ra dang cu’a dâ´u
’’ ’ ’
˙ ˙
nhă´c khi hê vo’ chò’ nhâp lênh. Dâ´u nhă´c thú’ hai, ˙ xác d̄inh bo’i biê´n PS2, xuâ´t hiê˙n khi hê vo’
’
chò’ ngu’ò’i ˙dùng nhâp thêm ˙ ˙ môt vài dũ liêu câ`n thiê´t nào
’
˙ d̄ó d̄ê’ có thê’ tiê´p tuc cha˙ y câu lê
˙ nh
(chu’o’ng trình) d̄ã go ˙ i. Theo mă˙ c d̄inh biê
˙´ n PS2 có giá tri ">". Râ´t có thê’ ba ˙ n d̄ã˙ nhìn thâ
˙´ y
˙ ˙ ˙ ˙ ˙
dâ´u nhă´c này, khi chay lênh cat d̄ê’ d̄u’a dũ’ liêu vào tù’ bàn phím vào tâp tin. Môt ví du khác
- lênh ftp, sau khi cha ˙ có dang nhu d̄ã nói. Dâ
˙ y˙ lênh này dâ´u nhă´c sẽ ˙´ u nhă´c, ˙xác d̄inh
˙ bo’i
’ ’
biê´˙n PS3, su’’ dung trong ˙ lênh
˙ select. Dâ´u nhă´c, xác ˙ d̄inh bo’i biê´n PS4, d̄uoc d̄ua ra
’ ’’ ’
˙ truóc
’’
˙
mô˜i câu lênh, trong lúc bash˙ theo dõi quá trình thu’c hiê˙n. Giá tri theo măc d̄i ˙ nh - "+". Nê´u
˙ ´ n, ban có thê’ thay d̄ô’i các biê´n PS1 và ˙ PS2.
˙ Khi này˙ có thê’ ˙su’ du ˙
có mong muô ’ ng bâ´t kỳ ký
tu’ nào nhâp tù’ bàn phím, cũng nhu’ môt vài ký tu’ chuyên dùng d̄ê’ xác d̄inh da˙ ng dâ´u nhă´c
˙
˙ trong ˙ba’ng 3.3 (chı’ d̄ua ra môt vài trong
nhu ˙ ˙
sô´ chúng làm ví du, danh sách˙ d̄â`y ˙d̄u’ xem trong
’ ’
trang man cu’a bash - gõ lênh "man ˙ bash"). ˙
˙
thì trong dâ´u nhă´c sẽ có dâ´u mo’’ ngoăc vuông, tên ngu’ò’i dùng, ký hiêu , tên máy, khoa’ng
tră´ng, tên cu’a thu’ muc hiên thò’i (không˙ có d̄u’ò’ng dâ˜n), dâ´u d̄óng ngoă˙c vuông, và ký hiêu
$ (nê´u trên hê vo’ d̄ang˙ làm ˙ viêc nguòi dùng bình thuòng) hay #(nê´u hê˙ vo’ chay duói ngu˙òi
’’ ’’ ’’ ’’
dùng root). ˙ ˙ ˙ ˙
Khi tìm kiê´m, hê vo’ "luc loi" các thu’ muc theo d̄úng thú’ tu’ d̄ã liêt kê trong biê´n PATH.
Môt chú ý nho’, có thê ˙ ’ d̄ua˙ vào˙ danh sách này
˙ thu muc hiên thò ˙ i, khi˙ thêm vào biê´n PATH
’ ’ ’
˙ ´ ´ ` ˙ ˙
môt dâu châm (.). Tuy nhiên, d̄ây là d̄iêu không khuyên làm vó’i lý do ba’o mât: ngu’ò’i có ác
˙ thê’ d̄ăt vào thu muc dùng chung môt chuong trình nào d̄ó, có cùng tên vó˙i môt trong sô´
ý có ’ ’’ ’
nhũ’ng câu lênh thu’ò’ng dùng bo’’i root, nhu’ng thu’c hiên nhũ’ng chú’c năng khác hoàn˙ toàn (d̄ăc
˙ ˙ ˙
biêt nguy hiê˙’m nê´u thu muc hiên thòi d̄úng o’ d̄â˙`u danh
˙ sách tìm kiê´m). ˙
’ ’ ’ ’
˙ ˙ ˙
câ`n gõ:
3.7 Khai triê’n biê’u thú’c 39
Trong tru’ò’ng ho’p này, tâ´t ca’ các chu’o’ng trình chay tù’ hê vo’ (kê’ ca’ ba’n sao thú’ hai cu’a
chính hê vo’) sẽ có ˙quyê`n truy câp tó’i các biê´n d̄u’o’c gán
˙ nhu˙ vây, túc là su’ dung giá tri cu’a
’ ’ ’
˙ tên.
chúng qua ˙ ˙ ˙ ˙ ˙
• Khai triê’n các mâ˜u tên tâp tin và thu’ muc (pathname expansion).
˙ ˙
Các thao tác này d̄u’o’c thu’c hiên theo d̄úng thú’ tu’ liêt kê trên. Chúng ta sẽ xem xét chúng
theo tú’ tu’ này. ˙ ˙ ˙ ˙ ˙
˙
Trong tru’ò’ng ho’p d̄â`u, trong thu’ muc /usr/src/unikey/ sẽ tao ra các thu’ muc con
old,new,dist, ˙và bugs. Trong tru’ò˙’ng ho’p thú’ hai, ngu’ò’i dùng so’’ hũ
˙ u cu’a các tâp tin
’
˙ sau
sẽ thay d̄ô’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
Tú’c là vó’i mô˜i căp dâ´u ngoăc sẽ tao ra vài dòng riêng rẽ (sô´ nhũ’ng dòng này bă`ng sô´ tù’
năng trong dâ´u ngoă˙c) bă`ng cách
` ˙ ghi thêm
˙ vào tru’ó’c mô˜i tù’ trong ngoăc nhũ’ng gì d̄ú’ng tru’ó’c
˙
dâ´u ngoăc, và ghi thêm vào sau mô˜i tù’ này nhũ’ng gì d̄ú’ng sau dâ´u ngoă ˙ c. Môt ví du khác:
˙
dòng a{d,c,b}e khi khai triê’n sẽ thu d̄u’o’c ba tù’ "ade ace abe". Khai ˙ triê
˙ ’n dâ´u˙ ngoăc
d̄u’o’c thu’c hiên tru’ó’c các dang khai triê’n khác trong dòng lênh, ho’n nũ’a tâ´t ca’ các ký tu’ d̄ă˙ c
˙
biê˙t có trong
˙ ˙dòng lênh, kê’˙ca’ nhũng ký tu nă`m trong dâ´u ngoă
’ ’
˙ c, sẽ d̄uoc giũ không thay
’’ ’
˙ d̄ô
˙’i
˙ ˙ ˙
(chúng sẽ d̄u’o’c biên dich o’’ các bu’ó’c phía sau). ˙ ˙
˙ ˙
cho kê´t qua’ bă`ng "17". Nê´u biê’u thú’c không chính xác, bash sẽ d̄u’a ra thông báo lô˜i.
3.7.7 Khai triê’n các mâ˜u tên tâp tin và thu’ muc (Pathname Expansion)
˙ ˙
Phép thê´ tên d̄u’ò’ng dâ˜n và tâp tin (Pathname expansion) su’’ dung d̄ê’ chı’ nhò’ môt mâ˜u nho’
gon mà có thê’ chı’ ra vài tâp tin˙ (hay thu muc), tuong úng vói mâ ˙ ˙
’ ’’ ’ ’ ˜u này. Sau khi phân chia tù’,
và˙ nê´u nhu’ không d̄u’a ra tùy
˙ chon -f, thì bash ˙ sẽ tìm kiê´m trong tù’ng tù’ cu’a dòng lênh các
˙
ký tu’ *, ?, và [. Nê´u tìm thâ´y tù’ vó’i môt hay vài ký tu’ nhu’ vây, thì tù’ này sẽ d̄u’˙o’c xem
nhu’˙môt mâ˜u, và câ`n thay thê´ bo’’i các tù’ trong˙ danh sách d̄u ˙ òng dâ˜˙n, tuong úng vói mâ˙˜u này.
’’ ’’ ’ ’
Nê´u nhu˙ không tìm thâ´y tên tuong úng vói mâ˜u, và biê´n nullglob không d̄uoc d̄ua ra, thì tù
’ ’’ ’ ’ ’’ ’ ’
sẽ không thay d̄ô’i, tú’c là các ký tu’ d̄ăc biêt bi mâ´t giá tri và hiê’u nhu’ các ký˙tu’ thu’ò’ng. Nê´u
nhu’ biê´n này d̄u’o’c xác d̄inh, mà d̄u ˙ ò˙ng dâ ˙˜n tu
˙ ong úng vó
˙ i mâ˜u không tìm thâ´˙y, thì tù sẽ bi
’’ ’’ ’ ’ ’
xóa kho’i dòng lê˙nh. Các ˙ký tu’ dùng d̄ê’ tao mâ˜u có các giá tri trong ba’ng 3.4 ˙
˙ ˙ ˙ ˙
42 Bash
Mâ˜u tên tâp tin râ´t thu’ò’ng xuyên su’’ dung trong dòng lênh có chú’a ls. Hãy tu’o’’ng tu’o’ng
là ban muô´n xem ˙ ˙ c, trong d̄ó có ˙chúa môt sô´ luong lón các tâp˙tin
thông tin cu’a môt thu’ mu ’ ’’ ’
’ ˙ ’ ˙ ˙ ˙ ˙ ’ ˙
d̄u các dang, ví du, tâp tin hình anh, phim vó’i dang gif, jpeg, avi, v.v. . . . ¯Dê thu d̄u’o’c thông
tin chı’ cu’˙ a tâp tin˙dang˙ jpeg, có thê’ dùng câu lênh
˙ ˙
˙ ˙ ˙
kênh giao tác
[user]$ ls *.jpg
Nê´u trong thu’ muc có nhiê`u tâp tin, mà tên cu’a chúng là các sô´ gô`m bô´n chũ’ sô´ (thu’ muc
/proc là môt ví du+),˙ thì lênh sau
˙ chı’ d̄ua ra danh sách các tâp tin có sô´ tù 0500 d̄ê´n 0999: ˙
’ ’
˙ ˙ ˙ ˙
kênh giao tác
[user]$ ls -l 0[5-9]??
pha’y và kê´t thúc bo’’i môt dâ´u châ´m phâ’y hay ký tu’ dòng mó’i. Ngoài ra, các chuô˜i này có thê’
d̄u’o’c d̄u’a vào dâ´u ngoă˙c nhon: list. Toán tu’’ if kiê˙’m tra giá tri d̄u’o’c tra’ lai bo’’i các câu lênh
˙
tù’ list1. Nê´u trong danh˙ sách ˙ tri
˙ có vài câu lênh, thì kiê’m tra giá ˙ d̄uoc ˙tra’ lai bo’i câu lê˙ nh
’’ ’
´ ’ ´ ˙
` ˙ ˙
cuôi cùng cua danh sách. Nêu giá tri này băng 0, thì sẽ thu’c hiên các lênh tù’ list2; còn˙ ˙
nê´u giá tri này khác không, thì sẽ thu ˙ c hiên nhũng lênh tù ˙list3.
˙ Giá˙ tri d̄uoc tra’ lai bo’i
’ ’ ’ ’’ ’
toán tu’’ if nhu’ vây, trùng vó’i giá tri mà chuô˜i lênh thu’c hiên (list2 hoăc˙ list3)
˙ ˙ ˙ ˙ ˙ ˙ a ra.
d̄u’
Dang d̄â`y d̄u’ cu’a˙ lênh if nhu’ sau: ˙ ˙ ˙ ˙ ˙
˙ if list then list ˙ [ elif list then list ] ... [ else list ] fi
(o’’ d̄ây dâ´u ngoăc vuông chı’ có nghı̃a là, nhũ’ng gì nă`m trong nó, ngoăc vuông, không nhâ´t
thiê´t pha’i có). Biê’u˙ thú’c d̄ú’ng sau if hay elif thu’ò’ng là câu lênh test, ˙ mà có thê’ d̄u’o’c
’ ´ ˙ ’
biêu thi bo’’i dâu ngoăc vuông [ ]. Lênh test thu’c hiên phép tính môt biêu thú’c nào d̄ó, và ˙
˙ ’u thúc là d̄úng,
˙ tri 0, nê´u biê ˙ và 1 trong˙ truò˙ng hop nguoc la ˙
tra’ lai giá ’ ’’ ’ ’ ’ i. Biê’u thú’c d̄u’o’c d̄u’a
˙ ong trình
tó’i chu ˙ test nhu’ môt tham sô´ cu’a chu’o’ng trình. ˙Thay vì˙ gõ˙ ˙
’’
test expression ˙
có thê’ d̄u’a biê’u thú’c expression vào ngoăc vuông:
[ expression ] ˙
Câ`n chú ý ră`ng, test và [ d̄ó là hai tên cu’a cu’a cùng môt chu’o’ng trình, chú’ không pha’i
là môt phép biê´n hóa thâ`n thông nào d̄ó cu’a hê vo’ bash (chı’ ˙là cú pháp cu’a [ d̄òi ho’i pha’i có
˙
dâ´u d̄óng ˙ ˜ cu’a test trong câ´u trúc if có thê’ su’ dung
ngoăc). Và cũng câ`n chú ý ră`ng o’’ chô ’
bâ´t kỳ chu’o’ng˙ trình nào. ¯Dê’ kê´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
Vê` toán tu’’ test (hay [...]) câ`n d̄i sâu ho’n.
• -f file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và là mô˙t tâ˙p tin thông thu’ò’ng.
• -g file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và d̄u’o˙’c d̄ă˙t bit thay d̄ô’i nhóm.
• -h file hay -L file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và là liên kê´t mê`m (liên kê´t tu’o˙’ng tru’ng).
• -k file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và d̄u’o˙’c d̄ă˙t bit sticky.
• -p file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và là tên cu’a mô˙t ô´ng (kênh FIFO).
• -p file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và là tên cu’a mô˙t ô´ng (kênh FIFO).
• -r file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và có quyê`n d̄o˙c.
• -s file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và kích thu’ó’c ló’n ho’n không.
• -t fd
¯Dúng nê´u bô˙ mô ta’ cu’a tâ˙p tin (fd) mo’’ và chı’ lên terminal.
• -u file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và d̄u’o˙’c d̄ă˙t bit thay d̄ô’i ngu’ò’i dùng.
• -w file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và có quyê`n ghi.
• -x file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i và có quyê`n thu˙’c thi.
• -0 file
¯Dúng, nê´u tâ˙p tin có tên file và chu’ so’’ hũ’u cu’a nó là ngu’ò’i dùng mà ID có hiê˙u lu˙’c
chı’ d̄ê´n.
• -G file
¯Dúng, nê´u tâ˙p tin có tên file tô`n ta˙i và thuô˙c vê` nhóm, xác d̄i˙nh bo’’i ID nhóm có hiê˙u
lu’c.
˙
• -S file
¯Dúng, nê´u tâ˙p tin có tên file tô`n ta˙i và là socket.
• -N file
¯Dúng, nê´u tâ˙p tin có tên file tô`n ta˙i và thay d̄ô’i tù’ lâ`n d̄u’o˙’c d̄o˙c cuô´i cùng.
• file1 -nt file2
¯Dúng, nê´u tâ˙p tin file1 có thò’i gian su’’a d̄ô’i muô˙n ho’n file2.
3.8 Shell - môt ngôn ngũ’ lâp trình 45
˙ ˙
• -o optname
¯Dúng, nê´u tùy cho˙n optname cu’a hê˙ vo’ d̄u’o˙’c kích hoa˙t. Chi tiê´t xin xem trên trang
man bash.
• -z string
¯Dúng, nê´u d̄ô˙ dài cu’a chuô˜i string bă`ng không.
• -n string
¯Dúng, nê´u d̄ô˙ dài cu’a chuô˜i khác không.
• string1 == string2
¯Dúng, nê´u hai chuô˜i trùng nhau. Có thê’ thay hai == bă`ng mô˙t =.
Tù’ các biê’u thú’c d̄iê`u kiên co’ ba’n này có thê’ xây du’ng các biê’u thú’c phú’c tap theo ý
muô´n nhò’ các phép lôgíc thông ˙ thuòng PHU ’ DINH, VÀ (cô˙ ng) và HOĂC: ˙
’’ ¯ ˙ ˙ ˙
• !(expression)
Phép phu’ d̄inh. ¯Dúng, nê´u biê’u thú’c sai.
˙
• expression1 -a expression2
Phép công lôgic AND. ¯Dúng nê´u ca’ hai biê’u thú’c d̄ê`u d̄úng.
˙
• expression1 -o expression2
Phép lôgíc hoăc OR. ¯Dúng nê´u môt trong hai biê’u thú’c d̄úng.
˙ ˙
46 Bash
Nê´u biê´n sô´ (UTC) nhân giá tri yes hoăc true, thì sẽ thu’c hiên căp lênh thú’ nhâ´t, nhân
giá tri no hoăc false - că ˙ p thú hai.
˙ ˙ ˙ ˙ ˙ ˙ ˙
’
˙ ˙ ˙
Ghi d̄oan trên vào môt tâp tin (ví du, select.sh), thay d̄ô’i d̄ê’ tâp tin thành kha’ thi (ví
du, chmod˙ 755 select.sh),
˙ ˙ ˙ y (./select.sh). Trên màn
và cha ˙ hình sẽ hiên ra câu
˙
ho’i sau: ˙ ˙
kênh giao tác
Ban thích dùng OS nào?
˙
1) Linux 3) Free BSD 5) Solaris 7) Other
2) Gnu Hurd 4) MacOSX 6) QNX
#?
Hãy nhâ´n môt trong 7 sô´ d̄u’a ra (tù’ 1 d̄ê´n 7). Nê´u ban nhâp 4 (nhâ´n ca’ <Enter>), thì sẽ
˙
thâ´y thông báo sau: ˙ ˙
Có thê’ gõ ba dòng này trên môt dòng lênh, kê´t qua’ thu d̄u’o’c tu’o’ng tu’ vó’i script. Dang
tô’ng quát cu’a toán tu’’ for nhu’ sau:˙ ˙ ˙ ˙ ˙
for name [ in word; ] do list ; done
¯Dâ`u tiên cũng xa’y ra su˙’ khai triê’n tù’ word theo quy luâ˙t khai triê’n biê’u thú’c (xem trên).
Sau d̄ó biê´n name lâ`n lu’o’t d̄u’o’c gán các giá tri thu d̄u’o’c tù’ su’ khai triê`n này, và thu’c hiên
danh sách lênh list trong ˙ mô˜˙i lâ`n nhu vây. Nê´˙u không˙ có "in
˙ word", thì danh sách ˙ lênh
˙
’
˙
list d̄u’o’c thu’c hiên môt lâ`n cho mô˜i tham biê ˙ ´ n vi trí d̄ã d̄u’a ra. Trên Linux có ˙
˙ ˙ ˙ ˙ ˙
chu’o’ng trình seq, tiê´p nhân hai sô´ nguyên làm tham sô´, và d̄u’a ra chuô˜i tâ´t ca’ các sô´ nă`m
giũ’a hai sô´ này (công thêm˙ ca’ chúng). Nhò’ câu lênh này có thê’ su’’ dung for cu’a bash làm
viêc nhu’ toán tu’’ for˙ trong các ngôn ngũ lâp trình ˙ thông thuòng. Dê˙’ làm d̄uoc d̄iê`u này chı’
’ ’’ ¯ ’’
câ`˙n viê´t vòng lăp for nhu’ sau: ˙ ˙
˙
kênh giao tác
for a in $( seq 1 6 ) ; do
cat fu$a
done
Câu lênh (script) này d̄u’a ra màn hình nôi dung cu’a 10 tâp tin (nê´u có): "fu1", ..., "fu10".
˙ ˙ ˙
48 Bash
Chu’o’ng trình (script) trên sẽ theo dõi và ghi lai nôi dung cu’a thu’ muc directory theo
tù’ng phút nê´u thu’ muc còn tô`n tai. Toán tu’’ until ˙ tu˙ong tu nhu toán tu’˙ while:
’’ ’ ’ ’
˙ ˙ ˙
until list1 do list2 done
¯ iê’m khác biê˙t nă`m o’’ chô˜, su’’ du˙ng giá tri˙ phu’ d̄i˙nh cu’a d̄iê`u kiê˙n list1, tú’c là list2
D
thu’c hiên, nê´u câu lênh cuô´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 sô
Cú pháp Hê vo’ bash cho phép ngu’ò’i dùng tao các hàm sô´ cho mình. Hàm sô´ làm viêc và
d̄u’o’c su’’ dung˙ giô´ng nhu’ các câu lênh thông thu˙’ò’ng cu’a hê vo’, tú’c là chúng ta có thê’ tu˙’ tao
các˙ câu lênh ˙ mói. Hàm sô´ có câ´u trúc
’
˙ nhu sau:
’
˙ ˙ ˙
˙
function name () { list }
Ho’n nũ’a tù’ function không nhâ´t thiê´t pha’i có, name xác d̄inh tên cu’a hàm (dùng d̄ê’
goi hàm), còn phâ`n thâm cu’a hàm sô´ tao bo’’i danh sách các câu lênh˙ list, nă`m giũ’a { và }.
˙ câu lênh này sẽ d̄uoc thuc hiên mô
Các ˙˜i khi tên name d̄uoc goi˙ (giô´ng nhu môt lênh thông
’’ ’ ’’ ’
˙ `n chú ý ră`ng˙ hàm˙ có thê
thu’ò’ng). Câ ˙ ’ là d̄ê qui, túc là goi hàm
˙ sô´˙ o’ ngay trong phâ
˙ `n˙ thân cu’a
’ ’
˙ ˙
nó. Hàm sô´ thu’c hiên trong pham vi hê vo’ hiên thò’i: không có tiê´n trình mó’i nào d̄u’o’c chay
khi biên dich hàm ˙ sô˙´ (khác vói˙viêc cha˙ y script).
˙ ˙ ˙
’
˙ ˙ ˙
3.8.8 ´
Tham sô
Khi hàm sô´ d̄u’o’c goi d̄ê’ thu’c hiên, các tham sô´ cu’a hàm sẽ tro’’ thành các tham biê´n vi trí
˙ ˙ xem ˙trên)˙trong thòi gian thuc hiên hàm này. Chúng d̄uoc d̄ăt các˙tên
(positional parameters, ’ ’ ’’
nhu’ $n, trong d̄ó n là sô cu’a tham sô mà chúng ta ˙muô´n˙ su’’ dung. Viêc d̄ánh ˙sô´ bă
´ ´ ˙´ t d̄â`u tù
’
1, nhu’ vây $1 là tham sô´ d̄â`u tiên. Cũng có thê’ su’’ dung tâ´t ca’ các ˙ tham ˙ sô´ môt lúc nhò $*,
’
và d̄u’a ra˙ sô´ thú’ tu’ cu’a tham sô´ nhò’ $# Tham sô´ vi ˙trí sô´ 0 không thay d̄ô’i. Trong ˙ khi thu’c
hiên nê´u găp câu lê ˙ nh nôi trú return (trong phâ`n ˙thâm cu’a hàm), thì hàm sô´ sẽ bi dùng la ˙i
’
và˙quyê`n d̄iê
˙ `u khiê˙’n d̄uo˙ c trao cho câu lênh d̄úng sau hàm. Khi thuc hiên xong hàm
’’ ’ ’
˙ sô´, các ˙
˙ ˙ ˙ ˙
tham biê´n vi trí và tham biê´n d̄âc biêt # sẽ d̄u’oc tra’ lai các giá tri mà chúng có tru’ó’c khi chay
hàm. Biê ´ n˙ nôi bô (local) ˙ ˙ ˙ ˙ ˙ ˙
Nê´u muô´n tao ˙môt ˙tham biê´n d̄ia phu’o’ng, có thê’ su’’ dung tù’ khóa local. Cú pháp d̄u’a ra
biê´n d̄ia phu˙’o’ng giô
˙ ´ ng hêt các tham
˙ biê´n khác, chı’ có˙ d̄iê`u câ`n d̄ú’ng sau tù’ khóa local:
˙ ˙
3.9 Script cu’a hê vo’ và lênh source 49
˙ ˙
local name=value. Du’ó’i d̄ây là môt ví du hàm sô´, thu’c hiên công viêc cu’a lênh seq d̄ã
nhă´c d̄ê´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
}
Câ`n chú ý d̄ê´n tùy chon -n cu’a echo, nó (tùy chon) hu’y bo’ viêc tao dòng mó’i. Măc dù
tùy chon này không có nhiê ˙ `u ý nghı̃a vói muc d̄ích chúng
˙ ta muô´n o’˙ d̄ây, ˙ ích
˙ nhung sẽ râ´t có
’ ’ ’
˙
trong các hàm sô´ vó’i muc d̄ích khác. Hàm sô ˙´ tính giai thù’a fact Môt ví du khác:
˙ ˙ ˙
kênh giao tác
fact()
{
if [ $1 = 0 ]; then
echo 1;
else
{
echo $(( $1 * $( fact $(( $1 -- 1 )) ) ))
};
fi
}
¯Dây là hàm sô´ giai thù’a, mô˙t ví du˙ cu’a hàm d̄ê˙ qui. Hãy chú ý d̄ê´n su˙’ khai triê’n sô´ ho˙c,
và phép thê´ các câu lênh.
˙
câu lênh o’’ trên), thì trong thò’i gian thu’c hiên script chúng sẽ thành các tham biê´n vi trí. Nê´u
không ˙ có tham sô´, thì tham biê´n vi trí˙không ˙ thay d̄ô’i. Giá tri (trang thái), mà lênh ˙source
tra’ lai, trùng vó’i giá tri, tra’ lai bo’’i câu lênh cuô´i cùng trong ˙script.
˙ ˙ Nê´u không ˙câu lênh nào
d̄u’o’c˙ thu’c hiên, hoăc không
˙ ˙ thâ´y tâp˙ tin filename, thì trang thái thoát bă`ng 0. ˙
tìm
˙ ˙ ˙ ˙ ˙ ˙