linux cho ngu’o`’i dùng - trang chủ sÁch ba’ ng 1 lo`’i nói d¯aˆ`u ¯dây là ba’n...
TRANSCRIPT
Mu˙c lu
˙c
1 HDH Linux: li˙ch su’’ và các ba’ n phân phoi 2
2 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows 3
2.1 Chua’n bi˙cài da
˙t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Phòng xa và nhu’ng lo’i khuyên . . . . . . . . . . . . . . . . . . . . . . . . 52.3 Phân vùng trên dıa và quá trình kho’’i do
˙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 . . . . . . . . . . . . . . . . 72.3.3 Quá trình kho’’i do
˙ng HDH công ty Microsoft . . . . . . . . . . . . 8
2.3.4 Van de vo’i các dıa lo’n . . . . . . . . . . . . . . . . . . . . . . . . 102.4 Lu
˙’a cho
˙n trình kho’’i do
˙ng . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.1 Trình kho’’i do˙ng LILO cu’ a HDH Linux . . . . . . . . . . . . . . . 11
2.4.2 Các trình kho’’i do˙ng khác. . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 Các phu’o’ng án kho’’i do˙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 de’ phân chia o’ dıa . . . . . . . . . . . . . . . . . . . 172.6 Windows NT và Linux: kho’’i do
˙ng qua OS Loader cu’ a NT . . . . . . . . . 17
2.7 Su’’ du˙ng trình kho’’i do
˙ng LILO . . . . . . . . . . . . . . . . . . . . . . . . 20
2.7.1 Cài da˙t và cau hình LILO . . . . . . . . . . . . . . . . . . . . . . . 20
2.7.2 Cài da˙t các he
˙dieu 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 do˙ng Linux tu’ MS-DOS bang loadlin.exe . . . . . . . . . . . . . . . 24
3 Bash 273.1 He
˙vo’ là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2 Các ký tu˙’ da
˙c bie
˙t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Thu˙’c thi các câu leˆ
˙nh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Thao tác ;. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.3.2 Thao tác & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.3.3 Thao tác && và ||. . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4 Dau vào/dau ra tiêu chua’n . . . . . . . . . . . . . . . . . . . . . . . . . . 303.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 dau vào/dau ra, du’o’ng ong và dau 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 Dau lo˙c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Tham bieˆn và các bieˆn so. Môi tru’o’ng cu’ a he˙
vo’ . . . . . . . . . . . . . . . 343.6.1 Các da
˙ng tham bieˆn khác nhau. . . . . . . . . . . . . . . . . . . . 35
3.6.2 Dau nhac cu’ a he˙
vo’ . . . . . . . . . . . . . . . . . . . . . . . . . . 363.6.3 Bien môi tru’o’ng PATH . . . . . . . . . . . . . . . . . . . . . . . . 383.6.4 Bien môi tru’o’ng IFS . . . . . . . . . . . . . . . . . . . . . . . . . 383.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.7.1 Khai trie’n dau ngoa
˙c . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.7.2 Thay theˆ dau ngã (Tilde Expansion). . . . . . . . . . . . . . . . . 403.7.3 Phép theˆ các tham bieˆn và bien so . . . . . . . . . . . . . . . . . . 403.7.4 Phép theˆ các câu leˆ
˙nh . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.7.5 Phép theˆ soho˙c (Arithmetic Expansion). . . . . . . . . . . . . . . 41
3.7.6 Phân chia tu’ (word splitting) . . . . . . . . . . . . . . . . . . . . . 413.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˙’ da
˙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à dieu kie˙n cu’ a bie’u thu’c . . . . . . . . . . . . . . . . 43
3.8.3 Toán tu’’ case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.8.4 Toán tu’’ select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.8.5 Toán tu’’ for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.8.6 Toán tu’’ while và until . . . . . . . . . . . . . . . . . . . . . . . . . 483.8.7 Các hàm soˆ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.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 Cau trúc cu’ a sector kho’’i do˙ng chính . . . . . . . . . . . . . . . . . . . . . 9
2.2 Nhu caˆu su’’ du˙ng không gian dıa cu’ a HDH . . . . . . . . . . . . . . . . . . 15
3.1 Các câu leˆ˙nh dau lo
˙c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2 Thay theˆ các tham bieˆn da˙c bie
˙t . . . . . . . . . . . . . . . . . . . . . . . 36
3.3 Ký tu˙’ xác di
˙nh da
˙ng dau nhac . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4 Các ký tu˙’ ta
˙o mau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
DANH SÁCH BA’ NG 1
Lo’i nói dauDây là ba’ n di
˙ch cuon "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 (rat ít ) kinh nghie
˙m su’’ du
˙ng Linux cu’ a teppi. Ba’ n goc du’o
˙’c
viet trên tieng Nga. Theo yêu caˆu cu’ a Kostromin A. V., xin du’o˙’c du’a ra các liên keˆt to’i ba’ n
goc dây:http://rus-linux.net/book1.php?name=book1/oglavlhttp://linux-ve.chat.ru/
Lo’i ca’ m o’nXin ca’ m o’n các bác sau dã giúp do’: Kostromin V. A. dã viet mo
˙t cuon 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.netde’ da˙t cuon sách này; hai bácNguyen Da
˙i Quý và Nguyen Da
˙ng
Hoàng Tuân dã giúp trong vieˆ˙c su’’ du
˙ng LATEX. Bác Nguyen Da
˙i Quý dã do
˙c và su’’a cho
phiên ba’ n 0.9. Xin hãy gu’’i thu’ nhac teppi ta˙i [email protected] nhu’ teppi có quên ai dó.
Ba’ n quyenCuon "Bash cho ngu’o’i dùng" này su’’ du
˙ng ba’ n quyen GPL. Nói mo
˙t cách nga˘n go
˙n, ba
˙n có
the’ làm bat ký thu’ gì: in, ta˙ng, bán, dot,... nhu’ng xin hãy thêm hai du’o’ng dan sau vào các ba’ n
sao cu’ a mình:http://rus-linux.net/book1.php?name=book1/oglavlhttp://teppi.org/l4u/Tác gia’ Kostromin V. A. cung nhu’ ngu’o’i di
˙ch không chi
˙u trách nhieˆ
˙m veha
˙u qua’ do vie
˙c su’’
du˙ng cuon sách này gây ra.
Phiên ba’ n và ca˙p nha
˙t
Phiên ba’ n 0.9Ca
˙p nha
˙t cuoi cùng Ngày 9 tháng 2 na˘m 2005
Mo˙i denghi
˙su’’a do’i, thông báo loˆ i chính ta’ , loi kien thu’c cu’ a ba’ n di
˙ch cung nhu’ denghi
˙giúp
do’ di˙ch xin gu’’i cho Phan Vı˜nh Thi
˙nh theo di
˙a chı’ [email protected].
Chu’o’ng 2
Cài da˙t HDH Linux trên cùng máy tính
vo’i Windows
Va˙n su
˙’ kho’’i dau 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 dan ngan go˙n cách cài da
˙t
Linux. Ngoài ra, trên Internet ba˙n có the’ tìm thay rat nhieu cuon sách nó veˆ van denày. Và ta´ t
ca’ các ba’ n phân phoˆi lo’n (Debian, Slackware, Fedora, Mandrake, ...) deu dã có cuoˆn hu’o’ngdan cài da
˙t rat chi tiet, cho mo
˙i tình huong su’’ du
˙ng. Hãy cho’ do
˙’i và hy vo
˙ng trong tu’o’ng lai
không xa se˜ có ba’ n di˙ch Tieng Vie
˙t cu’ a nhu’ng cuon sách này. Chính vì vaˆ
˙y trong cuo´ n sách
này, tác gia’ sekhông du’a ra các bu’o’c cu˙
the’ cu’ a vie˙c cài da
˙t, mà xin ba
˙n do
˙c hãy tìm các
cuon hu’o’ng dan tu’o’ng u’ng. Thay vào dó là nhu’ng gì ba˙n can biet và chua’n bi
˙tru’o’c khi cài
da˙t, dong tho’i, tác gia’ sedi cu
˙the’ và chi tiet vào nhu’ng gì da
˙c bie
˙t khi cài da
˙t Linux trên máy
tính dã có mo˙t trong các heˆ
˙dieu hành Windows cu˜ng nhu’ vie
˙c kho’’i do
˙ng nhieu he
˙dieu hành.
Van deo’’ cho, phan lo’n ngu’o’i dùng Vie˙t Nam tru’o’c khi bat dau ho
˙c Linux dã làm quen và
rat có the’ dã có kinh nghieˆ˙m su’’ du
˙ng các HDH dòng Windows nhu’ Windows 98, Windows
2000 và Windows XP. Và trên thu˙’c tethì ta
˙m tho’i Linux khó có the’ là HDH dau 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 HDH Windows
và quyet di˙nh thu’’ nghie
˙m vo’i Linux, thì ho
˙không muoˆn mat di 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ã cau hình du’o’i du’o’i Windows. Ra´ t may là
không nhaˆt thiet pha’ i dánh ma´ t tat 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í nhieu ho’n nu’a (neu có du’ cho trên dıa!). Chính
vì the, o’’ phía du’o’i senói cách cài da˙t HDH Linux trên máy tính dã cài da
˙t mo
˙t trong các heˆ
˙dieu hành cu’ a hãng Microsoft.
2.1 Chua’n bi˙cài da
˙t
Có the’ cài da˙t Linux bang 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 da˙t HDH 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 ý kien cá nhân cu’ a tác gia’ thì thua˙n tie
˙n và có tính thu
˙’c tenhat là cài da
˙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 bat dau cài da˙t, hãy thu thaˆ
˙p (hãy viet lên mo
˙t to’ giay) tat ca’ nhu’ng thông tin
cau hình can thiet cu’ a máy tính. Neˆu nhu’ máy tính cu’ a ba˙n ta
˙m tho’i van còn làm vie
˙c du’o’i
HDH Windows 95/98/2000/XP, thì ba˙n setìm thay rat nhieu thông tin neˆu nhan 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 thay gan het tat ca’
thông tin can thiet. Neu nhu’ ba˙n không thaˆy thông tin nào dó, thì can tìm kiem theo các cách
khác, ke’ ca’ vie˙c mo’’ vo’ máy và do
˙c nhu’ng dòng chu’ trên thiet bi
˙.
De’ giúp ba˙n do
˙c, xin du’o
˙’c du’a ra dây danh sách nhu’ng thông tin caˆn thu tha
˙p. Xin du’ng
lu’o’i bieng và hãy coˆ gang ghi càng nhieˆu du’ lie˙u vemo
˙t thiet bi
˙càng to´ t (tat ca’ nhu’ng thông
tin có the’ tìm thay), nhu’ng du’ lie˙u này se˜ can den khi cài da
˙t và cau hình, khi mà vieˆ
˙c tìm
kiem chúng se˜ khó khan ho’n.
• BIOS:
– nhà sa’ n xuat;
– sohie˙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 (neu nhu’ ba
˙n do
˙c
dùng dıa IDE, thì can kie’m tra xem BIOS có hoˆ tro˙’ vie
˙c truy ca
˙p o’’ chedo
˙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 xuat và somau mã cu’ a adapter SCSI (neˆu có).
• Dung lu’o˙’ng cu’ a bo
˙nho’ (tính bang Kilobyte
• CD-ROM:
– Giao die˙n (IDE, SCSI, hay giao dieˆ
˙n khác);
– doi vo’i các o’ dıa CD-ROM không pha’ i IDE, cung nhu’ SCSI - nhà sa’ n xuat và somau mã.
• Chuo˙t:
– loa˙i chuo
˙t (serial, PS/2, hay bus mouse);
– giao thu’c (Microsoft, Logitech, MouseMan, v.v. . . );
– sonút;
– doi vo’i chuo˙t cam vào co’ng noi tiep thì can sothu’ 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 xuat;
– somau mã (hay chipset su’’ du˙ng)
– dung lu’o˙’ng bo
˙nho’;
• Màn hình
– nhà sa’ n xuat
– somau mã;
– các giá tri˙
gio’i ha˙n (min, max) cu’ a tan solàm mo’i theo chieu do
˙c và theo chieˆu
ngang (nhu’ng giá tri˙này ba
˙n do
˙c chı’ có the’ tìm thay trong tài lie
˙u di 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 cau hình giao dieˆ˙n do ho
˙a).
• Neu nhu’ ba˙n do
˙c muon ket noi 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 xuat và somau mã ca˙c ma
˙ng;
– di˙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);
– di˙a chı’ IP cu’ a gateway;
– di˙a chı’ IP cu’ a các máy chu’ tên mien (DNS server);
– di˙a chı’ IP cu’ a máy chu’ WINS(Windows Internet Name Service);
– tên mien cu’ a công ty ba˙n do
˙c.
• Loa˙i và nhà sa’ n xuat 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 da˙t HDH 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ì rat có the’ ba˙n do
˙c sepha’ i phân vùng la
˙i o’ dıa, thay do’i ba’ n ghi
kho’’i do˙ng (Boot Record) và làm vieˆ
˙c vo’i các ta
˙p tin kho’’i do
˙ng cung nhu’ các ta
˙p tin cau hình.
Các thao tác này không pha’ i lúc nào cung dem la˙i dem la
˙i mo
˙t ket qua’ theo ý muoˆn, và trong
tru’o’ng ho˙’p xau có the’ máy tính cu’ a ba
˙n do
˙c sekhông kho’’i do
˙ng nu’a. Có bie´ t cách thoát ra
kho’ i tình huong này và phu˙c hoi du’ lie
˙u can thiet không dó còn là moˆ
˙t câu ho’ i. Nhu’ng ro’i vào
tình huong nhu’ va˙y het su’c dedàng nhaˆt là vo’i ngu’o’i dùng lan dau tiên cài da
˙t Linux. Chính
vì va˙y, dau tiên, can ta
˙o mo
˙t dıa mem kho’’i do
˙ng hay moˆ
˙t dıa mem giúp phu
˙c hoi he
˙thong
(neu ba˙n do
˙c còn chu’a ta
˙o). Thu’ hai, can 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 mem, CD) cài da
˙t cho he
˙thong 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 buon: khi lan dau tiên tác gia’ cài Linux trên máy tính dã có Windows NT, và
ket qua’ là máy tính không the’ kho’’i do˙ng du’o
˙’c. Không hie’u het van de tác gia’ nghı là không
còn cách gì khác ngoài di˙nh da
˙ng la
˙i o’ dıa và cài da
˙t la
˙i tu’ dau. Bây gio’ thì tác gia’ dã hie’u là
có the’ phu˙c hoi la
˙i neu nhu’ không quyeˆt di
˙nh quá voˆ
˙i vàng. Vì va
˙y có the’ nói rang Werner
Almesberger dúng, khi trong hu’o’ng dan su’’ du˙ng LILO có du’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ó khan nhu’ va
˙y:
6 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
• Không hoa’ ng hot. Neu nhu’ có gì dó không làm vieˆ˙c, hãy thu’’ mo
˙i cách de’ tìm ra nguyên
nhân, kie’m tra la˙i nhieu lan thao tác cu’ a mình. Chı’ sau khi dó mo’i thu
˙’c hie
˙n các bu’o’c
su’’a loi.
• Hãy do˙c tài lie
˙u. Da
˙c bie
˙t trong các tru’o’ng ho
˙’p, khi he
˙thong làm nhu’ng gì ba
˙n do
˙c
không mong do˙’i.
Xin thêm mo˙t lo’i khuyên pho’ bien 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
˙thong (can tìm chúng trong thu’ mu
˙c /var/log ).
Nhu’ dã nói o’’ trên, quá trình cài da˙t HDH Linux nói riêng không pha’ i là de tài cu’ a cuon
sách. Ngu’o’i dùng can tìm các cuoˆn hu’o’ng dan tu’o’ng u’ng. Tuy nhiên, tác gia’ cung muon du’ara vài lo’i khuyên de’ giúp ngu’o’i dùng du’a ra quyeˆt di
˙nh trong khi cài da
˙t.
Thu’ nhat, du’ng vo˙i vàng và hãy chú ý do
˙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. De’ minh chu’ng cho lo’i khuyên này xin du’o
˙’c ke’ la
˙i
tru’o’ng ho˙’p khi tác gia’ cài Red Hat 7.1, và tu
˙’ do
˙ng nhan lên nút Next, vì cho ra˘ng phu’o’ng án
theo ma˙c di
˙nh là du’ . Ket qua’ là tác gia’ không the’ truy ca
˙p du’o
˙’c den máy này qua các giao
thu’c ma˙ng (telnet, ftp, NFS, Samba), ma˘
˙c dù dã cau hình giao dieˆ
˙n ma
˙ng cho máy. Nguyên
nhân là trong phu’o’ng án theo ma˘˙c di
˙nh thì tu’o’ng lu’’a du’o
˙’c cài da
˙t, và tu’o’ng lu’’a dóng het các
truy ca˙p tu’ ma
˙ng. De’ mo’’ truy ca
˙p này, thì trong quá trình cài da
˙t can chı’ rõ các di
˙ch vu
˙du’o
˙’c
mo’’. Nhu’ng chúng ta quá voˆ˙i vàng! Thu’ hai, tác gia’ khuyên không nên dong ý vo’i vie
˙c tu
˙’
do˙ng kho’’i do
˙ng vào giao dieˆ
˙n do ho
˙a. Vì cuoi cùng ngu’o’i dùng không khó kha˘n gì khi gõ
câu le˙nh startx , còn vie
˙c cau hình giao dieˆ
˙n do ho
˙a (neu có gì dó làm vie
˙c không dúng)
vo’i ngu’o’i dùng mo’i rat khó thành công.Sau khi làm xong các công vieˆ
˙c phòng xa, caˆn quyet di
˙nh seto’ chu’c kho’’i do
˙ng nhieu
HDH nhu’ thenào, chua’n bi˙
các o’ dıa (phân vùng) de’ cài da˙t, tu’c là can chia o’ dıa thành soˆ
phân vùng caˆn thiet. Nhu’ng tru’o’c khi chuye’n sang các bu’o’c cu˙
the’ de’ chua’n bi˙
o’ dıa, xindu’o
˙’c nói qua moˆ
˙t chút vecau trúc cu’ a dıa và quá trình kho’’i do
˙ng HDH. Neu ai dó không du’
kiên nhan de’ do˙c phan lý thuyet này, thì có the’ bo’ qua chúng và chuye’n tha’ ng den van de
cho˙n chu’o’ng trình kho’’i do
˙ng.
2.3 Phân vùng trên dıa và quá trình kho’’i do˙ng
2.3.1 Thenào là cau trúc "hình ho˙c cu’ a dıa"
Nhu’ ba˙n do
˙c biet, dıa cu’ng gom vài dıa có phu’ lo’p tu’ tính, nam trên cùng moˆ
˙t tru
˙c và quay
vo’i va˙n toc lo’n. Do
˙c/Ghi du’ lie
˙u du’o
˙’c thu
˙’c hie
˙n bo’’i các dau do
˙c nam 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 dau do˙c vera 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 chong lên nhau go
˙i là cylinder. Moi
rãnh la˙i chia thành các sector, và có the’ ghi vào moi sector 512 byte thông tin. Vì theˆ da
˙c
die’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 tat là C/H/S(ba chu’ cái dau tiên cu’ a các thuaˆ˙t ngu’ Tieng Anh tu’o’ng u’ng:
Cyliner/Head/Sector). Ba soˆ này go˙i là cau trúc"hình ho
˙c cu’ a dıa". Dıa vo’i cau 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˙
khoi, tu’ là do˙c và ghi thông tin theo các khoˆi, và kích thu’o’c nho’
nhat cu’ a khoi bang mo˙t sector (512 byte). D¯ e’ có the’ ghi thông tin lên dıa, can da
˙t dau dıa
dúng vi˙
trí, tu’c là chı’ cho controller bieˆt can ghi thông tin này vào sector nào. Sector du’o˙’c
dánh di˙a chı’ theo soˆ thu’ tu
˙’ cylinder, so´ thu’ tu
˙’ dau do
˙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 do˙ng 7
2.3.2 Phân vùng và ba’ ng phân vùng cu’ a dıa
Trong các heˆ˙
thong Intel o’ dıa thu’o’ng du’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 dau tiên không the’
su’’ du˙ng du’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’ nang 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 du’o
˙’c dieu này, trong sector
so0 cu’ a dıa (sector soˆ 0 cu’ a rãnh dau tiên trong cylinder soˆ 0) ghi nho’ ba’ ng chia o’ dıa thànhcác phân vùng(partition table). Moˆi phân vùng du’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 da
˙t các he
˙dieu 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ácstruct 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 au tiên, 24 bitchar 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 au 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 du’o˙’c ta
˙o bo’’i chu’o’ng trình fdisk . Trên HDH Linux ngoài
chu’o’ng trìnhfdisk "truyen thong" (tuy va˙y rat 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 de’ làm vie˙c vo’i phân vùng dıa: cfdisk và sfdisk .
Chu’o’ng trìnhcfdisk , giong nhu’ fdisk chı’ dành de’ làm vie˙c vo’i ba’ ng phân vùng dıa: nó
không quan tâm chú ý den 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ı’ dan su’’ du
˙ng le
˙nh và he
˙thong trình do’n (thu
˙’c do’n). Chu’o’ng trìnhsfdisk có vài kha’
nang 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’ngbeginvàendcu’ a ba’ ng phân vùng và Interrupt 13 cu’ a BIOS (Int 13h)
de’ truy ca˙p to’i dıa, vì thekhô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 van de này senói den o’’ sau), còn phân vùng thì không the’ lo’n ho’n 2,1Gbyte (nhu’ng dây là do ha
˙n checu’ a he
˙thong ta
˙p tin FAT16).
Linux thì chı’ su’’ du˙ng tru’o’ng start và lengthcu’ a ba’ ng phân vùng dıa và hotro
˙’ các phân
vùng chu’a den 232 sector, tu’c là dung lu’o˙’ng có the’ da
˙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ıangay tu’ dau 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ànhmo’’ ro
˙ng (loa
˙i phân
vùng - 5 hay F hay 85 trong heˆ˙
co’ somu’o’i sáu). Và trong phân vùng mo’’ ro˙ng ngu’o’i ta ta
˙o ra
cácphân vùng lôgíc. Phân vùng mo’’ ro˙ng không du’o
˙’c su’’ du
˙ng tru
˙’c tiep mà chı’ dùng de’ ghi
các phân vùng lôgíc. Sector dau tiên cu’ a phân vùng mo’’ ro˙ng ghi nho’ ba’ ng phân vùng vo’i
bon dau 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 du’o
˙’c su’’ du
˙ng. Moi phân vùng mo’’ ro
˙ng có mo
˙t ba’ ng chia cu’ a mình, trong ba’ ng
này, cung giong nhu’ trong phân vùng mo’’ ro˙ng chính, chı’ su’’ du
˙ng có hai dòng de’ du’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 du’o
˙’c mo
˙t chuoi các mat xích tu’
ba’ ng phân vùng, ma˘t xích dau tiên mô ta’ ba phân vùng chính, và moˆi mat xích tiep theo –mo
˙t phân vùng lôgíc và vi
˙trí cu’ a ba’ ng tiep theo.
Chu’o’ng trìnhsfdisk trên Linux cho thaˆy toàn bo˙
chuoi này:
8 Cài da˙t HDH 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/trackUnits = 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
Sophân vùng lôgíc theo nguyên ta˘c không ha˙n che, vì moi 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 thevan 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ý) du’o
˙’c truy ca
˙p qua tên cu’ a thiet bi
˙: /dev/hda ,
/dev/hdb , /dev/sda , v.v. . . Các phân vùng chính có thêm soˆ 1-4 trong tên thieˆt bi˙:
/dev/hda1 , /dev/hda2 , /dev/hda3 , còn phân vùng lôgíc thì có các tên:/dev/hda5, /dev/hda6, /dev/hda7
. . . (bat dau tu’ so5). Tu’ nhu’ng gì de ca˙p den 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 (do’n gia’ n là phân vùng chính thu’ ba và thu’ tu’ khôngdu’o
˙’c ta
˙o ra) và ngay sau/dev/hda2 ba
˙n do
˙c thay /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 du’o
˙’c tên (chu’ cái), bat dau tu’ chu’ cái cuoi
dùng dành cho phân vùng chính. Ví du˙
neu 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˜ du’o˙’c da
˙t tên E: và F:. Xin nói thêm, trong Windows NT và 2000/XP
có the’ thay do’i tên cu’ a các phân vùng dıa.
2.3.3 Quá trình kho’’i do˙ng HDH công ty Microsoft
Dù he˙
dieu hành có là gì, thì de’ có the’ bat dau dieu khie’n máy tính, caˆn na˙p HDH vào bo
˙nho’. Vì thehãy xem xét qua quá trình kho’’i do˙ng cu’ a các HDH khác nhau. Chúng ta chı’ quan
tâm den vie˙c kho’’i do
˙ng tu’ o’ dıa cu’ng, nên se˜ không xem xét den vie
˙c kho’’i do
˙ng tu’ dıa mem,
CD-ROM và qua ma˙ng. Hãy ba˘t dau tu’ MS-DOS và MS Windows cu˜ (xin du’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 HDH cu’ a
Microsoft và nhu’ng quyet di˙nh su’’ du
˙ng trong các HD¯ H này có a’ nh hu’o’’ng ma
˙nh den quyet
di˙nh cu’ a các nhà phát trie’n thiet bi
˙).
2.3 Phân vùng trên dıa và quá trình kho’’i do˙ng 9
Nhu’ ba˙n do
˙c biet, khi ba
˙t máy tính dau tiên secha
˙y chu’o’ng trình POST (Power On Self
Test). Chu’o’ng trình xác di˙nh dung lu’o
˙’ng bo
˙nho’, thu’’ nghie
˙m bo
˙nho’, và xác di
˙nh các thành
phan khác (bàn phím, o’ cu’ng. . . ), kho’’i do˙ng các the’ adaptor. Trên màn hình thu’o’ng xuat hie
˙n
các thông báo veˆ dung lu’o˙’ng bo
˙nho’, vevie
˙c thu’’ nghie
˙m bo
˙nho’, danh sách các thieˆt bi
˙nha
˙n
ra (o’ dıa cu’ng và mem, 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 do˙ng. Vie
˙c tìm kiem thu
˙’c hie
˙n theo thu’ tu
˙’ xác di
˙nh trong Setup BIOS và theo cách
tham dò sector soˆ 0 cu’ a các thieˆt bi˙
tu’o’ng u’ng. Neu dıa có the’ kho’’i do˙ng, thì trong sector soˆ
0 cu’ a dıa cóba’ n ghi kho’’i do˙
ng chính– Master Boot Record (MBR). Hai byte cuoˆi cùng cu’ aMBR – "somàu nhie
˙m", là dau hie
˙u cho biet sector có MBR, và theo dó dıa có the’ kho’’i do
˙ng.
Ngoài "somà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ìnhkho’’i do˙
ng chính, kích thu’o’c chı’ có 446 (0x1BE) byte.Ba’ ng2.1cho thay cau trúc cu’ a sector kho’’i do
˙ng chính sau khi cài da
˙t Windows.
Ba’ ng 2.1: Caˆu trúc cu’ a sector kho’’i do˙ng chính
Di˙ch chuye’n No
˙i dung
0x000 Mã cu’ a trình kho’’i do˙ng chính
0x1BE Ba’ ng phân vùng o’ dıa0x1FE "Somàu nhie
˙m" (0xAA55)
MS-DOS, Windows95 và NT ghi nho’ DOS MBR trong khi cài da˙t. Ngoài ra cu˜ng có the’
ta˙o MBR cu’ a MS vo’i câu le
˙nh DOSsau:fdisk /mbr .
Xin tro’’ la˙i vo’i quá trình kho’’i do
˙ng. Int 19h cu’ a BIOS na
˙p trình kho’’i do
˙ng chính vào boˆ
˙nho’ máy tính và chuye’n quyen dieu khie’n cho chu’o’ng trình này. Nhu’ng chu’o’ng trình "bénho’ " này không du’ kha’ nang kho’’i do
˙ng HDH; tat 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 do
˙ng thu’ hai.
De’ làm du’o˙’c dieu này, nó tìm trong ba’ ng phân vùng kích hoa
˙t và do
˙c vào bo
˙nho’ trình
kho’’i do˙ng thu’ hai, bat dau tu’ sector lôgíc dau tiên cu’ a phân vùng kích hoa
˙t. Hãy chú ý den
cu˙m tu’ "bat dau tu’". Vì trình kho’’i do
˙ng thu’ hai trên các heˆ
˙thong khác nhau có do
˙dài khác
nhau.Trong phân vùng du’o
˙’c di
˙nh da
˙ng du’o’i he
˙thong ta
˙p tin FAT, trình kho’’i do
˙ng thu’ hai chiem
mo˙t sector (512 byte). Trong phân vùng di
˙nh da
˙ng du’o’i he
˙thong ta
˙p tin NTFS, trình kho’’i
do˙ng thu’ hai chiem vài sector.Trình kho’’i do
˙ng thu’ hai na
˙p lo’p chu’o’ng trình dau tiên, can thiet cho vie
˙c kho’’i do
˙ng he
˙dieu hành. Trong tru’o’ng ho˙’p MS DOS chu’o’ng trình kho’’i do
˙ng do
˙ng na
˙p IO.SYS theo di
˙a chı’
700h, sau dó MSDOS.SYS và chuye’n quyen dieu khie’n cho SYSINIT cu’ a môdun IO.SYS.Neu 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’’ do
˙ng
setiep tu˙c vo’i vie
˙c xu’’ lý Int 18h. Tru’o’ng ho
˙’p này trên thu
˙’c te rat hiem khi su’’ du
˙ng, nhu’ng
kha’ nang này có the’ có ích trong tru’o’ng ho˙’p nào dó. Trong khi kho’’i do
˙ng tu’ xa, khi he
˙dieu
hành kho’’i do˙ng tu’ máy chu’ , thì Int này du’o
˙’c POST chuye’n hu’o’ng lên ROM cu’ a ca
˙c ma
˙ng.
Doi vo’i các HDH khác cu’ a Microsoft thì quá trình kho’’i do˙ng dien ra tu’o’ng tu
˙’.
• Windows95 kho’’i do˙ng giong 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 du’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 do
˙c cho
˙n kho’’i do
˙ng DOS, Windows95 se˜ do’i tên các taˆ
˙p tin
cu’ a mình vo’i phan mo’’ ro˙ng w40 và phu
˙c hoi tên ban dau cu’ a các taˆ
˙p tin he
˙thong cu’ a
DOS. Quá trình kho’’i do˙ng tiep tu
˙c vo’i vie
˙c na
˙p IO.SYS. Nhu’ the, sector kho’’i do
˙ng cu’ a
DOS và Windows95 là nhu’ nhau.
10 Cài da˙t HDH 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 do
˙ng cu’ a phân vùng
kích hoa˙t bang cách thay theˆ NTLDR vào choIO.SYS. Dây là mo
˙t chu’o’ng trình ma
˙ng
và có the’ làm du’o˙’c nhieu 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ì du’a ra trình do’n (thu˙’c do’n) kho’’i do
˙ng.
Moi dòng cu’ a phan [operating systems] trong ta˙p tin boot.ini xác di
˙nh mo
˙t
phu’o’ng án (moˆ˙t HDH) kho’’i do
˙ng và du’o
˙’c viet theo mau sau:
di˙
a_chı’ _trình_kho ’’ i_d o˙
ng_thu ’_hai="tên_go˙
i_cu’ a_phu’o’ng_án"Di
˙a chı’ cu’ a trình kho’’i do
˙ng thu’ hai có the’ là mo
˙t phân vùng cu
˙the’ nào dó cu’ a dıa cung
nhu’ ta˙p tin kho’’i do
˙ng. Du’o’i dây là mo
˙t ví du
˙ta˙p tin boot.ini:
[operating systems]multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIETNAM"multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIETNAM [VGA mode]" /basevideo /sosC:\="Microsoft Windows"C:\BOOTSECT.LNX="Linux"
Neu ngu’o’i dùng cho˙n NT, thì sekho’’i do
˙ng theo di
˙a chı’ phân vùng du’o
˙’c chı’ trên dòng dau
tiên. Trên dòng tu’o’ng u’ng vo’i phu’o’ng án Microsoft Windows, chı’ du’a ra "C:\", vì tên cu’ ata˙p tin kho’’i do
˙ng du’o
˙’c lay theo ma
˙c di
˙nh: bootsect.dos. Taˆ
˙p tin du’o
˙’c na
˙p vào bo
˙nho’ và quá
trình kho’’i do˙ng du’o
˙’c tiep tu
˙c giong nhu’ khi ba’ n ghi kho’’i do
˙ng du’o
˙’c na
˙p bo’’i mã chu’o’ng trình
tu’ MBR.Doi vo’i vie
˙c kho’’i do
˙ng các heˆ
˙thong khác, có the’ su’’ du
˙ng cách dó. Chı’ can thêm vào
boot.ini các dòng chu’a liên ket den ta˙p tin kho’’i do
˙ng khác. Khi cho
˙n các dòng này se˜ kho’’i
do˙ng HDH tu’o’ng u’ng. Trong ví du
˙trên Linux cung du’o
˙’c kho’’i do
˙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 do
˙ng, ta
˙o bo’’i Linux (nói dúng
ho’n – LILO, trình kho’’i do˙ng tiêu chua’n cu’ a Linux).
2.3.4 Van de vo’i các dıa lo’n
Trên MS-DOS và các phiên ba’ n dau tiên cu’ a Windows truy caˆ˙p to’i dıa (trong dó có ca’ bu’o’c
kho’’i do˙ng dau tiên cu’ a HDH) du’o
˙’c to’ chu’c qua Int 13 (Int 13h) cu’ a BIOS. Khi này su’’ du
˙ng
su˙’ dánh di
˙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 socylinder;
• CL — 7-6 bit tu’o’ng u’ng bit lo’n cu’ a socylinder, 5-0 tu’o’ng u’ng sosector;
• DH — socu’ a dau do˙c;
• DL — so cu’ a dıa(80h hay 81h).
(Can lu’u ý rang vie˙c dánh soˆ cylinder va
˙t lý và rãnh thu’o’ng bat dau tu’ 0, còn sector trên
rãnh dánh soˆ bat dau tu’ 1). Tuy nhiên trên thu˙’c te so dau do
˙c không quá 16, còn soˆ sector
trên rãnh – không quá 63, và dù có dùng 10 bit de’ chı’ ra cylinder, BIOS vaˆn không the’ làmvie
˙c vo’i dıa dung lu’o
˙’ng lo’n ho’n 1024*63*16*512 = 528 Mbyte.
De’ vu’o˙’t qua ha
˙n chenày, ngu’o’i ta áp du
˙ng nhieu 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 do
˙ng 11
den cu’ a sothu’ tu˙’ dau do
˙c de’ tang socylinder. Cách này cho pehsp su’’ du
˙ng cau trúc "hình
ho˙c gia’ ma
˙o cu’ a dıa" vo’i 1024 cylinder, 128 dau do
˙c và 63 sector/rãnh. Bieˆn do’i Extended
CHS thành di˙a chı’ CHS thu
˙’c (có the’ chu’a den 8192 cylinder) du’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 den 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 do
˙ghi cu’ a dıa, sodıa và soˆ rãnh, và
còn phát minh ra các phu’o’ng pháp khác de’ tang dung lu’o˙’ng dıa. Ví du
˙, sosector trên rãnh
không còn coˆ di˙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 gan
rìa ngoài cu’ a dıa, dài ho’n, sosector du’o˙’c tang lên). Ket qua’ là bo
˙ba so´ C/H/S không còn
pha’ n ánh dúng cau trúc "hình ho˙c cu’ a dıa", và các phiên ba’ n BIOS cukhô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 de’ làm vie˙c vo’i các dıa lên qua Int 13h -dánh
di˙a chı’ các khoi theo du’o’ng tha’ ng ("Linear Block Addressing" hay LBA). Không di sâu vào
chi tiet, có the’ nói rang tat ca’ sector trên dıa du’o˙’c dánh soˆ mo
˙t cách tuaˆn tu
˙’, bat dau tu’ sector
dau tiên trên rãnh soˆ 0 cu’ a cylinder soˆ 0. Thay vào choˆ di˙a chı’ CHS moi sector nhaˆ
˙n du’o
˙’c
mo˙t di
˙a chı’ lôgíc – so´ thu’ tu
˙’ cu’ a sector trong to’ng sotat ca’ sector. Vie
˙c dánh soˆ sector lôgíc
bat dau tu’ 0, trong dó sector soˆ 0 chu’a ba’ n ghi kho’’i do˙ng chính (MBR). Trong Setup BIOS
ho tro˙’ bien do’i so thu’ tu
˙’ theo du’o’ng tha’ ng thành di
˙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 bien do’i di
˙a chı’).
Tuy nhiên trong cheˆ do˙
LBA vie˙c su’’ du
˙ng dıa va
˙t lý van du’o
˙’c thu
˙’c hie
˙n qua Int 13h, mà
Int 13h van su’’ du˙ng bo
˙3D (C,H,S). Vì nguyên nhân này xuaˆt hie
˙n ha
˙n chelên dung lu’o
˙’ng
cu’ a dıa: BIOS, và theo dó, MS-DOS và các phiên ba’ n Windows dau tiên không the’ dánh di˙a
chı’ các dıa có dung lu’o˙’ng lo’n ho’n 8,4 Gbyte.
Can chú ý rang ha˙n chenó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 du’o˙’c chuye’n vào các leˆ
˙nh SCSI, và sau dó tu
˙’ dıa tìm
ra vi˙trí can thiet, vì theha
˙n chelên dung lu’o
˙’ng dıa không xuaˆt hie
˙n.
Mo˙t lan nu’a muon nhac la
˙i rang, tat ca’ nhu’ng ha
˙n chenói trên chı’ có ý nghı˜a trong giai
doa˙n kho’’i do
˙ng HDH. Bo’’i vì Linux và các phiên ba’ n Windows mo’i nhat 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ˆ
˙thong pha’ i du’o
˙’c na
˙p. Vì thetrong giai doa
˙n kho’’i do
˙ng dau
tiên bat ky he˙
thong nào cu˜ng can su’’ du˙ng BIOS. Dieu này ha
˙n chevie
˙c da
˙t nhieu he
˙thong
ra ngoài vùng 8 Gbyte dıa dau tiên: chúng không the’ kho’’i do˙ng tu’ dó, ma
˙c dù sau khi kho’’i
do˙ng thì có the’ làm vie
˙c vo’i các dıa có dung lu’o
˙’ng lo’n ho’n nhieu. De’ có the’ hie’u cách thoát
kho’ i nhu’ng ha˙n chenày, chúng ta caˆn mo
˙t chút kien thu’c vequá trình kho’’i do
˙ng cu’ a HDH
Linux.
2.4 Lu˙’a cho
˙n trình kho’’i do
˙ng
2.4.1 Trình kho’’i do˙ng LILO cu’ a HDH Linux
Trình kho’’i do˙ng LILO du’o
˙’c viet bo’’i Werner Almesberber. LILO có the’ kho’’i do
˙ng nhân
Linux tu’ dıa mem, dıa cu’ng, và cung có the’ kho’’i do˙ng các heˆ
˙dieu hành khác: PC/MS-DOS,
DR DOS, OS/2, Windows 95/98, Windows NT/2000/XP, 386BSD, SCO UNIX, Unixwarev.v. . . LILO cho phép cho
˙n den 16 he
˙dieu hành khác nhau de’ kho’’i do
˙ng.
LILO không pha’ i là chu’o’ng trình do’n le’ mà là mo˙t bo
˙gom nhieu chu’o’ng trình: trình kho’’i
do˙ng, các chu’o’ng trình su’’ du
˙ng de’ cài da
˙t và cau hình trình kho’’i do
˙ng, và các taˆ
˙p tin phu
˙c vu
˙:
12 Cài da˙t HDH 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
˙de’ ghi tat ca’ thông tin can thiet
trong giai doa˙n kho’’i do
˙ng vào các choˆ tu’o’ng u’ng. Can cha
˙y chu’o’ng trình này sau moˆi
lan có thay do’i trong nhân hay trong taˆ˙p tin cau hình LILO;
• các ta˙p tin phu
˙c vu
˙, can cho LILO trong tho’i gian kho’’i do
˙ng. Nhu’ng ta
˙p tin này thu’o’ng
nam trong thu’ mu˙c /boot . Quan tro
˙ng nhat trong so´ chúng – dó là ba’ n thân trình
kho’’i do˙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 cau hình LILO; thu’o’ng có tên
/etc/lilo.conf ;
• trình kho’’i do˙ng – dây là phan LILO du’o
˙’c na
˙p vào bo
˙nho’ dau tiên qua Int cu’ a BIOS;
trình kho’’i do˙ng na
˙p nhân Linux hay sector kho’’i do
˙ng cu’ a he
˙dieu hành khác. Trình
kho’’i do˙ng gom có hai phaˆn. Phan thu’ nhat du’o
˙’c ghi vào sector kho’’i do
˙ng và phu
˙c vu
˙de’ na˙p phan thu’ hai, có kích thu’o’c lo’n ho’n rat nhieu. Ca’ hai phan thu’o’ng du’o
˙’c ghi trên
dıa trong ta˙p tin /boot/boot.b .
Can nho’ rang, di˙nh da
˙ng cu’ a sector kho’’i do
˙ng ta
˙o ra bo’’i LILO khác vo’i di
˙nh da
˙ng MBR
cu’ a DOS. Vì theˆ neu ghi sector kho’’i do˙ng LILO vào MBR, thì các heˆ
˙dieu hành dã cài cu’ a
Microsoft sengu’ng kho’’i do˙ng (neu nhu’ không có các bieˆ
˙n pháp bo’ sung).
Sector kho’’i do˙ng cu’ a LILO có the’ du’o
˙’c thiet ke de’ su’’ du
˙ng nhu’ sector kho’’i do
˙ng cu’ a
phân vùng; trong dó có chocho ba’ ng phân vùng.Sector kho’’i do
˙ng cu’ a LILO trong khi cài da
˙t có the’ da
˙t vào nhu’ng chosau:
• sector kho’’i do˙ng cu’ a dıa mem trong di
˙nh da
˙ng Linux (/dev/fd0 , . . . );
• MBR cu’ a dıa cu’ng dau tiên (/dev/hda, /dev/sda , . . . );
• sector kho’’i do˙ng cu’ a phân vùng chính vo’i he
˙thong ta
˙p tin Linux trên dıa cu’ng dau tiên
(/dev/hda1, /dev/hda2 , . . . );
• sector kho’’i do˙ng cu’ a phân vùng lôgíc trong phân vùng mo’’ ro
˙ng dıa cu’ng dau tiên
(/dev/hda5 , . . . ). Su˙’ tha
˙t là phan lo’n chu’o’ng trình da
˙ng fdisk không de ra kha’ nang
kho’’i do˙ng kho’’i do
˙ng tu’ phân vùng mo’’ ro
˙ng và tu’ choi 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 da
˙c bie
˙t (activate ) cho phép
vu’o˙’t qua ha
˙n chenày. Tuy nhiên chu’o’ng trìnhfdisk cu’ a ba’ n phân phoˆi Linux ho tro
˙’
kha’ nang kích hoa˙t phân vùng mo’’ ro
˙ng. Can su’’ du
˙ng tùy cho
˙n -b hoa
˙c bien BOOT.
Sector kho’’i do˙ng cu’ a LILO không the’ da
˙t vào các choˆ sau:
• sector kho’’i do˙ng cu’ a dıa mem hay phân vùng chính, vo’i di
˙nh da
˙ng he
˙thong 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’ rang, LILO trong tho’i gian kho’’i do˙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 do
˙ng 13
• tat ca’ phiên ba’ n nhân kho’’i do˙ng (neu ba
˙n do
˙c cho
˙n phiên ba’ n nhân khi kho’’i do
˙ng);
• sector kho’’i do˙ng cu’ a các heˆ
˙dieu hành khác mà ba
˙n do
˙c muon kho’’i do
˙ng qua LILO;
• ta˙p tin chu’a các thông báo du’a ra khi kho’’i do
˙ng (neu du’o
˙’c xác di
˙nh).
Nhu’ va˙y, sector kho’’i do
˙ng LILO cung nhu’ nhu’ng ta
˙p tin dã lie
˙t kê (trong soˆ dó có các taˆ
˙p
tin ba˙n do
˙c secài da
˙t sau này) caˆn nam trong pha
˙m vi 1024 cylinder dau tiên cu’ a dıa cu’ng,
bo’’i vì chúng can du’o˙’c truy ca
˙p qua BIOS. Xem phaˆn nói veha
˙n checu’ a BIOS o’’ trên.
Bat dau tu’ phiên ba’ n 21, LILO du’a ra màn hình trình do’n (thu˙’c do’n) cho phép cho
˙n he
˙thong de’ kho’’i do˙ng (tru’o’c dây can nhan phím Tab de’ go
˙i trình do’n này).
2.4.2 Các trình kho’’i do˙ng khác
Ngoài LILO de’ kho’’i do˙ng Linux có the’ kho’’i do
˙ng các trình kho’’i do
˙ng khác.
• Neu nhu’ tru’o’c khi cài da˙t Linux dã có HDH Windows NT/2000/XP, thì trình kho’’i do
˙ng
ba˙n do
˙c có the’ su’’ du
˙ng là OS Loader cu’ a NT. So sánh vo’i LILO thì trình kho’’i do
˙ng
OS Loader có ít nhaˆt hai u’u the. Thu’ nhat, tat ca’ cau hình cukhông bi˙
mat (chúng tacó the’ cho
˙n kho’’i do
˙ng Windows hay Linux theo lu
˙’a cho
˙n), và thu’ hai, có the’ cài da
˙t
Linux lên dıa mà LILO không the’ kho’’i do˙ng, ví du
˙, o’ dıa thu’ hai trên controller thu’ hai
(Secondary Slave).
• Neu nhu’ tru’o’c khi cài da˙t Linux ba
˙n do
˙c chı’ có HDH Windows 95 hay Windows 98 và
không có Windows NT/2000 hay XP, thì OS Loader không du’o˙’c cài da
˙t. Và neu nhu’ vì
mo˙t lý do nào dó ba
˙n do
˙c không muoˆn cài da
˙t LILO, thì có the’ su’’ du
˙ng chu’o’ng trình
kho’’i do˙ng loadlin.exe (thu’o’ng di kèm vo’i ba’ n phân phoˆi Linux);
• Tho’i gian gan dây trong thành phaˆn ba’ n phân phoˆi Linux thu’o’ng có chu’o’ng trình kho’’ido
˙ng GRUB.
• Trong thành phaˆn OS/2 cu’ a công ty IBM có chu’o’ng trình kho’’i do˙ng Boot Manager.
Trong rat nhieu hu’o’ng dan ngu’o’i ta khuyên dùng chu’o’ng trình này de’ to’i chu’c kho’’ido
˙ng nhieu HDH.
• Trong các nguoˆn thông tin khác nhau còn nha˘c den chu’o’ng trình System Commander;
• Thêm mo˙t trình kho’’i do
˙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 vechu’o’ng trình này trong phaˆn nho’ tiep theo.
Ngoài ra tác gia’ còn thay ngu’o’i ta nói den mo˙t loa
˙t trình kho’’i do
˙ng khác (moˆ
˙t socó the’
tìm thay 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’ sedu
˙’a
trên vie˙c su’’ du
˙ng LILO, NT Loader và loadlin.exe. Neˆu nhu’ có ý muon cài da
˙t chu’o’ng trình
kho’’i do˙ng khác, thì ba
˙n do
˙c can do
˙c hu’o’ng dan cài da
˙t và su’’ du
˙ng cu’ a nó.
14 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
2.4.3 Các phu’o’ng án kho’’i do˙ng
Nhu’ va˙y, theo ý kien cu’ a tác gia’ có các phu’o’ng án kho’’i do
˙ng sau:
• Neu dã cài da˙t Windows NT hay Windows 2000/XP, thì hãy su’’ du
˙ng NT Loader.
• Neu có Windows 95 hay Windows 98 trên FAT16, và ba˙n do
˙c không muoˆn cài da
˙t
chu’o’ng trình kho’’i do˙ng nào khác, thì có the’ su’’ du
˙ng LILO, hoa
˙c dau tiên cha
˙y DOS và
sau dó kho’’i do˙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 den).
• Neu dã cài da˙t Windows 95 OSR2 hay Windows 98 trên FAT32, và ba
˙n do
˙c không
muon cài da˙t thêm chu’o’ng trình kho’’i do
˙ng, thì can su’’ du
˙ng loadlin.exe. Raˆt nhieu
HOWTO kha’ ng di˙nh rang không caˆn su’’ du
˙ng LILO, neu nhu’ phân vùng kích hoa
˙t có
di˙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
do˙ng Linux qua NT Loader, cài da
˙t trên phân vùng FAT32, cu’ a tác gia’ dã ket 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 an
tu’o˙’ng tot, vì thetác gia’ khuyên ba
˙n do
˙c su’’ du
˙ng loadlin.exe de’ kho’’i do
˙ng Linux.
Trong nhu’ng phan tiep theo tác gia’ se cho biet cách cài da˙t Linux, su’’ du
˙ng tat ca’ ba
phu’o’ng án kho’’i do˙ng: qua trình kho’’i do
˙ng NT Loader, trình kho’’i do
˙ng LILO và trình kho’’i
do˙ng loadlin.exe. Tuy nhiên tru’o’c khi cài da
˙t trình kho’’i do
˙ng can 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
Du’a ra lo’i khuyên o’’ dây không pha’ i là vie˙c dedàng, vì phân vùng dıa phu
˙c thuo
˙c rat nhieu
vào ý thích và nhu caˆu cu’ a chu’ nhân dıa. Nhu’ng cung xin thu’’ du’a ra vài de nghi˙
sau. Tácgia’ seda
˙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. . . doi vo’i dıa và/dev/hda1, /dev/hda2 , v.v. . . – doi 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 thiet, 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ó do˙c chúng tu’ dıa khác nhau. Chính vì theˆ tot ho’n
het là dành cho moˆi he˙
dieu hành moˆ˙t (hoa
˙c tha
˙m chí mo
˙t vài nhu’ chúng ta se˜ thay o’’ du’o’i)
phân vùng riêng.Dau tiên chúng ta hãy xem xét moˆ
˙t tru’o’ng ho
˙’p do’n gia’ n – dung lu’o
˙’ng o’ dıa cu’ a ba
˙n do
˙c
không vu’o˙’t quá 8,4 Gbyte (nói chính xác ho’n – socylinder không vu’o
˙’t quá 1024). Trong
tru’o’ng ho˙’p này mo
˙i thu’ deu do’n gia’ n: ba
˙n do
˙c chı’ vie
˙c chia dıa làm sao de’ du’ cho cho he
˙dieu hành se˜ cài da˙t. Có the’ su’’ du
˙ng du’ lie
˙u cho biet kích thu’o’c dıa nho’ nhat can thiet de’ cài
da˙t he
˙dieu hành vo’i cau hình co’ ba’ n trong ba’ ng2.2.
Tuy nhiên xin hãy nho’ rang, 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˙
dieu 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 do
˙c du
˙’ tính cha
˙y. Và
còn pha’ i dành mo˙t phan du
˙’ tru’ không nho’ cho các chu’o’ng trình se˜ cài da
˙t sau này (không the’
tránh kho’ i!). Hãy tính rang, 700 Mbyte dành cho Linux o’’ trong ba’ ng nói trên chı’ dành chocác chu’o’ng trình cài da
˙t cùng vo’i Linux theo ma
˙c di
˙nh, trong soˆ dó có, ví du
˙, chu’o’ng trình
soa˙n tha’ o rat ma
˙nh Lyx. Doi vo’i Windows cung 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 HDH
He˙
dieu hành Yêu cauWindows 95 100 MbyteWindows 98 200 MbyteWindows NT 200 MbyteWindows 2000 700 MbyteLinux Red Hat 6.2 (Worksta-tion vo’i KDE)
700 Mbyte
Theo kinh nghieˆ˙m cu’ a tác gia’ thì de’ 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à du’ (tat nhiên, neˆu ba˙n do
˙c không cài da
˙t
các gói chu’o’ng trình lo’n, nhu’ OpenOffice.Org), còn doi vo’i Windows 200 thì caˆn phân vùnglo’n ho’n.
Bây gio’ chúng ta se˜ xem xét va´n de chia các phân vùng cho Linux. O’’ dây không the’ chı’chia mo
˙t phân vùng. Thu’ nhat, can chia mo
˙t phân vùng swapriêng bie
˙t cho Linux. Khi xác
di˙nh dung lu’o
˙’ng cu’ a phân vùng swap Linux caˆn tính den nhu’ng yeu 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
˙, neu
ba˙n do
˙c có 256 MByte RAM và 128 Mbyte không gian swap, thì se˜ có 384 Mbyte boˆ
˙nho’ a’ o.
• De’ làm vie˙c vo’i Linux can ít nhat 16 Mbyte bo
˙nho’ a’ o, vì theneu ba
˙n do
˙c chı’ có 4
Mbyte RAM, thì can 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 do
˙c muon có bo
˙nho’ a’ o lo’n ho’n, thì can 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’ rang 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 da˙t Linux vo’i cau 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à du’ . Còn ne´u
cài da˙t Linux vo’i cau hình nho’ nhat, thì không caˆn den 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˜ du’o
˙’c cài
da˙t.
Nói chung, chı’ nên suy nghı˜ ve van de 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 de’ to’ng sodung lu’o
˙’ng cu’ a
bo˙
nho’ a’ o (gom RAM và phân vùng swap) không nho’ ho’n 128 Mbyte. Còn neˆu nhu’ ba˙n do
˙c
có 128 Mbyte RAM hay nhieˆu ho’n, thì phân vùng này có the’ không can thiet.Tat ca’ các phaˆn còn la
˙i cu’ a Linux và các chu’o’ng trình hotro
˙’ theo nguyên ta˘c có the’ da
˙t
vào mo˙t phân vùng. Tuy nhiên, vieˆ
˙c da
˙t he
˙thong 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ˆ
˙thong ta
˙p tin Linux ba phân
vùng (neu tính ca’ swap thì thành 4). Phân vùng thu’ nhat (theo ý kien cá nhân tác gia’ , 1 Gbytelà du’ ) sechu’a he
˙thong ta
˙p tin goc (/ ). Phân vùng thu’ hai dành cho thu’ mu
˙c /home . Còn
phân vùng thu’ ba du’o˙’c gan vào thu’ mu
˙c /usr . Vie
˙c phân chia nhu’ va
˙y du
˙’a trên nhu’ng lý le
sau. Dù HDH Linux có o’n di˙nh và dáng tin ca
˙y den dâu, thì thı’nh thoa’ ng cung can cài da
˙t la
˙i.
Ví du˙, ba
˙n do
˙c muon 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 da˙t HDH Linux trên cùng máy tính vo’i Windows
du˙ng nên làm ho’ ng ta
˙p tin he
˙thong quan tro
˙ng, hoa
˙c do’n gia’ n là muon cài da
˙t mo
˙t ba’ n phân
phoi khác. Neu nhu’ tat ca’ du’o˙’c cài da
˙t vào mo
˙t phân vùng, thì khi cài da
˙t la
˙i nhu’ng du’ lie
˙u
dã làm ra và ghi nho’ trong thu’ mu˙c cá nhân se˜ bi
˙mat (neu không có ba’ n sao chép). Ngoài ra,
sebi˙
mat 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ˆnlo’n nhu’ng gói chu’o’ng trình này du’o
˙’c cài vào thu’ mu
˙c /usr . Neu dành cho thu’ mu
˙c này mo
˙t
phân vùng riêng và khi cài da˙t không di
˙nh da
˙ng la
˙i chúng, thì nhu’ng chu’o’ng trình nói trên
sedu’o˙’c giu’ la
˙i và có the’ selàm vie
˙c (rat có the’ can vài cau hình nho’ ) sau khi cài da
˙t la
˙i he
˙thong. Trong tiêu chua’n ve he˙
thong ta˙p tin cu’ a Linux FHS (cu
˙the’ xin xem o’’ chu’o’ng ??)
cung có lo’i khuyên vevie˙c da
˙t thu’ mu
˙c /usr lên mo
˙t phân vùng riêng.
Theo tác gia’ thay, nhu’ng ý kien nói trên dã du’ de’ ba˙n do
˙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 den o’’ phan tru’o’c (ha
˙n chedung lu’o
˙’ng dıa cu’ng), can da
˙t chu’o’ng trình
kho’’i do˙ng trong pha
˙m vi 1024 cylinder dau tiên. Nhân tieˆ
˙n, NT Loader không nhaˆt thiet pha’ i
da˙t vào phân vùng NTFS, cu˜ng nhu’ không nhaˆt thiet pha’ i da
˙t vào phân vùng chu’a các taˆ
˙p tin
khác cu’ a HDH. Nhu’ dã nói o’’ trên, doi vo’i Linux có the’ da˙t thu’ mu
˙c goc cùng vo’i thu’ mu
˙c
con/boot vào các cylinder "thaˆp" (trong vòng 1024 dau 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 de nghi
˙cu’ a tác gia’ cho ra ba’ ng to’ng ket sau:
• phan kho’’i do˙ng cu’ a tat ca’ các he
˙thong Microsoft da
˙t vào phân vùng chính dau tiên cu’ a
dıa, vo’i di˙nh da
˙ng FAT16 (DOS);
• phân vùng chính tieˆp theo dành cho thu’ mu˙c goc (/ ), 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 vekích thu’o’c cu’ a phânvùng này xem o’’ trên);
• phan còn la˙i cu’ a dıa da
˙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 HDH secài da
˙t: Windows
98, Windows NT/2000/XP, và dong tho’i cho các heˆ˙
thong ta˙p tin /home và /usr cu’ a
HDH Linux (trong /home seda˙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 da˙t).
Tat nhiên, neˆu nhu’ ba˙n do
˙c chı’ có Windows 95 vo’i FAT16, thì có the’ de’ Windows trên
phân vùng dau tiên. Neu nhu’ trên máy dã cài da˙t Windows NT hay có FAT32, thì moˆ
˙t phân
vùng FAT16 cu˜ng không thu’a. Thu’ nhat, ke’ ca’ trong tru’o’ng ho˙’p he
˙thong có van de, ba
˙n do
˙c
có the’ kho’’i do˙ng tu’ dıa mem DOS (ta
˙m tho’i khi chu’a làm quen vo’i Linux mo
˙t cách "tu’o’ng
ta˙n") và thay du’o
˙’c rang dıa cu’ng làm vie
˙c bình thu’o’ng. Thu’ hai, he
˙thong ta
˙p tin FAT16 du’o
˙’c
ho tro˙’ trên mo
˙i HDH, trong dó có Linux, vì the´ phân vùng này có the’ phu
˙c vu
˙cho vie
˙c trao
do’i ta˙p tin giu’a các heˆ
˙thong. Nhu’ng không nên de’ phân vùng này lo’n, vì FAT16 su’’ du
˙ng
không gian dıa rat 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 du’a ra vo’i gia’ thiet rang, ba
˙n do
˙c chı’ có mo
˙t dıa cu’ng. Neu nhu’
ba˙n do
˙c có 2, thì vaˆn su’’ du
˙ng du’o
˙’c nhu’ng lo’i khuyên này, chı’ có dieu phân vùng swap toˆt
ho’n da˙t trên dıa khác vo’i dıa dành cho Linux. Ngu’o’i ta nói rang nhu’ va
˙y tang toc do
˙làm vie
˙c
trong Linux (cung dehie’u vì dau do˙c ít pha’ i cha
˙y ho’n).
2.6 Windows NT và Linux: kho’’i do˙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, can lu
˙’a cho
˙n công cu
˙de’ du’a kehoa
˙ch này thành
hie˙n thu
˙’c. Chu’o’ng trình phân chia dıa du’o
˙’c biet den nhieu nhat là fdisk ; trên mo
˙i he
˙dieu
hành deu 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ìnhnày, ne´u nhu’ phân chia o’ dıa trang, không chu’a bat ký du’ lie
˙u nào. Nhu’ng chúng ta dang xem
xét tru’o’ng ho˙’p dã có HDH nào dó trên dıa và can 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’ nphâ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 ý
kien 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 do
˙c, nhu’ng ngu’o’i dùng Linux mo’i – neu nhu’ muon 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’ nhat, 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à, tat ca’ nhu’ng cài da˙t và cau hình tru’o’c dó sedu’o
˙’c ghi la
˙i). Khi này, không chı’ ta
˙o du’o
˙’c
phân vùng mo’i tu’ cho trong trên dıa, mà còn có the’ di chuye’n các phân vùng dã có theo ýmuon.
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 do ho
˙a desu’’ du
˙ng có hotro
˙’ chuo
˙t, và mo
˙i thao tác cu˜ng nhu’ thay do’i deu thay rõ ràng.
Dieu này rat quan tro˙ng vo’i ngu’o’i dùng mo’i.
Khi ta˙o phân vùng caˆn de’ ý không cho ranh gio’i giu’a các phân vùng ca˘t lan nhau.
Tác gia’ cho rang, nhu’ng thông tin dã du’a du’ de’ ba˙n do
˙c la
˙p kehoa
˙ch và thu
˙’c hie
˙n vie
˙c
phân chia o’ dıa thành các phân vùng. Vì theˆ tiep theo chúng ta se˜ xem xét các phu’o’ng án càida˙t hai HDH trên mo
˙t máy tính.
2.6 Windows NT và Linux: kho’’i do˙ng qua OS Loader cu’ a NT
Trong phan này, khi nói veˆ Windows NT xin ngaˆm hie’u ca’ Windows 2000 và NT, vì "quanhe˙" cu’ a chúng doi vo’i vie
˙c cài da
˙t Linux hoàn toàn gioˆng nhau. Chúng ta gia’ thiet là Windows
NT dã du’o˙’c cài vào phân vùng/dev/hda2 (neu nhu’ ba
˙n do
˙c nho’, /dev/hda1 sedành cho
phân vùng FAT16). Neˆu HDH Windows NT dã du’o˙’c cài da
˙t, nghıa là trình kho’’i do
˙ng OS
Loader cu˜ng dã du’o˙’c cài da
˙t. Và nhu’ thecó the’ su’’ du
˙ng chu’o’ng trình này de’ kho’’i do
˙ng Linux.
Tác gia’ hy vo˙ng rang ba
˙n do
˙c dã sao lu’u nhu’ng thông tin có giá tri
˙cu’ a mình. Các bu’o’c cài
da˙t có the’ mô ta’ nhu’ sau:
1. Neu nhu’ ba˙n do
˙c chu’a cài da
˙t Linux bao gio’, thì tru’o’c khi bat dau can chua’n bi
˙dıa
mem kho’’i do˙ng và phu
˙c hoi Windows NT. De’ ta
˙o dıa mem kho’’i do
˙ng chı’ can di
˙nh
da˙ng la
˙i dıa mem, roi sao chép lên dó các ta
˙p tin ntldr, ntdetect.com và boot.ini tu’ thu’
mu˙c goc cu’ a o’ dıa kho’’i do
˙ng NT. Chu’o’ng trình ta
˙o dıa phu
˙c hoi Windows 2000/XP có
the’ cha˙y tu’ trình do’n he
˙thong (le
˙nh Backup trong Start/Program/Accessories).
2. Dùng chu’o’ng trình Partition Magic de’ lay mo˙t phan dıa trong và tu’ dó ta
˙o ra phân vùng
vo’i da˙ng ext2(3) (heˆ
˙thong 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 da˙t Linux theo chı’ dan cu’ a ba’ n phân phoˆi. Trong khi cài da
˙t can chú ý den nhu’ng
die’m sau:
18 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
• thu’ nhat, trong quá trình cài da˙t nhat di
˙nh pha’ i ta
˙o ra các dıa mem kho’’i do
˙ng
Linux. Tu’c là can 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 du’o˙’c ho’ i có ta
˙o dıa mem kho’’i do
˙ng hay không. D¯ ıa mem
này sedu’o˙’c dùng den o’’ sau. Ngoài ra, có the’ su’’ du
˙ng dıa mem này de’ kho’’i do
˙ng
Linux. Dây cung là mo˙t phu’o’ng án kho’’i do
˙ng, và ho’n nu’a khác vo’i dıa mem kho’’i
do˙ng DOS, sau khi kho’’i do
˙ng he
˙thong không còn yêu caˆu dıa mem nu’a, có the’
bo’ nó ra kho’ i o’, su’’ du˙ng o’ de’ do
˙c các dıa mem khác. Tuy nhiên cách kho’’i do
˙ng
này cung có dieu tie˙n, vì thekhông nên su’’ du
˙ng thu’o’ng xuyên. Chı’ su’’ du
˙ng trong
tru’o’ng ho˙’p "bat dac dı". Dıa mem này còn caˆn thiet cho cau hình de’ kho’’i do
˙ng
nhieu HDH.
• thu’ hai, khi cài da˙t Linux can cài LILO vào sector dau tiên cu’ a phân vùng dành
cho thu’ mu˙c goc (/) cu’ a Linux, chu’ không pha’ i vào sector kho’’i do
˙ng chính cu’ a
dıa (MBR). Chúng ta gia’ thiet Linux du’o˙’c cài vào phân vùng/dev/hda3 . Nhu’
va˙y LILO se du’o
˙’c cài vào sector dau tiên cu’ a /dev/hda3
Theo nguyên ta˘c, neu nhu’ ba˙n do
˙c cài LILO vào MBR, thì không pha’ i mo
˙i thu’ dã ho’ ng
het. Ket qua’ cuoi cùng (kho’’i do˙ng qua NT Loader) vaˆn có the’ da
˙t du’o
˙’c nhu’ng can bo’
ra mo˙t chút công su’c. Van deo’’ cho, di
˙nh da
˙ng MBR ta
˙o bo’’i LILO và Windows (DOS)
khác nhau. Vì theˆ neu ba˙n do
˙c cài LILO vào MBR, thì caˆu phu
˙c hoi la
˙i MBR cu’ a
Windows. Tác gia’ cung senói cách phu˙c hoi, nhu’ng tot ho’n het là ba
˙n do
˙c cài LILO
ngay la˙p tu’c vào sector dau tiên cu’ a phân vùng dã cài Linux.
4. Sau khi cài da˙t xong, kho’’i do
˙ng Linux bang dıa mem (neu nhu’ ba
˙n do
˙c cài LILO vào
phân vùng cu’ a Linux và không do˙ng gì den MBR, thì dây là kha’ nang duy nhaˆt).
5. Sao chép sector kho’’i do˙ng cu’ a Linux vào moˆ
˙t ta
˙p tin; ta
˙p tin này se˜ can de’ trình kho’’i
do˙ng Windows NT/2000 có the’ kho’’i do
˙ng Linux. Vie
˙c sao chép thu
˙’c hie
˙n nhu’ sau: dau
tiên gan mo˙t dıa mem trang (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
de’ ghi no˙i dung sector kho’’i do
˙ng cu’ a dıa/dev/hda3 vào ta
˙p tin /mnt/floppy/bootsect.lnx .
1
6. Tiep theo caˆn kho’’i do˙ng la
˙i de’ vào Windows NT, ba˘ng câu le
˙nh:
1Ghi chú: ne´u dıa C: (/dev/hda1) có di˙nh da
˙ng FAT, thì có the’ ta
˙o ta
˙p tin bootsect.lnx trong thu’ mu
˙c goc cu’ a
dıa C:. Tác gia’ không biet (chu’a thu’’) có the’ kho’’i do˙ng không caˆn dıa mem không, neˆu phân vùng chính dau
tiên có di˙nh da
˙ng NTFS. Tuy nhiên o’’ dây cung không có vaˆn de gì, chı’ can sao chép sector kho’’i do
˙ng qua dıa
mem nhu’ dang trình bày. Ta˙m tho’i nhân Linux còn chu’a hotro
˙’ tot vie
˙c ghi lên phân vùng NTFS.
2.6 Windows NT và Linux: kho’’i do˙ng qua OS Loader cu’ a NT 19
kênh giao tác[root]# shutdown -h now
Vì MBR chu’a có gì thay do’i, nên Windows NT se˜ kho’’i do˙ng. Trong NT caˆn sao chép
ta˙p tin bootsect.lnx vào thu’ mu
˙c goc cu’ a dıa C:, hay chính xác ho’n là vào thu’ mu
˙c goc
cu’ a phân vùng mà tu’ dó kho’’i do˙ng Windows NT. Dây có the’ là phân vùng FAT16 hay
phân vùng NTFS. D¯ a˙c die’m de’ 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’ da
˙t thuo
˙c tính
chı’ do˙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"
(tat nhiên, trong daˆu ngoa˙c kép ba
˙n do
˙c có the’ da
˙t tên bat ky.)
8. Vie˙c còn la
˙i là kho’’i do
˙ng la
˙i máy tính mo
˙t lan nu’a, và trong trình do’n cho
˙n he
˙dieu
hành se˜ có LINUX. Neu cho˙n LINUX, thì LILO se du’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 do
˙c (do vô tình hay coˆ ý) cài da
˙t LILO
vào ba’ n ghi kho’’i do˙ng chính cu’ a dıa (Master Boot Record, MBR). Trong tru’o’ng ho
˙’p này ba’ n
ghi kho’’i do˙ng Windows NT (hay 2000) se˜ bi
˙xóa, và vie
˙c kho’’i do
˙ng Windows NT (bu’o’c thu’
6 o’’ trên) là không the’. Neu nhu’ ba˙n do
˙c van còn muoˆn su’’ du
˙ng trình kho’’i do
˙ng OS Loader
cu’ a NT, chu’ không muoˆn dùng LILO, thì nhu’ng bu’o’c trên có thay do’i mo˙t chút: thay cho
bu’o’c thu’ 6 can làm các thao tác sau.
1. Kho’’i do˙ng Windows NT tu’ dıa mem kho’’i do
˙ng (dã ta
˙o tru’o’c khi cài da
˙t Linux, neu
không có thì ba˙n do
˙c can tìm mo
˙t máy khác dang cha
˙y Windows NT roi ta
˙o). Trong
trình do’n (thu˙’c do’n) cu’ a trình kho’’i do
˙ng can cho
˙n le
˙nh Recover, roˆ i cho
˙n che do
˙Command mode. Sau dó dang nha˙p vào tài khoa’ n nhà qua’ n tri
˙(administrator).
2. Phu˙c hoi la
˙i ba’ n ghi kho’’i do
˙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 sobài báo nói cách phu
˙c hoi MBR nhu’
va˙y không pha’ i lúc nào cung 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 hoi he
˙thong). Cha
˙y hai le
˙nh này theo thu’ tu
˙’
dã chı’ ra. Sau dó Windows 2000 se˜ kho’’i do˙ng bình thu’o’ng.
3. Kho’’i do˙ng la
˙i máy tính tu’ dıa mem kho’’i do
˙ng Linux và dang nha
˙p vào he
˙thong vo’i
quyen ngu’o’i dùng root.
4. Nha˙p le
˙nhcd /etc và mo’’ ta
˙p tin lilo.conf . O’’ dau ta
˙p tin này có liên keˆt den phân
vùng kho’’i do˙ng theo ma˘
˙c di
˙nh, ví du
˙, /dev/hda .
5. Dùng bat ky trình soa˙n tha’ o nào, ví du
˙, CoolEdit cu’ a Midnight Commander, de’ 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ùngdu’o
˙’c gan nhu’ goc (/) cu’ a Linux). Neu Linux du’o
˙’c cài vào phân vùng/dev/hda3 , thì
can ghi cái dó, tu’c là thay theˆ /dev/hda thành/dev/hda3 . Neu nhu’ ba˙n do
˙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 ket qua’ tu’o’ng tu
˙’ nhu’
sau2:2có nghı˜a là tìm phân vùng dã gan vào thu’ mu
˙c goc /, trong ví du
˙này là /dev/hda3
20 Cài da˙t HDH 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 de’ ghi trình kho’’i do
˙ng vào phân vùng /dev/hda3 (caˆn cha
˙y
le˙nh lilo không có tham soˆ). Secó ca’ nh báo veˆ vie
˙c phân vùng không pha’ i là dau
tiên trên dıa. Dây chính là dieu chúng ta caˆn, ba’ n ghi kho’’i do˙ng cu’ a Windows du’o
˙’c giu’
nguyên ve˙n.
7. Thu˙’c hie
˙n các bu’o’c 6-8 nhu’ o’’ trên.
Dedàng doán ra ra˘ng, "quy trình" phu’c ta˙p vo’i hai lan kho’’i do
˙ng la
˙i chı’ de’ chuye’n sector
kho’’i do˙ng Linux tu’ MBR vào sector dau tiên cu’ a phân vùng dành cho Linux, và phu
˙c hoi
MBR cu’ a Windows.Quá trình cài da
˙t Linux ket thúc o’’ dây. Ba
˙n do
˙c dã có the’ cho
˙n HDH sekho’’i do
˙ng và dieu
khie’n máy tính cu’ a mình.
2.7 Su’’ du˙ng trình kho’’i do
˙ng LILO
2.7.1 Cài da˙t và cau hình LILO
Nhu’ dã nói trong phaˆn lu˙’a cho
˙n chu’o’ng trình kho’’i do
˙ng, neu trên máy dã cài Windows 98
vo’i he˙
thong ta˙p tin FAT16, thì lu
˙’a cho
˙n tot ho’n cho trình kho’’i do
˙ng là chu’o’ng trình có trong
thành phaˆn cu’ a mo˙i ba’ n phân phoˆi HDH Linux – LILO (LI nuxLOader).
Giong nhu’ tru’o’ng ho˙’p Windows NT, chúng ta se˜ du’a ra các bu’o’c can thu
˙’c hie
˙n de’ có the’
kho’’i do˙ng nhieu HDH.
1. Tru’o’c khi cài da˙t Linux hãy chua’n bi
˙dıa mem kho’’i do
˙ng Windows.
2. Dùng chu’o’ng trình Partition Magic de’ lay phan 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ˆ
˙thong ta
˙p tin Linux) và mo
˙t phân vùng swap. Cách
chia o’ dıa dã nói o’’ trên. Neu dung lu’o˙’ng o’ dıa cu’ng vu’o
˙’t quá 8,4 Gbyte thì hãy do
˙c ky
các phaˆn 2.3và2.5.
3. Cài da˙t Linux theo chı’ dan di kèm vo’i ba’ n phân phoˆi. Can nho’ rang, neu ba
˙n muon su’’
du˙ng trình kho’’i do
˙ng LILO, thì trong quá trình cài da˘
˙t Linux can cho
˙n phu’o’ng án cài
LILO vào ba’ n ghi kho’’i do˙ng chính (Master Boot Record). Ta
˙o các dıa mem kho’’i do
˙ng
theo nguyên ta˘c là không ba˘t buo˙c, nhu’ng tác gia’ khuyên ba
˙n do
˙c nên làm.3
4. Bu’o’c tiep theo caˆn cau hình LILO de’ có the’ kho’’i do˙ng các HDH theo lu
˙’a cho
˙n. LILO
du’o˙’c cau hình bang ta
˙p tin /etc/lilo.conf và câu le
˙nh /sbin/lilo . Câu le
˙nh này
dùng de’ cài da˙t (hay cài da
˙t la
˙i) LILO.
Chúng ta xem xét moˆ˙t ví du
˙nho’ cu’ a ta
˙p tin cau hình LILO. Trong ví du
˙này chúng
ta secoi nhu’ thiet bi˙
/dev/hda1 là phân vùng vo’i DOS/Windows, còn phân vùng
3Ghi chú. Trình kho’’i do˙ng LILO không bat buo
˙c pha’ i cài da
˙t vào ba’ n ghi kho’’i do
˙ng chính cu’ a dıa, LILO
có the’ nam o’’ ba’ n ghi kho’’i do˙ng cu’ a phân vùng chính du’o
˙’c kích hoa
˙t và chu’a thu’ mu
˙c goc 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 can pha’ i có kha’ nang na
˙p LILO,
ví du˙
khi MBR là trình kho’’i do˙ng cu’ a MS-DOS hay Windows. Tuy nhiên tác gia’ chu’a nhìn thaˆy su
˙’ can thiet
cu’ a u’ng du˙ng này (neˆu dã cho
˙n LILO làm trình kho’’i do
˙ng chính thì hãy su’’ du
˙ng cho "tro
˙n bo
˙"), vì thechúng ta
sekhông xem xét den.
2.7 Su’’ du˙ng trình kho’’i do
˙ng LILO 21
/dev/hda2 chu’a Linux. Trong tru’o’ng ho˙’p dó /etc/lilo.conf có da
˙ng gan nhu’
sau:kênh giao tác
boot = /dev/hda2compactdelay = 50# message = /boot/bootmesg.txtroot = currentimage = /boot/vmlinuz-2.4.22label = linuxread-onlyother = /dev/hda1table = /dev/hdalabel = dos
Vài lo’i gia’ i thích cho ví du˙: Dòngboot cho biet thiet bi
˙kho’’i do
˙ng.
Dòngcompact ba˙t chedo
˙nén ta
˙p tin map – taˆ
˙p tin chu’a da
˙c tính cu’ a nhân du’o
˙’c kho’’i
do˙ng; tính nang (nén) này ta˘ng toc do
˙cu’ a kho’’i do
˙ng dau.
Câu le˙nh message dùng de’ du’a ra thông báo theo ý muoˆn khi kho’’i do
˙ng.
Bat dau tu’ dòngimage là các phaˆn nho’ cu’ a ta˙p tin cau hình, moi phan tu’o’ng u’ng vo’i
mo˙t he
˙dieu hành se˜ kho’’i do
˙ng theo lu
˙’a cho
˙n cu’ a ngu’o’i dùng. Trong moˆi phan 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 nhac LILO hay tên se˜
hie’n thi˙
trong trình do’n cu’ a LILO de’ có the’ cho˙n HDH muon kho’’i do
˙ng. Neu nhu’ tên
không du’o˙’c nha
˙p sau khoa’ ng tho’i gian chı’ trên dòngdelay (tính theo phaˆn mu’o’i giây
– can nhân vo’i 0,1 giây), thì se˜ kho’’i do˙ng HDH theo ma
˙c di
˙nh. Trong ví du
˙này, se˜
kho’’i do˙ng Linux theo ma˘
˙c di
˙nh, vì phan cau hình tu’o’ng u’ng vo’i Linux nam dau tiên
trong ta˙p tin. Có the’ chı’ ra he
˙dieu hành du’o
˙’c kho’’i do
˙ng theo ma˘
˙c di
˙nh khi thêm moˆ
˙t
dòng có da˙ng default=dos , tu’c là su’’ du
˙ng tên dã da
˙t trên dònglabel .
Dòngtable=<device> cho biet tên thiet bi˙chu’a ba’ ng phân chia dıa. LILO sekhông
du’a thông tin veˆ phân chia dıa cho heˆ˙
dieu hành du’o˙’c kho’’i do
˙ng neu bien này không
du’o˙’c du’a ra. (Mo
˙t sohe
˙dieu hành có công cu
˙khác de’ xác di
˙nh là dã du’o
˙’c kho’’i do
˙ng
tu’ phân vùng nào.) D¯ u’ng quên ra˘ng, can thu˙’c hie
˙n câu le
˙nh /sbin/lilo , sau khi thay
do’i chı’ dan den ba’ ng phân chia dıa, tu’c là thay do’i bien table . Neu da˙t dòng (go
˙i
là phan nho’ thì tot ho’n) other = /dev/hda1 trong ta˙p tin /etc/lilo.conf , thì
trong thu’ mu˙c goc cu’ a dıa /dev/hda1 (dıa C: trong heˆ
˙thong thua
˙t ngu’ Microsoft) can
có trình kho’’i do˙ng phu
˙(không pha’ i là chính). Trên moˆ
˙t máy cu’ a tác gia’ o’’ dó nam trình
kho’’i do˙ng NT Loader (vì Windows NT du’o
˙’c cài da
˙t tru’o’c Linux), và LILO kho’’i do
˙ng
thành công Windows NT. Chı’ can da˙t tho’i gian cho’ kho’’i do
˙ng trong ta
˙p tin boot.ini
bang không, de’ không tha´ y trình do’n kho’’i do˙ng cu’ a NT Loader. Tuy nhiên, neˆu vì mo
˙t
lý do nào dó ba˙n muon thay trình do’n này thì giá tri
˙timeout trong taˆ
˙p tin boot.ini can
da˙t khác không (tho’i gian cho’ du’o
˙’c tính theo giây). D¯ ieu này có the’ can thiet khi muon
kho’’i do˙ng ca’ Windows 98 tu’ trình do’n cu’ a NT Loader (trong tru’o’ng ho
˙’p này se˜ có 3
HDH: Linux, Windows NT và Windows 98, trong trình do’n cu’ a LILO neu cho˙n dos
thì sehie˙n ra trình do’n cu’ a NT Loader roˆ i tu’ dó cho
˙n mo
˙t trong hai HDH Windows de’
kho’’i do˙ng).
Neu ba˙n do
˙c muon kho’’i do
˙ng Windows tru
˙’c tiep tu’ LILO, thì hãy thêm phaˆn nho’ sau
vào /etc/lilo.conf :
22 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
kênh giao tácother = /boot/bootsect.doslabel = win
trong dó bootsect.dos laˆy tu’ thu’ mu˙c goc cu’ a o’ dıa chu’a NT Loader.
5. Sau khi su’’a xong ta˙p tin /etc/lilo.conf theo ý muoˆn, can cha
˙y câu le
˙nh/sbin/lilo
de’ nhu’ng thay do’i có hie˙u lu
˙’c. Câu le
˙nh này (trong tài lieˆ
˙u hu’o’ng dan go
˙i là map-
installer) cài da˙t trình kho’’i do
˙ng phu
˙, mà se˜ du’o
˙’c kích hoa
˙t trong lan kho’’i do
˙ng tiep
theo. Tru’o’c khi cha˙y /sbin/lilo de’ thay do’i bu’o’c kho’’i do
˙ng, hãy thu
˙’c hie
˙n câu le
˙nh
này vo’i tham so´ -t . Khi có tham soˆ này sethu˙’c hie
˙n tat ca’ các thu’ tu
˙c cài da
˙t trình
kho’’i do˙ng, tru’ vie
˙c thay do’i ta
˙p tin map, ba’ n ghi sector kho’’i do
˙ng, và ba’ ng phân chia o’
dıa, tu’c là chı’ cha˙y thu’’ cau hình mo’i. Neu cho thêm tùy cho
˙n -v , thì ba
˙n do
˙c sedu’o
˙’c
biet thêm thông tin chi tieˆt ve nhu’ng gì le˙nh /sbin/lilo sethu
˙’c hie
˙n.
Khi /sbin/lilo ghi dè no˙i dung mo’i lên sector kho’’i do
˙ng, thì no
˙i dung cucu’ a
sector này se˜ tu˙’ do
˙ng du’o
˙’c ghi nho’ vào mo
˙t ta
˙p tin. Theo ma˘
˙c di
˙nh dó là ta
˙p tin
/boot/boot.NNNN , trong dó NNNN tu’o’ng u’ng vo’i so cu’ a thiet bi˙, ví du
˙, 0300 –
tu’o’ng u’ng /dev/hda , 0800 –/dev/sda , v.v. . . Neu 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’ da
˙t mo
˙t tên khác de’ ghi sector kho’’i do
˙ng, không
nhat thiet pha’ i dùng /boot/boot.NNNN .
Ta˙p tin /boot/boot.NNNN có the’ su’’ du
˙ng de’ phu
˙c hoi no
˙i dung cucu’ a sector kho’’i
do˙ng, neu không còn cách phu
˙c hoi nào khác do’n gia’ n ho’n. Câu le
˙nh de’ 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
haykênh giao tác
[root:~#] dd if=/boot/boot.0800 of=/dev/hda bs=446 count=1
(bs=446 vì chı’ phu˙c hoi chu’o’ng trình kho’’i do
˙ng, và không do
˙ng gì den ba’ ng phân chia
dıa).
Cung có the’ phu˙c hoi MBR cu khi can thiet bang câu le
˙nh /sbin/lilo vo’i tùy cho
˙n
-u . Nhu’ng can biet rang, câu leˆ˙nh này chı’ làm vie
˙c dúng vo’i dieu kie
˙n là thu’ mu
˙c LILO
(tu’c là /boot ) không thay do’i ke’ tu’ khi cài da˙t.
MBR cu’ a MS-DOS có the’ du’o˙’c phu
˙c hoi bang cách kho’’i do
˙ng vào DOS tu’ dıa mem
(CD) roi cha˙y câu le
˙nh fdisk /mbr (xem trên). Leˆ
˙nh này chı’ thay do’i mã chu’o’ng trình
kho’’i do˙ng nam trong MBR, mà không thay do’i ba’ ng phân chia dıa.
6. Sau khi cài da˙t la
˙i trình kho’’i do
˙ng can kho’’i do
˙ng la
˙i máy tính và thu’’ các phu’o’ng án
kho’’i do˙ng khác nhau de’ kie’m tra.
De’ ket thúc phan nói veLILO này chúng ta se˜ xem xét vài khó kha˘n có the’ xuat hie˙n khi
su’’ du˙ng LILO, và cách kha˘c phu
˙c (neu có the’).
Khi LILO du’o˙’c na
˙p, nó du’a ra màn hình tu’ "LILO". Khi này moi chu’ cái bie’u thi
˙su˙’ ket
thúc mo˙t hành do
˙ng nào dó hay ket thúc mo
˙t bu’o’c na
˙p LILO. Neu kho’’i do
˙ng bi
˙bi˙
ngu’nggiu’a chu’ng, thì qua soˆ chu’ cái du’a ra có the’ nha
˙n di
˙nh venguyên nhân xuaˆt hie
˙n van de.
2.7 Su’’ du˙ng trình kho’’i do
˙ng LILO 23
• Không chu’ cái nào hieˆ˙n ra – không có phaˆn nào cu’ a LILO du’o
˙’c na
˙p. Hoa
˙c LILO không
du’o˙’c cài da
˙t, hoa
˙c phân vùng chu’a LILO chu’a du’o
˙’c kích hoa
˙t.
• L [mã loi] – trình kho’’i do˙ng chính dã du’o
˙’c na
˙p và dã cha
˙y (tu’c là dã nha
˙n du’o
˙’c quyen
dieu khie’n), nhu’ng nó không the’ na˙p trình kho’’i do
˙ng phu
˙. Mã loi hai ký tu
˙’ cho biet
nguyên nhân cu˙
the’ cu’ a van de (cách gia’ i mã can tìm trong tài lie˙u ky thua
˙t cu’ a LILO).
Thông thu’o’ng thì van de na’ y sinh do o’ dıa xau (có khuye´ t ta˙t) hay không da
˙t dúng cau
trúc hình ho˙c cu’ a dıa. Neu LILO không du’ng la
˙i o’’ dây, mà tie´ p tu
˙c du’a ra mo
˙t chuoi
vô ta˙n các mã loˆ i, thì van de thu’o’ng degia’ i quyet.
• LI – trình kho’’i do˙ng chính dã na
˙p du’o
˙’c trình kho’’i do
˙ng phu
˙, nhu’ng không cha
˙y du’o
˙’c
nó. Có the’ là loi du’a cau 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 do˙ng phu
˙dã du’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 du’a dúng cau trúc
hình ho˙c cu’ a dıa.
• LIL? – trình kho’’i do˙ng phu
˙dã du’o
˙’c na
˙p vào di
˙a chı’ không dúng. Thông thu’o’ng do loi
du’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 loi du’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 – tat ca’ các phaˆn cu’ a LILO du’o˙’c na
˙p thành công.
2.7.2 Cài da˙t các he
˙dieu hành khác sau Linux
Khi cài da˙t MS-DOS và Windows 95/98, trình kho’’i do
˙ng cu’ a chúng (không phu
˙thuo
˙c vào ý
muon cu’ a ba˙n do
˙c) du’o
˙’c ghi vào Master Boot Record (MBR), và daˆu kích hoa
˙t trong ba’ ng
phân vùng se˜ du’o˙’c chuye’n sang phân vùng MS-DOS (Windows 95/98). Mà trình kho’’i do
˙ng
MS-DOS và Windows 95/98 chı’ "biet" chuye’n quyen dieu khie’n cho sector dau tiên cu’ aphân vùng kích hoa
˙t. Nhu’ the, neu nhu’ ba
˙n do
˙c dau tiên cài da
˙t Linux, và sau dó mo’i cài da
˙t
Windows 95/98 hay MS-DOS, thì Linux se˜ không the’ kho’’i do˙ng. Có the’ phu
˙c hoi la
˙i LILO
bang cách cha˙y le
˙nh /sbin/lilo (neu LILO du’o
˙’c cài vào MBR), hoa˘
˙c kích hoa
˙t phân vùng
chu’a LILO (neu LILO du’o˙’c cài vào phân vùng chính).
Khi có van de sau khi cài da˙t mo
˙t he
˙dieu hành khác sau Linux, thu’o’ng có the’ gia’ i quyet
bang cách kho’’i do˙ng vào Linux ba˘ng dıa mem kho’’i do
˙ng, su’’a la
˙i ta
˙p tin cau hình LILO (thêm
phan nho’ cho HDH mo’i), roi 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 nhat ho tro˙’ kha’ nang da
˙t các ta
˙p tin can thiet trên giai doa
˙n
kho’’i do˙ng vào heˆ
˙thong 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’’ dau (không có ha˙n checu’ a BIOS), nên cho phép gia’ i
quyet nhieu van decu’ a o’ dıa lo’n, khi mà thu’ mu˙c /boot không the’ nam trên phân vùng dành
cho Linux.
24 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
De’ thu˙’c hie
˙n phu’o’ng án kho’’i do
˙ng này, caˆn phân vùng DOS o’’ chedo
˙do
˙c/ghi, ta
˙o trong
dó mo˙t thu’ mu
˙c (ví du
˙, /dos/linux ), và chuye’n tat ca’ các ta
˙p tin tu’ thu’ mu
˙c /boot vào
dó; thu’ mu˙c /boot du’o
˙’c chuye’n thành liên keˆt tu’o
˙’ng tru’ng den thu’ mu
˙c /dos/linux ; vi
˙trí
mo’i cu’ a thu’ mu˙c /boot can chı’ ra trong ta
˙p tin /etc/lilo.conf , và cuoi cùng cha
˙y le
˙nh
/sbin/lilo .
2.8 Kho’’i do˙ng Linux tu’ MS-DOS bang loadlin.exe
Không chı’ các ta˙p tin kho’’i do
˙ng và nhân có the’ nam trong phân vùng DOS, mà ca’ tien trình
kho’’i do˙ng Linux nói chung có the’ du’o
˙’c to’ chu’c tu’ DOS. Kha’ nang này thu
˙’c hie
˙n nho’ chu’o’ng
trình da˙c bie
˙t loadlin.exe, do Hans Lermen ([email protected]) viet. 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 do˙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 do
˙ng này du’o
˙’c khuyên su’’ du
˙ng cho ngu’o’i
dùng Linux mo’i. Phan lo’n ngu’o’i dùng mo’i (và không chı’ ho˙) không du’ kiên nhan de’ do
˙c tài
lie˙u rat hay nhu’ng rat dài (và la
˙i viet trên tieng Anh nu’a) cu’ a LILO. Vì theho
˙thu’o’ng su’’ du
˙ng
LILO không dúng cách, và keˆt qua’ là không the’ kho’’i do˙ng du’o
˙’c bat ky he
˙dieu hành nào (tác
gia’ cung dã ro’i vào tru’o’ng ho˙’p nhu’ va
˙y). Doi vo’i nhu’ng ngu’o’i dùng mo’i thì sethua
˙n tie
˙n ho’n
khi su’’ du˙ng loadlin.exe de’ kho’’i do
˙ng và bat dau tìm hie’u Linux. Tuy nhiên,"không vào hang
co˙
p sao ba˘t du’o˙’c co
˙p".
Chu’o’ng trình loadlin.exe không yêu caˆu pha’ i cài da˙t, chı’ can da
˙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 de’ kho’’i do˙ng Linux tu’ CD hoa
˙c tu’ o’ dıa trong ma
˙ng mà không caˆn su’’ du
˙ng
dıa mem kho’’i do˙ng. Kha’ nang này bie´ n loadlin.exe thành moˆ
˙t công cu
˙tuye
˙t vo’i de’ kho’’i do
˙ng
Linux khi có van de vo’i LILO.Phiên ba’ n 1.6 cu’ a loadlin.exe làm vieˆ
˙c vo’i mo
˙i cau 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 tiep vào vùng boˆ
˙nho’ nam 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 hotro˙’ "kho’’i do
˙ng lôgíc" cu’ a máy tính, và sau dó DOS du’o
˙’c thay the´ hoàn toàn ba˘ng
Linux. Neu nhu’ ba˙n do
˙c muon quay tro’’ la
˙i DOS, thì pha’ i kho’’i do
˙ng la
˙i máy tính, ví du
˙, bang
câu le˙nh reboot .
Nhu’ va˙y, can làm gì de’ có the’ su’’ du
˙ng chu’o’ng trình loadlin.exe.
• Trên máy tính cu’ a ba˙n (tat nhiên vo’i bo
˙xu’’ lý 386 hoa
˙c cao ho’n) can cài da
˙t DOS hay
WINDOWS 95.
• Can có a’ nh nén cu’ a nhân Linux (zImage, bzImage)5.
• Chu’o’ng trình loadlin.exe. Có the’ tìm thay trên dıa phân phoˆi o’’ da˙ng không nén hay trong
gói LOADLIN16.TGZ. Gói nén này còn chu’a hu’o’ng dan su’’ du˙ng DOC\MANUAL.TXT,
ta˙p tin tham soˆ ví du
˙DOC\TEST.PAR, và hu’o’ng dan cách du’a các tham soˆ DOC\PARAMS.DOC
(du’ng quên ra˘ng chúng là nhu’ng ta˙p tin DOS).
4mo˙t soba’ n phân phoˆi còn có gói cài da
˙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 root5Ghi chú. zImage là di
˙nh da
˙ng nhi
˙phân cu˜ cu’ a nhân, bzImage là di
˙nh da
˙ng mo’i ho’n (sophiê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. Tiep theochúng ta se˜ chı’ nói vecác ta
˙p tin zImage, ma˘
˙c dù ba
˙n do
˙c có the’ thay thezImage thành bzImage
2.8 Kho’’i do˙ng Linux tu’ MS-DOS bang loadlin.exe 25
Neu ba˙n cha
˙y loadlin.exe không có tham soˆ
C:\LOADLIN> loadlin
thì senha˙n du’o
˙’c hu’o’ng dan su’’ du
˙ng ngan go
˙n. Thua
˙n tie
˙n ho’n de’ do
˙c hu’o’ng dan này, khi
cha˙y chu’o’ng trình vo’i tham so´ more (giong trong Linux)C:\LOADLIN> loadlin | more
Bây gio’ chúng ta có the’ xem xét các bu’o’c cài da˙t Linux khi su’’ du
˙ng loadlin.exe de’ kho’’i
do˙ng.
1. Chia các phân vùng cho Linux (cách làm xem phaˆn 2.5)
2. Cài da˙t Linux vào phân vùng dã chia. LILO can cài da
˙t vào sector dau tiên cu’ a phân
vùng Linux de’ không ghi dè lên MBR và không bi˙
mat kha’ nang kho’’i do˙ng vào
Windows.
3. Sau khi ke´ t thúc phan cài da˙t hãy kho’’i do
˙ng Linux (neu không có cách nào khác, hãy
su’’ du˙ng dıa mem kho’’i do
˙ng). Gan phân vùng DOS (gia’ thiet 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 thiet nho’ ta
˙p tin /etc/lilo.conf : tìm trong
ta˙p tin cau hình dòng "image=..." và ba
˙n do
˙c sethay tên can thiet o’’ phía bên pha’ i dau
bang. 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à do’i tên thành vmlinuz (vieˆ˙c do’i tên là không nhaˆt
thiet, 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 do˙ng la
˙i máy tính vào DOS tru
˙’c tiep (neu ba
˙n do
˙c có Windows 95/98 thì
can nhan phím <F8> khi kho’’i do˙ng de’ hie’n thi
˙trình do’n cho phép cho
˙n DOS), hoa˘
˙c
qua ho˙p thoa
˙i lu
˙’a cho
˙n khi nhan le
˙nh tat 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, neu ba
˙n do
˙c muon 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 tat 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’ nang này da˙c bie
˙t có ích khi du’a nhieu tham soˆ dòng le
˙nh và khi do
˙dài
cu’ a dòng le˙nh lo’n ho’n 127 ký tu
˙’. Mô ta’ day du’ tat ca’ các tham soˆ cu’ a câu le
˙nh
loadlin.exe có the’ tìm thay trong ta˙p tin PARAMS.DOC hoa˘
˙c Internet trên trang
http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.htmlvàhttp://rsphy1.anu.edu/ gpg109/BootPrompt-HOWTO.html
26 Cài da˙t HDH Linux trên cùng máy tính vo’i Windows
Bây gio’ ba˙n do
˙c có the’ su’’ du
˙ng cách này de’ kho’’i do
˙ng Linux. Công vieˆ
˙c duy nha´ t còn
la˙i là làm sao de’ không pha’ i gõ le
˙nh loadlin vo’i tat ca’ các tham soˆ sau moˆi lan kho’’i do
˙ng
la˙i. Có the’ viet 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ˆ do
˙DOS tru’o’c, sau dó thì
cha˙y Linux. Tác gia’ cho rang nhu’ng thông tin dã du’a ra o’’ trên du’ de’ ta
˙o ta
˙p tin bat can thiet.
Can nói thêm ra˘ng, không du’o˙’c kho’’i do
˙ng Linux tu’ giao die
˙n do ho
˙a DOS/Windows và caˆn
tat mo˙t vài tùy cho
˙n trong ta
˙p tin a’n C:\MSDOS.SYS (dây là ta
˙p tin van ba’ n thông thu’o’ng),
bang cách thêm vào hai dòng sau (neˆu chu’a có):BootGUI=0
Logo=0
Dòng dau tiên tat giao die˙n do ho
˙a, và DOS se˜ du’o
˙’c kho’’i do
˙ng thay cho Windows 95/98.
(De’ cha˙y giao die
˙n do ho
˙a, can nha
˙p câu le
˙nh C:> win).
Logo=0 tat vie˙c hie’n thi
˙bie’u tu’o
˙’ng Windows (cu’’a so’). Van de o’’ cho, doi vo’i mo
˙t soca
˙c
màn hình Linux se˜ du’a ra mo˙t màn hình troˆng rong sau khi kho’’i do
˙ng, neu nhu’ có hie’n thi
˙bie’u tu’o˙’ng Windows.
Chu’o’ng 3
Bash
Tot go ho’n tot nu’o’c so’n– ca dao tu
˙c ngu’ Vie
˙t Nam
Trong phan này chúng ta se˜ de ca˙p den van de làm vie
˙c vo’i Linux o’’ chedo
˙text, hay còn
du’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’’ chedo
˙này, vì dã có giao dieˆ
˙n do ho
˙a. Tuy nhiên dây là mo
˙t ý kien
sai lam, bo’’i vì rat nhieu công vie˙c có the’ thu
˙’c hie
˙n nhanh và thuaˆ
˙n tie
˙n trong cheˆ do
˙này ho’n
là su’’ du˙ng giao die
˙n do ho
˙a. Và dù sao thì cheˆ do
˙text cu’ a HDH Linux không pha’ i là chedo
˙text mo˙t tien trình cu’ a MS-DOS. Vì Linux là HDH da tien trình, nên ngay trong cheˆ do
˙text
dã có kha’ nang làm vie˙c trong vài cu’’a so’. Và de’ soa
˙n tha’ o mo
˙t ta
˙p tin van ba’ n không nhaˆt
thiet pha’ i cha˙y các trình soa
˙n tha’ o lo’n và cha
˙m cha
˙p (da
˙c bie
˙t trên các máy có caˆu hình phaˆn
cu’ng thap) cu’ a môi tru’o’ng do 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
˙dieu hành". Dieu 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 du’o
˙’c thu
˙’c hie
˙n bo’’i mo
˙t chu’o’ng trình da
˙c bie
˙t.
Có hai da˙ng cu’ a chu’o’ng trình dã de ca
˙p - he
˙vo’ , hay shell, de’ làm vie
˙c trong cheˆ do
˙text
(giao die˙n dòng le
˙nh) và giao dieˆ
˙n do 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 do ho
˙a. Can nói ngay ra˘ng, bat ky chu’o’ng trình nào
trong Linux có the’ kho’’i do˙ng tu’ dòng le
˙nh cu’ a he
˙vo’ (neu máy chu’ X dã cha
˙y), cung nhu’
qua giao dieˆ˙n do ho
˙a. Cha
˙y chu’o’ng trình tu’ dòng le
˙nh cu’ a he
˙vo’ tu’o’ng du’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 du’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 do ho˙a. Nhu’ng ma
˙t khác, mo
˙t sochu’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 doi rat nhieu.
Theo ý kien cu’ a mo˙t sochuyên gia ngôn ngu’ cung 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) du’o
˙’c dùng cho các chu’o’ng trình dùng de’ biên di
˙ch le
˙nh trong cheˆ do
˙text
trên mo˙i he
˙thong UNIX. Trên các heˆ
˙thong UNIX dau tiên có moˆ
˙t chu’o’ng trình, go
˙i là sh ,
viet tat cu’ a shell . Sau dó, vài bien the’ cu’ a sh du’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 , viet 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, xemhttp://www.gnu.org/) sau dó cho ra do’i
he˙
vo’ bash , tên go˙i cu’ a nó du’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 do
˙c giong vo’i tu’ borne
(sinh ra, de’ ra), và nhu’ thebash còn có the’ gia’ i mã là "shell du’o˙’c sinh ra lan hai". Tiep theo
chúng ta se˜ chı’ xem xétbash , vì theo’’ du’o’i khi nói den he˙
vo’ , xin ngam hie’u dó là bashTu
˙’ mo
˙t mìnhbash không thu
˙’c hie
˙n mo
˙t công vie
˙c u’ng du
˙ng nào. Nhu’ng nó hotro
˙’ vie
˙c thu
˙’c
thi mo˙i chu’o’ng trình khác, tu’ vie
˙c tìm kiem chu’o’ng trình du’o
˙’c go
˙i, cha
˙y chúng den vie
˙c to’
chu’c du’ lie˙u dau vào/dau ra. Ngoài ra, heˆ
˙vo’ chi
˙u trách nhieˆ
˙m vecông vie
˙c vo’i các bien môi
tru’o’ng và thu˙’c hie
˙n mo
˙t vài bien do’i (the, hoán do’i vi
˙trí) các tham soˆ le
˙nh. Nhu’ng tính chaˆt
chính cu’ a he˙
vo’ , nho’ dó du’a he˙
vo’ tro’’ thành moˆ˙t công cu
˙ma
˙nh cu’ a ngu’o’i dùng, dó là nó
bao gom mo˙t ngôn ngu’ la
˙p trình do’n gia’ n. Trong toán ho
˙c tu’ lâu dã du’o
˙’c chu’ng minh rang,
bat ky mo˙t thua
˙t toán nào cu˜ng có the’ du’o
˙’c xây du
˙’ng tu’ hai (ba) thao tác co’ ba’ n và mo
˙t toán
tu’’ dieu kie˙n. He
˙vo’ cung ca´p các toán tu’’ dieu 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˙
dieu hành, hay du’o˙’c cài da
˙t riêng) de’ làm
các thao tác co’ ba’ n cho ngôn ngu’ la˙p trình mà nó hoˆ tro
˙’. Dong tho’i cho phép du’a các tham
socung nhu’ ket 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. Ket qua’ thu du’o˙’c là mo
˙t ngôn ngu’ la
˙p trình ma
˙nh. Dây cung là su’c ma
˙nh và là moˆ
˙t
trong các chu’c nang chính cu’ a he˙
vo’ . Tru’o’c khi bat dau phan này, ba˙n do
˙c nên bie´ t các to’ ho
˙’p
phím chính, su’’ du˙ng de’ dieu khie’n vie
˙c nha
˙p du’ lie
˙u trên dòng leˆ
˙nh. Nên nho’ ít nhat 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˙’ da
˙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 de’
bie’u thi˙các thao tác nào dó, hoa
˙c de’ bien do’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 trang. Phu
˙thuo˙c vào tình huoˆng các ký tu
˙’ da
˙c bie
˙t này có the’ su’’ du
˙ng vo’i ý nghıa da
˙c bie
˙t cu’ a nó hay
su’’ du˙ng nhu’ mo
˙t ký tu
˙’ thông thu’o’ng. Nhu’ng trong da socá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 het 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 cham) thu’o’ng du’o
˙’c su’’ du
˙ng
trong tên taˆ˙p tin, và dây là mo
˙t ví du
˙cho thay không pha’ i lúc nào chúng cu˜ng có giá tri
˙da˙c
bie˙t. Trong tên taˆ
˙p tin chı’ dau cham (.) và ga
˙ch chéo (/) có giá tri
˙da˙c bie
˙t. Ký hie
˙u ga
˙ch chéo
dùng de’ phân chia tên các thu’ mu˙c trong du’o’ng dan, còn daˆu cham có giá tri
˙da˙c bie
˙t khi nó
là ký tu˙’ dau tiên trong tên taˆ
˙p tin (cho biet ta
˙p tin là "a’n"). Vie
˙c du’a ngay taˆt ca’ ý nghıa da
˙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
sexem xét chúng daˆn dan trong các phaˆn sau, khi caˆn su’’ du˙ng den. Tuy nhiên, 3 ký hieˆ
˙u có
ý nghıa lo’n và can de ca˙p den dau 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 da˙c bie
˙t" cho bat ky ký tu
˙’ da
˙c bie
˙t nào, du’ng ngay sau\ . Ví du
˙, neu muon
su’’ du˙ng khoa’ ng trang trong tên taˆ
˙p tin, thì chúng ta caˆn da
˙t tru’o’c ký tu
˙’ khoa’ ng trang dó mo
˙t
dau Ví du˙, câu le
˙nh sau:
kênh giao tácteppi82@teppi:~$ cp lennon_imagine lennon\ imagine
Các ký tu˙’ ’ và " (ngoa
˙c do’n và ngoa˘
˙c kép) có the’ go
˙i là "các ký tu
˙’ trích dan". Moi ký tu
˙’
nàyluôn luôn du’o˙’c su’’ du
˙ng trong moˆ
˙t ca
˙p vo’i ba’ n sao cu’ a chính nó de’ dóng khung moˆ
˙t bie’u
thu’c nào dó, giong nhu’ trong các va˘n ba’ n, sách báo, . . . thông thu’o’ng. Neu nhu’ mo˙t doa
˙n
3.3 Thu˙’c thi các câu le
˙nh 29
van ba’ n nào dó da˙t trong ngoa˘
˙c do’n, thì tat ca’ các ký tu
˙’ nam trong ngoa˘
˙c do’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 da
˙c bie
˙t. Tro’’ la
˙i vo’i ví du
˙su’’
du˙ng khoa’ ng trang trong tên taˆ
˙p tin o’’ trên, có the’ nói, neu muon da
˙t ta
˙p tin cái tên "lennon
imagine" can du’a tên dó vào da´u ngoa˙c:
kênh giao tácteppi82@teppi:~$ cp lennon_imagine ’lennon imagine’
Su˙’ khác nhau trong cách su’’ du
˙ng ký tu
˙’ ’ và " dó là, trong ngoa˘
˙c do’n mat ý nghıa da
˙c bie
˙t
tat ca’ các ký tu˙’, còn trong ngoa˘
˙c kép - tat ca’ chúngngoa
˙i tru’ $, ’ và \ (dau dô la, ngoa˘
˙c
do’n và dau 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 nang 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 du’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 da˙c bie
˙t de’ to’ chu’c vie
˙c du’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’ du’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 lan lu’o
˙’t tu’ câu le
˙nh này
den câu le˙nh khác. De’ làm du’o
˙’c dieu này can su’’ du
˙ng ký tu
˙’ da
˙c bie
˙t - ; . Neu dùng ký tu
˙’ này
de’ phân chia các câu leˆ˙nh, thì câu leˆ
˙nh tiep theo se˜ du’o
˙’c coi nhu’ tham soˆ cu’ a le
˙nh phía tru’o’c.
Nhu’ va˙y, neu nha
˙p vào dòng leˆ
˙nh cái gì dó giong nhu’ sau:
kênh giao tácteppi82@teppi:~$ command1 ; command2
thì he˙
vo’ dau tiên sethu˙’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 du’a ra dòng nhaˆ
˙p le
˙nh và cho’ các hành do
˙ng
tiep theo cu’ a ngu’o’i dùng.
3.3.2 Thao tác &
Thao tác & du’o˙’c dùng de’ to’ chu’c vie
˙c thu
˙’c hie
˙n các câu leˆ
˙nh trong cheˆ do
˙nen sau. Neˆu da
˙t
dau & ngay sau câu leˆ˙nh, thì he
˙vo’ setra’ la
˙i quyen dieu khie’n cho ngu’o’i dùng ngay sau khi
cha˙y câu le
˙nh, mà không do
˙’i cho câu le
˙nh dó hoàn thành. Ví du
˙, neu 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 tretra’ la
˙i dòng nha
˙p le
˙nh cho ngu’o’i dùng.
3.3.3 Thao tác && và ||
Các thao tác && và || lá nhu’ng thao tác dieu khie’n. Neu trên dòng leˆ˙nh làcommand1 && command2,
thì command2 se˜ thu˙’c hie
˙n và chı’ thu
˙’c hie
˙n trong tru’o’ng ho
˙’p tra
˙ng thái thoát ra cu’ a le
˙nh
command1 ba˘ng không (0), tu’c là le˙nh dó thu
˙’c hie
˙n thành công. Moˆ
˙t cách tu’o’ng tu
˙’, neu dòng
le˙nh có da
˙ngcommand1 || 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 ngan go
˙n rang, 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 ket 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 dau tiên -tìm kiem 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 thay le˙nh no
˙i trú, còn de’ 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’ du’o’ng dan day du’ to’i ta˙p tin tu’o’ng u’ng. Tuy nhiên de’ go’ "gánh na
˙ng" cho ngu’o’i
dùng he˙
vo’ biet cách tìm le˙nh ngoa
˙i trú trong các thu’ mu
˙c, mà du’o
˙’c lie
˙t kê trongdu’o’ng dan
tìm kiem. Chı’ khi (he˙
vo’ ) không the’ tìm thay ta˙p tin can thiet trong các thu’ mu
˙c dó, nó mo’i
quyet di˙nh rang ngu’o’i dùng dã nham khi nha
˙p tên le
˙nh. Vecách thêm thu’ mu
˙c vào du’o’ng
dan tìm kiem chúng ta se˜ nói den o’’ du’o’i, còn bây gio’ chúng ta se˜ xem xét cách heˆ˙
vo’ to’ chu’cvie
˙c du’a du’ lie
˙u vào cho câu leˆ
˙nh dang thu
˙’c hie
˙n và vie
˙c du’a ket qua’ to’i cho ngu’o’i dùng.
3.4 Dau vào/dau ra tiêu chua’n
3.4.1 Dòng du’ lie˙u vào-ra
Khi mo˙t chu’o’ng trình du’o
˙’c thu
˙’c hie
˙n, nó du’o
˙’c cung caˆp ba dòng du’ lie
˙u (hay còn go
˙i là
kênh):
• dau vào tiêu chua’n (standard input hay stdin). Qua kênh này du’ lie˙u du’o
˙’c du’a vào cho
chu’o’ng trình;
• dau ra tiêu chua’n (standard output hay stdout). Qua kênh này chu’o’ng trình du’a ra ketqua’ 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ìnhdu’a ra thông tin veˆ loi.
Tu’ dau vào tiêu chua’n chu’o’ng trình chı’ có the’ do˙c, còn hai dau ra và kênh thông báo loˆ i
du’o˙’c chu’o’ng trình su’’ du
˙ng chı’ de’ ghi. Theo ma˘
˙c di
˙nh dau vào có liên keˆt1 vo’i bàn phím, còn
dau ra và kênh báo loˆ i hu’o’ng den terminal cu’ a ngu’o’i dùng. Nói cách khác, toàn boˆ˙
thông tincu’ a le
˙nh hay chu’o’ng trình mà ngu’o’i dùng dã cha
˙y, và tat ca’ nhu’ng thông báo loˆ i, du’o
˙’c du’a
ra cu’’a so’ terminal. Tuy nhiên, chúng ta se˜ thay o’’ du’o’i, có the’ chuye’n hu’o’ng thông báo daura (ví du
˙, vào ta
˙p tin). De’ cho thay kênh thông báo loˆ i tiêu chua’n làm vie
˙c nhu’ thenà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 ton ta˙i. Trong tru’o’ng ho
˙’p này,ls du’a mo
˙t tin nhan báo loi ra kênh thông báo loˆ i tiêu
chua’n. Tuy nhiên, doi 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 dau ra tiêu chua’n, bo’’i vì chúng ta cu˜ng thay thông báo loˆ i dó trên cu’’a so’
terminal. Làm vieˆ˙c vo’i dau vào và dau ra tiêu chua’n du’o
˙’c minh ho
˙a tot nhat qua ví du
˙các
le˙nhecho vàcat .
3.4.2 Le˙nh echo
Câu le˙nhecho dùng de’ chuye’n to’i dau ra tiêu chua’n dòng ký tu
˙’, mà du’o
˙’c du’a vào làm tham
socho nó. Sau dó le˙nh này du’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:
1giong liên ket hóa ho˙c
3.5 Chuye’n hu’o’ng dau vào/dau ra, du’o’ng ong và dau lo˙c 31
kênh giao tác[user]$ echo ’xin chao cac ban!’
Tôi nghırang lo’i gia’ i thích selà thu’a thãi (chı’ xin hãy su’’ du˙ng dau ngoa
˙c do’n, neu không
ket qua’ có the’ sekhác. Ne´u ba˙n do
˙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 dau vào và dau ra tiêu
chua’n. Theo ma˘˙c di
˙nh ket qua’ làm vie
˙c cu’ a le
˙nhcat hu’o’ng to’i dau ra tiêu chua’n. De’ chu’ng
minh là le˙nh này theo ma˘
˙c di
˙nh tiep nha
˙n dòng du’ lie
˙u nha
˙p vào, hãy cha
˙y le
˙nh cat không
có tham soˆ. Ket 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
˙’ den tu’ dau vào tiêu chua’n. Hãy nhaˆ
˙p bat ky ký tu
˙’ nào,
và nó se˜ xuat 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 du’a chúng to’i
dau ra tiêu chua’n. Có the’ tiep tu˙c nha
˙p các ký tu
˙’, và chúng cu˜ng sexuat hie
˙n trên màn hình.
Thông thu’o’ng bàn phím du’o˙’c cau hình de’ nha
˙p vào theo tu’ng dòng, vì theˆ neu ba
˙n nhan phím
<Enter>, dòng ký tu˙’ ba
˙n vu’a nha
˙p sedu’o
˙’c du’a to’i le
˙nhcat , và le
˙nh này se˜ la
˙i du’a du’ lie
˙u ra
màn hìnhthông qua dau ra tiêu chua’n. Nhu’ va˙y, moi dòng ký tu
˙’ nha
˙p vào se˜ du’o
˙’c hie
˙n ra
hay lan: mo˙t lan khi gõ và lan thu’ hai bo’’i câu le
˙nhcat . Neu nhan to’ ho
˙’p phím <Ctrl>+<D>,
mà dùng de’ ngu’ng vie˙c nha
˙p du’ lie
˙u, chúng ta se˜ qua la
˙i dòng nha
˙p le
˙nh. Cung có the’ su’’
du˙ng to’ ho
˙’p phím <Ctrl>+<C>, mà là câu leˆ
˙nh trong heˆ
˙vo’ de’ du’ng chu’o’ng trình dang cha
˙y.
Neu du’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˜ du’o
˙’c
du’a to’i dau vào tiêu chua’n, tu’ dó le˙nh cat sedo
˙c no
˙i dung này và du’a to’i dau ra tiêu chua’n
(xem so’ do).
No˙
i dung ta ˆ˙
p tin -> D ¯ au vào tiêu chua ’ n (stdin) --cat--> d au ratiê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 dau vào, mo
˙t co’ cherat
có ích cu’ a he˙
vo’ . Và tat nhiên chúng ta caˆn xem xét kyho’n co’ chenày.
3.5 Chuye’n hu’o’ng dau vào/dau ra, du’o’ng ong và dau lo˙c
Ma˙c dù, nhu’ dã nói o’’ trên, thông thu’o’ng dau vào/dau ra cu’ a mo
˙t chu’o’ng trình liên ke´ t vo’i
các dau vào/dau ra tiêu chua’n, trong heˆ˙
vo’ còn có các môi tru’o’ng da˙c bie
˙t cho phép chuye’n
hu’o’ng dau vào/dau ra.
3.5.1 Su’’ du˙ng >, < và >>
De’ chuye’n hu’o’ng dau 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 du’ 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ácmaikhai@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 ls 2 sedu’o
˙’c ghi vào ta
˙p tin /home/maikhai/ls.txt ; khi này neu ta
˙p tin
2thu’ mu˙c hie
˙n tho’i
32 Bash
ls.txt không ton ta˙i, thì nó sedu’o
˙’c ta
˙o ra; neu 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 cumà ghi thêm
du’ lie˙u dau ra vào cuoˆi ta
˙p tin, thì can su’’ du
˙ng ký hie
˙u >> thay cho>. Khi này khoa’ ng
trang 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, denhìn. Ba
˙n có the’ chuye’n hu’o’ng không chı’ vào ta
˙p tin, mà còn to’i dau vào cu’ a mo
˙t
câu le˙nh khác hay to’i mo
˙t thiet bi
˙nào dó (ví du
˙, máy in). Ví du
˙, de’ du’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ácmaikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2
Nhu’ ba˙n thay, > dùng de’ chuye’n hu’o’ng du’ lie
˙u cu’ a dau ra. Chu’c nang tu’o’ng tu
˙’ doi vo’i
dau vào du’o˙’c thu
˙’c hie
˙n bo’’i <. Ví du
˙, có the’ dem sotu’ 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 do’n gia’ n ho’n):
kênh giao tácmaikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt
Cách chuye’n hu’o’ng này thu’o’ng du’o˙’c su’’ du
˙ng trong các script, cho các câu leˆ
˙nh mà thu’o’ng
tiep nha˙n (hay cho’) du’ lie
˙u vào tu’ bàn phím. Trong script dùng de’ tu
˙’ do
˙ng hóa moˆ
˙t thao tác
nào dó, có the’ du’a các thông tin caˆn thiet cho câu leˆ˙nh tu’ ta
˙p tin: trong ta
˙p tin này ghi sa˘n
nhu’ng gì can de’ 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 (dau vào hoa˘˙c dau ra), chúng không chı’ du’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˙
mat" ho’n. Ví du˙, các câu leˆ
˙nh sau là tu’o’ng du’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’ du’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 du’o˙’c ba’ n sao cu’ a mo
˙t ta
˙p tin nào dó. Nhu’ng dieu này không làm gia’ m giá tri
˙cu’ a
co’ chenày, bo’’i vì các kênh tiêu chua’n có chomo˙i câu le
˙nh. Khi này, có the’ chuye’n hu’o’ng
không chı’ dau vào và dau ra tiêu chua’n, mà còn các kênh khác. D¯ e’ làm du’o˙’c dieu này, caˆn
da˙t tru’o’c ký hie
˙u chuye’n hu’o’ngsocu’ a kênh muoˆn chuye’n. Dau vào tiêu chua’n stdin có soˆ 0,
dau 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 day du’ nhu’ sau (xin du’o
˙’c nhac la
˙i, khoa’ ng trang ca
˙nh > là không nhaˆt thiet):
command N > M
3ba˙n can dùng to’ ho
˙’p phím <Ctrl>+<Alt>+<F2> de’ chuye’n to’i cu’’a so’ terminal này và dang nha
˙p tru’o’c
3.5 Chuye’n hu’o’ng dau vào/dau ra, du’o’ng ong và dau lo˙c 33
Trong dó, N và M - socu’ 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 sokênh hay tên taˆ
˙p tin, vì
vào chocòn thieu seda˙t, theo ma˘
˙c di
˙nh, 1 ne´u dùng>, tu’c là dau ra tiêu chua’n, hoa
˙c 0 neu
dùng<, tu’c là dau vào tiêu chua’n. Nhu’ the, khi không có soˆ nào chı’ ra,> sedu’o˙’c biên di
˙ch
là 1 >, còn< sedu’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 do’n
gia’ n nhu’ va˙y, còn có kha’ nang 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 de’ thu
˙’c hie
˙n
dieu này, khi da˙t nó (&) tru’o’c socu’ a kênh se˜ chuye’n du’ lie
˙u den:
command N > &M
Le˙nh này có nghı˜a là, dau ra cu’ a kênh vo’i soN du’o
˙’c gu’’i den ca’ dau ra tiêu chua’n, và sao
chép to’i kênh có soˆ M. Ví du˙, de’ sao chép thông báo loˆ i vào dau ra tiêu chua’n, can dùng le
˙nh
2>&1, còn 1>&2 sao chép stdout vào stderr. Kha’ nang này da˙c bie
˙t có ích khi muoˆn ghi dau
ra vào ta˙p tin, vì khi dó chúng ta vu’a có the’ nhìn thay 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 du’o
˙’c u’ng du
˙ng trong các script cha
˙y khi kho’’i do
˙ng
Linux:kênh giao tác
teppi82@teppi:~$ cat hiho > /dev/nullcat: hiho: No such file or directoryteppi82@teppi:~$ cat hiho > /dev/null 2>&1
3.5.2 Su’’ du˙ng |
Mo˙t tru’o’ng ho
˙’p da
˙c bie
˙t cu’ a chuye’n hu’o’ng dau ra là su
˙’ to’ chu’c các du’o’ng ong (ha y còn có
the’ go˙i là kênh giu’a các chu’o’ng trình, hoa˘
˙c bang chuyen). Hai hay vài câu leˆ
˙nh, mà dau ra
cu’ a le˙nh tru’o’c dùng làm dau vào cho leˆ
˙nh sau, liên keˆt vo’i nhau (có the’ nói phân cách nhau,
neu muon) bo’’i ký hie˙u ga
˙ch tha’ ng du’ng - "| ". Khi này dau ra tiêu chua’n cu’ a le
˙nh du’ng bên
trái so vo’i | du’o˙’c chuye’n den dau 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ácmaikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l
Dòng này có nghı˜a là ket qua’ cu’ a le˙nhcat , tu’c là no
˙i dung ta
˙p tin ls.txt, sedu’o
˙’c chuye’n
den dau vào cu’ a le˙nh grep , le
˙nh này se˜ phân chia noˆ
˙i dung nói trên và chı’ lay ra nhu’ng
dòng nào có chu’a tu’ knoppix. Den lu’o˙’t mình, ket qu’ a cu’ a le
˙nh grep du’o
˙’c chuye’n to’i dau
vào cu’ a le˙nh wc -l , mà tính soˆ nhu’ng dòng thu du’o
˙’c. Du’o’ng ong su’’ du
˙ng de’ ket ho
˙’p vài
chu’o’ng trình nho’ la˙i vo’i nhau (moi chu’o’ng trình thu
˙’c hie
˙n mo
˙t bien do’i xác di
˙nh nào dó trên
dau 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 bien do’i phu’c ta
˙p. Can
chú ý rang, he˙
vo’ go˙i và thu
˙’c hie
˙n tat ca’ các câu leˆ
˙nh có trong du’o’ng ong cùng moˆ
˙t lúc, cha
˙y
moi le˙nh dó trong mo
˙t ba’ n sao heˆ
˙vo’ riêng. Vì thengay khi chu’o’ng trình thu’ nhat bat dau du’a
ket qua’ o’’ dau ra, chu’o’ng trình tiep theo ba˘t dau xu’’ lý ket qua’ này. Cung y nhu’ va˙y, các le
˙nh
tiep 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à du’a ket qua’ cho le
˙nh
tiep theo, gio´ ng nhu’ mo˙t dây chuyeˆn sa’ n xuat. Neu nhu’ muon mo
˙t le
˙nh nào dó ket thúchoàn
toàn, tru’o’c khi thu˙’c hie
˙n le
˙nh tiep theo, ba
˙n có the’ su’e’ du
˙ng trên moˆ
˙t dòng ca’ ký hie
˙u dây
chuyen | , cung nhu’ dau chap pha’y ; . Tru’o’c moi dau cham pha’y, he˙
vo’ sedu’ng la˙i và cho’
cho den khi thu˙’c hie
˙n xong tat ca’ các câu leˆ
˙nh tru’o’c cu’ a du’o’ng ong. Tra
˙ng thái thoát ra (giá
34 Bash
tri˙
lôgíc, mà du’o˙’c tra’ la
˙i sau khi thu
˙’c hie
˙n xong chu’o’ng trình) cu’ a mo
˙t du’o’ng ong setrùng
vo’i tra˙ng thái thoát ra cu’ a câu le
˙nh sau cùng trong du’o’ng ong. O’’ tru’o’c câu le
˙nh dau tiên cu’ a
du’o’ng ong có the’ da˙t ký hie
˙u "! ", khi dó tra
˙ng thái thoát ra cu’ a du’o’ng ong selà phu’ di
˙nh
lôgíc cu’ a tra˙ng thát thoát ra cu’ a le
˙nh cuoi cùng trong du’o’ng ong. Tu’c là neu tra
˙ng thái thoát
ra cu’ a le˙nh cuoi cùng bang 0 thì tra
˙ng thái thoát ra cu’ a du’o’ng ong sebang 1 và ngu’o
˙’c la
˙i. He
˙vo’ cho’ cho tat ca’ các câu leˆ˙nh ket thúc roi mo’i xác di
˙nh và du’a ra giá tri
˙này.
3.5.3 Dau lo˙c
Ví du˙
cuoi cùng o’’ trên (ví du˙
vo’i câu le˙nhgrep ) có the’ dùng de’ minh ho
˙a cho moˆ
˙t khái nie
˙m
qua tro˙ng khác, dó là,dau lo
˙c chu’o’ng trình . Dau 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 bien do’i trên du’ lie
˙u này và du’a ra ket qua’ o’’ dau ra tiêu
chua’n (tu’ dây còn có the’ chuye’n den no’i nào dó theo ý muoˆn cu’ a ngu’o’i dùng). Các câu leˆ˙nh
- dau lo˙c bao goˆm các le
˙nh dã nói den o’’ trêncat, more, less, wc, cmp, diff ,
và ca’ nhu’ng câu le˙nh có trong ba’ ng3.1
Ba’ ng 3.1: Các câu leˆ˙nh dau lo
˙c
Le˙nh Mô ta’ ngan go
˙n
grep, fgrep, egrep Tìm trong ta˙p tin hay du’ lie
˙u dau vào các dòng có chu’a mau van ba’ n
du’o˙’c chı’ ra và du’a các dòng này to’i dau ra tiêu chua’n
tr Trong du’ lie˙u dau vào thay theˆ các ký tu
˙’ o’’ ô thu’ nhat bo’’i các ký tu
˙’ tu’o’ng
u’ng o’’ ô thu’ hai. Hãy thu’’ gõ le˙nh tr abc ABC roi 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à du’a vào dau ra tiêu chua’n 3
co˙t : mo
˙t - nhu’ng dòng chı’ ga
˙p o’’ ta
˙p tin thu’ nhat, 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 Di˙nh da
˙ng ta
˙p tin hay no
˙i dung cu’ a dau tiêu chua’n de’ in an.
sed Trình soa˙n tha’ o ta
˙p tin theo dòng, su’’ du
˙ng de’ thu
˙’c hie
˙n mo
˙t vài bien do’i
trên du’ lie˙u dau vào (lay tu’ ta
˙p tin hay dau vào tiêu chua’n)
Mo˙t dau lo
˙c da
˙c bie
˙t, câu le
˙nh tee , nhân dôi du’ lie
˙u dau vào, mo
˙t ma
˙t gu’’i du’ lie
˙u này
den dau ra tiêu chua’n, ma˙t khác ghi nó (du’ lie
˙u) vào ta
˙p tin (ngu’o’i dùng can da
˙t tên). Dethay
rang theo chu’c nang cu’ a mình le˙nh tee tu’o’ng tu
˙’ nhu’ nhóm ký tu
˙’ chuye’n hu’o’ng 1>&file.
Kha’ nang cu’ a dau lo˙c có the’ mo’’ ro
˙ng vo’i vie
˙c su’’ du
˙ng các bie’u thu’c chính quy (dieu khie’n),
cho phép, ví du˙, to’ chu’c tìm kiem theo các maˆu tìm kiem tu’ do’n gia’ n den phu’c ta
˙p và rat
phu’c ta˙p. Neu muon, chúng ta có the’ nói rat nhieu vechuye’n hu’o’ng và dau 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 phan lo’i ket). Vì va˙y,
chúng ta se˜ du’ng o’’ dây và chuye’n sang moˆ˙t phan khác, du’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 bien và các bien 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 bien sotrong 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 gom các ký tu
˙’
ba’ ng chu’ cái, chu’ so, dau ga˙ch du’o’i (chı’ ký tu
˙’ dau tiên cu’ a tu’ này không du’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 bien và các bien so. Môi tru’o’ng cu’ a he˙
vo’ 35
du’o˙’c xác di
˙nh hay du’o
˙’c da
˙t ra, neu ngu’o’i dùng gan cho nó moˆ
˙t giá tri
˙. Giá tri
˙có the’ là mo
˙t
dòng trong rong. De’ nhìn thay 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ácmaikhai@fpt:/sm$ echo parameter
hie’n thi˙tu’ parameter, còn leˆ
˙nh
kênh giao tácmaikhai@fpt:/sm$ echo $parameter
hie’n thi˙giá tri
˙cu’ a tham bieˆn parameter (taˆt nhiên ne´u nhu’ tham bien dó du’o
˙’c xác di
˙nh).
3.6.1 Các da˙ng tham bien khác nhau
Tham bien chia thành ba da˙ng: tham bieˆn vi
˙trí, tham bie´n da
˙c bie
˙t (các ký tu
˙’ da
˙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 socu’ a he˙
vo’ . Tên (ID) cu’ a thambien vi
˙trí gom 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, du’o
˙’c du’a ra khi cha
˙y he
˙vo’ (tham soˆ dau tiên là giá tri
˙cu’ a tham
bien 1, tham soˆ thu’ hai - tham bieˆn 2, v.v. . . ). Có the’ dùng câu leˆ˙nh set de’ thay do’i giá tri
˙cu’ a tham bieˆn vi˙
trí. Giá tri˙
cu’ a các tham bieˆn này cung thay do’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 denày o’’ du’o’i). Các tham bieˆn da
˙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 do’i) chúng du’o
˙’c thu
˙’c hie
˙n nhu’
trong ba’ ng3.2:Các tham bieˆn da
˙c bie
˙t, du’o
˙’c lie
˙t kê o’’ ba’ ng trên, có moˆ
˙t die’m khác bie
˙t dó là chı’ có the’
"nhac" den chúng, không the’ gán các giá tri˙
cho các tham bieˆn này.Bien môi tru’o’ng, nhìntu’ phía he
˙vo’ , dó là các tham bieˆn du’o
˙’c da
˙t tên. Giá tri
˙cu’ a bien môi tru’o’ng du’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 bien, cònvalue - giá tri˙
muon gán cho bieˆn (có the’ là mo˙t
dòng trong). Tên cu’ a bien môi tru’o’ng chı’ có the’ bao gom các chu’ so, chu’ cái và không du’o˙’c
bat dau bo’’i mo˙t chu’ so. (Tin rang sau khi do
˙c doa
˙n viet ve tham bien vi
˙trí thì các ba
˙n dã hie’u
ta˙i sao mo
˙t bien môi tru’o’ng không the’ bat dau bo’’i mo
˙t chu’ so.) Giá tri
˙có the’ là bat ky mo
˙t
dòng van ba’ n nào. Neˆu giá tri˙
có chu’a nhu’ng ký tu˙’ da
˙c bie
˙t, thì can da
˙t nó (giá tri
˙) vào dau
ngoa˙c. Giá tri
˙tat nhiên se˜ không chu’a các daˆu ngoa
˙c này. Ne´u mo
˙t bien môi tru’òng du’o
˙’c xác
di˙nh, thì cung có the’ bi
˙xóa bo’ bang le
˙nh no
˙i trú unset . Ta
˙p ho
˙’p tat ca’ các bien 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’ can dùng du’o’ng ong ’set | less ",
neu môi tru’o’ng lo’n, có nhieu bien). De’ xem giá tri˙
cu’ a mo˙t bien môi tru’o’ng cu
˙the’, thay vì
dùng le˙nh set (khi này can tìm trong ke´ t qua’ cu’ a nó bien muon 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 da˙c bie
˙t
Tham bien Quy lua˙t thay the
* Thay thebo’’i các tham bieˆn vi˙trí, bat dau tu’ tham bien thu’ nhat. Neu su
˙’
thay thethu˙’c hie
˙n trong da´u ngoa
˙c kép, thì tham bieˆn này se˜ du’o
˙’c thay
bo’’i mo˙t tu’ duy nhat, mà ta
˙o ra tu’ tat ca’ các tham bieˆn vi
˙trí, phân cách
nhau bo’’i ký tu˙’ dau tiên cu’ a bien soIFS (senói den o’’ sau). Tu’c là "$"
tu’o’ng du’o’ng vo’i "$1c$2c. . . ", trong dó c - ký tu˙’ dau tiên trong giá tri
˙cu’ a bien soIFS. Neu giá tri˙
cu’ a IFS trong, hoa˙c không du’o
˙’c xác di
˙nh
giá tri˙, thì tham bieˆn phân cách nhau bo’’i các khoa’ ng trang.
@ Thay thebo’’i tham bien vi˙trí, bat dau tu’ tham bien thu’ nhat. Neu thay the´
thu˙’c hie
˙n trong ngoa˘
˙c kép, thì moˆi tham bien sedu’o
˙’c thay the´ bo’’i mo
˙t
tu’ riêng bie˙t. Tu’c là, "$@" tu’o’ng du’o’ng vo’i "$1" "$2" . . . Neu không có
tham bien vi˙trí, thì giá tri
˙sekhông du’o
˙’c thiet la
˙p (tham bie´n sebi
˙x
# Thay thebo’’i giá tri˙tha
˙p phân cu’ a các tham bieˆn vi
˙trí.
? Thay thebo’’i tra˙ng thái thoát ra cu’ a câu le
˙nh cuoi cùng trong du’o’ng ong,
mà du’o˙’c thu
˙’c hie
˙n trong cheˆ do
˙nen tru’o’c.
- (ga˙ch ngang) Thay thebo’’i giá tri
˙các co’, flag, du’o
˙’c da
˙t bo’’i le
˙nh no
˙i trú set hay trong
khi cha˙y he
˙vo’ .
$ Thay thebo’’i so cu’ a tien trình (PID - process identificator)Thay thebo’’i socu’ a tien trình (PID) cuoˆi cùng trong soˆ các câu leˆ
˙nh thu
˙’c
hie˙n trong nen sau.
0 Thay thebo’’i tên he˙
vo’ hay tên cu’ a script dang cha˙y. Neu bash cha
˙y
mo˙t ta
˙p tin le
˙nh nào dó, thì $0 có giá tri
˙bang tên cu’ a ta
˙p tin này. Trong
tru’o’ng ho˙’p ngu’o
˙’c la
˙i giá tri
˙này bang du’o’ng dan dau du’ den he
˙vo’ (ví
du˙, /bin/bash
_ (ga˙ch du’o’i) Thay thebo’’i tham so´ cuoi cùng cu’ a câu le
˙nh tru’o’c trong soˆ các câu leˆ
˙nh
dã du’o˙’c thu
˙’c hie
˙n (neu dó la
˙i là mo
˙t tham bien hay bien so, thì sesu’’
du˙ng giá tri
˙cu’ a n
Trong dó, can thay name bo’’i tên bien (nhu’ va˙y, trong tru’o’ng ho
˙’p này, ba
˙n la
˙i can pha’ i
biet tên cu’ a bien muon xem). Trong soˆ các bien, mà ba˙n sethay trong ket qua’ cu’ a le
˙nhset ,
có nhu’ng bien rat thú vi˙. Xin hãy chú ý den, ví du
˙, bien RANDOM. Neu thu’’ cha
˙y vài lan liên
tiep câu le˙nh sau:
kênh giao tácmaikhai@fpt:/sw$ echo $RANDOM
thì moi lan ba˙n senha
˙n du’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˙ngau nhiên4 trong khoa’ ng 0 - 32 768.
3.6.2 Dau nhac cu’ a he˙
vo’
Mo˙t trong các bieˆn rat quan tro
˙ng có tên PS1. Bieˆn này cho bieˆt da
˙ng cu’ a dau nhac, màbash
du’a ra trong khi cho’ ngu’o’i dùng nha˙p câu le
˙nh tiep theo. Theo ma˘
˙c di
˙nh thì bien này du’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
4random là tu’ tieng Anh có nghı˜a ngau nhiên
3.6 Tham bien và các bien so. Môi tru’o’ng cu’ a he˙
vo’ 37
kho’’i do˙ng (hay script dang nha
˙p) xác di
˙nh la
˙i bien này. Nói chung thì trongbash có tat ca’
bon dau nhac, du’o˙’c su’’ du
˙ng trong các tru’o’ng ho
˙’p khác nhau. Bieˆn PS1 du’a ra da
˙ng cu’ a dau
nhac khi he˙
vo’ cho’ nha˙p le
˙nh. Dau nhac thu’ hai, xác di
˙nh bo’’i bien 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 can thiet nào dó de’ có the’ tiep tu
˙c cha
˙y câu le
˙nh
(chu’o’ng trình) dã go˙i. Theo ma
˙c di
˙nh bien PS2 có giá tri
˙">". Rat có the’ ba
˙n dã nhìn thaˆy
dau nhac này, khi cha˙y le
˙nhcat de’ du’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 nhac secó da
˙ng nhu’ dã nói. Dau nhac, xác di
˙nh bo’’i
bien PS3, su’’ du˙ng trong le
˙nh select . Dau nhac, xác di
˙nh bo’’i bien PS4, du’o
˙’c du’a ra tru’o’c
moi câu le˙nh, trong lúcbash theo dõi quá trình thu
˙’c hie
˙n. Giá tri
˙theo ma
˙c di
˙nh - "+". Neu
có mong muoˆn, ba˙n có the’ thay do’i các bien PS1 và PS2. Khi này có the’ su’’ du
˙ng bat 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 de’ xác di
˙nh da
˙ng dau nhac
nhu’ trong ba’ ng3.3(chı’ du’a ra mo˙t vài trong soˆ chúng làm ví du
˙, danh sách day du’ xem trong
trang man cu’ abash - gõ le˙nh "man bash").
Ba’ ng 3.3: Ký tu˙’ xác di
˙nh da
˙ng dau nhac
Cu˙m ký tu
˙’ Giá tri
˙(ket qua’ thu du’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) den dau cham dau tiên.\H Tên máy day du’ , 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 day du’ cu’ a thu’ mu˙c làm vie
˙c hie
˙n tho’i (bat dau tu’ goc), ví du
˙/home/teppi82/project/l4u\W Thu’ mu
˙c hie
˙n tho’i (không có du’o’ng dan)
\$ Ký tu˙’ #, neu he
˙vo’ du’o
˙’c cha
˙y bo’’i ngu’o’i dùng root, và ký tu
˙’ $, neu he
˙vo’
du’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’
\# Sohie˙n tho’i cu’ a câu le
˙nh
\\ Dau ga˙ch ngu’o
˙’c (backslash)
\[ Sau ký tu˙’ này tat ca’ các ký tu
˙’ sekhông du’o
˙’c in ra.
\] Ket thúc chuoˆi các ký tu˙’ không du’o
˙’c in ra.
\! Sothu’ tu˙’ cu’ a le
˙nh hie
˙n tho’i trong li
˙ch su’’ các câu leˆ
˙nh dã dùng.
Socu’ a le˙nh (sothu’ tu
˙’ cu’ a le
˙nh dang 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ã du’o
˙’c ghi la
˙i trong ta
˙p tin li
˙ch su’’. Sau khi giá tri
˙cu’ a bien du’o
˙’c he
˙vo’ do
˙c
xong, se˜ xa’ y ra su˙’ thay thetheo các quy luaˆ
˙t mo’’ ro
˙ng trong ba’ ng trên, dong tho’i còn xa’ y ra
su˙’ thay thetrong tên các câu leˆ
˙nh, trong các bie’u thu’c soho
˙c, và su
˙’ chia tu’ (word splitting).
Chúng ta se˜ nói den nhu’ng su˙’ thay thenày o’’ du’o’i.Ví du
˙, sau khi thu
˙’c hie
˙n le
˙nh (vì trong dòng
van ba’ n có khoa’ ng trong, nên nhaˆt thiet pha’ i có dau ngoa˙c):
kênh giao tác[user/root]$ PS1="[\u@\h \W]\$"
38 Bash
thì trong da´u nhac secó dau mo’’ ngoa˙c vuông, tên ngu’o’i dùng, ký hie
˙u , tên máy, khoa’ ng
trang, tên cu’ a thu’ mu˙c hie
˙n tho’i (không có du’o’ng dan), dau dóng ngoa˘
˙c vuông, và ký hieˆ
˙u
$ (neu trên he˙
vo’ dang 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 Bien môi tru’o’ng PATH
Còn mo˙t bien cung quan tro
˙ng nu’a có tênPATH. Bien này du’a ra danh sách du’o’ng dan
den các thu’ mu˙c, mà bash se tìm kiem ta
˙p tin (tru’o’ng ho
˙’p riêng là các taˆ
˙p tin le
˙nh)
trong tru’o’ng ho˙’p, du’o’ng dan day du’ den ta
˙p tin không du’o
˙’c du’a ra. Các thu’ mu
˙c trong
danh sách này phân cách nhau bo’’i dau hai cha´m (:). Theo ma˘˙c di
˙nh bien 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: De’ 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 kiem, 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’ du’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 dau cham (.). Tuy nhiên, dây là dieu không khuyên làm vo’i lý do ba’ o ma
˙t: ngu’o’i có ác
ý có the’ da˙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 nang khác hoàn toàn (da
˙c
bie˙t nguy hie’m neu thu’ mu
˙c hie
˙n tho’i du’ng o’’ dau danh sách tìm kieˆm).
3.6.4 Bien môi tru’o’ng IFS
Bien này xác di˙nh ký tu
˙’ (cu
˙m ký tu
˙’) phân cách (InternalField Separator), su’’ du
˙ng trong thao
tác phân chia tu’ ngu’ khi bien do’i dòng le˙nh, mà heˆ
˙vo’ thu
˙’c hie
˙n tru’o’c khi cha
˙y mo
˙t câu le
˙nh nào
dó (xem du’o’i). Giá tri˙theo ma
˙c di
˙nh cu’ a bien này - "<Khoa’ ng_trang><Tab><Ký_tu
˙’_hàng_mo’i>".
Neu thu’’ gõ le˙nh "echo $IFS ", ba
˙n senha
˙n du’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 bien môi tru’o’ng vo’i tênPWD, và giá tri
˙cu’ a bien này thay
do’i sau moi lan cha˙y chu’o’ng trìnhcd (cung nhu’ moi lan thay do’i thu’ mu
˙c hie
˙n tho’i theo bat
ky cách nào, ví du˙, qua Midnight Commander). Tu’o’ng tu
˙’ nhu’ va
˙y tên day du’ (gom ca’ du’o’ng
dan) cu’ a thu’ mu˙c cá nhân cu’ a ngu’o’i dùng, cha
˙y tien 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
phan bien môi tru’o’ng. De’ có the’ cung ca´p bien môi tru’o’ng cho tien trình cha˙y tu’ he
˙vo’ , can
gán giá tri˙cho bien này vo’i le
˙nhexport , tu’c là thay vì
kênh giao tác[user]$ name=value
can 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’ ) secó quyen truy ca˙p to’i các bien du’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’ do˙
c các câu le ˆ˙
nh nhu’ the nào? Khi he˙
vo’ nha˙n du’o
˙’c mo
˙t dòng
le˙nh này dó can 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’’ haykhai trie’n bie’u thu’c (expansion). Trongbash có
ba’ y loa˙i khai trie’n bie’u thu’c:
• Khai trie’n dau ngoa˙c (brace expansion);
• Thay thedau ngã (tilde expansion);
• Phép theˆ các tham bieˆn và bien so;
• Phép theˆ các câu leˆ˙nh;
• Phép theˆ soho˙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 du’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 dau ngoa˙c
Khai trie’n dau ngoa˙c tot nhat minh ho
˙a trên ví du
˙. Gia’ thiet, chúng ta caˆn ta
˙o thu’ mu
˙c con
trong mo˙t thu’ mu
˙c nào dó, hoa
˙c thay do’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 dieu 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 dau, trong thu’ mu
˙c /usr/src/unikey/ seta
˙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
sethay do’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 moi ca˙p dau ngoa
˙c seta
˙o ra vài dòngriêng re (sonhu’ng dòng này ba˘ng sotu’
nang trong daˆu ngoa˙c) bang cách ghi thêm vào tru’o’c moi tu’ trong ngoa˘
˙c nhu’ng gì du’ng tru’o’c
dau ngoa˙c, và ghi thêm vào sau moˆi tu’ này nhu’ng gì du’ng sau daˆu ngoa
˙c. Mo
˙t ví du
˙khác:
dònga{d,c,b}e khi khai trie’n sethu du’o˙’c ba tu’ "ade ace abe ". Khai trie’n dau ngoa
˙c
du’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 tat ca’ các ký tu
˙’ da
˙c
bie˙t có trong dòng leˆ
˙nh, ke’ ca’ nhu’ng ký tu
˙’ nam trong da´u ngoa
˙c, sedu’o
˙’c giu’ không thay do’i
(chúng se˜ du’o˙’c biên di
˙ch o’’ các bu’o’c phía sau).
3.7.2 Thay thedau ngã (Tilde Expansion)
Neu nhu’ tu’ bat dau vo’i ký tu˙’ dau ngã (’∼’), tat ca’ các ký tu
˙’ du’ng tru’o’c dau ga
˙ch chéo dau tiên
(hay tat ca’ các ký tu˙’ neu nhu’ không có daˆu ga
˙ch chéo) se˜ du’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 rong (tu’c là dau ga
˙ch chéo du’ng ngay phía sau daˆu ngã),
thì dau ngã se˜ du’o˙’c thay the´ bo’’i giá tri
˙cu’ a bien HOME. Và neu giá tri
˙cu’ a bien HOMEkhông
du’o˙’c gán thì daˆu ngã se˜ du’o
˙’c thay the´ bo’’i du’o’ng dan dau du’ den thu’ mu
˙c cá nhân cu’ a ngu’o’i
dùng, mà dã cha˙y he
˙vo’ . Neu nhu’ ngay sau daˆu ngã (và tru’o’c dau 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 du’o
˙’c thay the´ bo’’i
du’o’ng dan day du’ den thu’ mu˙c cá nhân cu’ a ngu’o’i dùng này. Neˆu nhu’ tu’ du’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 do’i. Neu nhu’ sau
dau ngã là ’+’, hay ký hieˆ˙u này se˜ du’o
˙’c thay the´ bo’’i tên dau du’ cu’ a thu’ mu
˙c hie
˙n tho’i (tu’c là
giá tri˙cu’ a bien PWD). Neu du’ng sau daˆu ngã là ’-’, thì thay theˆ giá tri
˙cu’ a bien OLDPWD(thu’
mu˙c "cu").
3.7.3 Phép theˆ các tham bien và bien so
Ký tu˙’ $ du’o
˙’c su’’ du
˙ng cho các thao tác theˆ tham bien, thecác câu leˆ
˙nh và the´ các bie’u thu’c
so ho˙c. Bie’u thu’c hay tên du’ng sau $ có the’ du’o
˙’c du’a vào ngoa˘
˙c, không nhaˆt thiet, nhu’ng
rat tie˙n, vì dau ngoa
˙c phân cách bie’u thu’c vo’i các tu’ hay ký tu
˙’ du’ng sau. Nhu’ va
˙y, de’ go
˙i
giá tri˙cu’ a tham bieˆn nói chung cu˜ng nhu’ bien môi tru’o’ng nói riêng trong dòng leˆ
˙nh, can da
˙t
bie’u thu’c da˙ng $parameter. Daˆu ngoa
˙c chı’ can thiet, neu 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 lam"
chúng là moˆ˙t phan cu’ a tên tham bieˆn. Trong ta´ t ca’ các giá tri
˙cu’ a bien soxa’ y ra phép theˆ dau
ngã (∼), su˙’ khai trie’n tham bie´n và bien so, phép theˆ các câu leˆ
˙nh, phép theˆ các bie’u thu’c so
ho˙c, cung nhu’ xóa các ký tu
˙’ trích dan (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 so3). Su
˙’ khai trie’n các maˆu tên ta
˙p tin và thu’ mu
˙c cung
không du’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
˙rat ma
˙ng cu’ abash . Ý nghıa cu’ a nó nam o’’ chothay the
tên các câu leˆ˙nh bo’’i ket qua’ thu
˙’c hie
˙n cu’ a chúng. Có hai da
˙ng phép theˆ le
˙nh:$(command)
và ‘command‘ Neu u’ng du˙ng da
˙ng thu’ hai (chú ý o’’ dây su’’ du
˙ng dau "ngoa
˙c do’n ngu’o
˙’c",
phím cho nó thu’o’ng nam trên phím Tab), thì daˆu ga˙ch ngu’o
˙’c (\) o’’ trong dau ngoa
˙c secó chu’c
nang nhu’ mo˙t ký tu
˙’ thông thu’o’ng, tru’ tru’o’ng ho
˙’p, khi du’ng sau nó (daˆu ga
˙ch ngu’o
˙’c) là mo
˙t
$, ‘, hay mo˙t \. Neu nhu’ su’’ du
˙ng da
˙ng $(command), thì taˆt ca’ các ký tu
˙’ du’ng trong ngoa˘
˙c ta
˙o
thành moˆ˙t câu le
˙nh, không có ký tu
˙’ nào có ý nghı˜a da
˙c bie
˙t. Neu 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ˆ sekhông thu
˙’c hie
˙n phép phân chia tu’ và
su˙’ khai trie’n mau tên ta
˙p tin và thu’ mu
˙c.
3.7.5 Phép theˆ soho˙c (Arithmetic Expansion)
Phép theˆ so ho˙c cho phép tính giá tri
˙cu’ a mo
˙t bie’u thu’c soho
˙c và thay theˆ nó (bie’u thu’c)
bo’’i ket qua’ thu du’o˙’c. Có hai da
˙ng phép theˆ soho
˙c: $[expression] ((expression))
Trong dó expression du’o˙’c hie’u (du’o
˙’c bash do
˙c) nhu’ khi du’ng trong ngoa˘
˙c kép, nhu’ng
nhu’ng dau ngoa˙c kép o’’ trongexpression la
˙i du’o
˙’c do
˙c nhu’ mo
˙t ký tu
˙’ thu’o’ng. Phía trong
expression có thu˙’c hie
˙n các phép theˆ tham bien và thecâ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 soho
˙c cu’ a ngôn ngu’ C, cu
˙the’ ho’n vevan
de này có the’ do˙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 ket qua’ bang "17". Neu bie’u thu’c không chính xác,bash sedu’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 bien, thele
˙nh, và theˆ các bie’u thu’c soho
˙c, he
˙vo’ la
˙i
phân tích dòng leˆ˙nh mo
˙t lan nu’a (nhu’ng o’’ da
˙ng thu du’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
tat ca’ các ký tu˙’ phân chia, xác di
˙nh bo’’i bien IFS (xem trên), và nho’ dó chia nho’ dòng le
˙nh
thành các tu’ riêng retrong các choˆ tu’o’ng u’ng. Neu giá tri˙
cu’ a IFS bang mo˙t dòng trong, thì
vie˙c phân chia tu’ sekhông xa’ y ra. Neu 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’ cung không xa’ y ra.
3.7.7 Khai trie’n các mau tên ta˙p tin và thu’ mu
˙c (Pathname Expansion)
Phép theˆ tên du’o’ng dan và ta˙p tin (Pathname expansion) su’’ du
˙ng de’ chı’ nho’ mo
˙t mau nho’
go˙n mà có the’ chı’ ra vài ta
˙p tin (hay thu’ mu
˙c), tu’o’ng u’ng vo’i mau này. Sau khi phân chia tu’,
và neu nhu’ không du’a ra tùy cho˙n -f , thì bash setìm kiem trong tu’ng tu’ cu’ a dòng le
˙nh các
ký tu˙’ *, ?, và [ . Neu tìm thay tu’ vo’i mo
˙t hay vài ký tu
˙’ nhu’ va
˙y, thì tu’ này sedu’o
˙’c xem
nhu’ mo˙t mau, và can thay the´ bo’’i các tu’ trong danh sách du’o’ng dan, tu’o’ng u’ng vo’i mau này.
Neu nhu’ không tìm thaˆy tên tu’o’ng u’ng vo’i mau, và bien nullglob không du’o˙’c du’a ra, thì tu’
sekhông thay do’i, tu’c là các ký tu˙’ da
˙c bie
˙t bi
˙mat giá tri
˙và hie’u nhu’ các ký tu
˙’ thu’o’ng. Neu
nhu’ bien này du’o˙’c xác di
˙nh, mà du’o’ng dan tu’o’ng u’ng vo’i mau không tìm thaˆy, thì tu’ sebi
˙xóa kho’ i dòng le˙nh. Các ký tu
˙’ dùng de’ ta
˙o mau có các giá tri
˙trong ba’ ng3.4
42 Bash
Ba’ ng 3.4: Các ký tu˙’ ta
˙o mau
Ký tu˙’ Quy lua
˙t thay the
* Tu’o’ng u’ng vo’i bat ky dòng ký tu˙’ nào, ke’ ca’ dòng rong. Ví du
˙, v*.txt
sedu’o˙’c thay the´ bo’’i vnoss.txt, vnlinux.txt và vntex.txt
(neu các ta˙p tin này ton ta
˙i), và *.png setu’o’ng u’ng tat ca’ các ta
˙p tin có
phan mo’’ ro˙ng png (ta
˙p tin do ho
˙a hai chieu).
? Tu’o’ng u’ng bat ký mo˙t ký tu
˙’ do’n nào. Ví du
˙, mau
file?.txt se du’o˙’c thaythe´ bo’’i các tên teˆ
˙p sau
file1.txt, file2.txt, file3.txt , và filea.txt(neu chúng toˆn ta
˙i), nhu’ng file23.txt thì không.
[...] Tu’o’ng u’ng bat ky ký tu˙’ nào trong soˆ các ký tu
˙’ nam trong da´u ngoa
˙c
vuông này. Ca˘˙p ký tu
˙’, phân cách nhau bo’’i dau tru’ (-), ví du
˙c-f , bie’u
thi˙mo
˙t dãy; bat ký ký tu
˙’ nào, theo tu’ die’n, nam giu’a hai ký tu
˙’ này, ke’ ca’
hai ký tu˙’ ta
˙o ra dãy (c và f trong ví du
˙) cung tu’o’ng u’ng vo’i mau. Neu
ký tu˙’ dau tiên trong ngoa˘
˙c vuông là hay, thì mau (o’’ vi
˙trí này) setu’o’ng
u’ng tat ca’ các ký tu˙’, không du’o
˙’c chı’ ra trong ngo
Mau tên ta˙p tin rat 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 muon 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
du’ 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 du’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
Neu trong thu’ mu˙c có nhieu ta
˙p tin, mà tên cu’ a chúng là các soˆ gom bon chu’ so(thu’ mu
˙c
/proc là mo˙t ví du
˙+), thì le
˙nh sau chı’ du’a ra danh sách các taˆ
˙p tin có so´ tu’ 0500 den 0999:
kênh giao tác[user]$ ls -l 0[5-9]??
3.7.8 Xóa các ký tu˙’ da
˙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
du’o˙’c su’’ du
˙ng de’ huy’ bo’ giá tri
˙da˙c bie
˙t cu’ a các ký tu
˙’ khác) se˜ bi
˙xóa het.
3.8 Shell - mo˙t ngôn ngu’ la
˙p trình
Nhu’ dã nói o’’ trên, de’ có the’ xây du˙’ng bat ky gia’ i thua
˙t nào, cung can có các toán tu’’ kie’m tra
dieu kie˙n. He
˙vo’ bash ho tro
˙’ các toán tu’’ lu
˙’a cho
˙n if...then...else và case , cung
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 [ ])
Cau trúc cu’ a toán tu’’ dieu 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 dau
3.8 Shell - mo˙t ngôn ngu’ la
˙p trình 43
pha’ y và ket thúc bo’’i mo˙t dau cham pha’y hay ký tu
˙’ dòng mo’i. Ngoài ra, các chuoˆi này có the’
du’o˙’c du’a vào daˆu ngoa
˙c nho
˙n: list. Toán tu’’ if kie’m tra giá tri
˙du’o
˙’c tra’ la
˙i bo’’i các câu leˆ
˙nh
tu’ list1 . Neu trong danh sách có vài câu leˆ˙nh, thì kie’m tra giá tri
˙du’o
˙’c tra’ la
˙i bo’’i câu le
˙nh
cuoi cùng cu’ a danh sách. Neˆu giá tri˙
này bang 0, thì se˜ thu˙’c hie
˙n các le
˙nh tu’ list2 ; còn
neu giá tri˙
này khác không, thì se˜ thu˙’c hie
˙n nhu’ng le
˙nh tu’ list3 . Giá tri
˙du’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 ) du’a ra.
Da˙ng day du’ cu’ a le
˙nh if nhu’ sau:
if list then list [ elif list then list ] ... [ else list ] fi(o’’ dây dau ngoa
˙c vuông chı’ có nghı˜a là, nhu’ng gì nam trong nó, ngoa˘
˙c vuông, không nhaˆt
thiet pha’ i có). Bie’u thu’c du’ng sauif hayelif thu’o’ng là câu leˆ˙nh test , mà có the’ du’o
˙’c
bie’u thi˙
bo’’i dau 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, neu bie’u thu’c là dúng, và 1 trong tru’o’ng ho
˙’p ngu’o
˙’c la
˙i. Bie’u thu’c du’o
˙’c du’a
to’i chu’o’ng trìnhtest nhu’ mo˙t tham soˆ cu’ a chu’o’ng trình. Thay vì gõ
test expressioncó the’ du’a bie’u thu’c expression vào ngoa˘
˙c vuông:
[ expression ]Can chú ý rang, 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ó
dau dóng ngoa˘˙c). Và cung can chú ý rang o’’ chocu’ a test trong cau trúc if có the’ su’’ du
˙ng
bat ky chu’o’ng trình nào. D¯ e’ ket thúc mu˙c này, chúng ta du’a ra ví du
˙su’’ du
˙ng if :
kênh giao tácif [ -x /usr/bin/unicode_start ] ; thenunicode_startelseecho "hello world"fi
Ve toán tu’’ test (hay[...] ) can di sâu ho’n.
3.8.2 Toán tu’’ test và dieu kie˙n cu’ a bie’u thu’c
Bie’u thu’c dieu kie˙n, su’’ du
˙ng trong toán tu’’ test , du’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òngvà các so sánh soˆ ho˙
c thông thu’o’ng. Bie’u thu’c phu’c ta˙p ho’n
du’o˙’c ta
˙o ra tu’ các thao tác do’n và kép sau ("nhu’ng viên ga
˙ch co’ so’’"):
• -a fileDúng neu ta
˙p tin có tênfile ton ta
˙i.
• -b fileDúng neu file ton ta
˙i, và là mo
˙t ta
˙p tin thiet bi
˙khoi (block device) da
˙c bie
˙t.
• -c fileDúng neu file ton ta
˙i, và là mo
˙t ta
˙p tin thiet bi
˙ký tu
˙’ (charater device) da
˙c bie
˙t.
• -d fileDúng neu file ton ta
˙i và là mo
˙t thu’ mu
˙c.
• -e fileDúng neu ta
˙p tin có tênfile ton ta
˙i.
44 Bash
• -f fileDúng neu ta
˙p tin có tênfile ton ta
˙i và là mo
˙t ta
˙p tin thông thu’o’ng.
• -g fileDúng neu ta
˙p tin có tênfile ton ta
˙i và du’o
˙’c da
˙t bit thay do’i nhóm.
• -h file hay-L fileDúng neu ta
˙p tin có tênfile ton ta
˙i và là liên ket mem (liên ket tu’o
˙’ng tru’ng).
• -k fileDúng neu ta
˙p tin có tênfile ton ta
˙i và du’o
˙’c da
˙t bit sticky.
• -p fileDúng neu ta
˙p tin có tênfile ton ta
˙i và là tên cu’ a mo
˙t ong (kênh FIFO).
• -p fileDúng neu ta
˙p tin có tênfile ton ta
˙i và là tên cu’ a mo
˙t ong (kênh FIFO).
• -r fileDúng neu ta
˙p tin có tênfile ton ta
˙i và có quyen do
˙c.
• -s fileDúng neu ta
˙p tin có tênfile ton ta
˙i và kích thu’o’c lo’n ho’n không.
• -t fdDúng neu bo
˙mô ta’ cu’ a ta
˙p tin (fd) mo’’ và chı’ lên terminal.
• -u fileDúng neu ta
˙p tin có tênfile ton ta
˙i và du’o
˙’c da
˙t bit thay do’i ngu’o’i dùng.
• -w fileDúng neu ta
˙p tin có tênfile ton ta
˙i và có quyen ghi.
• -x fileDúng neu ta
˙p tin có tênfile ton ta
˙i và có quyen thu
˙’c thi.
• -0 fileDúng, ne´u ta
˙p tin có tênfile và chu’ so’’ hu’u cu’ a nó là ngu’o’i dùng mà ID có hieˆ
˙u lu
˙’c
chı’ den.
• -G fileDúng, ne´u ta
˙p tin có tênfile ton ta
˙i và thuo
˙c venhóm, xác di
˙nh bo’’i ID nhóm có hie
˙u
lu˙’c.
• -S fileDúng, ne´u ta
˙p tin có tênfile ton ta
˙i và là socket.
• -N fileDúng, ne´u ta
˙p tin có tênfile ton ta
˙i và thay do’i tu’ lan du’o
˙’c do
˙c cuoi cùng.
• file1 -nt file2Dúng, ne´u ta
˙p tin file1 có tho’i gian su’’a do’i muo
˙n ho’n file2 .
3.8 Shell - mo˙t ngôn ngu’ la
˙p trình 45
• file1 -ot file2Dú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 file2Dúng, ne´u ta
˙p tin file1 và file2 có cùng moˆ
˙t sothiet bi
˙và chı’ somô ta’ inode.
• -o optnameDúng, ne´u tùy cho
˙n optname cu’ a he
˙vo’ du’o
˙’c kích hoa
˙t. Chi tiet xin xem trên trang
man bash .
• -z stringDúng, ne´u do
˙dài cu’ a chuoi string bang không.
• -n stringDúng, ne´u do
˙dài cu’ a chuoi khác không.
• string1 == string2Dúng, ne´u hai chuoˆi trùng nhau. Có the’ thay hai== bang mo
˙t =.
• string1 !== string2Dúng, ne´u hai chuoˆi không trùng nhau.
• string1 < string2Dúng, ne´u chuoi string1 , theo tu’ die’n, du’ng tru’o’c chuoi string2 (doi vo’i ngônngu’ hie
˙n tho’i).
• string1 > string2Dúng, ne´u chuoi string1 , theo tu’ die’n, du’ng sau chuoˆi string2 (doi vo’i ngôn ngu’hie
˙n tho’i).
• arg1 OP arg2O’’ dây OP là moˆ
˙t trong các phép so sánh soˆ ho
˙c: -eq (bang),-ne (khác, không ba˘ng),
-lt (nho’ ho’n), -le (nho’ ho’n hoa˙c bang), -gt (lo’n ho’n), -ge (lo’n ho’n hoa
˙c bang).
O’’ chocá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 dieu kie˙n co’ ba’ n này có the’ xây du
˙’ng các bie’u thu’c phu’c ta
˙p theo ý
muon nho’ các phép lôgíc thông thu’o’ng PHU’ DI˙NH, VÀ (co
˙ng) và HOA
˙C:
• !(expression)Phép phu’ di
˙nh. Dúng, ne´u bie’u thu’c sai.
• expression1 -a expression2Phép coˆ
˙ng lôgicAND. Dúng neu ca’ hai bie’u thu’c deu dúng.
• expression1 -o expression2Phép lôgíc hoa˘
˙c OR. Dúng neu 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 ;; ] ...+esacCâu le
˙nh case dau tiên khai trie’n tu’ word , và so sánh nó (word) vo’i moi tu’ trong mau
pattern theo thu’ tu˙’. Sau khi tìm thaˆy su
˙’ trùng nhau dau tiên thì du’ng vie
˙c so sánh la
˙i, và
thu˙’c hie
˙n danh sáchlist các câu leˆ
˙nh du’ng sau maˆu dã tìm thay. Giá tri
˙tra’ la
˙i bo’’i toán tu’’
này, bang 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 cuoi cùng trong danh sáchlist du’a ra. Ví du
˙su’’ du
˙ng toán tu’’ case sau lay tu’
script/etc/rc.d/rc.sysinit (FreeBSD-style):
kênh giao táccase "$UTC" inyes|true)CLOCKFLAGS="$CLOCKFLAGS -u";CLOCKDEF="$CLOCKDEF (utc)";;;no|false)CLOCKFLAGS="$CLOCKFLAGS --localtime";CLOCKDEF="$CLOCKDEF (localtime)";;;esac
Neu bien so(UTC) nha˙n giá tri
˙yes hoa
˙c true , thì sethu
˙’c hie
˙n ca
˙p le
˙nh thu’ nhat, 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; doneLúc dau tu’ mau word hình thành moˆ
˙t danh sách nhu’ng tu’ tu’o’ng u’ng vo’i mau này. Ta
˙p
ho˙’p nhu’ng tu’ này du’o
˙’c du’a vàokênh thông báo loˆ i tiêu chua’n, ho’n nu’a moi tu’ du’o
˙’c di kèm
vo’i mo˙t sothu’ tu
˙’. Neu mau word bi
˙bo’ qua (không có trong toán tu’’ select ), thì sedu’a vào
các tham bieˆn vi˙
trí (xem trên) theo moˆ˙t cách tu’o’ng tu
˙’. Sau dó, dau nhac PS3 du’o
˙’c du’a ra,
và he˙
vo’ cho’ chuoi nha˙p vào trêndau vào tiêu chua’n. Neu chuoi 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 sedu’o
˙’c gán giá tri
˙bang tu’ di kèm vo’i so
này. Neu nha˙p vào mo
˙t dòng rong, thì so´ và tu’ sedu’o
˙’c hie
˙n ra them moˆ
˙t lan nu’a. Neu nha
˙p
vào bat ky mo˙t giá tri
˙nào khác, thì bieˆn name senha
˙n giá tri
˙bang không. Chuoˆi mà ngu’o’i
dùng nhaˆ˙p vào, du’o
˙’c ghi la
˙i trong bien REPLY. Danh sách leˆ
˙nh list du’o
˙’c thu
˙’c hie
˙n vo’i giá
tri˙bien name dã cho
˙n. Sau dây là mo
˙t script nho’ (xin hãy gõ không daˆu neu console cu’ a ba
˙n
chu’a hotro˙’ vie
˙c hie’n thi
˙Tieng Vie
˙t):
kênh giao tác#!/bin/shecho "Ba
˙n thích dùng OS nào?"
select var in "Linux" "Gnu Hurd" "Free BSD" "MacOSX" "Solaris" "QNX" "Other"; dobreakdoneecho "Ba
˙n dã cho
˙n $var"
3.8 Shell - mo˙t ngôn ngu’ la
˙p trình 47
Ghi doa˙n trên vào moˆ
˙t ta
˙p tin (ví du
˙, select.sh ), thay do’i de’ 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ácBa
˙n thích dùng OS nào?
1) Linux 3) Free BSD 5) Solaris 7) Other2) Gnu Hurd 4) MacOSX 6) QNX#?
Hãy nhan mo˙t trong 7 soˆ du’a ra (tu’ 1 den 7). Neu ba
˙n nha
˙p 4 (nhan ca’ <Enter>), thì se˜
thay thông báo sau:
kênh giao tácBa
˙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ì tang hoa˙c gia’ m giá tri
˙cu’ a mo
˙t bien sonào dó (lên hoa
˙c xuong) mo
˙t do’n vi
˙sau moˆi
vòng la˙p, thì nó gán giá tri
˙tiep theo trongdanh sách tu ’ du’a sa n cho bien dó trong
moi vòng la˙p. Nói chung caˆu trúc có da
˙ng sau:
for namein wordsdo list doneQuy lua
˙t xây du
˙’ng danh sách leˆ
˙nh (list ) giong trong toán tu’’ if . Ví du
˙. Script sau ta
˙o
các ta˙p tin fu1, fu2 , và fu3 :
kênh giao tácfor a in 1 2 3 ; dotouch fu$adone
Có the’ gõ ba dòng này trên moˆ˙t dòng le
˙nh, ket qua’ thu du’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 ; doneDau tiên cung 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ó bien name lan lu’o˙’t du’o
˙’c gán các giá tri
˙thu du’o
˙’c tu’ su
˙’ khai trien này, và thu
˙’c hie
˙n
danh sách leˆ˙nh list trong moi lan nhu’ va
˙y. Neu không có "in word ", thì danh sách leˆ
˙nh
list du’o˙’c thu
˙’c hie
˙n mo
˙t lan cho moi tham bieˆ n vi
˙trí dã du’a ra. Trên Linux có
chu’o’ng trìnhseq , tiep nha˙n hai so´ nguyên làm tham soˆ, và du’a ra chuoˆi tat ca’ các soˆ nam
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. De’ làm du’o
˙’c dieu này chı’
can viet vòng la˙p for nhu’ sau:
kênh giao tácfor a in $( seq 1 6 ) ; docat fu$adone
Câu le˙nh (script) này du’a ra màn hình noˆ
˙i dung cu’ a 10 ta
˙p tin (neu 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 tronglist2 chı’
thu˙’c hie
˙n khi dieu kie
˙n còn dúng, và se˜ ngu’ng khi dieu kie
˙n không tho’ a mãn. Caˆu trúc có
da˙ng nhu’ sau:while list1 do list2 doneVí du
˙:
kênh giao tácwhile [ -d directory ] ; dols -l directory >> logfileecho -- SEPARATOR -- >> logfilesleep 60done
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 ton ta
˙i. Toán tu’’ until tu’o’ng tu
˙’ nhu’ toán tu’’ while :
until list1 do list2 doneDie’m khác bie
˙t nam o’’ cho, su’’ du
˙ng giá tri
˙phu’ di
˙nh cu’ a dieu kie
˙n list1 , tu’c là list2
thu˙’c hie
˙n, neu câu le
˙nh cuoi cùng trong danh sáchlist1 tra’ la
˙i tra
˙ng thái thoát ra khác
không.
3.8.7 Các hàm soˆ
Cú phápHe˙
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à
du’o˙’c su’’ du
˙ng giong 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 socó cau trúc nhu’ sau:
function name() { list }Ho’n nu’a tu’ function không nhaˆt thiet pha’ i có, name xác di
˙nh tên cu’ a hàm (dùng de’
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 , nam giu’a { và } .
Các câu leˆ˙nh này se˜ du’o
˙’c thu
˙’c hie
˙n moi khi tên name du’o
˙’c go
˙i (giong nhu’ mo
˙t le
˙nh thông
thu’o’ng). Can chú ý rang hàm có the’ là de˙
qui, tu’c là go˙i hàm so´ o’’ ngay trong phan 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ó tien trình mo’i nào du’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´ du’o˙’c go
˙i de’ 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 du’o
˙’c da
˙t các tên
nhu’ $n , trong dó n là socu’ a tham soˆ mà chúng ta muoˆn su’’ du˙ng. Vie
˙c dánh soˆ bat dau tu’
1, nhu’ va˙y $1 là tham soˆ dau tiên. Cung có the’ su’’ du
˙ng tat ca’ các tham soˆ mo
˙t lúc nho’ $* ,
và du’a ra soˆ thu’ tu˙’ cu’ a tham soˆ nho’ $# Tham soˆ vi
˙trí so0 không thay do’i. Trong khi thu
˙’c
hie˙n neu ga
˙p câu le
˙nh no
˙i trú return (trong phan thâm cu’ a hàm), thì hàm soˆ sebi
˙du’ng la
˙i
và quyen dieu khie’n du’o˙’c trao cho câu leˆ
˙nh du’ng sau hàm. Khi thu
˙’c hie
˙n xong hàm soˆ, các
tham bien vi˙trí và tham bieˆn da
˙c bie
˙t # sedu’o
˙c tra’ la
˙i các giá tri
˙mà chúng có tru’o’c khi cha
˙y
hàm. Bien no˙i bo
˙(local)
Neu muon ta˙o mo
˙t tham bien di
˙a phu’o’ng, có the’ su’’ du
˙ng tu’ khóa local . Cú pháp du’a ra
bien di˙a phu’o’ng giong he
˙t các tham bieˆn khác, chı’ có dieu can du’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
˙nhseq dã
nhac den 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}
Can chú ý den 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 serat có ích
trong các hàm soˆ vo’i mu˙c dích khác.Hàm sotính giai thu’a fact Mo
˙t ví du
˙khác:
kênh giao tácfact(){if [ $1 = 0 ]; thenecho 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 de
˙qui. Hãy chú ý den su
˙’ khai trie’n soho
˙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 chuoi le
˙nh. Tu’o’ng tu
˙’ hàm soˆ script có the’ du’o
˙’c
thu˙’c hie
˙n nhu’ mo
˙t câu le
˙nh. Cú pháp truy caˆ
˙p den các tham soˆ cung nhu’ hàm soˆ. Trong các
tru’o’ng ho˙’p thông thu’o’ng khi cha
˙y script secó mo
˙t tien trình mo’i du’o
˙’c cha
˙y. De’ có the’ thu
˙’c
hie˙n script o’’ trong ba’ n bash hie
˙n tho’i, can su’’ du
˙ng câu le
˙nhsource , hay mo
˙t dau cham "."
(dong nghı˜a cu’ a source). Trong tru’o’ng ho˙’p này script chı’ do’n gia’ n là mo
˙t tham soˆ cu’ a le
˙nh
nói trên. Câu leˆ˙nh secó da
˙ng:
source filename [arguments]Câu le
˙nh này do
˙c và thu
˙’c hie
˙n các câu leˆ
˙nh có trong taˆ
˙p tin filename trongmôi tru’o’ng
hie˙n tho’i, và tra’ la
˙i giá tri
˙, xác di
˙nh bo’’i câu le
˙nh cuoi cùng cu’ a filename . Neu filename
không chu’a dau ga˙ch chéo, thì du’o’ng dan, lie
˙t kê trong bie´ n soPATH, sedu’o
˙’c su’’ du
˙ng de’
tìm ta˙p tin có tênfilename . Ta
˙p tin này không nhaˆt thiet pha’ i kha’ thi (không nhaˆt thiet
pha’ i có bit x). Neu trong thu’ mu˙c, lie
˙t kê trong PATH, không tìm thaˆy ta
˙p tin can, thì setìm
nó (ta˙p tin) trong thu’ mu
˙c hie
˙n tho’i. Neu có các tham soˆ (du’a ra arguments, xem di
˙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í. Neu
không có tham soˆ, thì tham bieˆn vi˙
trí không thay do’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 cuoi cùng trong script. Neˆu không câu leˆ
˙nh nào
du’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
˙nhbash haysh . Khi này
có the’ bat ba’ n sao này cha˙y mo
˙t script nào dó, neu du’a tên cu’ a script nhu’ mo
˙t tham soˆ cho
le˙nh bash . Nhu’ va
˙y, de’ thu
˙’c hie
˙n scriptmyscript can du’a câu le
˙nh "sh myscript ".
Neu xem no˙i dung cu’ a mo
˙t ta
˙p tin script nào dó (nhu’ng ta
˙p tin nhu’ va
˙y có rat nhieu trên
he˙
thong), ba˙n sethay dòng dau tiên có da
˙ng sau:#!/bin/sh . Dieu này có nghı˜a là, khi
chúng ta go˙i script de’ thu
˙’c hie
˙n nhu’ mo
˙t le
˙nh thông thu’o’ng, thì/bin/sh segiúp chúng ta
"thu xep" mo˙i thu’. Có the’ thay thedòng này bo’’i liên ket den bat ky mo
˙t chu’o’ng trình nào,
mà sedo˙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 bat
dau bo’’i dòng có da˙ng !/bin/perl . Mo
˙t chú ý khác là ký tu
˙’ # dùng de’ viet lo’i chú thích
trong script. Taˆt ca’ nhu’ng gì du’ng sau ký tu˙’ này den cuoi dòng sedu’o
˙’c coi là chú thích và bi
˙bash bo’ qua (tu’c là he˙
vo’ sekhông xem dòng này là câu leˆ˙nh). Neu ba
˙n muon 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 bat ky, và da
˙t tru’o’c nó
(câu le˙nh) ký tu
˙’ #, ví du
˙"# ls ", ba
˙n sethay rang he
˙vo’ bo’’ qua câu leˆ
˙nh này.
Chúng ta se˜ du’ng bài ho˙c ngan go
˙n vebash ta
˙i dây. Tat nhiên, còn raˆt nhieu van dequan
tro˙ng can xem xét nhu’ng nam ngoài pha
˙m vi cu’ a bài ho
˙c, ví du
˙, qua’ n lý tien 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 setìm thay thông tin can thiet trong
các cuoˆn hu’o’ng dan khác hoa˘˙c trên trangman bash .