You are on page 1of 55

Linux cho ngu’ò’i dùng

Tác gia’: Kostromin V. A.


Dich bo’’i: Phan Vı̃nh Thinh
˙ ˙
Muc luc
˙ ˙

1 HD¯ H Linux: lich su’’ và các ba’n phân phô ´i 2


˙
2 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows 3
˙
2.1 Chuâ’n bi cài d̄ăt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
˙ ˙
2.2 Phòng xa và nhũ’ng lò’i khuyên . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Phân vùng trên d̄ı̃a và quá trình kho’’i d̄ông . . . . . . . . . . . . . . . . . . 6
˙
2.3.1 Thê´ nào là câ´u trúc "hình hoc cu’a d̄ı̃a" . . . . . . . . . . . . . . . . 6
˙
2.3.2 Phân vùng và ba’ng phân vùng cu’a d̄ı̃a . . . . . . . . . . . . . . . . 7
2.3.3 Quá trình kho’’i d̄ông HD ¯ H công ty Microsoft . . . . . . . . . . . . 8
´ ` ˙
2.3.4 Vân d̄ê vó’i các d̄ı̃a ló’n . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Lu’a chon trình kho’’i d̄ông . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
˙ ˙ ˙
2.4.1 Trình kho’’i d̄ông LILO cu’a HD ¯ H Linux . . . . . . . . . . . . . . . 11
˙

2.4.2 Các trình kho’i d̄ông khác . . . . . . . . . . . . . . . . . . . . . . . 13
˙
2.4.3 Các phu’o’ng án kho’’i d̄ông . . . . . . . . . . . . . . . . . . . . . . 14
˙
2.5 Chuâ’n bi các phân vùng trên d̄ı̃a . . . . . . . . . . . . . . . . . . . . . . . 14
˙
2.5.1 Lò’i khuyên khi tao phân vùng . . . . . . . . . . . . . . . . . . . . 14
˙
2.5.2 Chu’o’ng trình d̄ê’ phân chia ô’ d̄ı̃a . . . . . . . . . . . . . . . . . . . 17
2.6 Windows NT và Linux: kho’’i d̄ông qua OS Loader cu’a NT . . . . . . . . . 17
˙
2.7 Su’’ dung trình kho’’i d̄ông LILO . . . . . . . . . . . . . . . . . . . . . . . . 20
˙ ˙
2.7.1 Cài d̄ăt và câ´u hình LILO . . . . . . . . . . . . . . . . . . . . . . . 20
˙
2.7.2 Cài d̄ăt các hê d̄iê`u hành khác sau Linux . . . . . . . . . . . . . . . 23
˙ ˙
2.7.3 Chuyê’n thu’ muc /boot lên phân vùng DOS . . . . . . . . . . . . . 23
˙
2.8 Kho’’i d̄ông Linux tù’ MS-DOS bă`ng loadlin.exe . . . . . . . . . . . . . . . 24
˙
3 Bash 27
3.1 Hê vo’ là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
˙
3.2 Các ký tu’ d̄ăc biêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
˙ ˙ ˙
3.3 Thu’c thi các câu lênh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
˙ ˙
3.3.1 Thao tác ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2 Thao tác & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.3 Thao tác && và || . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 ¯Dâ`u vào/d̄â`u ra tiêu chuâ’n . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.1 Dòng dũ’ liêu vào-ra . . . . . . . . . . . . . . . . . . . . . . . . . 30
˙
3.4.2 Lênh echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
˙
3.4.3 Lênh cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
˙
3.5 Chuyê’n hu’ó’ng d̄â`u vào/d̄â`u ra, d̄u’ò’ng ô´ng và d̄â`u loc . . . . . . . . . . . . 31
˙
3.5.1 Su’’ dung >, < và >> . . . . . . . . . . . . . . . . . . . . . . . . . . 31
˙
MUC LUC iii
˙ ˙

3.5.2 Su’’ dung | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33


3.5.3 ¯Dâ`u ˙loc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Tham biê´n và˙các biê´n sô´. Môi tru’ò’ng cu’a hê vo’ . . . . . . . . . . . . . . . 34
3.6.1 Các dang tham biê´n khác nhau . . .˙ . . . . . . . . . . . . . . . . . 35
3.6.2 Dâ´u nhă ˙ ´ c cu’a hê vo’ . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6.3 Biê´n môi tru’ò’ng˙ PATH . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.4 Biê´n môi tru’ò’ng IFS . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.5 Thu’ muc hiên thò’i và thu’ muc cá nhân . . . . . . . . . . . . . . . . 38
3.6.6 Câu lênh ˙ export
˙ . . . . . . ˙. . . . . . . . . . . . . . . . . . . . . . 38
3.7 Khai triê’n biê’˙u thú’c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.1 Khai triê’n dâ´u ngoăc . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.2 Thay thê´ dâ´u ngã (Tilde ˙ Expansion) . . . . . . . . . . . . . . . . . 40
3.7.3 Phép thê´ các tham biê´n và biê´n sô´ . . . . . . . . . . . . . . . . . . 40
3.7.4 Phép thê´ các câu lênh . . . . . . . . . . . . . . . . . . . . . . . . . 41
˙
3.7.5 Phép thê´ sô´ hoc (Arithmetic Expansion) . . . . . . . . . . . . . . . 41
˙
3.7.6 Phân chia tù’ (word splitting) . . . . . . . . . . . . . . . . . . . . . 41
3.7.7 Khai triê’n các mâ˜u tên tâp tin và thu’ muc (Pathname Expansion) . . 41
3.7.8 Xóa các ký tu’ d̄ăc biêt ˙. . . . . . . . ˙. . . . . . . . . . . . . . . . 42
3.8 Shell - môt ngôn ngũ’˙ lâp˙ trình ˙ . . . . . . . . . . . . . . . . . . . . . . . . 42
3.8.1 Toàn˙ tu’ if và test ˙ (hoăc [ ]) . . . . . . . . . . . . . . . . . . . . . . 42

3.8.2 Toán tu’’ test và d̄iê`u kiê ˙ n cu’a biê’u thúc . . . . . . . . . . . . . . . . 43

’ ˙
3.8.3 Toán tu’ case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.8.4 Toán tu’’ select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.8.5 Toán tu’’ for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.8.6 Toán tu’’ while và until . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.8.7 Các hàm sô´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.8.8 Tham sô´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.9 Script cu’a hê vo’ và lênh source . . . . . . . . . . . . . . . . . . . . . . . . 49
3.10 Câu lênh sh ˙ . . . . ˙. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
˙
Danh sách ba’ng

2.1 Câ´u trúc cu’a sector kho’’i d̄ông chính . . . . . . . . . . . . . . . . . . . . . 9


2.2 Nhu câ`u su’’ dung không gian ˙ d̄ı̃a cu’a HDH . . . . . . . . . . . . . . . . . . 15
˙ ¯
3.1 Các câu lênh d̄â`u loc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Thay thê´ ˙các tham ˙biê´n d̄ăc biêt . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 ˙ ´ c ˙. . . . . . .
Ký tu’ xác d̄inh dang dâ´u nhă . . . . . . . . . . . . . . . . . . 37
3.4 ˙ ˙ ˙
Các ký tu’ tao mâ˜u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
˙ ˙
’ NG
DANH SÁCH BA 1

Lò’i nói d̄â`u


¯Dây là ba’n di˙ch cuô´n "Linux cho ngu’ò’i dùng" (sêri sách tu˙’ ho˙c) cu’a Kostromin Victor
Alexeevich công thêm môt vài (râ ´ t ít) kinh nghiêm su’’ dung Linux cu’a teppi. Ba’n gô´c d̄u’o’c
viê´t trên tiê´ng Nga. Theo yêu câ`u cu’a Kostromin˙ A. V., xin
˙ ˙ ˙ d̄uoc d̄ua ra các liên kê´t tói ba’˙n
’’ ’ ’
gô´c d̄ây: ˙
http://rus-linux.net/book1.php?name=book1/oglavl
http://linux-ve.chat.ru/

Lò’i ca’m o’n


Xin ca’m o’n các bác sau d̄ã giúp d̄õ’: Kostromin V. A. d̄ã viê´t môt cuô´n sách vê` Linux cho
˙ môt khoa’ng không trên
ngu’ò’i dùng mó’i tuyêt vò’i; Tru’o’ng Manh Cu’ò’ng d̄ã dành cho teppi
˙ ˙
http://phoc.minidns.net d̄ê’ d̄ăt cuô´n sách này; hai bác Nguyê˜n ¯Dai Quý ˙ và Nguyê˜n Dăng
¯
Hoàng Tuân d̄ã giúp trong ˙viêc su’’ dung LATEX. Bác Nguyê˜n ¯Da˙i Quý d̄ã d̄oc và su’’a ˙cho
˙ ´ c teppi
phiên ba’n 0.9. Xin hãy gu’’i thu’ nhă ˙ tai teppi@vnlinux.org nê´˙ u nhu teppi ˙có quên ai d̄ó.

˙

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

Van su’ kho’’i d̄â`u nan – Trung Quô´c


˙ ˙
Thông thu’ò’ng trên các d̄ı̃a cu’a ba’n phân phô´i Linux d̄ã có hu’ó’ng dâ˜n ngă´n gon cách cài d̄ăt
Linux. Ngoài ra, trên Internet ban có thê’ tìm thâ´y râ´t nhiê`u cuô´n sách nó vê` vâ´n˙ d̄ê` này. Và tâ´˙ t
ca’ các ba’n phân phô´i ló’n (Debian, ˙ Slackware, Fedora, Mandrake, ...) d̄ê`u d̄ã có cuô´n huóng
’’
dâ˜n cài d̄ăt râ´t chi tiê´t, cho moi tình huô´ng su’’ dung. Hãy chò’ d̄o’i và hy vong trong tu’o’ng lai
không xa˙sẽ có ba’n dich Tiê´ng˙ Viêt cu’a nhũ’ng cuô ˙ ´ n sách này. Chính ˙ vì vâ˙ y trong cuô´n sách
này, tác gia’ sẽ không˙ d̄u’a ra các bu ˙ óc cu thê’ cu’a viêc cài d̄ăt, mà xin ba˙n d̄oc hãy tìm các
’’
cuô´n hu’ó’ng dâ˜n tu’o’ng ú’ng. Thay vào d̄ó˙ là nhũ’ng gì˙ ban câ`˙n biê´t và chuâ ˙ ’n bi
˙ truóc khi cài
’’
` ’ ’ ´ ˙
d̄ăt, d̄ông thò’i, tác gia sẽ d̄i cu thê và chi tiêt vào nhũ’ng gì d̄ăc biêt khi cài d̄ăt Linux trên máy ˙
˙ d̄ã có môt trong các hê d̄iê ˙ `u hành Windows cũng nhu viê ˙ ˙ ˙
tính ’ c kho’’i d̄ông nhiê`u hê d̄iê`u hành.
˙ ˙ ˙ ˙ ˙
Vâ´n d̄ê` o’’ chô˜, phâ`n ló’n ngu’ò’i dùng Viêt Nam tru’ó’c khi bă´t d̄â`u hoc Linux d̄ã làm quen và
râ´t có thê’ d̄ã có kinh nghiêm su’’ dung các˙ HD ¯ H dòng Windows nhu’˙Windows 98, Windows
2000 và Windows XP. Và trên ˙ thuc˙tê´ thì tam thòi Linux khó có thê’ là HDH d̄â`u tiên mà nguòi
’ ’ ¯ ’’
´ ˙ ˙ ´
dùng làm quen. Nhu’ thê, môt cách tu’ nhiên, nêu ngu’ò’i dùng d̄ã làm viêc vó’i HD
˙ i Linux, ˙ thì ho không muô´n mâ´t d̄i môi ˙truòng làm ¯ H Windows
và quyê´t d̄inh thu’’ nghiêm vó ’ ’’ viêc quen
thuôc cu’a mình, cùng vó’i nhũ’ng gì d̄ã tao ra và d̄ã câu hình du’ó’i du’ó’i Windows. Râ´t˙ may là
˙ ˙ ˙ ´
không ˙ nhâ´t thiê´t pha’i d̄ánh mâ´t tâ´t ca’ nhũ ˙ ng thú d̄ó. Bo’i vì trên môt máy tính có thê’ cùng
’ ’ ’
˙
"chung sô´ng hòa bình hai HD ¯ H và thâ m chí nhiê`u ho ’n nũ ’a (nê´u có d̄u’ chô˜ trên d̄ı̃a!). Chính
vì thê´, o’’ phía du’ó’i sẽ nói cách cài d̄ăt HD ˙ H Linux trên máy tính d̄ã cài d̄ăt môt trong các hê
d̄iê`u hành cu’a hãng Microsoft. ˙ ¯ ˙ ˙ ˙

2.1 Chuâ’n bi cài d̄ăt


˙ ˙
Có thê’ cài d̄ăt Linux bă`ng môt trong các cách sau:
˙ ˙
• Tù’ ô’ d̄ı̃a CD-ROM

• Tù’ ba’n sao chép Linux trên ô’ d̄ı̃a cú’ng

• 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:

– nhà sa’n xuâ´t;


– sô´ hiêu phiên ba’n.
˙
• Controller ô’ d̄ı̃a cú’ng: loai (IDE hay SCSI) và dung lu’o’ng cu’a ô’ d̄ı̃a (nê´u nhu’ ban d̄oc
dùng d̄ı̃a IDE, thì câ`n kiê˙’m tra xem BIOS có hô˜ tro’ viê
˙ c truy câp o’ chê´ d̄ô LBA

˙ hay˙
không): ˙ ˙ ˙ ˙

– hda (Master trên controller sô´ 1 hay Primary Master);


– hdb (Slave trên controller sô´ 1 hay Primary Slave);
– hdc (Master trên controller sô´ 2 hay Secondary Master);
– hdd (Slave trên controller sô´ 2 hay Secondary Slave).
– nhà sa’n xuâ´t và sô´ mâ˜u mã cu’a adapter SCSI (nê´u có).

• Dung lu’o’ng cu’a bô nhó’ (tính bă`ng Kilobyte


˙ ˙
• CD-ROM:

– Giao diên (IDE, SCSI, hay giao diên khác);


˙ ˙
– d̄ô´i vó’i các ô’ d̄ı̃a CD-ROM không pha’i IDE, cũng nhu’ SCSI - nhà sa’n xuâ´t và sô´
mâ˜u mã.

• 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

– nhà sa’n xuâ´t;


– sô´ mâ˜u mã (hay chipset su’’ dung)
˙
– dung lu’o’ng bô nhó’;
˙ ˙
• Màn hình
– nhà sa’n xuâ´t
– sô´ mâ˜u mã;
– các giá tri gió’i han (min, max) cu’a tâ`n sô´ làm mó’i theo chiê`u doc và theo chiê`u
ngang (nhũ ˙ ng giá˙ tri này ban d̄oc chı’ có thê’ tìm thâ´y trong tài liêu˙ d̄i kèm vói màn
’ ’
hình, Windows không ˙ hiê’n˙ thi˙ nhũng giá tri này, và chúng râ´t˙ quan trong trong

khi câ´u hình giao diên d̄ô` hoa).˙ ˙ ˙
˙ ˙
• Nê´u nhu’ ban d̄oc muô´n kê´t nô´i mang (mà UNIX nói chung là HD ¯ H dành cho ma˙ng),
˙ ˙
thì hãy ghi lai nhũ’ng dũ’ liêu sau: ˙
˙ ˙
– nhà sa’n xuât và sô mâ˜u mã cac mang;
´ ´
˙ ˙
– d̄ia chı’ IP cu’a mình;
˙
– tên cu’a máy tính trong mang;
˙
– mă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 miê`n (DNS server);
˙
– d̄ia chı’ IP cu’a máy chu’ WINS(Windows Internet Name Service);
˙
– tên miê`n cu’a công ty ban d̄oc.
˙ ˙
• Loai và nhà sa’n xuât cac âm thanh và game controller (nê´u nhu’ có)
´
˙ ˙

2.2 Phòng xa và nhũ’ng lò’i khuyên


Tru’ó’c khi cài d̄ăt HD
˙ ¯ H Linux sau Windows, râ´t nên thu˙’c hiê˙n vài thao tác "phòng xa" ("phòng
cháy ho’n chũ’a cháy"). Vì râ´t có thê’ ban d̄oc sẽ pha’i phân vùng lai ô’ d̄ı̃a, thay d̄ô’i ba’n ghi
kho’’i d̄ông (Boot Record) và làm viêc vó˙’i các ˙ tâp tin kho’i d̄ông cũng˙ nhu các tâp tin câ´u hình.
’ ’
Các thao ˙ tác này không pha’i lúc nào ˙ cũng d̄em˙ lai d̄em lai mô˙ t kê´t qua’ theo ý ˙muô´n, và trong
tru’ò’ng ho’p xâ´u có thê’ máy tính cu’a ban d̄oc sẽ ˙không kho ˙ ’ i ˙d̄ông nũa. Có biê´t cách thoát ra
’ ’
˙ ´ ` ˙ ` ˙ ´ ˙
khoi tình huông này và phuc hôi dũ’ liêu cân thiêt không d̄ó còn là môt câu ho’i. Nhu’ng ro’i vào

tình huô´ng nhu’ vây hê´t sú’c˙ dê˜ dàng nhâ
˙ ´ t là vói nguòi dùng lâ`n d̄â`u tiên
’ ’’
˙ cài d̄ăt Linux. Chính
˙
vì vây, d̄â`u tiên, câ`n tao môt d̄ı̃a mê`m kho’’i d̄ông hay môt d̄ı̃a mê`m giúp phu˙ c hô`i hê thô´ng
(nê´u˙ ban d̄oc còn chu’˙a tao). ˙ Thú hai, câ`n ghi˙ lai nhũng ˙dũ liêu có giá tri (backup).
’ ’ ’
˙ ˙Và thú

˙ ˙ ˙ ˙ ˙ ˙
ba, chuâ’n bi các tâp tin (d̄ı̃a mê`m, CD) cài d̄ăt cho hê thô´ng cũ. Môt lò’i khuyên quan trong
khác: nê´u có ˙ gì d̄ó˙ xa’y ra không theo ý muô´˙n thì không ˙ nên hoang˙ mang. Xin chia se’ mô ˙ t
kinh nghiêm buô`n: khi lâ`n d̄â`u tiên tác gia’ cài Linux trên máy tính d̄ã có Windows NT, và ˙
˙
kê´t qua’ là máy tính không thê’ kho’’i d̄ông d̄u’o’c. Không hiê’u hê´t vâ´n d̄ê` tác gia’ nghı̃ là không
còn cách gì khác ngoài d̄inh dang lai ˙ô’ d̄ı̃a và˙ cài d̄ăt lai tù’ d̄â`u. Bây giò’ thì tác gia’ d̄ã hiê’u là
có thê’ phuc hô`i lai nê´u nhu˙ không˙ ˙quyê´t d̄inh quá˙vô˙i vàng. Vì vây có thê’ nói ră`ng Werner

Almesberger d̄úng, khi trong hu’ó’ng dâ˜n su’’˙ dung LILO
˙ ˙ ˙ có d̄ua ra ˙nhũng lòi khuyên sau cho
’ ’ ’
ngu’ò’i dùng khi ro’i vào tru’ò’ng ho’p khó khăn nhu ˙ vây:

˙ ˙
6 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙

• 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.

˙ ˙

2.3 Phân vùng trên d̄ı̃a và quá trình kho’’i d̄ông


˙
2.3.1 Thê´ nào là câ
´ u trúc "hình hoc cu’a d̄ı̃a"
˙
Nhu’ ban d̄oc biê´t, d̄ı̃a cú’ng gô`m vài d̄ı̃a có phu’ ló’p tù’ tính, nă`m trên cùng môt truc và quay
vó’i vân˙ tô´c˙ ló’n. ¯Doc/Ghi dũ’ liêu d̄u’o’c thu’c hiên bo’’i các d̄â`u d̄oc nă`m giũ’a ˙các ˙d̄ı̃a này, di
chuyê˙’n tù’ tâm d̄ı̃a ra ˙ rìa ngoài cu˙ ’ a d̄ı̃a.
˙ Vòng˙ tròn ˙ d̄â`u d̄oc vẽ ra ˙trên các d̄ı̃a khi quay quanh
chúng goi là rãnh (track), còn tâp ho’p các rãnh nă`m chô ˙ `ng lên nhau goi là cylinder. Mô˜i
rãnh lai ˙chia thành các sector, và˙ có ˙thê’ ghi vào mô˜i sector 512 byte thông ˙ tin. Vì thê´ d̄ăc
˙
d̄iê’m cu’a môt ô’ d̄ı̃a thu’ò’ng là tâp ho’p ba sô: sô´ cylinder/sô´ rãnh trong cylinder/sô´ sector trên ˙
rãnh hay còn˙ viê´t tă´t là C/H/S ˙(ba chũ ˙ cái d̄â`u tiên cu’a các thuât ngũ Tiê´ng Anh tuong úng:
’ ’ ’’ ’
Cyliner/Head/Sector). Ba sô´ này goi là câ´u trúc "hình hoc cu’a d̄ı̃a". ˙ Dı̃a vói câ´u trúc hình hoc
¯ ’
˙
C/H/S có dung lu’o’ng C*H*S*512˙byte. ˙
˙
¯Dı̃a cú’ng là các thiê´t bi˙ khô´i, tú’ là d̄o˙c và ghi thông tin theo các khô´i, và kích thu’ó’c nho’
nhâ´t cu’a khô´i bă`ng môt sector (512 byte). ¯Dê’ có thê’ ghi thông tin lên d̄ı̃a, câ`n d̄ăt d̄â`u d̄ı̃a
d̄úng vi trí, tú’c là chı’ cho ˙ controller biê´t câ`n ghi thông tin này vào sector nào. Sector ˙ d̄u’o’c
d̄ánh d̄i˙a chı’ theo sô´ thú’ tu’ cylinder, sô´ thú’ tu’ d̄â`u d̄oc (hay rãnh) và sô´ thú’ tu’ sector trên rãnh.
˙
˙ ˙ ˙ ˙ ˙
2.3 Phân vùng trên d̄ı̃a và quá trình kho’’i d̄ông 7
˙

2.3.2 Phân vùng và ba’ng phân vùng cu’a d̄ı̃a


Trong các hê thô´ng Intel ô’ d̄ı̃a thu’ò’ng d̄u’o’c chia thành các phân vùng. Râ´t có thê’ nguyên
nhân cu’a viê˙c phân vùng là nguyên nhân li˙ch su’’: các phiên ba’n MS-DOS d̄â`u tiên không thê’
su’’ dung d̄u’o˙’c các d̄ı̃a ló’n, mà dung lu’o’ng˙ d̄ı̃a lai phát triê’n nhanh ho’n kha’ năng cu’a DOS.
Khi ˙d̄ó d̄ã nghı̃
˙ ra viêc chia ô’ d̄ı̃a thành˙ các phân ˙ vùng. Dê’ làm d̄uoc d̄iê`u này, trong sector
¯ ’’
˙ ba’ng chia ô’ d̄ı̃a thành
sô´ 0 cu’a d̄ı̃a (sector sô˙´ 0 cu’a rãnh d̄â`u tiên trong cylinder sô´ 0) ghi nhó’
các phân vùng (partition table). Mô˜i phân vùng d̄u’o’c dùng nhu’ môt d̄ı̃a vât lý riêng rẽ. Môt
tru’ò’ng ho’p nói riêng d̄ó là trong các phân vùng khác ˙ nhau có thê’˙ cài d̄ăt˙ các hê d̄iê`u hành
˙
khác nhau. ˙ ˙ ˙
Ba’ng phân vùng chú’a 4 ba’n ghi 16 byte cho 4 phân vùng chính. Mô˜i ba’n ghi có câ´u trúc
nhu’ sau:
kênh giao tác
struct partition {
char active; /* 0x80: phân vùng kích hoat, 0: không kích hoat */
char begin[3]; /* `u tiên, 24˙bit
CHS sector d¯â
˙
char type; /* loai phân vùng (ví du, 83 — LINUX_NATIVE, 82 — LINUX_SWAP) */
˙ ˙
´ i cùng,
char end[3]; /* CHS sector cuô 24 bit */
int start; /* ´ cu
sô ’a sector d¯â
`u tiên (32-bit, tính tù’ 0) */
int length; /* ´ sector có trong phân vùng (32 bit) */
sô
};

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
˙

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 Boot Start End #cyls #blocks Id System


/dev/hda1 * 0+ 189 190- 1526143+ 6 FAT16
/dev/hda2 190 783 594 4771305 5 Extended
/dev/hda3 0 — 0 0 0 Empty
/dev/hda4 0 — 0 0 0 Empty

/dev/hda5 190+ 380 191- 1534176 6 FAT16


— 381 783 403 3237097+ 5 Extended
— 190 189 0 0 0 Empty
— 190 189 0 0 0 Empty

/dev/hda6 381+ 783 403- 3237066 7 HPFS/NTFS


— 381 380 0 0 0 Empty
— 381 380 0 0 0 Empty
— 381 380 0 0 0 Empty

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.

2.3.3 Quá trình kho’’i d̄ông HD


¯ H công ty Microsoft
˙
Dù hê d̄iê`u hành có là gì, thì d̄ê’ có thê’ bă´t d̄â`u d̄iê`u khiê’n máy tính, câ`n nap HD ¯ H vào bô˙
˙ thê´ hãy xem xét qua quá trình kho’i d̄ông cu’a các HDH khác nhau. Chúng
nhó’. Vì ˙ ta chı’ quan
’ ¯
´ ’ ˙ ´
tâm d̄ên viêc kho’’i d̄ông tù’ ô d̄ı̃a cú’ng, nên sẽ không xem xét d̄ên viêc kho’’i d̄ông tù’ d̄ı̃a mê`m,
CD-ROM và ˙ qua ma˙ ng. Hãy bă´t d̄â`u tù MS-DOS và MS Windows˙ cũ (xin d̄ù ˙ ng quên ră`ng,
’ ’
viêc phát triê’n và hoàn˙ thiên máy tính cá nhân song song vói su phát triê’n cu’a HDH cu’a
’ ’
˙
Microsoft và nhũ’ng quyê´t d̄i˙ nh su’ dung trong các HDH này có a’˙nh huo’ng manh d̄ê´¯n quyê´t
’ ¯ ’’
d̄inh cu’a các nhà phát triê’n thiê ˙ ´ t bi). ˙ ˙
˙ ˙
2.3 Phân vùng trên d̄ı̃a và quá trình kho’’i d̄ông 9
˙

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.
˙ ˙

Ba’ng 2.1: Câ´u trúc cu’a sector kho’’i d̄ông chính


˙
Dich chuyê’n Nôi dung
˙ ˙
0x000 Mã cu’a trình kho’’i d̄ông chính
˙
0x1BE Ba’ng phân vùng ô’ d̄ı̃a
0x1FE "Sô´ màu nhiêm" (0xAA55)
˙
MS-DOS, Windows95 và NT ghi nhó’ DOS MBR trong khi cài d̄ăt. Ngoài ra cũng có thê’
tao MBR cu’a MS vó’i câu lênh DOS sau: fdisk /mbr. ˙
˙ Xin tro’ lai vói quá trình˙ kho’i d̄ông. Int 19h cu’a BIOS nap trình kho’i d̄ông chính vào bô
’ ’ ’ ’
nhó’ máy tính và chuyên quyên d̄iêu khiê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’ năng kho’’i d̄ông HD
˙ ¯ H; tâ´t ca’ nhũ’ng gì mà nó có thê’ làm – d̄ó là na˙p
vào bô nhó’ chu’o’ng trình manh ho’n – trình kho’’i d̄ông thú’ hai.
˙ ˙ ˙
¯Dê’ làm d̄u’o˙’c d̄iê`u này, nó tìm trong ba’ng phân vùng kích hoa˙t và d̄o˙c vào bô˙ nhó’ trình
kho’’i d̄ông thú’ hai, bă´t d̄â`u tù’ sector lôgíc d̄â`u tiên cu’a phân vùng kích hoat. Hãy chú ý d̄ê´n
cum tù’˙ "bă´t d̄â`u tù’". Vì trình kho’’i d̄ông thú’ hai trên các hê thô´ng khác nhau ˙ có d̄ô dài khác
˙
nhau. ˙ ˙ ˙
Trong phân vùng d̄u’o’c d̄inh dang du’ó’i hê thô´ng tâp tin FAT, trình kho’’i d̄ông thú’ hai chiê´m
môt sector (512 byte). Trong ˙ ˙ phân ˙ vùng d̄i˙nh dang ˙duói hê thô´ng tâp tin NTFS, ˙ trình kho’’i
’’
˙
d̄ông thú’ hai chiê´m vài sector. ˙ ˙ ˙ ˙
˙ Trình kho’i d̄ông thú hai nap lóp chuong trình d̄â`u tiên, câ`n thiê´t cho viêc kho’i d̄ông hê
’ ’ ’ ’’ ’
d̄iê`u hành. Trong˙ tru’ò’ng ho’p MS ˙ DOS chuong trình kho’i d̄ông d̄ông nap IO.SYS
’’ ’
˙ theo ˙ a chı˙’
d̄i
700h, sau d̄ó MSDOS.SYS˙ và chuyê’n quyê`n d̄iê`u khiê’n cho ˙ SYSINIT
˙ ˙ cu’a môd̄un IO.SYS. ˙
Nê´u vì lý do nào d̄ó không tìm thâ´y trên d̄ı̃a phân vùng kích hoat, thì quá trình kho’’ d̄ông
sẽ tiê´p tuc vó’i viêc xu’’ lý Int 18h. Tru’ò’ng ho’p này trên thu’c tê´ râ ˙ ´ m khi su’ dung, nhu˙ ng
´ t hiê ’ ’
˙ ˙ ˙ ˙
kha’ năng này có thê’ có ích trong tru’ò’ng ho’p nào d̄ó. Trong khi kho’’i d̄ông tù’ xa, khi ˙ hê d̄iê`u
hành kho’’i d̄ông tù’ máy chu’, thì Int này d̄u’o˙’c POST chuyê’n hu’ó’ng lên ROM ˙ cu’a cac ma ˙ ng.
˙ ˙ ˙ ˙
¯Dô´i vó’i các HD¯ H khác cu’a Microsoft thì quá trình kho’’i d̄ô˙ng diê˜n ra tu’o’ng tu˙’.
• Windows95 kho’’i d̄ông giô´ng nhu’ DOS nhu’ng thay thê´ IO.SYS và MSDOS.SYS bo’’i
các tâp tin cu’a mình. ˙ Các tâp tin DOS d̄uoc giũ lai duói các tên tuong úng IO.DOS và
’’ ’ ’’ ’’ ’
˙
MSDOS.DOS. Khi ban d̄o˙c chon kho’’i d̄ô˙ ng DOS, ˙ Windows95 sẽ d̄ô’i tên các tâp tin
cu’a mình vó’i phâ`n mo’˙’ rông ˙ w40˙ và phuc ˙hô`i tên ban d̄â`u cu’a các tâp tin hê thô´ng ˙ cu’a
˙ ˙ ˙ ˙
DOS. Quá trình kho’’i d̄ông tiê´p tuc vó’i viêc nap IO.SYS. Nhu’ thê´, sector kho’’i d̄ông cu’a
DOS và Windows95 là˙ nhu’ nhau. ˙ ˙ ˙ ˙
10 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i 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). ˙ ˙
˙

2.3.4 ´ n d̄ê` vó’i các d̄ı̃a ló’n


Vâ
Trên MS-DOS và các phiên ba’n d̄â`u tiên cu’a Windows truy câp tó’i d̄ı̃a (trong d̄ó có ca’ bu’ó’c
kho’’i d̄ông d̄â`u tiên cu’a HD ˙ cu’a BIOS. Khi này su’ dung
H) d̄u’o’c tô’ chú’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 sô´ cylinder;

• CL — 7-6 bit tu’o’ng ú’ng bit ló’n cu’a sô´ cylinder, 5-0 tu’o’ng ú’ng sô´ sector;

• DH — sô´ cu’a d̄â`u d̄oc;


˙
´ ’
• DL — sô cua d̄ı̃a(80h hay 81h).

(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. ˙ ˙ ˙

2.4 Lu’a chon trình kho’’i d̄ông


˙ ˙ ˙
2.4.1 Trình kho’’i d̄ông LILO cu’a HD
¯ H Linux
˙
Trình kho’’i d̄ông LILO d̄u’o’c viê´t bo’’i Werner Almesberber. LILO có thê’ kho’’i d̄ông nhân
˙ `m, d̄ı̃a cúng,˙ và cũng có thê’ kho’i d̄ông các hê d̄iê`u hành khác: PC/MS-DOS,
Linux tù’ d̄ı̃a mê ˙
’ ’
DR DOS, OS/2, Windows 95/98, Windows NT/2000/XP, ˙ ˙
386BSD, SCO UNIX, Unixware

v.v. . . LILO cho phép chon d̄ê´n 16 hê d̄iê`u hành khác nhau d̄ê kho’’i d̄ông.
˙ ˙ ˙
LILO không pha’i là chu’o’ng trình d̄o’n le’ mà là môt bô gô`m nhiê`u chu’o’ng trình: trình kho’’i
d̄ông, các chu’o’ng trình su’’ dung d̄ê’ cài d̄ăt và câ´u hình˙ trình
˙ kho’i d̄ông, và các tâp tin phuc vu:

˙ ˙ ˙ ˙ ˙ ˙ ˙
12 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙

• 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; ˙ ˙ ˙ ˙ ˙

• trong phân vùng swap cu’a Linux;

• trên d̄ı̃a cú’ng thú’ hai.

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;

• /boot/map (tao ra bo’’i lênh /sbin/lilo);


˙ ˙
2.4 Lu’a chon trình kho’’i d̄ông 13
˙ ˙ ˙

• 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). ˙ ˙
˙ ˙

2.4.2 Các trình kho’’i d̄ông khác


˙
Ngoài LILO d̄ê’ kho’’i d̄ông Linux có thê’ kho’’i d̄ông các trình kho’’i d̄ông khác.
˙ ˙ ˙

• 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
˙

2.4.3 Các phu’o’ng án kho’’i d̄ông


˙
Nhu’ vây, theo ý kiê´n cu’a tác gia’ có các phu’o’ng án kho’’i d̄ông sau:
˙ ˙
• Nê´u d̄ã cài d̄ăt Windows NT hay Windows 2000/XP, thì hãy su’’ dung NT Loader.
˙ ˙
• Nê´u có Windows 95 hay Windows 98 trên FAT16, và ban d̄oc không muô´n cài d̄ăt
chu’o’ng trình kho’’i d̄ông nào khác, thì có thê’ su’’ dung LILO,˙ hoă˙c d̄â`u tiên chay DOS và ˙
sau d̄ó kho’’i d̄ông Linux ˙ ˙
nhò’ chu’o’ng trình loadlin.exe (hay mô˙t chu’o’ng trình˙ tu’o’ng tu’,
˙
có vài chu’o’ng trình nhu’ vây, nhu’ng chúng ta sẽ không xét d̄ê´n). ˙ ˙
˙
• Nê´u d̄ã cài d̄ăt Windows 95 OSR2 hay Windows 98 trên FAT32, và ban d̄oc không
muô´n cài d̄ăt˙ thêm chu’o’ng trình kho’’i d̄ông, thì câ`n su’’ dung loadlin.exe. ˙ Râ
˙´ t nhiê`u
˙’ ng d̄inh ră`ng không câ`n su’ d̄u
˙ ˙
HOWTO khă ’ ng LILO, nê´u nhu’ phân vùng kích hoat có
d̄inh dang FAT32, măc dù tác gia’ không rõ nguyên nhân. Tuy nhiên thí nghiêm ˙kho’’i
˙ ˙
˙ ng Linux
d̄ô ˙ qua NT ˙Loader, cài d̄ăt trên phân vùng FAT32, cu’a tác gia’ d̄ã kê ˙ ´ t thúc
˙
không thành công. Vì thê´, trong tru˙’ò’ng ho’p này tác gia’ d̄ã pha’i su’’ dung chu’o’ng trình
loadlin.exe. Chu’o’ng trình này d̄ã hoàn thành ˙ tô´t nhiêm vu, và tao cho ˙ tác gia’ môt ´ân
˙
tu’o’ng tô´t, vì thê´ tác gia’ khuyên ban d̄oc su’’ dung loadlin.exe ˙ ’ i d̄ông Linux. ˙
˙ d̄ê’ kho

˙ ˙ ˙ ˙ ˙
Trong nhũ’ng phâ`n tiê´p theo tác gia’ sẽ cho biê´t cách cài d̄ăt Linux, su’’ dung tâ´t ca’ ba
phu’o’ng án kho’’i d̄ông: qua trình kho’’i d̄ông NT Loader, trình kho ˙’ i d̄ông LILO ˙và trình kho’i
’ ’
˙ ˙ ` ˙ ’
d̄ông loadlin.exe. Tuy nhiên tru’ó’c khi cài d̄ăt trình kho’’i d̄ông cân chuân bi các phân vùng
˙ d̄ı̃a, hay ít nhâ´t là nghı̃ cách tô’ chúc chúng.
trên ˙ ˙ ˙

2.5 Chuâ’n bi các phân vùng trên d̄ı̃a


˙
2.5.1 Lò’i khuyên khi tao phân vùng
˙
¯Du’a ra lò’i khuyên o’’ d̄ây không pha’i là viê˙c dê˜ dàng, vì phân vùng d̄ı̃a phu˙c thuô˙c râ´t nhiê`u
vào ý thích và nhu câ`u cu’a chu’ nhân d̄ı̃a. Nhu’ng cũng xin thu’’ d̄u’a ra vài d̄ê` nghi sau. Tác
gia’ sẽ d̄ăt tên d̄ı̃a và phân vùng theo "tiêu chuâ’n" cu’a Linux, tú’c là /dev/hda, /dev/hdb ˙ ,
˙
v.v. . . d̄ô´i vó’i d̄ı̃a và /dev/hda1, /dev/hda2, v.v. . . – d̄ô´i vó’i các phân vùng.
Viêc phân chia d̄ı̃a thành các phân vùng là câ`n thiê´t, bo’’i vì Windows và Linux su’’ dung
các cách ˙ luu trũ thông tin trên d̄ı̃a và sau d̄ó d̄oc chúng tù d̄ı̃a khác nhau. Chính vì thê´ tô´t ho ˙ n
’ ’ ’ ’
˙
hê´t là dành cho mô˜i hê d̄iê`u hành môt (hoăc thâm chí môt vài nhu’ chúng ta sẽ thâ´y o’’ du’ó’i)
phân vùng riêng. ˙ ˙ ˙ ˙ ˙
¯Dâ`u tiên chúng ta hãy xem xét mô˙t tru’ò’ng ho˙’p d̄o’n gia’n – dung lu’o˙’ng ô’ 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 – sô´ cylinder không vu’o’t quá 1024). Trong
tru’ò’ng ho’˙p này moi thú’ d̄ê`u d̄o’n gia’n: ban d̄oc chı’ viêc chia d̄ı̃a làm sao ˙ d̄ê’ d̄u’ chô˜ cho hê
d̄iê`u hành sẽ cài d̄ăt. Có thê’ su’’ dung dũ’ liêu cho biê´t kích thu’ó’c d̄ı̃a nho’ nhâ´t câ`n thiê´t d̄ê’ cài˙
˙ ˙ ˙ ˙ ˙
d̄ăt hê d̄iê`u hành vó ˙ i câ´u hình co ˙ba’n trong˙ ba’ng 2.2.
’ ’
˙ ˙
Tuy nhiên xin hãy nhó’ ră`ng, không nhũ’ng pha’i tính kích thu’ó’c các tâp tin cu’a ba’n thân
hê d̄iê`u hành, mà còn pha’i tính ca’ kích thu’ó’c cu’a các chu’o’ng trình ban d̄o˙ c du’ tính chay. Và
˙ pha’i dành môt phâ`n du trũ không nho’ cho các chuong trình sẽ cài˙d̄ăt ˙sau này
còn ˙ (không ˙ thê’
’ ’ ’’
tránh kho’i!). Hãy˙ tính ră`ng, ˙ 700 Mbyte dành cho Linux o’ trong ba’ng nói

˙ trên chı’ dành cho
các chu’o’ng trình cài d̄ăt cùng vó’i Linux theo măc d̄inh, trong sô´ d̄ó có, ví du, chu’o’ng trình
soan tha’o râ´t manh Lyx. ˙ Dô´i vói Windows cũng ˙tuong˙ ˙
¯ ’ ’ ’ tu’ nhu’ vây.
˙ ˙ ˙ ˙
2.5 Chuâ’n bi các phân vùng trên d̄ı̃a 15
˙

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
˙

2.5.2 Chu’o’ng trình d̄ê’ phân chia ô’ d̄ı̃a


Sau khi hoàn thành kê´t hoach chia ô’ d̄ı̃a, câ`n lu’a chon công cu d̄ê’ d̄u’a kê´ hoach này thành
hiên thu’c. Chu’o’ng trình phân ˙ moi hê d̄iê`u
˙ chia d̄ı̃a d̄uoc biê´˙t d̄ê´n ˙nhiê`u nhâ´˙t là fdisk; trên
’’
˙ d̄ê`˙u có phiên ba’n riêng cu’a chuong trình
hành ˙ này. Và không câ`n gì ho’n ngoài chu˙’o’ng˙ trình
’’
này, nê´u nhu’ phân chia ô’ d̄ı̃a tră´ng, không chú’a bâ´t ký dũ’ liêu nào. Nhu’ng chúng ta d̄ang xem
xét tru’ò’ng ho’p d̄ã có HD H nào d̄ó trên d̄ı̃a và câ`n phân chia ˙ ô’ d̄ı̃a mà không làm mâ´t thông
˙ ¯
tin. fdisk không thích ho’p cho nhũ’ng muc d̄ích nhu’ vây.
Trong thành phâ`n các˙ ba’n phân phô´i˙ Red Hat và˙BlackCat (râ´t có thê’ trong các ba’n
phân phô´i khác) có chu’o’ng trình fips, phuc vu cho phân chia ô’ d̄ı̃a. Tuy nhiên, theo ý
kiê´n cu’a ngu’ò’i dùng thì không nên su’’ dung˙ chu˙’o’ng trình này. Vì thê´ lò’i khuyên cu’a tác
gia’ vó’i ban d̄oc, nhũ’ng ngu’ò’i dùng Linux ˙ mói – nê´u nhu muô´n phân chia lai ô’ d̄ı̃a mà
’ ’
không làm˙ mâ´˙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.
Thú’ nhâ´t, chu’o’ng trình này cho phép ˙ phân chia lai ô’ d̄ı̃a mà không làm mâ´t thông tin (túc

là, tâ´t ca’ nhũ’ng cài d̄ăt và câ´u hình tru’ó’c d̄ó sẽ d̄u’o˙’c ghi lai). Khi này, không chı’ tao d̄u’o’c
phân vùng mó’i tù’ chô˜˙ trô´ng trên d̄ı̃a, mà còn có thê˙’ di chuyê ˙ ’n các phân vùng d̄ã có˙ theo˙ý
muô´n.
Thú’ hai, chu’o’ng trình này (thâm chí trong phiên ba’n dành cho DOS) cung câ´p môt giao
diên d̄ô` hoa dê˜ su’’ dung có hô˜ tro’ ˙chuôt, và moi thao tác cũng nhu’ thay d̄ô’i d̄ê`u thâ´y rõ˙ ràng.
˙ ˙ ˙ ˙ ˙ ˙
¯Diê`u này râ´t quan tro˙ng vó’i ngu’ò’i dùng mó’i.
Khi tao phân vùng câ`n d̄ê’ ý không cho ranh gió’i giũ’a các phân vùng că´t lâ˜n nhau.
Tác gia˙ ’ cho ră`ng, nhũng thông tin d̄ã d̄ua d̄u’ d̄ê’ ban d̄oc lâp kê´ hoach và thuc hiên viêc
’ ’ ’
phân chia ô’ d̄ı̃a thành các phân vùng. Vì thê´ tiê´p theo chúng ˙ ˙ ta˙sẽ xem xét ˙ các phu˙ ong˙ án cài
˙
’’
d̄ăt hai HD ¯ H trên mô˙t máy tính.
˙

2.6 Windows NT và Linux: kho’’i d̄ông qua OS Loader cu’a NT


˙
Trong phâ`n này, khi nói vê` Windows NT xin ngâ`m hiê’u ca’ Windows 2000 và NT, vì "quan
hê" cu’a chúng d̄ô´i vó’i viêc cài d̄ăt Linux hoàn toàn giô´ng nhau. Chúng ta gia’ thiê´t là Windows
NT˙ d̄ã d̄uoc cài vào phân˙ vùng ˙/dev/hda2 (nê´u nhu ban d̄oc nhó, /dev/hda1 sẽ dành cho
’’ ’ ’
phân vùng˙ FAT16). Nê´u HD ¯ H Windows NT d̄ã d̄u o
’’ c ˙ d̄ă
cài ˙ t, nghı̃a là trình kho’i d̄ông OS

Loader cũng d̄ã d̄u’o’c cài d̄ăt. Và nhu’ thê´ có thê’ su’’ dung˙ chuong ˙ ˙
’ ’ trình này d̄ê’ kho’’i d̄ông Linux.
Tác gia’ hy vong ră`˙ng ban ˙d̄oc d̄ã sao lu’u nhũ’ng thông ˙ tin có giá tri cu’a mình. Các ˙ buóc cài
’’
d̄ăt có thê’ mô˙ ta’ nhu’ sau:˙ ˙ ˙
˙
1. Nê´u nhu’ ban d̄oc chu’a cài d̄ăt Linux bao giò’, thì tru’ó’c khi bă´t d̄â`u câ`n chuâ’n bi d̄ı̃a
mê`m kho’’i ˙d̄ông˙ và phuc hô`i˙Windows NT. ¯Dê’ tao d̄ı̃a mê`m kho’’i d̄ông chı’ câ`n ˙d̄inh
dang lai d̄ı̃a mê˙ `m, rô`i sao
˙ chép lên d̄ó các tâp tin ˙ntldr, ntdetect.com và ˙ boot.ini tù ˙thu
’ ’
˙ ˙
´ ’ ’ ’ ˙ `
muc gôc cua ô d̄ı̃a kho’i d̄ông NT. Chu’o’ng trình tao d̄ı̃a phuc hôi Windows 2000/XP có
thê˙’ chay tù’ trình d̄o’n hê thô
˙ ´ ng (lênh Backup trong ˙ Start/Program/Accessories).
˙
˙ ˙ ˙
2. Dùng chu’o’ng trình Partition Magic d̄ê’ lâ´y môt phâ`n d̄ı̃a trô´ng và tù’ d̄ó tao ra phân vùng
vó’i dang ext2(3) (hê thô´ng tâp tin Linux) và phân ˙ vùng swap. Cách tính˙ kích thu’ó’c cu’a
chúng˙ d̄ã nói o’’ trên.˙ ˙

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

chuyê’n vào thu’ muc /mnt/floppy


˙
kênh giao tác
[root]# cd /mnt/floppy

và thu’c hiên câu lênh


˙ ˙ ˙
kênh giao tác
[root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1

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
˙

kênh giao tác


[root]# shutdown -h now

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
˙

kênh giao tác


/dev/hda3 on / type reiserfs (rw)

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. ˙ ˙ ˙

2.7 Su’’ dung trình kho’’i d̄ông LILO


˙ ˙
2.7.1 ´ u hình LILO
Cài d̄ăt và câ
˙
Nhu’ d̄ã nói trong phâ`n lu’a chon chu’o’ng trình kho’’i d̄ông, nê´u trên máy d̄ã cài Windows 98
vó’i hê thô´ng tâp tin FAT16,˙ thì˙ lua chon tô´t hon cho trình
˙ kho’i d̄ông là chuong trình có trong
’ ’ ’ ’’
thành˙ phâ`n cu’˙a moi ba’n phân phô ˙´ i HD
¯
˙ H Linux – LILO (LInux LOader).
˙
Giô´ng nhu’ tru’ò˙’ng ho’p Windows NT, chúng ta sẽ d̄u’a ra các bu’ó’c câ`n thu’c hiên d̄ê’ có thê’
kho’’i d̄ông nhiê`u HD ˙ ˙ ˙
˙ ¯ H.
1. Tru’ó’c khi cài d̄ăt Linux hãy chuâ’n bi d̄ı̃a mê`m kho’’i d̄ông Windows.
˙ ˙ ˙

2. Dùng chu’o’ng trình Partition Magic d̄ê lây phân không gian d̄ı̃a còn trô´ng và trên d̄ó
´ `
tao ra môt phân vùng ext2(3) (hê thô´ng tâp tin Linux) và môt phân vùng swap. Cách
˙ ô’ d̄ı̃a˙ d̄ã nói o’ trên. Nê´u dung
chia ˙ luong ô˙’ d̄ı̃a cúng vuot quá˙8,4 Gbyte thì hãy d̄oc kỹ
’ ’’ ’ ’’
các phâ`n 2.3 và 2.5. ˙ ˙ ˙

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
˙

kênh giao tác


other = /boot/bootsect.dos
label = win

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.

2.7.3 Chuyê’n thu’ muc /boot lên phân vùng DOS


˙
Nhũ’ng phiên ba’n nhân Linux mó’i nhâ´t hô˜ tro’ kha’ năng d̄ăt các tâp tin câ`n thiê´t trên giai d̄oan
kho’’i d̄ông vào hê thô´ng tâp tin MS-DOS (hay ˙ UMSDOS). ˙ Vì trong
˙ phâ`n lón các truòng ho˙ p
’ ’’ ’
phân vùng˙ DOS ˙chiê´m các ˙ vùng d̄ı̃a o’ d̄â`u (không có han chê´ cu’a BIOS), nên cho phép gia ˙’ i

quyê´t nhiê`u vâ´n d̄ê` cu’a ô’ d̄ı̃a ló’n, khi mà thu’ muc /boot˙ không thê’ nă`m trên phân vùng dành
cho Linux. ˙
24 Cài d̄ăt HD
¯ H Linux trên cùng máy tính vó’i Windows
˙

¯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.
˙ ˙ ˙ ˙

2.8 Kho’’i d̄ông Linux tù’ MS-DOS bă`ng loadlin.exe


˙
Không chı’ các tâp tin kho’’i d̄ông và nhân có thê’ nă`m trong phân vùng DOS, mà ca’ tiê´n trình
kho’’i d̄ông Linux˙ nói chung có ˙ thê’ d̄uoc tô’ chúc tù DOS. Kha’ năng này thuc hiên nhò chuong
’’ ’ ’ ’ ’ ’’
trình d̄ă˙ c biêt loadlin.exe, do Hans Lermen ˙ (lermen@elserv.ffm.fgan.de)˙viê´t.˙ Chu’o’ng trình
này thu˙’ò’ng ˙có trên các d̄ı̃a cu’a ba’n phân phô´i.4
Loadlin.exe cung câ´p cách kho’’i d̄ông Linux tù’ ô’ cú’ng an toàn nhâ´t, khi có phân vùng
kích hoat là DOS hay Windows. Phu’o’ng ˙ án kho’i d̄ông này d̄uoc khuyên su’ dung cho nguòi
’ ’’ ’ ’’
˙ ` ˙ ˙ ˙
dùng Linux mó’i. Phân ló’n ngu’ò’i dùng mó’i (và không chı’ ho) không d̄u’ kiên nhân d̄ê d̄oc tài˜ ’
liêu râ´t hay nhu’ng râ´t dài (và lai viê´t trên tiê´ng Anh nũ’a) cu’a˙ LILO. Vì thê´ ho thu’ò’ng su’’˙dung
˙
LILO không d̄úng cách, và kê´t˙ qua’ là không thê’ kho’’i d̄ông d̄u’o’c bâ´t kỳ hê d̄iê
˙`u hành nào (tác
˙
gia’ cũng d̄ã ro’i vào tru’ò’ng ho’p nhu’ vây). ¯Dô´i vó’i nhũ’ng˙ ngu’ò’i˙dùng mó’i thì
˙ sẽ thuân tiên hon

khi su’’ dung loadlin.exe d̄ê’ kho ˙ ’ i d̄ông˙và bă´t d̄â`u tìm hiê’u Linux. Tuy nhiên, "không˙ vào˙ hang

cop sao ˙bă´t d̄u’o’c cop". ˙
˙ ˙ ˙
Chu’o’ng trình loadlin.exe không yêu câ`u pha’i cài d̄ăt, chı’ câ`n d̄ăt chu’o’ng trình – tâp tin
loadlin.exe và nhân (a’nh cu’a nhân) lên môt trong các˙ d̄ı̃a mà DOS ˙ nhân ra. Có thê’˙dùng
chu’o’ng trình này d̄ê’ kho’’i d̄ông Linux tù’ CD hoăc tù’ ô’ d̄ı̃a trong mang mà˙không câ`n su’’ dung
˙
d̄ı̃a mê`m kho’’i d̄ông. Kha’ năng˙ này biê´n loadlin.exe ˙ thành môt công˙ cu tuyêt vòi d̄ê’ kho’i d̄ô˙ ng
’ ’
˙
Linux khi có vâ´n d̄ê` vó’i LILO. ˙ ˙ ˙ ˙
Phiên ba’n 1.6 cu’a loadlin.exe làm viêc vó’i moi câ´u hình DOS và có râ´t ít han chê´. Phiên
ba’n này có thê’ su’’ dung bô nhó’ mo’’ rông;˙ có thê’ na ˙ p các nhân lón (các bzImage)

˙ và các a’nh
˙ ˙ ˙
d̄ı̃a a’o (initrd) tru’c tiê´p vào vùng bô nhó’ nă`m trên. ˙
Viêc su’’ dung˙ loadlin.exe không˙ có nghı̃a là Linux làm viêc du’ó’i DOS, vì chu’o’ng trình
này hô˜˙ tro’ "kho˙ ’ i d̄ông lôgíc" cu’a máy tính, và sau d̄ó DOS d̄u

˙ oc thay thê´ hoàn toàn bă`ng
’’
Linux. Nêu nhu’ ban d̄oc muôn quay tro’ lai DOS, thì phai kho’i d̄ô˙ng lai máy tính, ví du, bă`ng
´˙ ˙ ´ ’ ’ ’
câu lênh reboot.˙ ˙ ˙ ˙ ˙ ˙
˙
Nhu’ vây, câ`n làm gì d̄ê’ có thê’ su’’ dung chu’o’ng trình loadlin.exe.
˙ ˙
• Trên máy tính cu’a ban (tâ´t nhiên vó’i bô xu’’ lý 386 hoăc cao ho’n) câ`n cài d̄ăt DOS hay
WINDOWS 95. ˙ ˙ ˙ ˙

• Câ`n có a’nh nén cu’a nhân Linux (zImage, bzImage)5 .

• 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
˙

Nê´u ban chay loadlin.exe không có tham sô´


˙ ˙
C:\LOADLIN> loadlin
thì sẽ nhân d̄u’o’c hu’ó’ng dâ˜n su’’ dung ngă´n gon. Thuân tiên ho’n d̄ê’ d̄oc hu’ó’ng dâ˜n này, khi
chay chu’o’ng˙ trình˙ vó’i tham sô´ more˙ (giô´ng trong ˙ Linux)
˙ ˙ ˙
˙ C:\LOADLIN> loadlin | more
Bây giò’ chúng ta có thê’ xem xét các bu’ó’c cài d̄ăt Linux khi su’’ dung loadlin.exe d̄ê’ kho’’i
d̄ông. ˙ ˙
˙
1. Chia các phân vùng cho Linux (cách làm xem phâ`n 2.5)
2. Cài d̄ăt Linux vào phân vùng d̄ã chia. LILO câ`n cài d̄ăt vào sector d̄â`u tiên cu’a phân
vùng ˙Linux d̄ê’ không ghi d̄è lên MBR và không bi ˙ mâ´t kha’ năng kho’’i d̄ông vào
Windows. ˙ ˙

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

Tô´t gô˜ ho’n tô´t nu’ó’c so’n


– ca dao tuc ngũ’ Viêt Nam
˙ ˙
Trong phâ`n này chúng ta sẽ d̄ê` câp d̄ê´n vâ´n d̄ê` làm viêc vó’i Linux o’’ chê´ d̄ô text, hay còn
d̄u’o’c goi là console hoăc terminal. Nhũ ˙ ng nguòi dùng Linux ˙ mó’i (newbie) thu˙ òng nghı̃ sẽ
’ ’’ ’’
chă’˙ng bao
˙ giò làm viêc ˙o’ chê´ d̄ô này, vì d̄ã có giao diên d̄ô` hoa. Tuy nhiên d̄ây là môt ý kiê´n
’ ’
sai lâ`m, bo’’i vì râ´t nhiê˙`u công viê
˙ c có thê’ thuc hiên nhanh

˙ và thuâ ˙ n tiên trong chê´ d̄ô˙này hon

là su’’ dung giao diên d̄ô` hoa. Và ˙dù sao thì chê ˙ ´ d̄ô
˙ text cu’a HDH˙Linux
¯
˙ không pha’i ˙là chê´ d̄ô
text mô˙t tiê´n trình˙cu’a MS-DOS. ˙ Vì Linux là HD ¯
˙ H d̄a tiê´n trình, nên ngay trong chê´ d̄ô text˙
˙ ’ năng làm viêc trong vài cu’a sô’. Và d̄ê’ soan tha’o môt tâp tin văn ba’n không˙ nhâ´t
d̄ã có kha ’
thiê´t pha’i chay các trình˙ soan tha’o ló’n và châm chap ˙(d̄ăc biêt trên ˙ ˙các máy có câ´u hình phâ`n
˙ ˙
cú’ng thâ´p) cu’a môi tru’ò’ng d̄ô` hoa. ˙ ˙ ˙ ˙
˙

3.1 Hê vo’ là gì?


˙
Chúng ta thu’ò’ng nói "ngu’ò’i dùng làm viêc vó’i hê d̄iê`u hành". ¯Diê`u này không hoàn toàn
d̄úng, vì trên thu’c tê´ "liên hê" vó’i ngu’ò’i dùng ˙ d̄uoc˙ thuc hiên bo’i môt chuong trình d̄ăc biêt.
’’ ’ ’ ’’
Có hai dang cu’˙a chu’o’ng trình ˙ d̄ã d̄ê` câp - hê vo’˙, hay˙ shell,
˙ d̄ê’ làm˙ viêc trong chê´ ˙d̄ô text
˙
(giao diên˙ dòng lênh) và giao diên d̄ô` ˙hoa GUI ˙ (Graphical User Interface), ˙ thu’c hiên˙"liên
hê" vó’i ngu’ò’i dùng trong môi tru’ò’ng d̄ô` hoa. Câ`n nói ngay ră`ng, bâ´t kỳ chu’o’˙ng trình
˙ ˙ ˙ ˙ ˙ nào
˙
trong Linux có thê’ kho’’i d̄ông tù’ dòng lênh˙ cu’a hê vo’ (nê´u máy chu’ X d̄ã chay), cũng nhu’
qua giao diên d̄ô` hoa. Chay˙ chu’o’ng trình˙ tù’ dòng lê ˙ nh cu’a hê vo’ tuong d̄uong ˙vói viêc nháy
’’ ’’ ’
˙ ˙
’ ˙ ’ ˙ ˙
(d̄úp) chuôt lên biêu tu’o’ng cua chu’o’ng trình trong GUI. ¯Du’a các tham sô cho chu’o’ng´ ˙ trình
trên dòng lê ˙ nh tuong d̄u˙ong vói viêc chúng ta kéo và tha’ cái gì d̄ó lên biê’u tuong chuong trình
’’ ’’ ’ ’’ ’’
˙ ` ˙ ´ ’ ˙
trong môi tru’ò’ng d̄ô hoa. Nhu’ng măt khác, môt sô chu’o’ng trình không thê chay o’’ GUI và chı’
có thê’ thu’c hiên tù’ dòng ˙ lênh. Nói ˙ngoài lê` mô˙ t chút, tên goi "hê vo’" bi pha’˙n d̄ô´i râ´t nhiê`u.
˙ ˙ ˙
Theo ý kiê´n cu’a môt sô´ chuyên gia ngôn ngũ’ cũng ˙ ˙ gia
nhu’ chuyên ˙ Linux˙ thì nên goi chuong
’’
˙ ’
trình này môt cách d̄úng ho’n là "trình xu’ lý lênh" hay "trình biên dich lênh". Tuy nhiên, tên ˙
goi "hê vo’" ˙(shell) d̄u’o’c dùng cho các chu’o’ng˙ trình dùng d̄ê’ biên di˙ch lê˙nh trong chê´ d̄ô text
˙ mo
trên ˙ i hê thô´ng UNIX.
˙ Trên các hê thô´ng UNIX d̄â`u tiên có mô˙t chu˙ong trình, goi là˙ sh,
’’
viê´t tă´t˙ cu’a˙ shell. Sau d̄ó, vài biê´n˙ thê’ cu’a sh d̄u’o’c phát triê’n và˙ làm tô´t ho’n, trong
˙ d̄ó có
Bourne shell - phiên ba’n mo’’ rông cu’a sh, viê´˙t bo’’i Steve Bourne. Du’ án GNU (du’ án
phát triê’n chu’o’ng trình ú’ng dung cu’a˙ Stollman, xem http://www.gnu.org/) ˙sau d̄ó cho ra˙ d̄ò’i
hê vo’ bash, tên goi cu’a nó d̄u˙’o’c gia’i mã ra là Bourne-again shell, tú’c là "lai là hê vo’
˙ ˙ ˙ ˙ ˙
28 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.
˙ ˙

3.2 Các ký tu’ d̄ăc biêt


˙ ˙ ˙
Hê vo’ bash su’’ dung môt vài ký tu’ tù’ bô 256 ký tu’ ASCII cho các muc d̄ính riêng, hoăc d̄ê’
biê˙’u thi các thao ˙tác nào˙ d̄ó, hoăc ˙d̄ê’ biê´˙n d̄ô’i biê’u˙thú’c. Các ký tu’ này˙ bao gô`m: ˙
˙ ˙ ˙
‘ ~ ! @ # $ % ^ & * ( ) _ -- [ ] { } : ; ’ " / \ > <

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 ˙ ˙ ˙
’’
˙ ˙

3.3 Thu’c thi các câu lênh


˙ ˙
Nhu’ d̄ã nói o’’ trên, môt trong các chú’c năng chính cu’a hê vo’ là tô’ chú’c viêc thu’c hiên các câu
lênh mà ngu’ò’i dùng ˙d̄u’a vào trên dòng lênh. Hê vo’, nói˙ riêng, cung câ´p ˙cho ngu ˙ ò˙i dùng hai
’’
˙ ˙ ˙
thao tác d̄ăc biêt d̄ê’ tô’ chú’c viêc d̄u’a các câu lênh trên dòng lênh: ; và &.
˙ ˙ ˙ ˙ ˙

3.3.1 Thao tác ;


Măc dù ngu’ò’i dùng thu’ò’ng chı’ nhâp trên dòng lênh tù’ng câu lênh môt, nhu’ng còn có thê’ d̄u’a
vào˙ dòng lênh d̄ó ngay lâp tú’c vài˙ câu lênh, và ˙chúng sẽ thu’c˙ hiên ˙lâ`n lu’o’t tù’ câu lênh này
˙ khác. Dê’ làm
d̄ê´n câu lênh ˙ d̄uoc d̄iê`u này˙ câ`n su’ dung ký tu d̄ă
˙ ˙ ˙ ˙
¯ ’’ ’ ’ c biêt - ;. Nê´u dùng ký tu’ này
˙ các câu lênh, thì ˙câu lênh tiê´p theo sẽ˙d̄uoc coi˙ nhu
d̄ê’ phân chia ˙ tham ˙ sô´ cu’a lênh phía tru
˙ óc.
’’ ’ ’’
Nhu’ vây, nê´u nhâp vào˙ dòng lênh cái
˙ gì d̄ó giô´ng nhu˙sau:

˙
˙ ˙ ˙
kênh giao tác
teppi82@teppi:~$ command1 ; command2

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. ˙ ˙ ˙ ˙ ˙

3.3.2 Thao tác &


Thao tác & d̄u’o’c dùng d̄ê’ tô’ chú’c viêc thu’c hiên các câu lênh trong chê´ d̄ô nê`n sau. Nê´u d̄ăt
dâ´u & ngay sau˙ câu lênh, thì hê vo’ sẽ˙ tra’˙lai quyê
˙ `n d̄iê`u khiê
˙ ’n cho nguòi ˙dùng ngay sau khi
’’
˙
˙
chay câu lênh, mà không ˙ câu lênh˙ d̄ó hoàn thành. Ví du, nê´u nhâp vào dòng lênh
d̄o’i cho
"command1 & command2 &", thì hê˙vo’ chay câu lênh command1,
˙ ˙ ˙ ˙ ngay˙lâp tú’c chay lê˙ nh
command2, và sau d̄ó không châm trê˜ tra ˙ ’ lai dòng
˙ nhâ˙p lênh cho nguòi dùng.˙ ˙ ˙
’’
˙ ˙ ˙ ˙

3.3.3 Thao tác && và ||


Các thao tác && và || lá nhũ’ng thao tác d̄iê`u khiê’n. Nê´u trên dòng lênh là command1 && command2,
thì command2 sẽ thu’c hiên và chı’ thu’c hiên trong tru’ò’ng ho’p ˙trang thái thoát ra cu’a lênh
command1 bă`ng không ˙ (0),
˙ túc là lênh˙d̄ó thu
˙ c hiên thành công. ˙ Mô ˙ t cách tuong tu, nê´u dòng
˙
’ ’ ’’ ’
˙ ˙ ˙ ˙
lênh có dang command1 || command2, thì command2 sẽ thu’c hiên và chı’ thu’c hiên khi ˙
˙ ng thái˙thoát cu’a lênh command1 khác không. Chúng ta sẽ không
tra ˙ xem ˙ xét măt kỹ
˙ thuâ˙ t cu’a
˙ ˙ ˙ ˙
30 Bash

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.
˙ ˙ ˙ ˙ ˙ ˙

3.4 ¯Dâ`u vào/d̄â`u ra tiêu chuâ’n


3.4.1 Dòng dũ’ liêu vào-ra
˙
Khi môt chu’o’ng trình d̄u’o’c thu’c hiên, nó d̄u’o’c cung câ´p ba dòng dũ’ liêu (hay còn goi là
kênh): ˙ ˙ ˙ ˙ ˙ ˙ ˙

• 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. ˙ ˙ ˙ ˙
˙

3.4.2 Lênh echo


˙
Câu lênh echo dùng d̄ê’ chuyê’n tó’i d̄â`u ra tiêu chuâ’n dòng ký tu’, mà d̄u’o’c d̄u’a vào làm tham
sô´ cho˙ nó. Sau d̄ó lênh này d̄u’a ra tín hiêu chuyê’n dòng và hoàn ˙ tâ´t công
˙ viêc. Hãy thu’ thuc
’ ’
hiên câu lênh sau: ˙ ˙ ˙ ˙
˙ ˙
1
giô´ng liên kê´t hóa hoc
˙
3.5 Chuyê’n hu’ó’ng d̄â`u vào/d̄â`u ra, d̄u’ò’ng ´ông và d̄â`u loc 31
˙

kênh giao tác


[user]$ echo ’xin chao cac ban!’

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).
˙ ˙ ˙ ˙

3.4.3 Lênh cat


˙
Chúng ta sẽ xem xét lênh cat o’’ d̄ây vì lênh này thu’ò’ng làm viêc vó’i d̄â`u vào và d̄â`u ra tiêu
chuâ’n. Theo măc d̄inh˙kê´t qua’ làm viêc cu ˙’ a lênh cat huóng tói˙d̄â`u ra tiêu chuâ’n. Dê’ chúng
’’ ’ ¯ ’
minh là lênh này ˙ theo
˙ măc d̄inh tiê´p nhâ˙ n dòng ˙ dũ liêu nhâp vào, hãy chay lênh cat không

có tham sô ˙ tro
˙´ . Kê´t qua’ là con ˙’ chuyê’n tó
˙ i môt dòng mó ˙ i, và˙ hon nũa có ve ˙ ’ nhu
˙ không có gì
’ ’ ’ ’ ’
xa’y ra. Lúc này câu lênh chò’ các ký tu’ d̄ê´n tù’˙ d̄â`u vào tiêu chuâ’n. Hãy nhâp bâ´t kỳ ký tu’ nào,
và nó sẽ xuâ´t hiên ngay ˙ lâp túc trên màn ˙ hình, túc là chuong trình ngay lâ˙p túc d̄ua chúng ˙ tói
’ ’ ’’ ’ ’ ’
` ’˙ ˙
’ ´ ´ ˙
d̄âu ra tiêu chuân. Có thê tiêp tuc nhâp các ký tu’, và chúng cũng sẽ xuât hiên trên màn hình.
Thông thu’ò’ng bàn phím d̄u’o’c câ´˙ u hình ˙ d̄ê’ nhâp vào
˙ theo tùng dòng, vì thê´ nê´˙ u ban nhâ´n phím

˙ ˙
<Enter>, dòng ký tu’ ban vù’a nhâp sẽ d̄u’o’c d̄u’a tó’i lênh cat, và lênh này sẽ lai d̄u ˙ a dũ liêu ra
’ ’
màn hình thông qua ˙ `u ra tiêu˙ chuâ’n.˙Nhu vây, mô
˙ d̄â ˙ ˜i dòng ký tu ˙ nhâp vào ˙sẽ d̄uoc hiê˙n ra
’ ’ ’’
hay lâ`n: môt lâ`n khi gõ và lâ`n thú’ hai bo’’i câu lênh ˙ cat. Nê´u nhâ´n˙ tô’ ho ˙ p phím <Ctrl>+<D>,
˙ ˙

˙ ˙ ˙
mà dùng d̄ê’ ngù’ng viêc nhâp dũ’ liêu, chúng ta sẽ qua lai dòng nhâp lênh. Cũng có thê’ su’’
dung tô’ ho’p phím <Ctrl>+<C>, ˙ ˙ mà ˙là câu lênh trong hê vo ˙’ d̄ê’ dùng ˙chu˙ong trình d̄ang chay.
’ ’’
˙ ˙ ˙ ˙
Nê´u d̄u’a tên môt tâp tin vào làm tham sô´ cho lênh cat, thì nôi dung cu’a lênh này sẽ d̄u’˙o’c
d̄u’a tó’i d̄â`u vào˙tiêu˙ chuâ’n, tù’ d̄ó lênh cat sẽ d̄o˙ c nôi dung này˙ và d̄u’a tó’i d̄â ˙`u ra tiêu chuâ˙’n
(xem so’ d̄ô`). ˙ ˙ ˙

`u vào tiêu chuâ’n (stdin) --cat--> d¯â


Nôi dung tâp tin -> D̄â `u ra
˙ ’ ˙
tiêu chuân (stdout)

¯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. ˙ ˙ ˙

3.5.1 Su’’ dung >, < và >>


˙
¯Dê’ chuyê’n hu’ó’ng d̄â`u vào/ra, su’’ du˙ng các ký hiê˙u ">", "<" và ">>". Thu’ò’ng su’’ du˙ng viê˙c
chuyê’n hu’ó’ng d̄ũ’ liêu ra cu’a câu lênh vào tâp tin. Du’ó’i d̄ây là môt ví du tu’o’ng ú’ng:
˙ ˙ kênh ˙ giao tác ˙ ˙
maikhai@fpt:/some/where$ ls -l > /home/maikhai/ls.txt

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

3.5.2 Su’’ dung |


˙
Môt tru’ò’ng ho’p d̄ăc biêt cu’a chuyê’n hu’ó’ng d̄â`u ra là su’ tô’ chú’c các d̄u’ò’ng ô´ng (ha y còn có
thê˙’ goi là kênh ˙ giũ˙ a các

˙ chuong trình, hoăc băng chuyê
’’
˙`n). Hai hay vài câu lênh, mà d̄â`u ra
cu’a lê˙nh tru’ó’c dùng làm d̄â`u vào cho lênh˙sau, liên kê´t vó’i nhau (có thê’ nói phân ˙ cách nhau,
˙ ´ n) bo’i ký hiêu gach thă’ng d̄úng˙
nê´u muô ’ ’ - "|". Khi này d̄â`u ra tiêu chuâ’n cu’a lênh d̄ú’ng bên
˙ ˙
trái so vó’i | du’o’c chuyê’n d̄ê´n d̄â`u vào tiêu chuâ’n cu’a chu’o’ng trình, dú’ng bên pha ˙ ’ i so vói |.

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à 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.
˙ ˙ ˙ ˙
˙ ˙ ˙

3.5.3 ¯Dâ`u loc


˙
Ví du cuô´i cùng o’’ trên (ví du vó’i câu lênh grep) có thê’ dùng d̄ê’ minh hoa cho môt khái niêm
qua tro˙ ng khác, d̄ó là, d̄â`u lo˙ c chuong˙ trình. Dâ`u loc - d̄ó là lênh (hay chu ˙ ong trình),˙ ˙´ p
mà tiê
’’ ¯ ’’
˙ ˙ ˙ ˙
nhân dũ’ liêu vào, thu’c hiên môt vài biê´n d̄ô’i trên dũ’ liêu này và d̄u’a ra kê´t qua’ o’’ d̄â`u ra tiêu
˙ ’n (tù d̄ây
chuâ ˙ còn có˙ thê’ ˙chuyê˙’n d̄ê´n noi nào d̄ó theo ý˙muô´n cu’a nguòi dùng). Các câu lênh
’ ’ ’’
- d̄â`u loc bao gô`m các lênh d̄ã nói d̄ê´n o’’ trên cat, more, less, wc, cmp, diff, ˙
và ca’ nhũ˙ ng câu lênh có˙trong ba’ng 3.1

˙

Ba’ng 3.1: Các câu lênh d̄â`u loc


Lênh Mô ta’ ngă´n gon ˙ ˙
˙ ˙
grep, fgrep, egrep Tìm trong tâp tin hay dũ’ liêu d̄â`u vào các dòng có chú’a mâ˜u văn ba’n
d̄u’o’c chı’ ra và ˙ d̄ua các dòng˙này tói d̄â`u ra tiêu chuâ’n
’ ’
˙
tr Trong dũ’ liêu d̄â`u vào thay thê´ các ký tu’ o’’ ô thú’ nhâ´t bo’’i các ký tu’ tu’o’ng
ú’ng o’’ ô thú˙’ hai. Hãy thu’’ gõ lênh tr ˙abc ABC rô`i gõ vài dòng ˙ chúa

các ký tu’ abc! ˙
˙
comm So sánh hai tâp tin theo tù’ng dòng môt và d̄u’a vào d̄â`u ra tiêu chuâ’n 3
côt : môt - nhũ ˙ ng dòng chı’ găp o’ tâp tin ˙ thú nhâ´t, hai - nhũng dòng chı’
’ ’ ’ ’
gă˙ p o’’ tâ˙p tin thú’ hai, và ba - nhũ
˙ ng˙dòng có trong ca’ hai tâp tin.

˙ ˙ ’ a d̄â`u tiêu chuâ’n d̄ê’ in ´â˙n.
pr D
¯ ˙ inh da ng tâp tin hay nô i dung cu
˙ ˙’ ˙
sed Trình soan thao tâp tin theo dòng, su’’ dung d̄ê’ thu’c hiên môt vài biê´n d̄ô’i
trên dũ’ liê ˙ u d̄â`u vào
˙ (lâ´y tù tâp tin hay ˙d̄â`u vào tiêu
˙ chuâ˙ ’n)˙

˙ ˙
Môt d̄â`u loc d̄ăc biêt, câu lênh tee, nhân d̄ôi dũ’ liêu d̄â`u vào, môt măt gu’’i dũ’ liêu này
d̄ê´n d̄â`˙u ra tiêu˙ chuâ
˙ ’n, mă
˙ t khác˙ghi nó (dũ liêu) vào tâp ˙tin (nguòi dùng˙ câ`n˙ d̄ăt tên). Dê
’ ’’
˙˜ thâ´y
˙ ˙ ˙ ˙
ră`ng theo chú’c năng cu’a mình lênh tee tu’o’ng tu’ nhu’ nhóm ký tu’ chuyê’n hu’ó’ng 1>&file.
Kha’ năng cu’a d̄â`u loc có thê’ mo’’ ˙rông vó’i viêc su’’ du
˙ ng các biê’u thú˙c chính quy (d̄iê`u khiê’n),

˙ ˙
cho phép, ví du, tô’ chú’c tìm kiê´m theo các mâ˜u tìm˙ ˙ kiê´m tù d̄on gia’n d̄ê´n phúc tap và râ´t
’ ’ ’
´ ˙ ´ ’ ´ ` ` ’
phú’c tap. Nêu muôn, chúng ta có thê nói rât nhiêu vê chuyên hu’ó’ng và d̄âu loc. Nhu` ˙ ng nôi

dung này ˙ có trong phâ`n lón các cuô´n sách vê` UNIX và Linux (xem phâ`n lò˙i kê´t). Vì vâ˙y,
’ ’
chúng ta sẽ dù’ng o’’ d̄ây và chuyê’n sang môt phâ`n khác, d̄u’o’c goi là "môi tru’ò’ng và các biê ˙´ n
môi tru’ò’ng" tao bo’’i hê vo’. ˙ ˙ ˙
˙ ˙

3.6 Tham biê´n và các biê´n sô


´ . Môi tru’ò’ng cu’a hê vo’
˙
Khái niêm tham biê´n trong hê vo’ bash tu’o’ng ú’ng vó’i khái niêm biê´n sô´ trong các ngôn ngũ’
lâp trình˙ thông thu’ò’ng. Tên go ˙ i (hay ID) cu’a tham biê´n có thê ˙ ’ là môt tù bao gô`m các ký tu
’ ’
˙’ ´ ´ ˙ ’ ` ’ ˙ ´ ˙
bang chũ’ cái, chũ’ sô, dâu gach du’ó’i (chı ký tu’ d̄âu tiên cua tù’ này không d̄u’o’c là chũ’ sô), và
ca’ nhũ’ng ký tu’ sau: , , #, , - ˙(gach ngang), $,,˙0, _ (gach du’ó’i). Chúng ta nói ˙ră`ng, tham biê´n
˙ ˙ ˙
3.6 Tham biê´n và các biê´n sô
´ . Môi tru’ò’ng cu’a hê vo’ 35
˙

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 tù’ parameter, còn 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).
˙ ˙ ˙ ˙

3.6.1 Các dang tham biê´n khác nhau


˙
Tham biê´n chia thành ba dang: tham biê´n vi trí, tham biê´n d̄ăc biêt (các ký tu’ d̄ăc biêt d̄ã nói
o’’ trên chính là tên cu’a nhũ˙’ng tham biê´n này) ˙ và các biê´n sô˙´ cu’a˙ hê vo’. Tên˙ (ID)
˙ cu ˙’ a tham
biê´n vi trí gô`m môt hay vài chũ’ sô´ (nhu’ng không có tham biê´n vi trí ˙0). Giá tri cu’a tham biê´n
vi trí là˙ các tham sô
˙´ cho lênh, d̄uoc d̄ua ra khi chay hê vo’ (tham sô
’’ ’
˙´ d̄â`u tiên là giá
˙ tri cu’a tham
˙´ n 1, tham sô´ thú hai - ˙tham biê
biê ˙´ n 2, v.v. . . ). Có
˙ thê
˙’ dùng câu lênh set d̄ê’ thay ˙d̄ô’i giá tri

cu’a tham biê´n vi trí. Giá tri cu’a các tham biê´n này cũng thay d̄ô’˙i trong khi hê vo’ thu’c hiên˙
môt trong các hàm ˙ sô´ (chúng ˙ ta sẽ xem xét vâ´n d̄ê` này o’ duói). Các tham biê´n d̄ă ˙ c biêt˙ không
˙
’ ’’
gì ˙khác ho’n là các mâ˜u, mà su’ thay thê´ (phép thê´, phép hoán d̄ô’i) chúng d̄u’o’c thu ˙ c hiê

˙ n nhu

trong ba’ng 3.2: ˙ ˙ ˙ ˙
Các tham biê´n d̄ăc biêt, d̄u’o’c liêt kê o’’ ba’ng trên, có môt d̄iê’m khác biêt d̄ó là chı’ có thê’
˙
"nhă´c" d̄ê´n chúng, không ˙ thê’ gán
˙ các ˙ giá tri cho các tham ˙biê´n này. Biê´n ˙môi truòng, nhìn
’’
´ ˙ ´
tù’ phía hê vo’, d̄ó là các tham biên d̄u’o’c d̄ăt tên. Giá tri cu’a biên môi tru’ò’ng d̄u’o’c gán nhò’
thao tác có ˙ dang sau: ˙ ˙ ˙ ˙
˙
kênh giao tác
[user]$ name=value

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

Ba’ng 3.2: Thay thê´ các tham biê´n d̄ăc biêt


Tham biê´n Quy luât thay thê´ ˙ ˙
˙´ ’
* Thay thê bo’i các tham biê´n vi trí, bă´t d̄â`u tù’ tham biê´n thú’ nhâ´t. Nê´u su’
thay thê´ thu’c hiên trong dâ´u ngoă ˙ c kép, thì tham biê´n này sẽ d̄u’o’c thay˙
bo’’i môt tù’˙duy ˙nhâ ´ t, mà tao ra tù˙’ tâ
´ t ca’ các tham biê´n vi trí, phân ˙ cách
˙ ˙ ˙
nhau bo’’i ký tu’ d̄â`u tiên cu’a biê´n sô´ IFS (sẽ nói d̄ê´n o’’ sau). Tú’c là "$"
tu’o’ng d̄u’o’ng vó ˙ i "$1c$2c. . . ", trong d̄ó c - ký tu d̄â`u tiên trong giá tri
’ ’
cu’a biê´n sô´ IFS. Nê´u giá tri cu’a IFS trô´ng, hoăc˙ không d̄u’o’c xác d̄inh˙
giá tri, thì tham biê´n phân cách ˙ nhau bo’i các khoa ˙ ’ ng tră´ng. ˙ ˙

˙
@ Thay thê´ bo’’i tham biê´n vi trí, bă´t d̄â`u tù’ tham biê´n thú’ nhâ´t. Nê´u thay thê´
thu’c hiên trong ngoăc kép, ˙ thì mô˜i tham biê´n sẽ d̄uoc thay thê´ bo’i môt
’’ ’
˙ ˙ ˙ ˙ ´
tù’ riêng biêt. Tú’c là, "$@" tu’o’ng d̄u’o’ng vó’i "$1" "$2" . . . Nêu không có ˙
tham biê´n ˙vi trí, thì giá tri sẽ không d̄u’o’c thiê´t lâp (tham biê´n sẽ bi x
˙ ˙ ˙ ˙ ˙
# Thay thê´ bo’’i giá tri thâp phân cu’a các tham biê´n vi trí.
˙ ˙ ˙
? Thay thê´ bo’’i trang thái thoát ra cu’a câu lênh cuô´i cùng trong d̄u’ò’ng ô´ng,
mà d̄u’o’c thu’c hiê ˙ n trong chê´ d̄ô nê`n truó˙c.
’’
˙ ´ ’˙ ˙ ˙
- (gach ngang) Thay thê bo’i giá tri các cò’, flag, d̄u’o’c d̄ăt bo’’i lênh nôi trú set hay trong
˙ khi chay hê vo’. ˙ ˙ ˙ ˙ ˙
˙ ˙
$ Thay thê´ bo’’i sô´ cu’a tiê´n trình (PID - process identificator)
Thay thê´ bo’’i sô´ cu’a tiê´n trình (PID) cuô´i cùng trong sô´ các câu lênh thu’c
hiên trong nê`n sau. ˙ ˙
˙
0 Thay thê´ bo’’i tên hê vo’ hay tên cu’a script d̄ang chay. Nê´u bash chay
môt tâp tin lênh nào˙ d̄ó, thì $0 có giá tri bă`ng tên cu’a˙ tâp tin này. Trong ˙
tru˙’ò’ng˙ ho’p ngu˙ oc lai giá tri này bă`ng d̄u
’’
˙ òng dâ˜n d̄â`u ˙d̄u’ d̄ê´n hê vo’ (ví
’’
du, /bin/bash ˙ ˙ ˙ ˙ ˙
˙
_ (gach du’ó’i) Thay thê´ bo’’i tham sô´ cuô´i cùng cu’a câu lênh tru’ó’c trong sô´ các câu lênh
˙ d̄ã d̄u’o’c thu’c hiên (nê´u d̄ó lai là môt tham ˙ biê´n hay biê´n sô´, thì sẽ˙ su’

dung giá ˙ tri˙ cu’a ˙n ˙ ˙
˙ ˙

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 ˙ ˙
˙

3.6.2 ´ u nhă´c cu’a hê vo’


Dâ
˙
Môt trong các biê´n râ´t quan trong có tên PS1. Biê´n này cho biê´t dang cu’a dâ´u nhă´c, mà bash
d̄u’˙a ra trong khi chò’ ngu’ò’i dùng
˙ nhâp câu lênh tiê´p theo. Theo mă
˙ c d̄inh thì biê´n này d̄uoc
’’
˙ ˙ ’ ´ ˙ ˙
gán giá tri "\s-\v\$ , tuy nhiên trên các ban phân phôi khác nhau thu’ò’ng có các script ˙
˙
4
random là tù’ tiê´ng Anh có nghı̃a ngâ˜u nhiên
3.6 Tham biê´n và các biê´n sô
´ . Môi tru’ò’ng cu’a hê vo’ 37
˙

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"). ˙
˙

Ba’ng 3.3: Ký tu’ xác d̄inh dang dâ´u nhă´c


Cum ký tu’ Giá tri (kêt qua’ thu d̄u’o’c) ˙
´ ˙ ˙
˙ ˙ ˙ ˙
\a Tín hiêu âm thanh (mã ASCII 07)
˙
\d Thò’i gian o’’ dang "Thú’, tháng, ngày", ví du, Sun, Dec, 26.
˙ ˙
\h Tên máy (hostname) d̄ê´n dâ´u châ´m d̄â`u tiên.
\H Tên máy d̄â`y d̄u’, ví du teppi.phanthinh.com
˙
\t Thò’i gian hiên thò’i o’’ dang 24 giò’: HH:MM:SS (giò’:phút:giây)
˙ ˙
\T Thò’i gian hiên thò’i o’’ dang 12 giò’: HH:MM:SS
˙ ˙
\@ Thò’i gian hiên thò’i o’’ dang 12 giò’ am/pm (sáng/chiê`u)
˙ ˙
\u Tên ngu’ò’i dùng d̄ã chay hê vo’, ví du teppi
˙ ˙ ˙
\w Tên d̄â`y d̄u’ cu’a thu’ muc làm viêc hiên thò’i (bă´t d̄â`u tù’ gô´c), ví du
/home/teppi82/project/l4u ˙ ˙ ˙ ˙
\W Thu’ muc hiên thò’i (không có d̄u’ò’ng dâ˜n)
˙ ˙
\$ Ký tu’ #, nê´u hê vo’ d̄u’o’c chay bo’’i ngu’ò’i dùng root, và ký tu’ $, nê´u hê vo’
d̄u’o’c chay bo’’i ˙ngu’ò’i dùng
˙ ˙ ˙ òng.
thu ’’
˙ ˙
˙ ˙
\nnn Ký tu’ có mã hê tám nnn
˙ ˙
\n Dòng mó’i (chuyê’n dòng)
\s Tên hê vo’
˙
\# Sô´ hiên thò’i cu’a câu lênh
˙ ˙
\\ Dâ´u gach ngu’o’c (backslash)
\[ Sau ký˙ tu’ này ˙tâ´t ca’ các ký tu’ sẽ không d̄u’o’c in ra.
\] Kê´t thúc˙chuô˜i các ký tu’ không ˙ d̄uoc in ra.˙
’’
\! Sô´ thú’ tu’ cu’a lênh hiên ˙thò’i trong li˙ ch su’’ các câu lênh d̄ã dùng.
˙ ˙ ˙ ˙ ˙
Sô´ cu’a lênh (sô´ thú’ tu’ cu’a lênh d̄ang thu’c hiên trong buô’i làm viêc hiên thò’i) có thê’ khác
˙
vó’i sô´ cu’a chính nó trong ˙ danh˙ sách "lich˙ su’ các ˙ câu lênh", bo’i vì˙ danh˙ sách còn chúa ca’
’ ’ ’
nhũ’ng câu lênh d̄ã d̄u’o’c ghi lai trong tâp˙ tin lich su’’. Sau˙ khi giá tri cu’a biê´n d̄u’o’c hê vo’ d̄oc
xong, sẽ xa’y˙ ra su’ thay ˙ thê´ theo˙ các quy ˙ luât ˙mo’ rông trong ba’ng trên,

˙ d̄ô`ng thò˙’i còn
˙ xa’y ˙ra
˙ ˙ ˙
su’ thay thê´ trong tên các câu lênh, trong các biê’u thú’c sô´ hoc, và su’ chia tù’ (word splitting).
˙
Chúng ta sẽ nói d̄ê´n nhũ’ng su’ thay ˙ thê´ này o’ duói.Ví du, sau˙khi thuc˙ hiên lênh (vì trong dòng
’ ’’ ’
˙
văn ba’n có khoa’ng trô´ng, nên nhâ´t thiê´t pha’i có dâ´u ngoă ˙ c): ˙ ˙ ˙
kênh giao tác ˙
[user/root]$ PS1="[\u@\h \W]\$"
38 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). ˙ ˙ ˙ ˙

3.6.3 Biê´n môi tru’ò’ng PATH


Còn môt biê´n cũng quan trong nũ’a có tên PATH. Biê´n này d̄u’a ra danh sách d̄u’ò’ng dâ˜n
d̄ê´n các˙ thu’ muc, mà bash˙ sẽ tìm kiê´m tâp tin (tru’ò’ng ho’p riêng là các tâp tin lênh)
trong tru’ò’ng ho˙’p, d̄u’ò’ng dâ˜n d̄â`y d̄u’ d̄ê´n tâ˙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 dâ´u hai châ´m (:). Theo măc d̄inh biê´n PATH chú’a ˙
các thu’ muc /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, ˙ ˙ tú’c là có
˙
dang: /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: ¯Dê’ thêm thu’ muc
˙ danh sách này, câ`n thuc hiên câu lênh sau:
vào ˙

˙ ˙ ˙
kênh giao tác
[user]$ PATH=$PATH:new_path

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). ˙
’ ’ ’ ’
˙ ˙ ˙

3.6.4 Biê´n môi tru’ò’ng IFS


Biê´n này xác d̄inh ký tu’ (cum ký tu’) phân cách (Internal Field Separator), su’’ dung trong thao
tác phân chia tù’˙ngũ’ khi˙ biê´˙n d̄ô’i dòng
˙ lênh, mà hê vo’ thuc hiên truóc khi chay mô˙ t câu lênh nào
’ ’’
d̄ó (xem du’ó’i). Giá tri theo măc d̄inh cu’a˙ biê´n này˙- "<Khoa ˙ ’ ng_tră
˙ ´ ng><Tab><Ký_tu
˙ ˙ _hàng_mó

˙
’i>".
´ ’ ˙ ˙ ˙
Nêu thu’ gõ lênh "echo $IFS", ban sẽ nhân d̄u’o’c môt ngac nhiên nho. ’ ˙
˙ ˙ ˙ ˙ ˙ ˙

3.6.5 Thu’ muc hiên thò’i và thu’ muc cá nhân


˙ ˙ ˙
Tên cu’a thu’ muc hiên thò’i ghi trong biê´n môi tru’ò’ng vó’i tên PWD, và giá tri cu’a biê´n này thay
d̄ô’i sau mô˜i lâ`n˙ cha˙y chu’o’ng trình cd (cũng nhu’ mô˜i lâ`n thay d̄ô’i thu’ muc˙ hiên thò’i theo bâ´t
kỳ cách nào, ví du,˙ qua Midnight Commander). Tu’o’ng tu’ nhu’ vây tên d̄â`˙y d̄u’ ˙(gô`m ca’ d̄u’ò’ng
dâ˜n) cu’a thu’ muc˙cá nhân cu’a ngu’ò’i dùng, chay tiê´n trình ˙ d̄ã cho,
˙ ghi trong biê´n HOME.
˙ ˙

3.6.6 Câu lênh export


˙
Khi hê vo’ chay môt chu’o’ng trình hay câu lênh nào d̄ó, nó (hê vo’) cung câ´p cho chúng môt
˙ ´ n môi˙ truò˙ng. Dê’ có thê’ cung câ´p biê
phâ`n biê ˙ ´ n môi truòng cho
˙ tiê´n trình chay tù hê vo’, câ`˙n
’’ ¯ ’’ ’
´
gán giá tri cho biên này vó’i lênh export, tú’c là thay vì ˙ ˙
˙ ˙
kênh giao tác
[user]$ name=value

câ`n gõ:
3.7 Khai triê’n biê’u thú’c 39

kênh giao tác


[user]$ export name=value

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 ˙ ˙ ˙ ˙ ˙

3.7 Khai triê’n biê’u thú’c


Hay hê vo ’ d¯oc các câu lênh nhu’ thê ´ nào? Khi hê vo’ nhân d̄u’o’c môt dòng
lênh này d̄ó cân thu’c hiên, nó (hê vo) tru’ó’c khi chay câu lênh thu’˙c hiên viê
˙ c "phân
˙ ˙ ngũ
˙ ` ˙ ˙’
tích ’
˙
pháp" dòng lênh này ˙ (giô
˙ ´ ng trong
˙ ngôn ngũ, phân˙ tích chu
˙’ ngũ˙, vi ngũ
˙ ). ˙Môt trong nhũng
’ ’ ’ ’
˙ ˙ ˙
bu’ó’c cu’a su’ phân tích này là phép mo’’ hay khai triê’n biê’u thú’c (expansion). Trong bash có
ba’y loai khai˙ triê’n biê’u thúc:

˙
• Khai triê’n dâ´u ngoăc (brace expansion);
˙
• Thay thê´ dâ´u ngã (tilde expansion);

• Phép thê´ các tham biê´n và biê´n sô´;

• Phép thê´ các câu lênh;


˙
• Phép thê´ sô´ hoc (thu’c hiên tù’ trái sang pha’i);
˙ ˙ ˙
• Phép chia tù’ (word splitting);

• 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. ˙ ˙ ˙ ˙ ˙
˙

3.7.1 Khai triê’n dâ


´ u ngoăc
˙
Khai triê’n dâ´u ngoăc tô´t nhâ´t minh hoa trên ví du. Gia’ thiê´t, chúng ta câ`n tao thu’ muc con
trong môt thu’ muc nào ˙ d̄ó, hoăc thay d̄ô˙ ’i nguòi dùng
˙ so’ hũu cu’a vài tâp tin cùng
˙ môt lúc.
˙ Có
’’ ’ ’
thê’ thu’c˙hiên d̄iê`˙u này nhò’ các˙ câu lê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’ò’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). ˙ ˙
˙ ˙

3.7.2 Thay thê´ dâ


´ u ngã (Tilde Expansion)
Nê´u nhu’ tù’ bă´t d̄â`u vó’i ký tu’ dâ´u ngã (’∼’), tâ´t ca’ các ký tu’ d̄ú’ng tru’ó’c dâ´u gach chéo d̄â`u tiên
(hay tâ´t ca’ các ký tu’ nê´u nhu ˙ không có dâ´u gach chéo) sẽ˙d̄uoc hiê’u là tên ngu ˙ òi dùng (login
’ ’’ ’’
name). Nê´u nhu’ tên˙ này là môt dòng rô˜ng (tú’c˙ là dâ´u gach chéo ˙ d̄úng ngay phía sau dâ´u ngã),

thì dâ´u ngã sẽ d̄u’o’c thay thê´ ˙bo’’i giá tri cu’a biê´n HOME.˙ Và nê´u giá tri cu’a biê´n HOME không
d̄u’o’c gán thì dâ´u ngã ˙ sẽ d̄uoc thay thê´ ˙bo’i d̄uòng dâ˜n d̄â`u d̄u’ d̄ê´n thu ˙muc cá nhân cu’a nguòi
’’ ’ ’’ ’ ’’
dùng,˙ mà d̄ã chay hê vo’. Nê´˙u nhu ngay sau dâ´u ngã (và truóc dâ´u gach ˙chéo) là môt tù trùng
’ ’’ ’
vó’i tên cu’a môt˙ngu’˙ò’i dùng ho’p pháp, thì dâ´u ngã công vó’i tên ngu’ò˙’i dùng d̄u’o’c thay ˙ thê´ bo’i

d̄u’ò’ng dâ˜n d̄â`˙y d̄u’ d̄ê´n thu’ mu˙ c cá nhân cu’a ngu’ò’i ˙dùng này. Nê´u nhu’ tù’ d̄ú’ng ˙ sau dâ´u ngã
không pha’i là tên cu’a môt ngu˙’ò’i dùng (và không rô˜ng), thì tù’ không bi thay d̄ô’i. Nê´u nhu’ sau
dâ´u ngã là ’+’, hay ký hiê ˙ u này sẽ d̄uoc thay thê´ bo’i tên d̄â`u d̄u’ cu’a thu ˙ muc hiên thòi (túc là
’’ ’ ’ ’ ’
giá tri cu’a biê´n PWD). Nê´˙u dú’ng sau dâ ˙´ u ngã là ’-’, thì thay thê´ giá tri cu’a biê ˙ ´ n ˙OLDPWD (thu

˙
muc "cũ"). ˙
˙

3.7.3 Phép thê´ các tham biê´n và biê´n sô


´
Ký tu’ $ d̄u’o’c su’’ dung cho các thao tác thê´ tham biê´n, thê´ các câu lênh và thê´ các biê’u thú’c
sô´ ho˙c. Biê’˙u thú’c ˙hay tên d̄ú’ng sau $ có thê’ d̄u’o’c d̄u’a vào ngoăc, ˙không nhâ´t thiê´t, nhu’ng
˙ n, vì dâ´u ngoăc phân cách biê’u thúc vói các
râ´t tiê ˙ tù hay ký tu˙ d̄úng sau. Nhu vây, d̄ê’ goi
’ ’ ’ ’ ’ ’
˙ ˙
giá tri cu’a tham biê´n nói chung cũng nhu’ biê´n môi tru’ò’ng nói riêng ˙ trong dòng lênh, ˙ câ`n d̄ă˙ t
˙ c dang $parameter. Dâ´u ngoăc chı’ câ`n thiê´t, nê´u tên cu’a tham biê´n có chú
biê’u thú ˙ a vài chũ ˙
’ ’ ’
sô´, hoăc khi˙ theo sau tên còn có các ˙ký tu’ khác, mà chúng ta không muô´n hê vo’ "hiê’u lâ`m"
chúng˙là môt phâ`n cu’a tên tham biê´n. Trong ˙ tâ´t ca’ các giá tri cu’a biê´n sô´ xa’y ˙ra phép thê´ dâ´u
ngã (∼), su’˙khai triê’n tham biê´n và biê´n sô´, phép thê´ các câu˙ lênh, phép thê´ các biê’u thú’c sô´
hoc, cũng ˙nhu’ xóa các ký tu’ trích dâ˜n (xem du’ó’i). Su’ phân chia ˙ tù không xa’y ra, trù truòng
’ ’ ’’
˙ ’ ˙’ ’ ´ ˙
’ ˜
ho’p "$" (lò’i giai thích xem o’ bang sô 3). Su’ khai triên các mâu tên tâp tin và thu’ muc cũng
˙
không d̄u’o’c thu’c hiên. ˙ ˙ ˙
˙ ˙ ˙
3.7 Khai triê’n biê’u thú’c 41

3.7.4 Phép thê´ các câu lênh


˙
Phép thê´ các câu lênh là môt công cu râ´t mang cu’a bash. Ý nghı̃a cu’a nó nă`m o’’ chô˜ thay thê´
tên các câu lênh bo˙’’i kê´t qua˙’ thu’c hiê˙n cu’a chúng.
˙ Có hai dang phép thê´ lênh: $(command)
và ‘command‘ Nêu ú’ng dung dang thú’ hai (chú ý o’’ d̄ây˙su’’ dung dâ´u "ngoă
˙ ´ ˙ ˙ ˙ c d̄o’n ngu’o’c",
phím cho nó thu’ò’ng nă`m trên˙ phím˙ Tab), thì dâ´u gach ngu’o’c (\) ˙o’’ trong dâ´u ngoă ˙ c sẽ có chú
˙ c

năng nhu’ môt ký tu’ thông thu’ò’ng, trù’ tru’ò’ng ho’p,˙ khi d̄ú’ng
˙ sau nó (dâ´u gach ngu ˙ oc) là môt
’’
$, ‘, hay môt˙ \. Nê´u˙ nhu’ su’’ dung dang $(command), ˙ ˙ trong ˙ngoăc ta˙o
thì tâ´t ca’ các ký tu’ d̄ú’ng
thành môt ˙câu lênh, không có ˙ ký tu
˙ nào có ý nghı̃a d̄ăc biêt. Nê´u phép

˙ thê´ câu lênh xa ˙’ y ˙ra
˙ ˙ ˙ ˙ ˙ ˙
phía trong ngoăc kép, thì trong kê´t qua’ cu’a phép thê´ sẽ không thu’c hiên phép phân chia tù’ và
˙˜u tên tâp tin và thu muc.
su’ khai triê’n mâ ˙ ˙

˙ ˙ ˙

3.7.5 ´ hoc (Arithmetic Expansion)


Phép thê´ sô
˙
Phép thê´ sô´ hoc cho phép tính giá tri cu’a môt biê’u thú’c sô´ hoc và thay thê´ nó (biê’u thú’c)
bo’’i kê´t qua’ thu˙ d̄u’o’c. Có hai dang phép ˙ thê´ sô´˙hoc: $[expression] ˙ ((expression))
Trong d̄ó expression ˙ d̄u’o’c˙ hiê’u (d̄u’o’c bash˙ d̄oc) nhu’ khi d̄ú’ng trong ngoăc kép, nhu’ng
nhũ’ng dâ´u ngoăc kép o’’ trong˙ expression ˙ ˙ Phía trong
lai d̄u˙’o’c d̄oc nhu’ môt ký tu’ thu’ò’ng.
expression ˙có thu’c hiên các phép thê´ tham˙ biê´n˙ và thê ˙ ´ câu lê˙nh. Cú˙ pháp cu’a biê’u thúc

expression tu’o’ng˙ tu’ nhu ˙ cú pháp cu’a biê’u thúc sô´ hoc cu’a ngôn
’ ’
˙ ngũ C, cu thê’ hon vê` vâ´n
’ ’
d̄ê` này có thê’ d̄oc trong˙ phâ`n ARITHMETIC EVALUATION ˙ cu’a trang man ˙ cu’a bash. Ví
du, câu lênh ˙
˙ ˙ kênh giao tác
[user]$ echo $((2 + 3 * 5))

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.6 Phân chia tù’ (word splitting)


Sau khi thu’c hiên xong các phép thê´ tham biê´n, thê´ lênh, và thê´ các biê’u thú’c sô´ hoc, hê vo’ lai
phân tích dòng ˙ ˙lênh môt lâ`n nũa (nhung o’ dang thu˙ d̄uoc sau các phép thê´ nói trên) ˙ và ˙ thu˙c
’ ’ ’ ’’ ’
˙ ˙ ˙ ˙
` ’ ˜ ’
hiên viêc phân chia tù’ (word splitting). Thao tác này năm o’ chô, hê vo tìm trong dòng lênh ˙
tâ´t˙ ca’ các
˙ ký tu phân chia, xác d̄inh bo’i biê´n IFS (xem trên), và nhò
’ ’
˙ d̄ó chia nho’ dòng lê˙ nh

thành các tù’ riêng rẽ trong các chô tu’o’ng ú’ng. Nêu giá tri cu’a IFS bă`ng môt dòng trô´ng,˙thì
˙ ˙ ˜ ´
viêc phân chia tù’ sẽ không xa’y ra. Nê´u trong dòng lênh không˙ ˙ thê´ nào trong
thu’c hiên phép
˙ ˙
các phép thê´ kê’ trên, thì phân chia tù’ cũng không xa’y ra. ˙ ˙

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

Ba’ng 3.4: Các ký tu’ tao mâ˜u


Ký tu’ Quy luât thay thê´ ˙ ˙
˙ ˙
* Tu’o’ng ú’ng vó’i bâ´t kỳ dòng ký tu’ nào, kê’ ca’ dòng rô˜ng. Ví du, v*.txt
sẽ d̄u’o’c thay thê´ bo’’i vnoss.txt, ˙ vnlinux.txt và vntex.txt ˙
(nê´u các˙ tâp tin này tô`n tai), và *.png sẽ tuong úng tâ´t ca’ các tâp tin có
’’ ’
phâ`n mo’’ rô ˙ ng png (tâp tin˙ d̄ô` hoa hai chiê`u). ˙
˙ ˙ ˙
? Tu’o’ng ú’ng bâ´t ký môt ký tu’ d̄o’n nào. Ví du, mâ˜u
file?.txt sẽ d̄u’o’c ˙ thaythê´ ˙ bo’’i các tên tê˙p sau
file1.txt, file2.txt, ˙ file3.txt, và ˙
filea.txt
(nê´u chúng tô`n tai), nhu’ng file23.txt thì không.
˙
[...] Tu’o’ng ú’ng bâ´t kỳ ký tu’ nào trong sô´ các ký tu’ nă`m trong dâ´u ngoăc
vuông này. Căp ký tu’, phân ˙ cách nhau bo’’i dâ ´ u ˙trù’ (-), ví du c-f, biê˙’u
thi môt dãy; bâ ˙´ t ký ký
˙ tu nào, theo tù d̄iê’n, nă`m giũa hai ký tu ˙ này, kê’ ca’
’ ’ ’ ’
hai ký tu’ tao ra dãy (c và f trong ví du) cũng tu’o’ng ú’ng vó’˙i mâ˜u. Nê´u
˙ ˙ ˙
ký tu’ d̄â`˙u tiên
˙ trong ngoăc vuông là hay˙ ,̂ thì mâ˜u (o’ vi trí này) sẽ tuong
’ ’’
˙ d̄uoc chı’ ra trong ngo
ú’ng ˙tâ´t ca’ các ký tu’, không ’’
˙
˙ ˙

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]??

3.7.8 Xóa các ký tu’ d̄ăc biêt


˙ ˙ ˙
Sau khi làm xong tâ´t ca’ các phép thê´, các ký tu’ \, ‘ và " còn lai trong dòng lênh (chúng
d̄u’o’c su’’ dung d̄ê’ huy’ bo’ giá tri d̄ăc biêt cu’a các˙ký tu’ khác) sẽ bi xóa
˙ hê´t. ˙
˙ ˙ ˙ ˙ ˙ ˙ ˙

3.8 Shell - môt ngôn ngũ’ lâp trình


˙ ˙
Nhu’ d̄ã nói o’’ trên, d̄ê’ có thê’ xây du’ng bâ´t kỳ gia’i thuât nào, cũng câ`n có các toán tu’’ kiê’m tra
d̄iê`u kiên. Hê vo’ bash hô˜ tro’ các˙ toán tu’’ lu’a chon if...then...else
˙ và case, cũng
˙ ˙ ’ ˙ ˙ ˙
nhu’ các toán tu’ vòng lăp for, while, until, nhò’ d̄ó nó (bash) tro’ thành môt ngôn ’
ngũ’ lâp trình manh. ˙ ˙
˙ ˙

3.8.1 Toàn tu’’ if và test (hoăc [ ])


˙
Câ´u trúc cu’a toán tu’’ d̄iê`u kiên có dang thu gon nhu’ sau: if list1 then list2 else list3
fi trong d̄ó, list1, list2, ˙ và list3
˙ là ˙các chuô˜i câu lênh, phân cách nhau bo’’i dâ´u
˙
3.8 Shell - môt ngôn ngũ’ lâp trình 43
˙ ˙

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.

3.8.2 Toán tu’’ test và d̄iê`u kiên cu’a biê’u thú’c


˙
Biê’u thú’c d̄iê`u kiên, su’’ dung trong toán tu’’ test, d̄u’o’c xây du’ng trên co’ so’’ kiê’m tra thuôc
˙ các dòng ˙ ˙ ˙
tính tâp tin, so sánh và các so sánh sô´ hoc thông thu˙’ò’ng. Biê’u thú’c phú’c tap ho’n
˙ ˙ ˙
d̄u’o’c tao ra tù’ các thao tác d̄o’n và kép sau ("nhũ’ng viên gach co’ so’’"):
˙ ˙ ˙
• -a file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i.
• -b file
¯Dúng nê´u file tô`n ta˙i, và là mô˙t tâ˙p tin thiê´t bi˙ khô´i (block device) d̄ă˙c biê˙t.
• -c file
¯Dúng nê´u file tô`n ta˙i, và là mô˙t tâ˙p tin thiê´t bi˙ ký tu˙’ (charater device) d̄ă˙c biê˙t.
• -d file
¯Dúng nê´u file tô`n ta˙i và là mô˙t thu’ mu˙c.
• -e file
¯Dúng nê´u tâ˙p tin có tên file tô`n ta˙i.
44 Bash

• -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
˙ ˙

• file1 -ot file2


¯Dúng, nê´u tâ˙p tin file1 "già" ho’n file1 (tru’ò’ng ho˙’p ngu’o˙’c la˙i cu’a tru’ò’ng ho˙’p trên).

• file1 -ef file2


¯Dúng, nê´u tâ˙p tin file1 và file2 có cùng mô˙t sô´ thiê´t bi˙ và chı’ sô´ mô ta’ inode.

• -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 =.

• string1 !== string2


¯Dúng, nê´u hai chuô˜i không trùng nhau.

• string1 < string2


¯Dúng, nê´u chuô˜i string1, theo tù’ d̄iê’n, d̄ú’ng tru’ó’c chuô˜i string2 (d̄ô´i vó’i ngôn
ngũ’ hiên thò’i).
˙
• string1 > string2
¯Dúng, nê´u chuô˜i string1, theo tù’ d̄iê’n, d̄ú’ng sau chuô˜i string2 (d̄ô´i vó’i ngôn ngũ’
hiên thò’i).
˙
• arg1 OP arg2
’’ d̄ây OP là môt trong các phép so sánh sô´ hoc: -eq (bă`ng), -ne (khác, không bă`ng),
O
-lt (nho’ ho’n),˙ -le (nho’ ho’n hoăc bă`ng), -gt ˙ (lón hon), -ge (lón hon hoăc bă`ng).
’ ’ ’ ’
˙ ˙
’’ chô˜ các tham sô´ arg1 và arg2 có thê’ su’’ dung các sô´ nguyên (âm hoăc du’o’ng).
O
˙ ˙

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

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 lênh case d̄â`u tiên khai triê’n tù’ word, và so sánh nó (word) vó’i mô˜i tù’ trong mâ˜u
pattern ˙ theo thú tu. Sau khi tìm thâ´y su trùng nhau d̄â`u tiên thì dùng viêc so sánh lai, và
’ ’ ’ ’
˙
thu’c hiên danh sách list ˙ ’ lai bo’i toán
các câu lênh d̄ú˙’ng sau mâ˜u d̄ã tìm thâ´y. Giá tri tra ˙ tu’
’ ’
˙ bă`ng
này, ˙ 0, nê´u không tìm thâ´y su trùng
˙ nhau nào. Trong tru’ò’ng ho’p ngu’o˙’c lai,˙ tra’ lai giá tri

mà câu lênh cuô´i cùng trong danh˙ sách list d̄u’a ra. Ví du su’’ dung˙ toán tu ˙’ case

˙ ˙ lâ´y tù˙
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

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.
˙ ˙ ˙ ˙ ˙ ˙ ˙

˙ ˙ ˙

3.8.4 Toán tu’’ select


Toán tu’’ select cho phép tô’ chú’c hôi thoai vó’i ngu’ò’i dùng. Nó có dang sau:
˙ ˙ ˙
select name [ in word; ] do list; done
Lúc d̄â`u tù’ mâ˜u word hình thành môt danh sách nhũ’ng tù’ tu’o’ng ú’ng vó’i mâ˜u này. Tâp
ho’p nhũ’ng tù’ này d̄u’o’c d̄u’a vào kênh thông ˙ báo lô˜i tiêu chuâ’n, hon nũa mô˜i tù d̄uoc d̄i kèm ˙
’ ’ ’ ’’
˙ ˙
vó’i môt sô´ thú’ tu’. Nê´u mâ˜u word bi bo’ qua (không có trong toán tu’’ select), thì sẽ d̄u’a vào ˙
các tham ˙ biê´n vi˙ trí (xem trên) theo˙ môt cách tuong tu. Sau d̄ó, dâ´u nhă´c PS3 d̄uoc d̄ua ra,
’’ ’ ’’ ’
và hê vo’ chò’ chuô ˙ ˜i nhâp vào trên d̄â`u vào˙ tiêu chuâ’n. Nê
˙ ´ u chuô˜i nhâp vào có chúa˙sô´, tuong
’ ’’
˙ ˙ ´ ´ ˙ `
ú’ng vó’i môt trong các sô d̄ã hiên ra, thì biên name sẽ d̄u’o’c gán giá tri băng tù’ d̄i kèm vó’i sô´
này. Nê´u nhâ˙ p vào môt dòng rô˙˜ng, thì sô´ và tù sẽ d̄uoc hiê ˙ n ra them ˙môt lâ`n nũa. Nê´u nhâp
’ ’’ ’
vào bât kỳ môt giá tri nào khác, thì biên name sẽ nhân giá tri băng không. Chuô˜i mà ngu’˙ò’i
´ ˙ ˙ ´ ˙ ˙ ` ˙
dùng nhâp vào, ˙ d̄uoc ˙ghi lai trong biê´n REPLY. Danh ˙sách lênh ˙ list d̄uoc thuc hiên vói giá
’’ ’’ ’ ’
˙
tri biê´n name d̄ã cho˙ n. Sau˙ d̄ây là môt script nho’ (xin hãy gõ˙ không dâ´u nê ˙´ u console
˙ ˙ cu’a ban
chu˙ a hô˜ tro viêc hiê’n˙ thi Tiê´ng Viêt):˙ ˙
’ ’
˙ ˙ ˙ ˙
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" "Other";
break
done
echo "Ban d¯ã chon $var"
˙ ˙
3.8 Shell - môt ngôn ngũ’ lâp trình 47
˙ ˙

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: ˙ ˙

kênh giao tác


Ban d¯ã chon MacOSX
˙ ˙

3.8.5 Toán tu’’ for


Toán tu’’ for làm viêc có khác môt chút so vó’i for trong các ngôn ngũ’ lâp trình thông thu’ò’ng.
˙ ’ m giá tri cu
Thay vì tăng hoăc gia ˙’ a môt biê´n sô´ nào d̄ó (lên hoăc xuô´ng)
˙ môt d̄on vi sau mô˜i

vòng lăp, thì nó˙gán giá tri tiê´˙p theo ˙trong danh sách tù’ ˙d¯u’a să ˙ biê´n˙d̄ó trong
˜n cho
˙ lăp. Nói chung câ
mô˜i vòng ˙´ u trúc có dang sau:
˙ ˙
for name in words do list done
Quy luât xây du’ng danh sách lênh (list) giô´ng trong toán tu’’ if. Ví du. Script sau tao
các tâp tin ˙fu1, fu2,
˙ và fu3: ˙ ˙ ˙
˙
kênh giao tác
for a in 1 2 3 ; do
touch fu$a
done

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

3.8.6 Toán tu’’ while và until


Toán tu’’ while làm viêc tu’o’ng tu’ nhu’ if, nhu’ng vòng lăp các câu lênh trong list2 chı’
thu’c hiên khi d̄iê`u kiên˙ còn d̄úng,˙ và sẽ ngù’ng khi d̄iê`u kiê
˙ n không tho
˙ ’ a mãn. Câ´u trúc có
˙ ˙
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 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.
˙

3.9 Script cu’a hê vo’ và lênh source


˙ ˙
Script cu’a hê vo’ chı’ là các tâp tin có chú’a chuô˜i lênh. Tu’o’ng tu’ hàm sô´ script có thê’ d̄u’o’c
thu’c hiên nhu ˙ môt câu lênh. Cú˙ pháp truy câp d̄ê´n các˙ tham sô´ cũng˙ nhu’ hàm sô´. Trong các ˙

tru˙’ò’ng ˙ho’p thông˙ thu’ò’ng˙ khi chay script sẽ ˙có môt tiê´n trình mó’i d̄u’o’c chay. ¯Dê’ có thê’ thu’c
hiên script ˙ o’ trong ba’n bash hiê˙n thòi, câ`n su’ dung ˙ câu lênh source, ˙ hay˙môt dâ´u châ´m "."˙
’ ’ ’
˙`ng nghı̃a cu’a source). Trong˙ truòng hop này˙script chı
(d̄ô ˙’ d̄on gia’n là môt tham
˙ sô´ cu’a lênh
’’ ’ ’
nói trên. Câu lênh sẽ có dang: ˙ ˙ ˙
source filename˙ ˙ [arguments]
Câu lênh này d̄oc và thu’c hiên các câu lênh có trong tâp tin filename trong môi tru’ò’ng
hiên thò’i,˙và tra’ lai ˙giá tri, xác
˙ d̄i˙nh bo’i câu lê

˙ nh cuô´i cùng˙ cu’a filename. Nê´u filename
˙
không chú’a dâ´u ˙gach chéo,
˙ thì ˙d̄uòng dâ˜n, ˙liêt kê trong biê´n sô´ PATH, sẽ d̄uoc su’ dung d̄ê’
’’ ’’ ’
tìm tâp tin có tên ˙filename. Tâp tin này không ˙ ˙ nhâ´˙t thiê´t
nhâ´t thiê´t pha’i kha’ thi (không
˙ ˙
pha’i có bit x). Nê´u trong thu’ muc, liêt kê trong PATH, không tìm thâ´y tâp tin câ`n, thì sẽ tìm
nó (tâp tin) trong thu’ muc hiên ˙thò’i. ˙Nê´u có các tham sô´ (d̄u’a ra arguments, ˙ xem d̄inh dang
˙ ˙ ˙ ˙ ˙
50 Bash

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
˙ ˙ ˙ ˙ ˙ ˙

3.10 Câu lênh sh


˙
Ban luôn luôn có thê’ chay môt ba’n sao cu’a hê vo’ bash nhò’ câu lênh bash hay sh. Khi này
có˙ thê’ bă´t ba’n sao này cha ˙ y ˙môt script nào d̄ó, ˙ nê´u d̄ua tên cu’a script

˙ nhu’ môt tham sô´ cho
lênh bash. Nhu’ vây, d̄ê thu’c hiên script myscript cân d̄u’a câu lênh "sh ˙ myscript".
’ ˙ ˙ `
˙ ´ u xem nôi dung˙ cu’a môt˙ tâp ˙tin script nào d̄ó (nhũng tâp tin nhu˙ vây có râ´t nhiê`u trên
Nê ’ ’
hê thô´ng), ba ˙ n sẽ thâ´y dòng ˙ d̄â˙`u tiên có dang sau: #!/bin/sh. ˙ D `
iê ˙ có nghı̃a là, khi
u này
˙ ¯
chúng ta goi˙script d̄ê’ thu’c hiên nhu’ môt lê˙nh thông thu’ò’ng, thì /bin/sh sẽ giúp chúng ta
"thu xê´p" mo ˙ i thú. Có thê ˙ ’ thay˙ thê´ dòng˙ này˙ bo’i liên kê´t d̄ê´n bâ´t kỳ môt chuong trình nào,
’ ’ ’’
˙ ˙
mà sẽ d̄oc tâp tin và thu’c hiên các câu lênh tu’o’ng ú’ng. Ví du, script trên ngôn ngũ’ Perl bă´t
d̄â`u bo’’i ˙dòng˙ có dang !/bin/perl.
˙ ˙ ˙ t chú ý khác là ký ˙tu # dùng d̄ê’ viê´t lòi chú thích
Mô ’ ’
trong script. Tâ´t ca’ nhũ’ng gì d̄ú’ng sau ký ˙tu’ này d̄ê´n cuô´i dòng˙sẽ d̄u’o’c coi là chú thích và bi
˙
bash bo’ qua (tú’c là hê vo’ sẽ không xem dòng ˙ này là câu lênh). Nê´u˙ ban muô´n kiê’m chú’ng˙
lai tác dung cu’a ký tu’ ˙này, thì hãy nhâp vào dòng lênh môt˙ câu lênh bâ´˙t kỳ, và d̄ăt tru’ó’c nó
˙ lênh)
(câu ˙ ký tu #, ví˙du "# ls", ban˙sẽ thâ´y ră`ng hê ˙ vo’ bo ˙’ qua câu ˙ lênh này. ˙
’ ’
˙
Chúng ta sẽ˙ dù’ng bài
˙ hoc ngă´n go ˙ n vê` bash tai d̄ây.
˙ Tâ´t nhiên, còn˙ râ´t nhiê`u vâ´n d̄ê` quan
trong câ`n xem xét nhu’ng nă`˙m ngoài pha ˙ m vi cu’a bài˙ hoc, ví du, qua’n lý tiê´n trình, lich su’ câu

˙ ’ ` ˙ ˙ ˙ ´
lênh, mô ta vê thu’ viên readline, tín hiêu, v.v. . . Các ban sẽ tìm thây thông tin cân thiêt trong ` ˙ ´
˙ cuô´n huóng dâ˜n ˙khác hoăc trên trang
các ˙ man bash.˙
’’
˙
3.10 Câu lênh sh 51
˙

You might also like