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