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
1 HD¯ H Linux: li
˙
ch su’’ và các ba’n phân phoˆ´ i 2
2 Cài d¯a˘
˙
t HD¯ H Linux trên cùng máy tính vo´’i Windows 3
2.1 Chuaˆ’n bi
˙
cài d¯a˘
˙
t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Phòng xa và nhu˜’ng lo`’i khuyên . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ
˙
ng . . . . . . . . . . . . . . . . . . 6
2.3.1 Theˆ´ nào là caˆ´u trúc "hình ho
˙
c cu’a d¯ı˜a" . . . . . . . . . . . . . . . . 6
2.3.2 Phân vùng và ba’ng phân vùng cu’a d¯ı˜a . . . . . . . . . . . . . . . . 7
2.3.3 Quá trình kho’’i d¯oˆ
˙
ng HD¯ H công ty Microsoft . . . . . . . . . . . . 8
2.3.4 Vaˆ´n d¯eˆ` vo´’i các d¯ı˜a lo´’n . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Lu
˙
’a cho
˙
n trình kho’’i d¯oˆ
˙
ng . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Trình kho’’i d¯oˆ
˙
ng LILO cu’a HD¯ H Linux . . . . . . . . . . . . . . . 11
2.4.2 Các trình kho’’i d¯oˆ
˙
ng khác . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 Các phu’o’ng án kho’’i d¯oˆ
˙
ng . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Chuaˆ’n bi
˙
các phân vùng trên d¯ı˜a . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.1 Lo`’i khuyên khi ta
˙
o phân vùng . . . . . . . . . . . . . . . . . . . . 14
2.5.2 Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯ı˜a . . . . . . . . . . . . . . . . . . . 17
2.6 Windows NT và Linux: kho’’i d¯oˆ
˙
ng qua OS Loader cu’a NT . . . . . . . . . 17
2.7 Su’’du
˙
ng trình kho’’i d¯oˆ
˙
ng LILO . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7.1 Cài d¯a˘
˙
t và caˆ´u hình LILO . . . . . . . . . . . . . . . . . . . . . . . 20
2.7.2 Cài d¯a˘
˙
t các heˆ
˙
d¯ieˆ`u hành khác sau Linux . . . . . . . . . . . . . . . 23
2.7.3 Chuyeˆ’n thu’mu
˙
c /boot lên phân vùng DOS . . . . . . . . . . . . . 23
2.8 Kho’’i d¯oˆ
˙
ng Linux tu`’MS-DOS ba˘`ng loadlin.exe . . . . . . . . . . . . . . . 24
3 Bash 27
3.1 Heˆ
˙
vo’ là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Các ký tu
˙
’d¯a˘
˙
c bieˆ
˙
t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Thu
˙
’c thi các câu leˆ
˙
nh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Thao tác ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2 Thao tác & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.3 Thao tác && và || . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 D¯ aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.1 Dòng du˜’lieˆ
˙
u vào-ra . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.2 Leˆ
˙
nh echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.3 Leˆ
˙
nh cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
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
3.5.1 Su’’du
˙
ng >, < và >> . . . . . . . . . . . . . . . . . . . . . . . . . . 31
MU
˙
C LU
˙
C iii
3.5.2 Su’’du
˙
ng | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5.3 D¯ aˆ`u lo
˙
c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Tham bieˆ´n và các bieˆ´n soˆ´ . Môi tru’o`’ng cu’a heˆ
˙
vo’ . . . . . . . . . . . . . . . 34
3.6.1 Các da
˙
ng tham bieˆ´n khác nhau . . . . . . . . . . . . . . . . . . . . 35
3.6.2 Daˆ´u nha˘´c cu’a heˆ
˙
vo’ . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6.3 Bieˆ´n môi tru’o`’ng PATH . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.4 Bieˆ´n môi tru’o`’ng IFS . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6.5 Thu’mu
˙
c hieˆ
˙
n tho`’i và thu’mu
˙
c cá nhân . . . . . . . . . . . . . . . . 38
3.6.6 Câu leˆ
˙
nh export . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.7 Khai trieˆ’n bieˆ’u thu´’c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.1 Khai trieˆ’n daˆ´u ngoa˘
˙
c . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.2 Thay theˆ´ daˆ´u ngã (Tilde Expansion) . . . . . . . . . . . . . . . . . 40
3.7.3 Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ´ . . . . . . . . . . . . . . . . . . 40
3.7.4 Phép theˆ´ các câu leˆ
˙
nh . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.7.5 Phép theˆ´ soˆ´ ho
˙
c (Arithmetic Expansion) . . . . . . . . . . . . . . . 41
3.7.6 Phân chia tu`’(word splitting) . . . . . . . . . . . . . . . . . . . . . 41
3.7.7 Khai trieˆ’n các maˆ˜u tên taˆ
˙
p tin và thu’mu
˙
c (Pathname Expansion) . . 41
3.7.8 Xóa các ký tu
˙
’d¯a˘
˙
c bieˆ
˙
t . . . . . . . . . . . . . . . . . . . . . . . . 42
3.8 Shell - moˆ
˙
t ngôn ngu˜’laˆ
˙
p trình . . . . . . . . . . . . . . . . . . . . . . . . 42
3.8.1 Toàn tu’’if và test (hoa˘
˙
c [ ]) . . . . . . . . . . . . . . . . . . . . . . 42
3.8.2 Toán tu’’test và d¯ieˆ`u kieˆ
˙
n cu’a bieˆ’u thu´’c . . . . . . . . . . . . . . . . 43
3.8.3 Toán tu’’case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.8.4 Toán tu’’select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.8.5 Toán tu’’for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.8.6 Toán tu’’while và until . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.8.7 Các hàm soˆ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.8.8 Tham soˆ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.9 Script cu’a heˆ
˙
vo’ và leˆ
˙
nh source . . . . . . . . . . . . . . . . . . . . . . . . 49
3.10 Câu leˆ
˙
nh sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Danh sách ba’ng
2.1 Caˆ´u trúc cu’a sector kho’’i d¯oˆ
˙
ng chính . . . . . . . . . . . . . . . . . . . . . 9
2.2 Nhu caˆ`u su’’du
˙
ng không gian d¯ı˜a cu’a HD¯ H . . . . . . . . . . . . . . . . . . 15
3.1 Các câu leˆ
˙
nh d¯aˆ`u lo
˙
c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Thay theˆ´ các tham bieˆ´n d¯a˘
˙
c bieˆ
˙
t . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Ký tu
˙
’xác d¯i
˙
nh da
˙
ng daˆ´u nha˘´c . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4 Các ký tu
˙
’ta
˙
o maˆ˜u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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
http://phoc.minidns.net 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 LATEX. 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 teppi@vnlinux.org 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ı’ teppi@vnlinux.org.
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ònphânvùnglôgícthìcócáctên: /dev/hda5, /dev/hda6, /dev/
. . . (ba˘´t d¯aˆ`u tu`’soˆ´ 5). Tu`’nhu˜’ng gì d¯eˆ` caˆ
˙
p d¯eˆ´n o’’trên có theˆ’suy ra 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 2.1 cho thaˆ´y caˆ´u trúc cu’a sector kho’’i d¯oˆ
˙
ng chính sau khi cài d¯a˘
˙
t Windows.
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 VIE
multi(0)disk(0)rdisk(0)partition(3)WINNT="Windows NT Workstation 4.00 VIE
C:="Microsoft Windows"
C:BOOTSECT.LNX="Linux"
Neˆ´u ngu’o`’i dùng 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
ftp://metalab.unc.edu/. 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 2.2.
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
(http://www.powerquest.com) 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ˆ’ghinoˆ
˙
idung sectorkho’’id¯oˆ
˙
ng cu’ad¯ı˜a /dev/hda3 vàotaˆ
˙
ptin /mnt/floppy/bootsect.lnx.
1
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’
sau2
:
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 2.3 và 2.5.
3. Cài d¯a˘
˙
t Linux theo chı’ daˆ˜n d¯i kèm vo´’i ba’n phân phoˆ´ i. Caˆ`n nho´’ra˘`ng, neˆ´u 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.3
4. Bu’o´’c tieˆ´p theo caˆ`n caˆ´u hình LILO d¯eˆ’ có theˆ’ kho’’i d¯oˆ
˙
ng các HD¯ H theo lu
˙
’a cho
˙
n. LILO
d¯u’o
˙
’c caˆ´u hình ba˘`ng taˆ
˙
p tin /etc/lilo.conf và câu leˆ
˙
nh /sbin/lilo. Câu leˆ
˙
nh này
dù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. Saukhisu’’axong taˆ
˙
ptin /etc/lilo.conf theoýmuoˆ´ n,caˆ`ncha
˙
ycâuleˆ
˙
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 (lermen@elserv.ffm.fgan.de) 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.4
Loadlin.exe cung caˆ´p cách kho’’i d¯oˆ
˙
ng Linux tu`’ oˆ’ cu´’ng an toàn nhaˆ´t, khi có phân vùng
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)5
.
• 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óiLOADLIN16.TGZ.Góinénnàycònchu´’ahu’o´’ngdaˆ˜nsu’’du
˙
ngDOCMANUAL.TXT,
taˆ
˙
ptinthamsoˆ´ vídu
˙
DOCTEST.PAR,vàhu’o´’ngdaˆ˜ncáchd¯u’acácthamsoˆ´ DOCPARAMS.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.5)
2. Cài d¯a˘
˙
t Linux vào phân vùng d¯ã chia. LILO caˆ`n cài d¯a˘
˙
t vào sector d¯aˆ`u tiên cu’a phân
vùng Linux d¯eˆ’ không ghi d¯è lên MBR và không bi
˙
maˆ´t kha’ na˘ng kho’’i d¯oˆ
˙
ng vào
Windows.
3. Sau khi keˆ´t thúc phaˆ`n cài d¯a˘
˙
t hãy kho’’i d¯oˆ
˙
ng Linux (neˆ´u không có cách nào khác, hãy
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/Bo
HOWTO.html
26 Cài d¯a˘
˙
t HD¯ H Linux trên cùng máy tính vo´’i Windows
Bây gio`’ 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 http://www.gnu.org/) 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ácthaotác&&và||lánhu˜’ngthaotácd¯ieˆ`ukhieˆ’n. Neˆ´utrêndòngleˆ
˙
nhlà 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ˆ´t1
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 ls2
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´’hai3
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 3.1
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 3.2:
Các tham bieˆ´n d¯a˘
˙
c bieˆ
˙
t, d¯u’o
˙
’c lieˆ
˙
t kê o’’ ba’ng trên, có moˆ
˙
t d¯ieˆ’m khác bieˆ
˙
t d¯ó là chı’ có theˆ’
"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ên4
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 3.3 (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¯ó(xemdu’o´’i). Giátri
˙
theoma˘
˙
cd¯i
˙
nhcu’abieˆ´nnà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 3.4
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";
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

Linux cho nguoi_moi_dung

  • 1.
    Linux cho ngu’o`’idùng Tác gia’: Kostromin V. A. Di ˙ ch bo’’i: Phan Vı˜nh Thi ˙ nh
  • 2.
    Mu ˙ c lu ˙ c 1 HD¯H Linux: li ˙ ch su’’ và các ba’n phân phoˆ´ i 2 2 Cài d¯a˘ ˙ t HD¯ H Linux trên cùng máy tính vo´’i Windows 3 2.1 Chuaˆ’n bi ˙ cài d¯a˘ ˙ t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Phòng xa và nhu˜’ng lo`’i khuyên . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ ˙ ng . . . . . . . . . . . . . . . . . . 6 2.3.1 Theˆ´ nào là caˆ´u trúc "hình ho ˙ c cu’a d¯ı˜a" . . . . . . . . . . . . . . . . 6 2.3.2 Phân vùng và ba’ng phân vùng cu’a d¯ı˜a . . . . . . . . . . . . . . . . 7 2.3.3 Quá trình kho’’i d¯oˆ ˙ ng HD¯ H công ty Microsoft . . . . . . . . . . . . 8 2.3.4 Vaˆ´n d¯eˆ` vo´’i các d¯ı˜a lo´’n . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4 Lu ˙ ’a cho ˙ n trình kho’’i d¯oˆ ˙ ng . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.1 Trình kho’’i d¯oˆ ˙ ng LILO cu’a HD¯ H Linux . . . . . . . . . . . . . . . 11 2.4.2 Các trình kho’’i d¯oˆ ˙ ng khác . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.3 Các phu’o’ng án kho’’i d¯oˆ ˙ ng . . . . . . . . . . . . . . . . . . . . . . 14 2.5 Chuaˆ’n bi ˙ các phân vùng trên d¯ı˜a . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.1 Lo`’i khuyên khi ta ˙ o phân vùng . . . . . . . . . . . . . . . . . . . . 14 2.5.2 Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯ı˜a . . . . . . . . . . . . . . . . . . . 17 2.6 Windows NT và Linux: kho’’i d¯oˆ ˙ ng qua OS Loader cu’a NT . . . . . . . . . 17 2.7 Su’’du ˙ ng trình kho’’i d¯oˆ ˙ ng LILO . . . . . . . . . . . . . . . . . . . . . . . . 20 2.7.1 Cài d¯a˘ ˙ t và caˆ´u hình LILO . . . . . . . . . . . . . . . . . . . . . . . 20 2.7.2 Cài d¯a˘ ˙ t các heˆ ˙ d¯ieˆ`u hành khác sau Linux . . . . . . . . . . . . . . . 23 2.7.3 Chuyeˆ’n thu’mu ˙ c /boot lên phân vùng DOS . . . . . . . . . . . . . 23 2.8 Kho’’i d¯oˆ ˙ ng Linux tu`’MS-DOS ba˘`ng loadlin.exe . . . . . . . . . . . . . . . 24 3 Bash 27 3.1 Heˆ ˙ vo’ là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2 Các ký tu ˙ ’d¯a˘ ˙ c bieˆ ˙ t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.3 Thu ˙ ’c thi các câu leˆ ˙ nh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.1 Thao tác ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.2 Thao tác & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.3 Thao tác && và || . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.4 D¯ aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.1 Dòng du˜’lieˆ ˙ u vào-ra . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.2 Leˆ ˙ nh echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.4.3 Leˆ ˙ nh cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 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 3.5.1 Su’’du ˙ ng >, < và >> . . . . . . . . . . . . . . . . . . . . . . . . . . 31
  • 3.
    MU ˙ C LU ˙ C iii 3.5.2Su’’du ˙ ng | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.5.3 D¯ aˆ`u lo ˙ c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.6 Tham bieˆ´n và các bieˆ´n soˆ´ . Môi tru’o`’ng cu’a heˆ ˙ vo’ . . . . . . . . . . . . . . . 34 3.6.1 Các da ˙ ng tham bieˆ´n khác nhau . . . . . . . . . . . . . . . . . . . . 35 3.6.2 Daˆ´u nha˘´c cu’a heˆ ˙ vo’ . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.6.3 Bieˆ´n môi tru’o`’ng PATH . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6.4 Bieˆ´n môi tru’o`’ng IFS . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6.5 Thu’mu ˙ c hieˆ ˙ n tho`’i và thu’mu ˙ c cá nhân . . . . . . . . . . . . . . . . 38 3.6.6 Câu leˆ ˙ nh export . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.7 Khai trieˆ’n bieˆ’u thu´’c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7.1 Khai trieˆ’n daˆ´u ngoa˘ ˙ c . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.7.2 Thay theˆ´ daˆ´u ngã (Tilde Expansion) . . . . . . . . . . . . . . . . . 40 3.7.3 Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ´ . . . . . . . . . . . . . . . . . . 40 3.7.4 Phép theˆ´ các câu leˆ ˙ nh . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.7.5 Phép theˆ´ soˆ´ ho ˙ c (Arithmetic Expansion) . . . . . . . . . . . . . . . 41 3.7.6 Phân chia tu`’(word splitting) . . . . . . . . . . . . . . . . . . . . . 41 3.7.7 Khai trieˆ’n các maˆ˜u tên taˆ ˙ p tin và thu’mu ˙ c (Pathname Expansion) . . 41 3.7.8 Xóa các ký tu ˙ ’d¯a˘ ˙ c bieˆ ˙ t . . . . . . . . . . . . . . . . . . . . . . . . 42 3.8 Shell - moˆ ˙ t ngôn ngu˜’laˆ ˙ p trình . . . . . . . . . . . . . . . . . . . . . . . . 42 3.8.1 Toàn tu’’if và test (hoa˘ ˙ c [ ]) . . . . . . . . . . . . . . . . . . . . . . 42 3.8.2 Toán tu’’test và d¯ieˆ`u kieˆ ˙ n cu’a bieˆ’u thu´’c . . . . . . . . . . . . . . . . 43 3.8.3 Toán tu’’case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.8.4 Toán tu’’select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.8.5 Toán tu’’for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.8.6 Toán tu’’while và until . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.8.7 Các hàm soˆ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.8.8 Tham soˆ´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 3.9 Script cu’a heˆ ˙ vo’ và leˆ ˙ nh source . . . . . . . . . . . . . . . . . . . . . . . . 49 3.10 Câu leˆ ˙ nh sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
  • 4.
    Danh sách ba’ng 2.1Caˆ´u trúc cu’a sector kho’’i d¯oˆ ˙ ng chính . . . . . . . . . . . . . . . . . . . . . 9 2.2 Nhu caˆ`u su’’du ˙ ng không gian d¯ı˜a cu’a HD¯ H . . . . . . . . . . . . . . . . . . 15 3.1 Các câu leˆ ˙ nh d¯aˆ`u lo ˙ c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.2 Thay theˆ´ các tham bieˆ´n d¯a˘ ˙ c bieˆ ˙ t . . . . . . . . . . . . . . . . . . . . . . . 36 3.3 Ký tu ˙ ’xác d¯i ˙ nh da ˙ ng daˆ´u nha˘´c . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4 Các ký tu ˙ ’ta ˙ o maˆ˜u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
  • 5.
    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 http://phoc.minidns.net 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 LATEX. 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 teppi@vnlinux.org 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ı’ teppi@vnlinux.org.
  • 6.
    Chu’o’ng 1 HD¯ HLinux: li ˙ ch su’’ và các ba’n phân phoˆ´ i
  • 7.
    Chu’o’ng 2 Cài d¯a˘ ˙ tHD¯ 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;
  • 8.
    4 Cài d¯a˘ ˙ tHD¯ 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
  • 9.
    2.2 Phòng xavà 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:
  • 10.
    6 Cài d¯a˘ ˙ tHD¯ 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.
  • 11.
    2.3 Phân vùngtrê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:
  • 12.
    8 Cài d¯a˘ ˙ tHD¯ 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ònphânvùnglôgícthìcócáctên: /dev/hda5, /dev/hda6, /dev/ . . . (ba˘´t d¯aˆ`u tu`’soˆ´ 5). Tu`’nhu˜’ng gì d¯eˆ` caˆ ˙ p d¯eˆ´n o’’trên có theˆ’suy ra 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 ˙ ).
  • 13.
    2.3 Phân vùngtrê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 2.1 cho thaˆ´y caˆ´u trúc cu’a sector kho’’i d¯oˆ ˙ ng chính sau khi cài d¯a˘ ˙ t Windows. 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.
  • 14.
    10 Cài d¯a˘ ˙ tHD¯ 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 VIE multi(0)disk(0)rdisk(0)partition(3)WINNT="Windows NT Workstation 4.00 VIE C:="Microsoft Windows" C:BOOTSECT.LNX="Linux" Neˆ´u ngu’o`’i dùng 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
  • 15.
    2.4 Lu ˙ ’a cho ˙ ntrì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 ˙ :
  • 16.
    12 Cài d¯a˘ ˙ tHD¯ 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);
  • 17.
    2.4 Lu ˙ ’a cho ˙ ntrì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 ftp://metalab.unc.edu/. 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ó.
  • 18.
    14 Cài d¯a˘ ˙ tHD¯ 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 2.2. 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.
  • 19.
    2.5 Chuaˆ’n bi ˙ cácphâ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’’
  • 20.
    16 Cài d¯a˘ ˙ tHD¯ 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).
  • 21.
    2.6 Windows NTvà 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 (http://www.powerquest.com) 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:
  • 22.
    18 Cài d¯a˘ ˙ tHD¯ 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ˆ’ghinoˆ ˙ idung sectorkho’’id¯oˆ ˙ ng cu’ad¯ı˜a /dev/hda3 vàotaˆ ˙ ptin /mnt/floppy/bootsect.lnx. 1 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.
  • 23.
    2.6 Windows NTvà 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’ sau2 : 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
  • 24.
    20 Cài d¯a˘ ˙ tHD¯ 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 2.3 và 2.5. 3. Cài d¯a˘ ˙ t Linux theo chı’ daˆ˜n d¯i kèm vo´’i ba’n phân phoˆ´ i. Caˆ`n nho´’ra˘`ng, neˆ´u 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.3 4. Bu’o´’c tieˆ´p theo caˆ`n caˆ´u hình LILO d¯eˆ’ có theˆ’ kho’’i d¯oˆ ˙ ng các HD¯ H theo lu ˙ ’a cho ˙ n. LILO d¯u’o ˙ ’c caˆ´u hình ba˘`ng taˆ ˙ p tin /etc/lilo.conf và câu leˆ ˙ nh /sbin/lilo. Câu leˆ ˙ nh này dù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.
  • 25.
    2.7 Su’’ du ˙ ngtrì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:
  • 26.
    22 Cài d¯a˘ ˙ tHD¯ 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. Saukhisu’’axong taˆ ˙ ptin /etc/lilo.conf theoýmuoˆ´ n,caˆ`ncha ˙ ycâuleˆ ˙ 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ˆ`.
  • 27.
    2.7 Su’’ du ˙ ngtrì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.
  • 28.
    24 Cài d¯a˘ ˙ tHD¯ 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 (lermen@elserv.ffm.fgan.de) 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.4 Loadlin.exe cung caˆ´p cách kho’’i d¯oˆ ˙ ng Linux tu`’ oˆ’ cu´’ng an toàn nhaˆ´t, khi có phân vùng 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)5 . • 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óiLOADLIN16.TGZ.Góinénnàycònchu´’ahu’o´’ngdaˆ˜nsu’’du ˙ ngDOCMANUAL.TXT, taˆ ˙ ptinthamsoˆ´ vídu ˙ DOCTEST.PAR,vàhu’o´’ngdaˆ˜ncáchd¯u’acácthamsoˆ´ DOCPARAMS.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
  • 29.
    2.8 Kho’’i d¯oˆ ˙ ngLinux 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.5) 2. Cài d¯a˘ ˙ t Linux vào phân vùng d¯ã chia. LILO caˆ`n cài d¯a˘ ˙ t vào sector d¯aˆ`u tiên cu’a phân vùng Linux d¯eˆ’ không ghi d¯è lên MBR và không bi ˙ maˆ´t kha’ na˘ng kho’’i d¯oˆ ˙ ng vào Windows. 3. Sau khi keˆ´t thúc phaˆ`n cài d¯a˘ ˙ t hãy kho’’i d¯oˆ ˙ ng Linux (neˆ´u không có cách nào khác, hãy 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/Bo HOWTO.html
  • 30.
    26 Cài d¯a˘ ˙ tHD¯ 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.
  • 31.
    Chu’o’ng 3 Bash Toˆ´ tgoˆ˜ 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 http://www.gnu.org/) 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’
  • 32.
    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
  • 33.
    3.3 Thu ˙ ’c thicá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ácthaotác&&và||lánhu˜’ngthaotácd¯ieˆ`ukhieˆ’n. Neˆ´utrêndòngleˆ ˙ nhlà 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
  • 34.
    30 Bash vieˆ ˙ c thu ˙ ’chieˆ ˙ 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ˆ´t1 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
  • 35.
    3.5 Chuyeˆ’n hu’o´’ngd¯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 ls2 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
  • 36.
    32 Bash ls.txt khôngtoˆ`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´’hai3 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
  • 37.
    3.5 Chuyeˆ’n hu’o´’ngd¯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á
  • 38.
    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 3.1 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
  • 39.
    3.6 Tham bieˆ´nvà 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 3.2: Các tham bieˆ´n d¯a˘ ˙ c bieˆ ˙ t, d¯u’o ˙ ’c lieˆ ˙ t kê o’’ ba’ng trên, có moˆ ˙ t d¯ieˆ’m khác bieˆ ˙ t d¯ó là chı’ có theˆ’ "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
  • 40.
    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ên4 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
  • 41.
    3.6 Tham bieˆ´nvà 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 3.3 (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]$"
  • 42.
    38 Bash thì trongdaˆ´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¯ó(xemdu’o´’i). Giátri ˙ theoma˘ ˙ cd¯i ˙ nhcu’abieˆ´nnà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õ:
  • 43.
    3.7 Khai trieˆ’nbieˆ’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?.?
  • 44.
    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.
  • 45.
    3.7 Khai trieˆ’nbieˆ’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 3.4
  • 46.
    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
  • 47.
    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.
  • 48.
    44 Bash • -ffile 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.
  • 49.
    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.
  • 50.
    46 Bash 3.8.3 Toántu’’ 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"; break done echo "Ba ˙ n d¯ã cho ˙ n $var"
  • 51.
    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".
  • 52.
    48 Bash 3.8.6 Toántu’’ 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:
  • 53.
    3.9 Script cu’aheˆ ˙ 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
  • 54.
    50 Bash câu leˆ ˙ nho’’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.
  • 55.