background image

Linux cho ngu’o`’i dùng

Tác gia’: Kostromin V. A.

Di

˙

ch bo’’i: Phan Vı˜nh Thi

˙

nh

background image

Mu

˙

c lu

˙

c

1

HD

¯ H Linux: li

˙

ch su’’ và các ba’n phân phoˆ

´ i

2

2

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

3

2.1

Chuaˆ’n bi

˙

cài d¯a˘

˙

t

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2.2

Phòng xa và nhu

˜’ng lo`’i khuyên

. . . . . . . . . . . . . . . . . . . . . . . .

5

2.3

Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ

˙

ng

. . . . . . . . . . . . . . . . . .

6

2.3.1

Theˆ´ nào là caˆ´u trúc "hình ho

˙

c cu’a d¯ı˜a"

. . . . . . . . . . . . . . . .

6

2.3.2

Phân vùng và ba’ng phân vùng cu’a d¯ı˜a

. . . . . . . . . . . . . . . .

7

2.3.3

Quá trình kho’’i d¯oˆ

˙

ng HD

¯ H công ty Microsoft

. . . . . . . . . . . .

8

2.3.4

Vaˆ´n d¯eˆ` vo´’i các d¯ı˜a lo´’n

. . . . . . . . . . . . . . . . . . . . . . . .

10

2.4

Lu

˙

’a cho

˙

n trình kho’’i d¯oˆ

˙

ng

. . . . . . . . . . . . . . . . . . . . . . . . . . .

11

2.4.1

Trình kho’’i d¯oˆ

˙

ng LILO cu’a HD

¯ H Linux

. . . . . . . . . . . . . . .

11

2.4.2

Các trình kho’’i d¯oˆ

˙

ng khác

. . . . . . . . . . . . . . . . . . . . . . .

13

2.4.3

Các phu’o’ng án kho’’i d¯oˆ

˙

ng

. . . . . . . . . . . . . . . . . . . . . .

14

2.5

Chuaˆ’n bi

˙

các phân vùng trên d¯ı˜a

. . . . . . . . . . . . . . . . . . . . . . .

14

2.5.1

Lo`’i khuyên khi ta

˙

o phân vùng

. . . . . . . . . . . . . . . . . . . .

14

2.5.2

Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯ı˜a

. . . . . . . . . . . . . . . . . . .

17

2.6

Windows NT và Linux: kho’’i d¯oˆ

˙

ng qua OS Loader cu’a NT

. . . . . . . . .

17

2.7

Su’’ du

˙

ng trình kho’’i d¯oˆ

˙

ng LILO

. . . . . . . . . . . . . . . . . . . . . . . .

20

2.7.1

Cài d¯a˘

˙

t và caˆ´u hình LILO

. . . . . . . . . . . . . . . . . . . . . . .

20

2.7.2

Cài d¯a˘

˙

t các heˆ

˙

d¯ieˆ`u hành khác sau Linux

. . . . . . . . . . . . . . .

23

2.7.3

Chuyeˆ’n thu’ mu

˙

c /boot lên phân vùng DOS

. . . . . . . . . . . . .

23

2.8

Kho’’i d¯oˆ

˙

ng Linux tu`’ MS-DOS ba˘`ng loadlin.exe

. . . . . . . . . . . . . . .

24

3

Bash

27

3.1

Heˆ

˙

vo’ là gì?

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

3.2

Các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

3.3

Thu

˙

’c thi các câu leˆ

˙

nh

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.3.1

Thao tác ;

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.3.2

Thao tác &

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.3.3

Thao tác && và ||

. . . . . . . . . . . . . . . . . . . . . . . . . . .

29

3.4

D

¯ aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n

. . . . . . . . . . . . . . . . . . . . . . . . . .

30

3.4.1

Dòng du

˜’ lieˆ

˙

u vào-ra

. . . . . . . . . . . . . . . . . . . . . . . . .

30

3.4.2

Leˆ

˙

nh echo

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

3.4.3

Leˆ

˙

nh cat

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

3.5

Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ´ng và d¯aˆ`u lo

˙

c

. . . . . . . . . . . .

31

3.5.1

Su’’ du

˙

ng >, < và >>

. . . . . . . . . . . . . . . . . . . . . . . . . .

31

background image

MU

˙

C LU

˙

C

iii

3.5.2

Su’’ du

˙

ng |

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

3.5.3

D

¯ aˆ`u lo

˙

c

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

3.6

Tham bieˆ´n và các bieˆ´n soˆ

´ . Môi tru’o`’ng cu’a heˆ

˙

vo’

. . . . . . . . . . . . . . .

34

3.6.1

Các da

˙

ng tham bieˆ´n khác nhau

. . . . . . . . . . . . . . . . . . . .

35

3.6.2

Daˆ´u nha˘´c cu’a heˆ

˙

vo’

. . . . . . . . . . . . . . . . . . . . . . . . . .

36

3.6.3

Bieˆ´n môi tru’o`’ng PATH

. . . . . . . . . . . . . . . . . . . . . . . .

38

3.6.4

Bieˆ´n môi tru’o`’ng IFS

. . . . . . . . . . . . . . . . . . . . . . . . .

38

3.6.5

Thu’ mu

˙

c hieˆ

˙

n tho`’i và thu’ mu

˙

c cá nhân

. . . . . . . . . . . . . . . .

38

3.6.6

Câu leˆ

˙

nh export

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

3.7

Khai trieˆ’n bieˆ’u thu´’c

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

3.7.1

Khai trieˆ’n daˆ´u ngoa˘

˙

c

. . . . . . . . . . . . . . . . . . . . . . . . .

39

3.7.2

Thay theˆ´ daˆ´u ngã (Tilde Expansion)

. . . . . . . . . . . . . . . . .

40

3.7.3

Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ

´

. . . . . . . . . . . . . . . . . .

40

3.7.4

Phép theˆ´ các câu leˆ

˙

nh

. . . . . . . . . . . . . . . . . . . . . . . . .

41

3.7.5

Phép theˆ´ soˆ

´ ho

˙

c (Arithmetic Expansion)

. . . . . . . . . . . . . . .

41

3.7.6

Phân chia tu`’ (word splitting)

. . . . . . . . . . . . . . . . . . . . .

41

3.7.7

Khai trieˆ’n các maˆ˜u tên taˆ

˙

p tin và thu’ mu

˙

c (Pathname Expansion)

. .

41

3.7.8

Xóa các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t

. . . . . . . . . . . . . . . . . . . . . . . .

42

3.8

Shell - moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình

. . . . . . . . . . . . . . . . . . . . . . . .

42

3.8.1

Toàn tu’’ if và test (hoa˘

˙

c [ ])

. . . . . . . . . . . . . . . . . . . . . .

42

3.8.2

Toán tu’’ test và d¯ieˆ`u kieˆ

˙

n cu’a bieˆ’u thu´’c

. . . . . . . . . . . . . . . .

43

3.8.3

Toán tu’’ case

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

3.8.4

Toán tu’’ select

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

3.8.5

Toán tu’’ for

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

3.8.6

Toán tu’’ while và until

. . . . . . . . . . . . . . . . . . . . . . . . .

48

3.8.7

Các hàm soˆ

´

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

3.8.8

Tham soˆ

´

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

3.9

Script cu’a heˆ

˙

vo’ và leˆ

˙

nh source

. . . . . . . . . . . . . . . . . . . . . . . .

49

3.10 Câu leˆ

˙

nh sh

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

background image

Danh sách ba’ng

2.1

Caˆ´u trúc cu’a sector kho’’i d¯oˆ

˙

ng chính

. . . . . . . . . . . . . . . . . . . . .

9

2.2

Nhu caˆ`u su’’ du

˙

ng không gian d¯ı˜a cu’a HD

¯ H

. . . . . . . . . . . . . . . . . .

15

3.1

Các câu leˆ

˙

nh d¯aˆ`u lo

˙

c

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

3.2

Thay theˆ´ các tham bieˆ´n d¯a˘

˙

c bieˆ

˙

t

. . . . . . . . . . . . . . . . . . . . . . .

36

3.3

Ký tu

˙

’ xác d¯i

˙

nh da

˙

ng daˆ´u nha˘´c

. . . . . . . . . . . . . . . . . . . . . . . . .

37

3.4

Các ký tu

˙

’ ta

˙

o maˆ˜u

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

background image

DANH SÁCH BA

’ NG

1

Lo`’i nói d¯aˆ`u

D

¯ ây là ba’n di

˙

ch cuoˆ

´ n "Linux cho ngu’o`’i dùng" (sêri sách tu

˙

’ ho

˙

c) cu’a Kostromin Victor

Alexeevich coˆ

˙

ng thêm moˆ

˙

t vài (raˆ

´ t ít) kinh nghieˆ

˙

m su’’ du

˙

ng Linux cu’a teppi. Ba’n goˆ

´ c d¯u’o

˙

’c

vieˆ´t trên tieˆ´ng Nga. Theo yêu caˆ`u cu’a Kostromin A. V., xin d¯u’o

˙

’c d¯u’a ra các liên keˆ

´ t to´’i ba’n

goˆ

´ c d¯ây:

http://rus-linux.net/book1.php?name=book1/oglavl
http://linux-ve.chat.ru/

Lo`’i ca’m o’n

Xin ca’m o’n các bác sau d¯ã giúp d¯o˜’: Kostromin V. A. d¯ã vieˆ´t moˆ

˙

t cuoˆ

´ n sách veˆ` Linux cho

ngu’o`’i dùng mo´’i tuyeˆ

˙

t vo`’i; Tru’o’ng Ma

˙

nh Cu’o`’ng d¯ã dành cho teppi moˆ

˙

t khoa’ng không trên

http://phoc.minidns.net

d¯eˆ’ d¯a˘

˙

t cuoˆ

´ n sách này; hai bác Nguyeˆ˜n D

¯ a

˙

i Quý và Nguyeˆ˜n D

¯ a˘

˙

ng

Hoàng Tuân d¯ã giúp trong vieˆ

˙

c su’’ du

˙

ng L

A

TEX. Bác Nguyeˆ˜n D

¯ a

˙

i Quý d¯ã d¯o

˙

c và su’’a cho

phiên ba’n 0.9. Xin hãy gu’’i thu’nha˘´c teppi ta

˙

i

teppi@vnlinux.org

neˆ´u nhu’teppi có quên ai d¯ó.

Ba’n quyeˆ`n

Cuoˆ

´ n "Bash cho ngu’o`’i dùng" này su’’ du

˙

ng ba’n quyeˆ`n GPL. Nói moˆ

˙

t cách nga˘´n go

˙

n, ba

˙

n có

theˆ’ làm baˆ´t ký thu´’gì: in, ta˘

˙

ng, bán, d¯oˆ

´ t,... nhu’ng xin hãy thêm hai d¯u’o`’ng daˆ˜n sau vào các ba’n

sao cu’a mình:

http://rus-linux.net/book1.php?name=book1/oglavl
http://teppi.org/l4u/

Tác gia’ Kostromin V. A. cu˜ng nhu’ ngu’o`’i di

˙

ch không chi

˙

u trách nhieˆ

˙

m veˆ` haˆ

˙

u qua’ do vieˆ

˙

c su’’

du

˙

ng cuoˆ

´ n sách này gây ra.

Phiên ba’n và caˆ

˙

p nhaˆ

˙

t

Phiên ba’n 0.9
Caˆ

˙

p nhaˆ

˙

t cuoˆ

´ i cùng Ngày 9 tháng 2 na˘m 2005

Mo

˙

i d¯eˆ` nghi

˙

su’’a d¯oˆ’i, thông báo loˆ˜i chính ta’, loˆ˜i kieˆ´n thu´’c cu’a ba’n di

˙

ch cu˜ng nhu’d¯eˆ` nghi

˙

giúp

d¯o˜’ di

˙

ch xin gu’’i cho Phan Vı˜nh Thi

˙

nh theo d¯i

˙

a chı’

teppi@vnlinux.org

.

background image

Chu’o’ng 1

HD

¯ H Linux: li

˙

ch su’’ và các ba’n phân phoˆ

´ i

background image

Chu’o’ng 2

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính

vo

´’i Windows

Va

˙

n su

˙

’ kho’’i d¯aˆ`u nan – Trung Quoˆ

´ c

Thông thu’o`’ng trên các d¯ı˜a cu’a ba’n phân phoˆ´i Linux d¯ã có hu’o´’ng daˆ˜n nga˘´n go

˙

n cách cài d¯a˘

˙

t

Linux. Ngoài ra, trên Internet ba

˙

n có theˆ’ tìm thaˆ´y raˆ´t nhieˆ`u cuoˆ

´ n sách nó veˆ` vaˆ´n d¯eˆ` này. Và taˆ´t

ca’ các ba’n phân phoˆ

´ i lo´’n (Debian, Slackware, Fedora, Mandrake, ...) d¯eˆ`u d¯ã có cuoˆ´n hu’o´’ng

daˆ˜n cài d¯a˘

˙

t raˆ´t chi tieˆ´t, cho mo

˙

i tình huoˆ

´ ng su’’ du

˙

ng. Hãy cho`’ d¯o

˙

’i và hy vo

˙

ng trong tu’o’ng lai

không xa se˜ có ba’n di

˙

ch Tieˆ´ng Vieˆ

˙

t cu’a nhu

˜’ng cuoˆ

´ n sách này. Chính vì vaˆ

˙

y trong cuoˆ

´ n sách

này, tác gia’ se˜ không d¯u’a ra các bu’o´’c cu

˙

theˆ’ cu’a vieˆ

˙

c cài d¯a˘

˙

t, mà xin ba

˙

n d¯o

˙

c hãy tìm các

cuoˆ

´ n hu’o´’ng daˆ˜n tu’o’ng u´’ng. Thay vào d¯ó là nhu˜’ng gì ba

˙

n caˆ`n bieˆ´t và chuaˆ’n bi

˙

tru’o´’c khi cài

d¯a˘

˙

t, d¯oˆ`ng tho`’i, tác gia’ se˜ d¯i cu

˙

theˆ’ và chi tieˆ´t vào nhu˜’ng gì d¯a˘

˙

c bieˆ

˙

t khi cài d¯a˘

˙

t Linux trên máy

tính d¯ã có moˆ

˙

t trong các heˆ

˙

d¯ieˆ`u hành Windows cu˜ng nhu’vieˆ

˙

c kho’’i d¯oˆ

˙

ng nhieˆ`u heˆ

˙

d¯ieˆ`u hành.

Vaˆ´n d¯eˆ` o’’ choˆ˜, phaˆ`n lo´’n ngu’o`’i dùng Vieˆ

˙

t Nam tru’o´’c khi ba˘´t d¯aˆ`u ho

˙

c Linux d¯ã làm quen và

raˆ´t có theˆ’ d¯ã có kinh nghieˆ

˙

m su’’ du

˙

ng các HD

¯ H dòng Windows nhu’ Windows 98, Windows

2000 và Windows XP. Và trên thu

˙

’c teˆ

´ thì ta

˙

m tho`’i Linux khó có theˆ’ là HD

¯ H d¯aˆ`u tiên mà ngu’o`’i

dùng làm quen. Nhu’ theˆ´, moˆ

˙

t cách tu

˙

’ nhiên, neˆ

´ u ngu’o`’i dùng d¯ã làm vieˆ

˙

c vo´’i HD

¯ H Windows

và quyeˆ´t d¯i

˙

nh thu’’ nghieˆ

˙

m vo´’i Linux, thì ho

˙

không muoˆ

´ n maˆ´t d¯i môi tru’o`’ng làm vieˆ

˙

c quen

thuoˆ

˙

c cu’a mình, cùng vo´’i nhu˜’ng gì d¯ã ta

˙

o ra và d¯ã caˆ´u hình du’o´’i du’o´’i Windows. Raˆ´t may là

không nhaˆ´t thieˆ´t pha’i d¯ánh maˆ´t taˆ´t ca’ nhu˜’ng thu´’ d¯ó. Bo’’i vì trên moˆ

˙

t máy tính có theˆ’ cùng

"chung soˆ

´ ng hòa bình hai HD

¯ H và thaˆ

˙

m chí nhieˆ`u ho’n nu˜’a (neˆ´u có d¯u’ choˆ˜ trên d¯ı˜a!). Chính

vì theˆ´, o’’ phía du’o´’i se˜ nói cách cài d¯a˘

˙

t HD

¯ H Linux trên máy tính d¯ã cài d¯a˘

˙

t moˆ

˙

t trong các heˆ

˙

d¯ieˆ`u hành cu’a hãng Microsoft.

2.1

Chuaˆ’n bi

˙

cài d¯a˘

˙

t

Có theˆ’ cài d¯a˘

˙

t Linux ba˘`ng moˆ

˙

t trong các cách sau:

• Tu`’ oˆ’ d¯ı˜a CD-ROM

• Tu`’ ba’n sao chép Linux trên oˆ’ d¯ı˜a cu´’ng

• Tu`’ máy chu’ taˆ

˙

p tin cu’a ma

˙

ng noˆ

˙

i boˆ

˙

qua NFS;

• Tu`’ máy tính khác trong ma

˙

ng noˆ

˙

i boˆ

˙

qua SMB;

background image

4

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

• Tu`’ máy tính o’’ xa (ví du

˙

tu`’ Internet) qua giao thu´’c FTP;

• Tu`’ moˆ

˙

t máy chu’ WWW qua giao thu´’c HTTP.

Theo ý kieˆ´n cá nhân cu’a tác gia’ thì thuaˆ

˙

n tieˆ

˙

n và có tính thu

˙

’c teˆ

´ nhaˆ´t là cài d¯a˘

˙

t Linux tu`’

CD-ROM, ho’n nu˜’a vieˆ

˙

c mua các d¯ı˜a CD bây gio`’ không gây khó kha˘n gì.

Tru’o´’c khi ba˘´t d¯aˆ`u cài d¯a˘

˙

t, hãy thu thaˆ

˙

p (hãy vieˆ´t lên moˆ

˙

t to`’ giaˆ´y) taˆ´t ca’ nhu˜’ng thông tin

caˆ´u hình caˆ`n thieˆ´t cu’a máy tính. Neˆ´u nhu’ máy tính cu’a ba

˙

n ta

˙

m tho`’i vaˆ˜n còn làm vieˆ

˙

c du’o´’i

HD

¯ H Windows 95/98/2000/XP, thì ba

˙

n se˜ tìm thaˆ´y raˆ´t nhieˆ`u thông tin neˆ´u nhaˆ´n chuoˆ

˙

t pha’i

vào bieˆ’u tu’o

˙

’ng My Computer, cho

˙

n leˆ

˙

nh Properties. O

’’ d¯ây ba

˙

n có theˆ’ tìm thaˆ´y gaˆ`n heˆ´t taˆ´t ca’

thông tin caˆ`n thieˆ´t. Neˆ´u nhu’ ba

˙

n không thaˆ´y thông tin nào d¯ó, thì caˆ`n tìm kieˆ´m theo các cách

khác, keˆ’ ca’ vieˆ

˙

c mo’’ vo’ máy và d¯o

˙

c nhu

˜’ng dòng chu˜’ trên thieˆ´t bi

˙

.

D

¯ eˆ’ giúp ba

˙

n d¯o

˙

c, xin d¯u’o

˙

’c d¯u’a ra d¯ây danh sách nhu

˜’ng thông tin caˆ`n thu thaˆ

˙

p. Xin d¯u`’ng

lu’o`’i bieˆ´ng và hãy coˆ´ ga˘´ng ghi càng nhieˆ`u du˜’ lieˆ

˙

u veˆ` moˆ

˙

t thieˆ´t bi

˙

càng toˆ

´ t (taˆ´t ca’ nhu˜’ng thông

tin có theˆ’ tìm thaˆ´y), nhu˜’ng du˜’ lieˆ

˙

u này se˜ caˆ`n d¯eˆ´n khi cài d¯a˘

˙

t và caˆ´u hình, khi mà vieˆ

˙

c tìm

kieˆ´m chúng se˜ khó kha˘n ho’n.

• BIOS:

– nhà sa’n xuaˆ´t;

– soˆ

´ hieˆ

˙

u phiên ba’n.

• Controller oˆ’ d¯ı˜a cu´’ng: loa

˙

i (IDE hay SCSI) và dung lu’o

˙

’ng cu’a oˆ’ d¯ı˜a (neˆ

´ u nhu’ ba

˙

n d¯o

˙

c

dùng d¯ı˜a IDE, thì caˆ`n kieˆ’m tra xem BIOS có hoˆ˜ tro

˙

’ vieˆ

˙

c truy caˆ

˙

p o’’ cheˆ´ d¯oˆ

˙

LBA hay

không):

– hda (Master trên controller soˆ

´ 1 hay Primary Master);

– hdb (Slave trên controller soˆ

´ 1 hay Primary Slave);

– hdc (Master trên controller soˆ

´ 2 hay Secondary Master);

– hdd (Slave trên controller soˆ

´ 2 hay Secondary Slave).

– nhà sa’n xuaˆ´t và soˆ

´ maˆ˜u mã cu’a adapter SCSI (neˆ´u có).

• Dung lu’o

˙

’ng cu’a boˆ

˙

nho´’ (tính ba˘`ng Kilobyte

• CD-ROM:

– Giao dieˆ

˙

n (IDE, SCSI, hay giao dieˆ

˙

n khác);

– d¯oˆ

´ i vo´’i các oˆ’ d¯ı˜a CD-ROM không pha’i IDE, cu˜ng nhu’ SCSI - nhà sa’n xuaˆ´t và soˆ´

maˆ˜u mã.

• Chuoˆ

˙

t:

– loa

˙

i chuoˆ

˙

t (serial, PS/2, hay bus mouse);

– giao thu´’c (Microsoft, Logitech, MouseMan, v.v. . . );

– soˆ

´ nút;

– d¯oˆ

´ i vo´’i chuoˆ

˙

t ca˘´m vào coˆ’ng noˆ

´ i tieˆ´p thì caˆ`n soˆ´ thu´’ tu

˙

’ cu’a coˆ’ng d¯ó.

• Ca

˙

c màn hình

background image

2.2 Phòng xa và nhu

˜’ng lo`’i khuyên

5

– nhà sa’n xuaˆ´t;

– soˆ

´ maˆ˜u mã (hay chipset su’’ du

˙

ng)

– dung lu’o

˙

’ng boˆ

˙

nho´’;

• Màn hình

– nhà sa’n xuaˆ´t

– soˆ

´ maˆ˜u mã;

– các giá tri

˙

gio´’i ha

˙

n (min, max) cu’a taˆ`n soˆ

´ làm mo´’i theo chieˆ`u do

˙

c và theo chieˆ`u

ngang (nhu

˜’ng giá tri

˙

này ba

˙

n d¯o

˙

c chı’ có theˆ’ tìm thaˆ´y trong tài lieˆ

˙

u d¯i kèm vo´’i màn

hình, Windows không hieˆ’n thi

˙

nhu

˜’ng giá tri

˙

này, và chúng raˆ´t quan tro

˙

ng trong

khi caˆ´u hình giao dieˆ

˙

n d¯oˆ` ho

˙

a).

• Neˆ´u nhu’ ba

˙

n d¯o

˙

c muoˆ

´ n keˆ´t noˆ´i ma

˙

ng (mà UNIX nói chung là HD

¯ H dành cho ma

˙

ng),

thì hãy ghi la

˙

i nhu

˜’ng du˜’ lieˆ

˙

u sau:

– nhà sa’n xuaˆ´t và soˆ

´ maˆ˜u mã ca

˙

c ma

˙

ng;

– d¯i

˙

a chı’ IP cu’a mình;

– tên cu’a máy tính trong ma

˙

ng;

– ma˘

˙

t na

˙

ma

˙

ng con (subnet mask);

– d¯i

˙

a chı’ IP cu’a gateway;

– d¯i

˙

a chı’ IP cu’a các máy chu’ tên mieˆ`n (DNS server);

– d¯i

˙

a chı’ IP cu’a máy chu’ WINS(Windows Internet Name Service);

– tên mieˆ`n cu’a công ty ba

˙

n d¯o

˙

c.

• Loa

˙

i và nhà sa’n xuaˆ´t ca

˙

c âm thanh và game controller (neˆ´u nhu’ có)

2.2

Phòng xa và nhu

˜’ng lo`’i khuyên

Tru’o´’c khi cài d¯a˘

˙

t HD

¯ H Linux sau Windows, raˆ

´ t nên thu

˙

’c hieˆ

˙

n vài thao tác "phòng xa" ("phòng

cháy ho’n chu˜’a cháy"). Vì raˆ´t có theˆ’ ba

˙

n d¯o

˙

c se˜ pha’i phân vùng la

˙

i oˆ’ d¯ı˜a, thay d¯oˆ’i ba’n ghi

kho’’i d¯oˆ

˙

ng (Boot Record) và làm vieˆ

˙

c vo´’i các taˆ

˙

p tin kho’’i d¯oˆ

˙

ng cu˜ng nhu’các taˆ

˙

p tin caˆ´u hình.

Các thao tác này không pha’i lúc nào cu˜ng d¯em la

˙

i d¯em la

˙

i moˆ

˙

t keˆ´t qua’ theo ý muoˆ

´ n, và trong

tru’o`’ng ho

˙

’p xaˆ

´ u có theˆ’ máy tính cu’a ba

˙

n d¯o

˙

c se˜ không kho’’i d¯oˆ

˙

ng nu

˜’a. Có bieˆ´t cách thoát ra

kho’i tình huoˆ

´ ng này và phu

˙

c hoˆ`i du˜’lieˆ

˙

u caˆ`n thieˆ´t không d¯ó còn là moˆ

˙

t câu ho’i. Nhu’ng ro’i vào

tình huoˆ

´ ng nhu’ vaˆ

˙

y heˆ´t su´’c deˆ˜ dàng nhaˆ´t là vo´’i ngu’o`’i dùng laˆ`n d¯aˆ`u tiên cài d¯a˘

˙

t Linux. Chính

vì vaˆ

˙

y, d¯aˆ`u tiên, caˆ`n ta

˙

o moˆ

˙

t d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng hay moˆ

˙

t d¯ı˜a meˆ`m giúp phu

˙

c hoˆ`i heˆ

˙

thoˆ

´ ng

(neˆ´u ba

˙

n d¯o

˙

c còn chu’a ta

˙

o). Thu´’ hai, caˆ`n ghi la

˙

i nhu

˜’ng du˜’ lieˆ

˙

u có giá tri

˙

(backup). Và thu´’

ba, chuaˆ’n bi

˙

các taˆ

˙

p tin (d¯ı˜a meˆ`m, CD) cài d¯a˘

˙

t cho heˆ

˙

thoˆ

´ ng cu˜. Moˆ

˙

t lo`’i khuyên quan tro

˙

ng

khác: neˆ´u có gì d¯ó xa’y ra không theo ý muoˆ

´ n thì không nên hoang mang. Xin chia se’ moˆ

˙

t

kinh nghieˆ

˙

m buoˆ`n: khi laˆ`n d¯aˆ`u tiên tác gia’ cài Linux trên máy tính d¯ã có Windows NT, và

keˆ´t qua’ là máy tính không theˆ’ kho’’i d¯oˆ

˙

ng d¯u’o

˙

’c. Không hieˆ’u heˆ

´ t vaˆ´n d¯eˆ` tác gia’ nghı˜ là không

còn cách gì khác ngoài d¯i

˙

nh da

˙

ng la

˙

i oˆ’ d¯ı˜a và cài d¯a˘

˙

t la

˙

i tu`’ d¯aˆ`u. Bây gio`’ thì tác gia’ d¯ã hieˆ’u là

có theˆ’ phu

˙

c hoˆ`i la

˙

i neˆ´u nhu’ không quyeˆ´t d¯i

˙

nh quá voˆ

˙

i vàng. Vì vaˆ

˙

y có theˆ’ nói ra˘`ng Werner

Almesberger d¯úng, khi trong hu’o´’ng daˆ˜n su’’ du

˙

ng LILO có d¯u’a ra nhu˜’ng lo`’i khuyên sau cho

ngu’o`’i dùng khi ro’i vào tru’o`’ng ho

˙

’p khó kha˘n nhu’ vaˆ

˙

y:

background image

6

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

• Không hoa’ng hoˆ

´ t. Neˆ´u nhu’có gì d¯ó không làm vieˆ

˙

c, hãy thu’’mo

˙

i cách d¯eˆ’ tìm ra nguyên

nhân, kieˆ’m tra la

˙

i nhieˆ`u laˆ`n thao tác cu’a mình. Chı’ sau khi d¯ó mo´’i thu

˙

’c hieˆ

˙

n các bu’o´’c

su’’a loˆ˜i.

• Hãy d¯o

˙

c tài lieˆ

˙

u. D

¯ a˘

˙

c bieˆ

˙

t trong các tru’o`’ng ho

˙

’p, khi heˆ

˙

thoˆ

´ ng làm nhu˜’ng gì ba

˙

n d¯o

˙

c

không mong d¯o

˙

’i.

Xin thêm moˆ

˙

t lo`’i khuyên phoˆ’ bieˆ´n sau: * Hãy xem các taˆ

˙

p tin log, tu´’c là các taˆ

˙

p tin ghi

la

˙

i su

˙

’ kieˆ

˙

n cu’a heˆ

˙

thoˆ

´ ng (caˆ`n tìm chúng trong thu’ mu

˙

c

/var/log

).

Nhu’ d¯ã nói o’’ trên, quá trình cài d¯a˘

˙

t HD

¯ H Linux nói riêng không pha’i là d¯eˆ` tài cu’a cuoˆ

´ n

sách. Ngu’o`’i dùng caˆ`n tìm các cuoˆ´n hu’o´’ng daˆ˜n tu’o’ng u´’ng. Tuy nhiên, tác gia’ cu˜ng muoˆ´n d¯u’a
ra vài lo`’i khuyên d¯eˆ’ giúp ngu’o`’i dùng d¯u’a ra quyeˆ´t d¯i

˙

nh trong khi cài d¯a˘

˙

t.

Thu´’ nhaˆ´t, d¯u`’ng voˆ

˙

i vàng và hãy chú ý d¯o

˙

c nhu

˜’ng thông báo se˜ hieˆ’n thi

˙

trên màn hình,

và hãy suy nghı˜ ky˜ khi cho

˙

n câu tra’ lo`’i. D

¯ eˆ’ minh chu´’ng cho lo`’i khuyên này xin d¯u’o

˙

’c keˆ’ la

˙

i

tru’o`’ng ho

˙

’p khi tác gia’ cài Red Hat 7.1, và tu

˙

’ d¯oˆ

˙

ng nhaˆ´n lên nút Next, vì cho ra˘`ng phu’o’ng án

theo ma˘

˙

c d¯i

˙

nh là d¯u’. Keˆ´t qua’ là tác gia’ không theˆ’ truy caˆ

˙

p d¯u’o

˙

’c d¯eˆ

´ n máy này qua các giao

thu´’c ma

˙

ng (telnet, ftp, NFS, Samba), ma˘

˙

c dù d¯ã caˆ´u hình giao dieˆ

˙

n ma

˙

ng cho máy. Nguyên

nhân là trong phu’o’ng án theo ma˘

˙

c d¯i

˙

nh thì tu’o`’ng lu’’a d¯u’o

˙

’c cài d¯a˘

˙

t, và tu’o`’ng lu’’a d¯óng heˆ´t các

truy caˆ

˙

p tu`’ ma

˙

ng. D

¯ eˆ’ mo’’ truy caˆ

˙

p này, thì trong quá trình cài d¯a˘

˙

t caˆ`n chı’ rõ các di

˙

ch vu

˙

d¯u’o

˙

’c

mo’’. Nhu’ng chúng ta quá voˆ

˙

i vàng! Thu´’ hai, tác gia’ khuyên không nên d¯oˆ`ng ý vo´’i vieˆ

˙

c tu

˙

d¯oˆ

˙

ng kho’’i d¯oˆ

˙

ng vào giao dieˆ

˙

n d¯oˆ` ho

˙

a. Vì cuoˆ

´ i cùng ngu’o`’i dùng không khó kha˘n gì khi gõ

câu leˆ

˙

nh

startx

, còn vieˆ

˙

c caˆ´u hình giao dieˆ

˙

n d¯oˆ` ho

˙

a (neˆ´u có gì d¯ó làm vieˆ

˙

c không d¯úng)

vo´’i ngu’o`’i dùng mo´’i raˆ´t khó thành công.

Sau khi làm xong các công vieˆ

˙

c phòng xa, caˆ`n quyeˆ´t d¯i

˙

nh se˜ toˆ’ chu´’c kho’’i d¯oˆ

˙

ng nhieˆ`u

HD

¯ H nhu’ theˆ

´ nào, chuaˆ’n bi

˙

các oˆ’ d¯ı˜a (phân vùng) d¯eˆ’ cài d¯a˘

˙

t, tu´’c là caˆ`n chia oˆ’ d¯ı˜a thành soˆ´

phân vùng caˆ`n thieˆ´t. Nhu’ng tru’o´’c khi chuyeˆ’n sang các bu’o´’c cu

˙

theˆ’ d¯eˆ’ chuaˆ’n bi

˙

oˆ’ d¯ı˜a, xin

d¯u’o

˙

’c nói qua moˆ

˙

t chút veˆ` caˆ´u trúc cu’a d¯ı˜a và quá trình kho’’i d¯oˆ

˙

ng HD

¯ H. Neˆ

´ u ai d¯ó không d¯u’

kiên nhaˆ˜n d¯eˆ’ d¯o

˙

c phaˆ`n lý thuyeˆ´t này, thì có theˆ’ bo’ qua chúng và chuyeˆ’n tha˘’ng d¯eˆ´n vaˆ´n d¯eˆ`

cho

˙

n chu’o’ng trình kho’’i d¯oˆ

˙

ng.

2.3

Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ

˙

ng

2.3.1

Theˆ

´ nào là caˆ´u trúc "hình ho

˙

c cu’a d¯ı˜a"

Nhu’ ba

˙

n d¯o

˙

c bieˆ´t, d¯ı˜a cu´’ng goˆ`m vài d¯ı˜a có phu’ lo´’p tu`’ tính, na˘`m trên cùng moˆ

˙

t tru

˙

c và quay

vo´’i vaˆ

˙

n toˆ

´ c lo´’n. D

¯ o

˙

c/Ghi du

˜’ lieˆ

˙

u d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n bo’’i các d¯aˆ`u d¯o

˙

c na˘`m giu

˜’a các d¯ı˜a này, di

chuyeˆ’n tu`’ tâm d¯ı˜a ra rìa ngoài cu’a d¯ı˜a. Vòng tròn d¯aˆ`u d¯o

˙

c ve˜ ra trên các d¯ı˜a khi quay quanh

chúng go

˙

i là rãnh (track), còn taˆ

˙

p ho

˙

’p các rãnh na˘`m choˆ`ng lên nhau go

˙

i là cylinder. Moˆ˜i

rãnh la

˙

i chia thành các sector, và có theˆ’ ghi vào moˆ˜i sector 512 byte thông tin. Vì theˆ´ d¯a˘

˙

c

d¯ieˆ’m cu’a moˆ

˙

t oˆ’ d¯ı˜a thu’o`’ng là taˆ

˙

p ho

˙

’p ba sô: soˆ

´ cylinder/soˆ´ rãnh trong cylinder/soˆ´ sector trên

rãnh hay còn vieˆ´t ta˘´t là C/H/S (ba chu˜’ cái d¯aˆ`u tiên cu’a các thuaˆ

˙

t ngu

˜’ Tieˆ´ng Anh tu’o’ng u´’ng:

Cyliner/Head/Sector). Ba soˆ

´ này go

˙

i là caˆ´u trúc "hình ho

˙

c cu’a d¯ı˜a". D

¯ ı˜a vo´’i caˆ

´ u trúc hình ho

˙

c

C/H/S có dung lu’o

˙

’ng C*H*S*512 byte.

D

¯ ı˜a cu´’ng là các thieˆ

´ t bi

˙

khoˆ

´ i, tu´’ là d¯o

˙

c và ghi thông tin theo các khoˆ

´ i, và kích thu’o´’c nho’

nhaˆ´t cu’a khoˆ

´ i ba˘`ng moˆ

˙

t sector (512 byte). D

¯ eˆ’ có theˆ’ ghi thông tin lên d¯ı˜a, caˆ`n d¯a˘

˙

t d¯aˆ`u d¯ı˜a

d¯úng vi

˙

trí, tu´’c là chı’ cho controller bieˆ´t caˆ`n ghi thông tin này vào sector nào. Sector d¯u’o

˙

’c

d¯ánh d¯i

˙

a chı’ theo soˆ

´ thu´’tu

˙

’ cylinder, soˆ

´ thu´’tu

˙

’ d¯aˆ`u d¯o

˙

c (hay rãnh) và soˆ

´ thu´’tu

˙

’ sector trên rãnh.

background image

2.3 Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ

˙

ng

7

2.3.2

Phân vùng và ba’ng phân vùng cu’a d¯ı˜a

Trong các heˆ

˙

thoˆ

´ ng Intel oˆ’ d¯ı˜a thu’o`’ng d¯u’o

˙

’c chia thành các phân vùng. Raˆ

´ t có theˆ’ nguyên

nhân cu’a vieˆ

˙

c phân vùng là nguyên nhân li

˙

ch su’’: các phiên ba’n MS-DOS d¯aˆ`u tiên không theˆ’

su’’ du

˙

ng d¯u’o

˙

’c các d¯ı˜a lo´’n, mà dung lu’o

˙

’ng d¯ı˜a la

˙

i phát trieˆ’n nhanh ho’n kha’ na˘ng cu’a DOS.

Khi d¯ó d¯ã nghı˜ ra vieˆ

˙

c chia oˆ’ d¯ı˜a thành các phân vùng. D

¯ eˆ’ làm d¯u’o

˙

’c d¯ieˆ`u này, trong sector

soˆ

´ 0 cu’a d¯ı˜a (sector soˆ´ 0 cu’a rãnh d¯aˆ`u tiên trong cylinder soˆ´ 0) ghi nho´’ ba’ng chia oˆ’ d¯ı˜a thành

các phân vùng (partition table). Moˆ˜i phân vùng d¯u’o

˙

’c dùng nhu’ moˆ

˙

t d¯ı˜a vaˆ

˙

t lý riêng re˜. Moˆ

˙

t

tru’o`’ng ho

˙

’p nói riêng d¯ó là trong các phân vùng khác nhau có theˆ’ cài d¯a˘

˙

t các heˆ

˙

d¯ieˆ`u hành

khác nhau.

Ba’ng phân vùng chu´’a 4 ba’n ghi 16 byte cho 4 phân vùng chính. Moˆ˜i ba’n ghi có caˆ´u trúc

nhu’ sau:

kênh giao tác

struct partition {

char active;

/* 0x80: phân vùng kích hoa

˙

t, 0: không kích hoa

˙

t */

char begin[3];

/* CHS sector d

¯a

ˆ

`u tiên, 24 bit

char type;

/* loa

˙

i phân vùng (ví du

˙

, 83 — LINUX_NATIVE, 82 — LINUX_SWAP) */

char end[3];

/* CHS sector cuo

ˆ

´ i cùng, 24 bit */

int start;

/* so

ˆ

´ cu

’a sector d¯a

ˆ

`u tiên (32-bit, tính tu

`’ 0) */

int length;

/* so

ˆ

´ sector có trong phân vùng (32 bit) */

};

Ba’ng phân vùng d¯ı˜a thu’o`’ng d¯u’o

˙

’c ta

˙

o bo’’i chu’o’ng trình

fdisk

. Trên HD

¯ H Linux ngoài

chu’o’ng trình

fdisk

"truyeˆ`n thoˆ

´ ng" (tuy vaˆ

˙

y raˆ´t khác so vo´’i chu’o’ng trình fdisk trong MS-DOS

và Windows), còn có hai chu’o’ng trình d¯eˆ’ làm vieˆ

˙

c vo´’i phân vùng d¯ı˜a:

cfdisk

sfdisk

.

Chu’o’ng trình

cfdisk

, gioˆ

´ ng nhu’

fdisk

chı’ dành d¯eˆ’ làm vieˆ

˙

c vo´’i ba’ng phân vùng d¯ı˜a: nó

không quan tâm chú ý d¯eˆ´n thông tin có trên d¯ı˜a. Chı’ khác bieˆ

˙

t vo´’i

fdisk

o’’ giao dieˆ

˙

n thuaˆ

˙

n

tieˆ

˙

n: chı’ daˆ˜n su’’du

˙

ng leˆ

˙

nh và heˆ

˙

thoˆ

´ ng trình d¯o’n (thu

˙

’c d¯o’n). Chu’o’ng trình

sfdisk

có vài kha’

na˘ng cao ho’n, ví du

˙

, cho phép thao tác trên các phân vùng d¯ã có cu’a d¯ı˜a.

DOS su’’du

˙

ng tru’o`’ng begin và end cu’a ba’ng phân vùng và Interrupt 13 cu’a BIOS (Int 13h)

d¯eˆ’ truy caˆ

˙

p to´’i d¯ı˜a, vì theˆ´ không theˆ’ su’’ du

˙

ng d¯ı˜a có dung lu’o

˙

’ng lo´’n ho’n 8,4 Gbyte, ngay ca’

vo´’i các BIOS mo´’i (veˆ` vaˆ´n d¯eˆ` này se˜ nói d¯eˆ´n o’’ sau), còn phân vùng thì không theˆ’ lo´’n ho’n 2,1
Gbyte (nhu’ng d¯ây là do ha

˙

n cheˆ´ cu’a heˆ

˙

thoˆ

´ ng taˆ

˙

p tin FAT16).

Linux thì chı’ su’’ du

˙

ng tru’o`’ng start và length cu’a ba’ng phân vùng d¯ı˜a và hoˆ˜ tro

˙

’ các phân

vùng chu´’a d¯eˆ´n 232 sector, tu´’c là dung lu’o

˙

’ng có theˆ’ d¯a

˙

t 2 Tbyte

Vì trong ba’ng chia oˆ’ d¯ı˜a chı’ có 4 dòng cho các phân vùng, soˆ

´ phân vùng chính trên d¯ı˜a

ngay tu`’ d¯aˆ`u dã ha

˙

n cheˆ´: không theˆ’ lo´’n ho’n 4. Khi mà 4 phân vùng tro’’ thành ít, thì ngu’o`’i ta

sáng cheˆ´ ra phân vùng lôgíc. Moˆ

˙

t trong soˆ

´ các phân vùng chính tro’’ thành mo’’ roˆ

˙

ng (loa

˙

i phân

vùng - 5 hay F hay 85 trong heˆ

˙

co’ soˆ´ mu’o`’i sáu). Và trong phân vùng mo’’ roˆ

˙

ng ngu’o`’i ta ta

˙

o ra

các phân vùng lôgíc. Phân vùng mo’’ roˆ

˙

ng không d¯u’o

˙

’c su’’ du

˙

ng tru

˙

’c tieˆ

´ p mà chı’ dùng d¯eˆ’ ghi

các phân vùng lôgíc. Sector d¯aˆ`u tiên cu’a phân vùng mo’’ roˆ

˙

ng ghi nho´’ ba’ng phân vùng vo´’i

boˆ

´ n d¯aˆ`u vào: moˆ

˙

t dùng cho phân vùng lôgíc, moˆ

˙

t cho phân vùng mo’’ roˆ

˙

ng khác, còn hai cái

còn la

˙

i không d¯u’o

˙

’c su’’ du

˙

ng. Moˆ˜i phân vùng mo’’ roˆ

˙

ng có moˆ

˙

t ba’ng chia cu’a mình, trong ba’ng

này, cu˜ng gioˆ

´ ng nhu’ trong phân vùng mo’’ roˆ

˙

ng chính, chı’ su’’ du

˙

ng có hai dòng d¯eˆ’ d¯u’a ra moˆ

˙

t

phân vùng lôgíc và moˆ

˙

t phân vùng mo’’ roˆ

˙

ng. Nhu’ vaˆ

˙

y, thu d¯u’o

˙

’c moˆ

˙

t chuoˆ˜i các ma˘´t xích tu`’

ba’ng phân vùng, ma˘´t xích d¯aˆ`u tiên mô ta’ ba phân vùng chính, và moˆ˜i ma˘´t xích tieˆ´p theo –
moˆ

˙

t phân vùng lôgíc và vi

˙

trí cu’a ba’ng tieˆ´p theo.

Chu’o’ng trình

sfdisk

trên Linux cho thaˆ´y toàn boˆ

˙

chuoˆ˜i này:

background image

8

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

kênh giao tác

[root]# sfdisk -l -x /dev/hda

Disk /dev/hda: 784 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

Device

Boot

Start

End

#cyls

#blocks

Id

System

/dev/hda1

*

0+

189

190-

1526143+

6

FAT16

/dev/hda2

190

783

594

4771305

5

Extended

/dev/hda3

0

0

0

0

Empty

/dev/hda4

0

0

0

0

Empty

/dev/hda5

190+

380

191-

1534176

6

FAT16

381

783

403

3237097+

5

Extended

190

189

0

0

0

Empty

190

189

0

0

0

Empty

/dev/hda6

381+

783

403-

3237066

7

HPFS/NTFS

381

380

0

0

0

Empty

381

380

0

0

0

Empty

381

380

0

0

0

Empty

Soˆ

´ phân vùng lôgíc theo nguyên ta˘´c không ha

˙

n cheˆ´, vì moˆ˜i phân vùng lôgíc có theˆ’ chu´’a

ba’ng phân vùng và các phân vùng lôgíc cu’a mình. Tuy nhiên trên thu

˙

’c theˆ

´ vaˆ˜n có nhu˜’ng ha

˙

n

cheˆ´. Ví du

˙

, Linux không theˆ’ làm vieˆ

˙

c vo´’i ho’n 15 phân vùng trên các d¯ı˜a SCSI và ho’n 63 phân

vùng trên d¯ı˜a IDE.

Phân vùng mo’’ roˆ

˙

ng trên moˆ

˙

t d¯ı˜a vaˆ

˙

t lý, hay trong moˆ

˙

t phân vùng mo’’ roˆ

˙

ng chu´’a nó (có

theˆ’ go

˙

i là "me

˙

") chı’ có theˆ’ làm moˆ

˙

t: không moˆ

˙

t chu’o’ng trình phân chia oˆ’ d¯ı˜a nào trong soˆ´ d¯ã

có (

fdisk

và tu’o’ng tu

˙

’) có theˆ’ ta

˙

o thêm moˆ

˙

t phân vùng mo’’ roˆ

˙

ng thu´’ hai.

O

ˆ’ d¯ı˜a trên Linux nói riêng (oˆ’ d¯ı˜a vaˆ

˙

t lý) d¯u’o

˙

’c truy caˆ

˙

p qua tên cu’a thieˆ´t bi

˙

:

/dev/hda

,

/dev/hdb

,

/dev/sda

, v.v. . . Các phân vùng chính có thêm soˆ

´ 1-4 trong tên thieˆ´t bi

˙

:

/dev/hda1

,

/dev/hda2

,

/dev/hda3

, còn phân vùng lôgíc thì có các tên:

/dev/hda5, /dev/hda6, /dev/hda7

. . . (ba˘´t d¯aˆ`u tu`’ soˆ´ 5). Tu`’ nhu˜’ng gì d¯eˆ` caˆ

˙

p d¯eˆ´n o’’ trên có theˆ’ suy ra ta

˙

i sao la

˙

i có theˆ’ bo’ qua các

tên nhu’

/dev/hda3

hay

/dev/hda4

(d¯o’n gia’n là phân vùng chính thu´’ ba và thu´’ tu’ không

d¯u’o

˙

’c ta

˙

o ra) và ngay sau

/dev/hda2

ba

˙

n d¯o

˙

c thaˆ´y

/dev/hda5

(phân vùng lôgíc trong phân

vùng mo’’ roˆ

˙

ng

/dev/hda2

), và sau d¯ó thì vieˆ

˙

c d¯ánh soˆ

´ la

˙

i theo thu´’ tu

˙

’ thông thu’o`’ng.

Trong Windows các phân vùng lôgíc nhaˆ

˙

n d¯u’o

˙

’c tên (chu

˜’ cái), ba˘´t d¯aˆ`u tu`’ chu˜’ cái cuoˆ

´ i

dùng dành cho phân vùng chính. Ví du

˙

neˆ´u moˆ

˙

t d¯ı˜a cu´’ng có hai phân vùng chính (C: và D:)

và moˆ

˙

t phân vùng mo’’ roˆ

˙

ng, trong phân vùng mo’’ roˆ

˙

ng ta

˙

o ra hai phân vùng lôgíc, thì nhu

˜’ng

phân vùng lôgíc này se˜ d¯u’o

˙

’c d¯a˘

˙

t tên E: và F:. Xin nói thêm, trong Windows NT và 2000/XP

có theˆ’ thay d¯oˆ’i tên cu’a các phân vùng d¯ı˜a.

2.3.3

Quá trình kho’’i d¯oˆ

˙

ng HD

¯ H công ty Microsoft

Dù heˆ

˙

d¯ieˆ`u hành có là gì, thì d¯eˆ’ có theˆ’ ba˘´t d¯aˆ`u d¯ieˆ`u khieˆ’n máy tính, caˆ`n na

˙

p HD

¯ H vào boˆ

˙

nho´’. Vì theˆ´ hãy xem xét qua quá trình kho’’i d¯oˆ

˙

ng cu’a các HD

¯ H khác nhau. Chúng ta chı’ quan

tâm d¯eˆ´n vieˆ

˙

c kho’’i d¯oˆ

˙

ng tu`’ oˆ’ d¯ı˜a cu´’ng, nên se˜ không xem xét d¯eˆ´n vieˆ

˙

c kho’’i d¯oˆ

˙

ng tu`’ d¯ı˜a meˆ`m,

CD-ROM và qua ma

˙

ng. Hãy ba˘´t d¯aˆ`u tu`’ MS-DOS và MS Windows cu˜ (xin d¯u`’ng quên ra˘`ng,

vieˆ

˙

c phát trieˆ’n và hoàn thieˆ

˙

n máy tính cá nhân song song vo´’i su

˙

’ phát trieˆ’n cu’a HD

¯ H cu’a

Microsoft và nhu

˜’ng quyeˆ´t d¯i

˙

nh su’’ du

˙

ng trong các HD

¯ H này có a’nh hu’o’’ng ma

˙

nh d¯eˆ´n quyeˆ´t

d¯i

˙

nh cu’a các nhà phát trieˆ’n thieˆ´t bi

˙

).

background image

2.3 Phân vùng trên d¯ı˜a và quá trình kho’’i d¯oˆ

˙

ng

9

Nhu’ ba

˙

n d¯o

˙

c bieˆ´t, khi baˆ

˙

t máy tính d¯aˆ`u tiên se˜ cha

˙

y chu’o’ng trình POST (Power On Self

Test). Chu’o’ng trình xác d¯i

˙

nh dung lu’o

˙

’ng boˆ

˙

nho´’, thu’’ nghieˆ

˙

m boˆ

˙

nho´’, và xác d¯i

˙

nh các thành

phaˆ`n khác (bàn phím, oˆ’ cu´’ng. . . ), kho’’i d¯oˆ

˙

ng các the’ adaptor. Trên màn hình thu’o`’ng xuaˆ´t hieˆ

˙

n

các thông báo veˆ` dung lu’o

˙

’ng boˆ

˙

nho´’, veˆ` vieˆ

˙

c thu’’ nghieˆ

˙

m boˆ

˙

nho´’, danh sách các thieˆ´t bi

˙

nhaˆ

˙

n

ra (oˆ’ d¯ı˜a cu´’ng và meˆ`m, boˆ

˙

xu’’ lý, coˆ’ng COM và v.v. . . ).

Sau khi hoàn thành vieˆ

˙

c thu’’nghieˆ

˙

m POST go

˙

i Int 19h. Công vieˆ

˙

c cu’a Int 19h là tìm thieˆ´t

bi

˙

kho’’i d¯oˆ

˙

ng. Vieˆ

˙

c tìm kieˆ´m thu

˙

’c hieˆ

˙

n theo thu´’ tu

˙

’ xác d¯i

˙

nh trong Setup BIOS và theo cách

tha˘m dò sector soˆ

´ 0 cu’a các thieˆ´t bi

˙

tu’o’ng u´’ng. Neˆ´u d¯ı˜a có theˆ’ kho’’i d¯oˆ

˙

ng, thì trong sector soˆ

´

0 cu’a d¯ı˜a có ba’n ghi kho’’i d¯oˆ

˙

ng chính – Master Boot Record (MBR). Hai byte cuoˆ

´ i cùng cu’a

MBR – "soˆ´ màu nhieˆ

˙

m", là daˆ´u hieˆ

˙

u cho bieˆ´t sector có MBR, và theo d¯ó d¯ı˜a có theˆ’ kho’’i d¯oˆ

˙

ng.

Ngoài "soˆ

´ màu nhieˆ

˙

m" MBR còn chu´’a ba’ng phân vùng d¯ı˜a d¯ã nói o’’ trên, và moˆ

˙

t chu’o’ng trình

nho’ – trình kho’’i d¯oˆ

˙

ng chính, kích thu’o´’c chı’ có 446 (0x1BE) byte.

Ba’ng

2.1

cho thaˆ´y caˆ´u trúc cu’a sector kho’’i d¯oˆ

˙

ng chính sau khi cài d¯a˘

˙

t Windows.

Ba’ng 2.1: Caˆ´u trúc cu’a sector kho’’i d¯oˆ

˙

ng chính

Di

˙

ch chuyeˆ’n

Noˆ

˙

i dung

0x000

Mã cu’a trình kho’’i d¯oˆ

˙

ng chính

0x1BE

Ba’ng phân vùng oˆ’ d¯ı˜a

0x1FE

"Soˆ

´ màu nhieˆ

˙

m" (0xAA55)

MS-DOS, Windows95 và NT ghi nho´’ DOS MBR trong khi cài d¯a˘

˙

t. Ngoài ra cu˜ng có theˆ’

ta

˙

o MBR cu’a MS vo´’i câu leˆ

˙

nh DOS sau:

fdisk /mbr

.

Xin tro’’ la

˙

i vo´’i quá trình kho’’i d¯oˆ

˙

ng. Int 19h cu’a BIOS na

˙

p trình kho’’i d¯oˆ

˙

ng chính vào boˆ

˙

nho´’ máy tính và chuyeˆ’n quyeˆ`n d¯ieˆ`u khieˆ’n cho chu’o’ng trình này. Nhu’ng chu’o’ng trình "bé
nho’" này không d¯u’ kha’ na˘ng kho’’i d¯oˆ

˙

ng HD

¯ H; taˆ

´ t ca’ nhu˜’ng gì mà nó có theˆ’ làm – d¯ó là na

˙

p

vào boˆ

˙

nho´’ chu’o’ng trình ma

˙

nh ho’n – trình kho’’i d¯oˆ

˙

ng thu´’ hai.

D

¯ eˆ’ làm d¯u’o

˙

’c d¯ieˆ`u này, nó tìm trong ba’ng phân vùng kích hoa

˙

t và d¯o

˙

c vào boˆ

˙

nho´’ trình

kho’’i d¯oˆ

˙

ng thu´’ hai, ba˘´t d¯aˆ`u tu`’ sector lôgíc d¯aˆ`u tiên cu’a phân vùng kích hoa

˙

t. Hãy chú ý d¯eˆ´n

cu

˙

m tu`’ "ba˘´t d¯aˆ`u tu`’". Vì trình kho’’i d¯oˆ

˙

ng thu´’ hai trên các heˆ

˙

thoˆ

´ ng khác nhau có d¯oˆ

˙

dài khác

nhau.

Trong phân vùng d¯u’o

˙

’c d¯i

˙

nh da

˙

ng du’o´’i heˆ

˙

thoˆ

´ ng taˆ

˙

p tin FAT, trình kho’’i d¯oˆ

˙

ng thu´’hai chieˆ´m

moˆ

˙

t sector (512 byte). Trong phân vùng d¯i

˙

nh da

˙

ng du’o´’i heˆ

˙

thoˆ

´ ng taˆ

˙

p tin NTFS, trình kho’’i

d¯oˆ

˙

ng thu´’ hai chieˆ´m vài sector.

Trình kho’’i d¯oˆ

˙

ng thu´’ hai na

˙

p lo´’p chu’o’ng trình d¯aˆ`u tiên, caˆ`n thieˆ´t cho vieˆ

˙

c kho’’i d¯oˆ

˙

ng heˆ

˙

d¯ieˆ`u hành. Trong tru’o`’ng ho

˙

’p MS DOS chu’o’ng trình kho’’i d¯oˆ

˙

ng d¯oˆ

˙

ng na

˙

p IO.SYS theo d¯i

˙

a chı’

700h, sau d¯ó MSDOS.SYS và chuyeˆ’n quyeˆ`n d¯ieˆ`u khieˆ’n cho SYSINIT cu’a môd¯un IO.SYS.

Neˆ´u vì lý do nào d¯ó không tìm thaˆ´y trên d¯ı˜a phân vùng kích hoa

˙

t, thì quá trình kho’’ d¯oˆ

˙

ng

se˜ tieˆ´p tu

˙

c vo´’i vieˆ

˙

c xu’’ lý Int 18h. Tru’o`’ng ho

˙

’p này trên thu

˙

’c teˆ

´ raˆ´t hieˆ´m khi su’’ du

˙

ng, nhu’ng

kha’ na˘ng này có theˆ’ có ích trong tru’o`’ng ho

˙

’p nào d¯ó. Trong khi kho’’i d¯oˆ

˙

ng tu`’ xa, khi heˆ

˙

d¯ieˆ`u

hành kho’’i d¯oˆ

˙

ng tu`’ máy chu’, thì Int này d¯u’o

˙

’c POST chuyeˆ’n hu’o´’ng lên ROM cu’a ca

˙

c ma

˙

ng.

D

¯ oˆ

´ i vo´’i các HD

¯ H khác cu’a Microsoft thì quá trình kho’’i d¯oˆ

˙

ng dieˆ˜n ra tu’o’ng tu

˙

’.

• Windows95 kho’’i d¯oˆ

˙

ng gioˆ

´ ng nhu’ DOS nhu’ng thay theˆ´ IO.SYS và MSDOS.SYS bo’’i

các taˆ

˙

p tin cu’a mình. Các taˆ

˙

p tin DOS d¯u’o

˙

’c giu

˜’ la

˙

i du’o´’i các tên tu’o’ng u´’ng IO.DOS và

MSDOS.DOS. Khi ba

˙

n d¯o

˙

c cho

˙

n kho’’i d¯oˆ

˙

ng DOS, Windows95 se˜ d¯oˆ’i tên các taˆ

˙

p tin

cu’a mình vo´’i phaˆ`n mo’’ roˆ

˙

ng w40 và phu

˙

c hoˆ`i tên ban d¯aˆ`u cu’a các taˆ

˙

p tin heˆ

˙

thoˆ

´ ng cu’a

DOS. Quá trình kho’’i d¯oˆ

˙

ng tieˆ´p tu

˙

c vo´’i vieˆ

˙

c na

˙

p IO.SYS. Nhu’theˆ´, sector kho’’i d¯oˆ

˙

ng cu’a

DOS và Windows95 là nhu’ nhau.

background image

10

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

• Windows NT4 su’’ du

˙

ng MBR DOS, nhu’ng thay theˆ´ ba’n ghi kho’’i d¯oˆ

˙

ng cu’a phân vùng

kích hoa

˙

t ba˘`ng cách thay theˆ´ NTLDR vào choˆ˜ IO.SYS. D

¯ ây là moˆ

˙

t chu’o’ng trình ma

˙

ng

và có theˆ’ làm d¯u’o

˙

’c nhieˆ`u thu´’. Ví du

˙

, có theˆ’ tìm taˆ

˙

p tin boot.ini và neˆ´u nhu’ tham soˆ´

timeout lo´’n ho’n 0, thì d¯u’a ra trình d¯o’n (thu

˙

’c d¯o’n) kho’’i d¯oˆ

˙

ng.

Moˆ˜i dòng cu’a phaˆ`n

[operating systems]

trong taˆ

˙

p tin boot.ini xác d¯i

˙

nh moˆ

˙

t

phu’o’ng án (moˆ

˙

t HD

¯ H) kho’’i d¯oˆ

˙

ng và d¯u’o

˙

’c vieˆ

´ t theo maˆ˜u sau:

d

¯i

˙

a_chı

’_trình_kho

’’i_d¯o

ˆ

˙

ng_thu

´’_hai="tên_go

˙

i_cu

’a_phu’o’ng_án"

D

¯ i

˙

a chı’ cu’a trình kho’’i d¯oˆ

˙

ng thu´’ hai có theˆ’ là moˆ

˙

t phân vùng cu

˙

theˆ’ nào d¯ó cu’a d¯ı˜a cu˜ng

nhu’ taˆ

˙

p tin kho’’i d¯oˆ

˙

ng. Du’o´’i d¯ây là moˆ

˙

t ví du

˙

taˆ

˙

p tin boot.ini:

[operating systems]

multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIETNAM"

multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4.00 VIETNAM [VGA mode]" /basevideo /sos

C:\="Microsoft Windows"

C:\BOOTSECT.LNX="Linux"

Neˆ´u ngu’o`’i dùng cho

˙

n NT, thì se˜ kho’’i d¯oˆ

˙

ng theo d¯i

˙

a chı’ phân vùng d¯u’o

˙

’c chı’ trên dòng d¯aˆ`u

tiên. Trên dòng tu’o’ng u´’ng vo´’i phu’o’ng án Microsoft Windows, chı’ d¯u’a ra "C:\", vì tên cu’a
taˆ

˙

p tin kho’’i d¯oˆ

˙

ng d¯u’o

˙

’c laˆ

´ y theo ma˘

˙

c d¯i

˙

nh: bootsect.dos. Taˆ

˙

p tin d¯u’o

˙

’c na

˙

p vào boˆ

˙

nho´’ và quá

trình kho’’i d¯oˆ

˙

ng d¯u’o

˙

’c tieˆ

´ p tu

˙

c gioˆ

´ ng nhu’khi ba’n ghi kho’’i d¯oˆ

˙

ng d¯u’o

˙

’c na

˙

p bo’’i mã chu’o’ng trình

tu`’ MBR.

D

¯ oˆ

´ i vo´’i vieˆ

˙

c kho’’i d¯oˆ

˙

ng các heˆ

˙

thoˆ

´ ng khác, có theˆ’ su’’ du

˙

ng cách d¯ó. Chı’ caˆ`n thêm vào

boot.ini các dòng chu´’a liên keˆ´t d¯eˆ´n taˆ

˙

p tin kho’’i d¯oˆ

˙

ng khác. Khi cho

˙

n các dòng này se˜ kho’’i

d¯oˆ

˙

ng HD

¯ H tu’o’ng u´’ng. Trong ví du

˙

trên Linux cu˜ng d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng theo các này. Trong taˆ

˙

p

tin C:\BOOTSECT.LNX caˆ`n ghi noˆ

˙

i dung cu’a ba’n ghi kho’’i d¯oˆ

˙

ng, ta

˙

o bo’’i Linux (nói d¯úng

ho’n – LILO, trình kho’’i d¯oˆ

˙

ng tiêu chuaˆ’n cu’a Linux).

2.3.4

Vaˆ

´ n d¯eˆ` vo´’i các d¯ı˜a lo´’n

Trên MS-DOS và các phiên ba’n d¯aˆ`u tiên cu’a Windows truy caˆ

˙

p to´’i d¯ı˜a (trong d¯ó có ca’ bu’o´’c

kho’’i d¯oˆ

˙

ng d¯aˆ`u tiên cu’a HD

¯ H) d¯u’o

˙

’c toˆ’ chu´’c qua Int 13 (Int 13h) cu’a BIOS. Khi này su’’ du

˙

ng

su

˙

’ d¯ánh d¯i

˙

a chı’ sector trên d¯ı˜a trên co’ so’’ C/H/S (xem trên). Chính xác ho’n:

• AH — cho

˙

n thao tác;

• CH — 8 bit nho’ ho’n cu’a soˆ´ cylinder;

• CL — 7-6 bit tu’o’ng u´’ng bit lo´’n cu’a soˆ´ cylinder, 5-0 tu’o’ng u´’ng soˆ´ sector;

• DH — soˆ

´ cu’a d¯aˆ`u d¯o

˙

c;

• DL — soˆ

´ cu’a d¯ı˜a(80h hay 81h).

(Caˆ`n lu’u ý ra˘`ng vieˆ

˙

c d¯ánh soˆ

´ cylinder vaˆ

˙

t lý và rãnh thu’o`’ng ba˘´t d¯aˆ`u tu`’ 0, còn sector trên

rãnh d¯ánh soˆ

´ ba˘´t d¯aˆ`u tu`’ 1). Tuy nhiên trên thu

˙

’c teˆ

´ soˆ´ d¯aˆ`u d¯o

˙

c không quá 16, còn soˆ

´ sector

trên rãnh – không quá 63, và dù có dùng 10 bit d¯eˆ’ chı’ ra cylinder, BIOS vaˆ˜n không theˆ’ làm
vieˆ

˙

c vo´’i d¯ı˜a dung lu’o

˙

’ng lo´’n ho’n 1024*63*16*512 = 528 Mbyte.

D

¯ eˆ’ vu’o

˙

’t qua ha

˙

n cheˆ´ này, ngu’o`’i ta áp du

˙

ng nhieˆ`u cách "láu cá" khác nhau. Ví du

˙

, Extended

CHS (ECHS) hay "Large disk support" (d¯ôi khi còn go

˙

i là "Large") su’’du

˙

ng ba bit chu’a dùng

background image

2.4 Lu

˙

’a cho

˙

n trình kho’’i d¯oˆ

˙

ng

11

d¯eˆ´n cu’a soˆ

´ thu´’ tu

˙

’ d¯aˆ`u d¯o

˙

c d¯eˆ’ ta˘ng soˆ

´ cylinder. Cách này cho pehsp su’’ du

˙

ng caˆ´u trúc "hình

ho

˙

c gia’ ma

˙

o cu’a d¯ı˜a" vo´’i 1024 cylinder, 128 d¯aˆ`u d¯o

˙

c và 63 sector/rãnh. Bieˆ´n d¯oˆ’i Extended

CHS thành d¯i

˙

a chı’ CHS thu

˙

’c (có theˆ’ chu´’a d¯eˆ

´ n 8192 cylinder) d¯u’o

˙

’c BIOS thu

˙

’c hieˆ

˙

n. Cách này

cho phép làm vieˆ

˙

c vo´’i d¯ı˜a có dung lu’o

˙

’ng d¯eˆ

´ n 8192*16*63*512 = 4 227 858 432 byte hay 4,2

Gbyte.

Nhu’ng các nhà phát trieˆ’n càng ngày càng ta˘ng maˆ

˙

t d¯oˆ

˙

ghi cu’a d¯ı˜a, soˆ

´ d¯ı˜a và soˆ´ rãnh, và

còn phát minh ra các phu’o’ng pháp khác d¯eˆ’ ta˘ng dung lu’o

˙

’ng d¯ı˜a. Ví du

˙

, soˆ

´ sector trên rãnh

không còn coˆ

´ d¯i

˙

nh mà tro’’ thành khác nhau trên các rãnh khác nhau (trên các rãnh na˘`m gaˆ`n

rìa ngoài cu’a d¯ı˜a, dài ho’n, soˆ´ sector d¯u’o

˙

’c ta˘ng lên). Keˆ

´ t qua’ là boˆ

˙

ba soˆ

´ C/H/S không còn

pha’n ánh d¯úng caˆ´u trúc "hình ho

˙

c cu’a d¯ı˜a", và các phiên ba’n BIOS cu˜ không theˆ’ hoˆ˜ tro

˙

’ truy

caˆ

˙

p to´’i toàn boˆ

˙

không gian d¯ı˜a.

Khi d¯ó ngu’o`’i ta nghı˜ ra phu’o’ng pháp khác d¯eˆ’ làm vieˆ

˙

c vo´’i các d¯ı˜a lên qua Int 13h - d¯ánh

d¯i

˙

a chı’ các khoˆ´i theo d¯u’o`’ng tha˘’ng ("Linear Block Addressing" hay LBA). Không d¯i sâu vào

chi tieˆ´t, có theˆ’ nói ra˘`ng taˆ´t ca’ sector trên d¯ı˜a d¯u’o

˙

’c d¯ánh soˆ

´ moˆ

˙

t cách tuaˆ`n tu

˙

’, ba˘´t d¯aˆ`u tu`’ sector

d¯aˆ`u tiên trên rãnh soˆ

´ 0 cu’a cylinder soˆ´ 0. Thay vào choˆ˜ d¯i

˙

a chı’ CHS moˆ˜i sector nhaˆ

˙

n d¯u’o

˙

’c

moˆ

˙

t d¯i

˙

a chı’ lôgíc – soˆ

´ thu´’ tu

˙

’ cu’a sector trong toˆ’ng soˆ

´ taˆ´t ca’ sector. Vieˆ

˙

c d¯ánh soˆ

´ sector lôgíc

ba˘´t d¯aˆ`u tu`’ 0, trong d¯ó sector soˆ´ 0 chu´’a ba’n ghi kho’’i d¯oˆ

˙

ng chính (MBR). Trong Setup BIOS

hoˆ˜ tro

˙

’ bieˆ

´ n d¯oˆ’i soˆ´ thu´’ tu

˙

’ theo d¯u’o`’ng tha˘’ng thành d¯i

˙

a chı’ CHS có da

˙

ng "Hoˆ˜ tro

˙

’ LBA". Nhu’

vaˆ

˙

y, trong các phiên ba’n BIOS mo´’i thu’o`’ng có lu

˙

’a cho

˙

n vo´’i ba phu’o’ng án: "Large", "LBA",

và "Normal" (phu’o’ng án cuoˆ´i cùng có nghı˜a là không thu

˙

’c hieˆ

˙

n bieˆ´n d¯oˆ’i d¯i

˙

a chı’).

Tuy nhiên trong cheˆ´ d¯oˆ

˙

LBA vieˆ

˙

c su’’ du

˙

ng d¯ı˜a vaˆ

˙

t lý vaˆ˜n d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n qua Int 13h, mà

Int 13h vaˆ˜n su’’ du

˙

ng boˆ

˙

3D (C,H,S). Vì nguyên nhân này xuaˆ´t hieˆ

˙

n ha

˙

n cheˆ´ lên dung lu’o

˙

’ng

cu’a d¯ı˜a: BIOS, và theo d¯ó, MS-DOS và các phiên ba’n Windows d¯aˆ`u tiên không theˆ’ d¯ánh d¯i

˙

a

chı’ các d¯ı˜a có dung lu’o

˙

’ng lo´’n ho’n 8,4 Gbyte.

Caˆ`n chú ý ra˘`ng ha

˙

n cheˆ´ nói trên chı’ áp du

˙

ng vo´’i các d¯ı˜a có giao dieˆ

˙

n IDE. Trong các

controller cu’a d¯ı˜a SCSI, soˆ

´ cu’a sector d¯u’o

˙

’c chuyeˆ’n vào các leˆ

˙

nh SCSI, và sau d¯ó tu

˙

’ d¯ı˜a tìm

ra vi

˙

trí caˆ`n thieˆ´t, vì theˆ´ ha

˙

n cheˆ´ lên dung lu’o

˙

’ng d¯ı˜a không xuaˆ

´ t hieˆ

˙

n.

Moˆ

˙

t laˆ`n nu˜’a muoˆ´n nha˘´c la

˙

i ra˘`ng, taˆ´t ca’ nhu˜’ng ha

˙

n cheˆ´ nói trên chı’ có ý nghı˜a trong giai

d¯oa

˙

n kho’’i d¯oˆ

˙

ng HD

¯ H. Bo’’i vì Linux và các phiên ba’n Windows mo´’i nhaˆ

´ t khi làm vieˆ

˙

c vo´’i d¯ı˜a

d¯ã không còn su’’ du

˙

ng Int 13 cu’a BIOS, mà su’’ du

˙

ng driver riêng cu’a mình. Nhu’ng tru’o´’c khi

có theˆ’ su’’du

˙

ng driver cu’a mình, heˆ

˙

thoˆ

´ ng pha’i d¯u’o

˙

’c na

˙

p. Vì theˆ´ trong giai d¯oa

˙

n kho’’i d¯oˆ

˙

ng d¯aˆ`u

tiên baˆ´t ky` heˆ

˙

thoˆ

´ ng nào cu˜ng caˆ`n su’’ du

˙

ng BIOS. D

¯ ieˆ`u này ha

˙

n cheˆ´ vieˆ

˙

c d¯a˘

˙

t nhieˆ`u heˆ

˙

thoˆ

´ ng

ra ngoài vùng 8 Gbyte d¯ı˜a d¯aˆ`u tiên: chúng không theˆ’ kho’’i d¯oˆ

˙

ng tu`’ d¯ó, ma˘

˙

c dù sau khi kho’’i

d¯oˆ

˙

ng thì có theˆ’ làm vieˆ

˙

c vo´’i các d¯ı˜a có dung lu’o

˙

’ng lo´’n ho’n nhieˆ`u. D

¯ eˆ’ có theˆ’ hieˆ’u cách thoát

kho’i nhu

˜’ng ha

˙

n cheˆ´ này, chúng ta caˆ`n moˆ

˙

t chút kieˆ´n thu´’c veˆ` quá trình kho’’i d¯oˆ

˙

ng cu’a HD

¯ H

Linux.

2.4

Lu

˙

’a cho

˙

n trình kho’’i d¯oˆ

˙

ng

2.4.1

Trình kho’’i d¯oˆ

˙

ng LILO cu’a HD

¯ H Linux

Trình kho’’i d¯oˆ

˙

ng LILO d¯u’o

˙

’c vieˆ

´ t bo’’i Werner Almesberber. LILO có theˆ’ kho’’i d¯oˆ

˙

ng nhân

Linux tu`’ d¯ı˜a meˆ`m, d¯ı˜a cu´’ng, và cu˜ng có theˆ’ kho’’i d¯oˆ

˙

ng các heˆ

˙

d¯ieˆ`u hành khác: PC/MS-DOS,

DR DOS, OS/2, Windows 95/98, Windows NT/2000/XP, 386BSD, SCO UNIX, Unixware
v.v. . . LILO cho phép cho

˙

n d¯eˆ´n 16 heˆ

˙

d¯ieˆ`u hành khác nhau d¯eˆ’ kho’’i d¯oˆ

˙

ng.

LILO không pha’i là chu’o’ng trình d¯o’n le’ mà là moˆ

˙

t boˆ

˙

goˆ`m nhieˆ`u chu’o’ng trình: trình kho’’i

d¯oˆ

˙

ng, các chu’o’ng trình su’’du

˙

ng d¯eˆ’ cài d¯a˘

˙

t và caˆ´u hình trình kho’’i d¯oˆ

˙

ng, và các taˆ

˙

p tin phu

˙

c vu

˙

:

background image

12

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

• chu’o’ng trình

/sbin/lilo

, cha

˙

y du’o´’i Linux, phu

˙

c vu

˙

d¯eˆ’ ghi taˆ´t ca’ thông tin caˆ`n thieˆ´t

trong giai d¯oa

˙

n kho’’i d¯oˆ

˙

ng vào các choˆ˜ tu’o’ng u´’ng. Caˆ`n cha

˙

y chu’o’ng trình này sau moˆ˜i

laˆ`n có thay d¯oˆ’i trong nhân hay trong taˆ

˙

p tin caˆ´u hình LILO;

• các taˆ

˙

p tin phu

˙

c vu

˙

, caˆ`n cho LILO trong tho`’i gian kho’’i d¯oˆ

˙

ng. Nhu

˜’ng taˆ

˙

p tin này thu’o`’ng

na˘`m trong thu’ mu

˙

c

/boot

. Quan tro

˙

ng nhaˆ´t trong soˆ

´ chúng – d¯ó là ba’n thân trình

kho’’i d¯oˆ

˙

ng (xem phía du’o´’i) và taˆ

˙

p tin map (

/boot/map

); trong taˆ

˙

p tin này có chı’ ra

vi

˙

trí cu’a nhân. Moˆ

˙

t taˆ

˙

p tin quan tro

˙

ng khác – taˆ

˙

p tin caˆ´u hình LILO; thu’o`’ng có tên

/etc/lilo.conf

;

• trình kho’’i d¯oˆ

˙

ng – d¯ây là phaˆ`n LILO d¯u’o

˙

’c na

˙

p vào boˆ

˙

nho´’ d¯aˆ`u tiên qua Int cu’a BIOS;

trình kho’’i d¯oˆ

˙

ng na

˙

p nhân Linux hay sector kho’’i d¯oˆ

˙

ng cu’a heˆ

˙

d¯ieˆ`u hành khác. Trình

kho’’i d¯oˆ

˙

ng goˆ`m có hai phaˆ`n. Phaˆ`n thu´’ nhaˆ´t d¯u’o

˙

’c ghi vào sector kho’’i d¯oˆ

˙

ng và phu

˙

c vu

˙

d¯eˆ’ na

˙

p phaˆ`n thu´’ hai, có kích thu’o´’c lo´’n ho’n raˆ´t nhieˆ`u. Ca’ hai phaˆ`n thu’o`’ng d¯u’o

˙

’c ghi trên

d¯ı˜a trong taˆ

˙

p tin

/boot/boot.b

.

Caˆ`n nho´’ ra˘`ng, d¯i

˙

nh da

˙

ng cu’a sector kho’’i d¯oˆ

˙

ng ta

˙

o ra bo’’i LILO khác vo´’i d¯i

˙

nh da

˙

ng MBR

cu’a DOS. Vì theˆ´ neˆ´u ghi sector kho’’i d¯oˆ

˙

ng LILO vào MBR, thì các heˆ

˙

d¯ieˆ`u hành d¯ã cài cu’a

Microsoft se˜ ngu`’ng kho’’i d¯oˆ

˙

ng (neˆ´u nhu’ không có các bieˆ

˙

n pháp boˆ’ sung).

Sector kho’’i d¯oˆ

˙

ng cu’a LILO có theˆ’ d¯u’o

˙

’c thieˆ

´ t keˆ´ d¯eˆ’ su’’ du

˙

ng nhu’ sector kho’’i d¯oˆ

˙

ng cu’a

phân vùng; trong d¯ó có choˆ˜ cho ba’ng phân vùng.

Sector kho’’i d¯oˆ

˙

ng cu’a LILO trong khi cài d¯a˘

˙

t có theˆ’ d¯a˘

˙

t vào nhu

˜’ng choˆ˜ sau:

• sector kho’’i d¯oˆ

˙

ng cu’a d¯ı˜a meˆ`m trong d¯i

˙

nh da

˙

ng Linux (

/dev/fd0

, . . . );

• MBR cu’a d¯ı˜a cu´’ng d¯aˆ`u tiên (

/dev/hda, /dev/sda

, . . . );

• sector kho’’i d¯oˆ

˙

ng cu’a phân vùng chính vo´’i heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux trên d¯ı˜a cu´’ng d¯aˆ`u tiên

(

/dev/hda1, /dev/hda2

, . . . );

• sector kho’’i d¯oˆ

˙

ng cu’a phân vùng lôgíc trong phân vùng mo’’ roˆ

˙

ng d¯ı˜a cu´’ng d¯aˆ`u tiên

(

/dev/hda5

, . . . ). Su

˙

’thaˆ

˙

t là phaˆ`n lo´’n chu’o’ng trình da

˙

ng

fdisk

không d¯eˆ` ra kha’ na˘ng

kho’’i d¯oˆ

˙

ng kho’’i d¯oˆ

˙

ng tu`’phân vùng mo’’ roˆ

˙

ng và tu`’choˆ´i vieˆ

˙

c kích hoa

˙

t phân vùng này. Vì

vaˆ

˙

y trong thành phaˆ`n LILO có chu´’a moˆ

˙

t chu’o’ng trình d¯a˘

˙

c bieˆ

˙

t (

activate

) cho phép

vu’o

˙

’t qua ha

˙

n cheˆ´ này. Tuy nhiên chu’o’ng trình

fdisk

cu’a ba’n phân phoˆ

´ i Linux hoˆ˜ tro

˙

kha’ na˘ng kích hoa

˙

t phân vùng mo’’ roˆ

˙

ng. Caˆ`n su’’ du

˙

ng tùy cho

˙

n

-b

hoa˘

˙

c bieˆ´n

BOOT

.

Sector kho’’i d¯oˆ

˙

ng cu’a LILO không theˆ’ d¯a˘

˙

t vào các choˆ˜ sau:

• sector kho’’i d¯oˆ

˙

ng cu’a d¯ı˜a meˆ`m hay phân vùng chính, vo´’i d¯i

˙

nh da

˙

ng heˆ

˙

thoˆ

´ ng taˆ

˙

p tin

khác Linux;

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

• trên d¯ı˜a cu´’ng thu´’ hai.

Ngoài ra, caˆ`n nho´’ ra˘`ng, LILO trong tho`’i gian kho’’i d¯oˆ

˙

ng nhu

˜’ng taˆ

˙

p tin sau:

/boot/boot.b

;

/boot/map

(ta

˙

o ra bo’’i leˆ

˙

nh

/sbin/lilo

);

background image

2.4 Lu

˙

’a cho

˙

n trình kho’’i d¯oˆ

˙

ng

13

• taˆ´t ca’ phiên ba’n nhân kho’’i d¯oˆ

˙

ng (neˆ´u ba

˙

n d¯o

˙

c cho

˙

n phiên ba’n nhân khi kho’’i d¯oˆ

˙

ng);

• sector kho’’i d¯oˆ

˙

ng cu’a các heˆ

˙

d¯ieˆ`u hành khác mà ba

˙

n d¯o

˙

c muoˆ

´ n kho’’i d¯oˆ

˙

ng qua LILO;

• taˆ

˙

p tin chu´’a các thông báo d¯u’a ra khi kho’’i d¯oˆ

˙

ng (neˆ´u d¯u’o

˙

’c xác d¯i

˙

nh).

Nhu’vaˆ

˙

y, sector kho’’i d¯oˆ

˙

ng LILO cu˜ng nhu’nhu˜’ng taˆ

˙

p tin d¯ã lieˆ

˙

t kê (trong soˆ

´ d¯ó có các taˆ

˙

p

tin ba

˙

n d¯o

˙

c se˜ cài d¯a˘

˙

t sau này) caˆ`n na˘`m trong pha

˙

m vi 1024 cylinder d¯aˆ`u tiên cu’a d¯ı˜a cu´’ng,

bo’’i vì chúng caˆ`n d¯u’o

˙

’c truy caˆ

˙

p qua BIOS. Xem phaˆ`n nói veˆ` ha

˙

n cheˆ´ cu’a BIOS o’’ trên.

Ba˘´t d¯aˆ`u tu`’ phiên ba’n 21, LILO d¯u’a ra màn hình trình d¯o’n (thu

˙

’c d¯o’n) cho phép cho

˙

n heˆ

˙

thoˆ

´ ng d¯eˆ’ kho’’i d¯oˆ

˙

ng (tru’o´’c d¯ây caˆ`n nhaˆ´n phím Tab d¯eˆ’ go

˙

i trình d¯o’n này).

2.4.2

Các trình kho’’i d¯oˆ

˙

ng khác

Ngoài LILO d¯eˆ’ kho’’i d¯oˆ

˙

ng Linux có theˆ’ kho’’i d¯oˆ

˙

ng các trình kho’’i d¯oˆ

˙

ng khác.

• Neˆ´u nhu’tru’o´’c khi cài d¯a˘

˙

t Linux d¯ã có HD

¯ H Windows NT/2000/XP, thì trình kho’’i d¯oˆ

˙

ng

ba

˙

n d¯o

˙

c có theˆ’ su’’ du

˙

ng là OS Loader cu’a NT. So sánh vo´’i LILO thì trình kho’’i d¯oˆ

˙

ng

OS Loader có ít nhaˆ´t hai u’u theˆ´. Thu´’ nhaˆ´t, taˆ´t ca’ caˆ´u hình cu˜ không bi

˙

maˆ´t (chúng ta

có theˆ’ cho

˙

n kho’’i d¯oˆ

˙

ng Windows hay Linux theo lu

˙

’a cho

˙

n), và thu´’ hai, có theˆ’ cài d¯a˘

˙

t

Linux lên d¯ı˜a mà LILO không theˆ’ kho’’i d¯oˆ

˙

ng, ví du

˙

, oˆ’ d¯ı˜a thu´’hai trên controller thu´’hai

(Secondary Slave).

• Neˆ´u nhu’tru’o´’c khi cài d¯a˘

˙

t Linux ba

˙

n d¯o

˙

c chı’ có HD

¯ H Windows 95 hay Windows 98 và

không có Windows NT/2000 hay XP, thì OS Loader không d¯u’o

˙

’c cài d¯a˘

˙

t. Và neˆ´u nhu’vì

moˆ

˙

t lý do nào d¯ó ba

˙

n d¯o

˙

c không muoˆ

´ n cài d¯a˘

˙

t LILO, thì có theˆ’ su’’ d¯u

˙

ng chu’o’ng trình

kho’’i d¯oˆ

˙

ng loadlin.exe (thu’o`’ng d¯i kèm vo´’i ba’n phân phoˆ´i Linux);

• Tho`’i gian gaˆ`n d¯ây trong thành phaˆ`n ba’n phân phoˆ´i Linux thu’o`’ng có chu’o’ng trình kho’’i

d¯oˆ

˙

ng GRUB.

• Trong thành phaˆ`n OS/2 cu’a công ty IBM có chu’o’ng trình kho’’i d¯oˆ

˙

ng Boot Manager.

Trong raˆ´t nhieˆ`u hu’o´’ng daˆ˜n ngu’o`’i ta khuyên dùng chu’o’ng trình này d¯eˆ’ toˆ’i chu´’c kho’’i
d¯oˆ

˙

ng nhieˆ`u HD

¯ H.

• Trong các nguoˆ`n thông tin khác nhau còn nha˘´c d¯eˆ´n chu’o’ng trình System Commander;

• Thêm moˆ

˙

t trình kho’’i d¯oˆ

˙

ng khác có trong thành phaˆ`n gói PartitionMagic cu’a công ty

Power Quest. Chúng ta se˜ nói veˆ` chu’o’ng trình này trong phaˆ`n nho’ tieˆ´p theo.

Ngoài ra tác gia’ còn thaˆ´y ngu’o`’i ta nói d¯eˆ´n moˆ

˙

t loa

˙

t trình kho’’i d¯oˆ

˙

ng khác (moˆ

˙

t soˆ

´ có theˆ’

tìm thaˆ´y trong thu’ mu

˙

c

/public/ftp/pub/Linux/system/boot/loaders

trên trang

ftp://metalab.unc.edu/

Nhu’ng vì tác gia’ không su’’ du

˙

ng nhu

˜’ng chu’o’ng trình này, nên không

theˆ’ nói cu

˙

theˆ’ cách su’’ du

˙

ng chúng. Và taˆ´t ca’ nhu˜’ng lo`’i khuyên dùng sau cu’a tác gia’ se˜ du

˙

’a

trên vieˆ

˙

c su’’ du

˙

ng LILO, NT Loader và loadlin.exe. Neˆ´u nhu’ có ý muoˆ´n cài d¯a˘

˙

t chu’o’ng trình

kho’’i d¯oˆ

˙

ng khác, thì ba

˙

n d¯o

˙

c caˆ`n d¯o

˙

c hu’o´’ng daˆ˜n cài d¯a˘

˙

t và su’’ du

˙

ng cu’a nó.

background image

14

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

2.4.3

Các phu’o’ng án kho’’i d¯oˆ

˙

ng

Nhu’ vaˆ

˙

y, theo ý kieˆ´n cu’a tác gia’ có các phu’o’ng án kho’’i d¯oˆ

˙

ng sau:

• Neˆ´u d¯ã cài d¯a˘

˙

t Windows NT hay Windows 2000/XP, thì hãy su’’ du

˙

ng NT Loader.

• Neˆ´u có Windows 95 hay Windows 98 trên FAT16, và ba

˙

n d¯o

˙

c không muoˆ

´ n cài d¯a˘

˙

t

chu’o’ng trình kho’’i d¯oˆ

˙

ng nào khác, thì có theˆ’ su’’du

˙

ng LILO, hoa˘

˙

c d¯aˆ`u tiên cha

˙

y DOS và

sau d¯ó kho’’i d¯oˆ

˙

ng Linux nho`’ chu’o’ng trình loadlin.exe (hay moˆ

˙

t chu’o’ng trình tu’o’ng tu

˙

’,

có vài chu’o’ng trình nhu’ vaˆ

˙

y, nhu’ng chúng ta se˜ không xét d¯eˆ´n).

• Neˆ´u d¯ã cài d¯a˘

˙

t Windows 95 OSR2 hay Windows 98 trên FAT32, và ba

˙

n d¯o

˙

c không

muoˆ

´ n cài d¯a˘

˙

t thêm chu’o’ng trình kho’’i d¯oˆ

˙

ng, thì caˆ`n su’’ du

˙

ng loadlin.exe. Raˆ´t nhieˆ`u

HOWTO kha˘’ng d¯i

˙

nh ra˘`ng không caˆ`n su’’ d¯u

˙

ng LILO, neˆ´u nhu’ phân vùng kích hoa

˙

t có

d¯i

˙

nh da

˙

ng FAT32, ma˘

˙

c dù tác gia’ không rõ nguyên nhân. Tuy nhiên thí nghieˆ

˙

m kho’’i

d¯oˆ

˙

ng Linux qua NT Loader, cài d¯a˘

˙

t trên phân vùng FAT32, cu’a tác gia’ d¯ã keˆ´t thúc

không thành công. Vì theˆ´, trong tru’o`’ng ho

˙

’p này tác gia’ d¯ã pha’i su’’ du

˙

ng chu’o’ng trình

loadlin.exe. Chu’o’ng trình này d¯ã hoàn thành toˆ´t nhieˆ

˙

m vu

˙

, và ta

˙

o cho tác gia’ moˆ

˙

t aˆ´n

tu’o

˙

’ng toˆ

´ t, vì theˆ´ tác gia’ khuyên ba

˙

n d¯o

˙

c su’’ du

˙

ng loadlin.exe d¯eˆ’ kho’’i d¯oˆ

˙

ng Linux.

Trong nhu

˜’ng phaˆ`n tieˆ´p theo tác gia’ se˜ cho bieˆ´t cách cài d¯a˘

˙

t Linux, su’’ du

˙

ng taˆ´t ca’ ba

phu’o’ng án kho’’i d¯oˆ

˙

ng: qua trình kho’’i d¯oˆ

˙

ng NT Loader, trình kho’’i d¯oˆ

˙

ng LILO và trình kho’’i

d¯oˆ

˙

ng loadlin.exe. Tuy nhiên tru’o´’c khi cài d¯a˘

˙

t trình kho’’i d¯oˆ

˙

ng caˆ`n chuaˆ’n bi

˙

các phân vùng

trên d¯ı˜a, hay ít nhaˆ´t là nghı˜ cách toˆ’ chu´’c chúng.

2.5

Chuaˆ’n bi

˙

các phân vùng trên d¯ı˜a

2.5.1

Lo`’i khuyên khi ta

˙

o phân vùng

D

¯ u’a ra lo`’i khuyên o’’ d¯ây không pha’i là vieˆ

˙

c deˆ˜ dàng, vì phân vùng d¯ı˜a phu

˙

c thuoˆ

˙

c raˆ´t nhieˆ`u

vào ý thích và nhu caˆ`u cu’a chu’ nhân d¯ı˜a. Nhu’ng cu˜ng xin thu’’ d¯u’a ra vài d¯eˆ` nghi

˙

sau. Tác

gia’ se˜ d¯a˘

˙

t tên d¯ı˜a và phân vùng theo "tiêu chuaˆ’n" cu’a Linux, tu´’c là

/dev/hda, /dev/hdb

,

v.v. . . d¯oˆ

´ i vo´’i d¯ı˜a và

/dev/hda1, /dev/hda2

, v.v. . . – d¯oˆ

´ i vo´’i các phân vùng.

Vieˆ

˙

c phân chia d¯ı˜a thành các phân vùng là caˆ`n thieˆ´t, bo’’i vì Windows và Linux su’’ du

˙

ng

các cách lu’u tru˜’ thông tin trên d¯ı˜a và sau d¯ó d¯o

˙

c chúng tu`’ d¯ı˜a khác nhau. Chính vì theˆ´ toˆ´t ho’n

heˆ´t là dành cho moˆ˜i heˆ

˙

d¯ieˆ`u hành moˆ

˙

t (hoa˘

˙

c thaˆ

˙

m chí moˆ

˙

t vài nhu’ chúng ta se˜ thaˆ´y o’’ du’o´’i)

phân vùng riêng.

D

¯ aˆ`u tiên chúng ta hãy xem xét moˆ

˙

t tru’o`’ng ho

˙

’p d¯o’n gia’n – dung lu’o

˙

’ng oˆ’ d¯ı˜a cu’a ba

˙

n d¯o

˙

c

không vu’o

˙

’t quá 8,4 Gbyte (nói chính xác ho’n – soˆ

´ cylinder không vu’o

˙

’t quá 1024). Trong

tru’o`’ng ho

˙

’p này mo

˙

i thu´’ d¯eˆ`u d¯o’n gia’n: ba

˙

n d¯o

˙

c chı’ vieˆ

˙

c chia d¯ı˜a làm sao d¯eˆ’ d¯u’ choˆ˜ cho heˆ

˙

d¯ieˆ`u hành se˜ cài d¯a˘

˙

t. Có theˆ’ su’’ du

˙

ng du

˜’ lieˆ

˙

u cho bieˆ´t kích thu’o´’c d¯ı˜a nho’ nhaˆ´t caˆ`n thieˆ´t d¯eˆ’ cài

d¯a˘

˙

t heˆ

˙

d¯ieˆ`u hành vo´’i caˆ´u hình co’ ba’n trong ba’ng

2.2

.

Tuy nhiên xin hãy nho´’ ra˘`ng, không nhu˜’ng pha’i tính kích thu’o´’c các taˆ

˙

p tin cu’a ba’n thân

heˆ

˙

d¯ieˆ`u hành, mà còn pha’i tính ca’ kích thu’o´’c cu’a các chu’o’ng trình ba

˙

n d¯o

˙

c du

˙

’ tính cha

˙

y. Và

còn pha’i dành moˆ

˙

t phaˆ`n du

˙

’ tru

˜’ không nho’ cho các chu’o’ng trình se˜ cài d¯a˘

˙

t sau này (không theˆ’

tránh kho’i!). Hãy tính ra˘`ng, 700 Mbyte dành cho Linux o’’ trong ba’ng nói trên chı’ dành cho
các chu’o’ng trình cài d¯a˘

˙

t cùng vo´’i Linux theo ma˘

˙

c d¯i

˙

nh, trong soˆ

´ d¯ó có, ví du

˙

, chu’o’ng trình

soa

˙

n tha’o raˆ´t ma

˙

nh Lyx. D

¯ oˆ

´ i vo´’i Windows cu˜ng tu’o’ng tu

˙

’ nhu’ vaˆ

˙

y.

background image

2.5 Chuaˆ’n bi

˙

các phân vùng trên d¯ı˜a

15

Ba’ng 2.2: Nhu caˆ`u su’’ du

˙

ng không gian d¯ı˜a cu’a HD

¯ H

Heˆ

˙

d¯ieˆ`u hành

Yêu caˆ`u

Windows 95

100 Mbyte

Windows 98

200 Mbyte

Windows NT

200 Mbyte

Windows 2000

700 Mbyte

Linux Red Hat 6.2 (Worksta-
tion vo´’i KDE)

700 Mbyte

Theo kinh nghieˆ

˙

m cu’a tác gia’ thì d¯eˆ’ làm vieˆ

˙

c vo´’i Windows 95/98, Windows NT và Linux

các phân vùng vo´’i kích thu’o´’c 800-1000 Mbyte là d¯u’ (taˆ´t nhiên, neˆ´u ba

˙

n d¯o

˙

c không cài d¯a˘

˙

t

các gói chu’o’ng trình lo´’n, nhu’ OpenOffice.Org), còn d¯oˆ´i vo´’i Windows 200 thì caˆ`n phân vùng
lo´’n ho’n.

Bây gio`’ chúng ta se˜ xem xét vaˆ´n d¯eˆ` chia các phân vùng cho Linux. O

’’ d¯ây không theˆ’ chı’

chia moˆ

˙

t phân vùng. Thu´’ nhaˆ´t, caˆ`n chia moˆ

˙

phân vùng swap riêng bieˆ

˙

t cho Linux. Khi xác

d¯i

˙

nh dung lu’o

˙

’ng cu’a phân vùng swap Linux caˆ`n tính d¯eˆ

´ n nhu˜’ng yeˆ´u toˆ´ sau:

• Trong Linux, RAM và không gian swap ho

˙

’p la

˙

i ta

˙

o thành boˆ

˙

nho´’ a’o chung. Ví du

˙

, neˆ´u

ba

˙

n d¯o

˙

c có 256 MByte RAM và 128 Mbyte không gian swap, thì se˜ có 384 Mbyte boˆ

˙

nho´’ a’o.

• D

¯ eˆ’ làm vieˆ

˙

c vo´’i Linux caˆ`n ít nhaˆ´t 16 Mbyte boˆ

˙

nho´’ a’o, vì theˆ´ neˆ´u ba

˙

n d¯o

˙

c chı’ có 4

Mbyte RAM, thì caˆ`n phân vùng swap không nho’ ho’n 12 Mbyte.

• Trên Linux kích thu’o´’c moˆ

˙

t phân vùng swap không theˆ’ vu’o

˙

’t quá 128 Mbyte. Nghı˜a là

phân vùng swap có theˆ’ có kích thu’o´’c lo´’n bao nhiêu tùy thích nhu’ng Linux không theˆ’
su’’ du

˙

ng ho’n 128 Mbyte. Neˆ´u ba

˙

n d¯o

˙

c muoˆ

´ n có boˆ

˙

nho´’ a’o lo´’n ho’n, thì caˆ`n ta

˙

o hai phân

vùng swap hoa˘

˙

c su’’ du

˙

ng taˆ

˙

p tin swap.

• Khi tính kích thu’o´’c cu’a không gian swapping, caˆ`n nho´’ ra˘`ng kích thu’o´’c quá lo´’n có theˆ’

là vô ích. Trên máy tính vo´’i 16 Mbyte RAM khi cài d¯a˘

˙

t Linux vo´’i caˆ´u hình chuaˆ’n và

các chu’o’ng trình u´’ng du

˙

ng chuaˆ’n thì 48 Mbyte không gian swapping là d¯u’. Còn neˆ´u

cài d¯a˘

˙

t Linux vo´’i caˆ´u hình nho’ nhaˆ´t, thì không caˆ`n d¯eˆ´n không gian swap. Taˆ´t nhiên,

kích thu’o´’c chính xác cu’a không gian swap phu

˙

thuoˆ

˙

c lo´’n vào chu’o’ng trình se˜ d¯u’o

˙

’c cài

d¯a˘

˙

t.

Nói chung, chı’ nên suy nghı˜ veˆ` vaˆ´n d¯eˆ` dung lu’o

˙

’ng cu’a phân vùng swap khi có moˆ

˙

t d¯ı˜a

nho’ và ít boˆ

˙

nho´’ RAM. Trong tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i hãy phân chia d¯eˆ’ toˆ’ng soˆ

´ dung lu’o

˙

’ng cu’a

boˆ

˙

nho´’ a’o (goˆ`m RAM và phân vùng swap) không nho’ ho’n 128 Mbyte. Còn neˆ´u nhu’ ba

˙

n d¯o

˙

c

có 128 Mbyte RAM hay nhieˆ`u ho’n, thì phân vùng này có theˆ’ không caˆ`n thieˆ´t.

Taˆ´t ca’ các phaˆ`n còn la

˙

i cu’a Linux và các chu’o’ng trình hoˆ˜ tro

˙

’ theo nguyên ta˘´c có theˆ’ d¯a˘

˙

t

vào moˆ

˙

t phân vùng. Tuy nhiên, vieˆ

˙

c d¯a˘

˙

t heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux lên vài phân vùng riêng re˜ là

có ý nghı˜a. Ví du

˙

, có nhà chuyên gia khuyên nên dành cho heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux ba phân

vùng (neˆ´u tính ca’ swap thì thành 4). Phân vùng thu´’nhaˆ´t (theo ý kieˆ´n cá nhân tác gia’, 1 Gbyte
là d¯u’) se˜ chu´’a heˆ

˙

thoˆ

´ ng taˆ

˙

p tin goˆ

´ c (

/

). Phân vùng thu´’ hai dành cho thu’ mu

˙

c

/home

. Còn

phân vùng thu´’ ba d¯u’o

˙

’c ga˘´n vào thu’ mu

˙

c

/usr

. Vieˆ

˙

c phân chia nhu’ vaˆ

˙

y du

˙

’a trên nhu

˜’ng lý le˜

sau. Dù HD

¯ H Linux có oˆ’n d¯i

˙

nh và d¯áng tin caˆ

˙

y d¯eˆ´n d¯âu, thì thı’nh thoa’ng cu˜ng caˆ`n cài d¯a˘

˙

t la

˙

i.

Ví du

˙

, ba

˙

n d¯o

˙

c muoˆ

´ n caˆ

˙

p nhaˆ

˙

t phiên ba’n mo´’i cu’a ba’n phân phoˆ´i, hoa˘

˙

c vì ít kinh nghieˆ

˙

m su’’

background image

16

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

du

˙

ng nên làm ho’ng taˆ

˙

p tin heˆ

˙

thoˆ

´ ng quan tro

˙

ng, hoa˘

˙

c d¯o’n gia’n là muoˆ´n cài d¯a˘

˙

t moˆ

˙

t ba’n phân

phoˆ

´ i khác. Neˆ´u nhu’ taˆ´t ca’ d¯u’o

˙

’c cài d¯a˘

˙

t vào moˆ

˙

t phân vùng, thì khi cài d¯a˘

˙

t la

˙

i nhu

˜’ng du˜’ lieˆ

˙

u

d¯ã làm ra và ghi nho´’ trong thu’mu

˙

c cá nhân se˜ bi

˙

maˆ´t (neˆ´u không có ba’n sao chép). Ngoài ra,

se˜ bi

˙

maˆ´t ca’ nhu˜’ng chu’o’ng trình d¯ã cài tu`’ mã nguoˆ`n, hay cài ba˘`ng phu’o’ng pháp khác. Phaˆ`n

lo´’n nhu˜’ng gói chu’o’ng trình này d¯u’o

˙

’c cài vào thu’ mu

˙

c

/usr

. Neˆ´u dành cho thu’ mu

˙

c này moˆ

˙

t

phân vùng riêng và khi cài d¯a˘

˙

t không d¯i

˙

nh da

˙

ng la

˙

i chúng, thì nhu

˜’ng chu’o’ng trình nói trên

se˜ d¯u’o

˙

’c giu

˜’ la

˙

i và có theˆ’ se˜ làm vieˆ

˙

c (raˆ´t có theˆ’ caˆ`n vài caˆ´u hình nho’) sau khi cài d¯a˘

˙

t la

˙

i heˆ

˙

thoˆ

´ ng. Trong tiêu chuaˆ’n veˆ` heˆ

˙

thoˆ

´ ng taˆ

˙

p tin cu’a Linux FHS (cu

˙

theˆ’ xin xem o’’ chu’o’ng ??)

cu˜ng có lo`’i khuyên veˆ` vieˆ

˙

c d¯a˘

˙

t thu’ mu

˙

c

/usr

lên moˆ

˙

t phân vùng riêng.

Theo tác gia’ thaˆ´y, nhu˜’ng ý kieˆ´n nói trên d¯ã d¯u’ d¯eˆ’ ba

˙

n d¯o

˙

c tu

˙

’ tìm ra phu’o’ng án phân chia

oˆ’ d¯ı˜a cu’a mình, trong tru’o`’ng ho

˙

’p chı’ có moˆ

˙

t oˆ’ d¯ı˜a nho’. Bây gio`’ chúng ta xem xét tru’o`’ng ho

˙

’p

d¯ı˜a vo´’i soˆ´ cylinder lo´’n ho’n 1024.

Tu`’nhu˜’ng gì d¯ã nói d¯eˆ´n o’’ phaˆ`n tru’o´’c (ha

˙

n cheˆ´ dung lu’o

˙

’ng d¯ı˜a cu´’ng), caˆ`n d¯a˘

˙

t chu’o’ng trình

kho’’i d¯oˆ

˙

ng trong pha

˙

m vi 1024 cylinder d¯aˆ`u tiên. Nhân tieˆ

˙

n, NT Loader không nhaˆ´t thieˆ´t pha’i

d¯a˘

˙

t vào phân vùng NTFS, cu˜ng nhu’ không nhaˆ´t thieˆ´t pha’i d¯a˘

˙

t vào phân vùng chu´’a các taˆ

˙

p tin

khác cu’a HD

¯ H. Nhu’ d¯ã nói o’’ trên, d¯oˆ

´ i vo´’i Linux có theˆ’ d¯a˘

˙

t thu’ mu

˙

c goˆ

´ c cùng vo´’i thu’ mu

˙

c

con

/boot

vào các cylinder "thaˆ´p" (trong vòng 1024 d¯aˆ`u tiên), còn các thu’mu

˙

c khác – o’’ choˆ˜

nào tùy thích.

Nhu’ vaˆ

˙

y trong tru’o`’ng ho

˙

’p này, nhu

˜’ng d¯eˆ` nghi

˙

cu’a tác gia’ cho ra ba’ng toˆ’ng keˆ´t sau:

• phaˆ`n kho’’i d¯oˆ

˙

ng cu’a taˆ´t ca’ các heˆ

˙

thoˆ

´ ng Microsoft d¯a˘

˙

t vào phân vùng chính d¯aˆ`u tiên cu’a

d¯ı˜a, vo´’i d¯i

˙

nh da

˙

ng FAT16 (DOS);

• phân vùng chính tieˆ´p theo dành cho thu’ mu

˙

c goˆ

´ c (

/

), kích thu’o´’c khoa’ng 1 Gbyte;

• phân vùng chính thu´’ ba dành cho swap cu’a Linux (lo`’i khuyên veˆ` kích thu’o´’c cu’a phân

vùng này xem o’’ trên);

• phaˆ`n còn la

˙

i cu’a d¯ı˜a d¯a˘

˙

t thành phân vùng mo’’ roˆ

˙

ng;

• trong phân vùng mo’’ roˆ

˙

ng ta

˙

o các phân vùng lôgíc cho moˆ˜i HD

¯ H se˜ cài d¯a˘

˙

t: Windows

98, Windows NT/2000/XP, và d¯oˆ`ng tho`’i cho các heˆ

˙

thoˆ

´ ng taˆ

˙

p tin

/home

/usr

cu’a

HD

¯ H Linux (trong

/home

se˜ d¯a˘

˙

t các taˆ

˙

p tin riêng cu’a ngu’o`’i dùng, còn trong

/usr

chu’o’ng trình se˜ cài d¯a˘

˙

t).

Taˆ´t nhiên, neˆ´u nhu’ ba

˙

n d¯o

˙

c chı’ có Windows 95 vo´’i FAT16, thì có theˆ’ d¯eˆ’ Windows trên

phân vùng d¯aˆ`u tiên. Neˆ´u nhu’ trên máy d¯ã cài d¯a˘

˙

t Windows NT hay có FAT32, thì moˆ

˙

t phân

vùng FAT16 cu˜ng không thu`’a. Thu´’ nhaˆ´t, keˆ’ ca’ trong tru’o`’ng ho

˙

’p heˆ

˙

thoˆ

´ ng có vaˆ´n d¯eˆ`, ba

˙

n d¯o

˙

c

có theˆ’ kho’’i d¯oˆ

˙

ng tu`’ d¯ı˜a meˆ`m DOS (ta

˙

m tho`’i khi chu’a làm quen vo´’i Linux moˆ

˙

t cách "tu’o`’ng

taˆ

˙

n") và thaˆ´y d¯u’o

˙

’c ra˘`ng d¯ı˜a cu´’ng làm vieˆ

˙

c bình thu’o`’ng. Thu´’hai, heˆ

˙

thoˆ

´ ng taˆ

˙

p tin FAT16 d¯u’o

˙

’c

hoˆ˜ tro

˙

’ trên mo

˙

i HD

¯ H, trong d¯ó có Linux, vì theˆ

´ phân vùng này có theˆ’ phu

˙

c vu

˙

cho vieˆ

˙

c trao

d¯oˆ’i taˆ

˙

p tin giu

˜’a các heˆ

˙

thoˆ

´ ng. Nhu’ng không nên d¯eˆ’ phân vùng này lo´’n, vì FAT16 su’’ du

˙

ng

không gian d¯ı˜a raˆ´t không ho

˙

’p lý. Chính vì vaˆ

˙

y hãy dành cho phân vùng này khoa’ng 256 hoa˘

˙

c

512 Mbyte.

Nhu

˜’ng lo`’i khuyên này d¯u’a ra vo´’i gia’ thieˆ´t ra˘`ng, ba

˙

n d¯o

˙

c chı’ có moˆ

˙

t d¯ı˜a cu´’ng. Neˆ´u nhu’

ba

˙

n d¯o

˙

c có 2, thì vaˆ˜n su’’ du

˙

ng d¯u’o

˙

’c nhu

˜’ng lo`’i khuyên này, chı’ có d¯ieˆ`u phân vùng swap toˆ

´ t

ho’n d¯a˘

˙

t trên d¯ı˜a khác vo´’i d¯ı˜a dành cho Linux. Ngu’o`’i ta nói ra˘`ng nhu’vaˆ

˙

y ta˘ng toˆ

´ c d¯oˆ

˙

làm vieˆ

˙

c

trong Linux (cu˜ng deˆ˜ hieˆ’u vì d¯aˆ`u d¯o

˙

c ít pha’i cha

˙

y ho’n).

background image

2.6 Windows NT và Linux: kho’’i d¯oˆ

˙

ng qua OS Loader cu’a NT

17

2.5.2

Chu’o’ng trình d¯eˆ’ phân chia oˆ’ d¯ı˜a

Sau khi hoàn thành keˆ´t hoa

˙

ch chia oˆ’ d¯ı˜a, caˆ`n lu

˙

’a cho

˙

n công cu

˙

d¯eˆ’ d¯u’a keˆ´ hoa

˙

ch này thành

hieˆ

˙

n thu

˙

’c. Chu’o’ng trình phân chia d¯ı˜a d¯u’o

˙

’c bieˆ

´ t d¯eˆ´n nhieˆ`u nhaˆ´t là

fdisk

; trên mo

˙

i heˆ

˙

d¯ieˆ`u

hành d¯eˆ`u có phiên ba’n riêng cu’a chu’o’ng trình này. Và không caˆ`n gì ho’n ngoài chu’o’ng trình
này, neˆ´u nhu’phân chia oˆ’ d¯ı˜a tra˘´ng, không chu´’a baˆ´t ký du˜’lieˆ

˙

u nào. Nhu’ng chúng ta d¯ang xem

xét tru’o`’ng ho

˙

’p d¯ã có HD

¯ H nào d¯ó trên d¯ı˜a và caˆ`n phân chia oˆ’ d¯ı˜a mà không làm maˆ

´ t thông

tin.

fdisk

không thích ho

˙

’p cho nhu

˜’ng mu

˙

c d¯ích nhu’ vaˆ

˙

y.

Trong thành phaˆ`n các ba’n phân phoˆ

´ i Red Hat và BlackCat (raˆ´t có theˆ’ trong các ba’n

phân phoˆ

´ i khác) có chu’o’ng trình

fips

, phu

˙

c vu

˙

cho phân chia oˆ’ d¯ı˜a. Tuy nhiên, theo ý

kieˆ´n cu’a ngu’o`’i dùng thì không nên su’’ du

˙

ng chu’o’ng trình này. Vì theˆ´ lo`’i khuyên cu’a tác

gia’ vo´’i ba

˙

n d¯o

˙

c, nhu

˜’ng ngu’o`’i dùng Linux mo´’i – neˆ´u nhu’ muoˆ

´ n phân chia la

˙

i oˆ’ d¯ı˜a mà

không làm maˆ´t thông tin, thì hãy tìm chu’o’ng trình Partition Magic cu’a công ty Power Quest
(

http://www.powerquest.com

và su’’ du

˙

ng chu’o’ng trình này.

Thu´’nhaˆ´t, chu’o’ng trình này cho phép phân chia la

˙

i oˆ’ d¯ı˜a mà không làm maˆ´t thông tin (tu´’c

là, taˆ´t ca’ nhu˜’ng cài d¯a˘

˙

t và caˆ´u hình tru’o´’c d¯ó se˜ d¯u’o

˙

’c ghi la

˙

i). Khi này, không chı’ ta

˙

o d¯u’o

˙

’c

phân vùng mo´’i tu`’ choˆ˜ troˆ´ng trên d¯ı˜a, mà còn có theˆ’ di chuyeˆ’n các phân vùng d¯ã có theo ý
muoˆ

´ n.

Thu´’ hai, chu’o’ng trình này (thaˆ

˙

m chí trong phiên ba’n dành cho DOS) cung caˆ´p moˆ

˙

t giao

dieˆ

˙

n d¯oˆ` ho

˙

a deˆ˜ su’’ du

˙

ng có hoˆ˜ tro

˙

’ chuoˆ

˙

t, và mo

˙

i thao tác cu˜ng nhu’ thay d¯oˆ’i d¯eˆ`u thaˆ´y rõ ràng.

D

¯ ieˆ`u này raˆ

´ t quan tro

˙

ng vo´’i ngu’o`’i dùng mo´’i.

Khi ta

˙

o phân vùng caˆ`n d¯eˆ’ ý không cho ranh gio´’i giu˜’a các phân vùng ca˘´t laˆ˜n nhau.

Tác gia’ cho ra˘`ng, nhu

˜’ng thông tin d¯ã d¯u’a d¯u’ d¯eˆ’ ba

˙

n d¯o

˙

c laˆ

˙

p keˆ´ hoa

˙

ch và thu

˙

’c hieˆ

˙

n vieˆ

˙

c

phân chia oˆ’ d¯ı˜a thành các phân vùng. Vì theˆ´ tieˆ´p theo chúng ta se˜ xem xét các phu’o’ng án cài
d¯a˘

˙

t hai HD

¯ H trên moˆ

˙

t máy tính.

2.6

Windows NT và Linux: kho’’i d¯oˆ

˙

ng qua OS Loader cu’a NT

Trong phaˆ`n này, khi nói veˆ` Windows NT xin ngaˆ`m hieˆ’u ca’ Windows 2000 và NT, vì "quan
heˆ

˙

" cu’a chúng d¯oˆ

´ i vo´’i vieˆ

˙

c cài d¯a˘

˙

t Linux hoàn toàn gioˆ

´ ng nhau. Chúng ta gia’ thieˆ´t là Windows

NT d¯ã d¯u’o

˙

’c cài vào phân vùng

/dev/hda2

(neˆ´u nhu’ ba

˙

n d¯o

˙

c nho´’,

/dev/hda1

se˜ dành cho

phân vùng FAT16). Neˆ´u HD

¯ H Windows NT d¯ã d¯u’o

˙

’c cài d¯a˘

˙

t, nghı˜a là trình kho’’i d¯oˆ

˙

ng OS

Loader cu˜ng d¯ã d¯u’o

˙

’c cài d¯a˘

˙

t. Và nhu’theˆ´ có theˆ’ su’’du

˙

ng chu’o’ng trình này d¯eˆ’ kho’’i d¯oˆ

˙

ng Linux.

Tác gia’ hy vo

˙

ng ra˘`ng ba

˙

n d¯o

˙

c d¯ã sao lu’u nhu˜’ng thông tin có giá tri

˙

cu’a mình. Các bu’o´’c cài

d¯a˘

˙

t có theˆ’ mô ta’ nhu’ sau:

1. Neˆ´u nhu’ ba

˙

n d¯o

˙

c chu’a cài d¯a˘

˙

t Linux bao gio`’, thì tru’o´’c khi ba˘´t d¯aˆ`u caˆ`n chuaˆ’n bi

˙

d¯ı˜a

meˆ`m kho’’i d¯oˆ

˙

ng và phu

˙

c hoˆ`i Windows NT. D

¯ eˆ’ ta

˙

o d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng chı’ caˆ`n d¯i

˙

nh

da

˙

ng la

˙

i d¯ı˜a meˆ`m, roˆ`i sao chép lên d¯ó các taˆ

˙

p tin ntldr, ntdetect.com và boot.ini tu`’ thu’

mu

˙

c goˆ

´ c cu’a oˆ’ d¯ı˜a kho’’i d¯oˆ

˙

ng NT. Chu’o’ng trình ta

˙

o d¯ı˜a phu

˙

c hoˆ`i Windows 2000/XP có

theˆ’ cha

˙

y tu`’ trình d¯o’n heˆ

˙

thoˆ

´ ng (leˆ

˙

nh Backup trong Start/Program/Accessories).

2. Dùng chu’o’ng trình Partition Magic d¯eˆ’ laˆ´y moˆ

˙

t phaˆ`n d¯ı˜a troˆ

´ ng và tu`’d¯ó ta

˙

o ra phân vùng

vo´’i da

˙

ng ext2(3) (heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux) và phân vùng swap. Cách tính kích thu’o´’c cu’a

chúng d¯ã nói o’’ trên.

3. Cài d¯a˘

˙

t Linux theo chı’ daˆ˜n cu’a ba’n phân phoˆ

´ i. Trong khi cài d¯a˘

˙

t caˆ`n chú ý d¯eˆ´n nhu˜’ng

d¯ieˆ’m sau:

background image

18

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

• thu´’ nhaˆ´t, trong quá trình cài d¯a˘

˙

t nhaˆ´t d¯i

˙

nh pha’i ta

˙

o ra các d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng

Linux. Tu´’c là caˆ`n tra’ lo`’i "Yes, make a BOOT DISK" (hay tu’o’ng tu

˙

’ theˆ

´ , tùy thuoˆ

˙

c

vào ba’n phân phoˆ

´ i) khi d¯u’o

˙

’c ho’i có ta

˙

o d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng hay không. D

¯ ı˜a meˆ`m

này se˜ d¯u’o

˙

’c dùng d¯eˆ

´ n o’’ sau. Ngoài ra, có theˆ’ su’’ du

˙

ng d¯ı˜a meˆ`m này d¯eˆ’ kho’’i d¯oˆ

˙

ng

Linux. D

¯ ây cu˜ng là moˆ

˙

t phu’o’ng án kho’’i d¯oˆ

˙

ng, và ho’n nu˜’a khác vo´’i d¯ı˜a meˆ`m kho’’i

d¯oˆ

˙

ng DOS, sau khi kho’’i d¯oˆ

˙

ng heˆ

˙

thoˆ

´ ng không còn yêu caˆ`u d¯ı˜a meˆ`m nu˜’a, có theˆ’

bo’ nó ra kho’i oˆ’, su’’ du

˙

ng oˆ’ d¯eˆ’ d¯o

˙

c các d¯ı˜a meˆ`m khác. Tuy nhiên cách kho’’i d¯oˆ

˙

ng

này cu˜ng có d¯ieˆ`u tieˆ

˙

n, vì theˆ´ không nên su’’du

˙

ng thu’o`’ng xuyên. Chı’ su’’du

˙

ng trong

tru’o`’ng ho

˙

’p "baˆ

´ t d¯a˘´c dı˜". D

¯ ı˜a meˆ`m này còn caˆ`n thieˆ

´ t cho caˆ´u hình d¯eˆ’ kho’’i d¯oˆ

˙

ng

nhieˆ`u HD

¯ H.

• thu´’ hai, khi cài d¯a˘

˙

t Linux caˆ`n cài LILO vào sector d¯aˆ`u tiên cu’a phân vùng dành

cho thu’ mu

˙

c goˆ

´ c (/) cu’a Linux, chu´’ không pha’i vào sector kho’’i d¯oˆ

˙

ng chính cu’a

d¯ı˜a (MBR). Chúng ta gia’ thieˆ´t Linux d¯u’o

˙

’c cài vào phân vùng

/dev/hda3

. Nhu’

vaˆ

˙

y LILO se˜ d¯u’o

˙

’c cài vào sector d¯aˆ`u tiên cu’a

/dev/hda3

Theo nguyên ta˘´c, neˆ´u nhu’ba

˙

n d¯o

˙

c cài LILO vào MBR, thì không pha’i mo

˙

i thu´’d¯ã ho’ng

heˆ´t. Keˆ´t qua’ cuoˆ

´ i cùng (kho’’i d¯oˆ

˙

ng qua NT Loader) vaˆ˜n có theˆ’ d¯a

˙

t d¯u’o

˙

’c nhu’ng caˆ`n bo’

ra moˆ

˙

t chút công su´’c. Vaˆ´n d¯eˆ` o’’ choˆ˜, d¯i

˙

nh da

˙

ng MBR ta

˙

o bo’’i LILO và Windows (DOS)

khác nhau. Vì theˆ´ neˆ´u ba

˙

n d¯o

˙

c cài LILO vào MBR, thì caˆ`u phu

˙

c hoˆ`i la

˙

i MBR cu’a

Windows. Tác gia’ cu˜ng se˜ nói cách phu

˙

c hoˆ`i, nhu’ng toˆ´t ho’n heˆ´t là ba

˙

n d¯o

˙

c cài LILO

ngay laˆ

˙

p tu´’c vào sector d¯aˆ`u tiên cu’a phân vùng d¯ã cài Linux.

4. Sau khi cài d¯a˘

˙

t xong, kho’’i d¯oˆ

˙

ng Linux ba˘`ng d¯ı˜a meˆ`m (neˆ´u nhu’ ba

˙

n d¯o

˙

c cài LILO vào

phân vùng cu’a Linux và không d¯oˆ

˙

ng gì d¯eˆ´n MBR, thì d¯ây là kha’ na˘ng duy nhaˆ´t).

5. Sao chép sector kho’’i d¯oˆ

˙

ng cu’a Linux vào moˆ

˙

t taˆ

˙

p tin; taˆ

˙

p tin này se˜ caˆ`n d¯eˆ’ trình kho’’i

d¯oˆ

˙

ng Windows NT/2000 có theˆ’ kho’’i d¯oˆ

˙

ng Linux. Vieˆ

˙

c sao chép thu

˙

’c hieˆ

˙

n nhu’sau: d¯aˆ`u

tiên ga˘´n moˆ

˙

t d¯ı˜a meˆ`m tra˘´ng (mo´’i mua thì càng toˆ´t),

kênh giao tác

[root]# mount -t vfat /dev/fd0 /mnt/floppy

chuyeˆ’n vào thu’ mu

˙

c /mnt/floppy

kênh giao tác

[root]# cd /mnt/floppy

và thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh

kênh giao tác

[root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1

d¯eˆ’ghi noˆ

˙

i dung sector kho’’i d¯oˆ

˙

ng cu’a d¯ı˜a

/dev/hda3

vào taˆ

˙

p tin

/mnt/floppy/bootsect.lnx

.

1

6. Tieˆ´p theo caˆ`n kho’’i d¯oˆ

˙

ng la

˙

i d¯eˆ’ vào Windows NT, ba˘`ng câu leˆ

˙

nh:

1

Ghi chú: neˆ´u d¯ı˜a C: (/dev/hda1) có d¯i

˙

nh da

˙

ng FAT, thì có theˆ’ ta

˙

o taˆ

˙

p tin bootsect.lnx trong thu’mu

˙

c goˆ

´ c cu’a

d¯ı˜a C:. Tác gia’ không bieˆ´t (chu’a thu’’) có theˆ’ kho’’i d¯oˆ

˙

ng không caˆ`n d¯ı˜a meˆ`m không, neˆ´u phân vùng chính d¯aˆ`u

tiên có d¯i

˙

nh da

˙

ng NTFS. Tuy nhiên o’’ d¯ây cu˜ng không có vaˆ´n d¯eˆ` gì, chı’ caˆ`n sao chép sector kho’’i d¯oˆ

˙

ng qua d¯ı˜a

meˆ`m nhu’ d¯ang trình bày. Ta

˙

m tho`’i nhân Linux còn chu’a hoˆ˜ tro

˙

’ toˆ

´ t vieˆ

˙

c ghi lên phân vùng NTFS.

background image

2.6 Windows NT và Linux: kho’’i d¯oˆ

˙

ng qua OS Loader cu’a NT

19

kênh giao tác

[root]# shutdown -h now

Vì MBR chu’a có gì thay d¯oˆ’i, nên Windows NT se˜ kho’’i d¯oˆ

˙

ng. Trong NT caˆ`n sao chép

taˆ

˙

p tin bootsect.lnx vào thu’ mu

˙

c goˆ

´ c cu’a d¯ı˜a C:, hay chính xác ho’n là vào thu’mu

˙

c goˆ

´ c

cu’a phân vùng mà tu`’ d¯ó kho’’i d¯oˆ

˙

ng Windows NT. D

¯ ây có theˆ’ là phân vùng FAT16 hay

phân vùng NTFS. D

¯ a˘

˙

c d¯ieˆ’m d¯eˆ’ nhaˆ

˙

n ra phân vùng này là hai taˆ

˙

p tin ntldr và boot.init

chu´’a trong d¯ó (nhu˜’ng taˆ

˙

p tin này có theˆ’ aˆ’n!). Taˆ

˙

p tin bootsect.lnx có theˆ’ d¯a˘

˙

t thuoˆ

˙

c tính

chı’ d¯o

˙

c (read-only).

7. Sau d¯ó tìm taˆ

˙

p tin boot.ini và thêm vào dòng sau:

C:\bootsect.lnx="LINUX"

(taˆ´t nhiên, trong daˆ´u ngoa˘

˙

c kép ba

˙

n d¯o

˙

c có theˆ’ d¯a˘

˙

t tên baˆ´t ky`.)

8. Vieˆ

˙

c còn la

˙

i là kho’’i d¯oˆ

˙

ng la

˙

i máy tính moˆ

˙

t laˆ`n nu˜’a, và trong trình d¯o’n cho

˙

n heˆ

˙

d¯ieˆ`u

hành se˜ có LINUX. Neˆ´u cho

˙

n LINUX, thì LILO se˜ d¯u’o

˙

’c cha

˙

y và sau d¯ó nó (LILO) se˜

na

˙

p Linux.

Còn bây gio`’ chúng ta se˜ xem xét tru’o`’ng ho

˙

’p ba

˙

n d¯o

˙

c (do vô tình hay coˆ

´ ý) cài d¯a˘

˙

t LILO

vào ba’n ghi kho’’i d¯oˆ

˙

ng chính cu’a d¯ı˜a (Master Boot Record, MBR). Trong tru’o`’ng ho

˙

’p này ba’n

ghi kho’’i d¯oˆ

˙

ng Windows NT (hay 2000) se˜ bi

˙

xóa, và vieˆ

˙

c kho’’i d¯oˆ

˙

ng Windows NT (bu’o´’c thu´’

6 o’’ trên) là không theˆ’. Neˆ´u nhu’ ba

˙

n d¯o

˙

c vaˆ˜n còn muoˆ

´ n su’’ du

˙

ng trình kho’’i d¯oˆ

˙

ng OS Loader

cu’a NT, chu´’ không muoˆ´n dùng LILO, thì nhu˜’ng bu’o´’c trên có thay d¯oˆ’i moˆ

˙

t chút: thay cho

bu’o´’c thu´’ 6 caˆ`n làm các thao tác sau.

1. Kho’’i d¯oˆ

˙

ng Windows NT tu`’ d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng (d¯ã ta

˙

o tru’o´’c khi cài d¯a˘

˙

t Linux, neˆ´u

không có thì ba

˙

n d¯o

˙

c caˆ`n tìm moˆ

˙

t máy khác d¯ang cha

˙

y Windows NT roˆ`i ta

˙

o). Trong

trình d¯o’n (thu

˙

’c d¯o’n) cu’a trình kho’’i d¯oˆ

˙

ng caˆ`n cho

˙

n leˆ

˙

nh Recover, roˆ`i cho

˙

n cheˆ´ d¯oˆ

˙

Command mode. Sau d¯ó d¯a˘ng nhaˆ

˙

p vào tài khoa’n nhà qua’n tri

˙

(administrator).

2. Phu

˙

c hoˆ`i la

˙

i ba’n ghi kho’’i d¯oˆ

˙

ng chính cu’a d¯ı˜a. Su’’ du

˙

ng câu leˆ

˙

nh fdisk /mbr. Tác gia’

dùng leˆ

˙

nh này thành công, ma˘

˙

c dù trong moˆ

˙

t soˆ

´ bài báo nói cách phu

˙

c hoˆ`i MBR nhu’

vaˆ

˙

y không pha’i lúc nào cu˜ng làm vieˆ

˙

c. Trong Windows 2000 có các leˆ

˙

nh chuyên dùng

fixboot và fixmbr (cha

˙

y tu`’ console phu

˙

c hoˆ`i heˆ

˙

thoˆ

´ ng). Cha

˙

y hai leˆ

˙

nh này theo thu´’ tu

˙

d¯ã chı’ ra. Sau d¯ó Windows 2000 se˜ kho’’i d¯oˆ

˙

ng bình thu’o`’ng.

3. Kho’’i d¯oˆ

˙

ng la

˙

i máy tính tu`’ d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng Linux và d¯a˘ng nhaˆ

˙

p vào heˆ

˙

thoˆ

´ ng vo´’i

quyeˆ`n ngu’o`’i dùng root.

4. Nhaˆ

˙

p leˆ

˙

nh

cd /etc

và mo’’ taˆ

˙

p tin

lilo.conf

. O

’’ d¯aˆ`u taˆ

˙

p tin này có liên keˆ´t d¯eˆ´n phân

vùng kho’’i d¯oˆ

˙

ng theo ma˘

˙

c d¯i

˙

nh, ví du

˙

,

/dev/hda

.

5. Dùng baˆ´t ky` trình soa

˙

n tha’o nào, ví du

˙

, CoolEdit cu’a Midnight Commander, d¯eˆ’ thay

theˆ´ giá tri

˙

này thành phân vùng d¯ã cài Linux lên (chính xác ho’n là thành phân vùng

d¯u’o

˙

’c ga˘´n nhu’ goˆ

´ c (/) cu’a Linux). Neˆ´u Linux d¯u’o

˙

’c cài vào phân vùng

/dev/hda3

, thì

caˆ`n ghi cái d¯ó, tu´’c là thay theˆ´

/dev/hda

thành

/dev/hda3

. Neˆ´u nhu’ ba

˙

n d¯o

˙

c không

nho´’ d¯ã cài Linux vào d¯âu, thì hãy cha

˙

y câu leˆ

˙

nh

mount

và tìm keˆ´t qua’ tu’o’ng tu

˙

’ nhu’

sau

2

:

2

có nghı˜a là tìm phân vùng d¯ã ga˘´n vào thu’ mu

˙

c goˆ

´ c /, trong ví du

˙

này là /dev/hda3

background image

20

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

kênh giao tác

/dev/hda3 on / type reiserfs (rw)

6. Cha

˙

y leˆ

˙

nh

/sbin/lilo

d¯eˆ’ ghi trình kho’’i d¯oˆ

˙

ng vào phân vùng /dev/hda3 (caˆ`n cha

˙

y

leˆ

˙

nh

lilo

không có tham soˆ

´ ). Se˜ có ca’nh báo veˆ` vieˆ

˙

c phân vùng không pha’i là d¯aˆ`u

tiên trên d¯ı˜a. D

¯ ây chính là d¯ieˆ`u chúng ta caˆ`n, ba’n ghi kho’’i d¯oˆ

˙

ng cu’a Windows d¯u’o

˙

’c giu

˜’

nguyên ve

˙

n.

7. Thu

˙

’c hieˆ

˙

n các bu’o´’c 6-8 nhu’ o’’ trên.

Deˆ˜ dàng d¯oán ra ra˘`ng, "quy trình" phu´’c ta

˙

p vo´’i hai laˆ`n kho’’i d¯oˆ

˙

ng la

˙

i chı’ d¯eˆ’ chuyeˆ’n sector

kho’’i d¯oˆ

˙

ng Linux tu`’ MBR vào sector d¯aˆ`u tiên cu’a phân vùng dành cho Linux, và phu

˙

c hoˆ`i

MBR cu’a Windows.

Quá trình cài d¯a˘

˙

t Linux keˆ´t thúc o’’ d¯ây. Ba

˙

n d¯o

˙

c d¯ã có theˆ’ cho

˙

n HD

¯ H se˜ kho’’i d¯oˆ

˙

ng và d¯ieˆ`u

khieˆ’n máy tính cu’a mình.

2.7

Su’’ du

˙

ng trình kho’’i d¯oˆ

˙

ng LILO

2.7.1

Cài d¯a˘

˙

t và caˆ

´ u hình LILO

Nhu’ d¯ã nói trong phaˆ`n lu

˙

’a cho

˙

n chu’o’ng trình kho’’i d¯oˆ

˙

ng, neˆ´u trên máy d¯ã cài Windows 98

vo´’i heˆ

˙

thoˆ

´ ng taˆ

˙

p tin FAT16, thì lu

˙

’a cho

˙

n toˆ

´ t ho’n cho trình kho’’i d¯oˆ

˙

ng là chu’o’ng trình có trong

thành phaˆ`n cu’a mo

˙

i ba’n phân phoˆ

´ i HD

¯ H Linux – LILO (LInux LOader).

Gioˆ

´ ng nhu’ tru’o`’ng ho

˙

’p Windows NT, chúng ta se˜ d¯u’a ra các bu’o´’c caˆ`n thu

˙

’c hieˆ

˙

n d¯eˆ’ có theˆ’

kho’’i d¯oˆ

˙

ng nhieˆ`u HD

¯ H.

1. Tru’o´’c khi cài d¯a˘

˙

t Linux hãy chuaˆ’n bi

˙

d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng Windows.

2. Dùng chu’o’ng trình Partition Magic d¯eˆ’ laˆ´y phaˆ`n không gian d¯ı˜a còn troˆ´ng và trên d¯ó

ta

˙

o ra moˆ

˙

t phân vùng ext2(3) (heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux) và moˆ

˙

t phân vùng swap. Cách

chia oˆ’ d¯ı˜a d¯ã nói o’’ trên. Neˆ´u dung lu’o

˙

’ng oˆ’ d¯ı˜a cu´’ng vu’o

˙

’t quá 8,4 Gbyte thì hãy d¯o

˙

c ky˜

các phaˆ`n

2.3

2.5

.

3. Cài d¯a˘

˙

t Linux theo chı’ daˆ˜n d¯i kèm vo´’i ba’n phân phoˆ´i. Caˆ`n nho´’ ra˘`ng, neˆ´u ba

˙

n muoˆ

´ n su’’

du

˙

ng trình kho’’i d¯oˆ

˙

ng LILO, thì trong quá trình cài da˘

˙

t Linux caˆ`n cho

˙

n phu’o’ng án cài

LILO vào ba’n ghi kho’’i d¯oˆ

˙

ng chính (Master Boot Record). Ta

˙

o các d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng

theo nguyên ta˘´c là không ba˘´t buoˆ

˙

c, nhu’ng tác gia’ khuyên ba

˙

n d¯o

˙

c nên làm.

3

4. Bu’o´’c tieˆ´p theo caˆ`n caˆ´u hình LILO d¯eˆ’ có theˆ’ kho’’i d¯oˆ

˙

ng các HD

¯ H theo lu

˙

’a cho

˙

n. LILO

d¯u’o

˙

’c caˆ

´ u hình ba˘`ng taˆ

˙

p tin

/etc/lilo.conf

và câu leˆ

˙

nh

/sbin/lilo

. Câu leˆ

˙

nh này

dùng d¯eˆ’ cài d¯a˘

˙

t (hay cài d¯a˘

˙

t la

˙

i) LILO.

Chúng ta xem xét moˆ

˙

t ví du

˙

nho’ cu’a taˆ

˙

p tin caˆ´u hình LILO. Trong ví du

˙

này chúng

ta se˜ coi nhu’ thieˆ´t bi

˙

/dev/hda1

là phân vùng vo´’i DOS/Windows, còn phân vùng

3

Ghi chú. Trình kho’’i d¯oˆ

˙

ng LILO không ba˘´t buoˆ

˙

c pha’i cài d¯a˘

˙

t vào ba’n ghi kho’’i d¯oˆ

˙

ng chính cu’a d¯ı˜a, LILO

có theˆ’ na˘`m o’’ ba’n ghi kho’’i d¯oˆ

˙

ng cu’a phân vùng chính d¯u’o

˙

’c kích hoa

˙

t và chu´’a thu’ mu

˙

c goˆ

´ c cu’a Linux hoa˘

˙

c thaˆ

˙

m

chí trên phân vùng lôgíc trong phân vùng mo’’ roˆ

˙

ng. Trong tru’o`’ng ho

˙

’p d¯ó MBR caˆ`n pha’i có kha’ na˘ng na

˙

p LILO,

ví du

˙

khi MBR là trình kho’’i d¯oˆ

˙

ng cu’a MS-DOS hay Windows. Tuy nhiên tác gia’ chu’a nhìn thaˆ´y su

˙

’ caˆ`n thieˆ

´ t

cu’a u´’ng du

˙

ng này (neˆ´u d¯ã cho

˙

n LILO làm trình kho’’i d¯oˆ

˙

ng chính thì hãy su’’ du

˙

ng cho "tro

˙

n boˆ

˙

"), vì theˆ´ chúng ta

se˜ không xem xét d¯eˆ´n.

background image

2.7 Su’’ du

˙

ng trình kho’’i d¯oˆ

˙

ng LILO

21

/dev/hda2

chu´’a Linux. Trong tru’o`’ng ho

˙

’p d¯ó

/etc/lilo.conf

có da

˙

ng gaˆ`n nhu’

sau:

kênh giao tác

boot = /dev/hda2

compact

delay = 50

# message = /boot/bootmesg.txt

root = current

image = /boot/vmlinuz-2.4.22

label = linux

read-only

other = /dev/hda1

table = /dev/hda

label = dos

Vài lo`’i gia’i thích cho ví du

˙

: Dòng

boot

cho bieˆ´t thieˆ´t bi

˙

kho’’i d¯oˆ

˙

ng.

Dòng

compact

baˆ

˙

t cheˆ´ d¯oˆ

˙

nén taˆ

˙

p tin map – taˆ

˙

p tin chu´’a d¯a˘

˙

c tính cu’a nhân d¯u’o

˙

’c kho’’i

d¯oˆ

˙

ng; tính na˘ng (nén) này ta˘ng toˆ

´ c d¯oˆ

˙

cu’a kho’’i d¯oˆ

˙

ng d¯aˆ`u.

Câu leˆ

˙

nh

message

dùng d¯eˆ’ d¯u’a ra thông báo theo ý muoˆ´n khi kho’’i d¯oˆ

˙

ng.

Ba˘´t d¯aˆ`u tu`’ dòng

image

là các phaˆ`n nho’ cu’a taˆ

˙

p tin caˆ´u hình, moˆ˜i phaˆ`n tu’o’ng u´’ng vo´’i

moˆ

˙

t heˆ

˙

d¯ieˆ`u hành se˜ kho’’i d¯oˆ

˙

ng theo lu

˙

’a cho

˙

n cu’a ngu’o`’i dùng. Trong moˆ˜i phaˆ`n nhu’vaˆ

˙

y

có moˆ

˙

t dòng

label

. Trên dòng này ghi tên caˆ`n nhaˆ

˙

p vào daˆ´u nha˘´c LILO hay tên se˜

hieˆ’n thi

˙

trong trình d¯o’n cu’a LILO d¯eˆ’ có theˆ’ cho

˙

n HD

¯ H muoˆ

´ n kho’’i d¯oˆ

˙

ng. Neˆ´u nhu’ tên

không d¯u’o

˙

’c nhaˆ

˙

p sau khoa’ng tho`’i gian chı’ trên dòng

delay

(tính theo phaˆ`n mu’o`’i giây

– caˆ`n nhân vo´’i 0,1 giây), thì se˜ kho’’i d¯oˆ

˙

ng HD

¯ H theo ma˘

˙

c d¯i

˙

nh. Trong ví du

˙

này, se˜

kho’’i d¯oˆ

˙

ng Linux theo ma˘

˙

c d¯i

˙

nh, vì phaˆ`n caˆ´u hình tu’o’ng u´’ng vo´’i Linux na˘`m d¯aˆ`u tiên

trong taˆ

˙

p tin. Có theˆ’ chı’ ra heˆ

˙

d¯ieˆ`u hành d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng theo ma˘

˙

c d¯i

˙

nh khi thêm moˆ

˙

t

dòng có da

˙

ng

default=dos

, tu´’c là su’’ du

˙

ng tên d¯ã d¯a˘

˙

t trên dòng

label

.

Dòng

table=<device>

cho bieˆ´t tên thieˆ´t bi

˙

chu´’a ba’ng phân chia d¯ı˜a. LILO se˜ không

d¯u’a thông tin veˆ` phân chia d¯ı˜a cho heˆ

˙

d¯ieˆ`u hành d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng neˆ´u bieˆ´n này không

d¯u’o

˙

’c d¯u’a ra. (Moˆ

˙

t soˆ

´ heˆ

˙

d¯ieˆ`u hành có công cu

˙

khác d¯eˆ’ xác d¯i

˙

nh là d¯ã d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng

tu`’phân vùng nào.) D

¯ u`’ng quên ra˘`ng, caˆ`n thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh

/sbin/lilo

, sau khi thay

d¯oˆ’i chı’ daˆ˜n d¯eˆ´n ba’ng phân chia d¯ı˜a, tu´’c là thay d¯oˆ’i bieˆ´n

table

. Neˆ´u d¯a˘

˙

t dòng (go

˙

i

là phaˆ`n nho’ thì toˆ

´ t ho’n)

other = /dev/hda1

trong taˆ

˙

p tin

/etc/lilo.conf

, thì

trong thu’mu

˙

c goˆ

´ c cu’a d¯ı˜a

/dev/hda1

(d¯ı˜a C: trong heˆ

˙

thoˆ

´ ng thuaˆ

˙

t ngu

˜’Microsoft) caˆ`n

có trình kho’’i d¯oˆ

˙

ng phu

˙

(không pha’i là chính). Trên moˆ

˙

t máy cu’a tác gia’ o’’ d¯ó na˘`m trình

kho’’i d¯oˆ

˙

ng NT Loader (vì Windows NT d¯u’o

˙

’c cài d¯a˘

˙

t tru’o´’c Linux), và LILO kho’’i d¯oˆ

˙

ng

thành công Windows NT. Chı’ caˆ`n d¯a˘

˙

t tho`’i gian cho`’ kho’’i d¯oˆ

˙

ng trong taˆ

˙

p tin boot.ini

ba˘`ng không, d¯eˆ’ không thaˆ´y trình d¯o’n kho’’i d¯oˆ

˙

ng cu’a NT Loader. Tuy nhiên, neˆ´u vì moˆ

˙

t

lý do nào d¯ó ba

˙

n muoˆ

´ n thaˆ´y trình d¯o’n này thì giá tri

˙

timeout trong taˆ

˙

p tin boot.ini caˆ`n

d¯a˘

˙

t khác không (tho`’i gian cho`’ d¯u’o

˙

’c tính theo giây). D

¯ ieˆ`u này có theˆ’ caˆ`n thieˆ

´ t khi muoˆ´n

kho’’i d¯oˆ

˙

ng ca’ Windows 98 tu`’ trình d¯o’n cu’a NT Loader (trong tru’o`’ng ho

˙

’p này se˜ có 3

HD

¯ H: Linux, Windows NT và Windows 98, trong trình d¯o’n cu’a LILO neˆ

´ u cho

˙

n dos

thì se˜ hieˆ

˙

n ra trình d¯o’n cu’a NT Loader roˆ`i tu`’ d¯ó cho

˙

n moˆ

˙

t trong hai HD

¯ H Windows d¯eˆ’

kho’’i d¯oˆ

˙

ng).

Neˆ´u ba

˙

n d¯o

˙

c muoˆ

´ n kho’’i d¯oˆ

˙

ng Windows tru

˙

’c tieˆ

´ p tu`’ LILO, thì hãy thêm phaˆ`n nho’ sau

vào

/etc/lilo.conf

:

background image

22

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

kênh giao tác

other = /boot/bootsect.dos

label = win

trong d¯ó bootsect.dos laˆ´y tu`’ thu’ mu

˙

c goˆ

´ c cu’a oˆ’ d¯ı˜a chu´’a NT Loader.

5. Sau khi su’’a xong taˆ

˙

p tin

/etc/lilo.conf

theo ý muoˆ

´ n, caˆ`n cha

˙

y câu leˆ

˙

nh

/sbin/lilo

d¯eˆ’ nhu˜’ng thay d¯oˆ’i có hieˆ

˙

u lu

˙

’c. Câu leˆ

˙

nh này (trong tài lieˆ

˙

u hu’o´’ng daˆ˜n go

˙

i là map-

installer) cài d¯a˘

˙

t trình kho’’i d¯oˆ

˙

ng phu

˙

, mà se˜ d¯u’o

˙

’c kích hoa

˙

t trong laˆ`n kho’’i d¯oˆ

˙

ng tieˆ´p

theo. Tru’o´’c khi cha

˙

y

/sbin/lilo

d¯eˆ’ thay d¯oˆ’i bu’o´’c kho’’i d¯oˆ

˙

ng, hãy thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh

này vo´’i tham soˆ´

-t

. Khi có tham soˆ

´ này se˜ thu

˙

’c hieˆ

˙

n taˆ´t ca’ các thu’ tu

˙

c cài d¯a˘

˙

t trình

kho’’i d¯oˆ

˙

ng, tru`’vieˆ

˙

c thay d¯oˆ’i taˆ

˙

p tin map, ba’n ghi sector kho’’i d¯oˆ

˙

ng, và ba’ng phân chia oˆ’

d¯ı˜a, tu´’c là chı’ cha

˙

y thu’’ caˆ´u hình mo´’i. Neˆ´u cho thêm tùy cho

˙

n

-v

, thì ba

˙

n d¯o

˙

c se˜ d¯u’o

˙

’c

bieˆ´t thêm thông tin chi tieˆ´t veˆ` nhu˜’ng gì leˆ

˙

nh

/sbin/lilo

se˜ thu

˙

’c hieˆ

˙

n.

Khi

/sbin/lilo

ghi d¯è noˆ

˙

i dung mo´’i lên sector kho’’i doˆ

˙

ng, thì noˆ

˙

i dung cu˜ cu’a

sector này se˜ tu

˙

’ d¯oˆ

˙

ng d¯u’o

˙

’c ghi nho´’ vào moˆ

˙

t taˆ

˙

p tin. Theo ma˘

˙

c d¯i

˙

nh d¯ó là taˆ

˙

p tin

/boot/boot.NNNN

, trong d¯ó NNNN tu’o’ng u´’ng vo´’i soˆ´ cu’a thieˆ´t bi

˙

, ví du

˙

, 0300 –

tu’o’ng u´’ng

/dev/hda

, 0800 –

/dev/sda

, v.v. . . Neˆ´u taˆ

˙

p tin này d¯ã có trên d¯ı˜a, thì nó

không bi

˙

ghi d¯è lên. Tuy nhiên có theˆ’ d¯a˘

˙

t moˆ

˙

t tên khác d¯e’ ghi sector kho’’i d¯oˆ

˙

ng, không

nhaˆ´t thieˆ´t pha’i dùng

/boot/boot.NNNN

.

Taˆ

˙

p tin

/boot/boot.NNNN

có theˆ’ su’’ du

˙

ng d¯eˆ’ phu

˙

c hoˆ`i noˆ

˙

i dung cu˜ cu’a sector kho’’i

d¯oˆ

˙

ng, neˆ´u không còn cách phu

˙

c hoˆ`i nào khác d¯o’n gia’n ho’n. Câu leˆ

˙

nh d¯eˆ’ thu

˙

’c hieˆ

˙

n có

da

˙

ng:

kênh giao tác

[root:~#] dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1

hay

kênh giao tác

[root:~#] dd if=/boot/boot.0800 of=/dev/hda bs=446 count=1

(bs=446 vì chı’ phu

˙

c hoˆ`i chu’o’ng trình kho’’i d¯oˆ

˙

ng, và không d¯oˆ

˙

ng gì d¯eˆ´n ba’ng phân chia

d¯ı˜a).

Cu˜ng có theˆ’ phu

˙

c hoˆ`i MBR cu˜ khi caˆ`n thieˆ´t ba˘`ng câu leˆ

˙

nh

/sbin/lilo

vo´’i tùy cho

˙

n

-u

. Nhu’ng caˆ`n bieˆ´t ra˘`ng, câu leˆ

˙

nh này chı’ làm vieˆ

˙

c d¯úng vo´’i d¯ieˆ`u kieˆ

˙

n là thu’mu

˙

c LILO

(tu´’c là

/boot

) không thay d¯oˆ’i keˆ’ tu`’ khi cài d¯a˘

˙

t.

MBR cu’a MS-DOS có theˆ’ d¯u’o

˙

’c phu

˙

c hoˆ`i ba˘`ng cách kho’’i d¯oˆ

˙

ng vào DOS tu`’ d¯ı˜a meˆ`m

(CD) roˆ`i cha

˙

y câu leˆ

˙

nh fdisk /mbr (xem trên). Leˆ

˙

nh này chı’ thay d¯oˆ’i mã chu’o’ng trình

kho’’i d¯oˆ

˙

ng na˘`m trong MBR, mà không thay d¯oˆ’i ba’ng phân chia d¯ı˜a.

6. Sau khi cài d¯a˘

˙

t la

˙

i trình kho’’i d¯oˆ

˙

ng caˆ`n kho’’i d¯oˆ

˙

ng la

˙

i máy tính và thu’’ các phu’o’ng án

kho’’i d¯oˆ

˙

ng khác nhau d¯eˆ’ kieˆ’m tra.

D

¯ eˆ’ keˆ

´ t thúc phaˆ`n nói veˆ` LILO này chúng ta se˜ xem xét vài khó kha˘n có theˆ’ xuaˆ´t hieˆ

˙

n khi

su’’ du

˙

ng LILO, và cách kha˘´c phu

˙

c (neˆ´u có theˆ’).

Khi LILO d¯u’o

˙

’c na

˙

p, nó d¯u’a ra màn hình tu`’ "LILO". Khi này moˆ˜i chu˜’ cái bieˆ’u thi

˙

su

˙

’ keˆ

´ t

thúc moˆ

˙

t hành d¯oˆ

˙

ng nào d¯ó hay keˆ´t thúc moˆ

˙

t bu’o´’c na

˙

p LILO. Neˆ´u kho’’i d¯oˆ

˙

ng bi

˙

bi

˙

ngu’ng

giu

˜’a chu`’ng, thì qua soˆ

´ chu˜’ cái d¯u’a ra có theˆ’ nhaˆ

˙

n d¯i

˙

nh veˆ` nguyên nhân xuaˆ´t hieˆ

˙

n vaˆ´n d¯eˆ`.

background image

2.7 Su’’ du

˙

ng trình kho’’i d¯oˆ

˙

ng LILO

23

• Không chu

˜’cái nào hieˆ

˙

n ra – không có phaˆ`n nào cu’a LILO d¯u’o

˙

’c na

˙

p. Hoa˘

˙

c LILO không

d¯u’o

˙

’c cài d¯a˘

˙

t, hoa˘

˙

c phân vùng chu´’a LILO chu’a d¯u’o

˙

’c kích hoa

˙

t.

• L [mã loˆ˜i] – trình kho’’i d¯oˆ

˙

ng chính d¯ã d¯u’o

˙

’c na

˙

p và d¯ã cha

˙

y (tu´’c là d¯ã nhaˆ

˙

n d¯u’o

˙

’c quyeˆ`n

d¯ieˆ`u khieˆ’n), nhu’ng nó không theˆ’ na

˙

p trình kho’’i d¯oˆ

˙

ng phu

˙

. Mã loˆ˜i hai ký tu

˙

’ cho bieˆ

´ t

nguyên nhân cu

˙

theˆ’ cu’a vaˆ´n d¯eˆ` (cách gia’i mã caˆ`n tìm trong tài lieˆ

˙

u ky˜ thuaˆ

˙

t cu’a LILO).

Thông thu’o`’ng thì vaˆ´n d¯eˆ` na’y sinh do oˆ’ d¯ı˜a xaˆ´u (có khuyeˆ´t taˆ

˙

t) hay không d¯a˘

˙

t d¯úng caˆ´u

trúc hình ho

˙

c cu’a d¯ı˜a. Neˆ´u LILO không du`’ng la

˙

i o’’ d¯ây, mà tieˆ´p tu

˙

c d¯u’a ra moˆ

˙

t chuoˆ˜i

vô taˆ

˙

n các mã loˆ˜i, thì vaˆ´n d¯eˆ` thu’o`’ng deˆ˜ gia’i quyeˆ´t.

• LI – trình kho’’i d¯oˆ

˙

ng chính d¯ã na

˙

p d¯u’o

˙

’c trình kho’’i d¯oˆ

˙

ng phu

˙

, nhu’ng không cha

˙

y d¯u’o

˙

’c

nó. Có theˆ’ là loˆ˜i d¯u’a caˆ´u trúc hình ho

˙

c cu’a d¯ı˜a, hoa˘

˙

c taˆ

˙

p tin

boot/boot.b

bi

˙

di chuyeˆ’n

mà ngu’o`’i dùng quên không cha

˙

y

/sbin/lilo

.

• LIL — trình kho’’i d¯oˆ

˙

ng phu

˙

d¯ã d¯u’o

˙

’c cha

˙

y, nhu’ng nó không theˆ’ na

˙

p ba’ng mô ta’ tu`’ taˆ

˙

p

tin map. Nguyên nhân thu’o`’ng do khuyeˆ´t taˆ

˙

t cu’a oˆ’ d¯ı˜a hoa˘

˙

c không d¯u’a d¯úng caˆ´u trúc

hình ho

˙

c cu’a d¯ı˜a.

• LIL? – trình kho’’i d¯oˆ

˙

ng phu

˙

d¯ã d¯u’o

˙

’c na

˙

p vào d¯i

˙

a chı’ không d¯úng. Thông thu’o`’ng do loˆ˜i

d¯u’a ra caˆ´u trúc hình ho

˙

c cu’a d¯ı˜a hoa˘

˙

c taˆ

˙

p tin

/boot/boot.b

bi

˙

di chuyeˆ’n mà ngu’o`’i

dùng quên không cha

˙

y

/sbin/lilo

.

• LIL- – ba’ng mô ta’ trong taˆ

˙

p tin map bi

˙

phá hu’y. Thông thu’o`’ng do loˆ˜i d¯u’a ra caˆ´u trúc

hình ho

˙

c cu’a d¯ı˜a hoa˘

˙

c taˆ

˙

p tin

/boot/boot.b

bi

˙

di chuyeˆ’n mà ngu’o`’i dùng quên không

cha

˙

y

/sbin/lilo

.

• LILO – taˆ´t ca’ các phaˆ`n cu’a LILO d¯u’o

˙

’c na

˙

p thành công.

2.7.2

Cài d¯a˘

˙

t các heˆ

˙

d¯ieˆ`u hành khác sau Linux

Khi cài d¯a˘

˙

t MS-DOS và Windows 95/98, trình kho’’i d¯oˆ

˙

ng cu’a chúng (không phu

˙

thuoˆ

˙

c vào ý

muoˆ

´ n cu’a ba

˙

n d¯o

˙

c) d¯u’o

˙

’c ghi vào Master Boot Record (MBR), và daˆ

´ u kích hoa

˙

t trong ba’ng

phân vùng se˜ d¯u’o

˙

’c chuyeˆ’n sang phân vùng MS-DOS (Windows 95/98). Mà trình kho’’i d¯oˆ

˙

ng

MS-DOS và Windows 95/98 chı’ "bieˆ´t" chuyeˆ’n quyeˆ`n d¯ieˆ`u khieˆ’n cho sector d¯aˆ`u tiên cu’a
phân vùng kích hoa

˙

t. Nhu’ theˆ´, neˆ´u nhu’ ba

˙

n d¯o

˙

c d¯aˆ`u tiên cài d¯a˘

˙

t Linux, và sau d¯ó mo´’i cài d¯a˘

˙

t

Windows 95/98 hay MS-DOS, thì Linux se˜ không theˆ’ kho’’i d¯oˆ

˙

ng. Có theˆ’ phu

˙

c hoˆ`i la

˙

i LILO

ba˘`ng cách cha

˙

y leˆ

˙

nh

/sbin/lilo

(neˆ´u LILO d¯u’o

˙

’c cài vào MBR), hoa˘

˙

c kích hoa

˙

t phân vùng

chu´’a LILO (neˆ´u LILO d¯u’o

˙

’c cài vào phân vùng chính).

Khi có vaˆ´n d¯eˆ` sau khi cài d¯a˘

˙

t moˆ

˙

t heˆ

˙

d¯ieˆ`u hành khác sau Linux, thu’o`’ng có theˆ’ gia’i quyeˆ´t

ba˘`ng cách kho’’i d¯oˆ

˙

ng vào Linux ba˘`ng d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng, su’’a la

˙

i taˆ

˙

p tin caˆ´u hình LILO (thêm

phaˆ`n nho’ cho HD

¯ H mo´’i), roˆ`i cha

˙

y

/sbin/lilo

.

2.7.3

Chuyeˆ’n thu’ mu

˙

c /boot lên phân vùng DOS

Nhu

˜’ng phiên ba’n nhân Linux mo´’i nhaˆ´t hoˆ˜ tro

˙

’ kha’ na˘ng d¯a˘

˙

t các taˆ

˙

p tin caˆ`n thieˆ´t trên giai d¯oa

˙

n

kho’’i d¯oˆ

˙

ng vào heˆ

˙

thoˆ

´ ng taˆ

˙

p tin MS-DOS (hay UMSDOS). Vì trong phaˆ`n lo´’n các tru’o`’ng ho

˙

’p

phân vùng DOS chieˆ´m các vùng d¯ı˜a o’’ d¯aˆ`u (không có ha

˙

n cheˆ´ cu’a BIOS), nên cho phép gia’i

quyeˆ´t nhieˆ`u vaˆ´n d¯eˆ` cu’a oˆ’ d¯ı˜a lo´’n, khi mà thu’mu

˙

c

/boot

không theˆ’ na˘`m trên phân vùng dành

cho Linux.

background image

24

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

D

¯ eˆ’ thu

˙

’c hieˆ

˙

n phu’o’ng án kho’’i d¯oˆ

˙

ng này, caˆ`n phân vùng DOS o’’ cheˆ´ d¯oˆ

˙

d¯o

˙

c/ghi, ta

˙

o trong

d¯ó moˆ

˙

t thu’ mu

˙

c (ví du

˙

,

/dos/linux

), và chuyeˆ’n taˆ´t ca’ các taˆ

˙

p tin tu`’ thu’ mu

˙

c

/boot

vào

d¯ó; thu’ mu

˙

c

/boot

d¯u’o

˙

’c chuyeˆ’n thành liên keˆ

´ t tu’o

˙

’ng tru’ng d¯eˆ

´ n thu’mu

˙

c

/dos/linux

; vi

˙

trí

mo´’i cu’a thu’ mu

˙

c

/boot

caˆ`n chı’ ra trong taˆ

˙

p tin

/etc/lilo.conf

, và cuoˆ

´ i cùng cha

˙

y leˆ

˙

nh

/sbin/lilo

.

2.8

Kho’’i d¯oˆ

˙

ng Linux tu`’ MS-DOS ba˘`ng loadlin.exe

Không chı’ các taˆ

˙

p tin kho’’i d¯oˆ

˙

ng và nhân có theˆ’ na˘`m trong phân vùng DOS, mà ca’ tieˆ´n trình

kho’’i d¯oˆ

˙

ng Linux nói chung có theˆ’ d¯u’o

˙

’c toˆ’ chu´’c tu`’ DOS. Kha’ na˘ng này thu

˙

’c hieˆ

˙

n nho`’ chu’o’ng

trình d¯a˘

˙

c bieˆ

˙

t loadlin.exe, do Hans Lermen (

lermen@elserv.ffm.fgan.de

vieˆ´t. Chu’o’ng trình

này thu’o`’ng có trên các d¯ı˜a cu’a ba’n phân phoˆ´i.

4

Loadlin.exe cung caˆ´p cách kho’’i d¯oˆ

˙

ng Linux tu`’ oˆ’ cu´’ng an toàn nhaˆ´t, khi có phân vùng

kích hoa

˙

t là DOS hay Windows. Phu’o’ng án kho’’i d¯oˆ

˙

ng này d¯u’o

˙

’c khuyên su’’ du

˙

ng cho ngu’o`’i

dùng Linux mo´’i. Phaˆ`n lo´’n ngu’o`’i dùng mo´’i (và không chı’ ho

˙

) không d¯u’ kiên nhaˆ˜n d¯eˆ’ d¯o

˙

c tài

lieˆ

˙

u raˆ´t hay nhu’ng raˆ´t dài (và la

˙

i vieˆ´t trên tieˆ´ng Anh nu˜’a) cu’a LILO. Vì theˆ´ ho

˙

thu’o`’ng su’’du

˙

ng

LILO không d¯úng cách, và keˆ´t qua’ là không theˆ’ kho’’i d¯oˆ

˙

ng d¯u’o

˙

’c baˆ

´ t ky` heˆ

˙

d¯ieˆ`u hành nào (tác

gia’ cu˜ng d¯ã ro’i vào tru’o`’ng ho

˙

’p nhu’ vaˆ

˙

y). D

¯ oˆ

´ i vo´’i nhu˜’ng ngu’o`’i dùng mo´’i thì se˜ thuaˆ

˙

n tieˆ

˙

n ho’n

khi su’’du

˙

ng loadlin.exe d¯eˆ’ kho’’i d¯oˆ

˙

ng và ba˘´t d¯aˆ`u tìm hieˆ’u Linux. Tuy nhiên, "không vào hang

co

˙

p sao ba˘´t d¯u’o

˙

’c co

˙

p".

Chu’o’ng trình loadlin.exe không yêu caˆ`u pha’i cài d¯a˘

˙

t, chı’ caˆ`n d¯a˘

˙

t chu’o’ng trình – taˆ

˙

p tin

loadlin.exe và nhân (a’nh cu’a nhân) lên moˆ

˙

t trong các d¯ı˜a mà DOS nhaˆ

˙

n ra. Có theˆ’ dùng

chu’o’ng trình này d¯eˆ’ kho’’i d¯oˆ

˙

ng Linux tu`’ CD hoa˘

˙

c tu`’ oˆ’ d¯ı˜a trong ma

˙

ng mà không caˆ`n su’’ du

˙

ng

d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng. Kha’ na˘ng này bieˆ´n loadlin.exe thành moˆ

˙

t công cu

˙

tuyeˆ

˙

t vo`’i d¯eˆ’ kho’’i d¯oˆ

˙

ng

Linux khi có vaˆ´n d¯eˆ` vo´’i LILO.

Phiên ba’n 1.6 cu’a loadlin.exe làm vieˆ

˙

c vo´’i mo

˙

i caˆ´u hình DOS và có raˆ´t ít ha

˙

n cheˆ´. Phiên

ba’n này có theˆ’ su’’ du

˙

ng boˆ

˙

nho´’ mo’’ roˆ

˙

ng; có theˆ’ na

˙

p các nhân lo´’n (các bzImage) và các a’nh

d¯ı˜a a’o (initrd) tru

˙

’c tieˆ

´ p vào vùng boˆ

˙

nho´’ na˘`m trên.

Vieˆ

˙

c su’’ du

˙

ng loadlin.exe không có nghı˜a là Linux làm vieˆ

˙

c du’o´’i DOS, vì chu’o’ng trình

này hoˆ˜ tro

˙

’ "kho’’i d¯oˆ

˙

ng lôgíc" cu’a máy tính, và sau d¯ó DOS d¯u’o

˙

’c thay theˆ

´ hoàn toàn ba˘`ng

Linux. Neˆ´u nhu’ ba

˙

n d¯o

˙

c muoˆ

´ n quay tro’’ la

˙

i DOS, thì pha’i kho’’i d¯oˆ

˙

ng la

˙

i máy tính, ví du

˙

, ba˘`ng

câu leˆ

˙

nh

reboot

.

Nhu’ vaˆ

˙

y, caˆ`n làm gì d¯eˆ’ có theˆ’ su’’ du

˙

ng chu’o’ng trình loadlin.exe.

• Trên máy tính cu’a ba

˙

n (taˆ´t nhiên vo´’i boˆ

˙

xu’’ lý 386 hoa˘

˙

c cao ho’n) caˆ`n cài d¯a˘

˙

t DOS hay

WINDOWS 95.

• Caˆ`n có a’nh nén cu’a nhân Linux (zImage, bzImage)

5

.

• Chu’o’ng trình loadlin.exe. Có theˆ’tìm thaˆ´y trên d¯ı˜a phân phoˆ´i o’’da

˙

ng không nén hay trong

gói LOADLIN16.TGZ. Gói nén này còn chu´’a hu’o´’ng daˆ˜n su’’du

˙

ng DOC\MANUAL.TXT,

taˆ

˙

p tin tham soˆ

´ ví du

˙

DOC\TEST.PAR, và hu’o´’ng daˆ˜n cách d¯u’a các tham soˆ´ DOC\PARAMS.DOC

(d¯u`’ng quên ra˘`ng chúng là nhu˜’ng taˆ

˙

p tin DOS).

4

moˆ

˙

t soˆ

´ ba’n phân phoˆ´i còn có gói cài d¯a˘

˙

t cho chu’o’ng trình này, thông thu’o`’ng ghi taˆ

˙

p tin loadlin.exe vào thu’

mu

˙

c cu’a ngu’o`’i dùng root

5

Ghi chú. zImage là d¯i

˙

nh da

˙

ng nhi

˙

phân cu˜ cu’a nhân, bzImage là d¯i

˙

nh da

˙

ng mo´’i ho’n (soˆ´ phiên ba’n nhân lo´’n

ho’n 1.3.73) có kích thu’o´’c lên to´’i 1 Mbyte, do d¯ó, nhân khi gia’i nén có kích thu’o´’c lên to´’i 2 Mbyte. Tieˆ´p theo
chúng ta se˜ chı’ nói veˆ` các taˆ

˙

p tin zImage, ma˘

˙

c dù ba

˙

n d¯o

˙

c có theˆ’ thay theˆ´ zImage thành bzImage

background image

2.8 Kho’’i d¯oˆ

˙

ng Linux tu`’ MS-DOS ba˘`ng loadlin.exe

25

Neˆ´u ba

˙

n cha

˙

y loadlin.exe không có tham soˆ

´

C:\LOADLIN> loadlin

thì se˜ nhaˆ

˙

n d¯u’o

˙

’c hu’o´’ng daˆ˜n su’’ du

˙

ng nga˘´n go

˙

n. Thuaˆ

˙

n tieˆ

˙

n ho’n d¯eˆ’ d¯o

˙

c hu’o´’ng daˆ˜n này, khi

cha

˙

y chu’o’ng trình vo´’i tham soˆ´

more

(gioˆ

´ ng trong Linux)

C:\LOADLIN> loadlin | more

Bây gio`’ chúng ta có theˆ’ xem xét các bu’o´’c cài d¯a˘

˙

t Linux khi su’’ du

˙

ng loadlin.exe d¯eˆ’ kho’’i

d¯oˆ

˙

ng.

1. Chia các phân vùng cho Linux (cách làm xem phaˆ`n

2.5

)

2. Cài d¯a˘

˙

t Linux vào phân vùng d¯ã chia. LILO caˆ`n cài d¯a˘

˙

t vào sector d¯aˆ`u tiên cu’a phân

vùng Linux d¯eˆ’ không ghi d¯è lên MBR và không bi

˙

maˆ´t kha’ na˘ng kho’’i d¯oˆ

˙

ng vào

Windows.

3. Sau khi keˆ´t thúc phaˆ`n cài d¯a˘

˙

t hãy kho’’i d¯oˆ

˙

ng Linux (neˆ´u không có cách nào khác, hãy

su’’ du

˙

ng d¯ı˜a meˆ`m kho’’i d¯oˆ

˙

ng). Ga˘´n phân vùng DOS (gia’ thieˆ´t là

/dev/hda1

, còn phân

vùng Linux là

/dev/hda3

):

kênh giao tác

[root]# mount -t vfat /dev/hda1 /mnt/C

Ta

˙

o thu’ mu

˙

c

/mnt/C/loadlin

và gia’i nén taˆ

˙

p tin LOADLIN16.TGZ vào d¯ó. Ngoài

ra sao chép tu`’ thu’ mu

˙

c

/boot

vào thu’ mu

˙

c d¯ó ca’ taˆ

˙

p tin chu´’a a’nh cu’a nhân Linux. Có

theˆ’ tìm taˆ

˙

p tin chu´’a a’nh cu’a nhân caˆ`n thieˆ´t nho`’ taˆ

˙

p tin

/etc/lilo.conf

: tìm trong

taˆ

˙

p tin caˆ´u hình dòng "image=..." và ba

˙

n d¯o

˙

c se˜ thaˆ´y tên caˆ`n thieˆ´t o’’ phía bên pha’i daˆ´u

ba˘`ng. Ví du

˙

tên cu’a taˆ

˙

p tin này là vmlinuz-2.4.22. Sao chép taˆ

˙

p tin vmlinuz-2.4.22 tu`’

/boot

vào

/mnt/C/loadlin

và d¯oˆ’i tên thành vmlinuz (vieˆ

˙

c d¯oˆ’i tên là không nhaˆ´t

thieˆ´t, và chı’ có ý nghı˜a thuaˆ

˙

n tieˆ

˙

n cho su’’ du

˙

ng):

kênh giao tác

[root]# cp /boot/vmlinuz-2.4.22 /mnt/C/loadlin/vmlinuz

4. Bây gio`’i kho’’i d¯oˆ

˙

ng la

˙

i máy tính vào DOS tru

˙

’c tieˆ

´ p (neˆ´u ba

˙

n d¯o

˙

c có Windows 95/98 thì

caˆ`n nhaˆ´n phím <F8> khi kho’’i d¯oˆ

˙

ng d¯eˆ’ hieˆ’n thi

˙

trình d¯o’n cho phép cho

˙

n DOS), hoa˘

˙

c

qua hoˆ

˙

p thoa

˙

i lu

˙

’a cho

˙

n khi nhaˆ´n leˆ

˙

nh ta˘´t máy (shutdown) Windows 95/98.

Sau khi vào DOS hãy chuyeˆ’n sang thu’ mu

˙

c C:\LOADLIN (leˆ

˙

nh CD \LOADLIN) và

thu

˙

’c hieˆ

˙

n leˆ

˙

nh

C:\LOADLIN> LOADLIN vmlinuz /dev/hda3 ro vga=ask

hoa˘

˙

c, neˆ´u ba

˙

n d¯o

˙

c muoˆ

´ n na

˙

p nhân cùng vo´’i oˆ’ d¯ı˜a RAM:

C:\LOADLIN> LOADLIN vmlinuz /dev/ram rw initrd=diskimage

Còn có theˆ’ ghi taˆ´t ca’ các tham soˆ

´ cu’a leˆ

˙

nh loadlin.exe vào taˆ

˙

p tin (ví du

˙

vo´’i tên params)

và go

˙

i câu leˆ

˙

nh d¯ó o’’ da

˙

ng sau:

C:\LOADLIN> LOADLIN @params

Kha’ na˘ng này d¯a˘

˙

c bieˆ

˙

t có ích khi d¯u’a nhieˆ`u tham soˆ´ dòng leˆ

˙

nh và khi d¯oˆ

˙

dài

cu’a dòng leˆ

˙

nh lo´’n ho’n 127 ký tu

˙

’. Mô ta’ d¯aˆ`y d¯u’ taˆ

´ t ca’ các tham soˆ´ cu’a câu leˆ

˙

nh

loadlin.exe có theˆ’ tìm thaˆ´y trong taˆ

˙

p tin PARAMS.DOC hoa˘

˙

c Internet trên trang

http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO.html

http://rsphy1.anu.edu/ gpg109/BootPrompt-

HOWTO.html

background image

26

Cài d¯a˘

˙

t HD

¯ H Linux trên cùng máy tính vo

´’i Windows

Bây gio`’ ba

˙

n d¯o

˙

c có theˆ’ su’’ du

˙

ng cách này d¯eˆ’ kho’’i d¯oˆ

˙

ng Linux. Công vieˆ

˙

c duy nhaˆ´t còn

la

˙

i là làm sao d¯eˆ’ không pha’i gõ leˆ

˙

nh loadlin vo´’i taˆ´t ca’ các tham soˆ´ sau moˆ˜i laˆ`n kho’’i d¯oˆ

˙

ng

la

˙

i. Có theˆ’ vieˆ´t thêm leˆ

˙

nh go

˙

i loadlin vào taˆ

˙

p tin autoexec.bat hoa˘

˙

c ta

˙

o moˆ

˙

t taˆ

˙

p tin leˆ

˙

nh (ví

du

˙

, linux.bat), và khi cha

˙

y taˆ

˙

p tin này, máy tính se˜ chuyeˆ’n vào cheˆ´ d¯oˆ

˙

DOS tru’o´’c, sau d¯ó thì

cha

˙

y Linux. Tác gia’ cho ra˘`ng nhu

˜’ng thông tin d¯ã d¯u’a ra o’’ trên d¯u’ d¯eˆ’ ta

˙

o taˆ

˙

p tin bat caˆ`n thieˆ´t.

Caˆ`n nói thêm ra˘`ng, không d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng Linux tu`’ giao dieˆ

˙

n d¯oˆ` ho

˙

a DOS/Windows và caˆ`n

ta˘´t moˆ

˙

t vài tùy cho

˙

n trong taˆ

˙

p tin aˆ’n C:\MSDOS.SYS (d¯ây là taˆ

˙

p tin va˘n ba’n thông thu’o`’ng),

ba˘`ng cách thêm vào hai dòng sau (neˆ´u chu’a có):

BootGUI=0

Logo=0

Dòng d¯aˆ`u tiên ta˘´t giao dieˆ

˙

n d¯oˆ` ho

˙

a, và DOS se˜ d¯u’o

˙

’c kho’’i d¯oˆ

˙

ng thay cho Windows 95/98.

(D

¯ eˆ’ cha

˙

y giao dieˆ

˙

n d¯oˆ` ho

˙

a, caˆ`n nhaˆ

˙

p câu leˆ

˙

nh C:> win).

Logo=0 ta˘´t vieˆ

˙

c hieˆ’n thi

˙

bieˆ’u tu’o

˙

’ng Windows (cu’’a soˆ’). Vaˆ

´ n d¯eˆ` o’’ choˆ˜, d¯oˆ´i vo´’i moˆ

˙

t soˆ

´ ca

˙

c

màn hình Linux se˜ d¯u’a ra moˆ

˙

t màn hình troˆ

´ ng roˆ˜ng sau khi kho’’i d¯oˆ

˙

ng, neˆ´u nhu’ có hieˆ’n thi

˙

bieˆ’u tu’o

˙

’ng Windows.

background image

Chu’o’ng 3

Bash

Toˆ

´ t goˆ˜ ho’n toˆ´t nu’o´’c so’n

– ca dao tu

˙

c ngu

˜’ Vieˆ

˙

t Nam

Trong phaˆ`n này chúng ta se˜ d¯eˆ` caˆ

˙

p d¯eˆ´n vaˆ´n d¯eˆ` làm vieˆ

˙

c vo´’i Linux o’’ cheˆ´ d¯oˆ

˙

text, hay còn

d¯u’o

˙

’c go

˙

i là console hoa˘

˙

c terminal. Nhu

˜’ng ngu’o`’i dùng Linux mo´’i (newbie) thu’o`’ng nghı˜ se˜

cha˘’ng bao gio`’ làm vieˆ

˙

c o’’ cheˆ´ d¯oˆ

˙

này, vì d¯ã có giao dieˆ

˙

n d¯oˆ` ho

˙

a. Tuy nhiên d¯ây là moˆ

˙

t ý kieˆ´n

sai laˆ`m, bo’’i vì raˆ´t nhieˆ`u công vieˆ

˙

c có theˆ’ thu

˙

’c hieˆ

˙

n nhanh và thuaˆ

˙

n tieˆ

˙

n trong cheˆ´ d¯oˆ

˙

này ho’n

là su’’ du

˙

ng giao dieˆ

˙

n d¯oˆ` ho

˙

a. Và dù sao thì cheˆ´ d¯oˆ

˙

text cu’a HD

¯ H Linux không pha’i là cheˆ

´ d¯oˆ

˙

text moˆ

˙

t tieˆ´n trình cu’a MS-DOS. Vì Linux là HD

¯ H d¯a tieˆ

´ n trình, nên ngay trong cheˆ´ d¯oˆ

˙

text

d¯ã có kha’ na˘ng làm vieˆ

˙

c trong vài cu’’a soˆ’. Và d¯eˆ’ soa

˙

n tha’o moˆ

˙

t taˆ

˙

p tin va˘n ba’n không nhaˆ´t

thieˆ´t pha’i cha

˙

y các trình soa

˙

n tha’o lo´’n và chaˆ

˙

m cha

˙

p (d¯a˘

˙

c bieˆ

˙

t trên các máy có caˆ´u hình phaˆ`n

cu´’ng thaˆ´p) cu’a môi tru’o`’ng d¯oˆ` ho

˙

a.

3.1

Heˆ

˙

vo’ là gì?

Chúng ta thu’o`’ng nói "ngu’o`’i dùng làm vieˆ

˙

c vo´’i heˆ

˙

d¯ieˆ`u hành". D

¯ ieˆ`u này không hoàn toàn

d¯úng, vì trên thu

˙

’c teˆ

´ "liên heˆ

˙

" vo´’i ngu’o`’i dùng d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n bo’’i moˆ

˙

t chu’o’ng trình d¯a˘

˙

c bieˆ

˙

t.

Có hai da

˙

ng cu’a chu’o’ng trình d¯ã d¯eˆ` caˆ

˙

p - heˆ

˙

vo’, hay shell, d¯eˆ’ làm vieˆ

˙

c trong cheˆ´ d¯oˆ

˙

text

(giao dieˆ

˙

n dòng leˆ

˙

nh) và giao dieˆ

˙

n d¯oˆ` ho

˙

a GUI (Graphical User Interface), thu

˙

’c hieˆ

˙

n "liên

heˆ

˙

" vo´’i ngu’o`’i dùng trong môi tru’o`’ng d¯oˆ` ho

˙

a. Caˆ`n nói ngay ra˘`ng, baˆ´t ky` chu’o’ng trình nào

trong Linux có theˆ’ kho’’i d¯oˆ

˙

ng tu`’ dòng leˆ

˙

nh cu’a heˆ

˙

vo’ (neˆ´u máy chu’ X d¯ã cha

˙

y), cu˜ng nhu’

qua giao dieˆ

˙

n d¯oˆ` ho

˙

a. Cha

˙

y chu’o’ng trình tu`’ dòng leˆ

˙

nh cu’a heˆ

˙

vo’ tu’o’ng d¯u’o’ng vo´’i vieˆ

˙

c nháy

(d¯úp) chuoˆ

˙

t lên bieˆ’u tu’o

˙

’ng cu’a chu’o’ng trình trong GUI. D

¯ u’a các tham soˆ

´ cho chu’o’ng trình

trên dòng leˆ

˙

nh tu’o’ng d¯u’o’ng vo´’i vieˆ

˙

c chúng ta kéo và tha’ cái gì d¯ó lên bieˆ’u tu’o

˙

’ng chu’o’ng trình

trong môi tru’o`’ng d¯oˆ` ho

˙

a. Nhu’ng ma˘

˙

t khác, moˆ

˙

t soˆ

´ chu’o’ng trình không theˆ’ cha

˙

y o’’ GUI và chı’

có theˆ’ thu

˙

’c hieˆ

˙

n tu`’ dòng leˆ

˙

nh. Nói ngoài leˆ` moˆ

˙

t chút, tên go

˙

i "heˆ

˙

vo’" bi

˙

pha’n d¯oˆ

´ i raˆ´t nhieˆ`u.

Theo ý kieˆ´n cu’a moˆ

˙

t soˆ

´ chuyên gia ngôn ngu˜’cu˜ng nhu’chuyên gia Linux thì nên go

˙

i chu’o’ng

trình này moˆ

˙

t cách d¯úng ho’n là "trình xu’’ lý leˆ

˙

nh" hay "trình biên di

˙

ch leˆ

˙

nh". Tuy nhiên, tên

go

˙

i "heˆ

˙

vo’" (shell) d¯u’o

˙

’c dùng cho các chu’o’ng trình dùng d¯eˆ’ biên di

˙

ch leˆ

˙

nh trong cheˆ´ d¯oˆ

˙

text

trên mo

˙

i heˆ

˙

thoˆ

´ ng UNIX. Trên các heˆ

˙

thoˆ

´ ng UNIX d¯aˆ`u tiên có moˆ

˙

t chu’o’ng trình, go

˙

i là

sh

,

vieˆ´t ta˘´t cu’a

shell

. Sau d¯ó, vài bieˆ´n theˆ’ cu’a sh d¯u’o

˙

’c phát trieˆ’n và làm toˆ

´ t ho’n, trong d¯ó có

Bourne shell

- phiên ba’n mo’’ roˆ

˙

ng cu’a

sh

, vieˆ´t bo’’i Steve Bourne. Du

˙

’ án GNU (du

˙

’ án

phát trieˆ’n chu’o’ng trình u´’ng du

˙

ng cu’a Stollman, xem

http://www.gnu.org/

sau d¯ó cho ra d¯o`’i

heˆ

˙

vo’

bash

, tên go

˙

i cu’a nó d¯u’o

˙

’c gia’i mã ra là

Bourne-again shell

, tu´’c là "la

˙

i là heˆ

˙

vo’

background image

28

Bash

cu’a Bourne". Trên tieˆ´ng Anh d¯ây là moˆ

˙

t cách cho’i chu˜’, vì tu`’ Bourne d¯o

˙

c gioˆ

´ ng vo´’i tu`’ borne

(sinh ra, d¯e’ ra), và nhu’ theˆ´ bash còn có theˆ’ gia’i mã là "shell d¯u’o

˙

’c sinh ra laˆ`n hai". Tieˆ

´ p theo

chúng ta se˜ chı’ xem xét

bash

, vì theˆ´ o’’ du’o´’i khi nói d¯eˆ´n heˆ

˙

vo’, xin ngaˆ`m hieˆ’u d¯ó là

bash

Tu

˙

’ moˆ

˙

t mình

bash

không thu

˙

’c hieˆ

˙

n moˆ

˙

t công vieˆ

˙

c u´’ng du

˙

ng nào. Nhu’ng nó hoˆ˜ tro

˙

’ vieˆ

˙

c thu

˙

’c

thi mo

˙

i chu’o’ng trình khác, tu`’ vieˆ

˙

c tìm kieˆ´m chu’o’ng trình d¯u’o

˙

’c go

˙

i, cha

˙

y chúng d¯eˆ´n vieˆ

˙

c toˆ’

chu´’c du˜’ lieˆ

˙

u d¯aˆ`u vào/d¯aˆ`u ra. Ngoài ra, heˆ

˙

vo’ chi

˙

u trách nhieˆ

˙

m veˆ` công vieˆ

˙

c vo´’i các bieˆ´n môi

tru’o`’ng và thu

˙

’c hieˆ

˙

n moˆ

˙

t vài bieˆ´n d¯oˆ’i (theˆ´, hoán d¯oˆ’i vi

˙

trí) các tham soˆ

´ leˆ

˙

nh. Nhu’ng tính chaˆ´t

chính cu’a heˆ

˙

vo’, nho`’ d¯ó d¯u’a heˆ

˙

vo’ tro’’ thành moˆ

˙

t công cu

˙

ma

˙

nh cu’a ngu’o`’i dùng, d¯ó là nó

bao goˆ`m moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình d¯o’n gia’n. Trong toán ho

˙

c tu`’ lâu d¯ã d¯u’o

˙

’c chu´’ng minh ra˘`ng,

baˆ´t ky` moˆ

˙

t thuaˆ

˙

t toán nào cu˜ng có theˆ’ d¯u’o

˙

’c xây du

˙

’ng tu`’ hai (ba) thao tác co’ ba’n và moˆ

˙

t toán

tu’’ d¯ieˆ`u kieˆ

˙

n. Heˆ

˙

vo’ cung caˆ´p các toán tu’’ d¯ieˆ`u kieˆ

˙

n và toán tu’’ vòng la˘

˙

p. Nó su’’ du

˙

ng các tieˆ

˙

n

ích và chu’o’ng trình khác (có trong thành phaˆ`n heˆ

˙

d¯ieˆ`u hành, hay d¯u’o

˙

’c cài d¯a˘

˙

t riêng) d¯eˆ’ làm

các thao tác co’ ba’n cho ngôn ngu˜’ laˆ

˙

p trình mà nó hoˆ˜ tro

˙

’. D

¯ oˆ`ng tho`’i cho phép d¯u’a các tham

soˆ

´ cu˜ng nhu’ keˆ´t qua’ làm vieˆ

˙

c cu’a moˆ

˙

t chu’o’ng trình to´’i các chu’o’ng trình khác hay to´’i ngu’o`’i

dùng. Keˆ´t qua’ thu d¯u’o

˙

’c là moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình ma

˙

nh. D

¯ ây cu˜ng là su´’c ma

˙

nh và là moˆ

˙

t

trong các chu´’c na˘ng chính cu’a heˆ

˙

vo’. Tru’o´’c khi ba˘´t d¯aˆ`u phaˆ`n này, ba

˙

n d¯o

˙

c nên bieˆ´t các toˆ’ ho

˙

’p

phím chính, su’’ du

˙

ng d¯eˆ’ d¯ieˆ`u khieˆ’n vieˆ

˙

c nhaˆ

˙

p du

˜’ lieˆ

˙

u trên dòng leˆ

˙

nh. Nên nho´’ ít nhaˆ´t cách su’’

du

˙

ng cu’a các (toˆ’ ho

˙

’p) phím <Ctrl>+<C>, <Ctrl>+<D>, <Tab> và các phím có mu˜i tên.

3.2

Các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t

Heˆ

˙

vo’ bash su’’ du

˙

ng moˆ

˙

t vài ký tu

˙

’ tu`’ boˆ

˙

256 ký tu

˙

’ ASCII cho các mu

˙

c d¯ính riêng, hoa˘

˙

c d¯eˆ’

bieˆ’u thi

˙

các thao tác nào d¯ó, hoa˘

˙

c d¯eˆ’ bieˆ´n d¯oˆ’i bieˆ’u thu´’c. Các ký tu

˙

’ này bao goˆ`m:

‘ ~ ! @ # $ % ^ & * ( ) _ -- [ ] { } : ; ’ " / \ > <

và ký tu

˙

’ vo´’i mã 0, ký tu

˙

’ hàng mo´’i (ta

˙

o ra khi nhaˆ´n phím <Enter>) và ký tu

˙

’ khoa’ng tra˘´ng. Phu

˙

thuoˆ

˙

c vào tình huoˆ

´ ng các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t này có theˆ’ su’’ du

˙

ng vo´’i ý nghı˜a d¯a˘

˙

c bieˆ

˙

t cu’a nó hay

su’’ du

˙

ng nhu’ moˆ

˙

t ký tu

˙

’ thông thu’o`’ng. Nhu’ng trong d¯a soˆ

´ các tru’o`’ng ho

˙

’p không khuyên dùng

các ký tu

˙

’ vo´’i giá tri

˙

thu´’ hai. Tru’o´’c heˆ´t d¯ó là vieˆ

˙

c su’’ du

˙

ng chúng trong tên taˆ

˙

p tin và thu’ mu

˙

c.

Tuy nhiên các ký tu

˙

’ _, - và . (daˆ

´ u ga

˙

ch du’o´’i, ga

˙

ch ngang và daˆ´u chaˆ´m) thu’o`’ng d¯u’o

˙

’c su’’ du

˙

ng

trong tên taˆ

˙

p tin, và d¯ây là moˆ

˙

t ví du

˙

cho thaˆ´y không pha’i lúc nào chúng cu˜ng có giá tri

˙

d¯a˘

˙

c

bieˆ

˙

t. Trong tên taˆ

˙

p tin chı’ daˆ´u chaˆ´m (.) và ga

˙

ch chéo (/) có giá tri

˙

d¯a˘

˙

c bieˆ

˙

t. Ký hieˆ

˙

u ga

˙

ch chéo

dùng d¯eˆ’ phân chia tên các thu’ mu

˙

c trong d¯u’o`’ng daˆ˜n, còn daˆ´u chaˆ´m có giá tri

˙

d¯a˘

˙

c bieˆ

˙

t khi nó

là ký tu

˙

’ d¯aˆ`u tiên trong tên taˆ

˙

p tin (cho bieˆ´t taˆ

˙

p tin là "aˆ’n"). Vieˆ

˙

c d¯u’a ngay taˆ´t ca’ ý nghı˜a d¯a˘

˙

c

bieˆ

˙

t cu’a nhu

˜’ng ký tu

˙

’ này và các tình huoˆ

´ ng su’’ du

˙

ng chúng ta

˙

m tho`’i không có ích. Chúng ta

se˜ xem xét chúng daˆ`n daˆ`n trong các phaˆ`n sau, khi caˆ`n su’’ du

˙

ng d¯eˆ´n. Tuy nhiên, 3 ký hieˆ

˙

u có

ý nghı˜a lo´’n và caˆ`n d¯eˆ` caˆ

˙

p d¯eˆ´n d¯aˆ`u tiên. Ký hieˆ

˙

u

\

(ga

˙

ch chéo ngu’o

˙

’c) có theˆ’ go

˙

i là "ký hieˆ

˙

u

xóa bo’ ý nghı˜a d¯a˘

˙

c bieˆ

˙

t" cho baˆ´t ky` ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t nào, d¯u´’ng ngay sau

\

. Ví du

˙

, neˆ´u muoˆ

´ n

su’’ du

˙

ng khoa’ng tra˘´ng trong tên taˆ

˙

p tin, thì chúng ta caˆ`n d¯a˘

˙

t tru’o´’c ký tu

˙

’ khoa’ng tra˘´ng d¯ó moˆ

˙

t

daˆ´u ˙

Ví du

˙

, câu leˆ

˙

nh sau:

kênh giao tác

teppi82@teppi:~$ cp lennon_imagine lennon\ imagine

Các ký tu

˙

’ ’ và " (ngoa˘

˙

c d¯o’n và ngoa˘

˙

c kép) có theˆ’ go

˙

i là "các ký tu

˙

’ trích daˆ˜n". Moˆ˜i ký tu

˙

này luôn luôn d¯u’o

˙

’c su’’ du

˙

ng trong moˆ

˙

t ca˘

˙

p vo´’i ba’n sao cu’a chính nó d¯eˆ’ d¯óng khung moˆ

˙

t bieˆ’u

thu´’c nào d¯ó, gioˆ´ng nhu’ trong các va˘n ba’n, sách báo, . . . thông thu’o`’ng. Neˆ´u nhu’ moˆ

˙

t d¯oa

˙

n

background image

3.3 Thu

˙

’c thi các câu leˆ

˙

nh

29

va˘n ba’n nào d¯ó d¯a˘

˙

t trong ngoa˘

˙

c d¯o’n, thì taˆ´t ca’ các ký tu

˙

’ na˘`m trong ngoa˘

˙

c d¯o’n này có giá

tri

˙

nhu’ các ký tu

˙

’ thông thu’o`’ng, khôn moˆ

˙

t ký tu

˙

’ nào có ý nghı˜a d¯a˘

˙

c bieˆ

˙

t. Tro’’ la

˙

i vo´’i ví du

˙

su’’

du

˙

ng khoa’ng tra˘´ng trong tên taˆ

˙

p tin o’’ trên, có theˆ’ nói, neˆ´u muoˆ´n d¯a˘

˙

t taˆ

˙

p tin cái tên "lennon

imagine" caˆ`n d¯u’a tên d¯ó vào daˆ´u ngoa˘

˙

c:

kênh giao tác

teppi82@teppi:~$ cp lennon_imagine ’lennon imagine’

Su

˙

’ khác nhau trong cách su’’ du

˙

ng ký tu

˙

’ ’ và " d¯ó là, trong ngoa˘

˙

c d¯o’n maˆ´t ý nghı˜a d¯a˘

˙

c bieˆ

˙

t

taˆ

´ t ca’ các ký tu

˙

’, còn trong ngoa˘

˙

c kép - taˆ´t ca’ chúng ngoa

˙

i tru`’

$, ’

\

(daˆ´u d¯ô la, ngoa˘

˙

c

d¯o’n và daˆ´u ga

˙

ch ngu’o

˙

’c).

3.3

Thu

˙

’c thi các câu leˆ

˙

nh

Nhu’ d¯ã nói o’’ trên, moˆ

˙

t trong các chu´’c na˘ng chính cu’a heˆ

˙

vo’ là toˆ’ chu´’c vieˆ

˙

c thu

˙

’c hieˆ

˙

n các câu

leˆ

˙

nh mà ngu’o`’i dùng d¯u’a vào trên dòng leˆ

˙

nh. Heˆ

˙

vo’, nói riêng, cung caˆ´p cho ngu’o`’i dùng hai

thao tác d¯a˘

˙

c bieˆ

˙

t d¯eˆ’ toˆ’ chu´’c vieˆ

˙

c d¯u’a các câu leˆ

˙

nh trên dòng leˆ

˙

nh:

;

&

.

3.3.1

Thao tác ;

Ma˘

˙

c dù ngu’o`’i dùng thu’o`’ng chı’ nhaˆ

˙

p trên dòng leˆ

˙

nh tu`’ng câu leˆ

˙

nh moˆ

˙

t, nhu’ng còn có theˆ’ d¯u’a

vào dòng leˆ

˙

nh d¯ó ngay laˆ

˙

p tu´’c vài câu leˆ

˙

nh, và chúng se˜ thu

˙

’c hieˆ

˙

n laˆ`n lu’o

˙

’t tu`’ câu leˆ

˙

nh này

d¯eˆ´n câu leˆ

˙

nh khác. D

¯ eˆ’ làm d¯u’o

˙

’c d¯ieˆ`u này caˆ`n su’’ du

˙

ng ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t -

;

. Neˆ´u dùng ký tu

˙

’ này

d¯eˆ’ phân chia các câu leˆ

˙

nh, thì câu leˆ

˙

nh tieˆ´p theo se˜ d¯u’o

˙

’c coi nhu’ tham soˆ

´ cu’a leˆ

˙

nh phía tru’o´’c.

Nhu’ vaˆ

˙

y, neˆ´u nhaˆ

˙

p vào dòng leˆ

˙

nh cái gì d¯ó gioˆ

´ ng nhu’ sau:

kênh giao tác

teppi82@teppi:~$ command1 ; command2

thì heˆ

˙

vo’ d¯aˆ`u tiên se˜ thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh command1, cho`’ cho leˆ

˙

nh d¯ó hoàn thành, sau d¯ó

cha

˙

y command2, cho`’leˆ

˙

nh hoàn thành, sau d¯ó la

˙

i d¯u’a ra dòng nhaˆ

˙

p leˆ

˙

nh và cho`’các hành d¯oˆ

˙

ng

tieˆ´p theo cu’a ngu’o`’i dùng.

3.3.2

Thao tác &

Thao tác & d¯u’o

˙

’c dùng d¯eˆ’ toˆ’ chu´’c vieˆ

˙

c thu

˙

’c hieˆ

˙

n các câu leˆ

˙

nh trong cheˆ´ d¯oˆ

˙

neˆ`n sau. Neˆ´u d¯a˘

˙

t

daˆ´u & ngay sau câu leˆ

˙

nh, thì heˆ

˙

vo’ se˜ tra’ la

˙

i quyeˆ`n d¯ieˆ`u khieˆ’n cho ngu’o`’i dùng ngay sau khi

cha

˙

y câu leˆ

˙

nh, mà không d¯o

˙

’i cho câu leˆ

˙

nh d¯ó hoàn thành. Ví du

˙

, neˆ´u nhaˆ

˙

p vào dòng leˆ

˙

nh

"

command1 & command2 &

", thì heˆ

˙

vo’ cha

˙

y câu leˆ

˙

nh command1, ngay laˆ

˙

p tu´’c cha

˙

y leˆ

˙

nh

command2, và sau d¯ó không chaˆ

˙

m treˆ˜ tra’ la

˙

i dòng nhaˆ

˙

p leˆ

˙

nh cho ngu’o`’i dùng.

3.3.3

Thao tác && và ||

Các thao tác && và || lá nhu

˜’ng thao tác d¯ieˆ`u khieˆ’n. Neˆ´u trên dòng leˆ

˙

nh là

command1 && command2

,

thì command2 se˜ thu

˙

’c hieˆ

˙

n và chı’ thu

˙

’c hieˆ

˙

n trong tru’o`’ng ho

˙

’p tra

˙

ng thái thoát ra cu’a leˆ

˙

nh

command1 ba˘`ng không (0), tu´’c là leˆ

˙

nh d¯ó thu

˙

’c hieˆ

˙

n thành công. Moˆ

˙

t cách tu’o’ng tu

˙

’, neˆ

´ u dòng

leˆ

˙

nh có da

˙

ng

command1 || command2

, thì command2 se˜ thu

˙

’c hieˆ

˙

n và chı’ thu

˙

’c hieˆ

˙

n khi

tra

˙

ng thái thoát cu’a leˆ

˙

nh command1 khác không. Chúng ta se˜ không xem xét ma˘

˙

t ky˜ thuaˆ

˙

t cu’a

background image

30

Bash

vieˆ

˙

c thu

˙

’c hieˆ

˙

n moˆ

˙

t câu leˆ

˙

nh nào d¯ó. Chı’ có theˆ’ nói nga˘´n go

˙

n ra˘`ng, heˆ

˙

vo’ pha’i tìm mã (code)

chu’o’ng trình, na

˙

p mã d¯ó vào boˆ

˙

nho´’, chuyeˆ’n các tham soˆ´ d¯ã nhaˆ

˙

p trên dòng leˆ

˙

nh vào cho câu

leˆ

˙

nh, và sau khi thu

˙

’c hieˆ

˙

n xong thì theo moˆ

˙

t cách nào d¯ó tra’ la

˙

i keˆ´t qua’ thu

˙

’c hieˆ

˙

n leˆ

˙

nh này

cho ngu’o`’i dùng hay tieˆ´n trình khác. Chúng ta se˜ xem xét qua các bu’o´’c này. Bu’o´’c d¯aˆ`u tiên -
tìm kieˆ´m câu leˆ

˙

nh. Các câu leˆ

˙

nh chia thành hai loa

˙

i: noˆ

˙

i trú (mã cu’a chúng có trong mã cu’a

chính heˆ

˙

vo’) và ngoa

˙

i trú (mã cu’a chúng na˘`m trong moˆ

˙

t taˆ

˙

p tin riêng le’ trên d¯ı˜a). Heˆ

˙

vo’ luôn

luôn tìm thaˆ´y leˆ

˙

nh noˆ

˙

i trú, còn d¯eˆ’ tìm các leˆ

˙

nh ngoa

˙

i trú ngu’o`’i dùng, theo nguyên ta˘´c, pha’i

chı’ cho heˆ

˙

vo’ d¯u’o`’ng daˆ˜n d¯aˆ`y d¯u’ to´’i taˆ

˙

p tin tu’o’ng u´’ng. Tuy nhiên d¯eˆ’ go˜’"gánh na˘

˙

ng" cho ngu’o`’i

dùng heˆ

˙

vo’ bieˆ´t cách tìm leˆ

˙

nh ngoa

˙

i trú trong các thu’ mu

˙

c, mà d¯u’o

˙

’c lieˆ

˙

t kê trong d¯u’o`’ng daˆ˜n

tìm kieˆ´m. Chı’ khi (heˆ

˙

vo’) không theˆ’ tìm thaˆ´y taˆ

˙

p tin caˆ`n thieˆ´t trong các thu’ mu

˙

c d¯ó, nó mo´’i

quyeˆ´t d¯i

˙

nh ra˘`ng ngu’o`’i dùng d¯ã nhaˆ`m khi nhaˆ

˙

p tên leˆ

˙

nh. Veˆ` cách thêm thu’ mu

˙

c vào d¯u’o`’ng

daˆ˜n tìm kieˆ´m chúng ta se˜ nói d¯eˆ´n o’’ du’o´’i, còn bây gio`’ chúng ta se˜ xem xét cách heˆ

˙

vo’ toˆ’ chu´’c

vieˆ

˙

c d¯u’a du˜’ lieˆ

˙

u vào cho câu leˆ

˙

nh d¯ang thu

˙

’c hieˆ

˙

n và vieˆ

˙

c d¯u’a keˆ´t qua’ to´’i cho ngu’o`’i dùng.

3.4

D

¯ aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ

’n

3.4.1

Dòng du

˜’ lieˆ

˙

u vào-ra

Khi moˆ

˙

t chu’o’ng trình d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n, nó d¯u’o

˙

’c cung caˆ

´ p ba dòng du˜’ lieˆ

˙

u (hay còn go

˙

i là

kênh):

• d¯aˆ`u vào tiêu chuaˆ’n (standard input hay stdin). Qua kênh này du˜’ lieˆ

˙

u d¯u’o

˙

’c d¯u’a vào cho

chu’o’ng trình;

• d¯aˆ`u ra tiêu chuaˆ’n (standard output hay stdout). Qua kênh này chu’o’ng trình d¯u’a ra keˆ´t

qua’ làm vieˆ

˙

c cu’a mình;

• kênh thông báo loˆ˜i tiêu chuaˆ’n (standard error hay stderr). Qua kênh này chu’o’ng trình

d¯u’a ra thông tin veˆ` loˆ˜i.

Tu`’ d¯aˆ`u vào tiêu chuaˆ’n chu’o’ng trình chı’ có theˆ’ d¯o

˙

c, còn hai d¯aˆ`u ra và kênh thông báo loˆ˜i

d¯u’o

˙

’c chu’o’ng trình su’’ du

˙

ng chı’ d¯eˆ’ ghi. Theo ma˘

˙

c d¯i

˙

nh d¯aˆ`u vào có liên keˆ´t

1

vo´’i bàn phím, còn

d¯aˆ`u ra và kênh báo loˆ˜i hu’o´’ng d¯eˆ´n terminal cu’a ngu’o`’i dùng. Nói cách khác, toàn boˆ

˙

thông tin

cu’a leˆ

˙

nh hay chu’o’ng trình mà ngu’o`’i dùng d¯ã cha

˙

y, và taˆ´t ca’ nhu˜’ng thông báo loˆ˜i, d¯u’o

˙

’c d¯u’a

ra cu’’a soˆ’ terminal. Tuy nhiên, chúng ta se˜ thaˆ´y o’’ du’o´’i, có theˆ’ chuyeˆ’n hu’o´’ng thông báo d¯aˆ`u
ra (ví du

˙

, vào taˆ

˙

p tin). D

¯ eˆ’ cho thaˆ

´ y kênh thông báo loˆ˜i tiêu chuaˆ’n làm vieˆ

˙

c nhu’ theˆ´ nào, hãy

thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh

ls

vo´’i moˆ

˙

t tham soˆ

´ không d¯úng, ví du

˙

dùng tham soˆ

´ là moˆ

˙

t tên taˆ

˙

p tin

không toˆ`n ta

˙

i. Trong tru’o`’ng ho

˙

’p này,

ls

d¯u’a moˆ

˙

t tin nha˘´n báo loˆ˜i ra kênh thông báo loˆ˜i tiêu

chuaˆ’n. Tuy nhiên, d¯oˆ

´ i vo´’i ngu’o`’i dùng thì trong tru’o`’ng ho

˙

’p này kênh thông báo loˆ˜i tiêu chuaˆ’n

không khác gì vo´’i d¯aˆ`u ra tiêu chuaˆ’n, bo’’i vì chúng ta cu˜ng thaˆ´y thông báo loˆ˜i d¯ó trên cu’’a soˆ’
terminal. Làm vieˆ

˙

c vo´’i d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n d¯u’o

˙

’c minh ho

˙

a toˆ

´ t nhaˆ´t qua ví du

˙

các

leˆ

˙

nh

echo

cat

.

3.4.2

Leˆ

˙

nh echo

Câu leˆ

˙

nh

echo

dùng d¯eˆ’ chuyeˆ’n to´’i d¯aˆ`u ra tiêu chuaˆ’n dòng ký tu

˙

’, mà d¯u’o

˙

’c d¯u’a vào làm tham

soˆ

´ cho nó. Sau d¯ó leˆ

˙

nh này d¯u’a ra tín hieˆ

˙

u chuyeˆ’n dòng và hoàn taˆ´t công vieˆ

˙

c. Hãy thu’’ thu

˙

’c

hieˆ

˙

n câu leˆ

˙

nh sau:

1

gioˆ

´ ng liên keˆ´t hóa ho

˙

c

background image

3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ

´ ng và d¯aˆ`u lo

˙

c

31

kênh giao tác

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

Tôi nghı˜ ra˘`ng lo`’i gia’i thích se˜ là thu`’a thãi (chı’ xin hãy su’’ du

˙

ng daˆ´u ngoa˘

˙

c d¯o’n, neˆ´u không

keˆ´t qua’ có theˆ’ se˜ khác. Neˆ´u ba

˙

n d¯o

˙

c chú ý thì có theˆ’ gia’i thích ta

˙

i sao la

˙

i khác).

3.4.3

Leˆ

˙

nh cat

Chúng ta se˜ xem xét leˆ

˙

nh

cat

o’’ d¯ây vì leˆ

˙

nh này thu’o`’ng làm vieˆ

˙

c vo´’i d¯aˆ`u vào và d¯aˆ`u ra tiêu

chuaˆ’n. Theo ma˘

˙

c d¯i

˙

nh keˆ´t qua’ làm vieˆ

˙

c cu’a leˆ

˙

nh

cat

hu’o´’ng to´’i d¯aˆ`u ra tiêu chuaˆ’n. D

¯ eˆ’ chu´’ng

minh là leˆ

˙

nh này theo ma˘

˙

c d¯i

˙

nh tieˆ´p nhaˆ

˙

n dòng du

˜’ lieˆ

˙

u nhaˆ

˙

p vào, hãy cha

˙

y leˆ

˙

nh

cat

không

có tham soˆ

´ . Keˆ´t qua’ là con tro’ chuyeˆ’n to´’i moˆ

˙

t dòng mo´’i, và ho’n nu˜’a có ve’ nhu’ không có gì

xa’y ra. Lúc này câu leˆ

˙

nh cho`’ các ký tu

˙

’ d¯eˆ

´ n tu`’d¯aˆ`u vào tiêu chuaˆ’n. Hãy nhaˆ

˙

p baˆ´t ky` ký tu

˙

’ nào,

và nó se˜ xuaˆ´t hieˆ

˙

n ngay laˆ

˙

p tu´’c trên màn hình, tu´’c là chu’o’ng trình ngay laˆ

˙

p tu´’c d¯u’a chúng to´’i

d¯aˆ`u ra tiêu chuaˆ’n. Có theˆ’ tieˆ´p tu

˙

c nhaˆ

˙

p các ký tu

˙

’, và chúng cu˜ng se˜ xuaˆ

´ t hieˆ

˙

n trên màn hình.

Thông thu’o`’ng bàn phím d¯u’o

˙

’c caˆ

´ u hình d¯eˆ’ nhaˆ

˙

p vào theo tu`’ng dòng, vì theˆ´ neˆ´u ba

˙

n nhaˆ´n phím

<Enter>, dòng ký tu

˙

’ ba

˙

n vu`’a nhaˆ

˙

p se˜ d¯u’o

˙

’c d¯u’a to´’i leˆ

˙

nh

cat

, và leˆ

˙

nh này se˜ la

˙

i d¯u’a du˜’ lieˆ

˙

u ra

màn hình thông qua d¯aˆ`u ra tiêu chuaˆ’n. Nhu’ vaˆ

˙

y, moˆ˜i dòng ký tu

˙

’ nhaˆ

˙

p vào se˜ d¯u’o

˙

’c hieˆ

˙

n ra

hay laˆ`n: moˆ

˙

t laˆ`n khi gõ và laˆ`n thu´’ hai bo’’i câu leˆ

˙

nh

cat

. Neˆ´u nhaˆ´n toˆ’ ho

˙

’p phím <Ctrl>+<D>,

mà dùng d¯eˆ’ ngu`’ng vieˆ

˙

c nhaˆ

˙

p du

˜’ lieˆ

˙

u, chúng ta se˜ qua la

˙

i dòng nhaˆ

˙

p leˆ

˙

nh. Cu˜ng có theˆ’ su’’

du

˙

ng toˆ’ ho

˙

’p phím <Ctrl>+<C>, mà là câu leˆ

˙

nh trong heˆ

˙

vo’ d¯eˆ’ du`’ng chu’o’ng trình d¯ang cha

˙

y.

Neˆ´u d¯u’a tên moˆ

˙

t taˆ

˙

p tin vào làm tham soˆ

´ cho leˆ

˙

nh

cat

, thì noˆ

˙

i dung cu’a leˆ

˙

nh này se˜ d¯u’o

˙

’c

d¯u’a to´’i d¯aˆ`u vào tiêu chuaˆ’n, tu`’ d¯ó leˆ

˙

nh

cat

se˜ d¯o

˙

c noˆ

˙

i dung này và d¯u’a to´’i d¯aˆ`u ra tiêu chuaˆ’n

(xem so’ d¯oˆ`).

No

ˆ

˙

i dung ta

ˆ

˙

p tin -> D

¯ a

ˆ

`u vào tiêu chua

ˆ

’n (stdin) --cat--> d¯a

ˆ

`u ra

tiêu chua

ˆ

’n (stdout)

D

¯ ây chı’ là moˆ

˙

t tru’o`’ng ho

˙

’p riêng cu’a vieˆ

˙

c chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙

u d¯aˆ`u vào, moˆ

˙

t co’ cheˆ´ raˆ´t

có ích cu’a heˆ

˙

vo’. Và taˆ´t nhiên chúng ta caˆ`n xem xét ky˜ ho’n co’ cheˆ´ này.

3.5

Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ

´ ng và d¯aˆ`u lo

˙

c

Ma˘

˙

c dù, nhu’ d¯ã nói o’’ trên, thông thu’o`’ng d¯aˆ`u vào/d¯aˆ`u ra cu’a moˆ

˙

t chu’o’ng trình liên keˆ´t vo´’i

các d¯aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n, trong heˆ

˙

vo’ còn có các môi tru’o`’ng d¯a˘

˙

c bieˆ

˙

t cho phép chuyeˆ’n

hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra.

3.5.1

Su’’ du

˙

ng >, < và >>

D

¯ eˆ’ chuyeˆ’n hu’o´’ng d¯aˆ`u vào/ra, su’’ du

˙

ng các ký hieˆ

˙

u ">", "<" và ">>". Thu’o`’ng su’’ du

˙

ng vieˆ

˙

c

chuyeˆ’n hu’o´’ng d¯u˜’ lieˆ

˙

u ra cu’a câu leˆ

˙

nh vào taˆ

˙

p tin. Du’o´’i d¯ây là moˆ

˙

t ví du

˙

tu’o’ng u´’ng:

kênh giao tác

maikhai@fpt:/some/where$ ls -l > /home/maikhai/ls.txt

Theo leˆ

˙

nh này danh sách taˆ

˙

p tin và thu’ mu

˙

c con cu’a thu’ mu

˙

c, mà tu`’ d¯ó ngu’o`’i dùng

thu

˙

’c hieˆ

˙

n leˆ

˙

nh

ls

2

se˜ d¯u’o

˙

’c ghi vào taˆ

˙

p tin

/home/maikhai/ls.txt

; khi này neˆ´u taˆ

˙

p tin

2

thu’ mu

˙

c hieˆ

˙

n tho`’i

background image

32

Bash

ls.txt

không toˆ`n ta

˙

i, thì nó se˜ d¯u’o

˙

’c ta

˙

o ra; neˆ´u taˆ

˙

p tin d¯ã có, thì noˆ

˙

i dung cu’a nó se˜ bi

˙

xóa và ghi d¯è bo’’i danh sách nói trên. Neˆ´u ba

˙

n không muoˆ

´ n xóa noˆ

˙

i dung cu˜ mà ghi thêm

du

˜’ lieˆ

˙

u d¯aˆ`u ra vào cuoˆ

´ i taˆ

˙

p tin, thì caˆ`n su’’ du

˙

ng ký hieˆ

˙

u

>>

thay cho

>

. Khi này khoa’ng

tra˘´ng tru’o´’c và sau các ký hieˆ

˙

u

>

hay

>>

không có ý nghı˜a và chı’ dùng vo´’i mu

˙

c d¯ích thuaˆ

˙

n

tieˆ

˙

n, deˆ˜ nhìn. Ba

˙

n có theˆ’ chuyeˆ’n hu’o´’ng không chı’ vào taˆ

˙

p tin, mà còn to´’i d¯aˆ`u vào cu’a moˆ

˙

t

câu leˆ

˙

nh khác hay to´’i moˆ

˙

t thieˆ´t bi

˙

nào d¯ó (ví du

˙

, máy in). Ví du

˙

, d¯eˆ’ d¯u’a noˆ

˙

i dung taˆ

˙

p tin

/home/maikhai/ls.txt

vu`’a ta

˙

o o’’ trên to´’i cu’’a soˆ’ terminal thu´’ hai

3

có theˆ’ su’’ du

˙

ng leˆ

˙

nh

sau:

kênh giao tác

maikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2

Nhu’ ba

˙

n thaˆ´y,

>

dùng d¯eˆ’ chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙

u cu’a d¯aˆ`u ra. Chu´’c na˘ng tu’o’ng tu

˙

’ d¯oˆ

´ i vo´’i

d¯aˆ`u vào d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n bo’’i

<

. Ví du

˙

, có theˆ’ d¯eˆ´m soˆ

´ tu`’ trong taˆ

˙

p tin

ls.txt

nhu’ sau (chú ý,

d¯ây chı’ là moˆ

˙

t ví du

˙

minh ho

˙

a, trên thu

˙

’c teˆ

´ thu’o`’ng su’’ du

˙

ng câu leˆ

˙

nh d¯o’n gia’n ho’n):

kênh giao tác

maikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt

Cách chuyeˆ’n hu’o´’ng này thu’o`’ng d¯u’o

˙

’c su’’du

˙

ng trong các script, cho các câu leˆ

˙

nh mà thu’o`’ng

tieˆ´p nhaˆ

˙

n (hay cho`’) du˜’ lieˆ

˙

u vào tu`’ bàn phím. Trong script dùng d¯eˆ’ tu

˙

’ d¯oˆ

˙

ng hóa moˆ

˙

t thao tác

nào d¯ó, có theˆ’ d¯u’a các thông tin caˆ`n thieˆ´t cho câu leˆ

˙

nh tu`’ taˆ

˙

p tin: trong taˆ

˙

p tin này ghi sa˘˜n

nhu

˜’ng gì caˆ`n d¯eˆ’ thu

˙

’c hieˆ

˙

n leˆ

˙

nh d¯ó. Bo’’i vì các ký hieˆ

˙

u

<, >

>>

làm vieˆ

˙

c vo´’i các kênh tiêu

chuaˆ’n (d¯aˆ`u vào hoa˘

˙

c d¯aˆ`u ra), chúng không chı’ d¯u’o

˙

’c dùng theo các cách quen thuoˆ

˙

c, thu’o`’ng

dùng, mà còn có theˆ’ theo cách khác, "la

˙

ma˘´t" ho’n. Ví du

˙

, các câu leˆ

˙

nh sau là tu’o’ng d¯u’o’ng:

kênh giao tác

[user]$ cat > file

[user]$ cat>file

[user]$ >file cat

[user]$ > file cat

Tuy nhiên, tu

˙

’ chúng (không có moˆ

˙

t leˆ

˙

nh nào, tu´’c là không có kênh tiêu chuaˆ’n nào cho

leˆ

˙

nh) các ký tu

˙

’ chuyeˆ’n hu’o´’ng này không theˆ’ d¯u’o

˙

’c su’’ du

˙

ng, nhu’ theˆ´ không theˆ’, ví du

˙

, nhaˆ

˙

p

vào dòng leˆ

˙

nh sau:

kênh giao tác

[user]$ file1 > file2

mà thu d¯u’o

˙

’c ba’n sao cu’a moˆ

˙

t taˆ

˙

p tin nào d¯ó. Nhu’ng d¯ieˆ`u này không làm gia’m giá tri

˙

cu’a

co’ cheˆ´ này, bo’’i vì các kênh tiêu chuaˆ’n có cho mo

˙

câu leˆ

˙

nh. Khi này, có theˆ’ chuyeˆ’n hu’o´’ng

không chı’ d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n, mà còn các kênh khác. D

¯ eˆ’ làm d¯u’o

˙

’c d¯ieˆ`u này, caˆ`n

d¯a˘

˙

t tru’o´’c ký hieˆ

˙

u chuyeˆ’n hu’o´’ng soˆ´ cu’a kênh muoˆ´n chuyeˆ’n. D

¯ aˆ`u vào tiêu chuaˆ’n stdin có soˆ

´ 0,

d¯aˆ`u ra tiêu chuaˆ’n stdout - soˆ

´ 1, kênh thông báo loˆ˜i stderr - soˆ´ 2. Tu´’c là leˆ

˙

nh chuyeˆ’n hu’o´’ng có

da

˙

ng d¯aˆ`y d¯u’ nhu’ sau (xin d¯u’o

˙

’c nha˘´c la

˙

i, khoa’ng tra˘´ng ca

˙

nh > là không nhaˆ´t thieˆ´t):

command N > M

3

ba

˙

n caˆ`n dùng toˆ’ ho

˙

’p phím <Ctrl>+<Alt>+<F2> d¯eˆ’ chuyeˆ’n to´’i cu’’a soˆ’ terminal này và d¯a˘ng nhaˆ

˙

p tru’o´’c

background image

3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ

´ ng và d¯aˆ`u lo

˙

c

33

Trong d¯ó, N và M - soˆ

´ cu’a kênh tiêu chuaˆ’n (0, 1, và 2) hoa˘

˙

c tên taˆ

˙

p tin. Trong moˆ

˙

t vài

tru’o`’ng ho

˙

’p có su’’ du

˙

ng các ký hieˆ

˙

u

<, >

>>

mà không chı’ ra soˆ

´ kênh hay tên taˆ

˙

p tin, vì

vào choˆ˜ còn thieˆ´u se˜ d¯a˘

˙

t, theo ma˘

˙

c d¯i

˙

nh, 1 neˆ´u dùng

>

, tu´’c là d¯aˆ`u ra tiêu chuaˆ’n, hoa˘

˙

c 0 neˆ´u

dùng

<

, tu´’c là d¯aˆ`u vào tiêu chuaˆ’n. Nhu’ theˆ´, khi không có soˆ´ nào chı’ ra,

>

se˜ d¯u’o

˙

’c biên di

˙

ch

1 >

, còn

<

se˜ d¯u’o

˙

’c biên di

˙

ch là

0 <

. Ngoài vieˆ

˙

c chuyeˆ’n hu’o´’ng các kênh tiêu chuaˆ’n d¯o’n

gia’n nhu’ vaˆ

˙

y, còn có kha’ na˘ng không nhu

˜’ng chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙

u vào kênh này hay kênh

khác, mà còn sao chép noˆ

˙

i dung cu’a các kênh tiêu chuaˆ’n d¯ó. Ký hieˆ

˙

u & dùng d¯eˆ’ thu

˙

’c hieˆ

˙

n

d¯ieˆ`u này, khi d¯a˘

˙

t nó (&) tru’o´’c soˆ´ cu’a kênh se˜ chuyeˆ’n du˜’ lieˆ

˙

d¯eˆ´n:

command N > &M

Leˆ

˙

nh này có nghı˜a là, d¯aˆ`u ra cu’a kênh vo´’i soˆ´ N d¯u’o

˙

’c gu’’i d¯eˆ

´ n ca’ d¯aˆ`u ra tiêu chuaˆ’n, và sao

chép to´’i kênh có soˆ´ M. Ví du

˙

, d¯eˆ’ sao chép thông báo loˆ˜i vào d¯aˆ`u ra tiêu chuaˆ’n, caˆ`n dùng leˆ

˙

nh

2>&1, còn 1>&2 sao chép stdout vào stderr. Kha’ na˘ng này d¯a˘

˙

c bieˆ

˙

t có ích khi muoˆ

´ n ghi d¯aˆ`u

ra vào taˆ

˙

p tin, vì khi d¯ó chúng ta vu`’a có theˆ’ nhìn thaˆ´y thông báo trên màn hình, vu`’a ghi chúng

vào taˆ

˙

p tin. Ví du

˙

, tru’o`’ng ho

˙

’p sau thu’o`’ng d¯u’o

˙

’c u´’ng du

˙

ng trong các script cha

˙

y khi kho’’i d¯oˆ

˙

ng

Linux:

kênh giao tác

teppi82@teppi:~$ cat hiho > /dev/null

cat: hiho: No such file or directory

teppi82@teppi:~$ cat hiho > /dev/null 2>&1

3.5.2

Su’’ du

˙

ng |

Moˆ

˙

t tru’o`’ng ho

˙

’p d¯a˘

˙

c bieˆ

˙

t cu’a chuyeˆ’n hu’o´’ng d¯aˆ`u ra là su

˙

’ toˆ’ chu´’c các d¯u’o`’ng oˆ

´ ng (ha y còn có

theˆ’ go

˙

i là kênh giu

˜’a các chu’o’ng trình, hoa˘

˙

c ba˘ng chuyeˆ`n). Hai hay vài câu leˆ

˙

nh, mà d¯aˆ`u ra

cu’a leˆ

˙

nh tru’o´’c dùng làm d¯aˆ`u vào cho leˆ

˙

nh sau, liên keˆ´t vo´’i nhau (có theˆ’ nói phân cách nhau,

neˆ´u muoˆ

´ n) bo’’i ký hieˆ

˙

u ga

˙

ch tha˘’ng d¯u´’ng - "

|

". Khi này d¯aˆ`u ra tiêu chuaˆ’n cu’a leˆ

˙

nh d¯u´’ng bên

trái so vo´’i

|

du’o

˙

’c chuyeˆ’n d¯eˆ

´ n d¯aˆ`u vào tiêu chuaˆ’n cu’a chu’o’ng trình, du´’ng bên pha’i so vo´’i

|

.

Ví du

˙

:

kênh giao tác

maikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l

Dòng này có nghı˜a là keˆ´t qua’ cu’a leˆ

˙

nh

cat

, tu´’c là noˆ

˙

i dung taˆ

˙

p tin ls.txt, se˜ d¯u’o

˙

’c chuyeˆ’n

d¯eˆ´n d¯aˆ`u vào cu’a leˆ

˙

nh

grep

, leˆ

˙

nh này se˜ phân chia noˆ

˙

i dung nói trên và chı’ laˆ´y ra nhu˜’ng

dòng nào có chu´’a tu`’ knoppix. D

¯ eˆ

´ n lu’o

˙

’t mình, keˆ

´ t qu’a cu’a leˆ

˙

nh

grep

d¯u’o

˙

’c chuyeˆ’n to´’i d¯aˆ`u

vào cu’a leˆ

˙

nh

wc -l

, mà tính soˆ

´ nhu˜’ng dòng thu d¯u’o

˙

’c. D

¯ u’o`’ng oˆ

´ ng su’’ du

˙

ng d¯eˆ’ keˆ´t ho

˙

’p vài

chu’o’ng trình nho’ la

˙

i vo´’i nhau (moˆ˜i chu’o’ng trình thu

˙

’c hieˆ

˙

n moˆ

˙

t bieˆ´n d¯oˆ’i xác d¯i

˙

nh nào d¯ó trên

d¯aˆ`u vào) ta

˙

o thành moˆ

˙

t leˆ

˙

nh toˆ’ng quát, mà keˆ´t qua’ cu’a nó se˜ là moˆ

˙

t bieˆ´n d¯oˆ’i phu´’c ta

˙

p. Caˆ`n

chú ý ra˘`ng, heˆ

˙

vo’ go

˙

i và thu

˙

’c hieˆ

˙

n taˆ´t ca’ các câu leˆ

˙

nh có trong d¯u’o`’ng oˆ´ng cùng moˆ

˙

t lúc, cha

˙

y

moˆ˜i leˆ

˙

nh d¯ó trong moˆ

˙

t ba’n sao heˆ

˙

vo’ riêng. Vì theˆ´ ngay khi chu’o’ng trình thu´’nhaˆ´t ba˘´t d¯aˆ`u d¯u’a

keˆ´t qua’ o’’ d¯aˆ`u ra, chu’o’ng trình tieˆ´p theo ba˘´t d¯aˆ`u xu’’ lý keˆ´t qua’ này. Cu˜ng y nhu’ vaˆ

˙

y, các leˆ

˙

nh

tieˆ´p theo thu

˙

’c hieˆ

˙

n các công vieˆ

˙

c cu’a mình: cho`’ du˜’ lieˆ

˙

u tu`’ leˆ

˙

nh tru’o´’c và d¯u’a keˆ´t qua’ cho leˆ

˙

nh

tieˆ´p theo, gioˆ

´ ng nhu’moˆ

˙

t dây chuyeˆ`n sa’n xuaˆ´t. Neˆ´u nhu’muoˆ´n moˆ

˙

t leˆ

˙

nh nào d¯ó keˆ´t thúc hoàn

toàn, tru’o´’c khi thu

˙

’c hieˆ

˙

n leˆ

˙

nh tieˆ´p theo, ba

˙

n có theˆ’ su’e’ du

˙

ng trên moˆ

˙

t dòng ca’ ký hieˆ

˙

u dây

chuyeˆ`n

|

, cu˜ng nhu’ daˆ´u chaˆ´p phaˆ’y

;

. Tru’o´’c moˆ˜i daˆ´u chaˆ´m phaˆ’y, heˆ

˙

vo’ se˜ du`’ng la

˙

i và cho`’

cho d¯eˆ´n khi thu

˙

’c hieˆ

˙

n xong taˆ´t ca’ các câu leˆ

˙

nh tru’o´’c cu’a d¯u’o`’ng oˆ´ng. Tra

˙

ng thái thoát ra (giá

background image

34

Bash

tri

˙

lôgíc, mà d¯u’o

˙

’c tra’ la

˙

i sau khi thu

˙

’c hieˆ

˙

n xong chu’o’ng trình) cu’a moˆ

˙

t d¯u’o`’ng oˆ´ng se˜ trùng

vo´’i tra

˙

ng thái thoát ra cu’a câu leˆ

˙

nh sau cùng trong d¯u’o`’ng oˆ´ng. O

’’ tru’o´’c câu leˆ

˙

nh d¯aˆ`u tiên cu’a

d¯u’o`’ng oˆ´ng có theˆ’ d¯a˘

˙

t ký hieˆ

˙

u "

!

", khi d¯ó tra

˙

ng thái thoát ra cu’a d¯u’o`’ng oˆ´ng se˜ là phu’ d¯i

˙

nh

lôgíc cu’a tra

˙

ng thát thoát ra cu’a leˆ

˙

nh cuoˆ

´ i cùng trong d¯u’o`’ng oˆ´ng. Tu´’c là neˆ´u tra

˙

ng thái thoát

ra cu’a leˆ

˙

nh cuoˆ

´ i cùng ba˘`ng 0 thì tra

˙

ng thái thoát ra cu’a d¯u’o`’ng oˆ´ng se˜ ba˘`ng 1 và ngu’o

˙

’c la

˙

i. Heˆ

˙

vo’ cho`’ cho taˆ´t ca’ các câu leˆ

˙

nh keˆ´t thúc roˆ`i mo´’i xác d¯i

˙

nh và d¯u’a ra giá tri

˙

này.

3.5.3

D

¯ aˆ`u lo

˙

c

Ví du

˙

cuoˆ

´ i cùng o’’trên (ví du

˙

vo´’i câu leˆ

˙

nh

grep

) có theˆ’ dùng d¯eˆ’ minh ho

˙

a cho moˆ

˙

t khái nieˆ

˙

m

qua tro

˙

ng khác, d¯ó là, d¯aˆ`u lo

˙

c chu’o’ng trình. D

¯ aˆ`u lo

˙

c - d¯ó là leˆ

˙

nh (hay chu’o’ng trình), mà tieˆ´p

nhaˆ

˙

n du

˜’ lieˆ

˙

u vào, thu

˙

’c hieˆ

˙

n moˆ

˙

t vài bieˆ´n d¯oˆ’i trên du˜’ lieˆ

˙

u này và d¯u’a ra keˆ´t qua’ o’’ d¯aˆ`u ra tiêu

chuaˆ’n (tu`’ d¯ây còn có theˆ’ chuyeˆ’n d¯eˆ´n no’i nào d¯ó theo ý muoˆ´n cu’a ngu’o`’i dùng). Các câu leˆ

˙

nh

- d¯aˆ`u lo

˙

c bao goˆ`m các leˆ

˙

nh d¯ã nói d¯eˆ´n o’’ trên

cat, more, less, wc, cmp, diff

,

và ca’ nhu

˜’ng câu leˆ

˙

nh có trong ba’ng

3.1

Ba’ng 3.1: Các câu leˆ

˙

nh d¯aˆ`u lo

˙

c

Leˆ

˙

nh

Mô ta’ nga˘´n go

˙

n

grep, fgrep, egrep

Tìm trong taˆ

˙

p tin hay du

˜’ lieˆ

˙

u d¯aˆ`u vào các dòng có chu´’a maˆ˜u va˘n ba’n

d¯u’o

˙

’c chı’ ra và d¯u’a các dòng này to´’i d¯aˆ`u ra tiêu chuaˆ’n

tr

Trong du

˜’lieˆ

˙

u d¯aˆ`u vào thay theˆ´ các ký tu

˙

’ o’’ ô thu´’ nhaˆ

´ t bo’’i các ký tu

˙

’ tu’o’ng

u´’ng o’’ ô thu´’ hai. Hãy thu’’ gõ leˆ

˙

nh

tr abc ABC

roˆ`i gõ vài dòng chu´’a

các ký tu

˙

’ abc!

comm

So sánh hai taˆ

˙

p tin theo tu`’ng dòng moˆ

˙

t và d¯u’a vào d¯aˆ`u ra tiêu chuaˆ’n 3

coˆ

˙

t : moˆ

˙

t - nhu

˜’ng dòng chı’ ga˘

˙

p o’’ taˆ

˙

p tin thu´’ nhaˆ´t, hai - nhu˜’ng dòng chı’

ga˘

˙

p o’’ taˆ

˙

p tin thu´’ hai, và ba - nhu˜’ng dòng có trong ca’ hai taˆ

˙

p tin.

pr

D

¯ i

˙

nh da

˙

ng taˆ

˙

p tin hay noˆ

˙

i dung cu’a d¯aˆ`u tiêu chuaˆ’n d¯eˆ’ in aˆ´n.

sed

Trình soa

˙

n tha’o taˆ

˙

p tin theo dòng, su’’du

˙

ng d¯eˆ’ thu

˙

’c hieˆ

˙

n moˆ

˙

t vài bieˆ´n d¯oˆ’i

trên du

˜’ lieˆ

˙

u d¯aˆ`u vào (laˆ´y tu`’ taˆ

˙

p tin hay d¯aˆ`u vào tiêu chuaˆ’n)

Moˆ

˙

t d¯aˆ`u lo

˙

c d¯a˘

˙

c bieˆ

˙

t, câu leˆ

˙

nh

tee

, nhân d¯ôi du˜’ lieˆ

˙

u d¯aˆ`u vào, moˆ

˙

t ma˘

˙

t gu’’i du˜’ lieˆ

˙

u này

d¯eˆ´n d¯aˆ`u ra tiêu chuaˆ’n, ma˘

˙

t khác ghi nó (du

˜’lieˆ

˙

u) vào taˆ

˙

p tin (ngu’o`’i dùng caˆ`n d¯a˘

˙

t tên). Deˆ˜ thaˆ´y

ra˘`ng theo chu´’c na˘ng cu’a mình leˆ

˙

nh

tee

tu’o’ng tu

˙

’ nhu’ nhóm ký tu

˙

’ chuyeˆ’n hu’o´’ng 1>&file.

Kha’ na˘ng cu’a d¯aˆ`u lo

˙

c có theˆ’ mo’’ roˆ

˙

ng vo´’i vieˆ

˙

c su’’ du

˙

ng các bieˆ’u thu´’c chính quy (d¯ieˆ`u khieˆ’n),

cho phép, ví du

˙

, toˆ’ chu´’c tìm kieˆ´m theo các maˆ˜u tìm kieˆ´m tu`’ d¯o’n gia’n d¯eˆ´n phu´’c ta

˙

p và raˆ´t

phu´’c ta

˙

p. Neˆ´u muoˆ

´ n, chúng ta có theˆ’ nói raˆ´t nhieˆ`u veˆ` chuyeˆ’n hu’o´’ng và d¯aˆ`u lo

˙

c. Nhu’ng noˆ

˙

i

dung này có trong phaˆ`n lo´’n các cuoˆ´n sách veˆ` UNIX và Linux (xem phaˆ`n lo`’i keˆ´t). Vì vaˆ

˙

y,

chúng ta se˜ du`’ng o’’ d¯ây và chuyeˆ’n sang moˆ

˙

t phaˆ`n khác, d¯u’o

˙

’c go

˙

i là "môi tru’o`’ng và các bieˆ´n

môi tru’o`’ng" ta

˙

o bo’’i heˆ

˙

vo’.

3.6

Tham bieˆ

´ n và các bieˆ´n soˆ´. Môi tru’o`’ng cu’a heˆ

˙

vo’

Khái nieˆ

˙

m tham bieˆ´n trong heˆ

˙

vo’ bash tu’o’ng u´’ng vo´’i khái nieˆ

˙

m bieˆ´n soˆ

´ trong các ngôn ngu˜’

laˆ

˙

p trình thông thu’o`’ng. Tên go

˙

i (hay ID) cu’a tham bieˆ´n có theˆ’ là moˆ

˙

t tu`’ bao goˆ`m các ký tu

˙

ba’ng chu

˜’ cái, chu˜’ soˆ

´ , daˆ´u ga

˙

ch du’o´’i (chı’ ký tu

˙

’ d¯aˆ`u tiên cu’a tu`’ này không d¯u’o

˙

’c là chu

˜’ soˆ

´ ), và

ca’ nhu

˜’ng ký tu

˙

’ sau: , , #, , - (ga

˙

ch ngang), $,, 0, _ (ga

˙

ch du’o´’i). Chúng ta nói ra˘`ng, tham bieˆ´n

background image

3.6 Tham bieˆ

´ n và các bieˆ´n soˆ´. Môi tru’o`’ng cu’a heˆ

˙

vo’

35

d¯u’o

˙

’c xác d¯i

˙

nh hay d¯u’o

˙

’c d¯a˘

˙

t ra, neˆ´u ngu’o`’i dùng ga˘´n cho nó moˆ

˙

t giá tri

˙

. Giá tri

˙

có theˆ’ là moˆ

˙

t

dòng troˆ

´ ng roˆ˜ng. D

¯ eˆ’ nhìn thaˆ

´ y giá tri

˙

cu’a tham bieˆ´n, ngu’o`’i ta su’’ du

˙

ng ký tu

˙

’ $ o’’ tru’o´’c tên cu’a

nó. Nhu’ vaˆ

˙

y, leˆ

˙

nh:

kênh giao tác

maikhai@fpt:/sm$ echo parameter

hieˆ’n thi

˙

tu`’ parameter, còn leˆ

˙

nh

kênh giao tác

maikhai@fpt:/sm$ echo $parameter

hieˆ’n thi

˙

giá tri

˙

cu’a tham bieˆ´n parameter (taˆ´t nhiên neˆ´u nhu’ tham bieˆ´n d¯ó du’o

˙

’c xác d¯i

˙

nh).

3.6.1

Các da

˙

ng tham bieˆ

´ n khác nhau

Tham bieˆ´n chia thành ba da

˙

ng: tham bieˆ´n vi

˙

trí, tham bieˆ´n d¯a˘

˙

c bieˆ

˙

t (các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t d¯ã nói

o’’ trên chính là tên cu’a nhu˜’ng tham bieˆ´n này) và các bieˆ´n soˆ´ cu’a heˆ

˙

vo’. Tên (ID) cu’a tham

bieˆ´n vi

˙

trí goˆ`m moˆ

˙

t hay vài chu

˜’ soˆ

´ (nhu’ng không có tham bieˆ´n vi

˙

trí 0). Giá tri

˙

cu’a tham bieˆ´n

vi

˙

trí là các tham soˆ

´ cho leˆ

˙

nh, d¯u’o

˙

’c d¯u’a ra khi cha

˙

y heˆ

˙

vo’ (tham soˆ

´ d¯aˆ`u tiên là giá tri

˙

cu’a tham

bieˆ´n 1, tham soˆ

´ thu´’ hai - tham bieˆ´n 2, v.v. . . ). Có theˆ’ dùng câu leˆ

˙

nh

set

d¯eˆ’ thay d¯oˆ’i giá tri

˙

cu’a tham bieˆ´n vi

˙

trí. Giá tri

˙

cu’a các tham bieˆ´n này cu˜ng thay d¯oˆ’i trong khi heˆ

˙

vo’ thu

˙

’c hieˆ

˙

n

moˆ

˙

t trong các hàm soˆ

´ (chúng ta se˜ xem xét vaˆ´n d¯eˆ` này o’’du’o´’i). Các tham bieˆ´n d¯a˘

˙

c bieˆ

˙

t không

gì khác ho’n là các maˆ˜u, mà su

˙

’ thay theˆ

´ (phép theˆ´, phép hoán d¯oˆ’i) chúng d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n nhu’

trong ba’ng

3.2

:

Các tham bieˆ´n d¯a˘

˙

c bieˆ

˙

t, d¯u’o

˙

’c lieˆ

˙

t kê o’’ ba’ng trên, có moˆ

˙

t d¯ieˆ’m khác bieˆ

˙

t d¯ó là chı’ có theˆ’

"nha˘´c" d¯eˆ´n chúng, không theˆ’ gán các giá tri

˙

cho các tham bieˆ´n này. Bieˆ

´ n môi tru’o`’ng, nhìn

tu`’ phía heˆ

˙

vo’, d¯ó là các tham bieˆ´n d¯u’o

˙

’c d¯a˘

˙

t tên. Giá tri

˙

cu’a bieˆ´n môi tru’o`’ng d¯u’o

˙

’c gán nho`’

thao tác có da

˙

ng sau:

kênh giao tác

[user]$ name=value

Trong d¯ó,

name

- tên cu’a bieˆ´n, còn

value

- giá tri

˙

muoˆ

´ n gán cho bieˆ´n (có theˆ’ là moˆ

˙

t

dòng troˆ

´ ng). Tên cu’a bieˆ´n môi tru’o`’ng chı’ có theˆ’ bao goˆ`m các chu˜’ soˆ´, chu˜’ cái và không d¯u’o

˙

’c

ba˘´t d¯aˆ`u bo’’i moˆ

˙

t chu

˜’soˆ

´ . (Tin ra˘`ng sau khi d¯o

˙

c d¯oa

˙

n vieˆ´t veˆ` tham bieˆ´n vi

˙

trí thì các ba

˙

n d¯ã hieˆ’u

ta

˙

i sao moˆ

˙

t bieˆ´n môi tru’o`’ng không theˆ’ ba˘´t d¯aˆ`u bo’’i moˆ

˙

t chu

˜’ soˆ

´ .) Giá tri

˙

có theˆ’ là baˆ´t ky` moˆ

˙

t

dòng va˘n ba’n nào. Neˆ´u giá tri

˙

có chu´’a nhu˜’ng ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t, thì caˆ`n d¯a˘

˙

t nó (giá tri

˙

) vào daˆ´u

ngoa˘

˙

c. Giá tri

˙

taˆ´t nhiên se˜ không chu´’a các daˆ´u ngoa˘

˙

c này. Neˆ´u moˆ

˙

t bieˆ´n môi tru’òng d¯u’o

˙

’c xác

d¯i

˙

nh, thì cu˜ng có theˆ’ bi

˙

xóa bo’ ba˘`ng leˆ

˙

nh noˆ

˙

i trú

unset

Taˆ

˙

p ho

˙

’p taˆ

´ t ca’ các bieˆ´n này cùng vo´’i

các giá tri

˙

d¯ã gán cho chúng go

˙

i là môi tru’o`’ng (enviroment) cu’a heˆ

˙

vo’. Có theˆ’ xem nó (môi

tru’o`’ng) nho`’ leˆ

˙

nh

set

khi không có tham soˆ

´ (có theˆ’ caˆ`n dùng d¯u’o`’ng oˆ´ng ’

set | less

",

neˆ´u môi tru’o`’ng lo´’n, có nhieˆ`u bieˆ´n). D

¯ eˆ’ xem giá tri

˙

cu’a moˆ

˙

t bieˆ´n môi tru’o`’ng cu

˙

theˆ’, thay vì

dùng leˆ

˙

nh

set

(khi này caˆ`n tìm trong keˆ´t qua’ cu’a nó bieˆ´n muoˆ

´ n xem), có theˆ’ su’’ du

˙

ng leˆ

˙

nh

echo

:

kênh giao tác

[user]$ echo $name

background image

36

Bash

Ba’ng 3.2: Thay theˆ´ các tham bieˆ´n d¯a˘

˙

c bieˆ

˙

t

Tham bieˆ´n

Quy luaˆ

˙

t thay theˆ´

*

Thay theˆ´ bo’’i các tham bieˆ´n vi

˙

trí, ba˘´t d¯aˆ`u tu`’ tham bieˆ´n thu´’ nhaˆ´t. Neˆ´u su

˙

thay theˆ´ thu

˙

’c hieˆ

˙

n trong daˆ´u ngoa˘

˙

c kép, thì tham bieˆ´n này se˜ d¯u’o

˙

’c thay

bo’’i moˆ

˙

t tu`’ duy nhaˆ

´ t, mà ta

˙

o ra tu`’ taˆ´t ca’ các tham bieˆ´n vi

˙

trí, phân cách

nhau bo’’i ký tu

˙

’ d¯aˆ`u tiên cu’a bieˆ

´ n soˆ´ IFS (se˜ nói d¯eˆ´n o’’ sau). Tu´’c là "$"

tu’o’ng d¯u’o’ng vo´’i "$1c$2c. . . ", trong d¯ó

c

- ký tu

˙

’ d¯aˆ`u tiên trong giá tri

˙

cu’a bieˆ´n soˆ

´ IFS. Neˆ´u giá tri

˙

cu’a IFS troˆ

´ ng, hoa˘

˙

c không d¯u’o

˙

’c xác d¯i

˙

nh

giá tri

˙

, thì tham bieˆ´n phân cách nhau bo’’i các khoa’ng tra˘´ng.

@

Thay theˆ´ bo’’i tham bieˆ´n vi

˙

trí, ba˘´t d¯aˆ`u tu`’tham bieˆ´n thu´’nhaˆ´t. Neˆ´u thay theˆ´

thu

˙

’c hieˆ

˙

n trong ngoa˘

˙

c kép, thì moˆ˜i tham bieˆ´n se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i moˆ

˙

t

tu`’ riêng bieˆ

˙

t. Tu´’c là, "$@" tu’o’ng d¯u’o’ng vo´’i "$1" "$2" . . . Neˆ´u không có

tham bieˆ´n vi

˙

trí, thì giá tri

˙

se˜ không d¯u’o

˙

’c thieˆ

´ t laˆ

˙

p (tham bieˆ´n se˜ bi

˙

x

#

Thay theˆ´ bo’’i giá tri

˙

thaˆ

˙

p phân cu’a các tham bieˆ´n vi

˙

trí.

?

Thay theˆ´ bo’’i tra

˙

ng thái thoát ra cu’a câu leˆ

˙

nh cuoˆ

´ i cùng trong d¯u’o`’ng oˆ´ng,

mà d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n trong cheˆ´ d¯oˆ

˙

neˆ`n tru’o´’c.

- (ga

˙

ch ngang)

Thay theˆ´ bo’’i giá tri

˙

các co`’, flag, d¯u’o

˙

’c d¯a˘

˙

t bo’’i leˆ

˙

nh noˆ

˙

i trú

set

hay trong

khi cha

˙

y heˆ

˙

vo’.

$

Thay theˆ´ bo’’i soˆ´ cu’a tieˆ´n trình (PID - process identificator)
Thay theˆ´ bo’’i soˆ´ cu’a tieˆ´n trình (PID) cuoˆ´i cùng trong soˆ´ các câu leˆ

˙

nh thu

˙

’c

hieˆ

˙

n trong neˆ`n sau.

0

Thay theˆ´ bo’’i tên heˆ

˙

vo’ hay tên cu’a script d¯ang cha

˙

y. Neˆ´u bash cha

˙

y

moˆ

˙

t taˆ

˙

p tin leˆ

˙

nh nào d¯ó, thì $0 có giá tri

˙

ba˘`ng tên cu’a taˆ

˙

p tin này. Trong

tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i giá tri

˙

này ba˘`ng d¯u’o`’ng daˆ˜n d¯aˆ`u d¯u’ d¯eˆ´n heˆ

˙

vo’ (ví

du

˙

,

/bin/bash

_ (ga

˙

ch du’o´’i)

Thay theˆ´ bo’’i tham soˆ´ cuoˆ´i cùng cu’a câu leˆ

˙

nh tru’o´’c trong soˆ´ các câu leˆ

˙

nh

d¯ã d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n (neˆ´u d¯ó la

˙

i là moˆ

˙

t tham bieˆ´n hay bieˆ´n soˆ

´ , thì se˜ su’’

du

˙

ng giá tri

˙

cu’a n

Trong d¯ó, caˆ`n thay name bo’’i tên bieˆ´n (nhu’ vaˆ

˙

y, trong tru’o`’ng ho

˙

’p này, ba

˙

n la

˙

i caˆ`n pha’i

bieˆ´t tên cu’a bieˆ´n muoˆ

´ n xem). Trong soˆ´ các bieˆ´n, mà ba

˙

n se˜ thaˆ´y trong keˆ´t qua’ cu’a leˆ

˙

nh

set

,

có nhu

˜’ng bieˆ´n raˆ´t thú vi

˙

. Xin hãy chú ý d¯eˆ´n, ví du

˙

, bieˆ´n RANDOM. Neˆ´u thu’’cha

˙

y vài laˆ`n liên

tieˆ´p câu leˆ

˙

nh sau:

kênh giao tác

maikhai@fpt:/sw$ echo $RANDOM

thì moˆ˜i laˆ`n ba

˙

n se˜ nhaˆ

˙

n d¯u’o

˙

’c moˆ

˙

t giá tri

˙

mo´’i. Nguyên nhân là vì bieˆ´n này tra’ la

˙

i moˆ

˙

t giá

tri

˙

ngaˆ˜u nhiên

4

trong khoa’ng 0 - 32 768.

3.6.2

Daˆ

´ u nha˘´c cu’a heˆ

˙

vo’

Moˆ

˙

t trong các bieˆ´n raˆ´t quan tro

˙

ng có tên PS1. Bieˆ´n này cho bieˆ´t da

˙

ng cu’a daˆ´u nha˘´c, mà

bash

d¯u’a ra trong khi cho`’ ngu’o`’i dùng nhaˆ

˙

p câu leˆ

˙

nh tieˆ´p theo. Theo ma˘

˙

c d¯i

˙

nh thì bieˆ´n này d¯u’o

˙

’c

gán giá tri

˙

"

\s-\v\$

, tuy nhiên trên các ba’n phân phoˆ

´ i khác nhau thu’o`’ng có các script

4

random là tu`’ tieˆ´ng Anh có nghı˜a ngaˆ˜u nhiên

background image

3.6 Tham bieˆ

´ n và các bieˆ´n soˆ´. Môi tru’o`’ng cu’a heˆ

˙

vo’

37

kho’’i d¯oˆ

˙

ng (hay script d¯a˘ng nhaˆ

˙

p) xác d¯i

˙

nh la

˙

i bieˆ´n này. Nói chung thì trong

bash

có taˆ´t ca’

boˆ

´ n daˆ´u nha˘´c, d¯u’o

˙

’c su’’ du

˙

ng trong các tru’o`’ng ho

˙

’p khác nhau. Bieˆ

´ n PS1 d¯u’a ra da

˙

ng cu’a daˆ´u

nha˘´c khi heˆ

˙

vo’ cho`’ nhaˆ

˙

p leˆ

˙

nh. Daˆ´u nha˘´c thu´’ hai, xác d¯i

˙

nh bo’’i bieˆ´n PS2, xuaˆ´t hieˆ

˙

n khi heˆ

˙

vo’

cho`’ ngu’o`’i dùng nhaˆ

˙

p thêm moˆ

˙

t vài du

˜’ lieˆ

˙

u caˆ`n thieˆ´t nào d¯ó d¯eˆ’ có theˆ’ tieˆ´p tu

˙

c cha

˙

y câu leˆ

˙

nh

(chu’o’ng trình) d¯ã go

˙

i. Theo ma˘

˙

c d¯i

˙

nh bieˆ´n PS2 có giá tri

˙

">". Raˆ´t có theˆ’ ba

˙

n d¯ã nhìn thaˆ´y

daˆ´u nha˘´c này, khi cha

˙

y leˆ

˙

nh

cat

d¯eˆ’ d¯u’a du˜’ lieˆ

˙

u vào tu`’ bàn phím vào taˆ

˙

p tin. Moˆ

˙

t ví du

˙

khác

- leˆ

˙

nh

ftp

, sau khi cha

˙

y leˆ

˙

nh này daˆ´u nha˘´c se˜ có da

˙

ng nhu’ d¯ã nói. Daˆ´u nha˘´c, xác d¯i

˙

nh bo’’i

bieˆ´n PS3, su’’ du

˙

ng trong leˆ

˙

nh

select

. Daˆ´u nha˘´c, xác d¯i

˙

nh bo’’i bieˆ´n PS4, d¯u’o

˙

’c d¯u’a ra tru’o´’c

moˆ˜i câu leˆ

˙

nh, trong lúc

bash

theo dõi quá trình thu

˙

’c hieˆ

˙

n. Giá tri

˙

theo ma˘

˙

c d¯i

˙

nh - "+". Neˆ´u

có mong muoˆ

´ n, ba

˙

n có theˆ’ thay d¯oˆ’i các bieˆ´n PS1 và PS2. Khi này có theˆ’ su’’ du

˙

ng baˆ´t ky` ký

tu

˙

’ nào nhaˆ

˙

p tu`’ bàn phím, cu˜ng nhu’ moˆ

˙

t vài ký tu

˙

’ chuyên dùng d¯eˆ’ xác d¯i

˙

nh da

˙

ng daˆ´u nha˘´c

nhu’trong ba’ng

3.3

(chı’ d¯u’a ra moˆ

˙

t vài trong soˆ

´ chúng làm ví du

˙

, danh sách d¯aˆ`y d¯u’ xem trong

trang man cu’a

bash

- gõ leˆ

˙

nh "

man bash

").

Ba’ng 3.3: Ký tu

˙

’ xác d¯i

˙

nh da

˙

ng daˆ´u nha˘´c

Cu

˙

m ký tu

˙

’ Giá tri

˙

(keˆ´t qua’ thu d¯u’o

˙

’c)

\a

Tín hieˆ

˙

u âm thanh (mã ASCII 07)

\d

Tho`’i gian o’’ da

˙

ng "Thu´’, tháng, ngày", ví du

˙

, Sun, Dec, 26.

\h

Tên máy (hostname) d¯eˆ´n daˆ´u chaˆ´m d¯aˆ`u tiên.

\H

Tên máy d¯aˆ`y d¯u’, ví du

˙

teppi.phanthinh.com

\t

Tho`’i gian hieˆ

˙

n tho`’i o’’ da

˙

ng 24 gio`’: HH:MM:SS (gio`’:phút:giây)

\T

Tho`’i gian hieˆ

˙

n tho`’i o’’ da

˙

ng 12 gio`’: HH:MM:SS

\@

Tho`’i gian hieˆ

˙

n tho`’i o’’ da

˙

ng 12 gio`’ am/pm (sáng/chieˆ`u)

\u

Tên ngu’o`’i dùng d¯ã cha

˙

y heˆ

˙

vo’, ví du

˙

teppi

\w

Tên d¯aˆ`y d¯u’ cu’a thu’ mu

˙

c làm vieˆ

˙

c hieˆ

˙

n tho`’i (ba˘´t d¯aˆ`u tu`’ goˆ´c), ví du

˙

/home/teppi82/project/l4u

\W

Thu’ mu

˙

c hieˆ

˙

n tho`’i (không có d¯u’o`’ng daˆ˜n)

\$

Ký tu

˙

’ #, neˆ

´ u heˆ

˙

vo’ d¯u’o

˙

’c cha

˙

y bo’’i ngu’o`’i dùng root, và ký tu

˙

’ $, neˆ

´ u heˆ

˙

vo’

d¯u’o

˙

’c cha

˙

y bo’’i ngu’o`’i dùng thu’o`’ng.

\nnn

Ký tu

˙

’ có mã heˆ

˙

tám nnn

\n

Dòng mo´’i (chuyeˆ’n dòng)

\s

Tên heˆ

˙

vo’

\#

Soˆ

´ hieˆ

˙

n tho`’i cu’a câu leˆ

˙

nh

\\

Daˆ´u ga

˙

ch ngu’o

˙

’c (backslash)

\[

Sau ký tu

˙

’ này taˆ

´ t ca’ các ký tu

˙

’ se˜ không d¯u’o

˙

’c in ra.

\]

Keˆ´t thúc chuoˆ˜i các ký tu

˙

’ không d¯u’o

˙

’c in ra.

\!

Soˆ

´ thu´’ tu

˙

’ cu’a leˆ

˙

nh hieˆ

˙

n tho`’i trong li

˙

ch su’’ các câu leˆ

˙

nh d¯ã dùng.

Soˆ

´ cu’a leˆ

˙

nh (soˆ

´ thu´’tu

˙

’ cu’a leˆ

˙

nh d¯ang thu

˙

’c hieˆ

˙

n trong buoˆ’i làm vieˆ

˙

c hieˆ

˙

n tho`’i) có theˆ’ khác

vo´’i soˆ´ cu’a chính nó trong danh sách "li

˙

ch su’’ các câu leˆ

˙

nh", bo’’i vì danh sách còn chu´’a ca’

nhu

˜’ng câu leˆ

˙

nh d¯ã d¯u’o

˙

’c ghi la

˙

i trong taˆ

˙

p tin li

˙

ch su’’. Sau khi giá tri

˙

cu’a bieˆ´n d¯u’o

˙

’c heˆ

˙

vo’ d¯o

˙

c

xong, se˜ xa’y ra su

˙

’ thay theˆ

´ theo các quy luaˆ

˙

t mo’’ roˆ

˙

ng trong ba’ng trên, d¯oˆ`ng tho`’i còn xa’y ra

su

˙

’ thay theˆ

´ trong tên các câu leˆ

˙

nh, trong các bieˆ’u thu´’c soˆ´ ho

˙

c, và su

˙

’ chia tu`’ (word splitting).

Chúng ta se˜ nói d¯eˆ´n nhu˜’ng su

˙

’thay theˆ

´ này o’’du’o´’i.Ví du

˙

, sau khi thu

˙

’c hieˆ

˙

n leˆ

˙

nh (vì trong dòng

va˘n ba’n có khoa’ng troˆ

´ ng, nên nhaˆ´t thieˆ´t pha’i có daˆ´u ngoa˘

˙

c):

kênh giao tác

[user/root]$ PS1="[\u@\h \W]\$"

background image

38

Bash

thì trong daˆ´u nha˘´c se˜ có daˆ´u mo’’ ngoa˘

˙

c vuông, tên ngu’o`’i dùng, ký hieˆ

˙

u , tên máy, khoa’ng

tra˘´ng, tên cu’a thu’ mu

˙

c hieˆ

˙

n tho`’i (không có d¯u’o`’ng daˆ˜n), daˆ´u d¯óng ngoa˘

˙

c vuông, và ký hieˆ

˙

u

$ (neˆ´u trên heˆ

˙

vo’ d¯ang làm vieˆ

˙

c ngu’o`’i dùng bình thu’o`’ng) hay #(neˆ´u heˆ

˙

vo’ cha

˙

y du’o´’i ngu’o`’i

dùng root).

3.6.3

Bieˆ

´ n môi tru’o`’ng PATH

Còn moˆ

˙

t bieˆ´n cu˜ng quan tro

˙

ng nu

˜’a có tên

PATH

. Bieˆ´n này d¯u’a ra danh sách d¯u’o`’ng daˆ˜n

d¯eˆ´n các thu’ mu

˙

c, mà

bash

se˜ tìm kieˆ´m taˆ

˙

p tin (tru’o`’ng ho

˙

’p riêng là các taˆ

˙

p tin leˆ

˙

nh)

trong tru’o`’ng ho

˙

’p, d¯u’o`’ng daˆ˜n d¯aˆ`y d¯u’ d¯eˆ

´ n taˆ

˙

p tin không d¯u’o

˙

’c d¯u’a ra. Các thu’ mu

˙

c trong

danh sách này phân cách nhau bo’’i daˆ´u hai chaˆ´m (:). Theo ma˘

˙

c d¯i

˙

nh bieˆ´n

PATH

chu´’a

các thu’ mu

˙

c

/usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin

, tu´’c là có

da

˙

ng:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

D

¯ eˆ’ thêm thu’ mu

˙

c

vào danh sách này, caˆ`n thu

˙

’c hieˆ

˙

n câu leˆ

˙

nh sau:

kênh giao tác

[user]$ PATH=$PATH:new_path

Khi tìm kieˆ´m, heˆ

˙

vo’ "lu

˙

c lo

˙

i" các thu’ mu

˙

c theo d¯úng thu´’ tu

˙

’ d¯ã lieˆ

˙

t kê trong bieˆ´n

PATH

.

Moˆ

˙

t chú ý nho’, có theˆ’ d¯u’a vào danh sách này thu’ mu

˙

c hieˆ

˙

n tho`’i, khi thêm vào bieˆ´n

PATH

moˆ

˙

t daˆ´u chaˆ´m (.). Tuy nhiên, d¯ây là d¯ieˆ`u không khuyên làm vo´’i lý do ba’o maˆ

˙

t: ngu’o`’i có ác

ý có theˆ’ d¯a˘

˙

t vào thu’ mu

˙

c dùng chung moˆ

˙

t chu’o’ng trình nào d¯ó, có cùng tên vo´’i moˆ

˙

t trong soˆ

´

nhu

˜’ng câu leˆ

˙

nh thu’o`’ng dùng bo’’i root, nhu’ng thu

˙

’c hieˆ

˙

n nhu

˜’ng chu´’c na˘ng khác hoàn toàn (d¯a˘

˙

c

bieˆ

˙

t nguy hieˆ’m neˆ´u thu’ mu

˙

c hieˆ

˙

n tho`’i d¯u´’ng o’’ d¯aˆ`u danh sách tìm kieˆ´m).

3.6.4

Bieˆ

´ n môi tru’o`’ng IFS

Bieˆ´n này xác d¯i

˙

nh ký tu

˙

’ (cu

˙

m ký tu

˙

’) phân cách (Internal Field Separator), su’’ du

˙

ng trong thao

tác phân chia tu`’ngu˜’khi bieˆ´n d¯oˆ’i dòng leˆ

˙

nh, mà heˆ

˙

vo’ thu

˙

’c hieˆ

˙

n tru’o´’c khi cha

˙

y moˆ

˙

t câu leˆ

˙

nh nào

d¯ó (xem du’o´’i). Giá tri

˙

theo ma˘

˙

c d¯i

˙

nh cu’a bieˆ´n này - "<Khoa’ng_tra˘´ng><Tab><Ký_tu

˙

’_hàng_mo´’i>".

Neˆ´u thu’’ gõ leˆ

˙

nh "

echo $IFS

", ba

˙

n se˜ nhaˆ

˙

n d¯u’o

˙

’c moˆ

˙

t nga

˙

c nhiên nho’.

3.6.5

Thu’ mu

˙

c hieˆ

˙

n tho`’i và thu’ mu

˙

c cá nhân

Tên cu’a thu’mu

˙

c hieˆ

˙

n tho`’i ghi trong bieˆ´n môi tru’o`’ng vo´’i tên

PWD

, và giá tri

˙

cu’a bieˆ´n này thay

d¯oˆ’i sau moˆ˜i laˆ`n cha

˙

y chu’o’ng trình

cd

(cu˜ng nhu’ moˆ˜i laˆ`n thay d¯oˆ’i thu’ mu

˙

c hieˆ

˙

n tho`’i theo baˆ´t

ky` cách nào, ví du

˙

, qua Midnight Commander). Tu’o’ng tu

˙

’ nhu’ vaˆ

˙

y tên d¯aˆ`y d¯u’ (goˆ`m ca’ d¯u’o`’ng

daˆ˜n) cu’a thu’ mu

˙

c cá nhân cu’a ngu’o`’i dùng, cha

˙

y tieˆ´n trình d¯ã cho, ghi trong bieˆ´n

HOME

.

3.6.6

Câu leˆ

˙

nh export

Khi heˆ

˙

vo’ cha

˙

y moˆ

˙

t chu’o’ng trình hay câu leˆ

˙

nh nào d¯ó, nó (heˆ

˙

vo’) cung caˆ´p cho chúng moˆ

˙

t

phaˆ`n bieˆ´n môi tru’o`’ng. D

¯ eˆ’ có theˆ’ cung caˆ

´ p bieˆ´n môi tru’o`’ng cho tieˆ´n trình cha

˙

y tu`’ heˆ

˙

vo’, caˆ`n

gán giá tri

˙

cho bieˆ´n này vo´’i leˆ

˙

nh

export

, tu´’c là thay vì

kênh giao tác

[user]$ name=value

caˆ`n gõ:

background image

3.7 Khai trieˆ’n bieˆ’u thu

´’c

39

kênh giao tác

[user]$ export name=value

Trong tru’o`’ng ho

˙

’p này, taˆ

´ t ca’ các chu’o’ng trình cha

˙

y tu`’ heˆ

˙

vo’ (keˆ’ ca’ ba’n sao thu´’ hai cu’a

chính heˆ

˙

vo’) se˜ có quyeˆ`n truy caˆ

˙

p to´’i các bieˆ´n d¯u’o

˙

’c gán nhu’ vaˆ

˙

y, tu´’c là su’’ du

˙

ng giá tri

˙

cu’a

chúng qua tên.

3.7

Khai trieˆ’n bieˆ’u thu

´’c

Hay he

ˆ

˙

vo

’ d¯o

˙

c các câu le

ˆ

˙

nh nhu’ the

ˆ

´ nào?

Khi heˆ

˙

vo’ nhaˆ

˙

n d¯u’o

˙

’c moˆ

˙

t dòng

leˆ

˙

nh này d¯ó caˆ`n thu

˙

’c hieˆ

˙

n, nó (heˆ

˙

vo’) tru’o´’c khi cha

˙

y câu leˆ

˙

nh thu

˙

’c hieˆ

˙

n vieˆ

˙

c "phân tích ngu

˜’

pháp" dòng leˆ

˙

nh này (gioˆ

´ ng trong ngôn ngu˜’, phân tích chu’ ngu˜’, vi

˙

ngu

˜’). Moˆ

˙

t trong nhu

˜’ng

bu’o´’c cu’a su

˙

’ phân tích này là phép mo’’ hay khai trieˆ’n bieˆ’u thu´’c (expansion). Trong

bash

ba’y loa

˙

i khai trieˆ’n bieˆ’u thu´’c:

• Khai trieˆ’n daˆ´u ngoa˘

˙

c (brace expansion);

• Thay theˆ´ daˆ´u ngã (tilde expansion);

• Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ

´ ;

• Phép theˆ´ các câu leˆ

˙

nh;

• Phép theˆ´ soˆ

´ ho

˙

c (thu

˙

’c hieˆ

˙

n tu`’ trái sang pha’i);

• Phép chia tu`’ (word splitting);

• Khai trieˆ’n các maˆ˜u tên taˆ

˙

p tin và thu’ mu

˙

c (pathname expansion).

Các thao tác này d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n theo d¯úng thu´’ tu

˙

’ lieˆ

˙

t kê trên. Chúng ta se˜ xem xét chúng

theo tu´’ tu

˙

’ này.

3.7.1

Khai trieˆ’n daˆ

´ u ngoa˘

˙

c

Khai trieˆ’n daˆ´u ngoa˘

˙

c toˆ

´ t nhaˆ´t minh ho

˙

a trên ví du

˙

. Gia’ thieˆ´t, chúng ta caˆ`n ta

˙

o thu’ mu

˙

c con

trong moˆ

˙

t thu’mu

˙

c nào d¯ó, hoa˘

˙

c thay d¯oˆ’i ngu’o`’i dùng so’’ hu˜’u cu’a vài taˆ

˙

p tin cùng moˆ

˙

t lúc. Có

theˆ’ thu

˙

’c hieˆ

˙

n d¯ieˆ`u này nho`’ các câu leˆ

˙

nh sau:

kênh giao tác

[user]$ mkdir /usr/src/unikey/{old,new,dist,bugs}

[root]# chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}

Trong tru’o`’ng ho

˙

’p d¯aˆ`u, trong thu’ mu

˙

c

/usr/src/unikey/

se˜ ta

˙

o ra các thu’ mu

˙

c con

old,new,dist

, và

bugs

. Trong tru’o`’ng ho

˙

’p thu´’hai, ngu’o`’i dùng so’’ hu

˜’u cu’a các taˆ

˙

p tin sau

se˜ thay d¯oˆ’i (thành root):

• /usr/ucb/ex

• /usr/lib/ex?.?

background image

40

Bash

• /usr/ucb/edit

• /usr/lib/ex?.?

• /usr/ucb/ex

• /usr/lib/how_ex

• /usr/ucb/edit

• /usr/lib/how_ex

Tu´’c là vo´’i moˆ˜i ca˘

˙

daˆ´u ngoa˘

˙

c se˜ ta

˙

o ra vài dòng riêng re˜ (soˆ

´ nhu˜’ng dòng này ba˘`ng soˆ´ tu`’

na˘`ng trong daˆ´u ngoa˘

˙

c) ba˘`ng cách ghi thêm vào tru’o´’c moˆ˜i tu`’trong ngoa˘

˙

c nhu

˜’ng gì d¯u´’ng tru’o´’c

daˆ´u ngoa˘

˙

c, và ghi thêm vào sau moˆ˜i tu`’ này nhu˜’ng gì d¯u´’ng sau daˆ´u ngoa˘

˙

c. Moˆ

˙

t ví du

˙

khác:

dòng

a{d,c,b}e

khi khai trieˆ’n se˜ thu d¯u’o

˙

’c ba tu`’ "

ade ace abe

". Khai trieˆ’n daˆ´u ngoa˘

˙

c

d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n tru’o´’c các da

˙

ng khai trieˆ’n khác trong dòng leˆ

˙

nh, ho’n nu˜’a taˆ´t ca’ các ký tu

˙

’ d¯a˘

˙

c

bieˆ

˙

t có trong dòng leˆ

˙

nh, keˆ’ ca’ nhu˜’ng ký tu

˙

’ na˘`m trong daˆ

´ u ngoa˘

˙

c, se˜ d¯u’o

˙

’c giu

˜’ không thay d¯oˆ’i

(chúng se˜ d¯u’o

˙

’c biên di

˙

ch o’’ các bu’o´’c phía sau).

3.7.2

Thay theˆ

´ daˆ´u ngã (Tilde Expansion)

Neˆ´u nhu’tu`’ba˘´t d¯aˆ`u vo´’i ký tu

˙

’daˆ

´ u ngã (’∼’), taˆ´t ca’ các ký tu

˙

’d¯u´’ng tru’o´’c daˆ

´ u ga

˙

ch chéo d¯aˆ`u tiên

(hay taˆ´t ca’ các ký tu

˙

’ neˆ

´ u nhu’ không có daˆ´u ga

˙

ch chéo) se˜ d¯u’o

˙

’c hieˆ’u là tên ngu’o`’i dùng (login

name). Neˆ´u nhu’tên này là moˆ

˙

t dòng roˆ˜ng (tu´’c là daˆ´u ga

˙

ch chéo d¯u´’ng ngay phía sau daˆ´u ngã),

thì daˆ´u ngã se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i giá tri

˙

cu’a bieˆ´n

HOME

. Và neˆ´u giá tri

˙

cu’a bieˆ´n

HOME

không

d¯u’o

˙

’c gán thì daˆ

´ u ngã se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i d¯u’o`’ng daˆ˜n d¯aˆ`u d¯u’ d¯eˆ´n thu’ mu

˙

c cá nhân cu’a ngu’o`’i

dùng, mà d¯ã cha

˙

y heˆ

˙

vo’. Neˆ´u nhu’ ngay sau daˆ´u ngã (và tru’o´’c daˆ´u ga

˙

ch chéo) là moˆ

˙

t tu`’ trùng

vo´’i tên cu’a moˆ

˙

t ngu’o`’i dùng ho

˙

’p pháp, thì daˆ

´ u ngã coˆ

˙

ng vo´’i tên ngu’o`’i dùng d¯u’o

˙

’c thay theˆ

´ bo’’i

d¯u’o`’ng daˆ˜n d¯aˆ`y d¯u’ d¯eˆ´n thu’ mu

˙

c cá nhân cu’a ngu’o`’i dùng này. Neˆ´u nhu’ tu`’ d¯u´’ng sau daˆ´u ngã

không pha’i là tên cu’a moˆ

˙

t ngu’o`’i dùng (và không roˆ˜ng), thì tu`’không bi

˙

thay d¯oˆ’i. Neˆ´u nhu’sau

daˆ´u ngã là ’+’, hay ký hieˆ

˙

u này se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i tên d¯aˆ`u d¯u’ cu’a thu’ mu

˙

c hieˆ

˙

n tho`’i (tu´’c là

giá tri

˙

cu’a bieˆ´n

PWD

). Neˆ´u du´’ng sau daˆ´u ngã là ’-’, thì thay theˆ´ giá tri

˙

cu’a bieˆ´n

OLDPWD

(thu’

mu

˙

c "cu˜").

3.7.3

Phép theˆ

´ các tham bieˆ´n và bieˆ´n soˆ´

Ký tu

˙

’ $ d¯u’o

˙

’c su’’ du

˙

ng cho các thao tác theˆ´ tham bieˆ´n, theˆ´ các câu leˆ

˙

nh và theˆ´ các bieˆ’u thu´’c

soˆ

´ ho

˙

c. Bieˆ’u thu´’c hay tên d¯u´’ng sau $ có theˆ’ d¯u’o

˙

’c d¯u’a vào ngoa˘

˙

c, không nhaˆ´t thieˆ´t, nhu’ng

raˆ´t tieˆ

˙

n, vì daˆ´u ngoa˘

˙

c phân cách bieˆ’u thu´’c vo´’i các tu`’ hay ký tu

˙

’ d¯u´’ng sau. Nhu’ vaˆ

˙

y, d¯eˆ’ go

˙

i

giá tri

˙

cu’a tham bieˆ´n nói chung cu˜ng nhu’ bieˆ´n môi tru’o`’ng nói riêng trong dòng leˆ

˙

nh, caˆ`n d¯a˘

˙

t

bieˆ’u thu´’c da

˙

ng $parameter. Daˆ´u ngoa˘

˙

c chı’ caˆ`n thieˆ´t, neˆ´u tên cu’a tham bieˆ´n có chu´’a vài chu˜’

soˆ

´ , hoa˘

˙

c khi theo sau tên còn có các ký tu

˙

’ khác, mà chúng ta không muoˆ

´ n heˆ

˙

vo’ "hieˆ’u laˆ`m"

chúng là moˆ

˙

t phaˆ`n cu’a tên tham bieˆ´n. Trong taˆ´t ca’ các giá tri

˙

cu’a bieˆ´n soˆ

´ xa’y ra phép theˆ´ daˆ´u

ngã (∼), su

˙

’ khai trieˆ’n tham bieˆ

´ n và bieˆ´n soˆ´, phép theˆ´ các câu leˆ

˙

nh, phép theˆ´ các bieˆ’u thu´’c soˆ´

ho

˙

c, cu˜ng nhu’ xóa các ký tu

˙

’ trích daˆ˜n (xem du’o´’i). Su

˙

’ phân chia tu`’ không xa’y ra, tru`’ tru’o`’ng

ho

˙

’p "$" (lo`’i gia’i thích xem o’’ ba’ng soˆ

´ 3). Su

˙

’ khai trieˆ’n các maˆ˜u tên taˆ

˙

p tin và thu’ mu

˙

c cu˜ng

không d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n.

background image

3.7 Khai trieˆ’n bieˆ’u thu

´’c

41

3.7.4

Phép theˆ

´ các câu leˆ

˙

nh

Phép theˆ´ các câu leˆ

˙

nh là moˆ

˙

t công cu

˙

raˆ´t ma

˙

ng cu’a

bash

. Ý nghı˜a cu’a nó na˘`m o’’ choˆ˜ thay theˆ´

tên các câu leˆ

˙

nh bo’’i keˆ´t qua’ thu

˙

’c hieˆ

˙

n cu’a chúng. Có hai da

˙

ng phép theˆ´ leˆ

˙

nh:

$(command)

‘command‘

Neˆ´u u´’ng du

˙

ng da

˙

ng thu´’ hai (chú ý o’’ d¯ây su’’ du

˙

ng daˆ´u "ngoa˘

˙

c d¯o’n ngu’o

˙

’c",

phím cho nó thu’o`’ng na˘`m trên phím Tab), thì daˆ´u ga

˙

ch ngu’o

˙

’c (\) o’’ trong daˆ

´ u ngoa˘

˙

c se˜ có chu´’c

na˘ng nhu’ moˆ

˙

t ký tu

˙

’ thông thu’o`’ng, tru`’ tru’o`’ng ho

˙

’p, khi d¯u´’ng sau nó (daˆ

´ u ga

˙

ch ngu’o

˙

’c) là moˆ

˙

t

$, ‘, hay moˆ

˙

t \. Neˆ´u nhu’su’’du

˙

ng da

˙

ng $(command), thì taˆ´t ca’ các ký tu

˙

’ d¯u´’ng trong ngoa˘

˙

c ta

˙

o

thành moˆ

˙

t câu leˆ

˙

nh, không có ký tu

˙

’ nào có ý nghı˜a d¯a˘

˙

c bieˆ

˙

t. Neˆ´u phép theˆ´ câu leˆ

˙

nh xa’y ra

phía trong ngoa˘

˙

c kép, thì trong keˆ´t qua’ cu’a phép theˆ´ se˜ không thu

˙

’c hieˆ

˙

n phép phân chia tu`’ và

su

˙

’ khai trieˆ’n maˆ˜u tên taˆ

˙

p tin và thu’ mu

˙

c.

3.7.5

Phép theˆ

´ soˆ´ ho

˙

c (Arithmetic Expansion)

Phép theˆ´ soˆ

´ ho

˙

c cho phép tính giá tri

˙

cu’a moˆ

˙

t bieˆ’u thu´’c soˆ´ ho

˙

c và thay theˆ´ nó (bieˆ’u thu´’c)

bo’’i keˆ´t qua’ thu d¯u’o

˙

’c. Có hai da

˙

ng phép theˆ´ soˆ

´ ho

˙

c:

$[expression] ((expression))

Trong d¯ó

expression

d¯u’o

˙

’c hieˆ’u (d¯u’o

˙

’c

bash

d¯o

˙

c) nhu’ khi d¯u´’ng trong ngoa˘

˙

c kép, nhu’ng

nhu

˜’ng daˆ´u ngoa˘

˙

c kép o’’ trong

expression

la

˙

i d¯u’o

˙

’c d¯o

˙

c nhu’ moˆ

˙

t ký tu

˙

’ thu’o`’ng. Phía trong

expression

có thu

˙

’c hieˆ

˙

n các phép theˆ´ tham bieˆ´n và theˆ´ câu leˆ

˙

nh. Cú pháp cu’a bieˆ’u thu´’c

expression

tu’o’ng tu

˙

’ nhu’ cú pháp cu’a bieˆ’u thu´’c soˆ

´ ho

˙

c cu’a ngôn ngu

˜’

C

, cu

˙

theˆ’ ho’n veˆ` vaˆ´n

d¯eˆ` này có theˆ’ d¯o

˙

c trong phaˆ`n ARITHMETIC EVALUATION cu’a trang man cu’a

bash

. Ví

du

˙

, câu leˆ

˙

nh

kênh giao tác

[user]$ echo $((2 + 3 * 5))

cho keˆ´t qua’ ba˘`ng "17". Neˆ´u bieˆ’u thu´’c không chính xác,

bash

se˜ d¯u’a ra thông báo loˆ˜i.

3.7.6

Phân chia tu`’ (word splitting)

Sau khi thu

˙

’c hieˆ

˙

n xong các phép theˆ´ tham bieˆ´n, theˆ´ leˆ

˙

nh, và theˆ´ các bieˆ’u thu´’c soˆ´ ho

˙

c, heˆ

˙

vo’ la

˙

i

phân tích dòng leˆ

˙

nh moˆ

˙

t laˆ`n nu˜’a (nhu’ng o’’ da

˙

ng thu d¯u’o

˙

’c sau các phép theˆ

´ nói trên) và thu

˙

’c

hieˆ

˙

n vieˆ

˙

c phân chia tu`’ (word splitting). Thao tác này na˘`m o’’ choˆ˜, heˆ

˙

vo’ tìm trong dòng leˆ

˙

nh

taˆ´t ca’ các ký tu

˙

’ phân chia, xác d¯i

˙

nh bo’’i bieˆ´n

IFS

(xem trên), và nho`’ d¯ó chia nho’ dòng leˆ

˙

nh

thành các tu`’ riêng re˜ trong các choˆ˜ tu’o’ng u´’ng. Neˆ´u giá tri

˙

cu’a

IFS

ba˘`ng moˆ

˙

t dòng troˆ

´ ng, thì

vieˆ

˙

c phân chia tu`’ se˜ không xa’y ra. Neˆ´u trong dòng leˆ

˙

nh không thu

˙

’c hieˆ

˙

n phép theˆ´ nào trong

các phép theˆ´ keˆ’ trên, thì phân chia tu`’ cu˜ng không xa’y ra.

3.7.7

Khai trieˆ’n các maˆ˜u tên taˆ

˙

p tin và thu’ mu

˙

c (Pathname Expansion)

Phép theˆ´ tên d¯u’o`’ng daˆ˜n và taˆ

˙

p tin (Pathname expansion) su’’ du

˙

ng d¯eˆ’ chı’ nho`’ moˆ

˙

t maˆ˜u nho’

go

˙

n mà có theˆ’ chı’ ra vài taˆ

˙

p tin (hay thu’ mu

˙

c), tu’o’ng u´’ng vo´’i maˆ˜u này. Sau khi phân chia tu`’,

và neˆ´u nhu’ không d¯u’a ra tùy cho

˙

n

-f

, thì

bash

se˜ tìm kieˆ´m trong tu`’ng tu`’ cu’a dòng leˆ

˙

nh các

ký tu

˙

*, ?,

[

. Neˆ´u tìm thaˆ´y tu`’ vo´’i moˆ

˙

t hay vài ký tu

˙

’ nhu’ vaˆ

˙

y, thì tu`’ này se˜ d¯u’o

˙

’c xem

nhu’ moˆ

˙

t maˆ˜u, và caˆ`n thay theˆ´ bo’’i các tu`’ trong danh sách d¯u’o`’ng daˆ˜n, tu’o’ng u´’ng vo´’i maˆ˜u này.

Neˆ´u nhu’ không tìm thaˆ´y tên tu’o’ng u´’ng vo´’i maˆ˜u, và bieˆ´n nullglob không d¯u’o

˙

’c d¯u’a ra, thì tu`’

se˜ không thay d¯oˆ’i, tu´’c là các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t bi

˙

maˆ´t giá tri

˙

và hieˆ’u nhu’ các ký tu

˙

’ thu’o`’ng. Neˆ

´ u

nhu’ bieˆ´n này d¯u’o

˙

’c xác d¯i

˙

nh, mà d¯u’o`’ng daˆ˜n tu’o’ng u´’ng vo´’i maˆ˜u không tìm thaˆ´y, thì tu`’ se˜ bi

˙

xóa kho’i dòng leˆ

˙

nh. Các ký tu

˙

’ dùng d¯eˆ’ ta

˙

o maˆ˜u có các giá tri

˙

trong ba’ng

3.4

background image

42

Bash

Ba’ng 3.4: Các ký tu

˙

’ ta

˙

o maˆ˜u

Ký tu

˙

’ Quy luaˆ

˙

t thay theˆ´

*

Tu’o’ng u´’ng vo´’i baˆ´t ky` dòng ký tu

˙

’ nào, keˆ’ ca’ dòng roˆ˜ng. Ví du

˙

,

v*.txt

se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i

vnoss.txt, vnlinux.txt

vntex.txt

(neˆ´u các taˆ

˙

p tin này toˆ`n ta

˙

i), và *.png se˜ tu’o’ng u´’ng taˆ´t ca’ các taˆ

˙

p tin có

phaˆ`n mo’’ roˆ

˙

ng png (taˆ

˙

p tin d¯oˆ` ho

˙

a hai chieˆ`u).

?

Tu’o’ng

u´’ng

baˆ´t

moˆ

˙

t

tu

˙

d¯o’n

nào.

du

˙

,

maˆ˜u

file?.txt

se˜

d¯u’o

˙

’c

thaytheˆ´

bo’’i

các

tên

teˆ

˙

p

sau

file1.txt, file2.txt, file3.txt

,

filea.txt

(neˆ´u chúng toˆ`n ta

˙

i), nhu’ng

file23.txt

thì không.

[...]

Tu’o’ng u´’ng baˆ´t ky` ký tu

˙

’ nào trong soˆ

´ các ký tu

˙

’ na˘`m trong daˆ

´ u ngoa˘

˙

c

vuông này. Ca˘

˙

p ký tu

˙

’, phân cách nhau bo’’i daˆ

´ u tru`’ (-), ví du

˙

c-f

, bieˆ’u

thi

˙

moˆ

˙

t dãy; baˆ´t ký ký tu

˙

’ nào, theo tu`’ d¯ieˆ’n, na˘`m giu

˜’a hai ký tu

˙

’ này, keˆ’ ca’

hai ký tu

˙

’ ta

˙

o ra dãy (

c

f

trong ví du

˙

) cu˜ng tu’o’ng u´’ng vo´’i maˆ˜u. Neˆ´u

ký tu

˙

’ d¯aˆ`u tiên trong ngoa˘

˙

c vuông là hay ˆ, thì maˆ˜u (o’’ vi

˙

trí này) se˜ tu’o’ng

u´’ng taˆ´t ca’ các ký tu

˙

’, không d¯u’o

˙

’c chı’ ra trong ngo

Maˆ˜u tên taˆ

˙

p tin raˆ´t thu’o`’ng xuyên su’’ du

˙

ng trong dòng leˆ

˙

nh có chu´’a

ls

. Hãy tu’o’’ng tu’o

˙

’ng

là ba

˙

n muoˆ

´ n xem thông tin cu’a moˆ

˙

t thu’ mu

˙

c, trong d¯ó có chu´’a moˆ

˙

t soˆ

´ lu’o

˙

’ng lo´’n các taˆ

˙

p tin

d¯u’ các da

˙

ng, ví du

˙

, taˆ

˙

p tin hình a’nh, phim vo´’i da

˙

ng gif, jpeg, avi, v.v. . . . D

¯ eˆ’ thu d¯u’o

˙

’c thông

tin chı’ cu’a taˆ

˙

p tin da

˙

ng jpeg, có theˆ’ dùng câu leˆ

˙

nh

kênh giao tác

[user]$ ls *.jpg

Neˆ´u trong thu’ mu

˙

c có nhieˆ`u taˆ

˙

p tin, mà tên cu’a chúng là các soˆ

´ goˆ`m boˆ´n chu˜’soˆ´ (thu’mu

˙

c

/proc

là moˆ

˙

t ví du

˙

+), thì leˆ

˙

nh sau chı’ d¯u’a ra danh sách các taˆ

˙

p tin có soˆ

´ tu`’ 0500 d¯eˆ´n 0999:

kênh giao tác

[user]$ ls -l 0[5-9]??

3.7.8

Xóa các ký tu

˙

’ d¯a˘

˙

c bieˆ

˙

t

Sau khi làm xong taˆ´t ca’ các phép theˆ´, các ký tu

˙

\, ‘

"

còn la

˙

i trong dòng leˆ

˙

nh (chúng

d¯u’o

˙

’c su’’ du

˙

ng d¯eˆ’ huy’ bo’ giá tri

˙

d¯a˘

˙

c bieˆ

˙

t cu’a các ký tu

˙

’ khác) se˜ bi

˙

xóa heˆ´t.

3.8

Shell - moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình

Nhu’ d¯ã nói o’’ trên, d¯eˆ’ có theˆ’ xây du

˙

’ng baˆ

´ t ky` gia’i thuaˆ

˙

t nào, cu˜ng caˆ`n có các toán tu’’ kieˆ’m tra

d¯ieˆ`u kieˆ

˙

n. Heˆ

˙

vo’

bash

hoˆ˜ tro

˙

’ các toán tu’’ lu

˙

’a cho

˙

n

if...then...else

case

, cu˜ng

nhu’ các toán tu’’ vòng la˘

˙

p

for, while, until

, nho`’ d¯ó nó (

bash

) tro’’ thành moˆ

˙

t ngôn

ngu

˜’ laˆ

˙

p trình ma

˙

nh.

3.8.1

Toàn tu’’ if và test (hoa˘

˙

c [ ])

Caˆ´u trúc cu’a toán tu’’ d¯ieˆ`u kieˆ

˙

n có da

˙

ng thu go

˙

nhu’ sau:

if

list1

then

list2

else

list3

fi

trong d¯ó,

list1, list2

, và

list3

là các chuoˆ˜i câu leˆ

˙

nh, phân cách nhau bo’’i daˆ´u

background image

3.8 Shell - moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình

43

pha’y và keˆ´t thúc bo’’i moˆ

˙

t daˆ´u chaˆ´m phaˆ’y hay ký tu

˙

’ dòng mo´’i. Ngoài ra, các chuoˆ˜i này có theˆ’

d¯u’o

˙

’c d¯u’a vào daˆ

´ u ngoa˘

˙

c nho

˙

n: list. Toán tu’’ if kieˆ’m tra giá tri

˙

d¯u’o

˙

’c tra’ la

˙

i bo’’i các câu leˆ

˙

nh

tu`’

list1

. Neˆ´u trong danh sách có vài câu leˆ

˙

nh, thì kieˆ’m tra giá tri

˙

d¯u’o

˙

’c tra’ la

˙

i bo’’i câu leˆ

˙

nh

cuoˆ

´ i cùng cu’a danh sách. Neˆ´u giá tri

˙

này ba˘`ng 0, thì se˜ thu

˙

’c hieˆ

˙

n các leˆ

˙

nh tu`’

list2

; còn

neˆ´u giá tri

˙

này khác không, thì se˜ thu

˙

’c hieˆ

˙

n nhu

˜’ng leˆ

˙

nh tu`’

list3

. Giá tri

˙

d¯u’o

˙

’c tra’ la

˙

i bo’’i

toán tu’’

if

nhu’ vaˆ

˙

y, trùng vo´’i giá tri

˙

mà chuoˆ˜i leˆ

˙

nh thu

˙

’c hieˆ

˙

n (

list2

hoa˘

˙

c

list3

) d¯u’a ra.

Da

˙

ng d¯aˆ`y d¯u’ cu’a leˆ

˙

nh

if

nhu’ sau:

if

list

then

list [

elif

list

then

list ] ... [

else

list ]

fi

(o’’d¯ây daˆ´u ngoa˘

˙

c vuông chı’ có nghı˜a là, nhu˜’ng gì na˘`m trong nó, ngoa˘

˙

c vuông, không nhaˆ´t

thieˆ´t pha’i có). Bieˆ’u thu´’c d¯u´’ng sau

if

hay

elif

thu’o`’ng là câu leˆ

˙

nh

test

, mà có theˆ’ d¯u’o

˙

’c

bieˆ’u thi

˙

bo’’i daˆ´u ngoa˘

˙

c vuông [ ]. Leˆ

˙

nh

test

thu

˙

’c hieˆ

˙

n phép tính moˆ

˙

t bieˆ’u thu´’c nào d¯ó, và

tra’ la

˙

i giá tri

˙

0, neˆ´u bieˆ’u thu´’c là d¯úng, và 1 trong tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i. Bieˆ’u thu´’c d¯u’o

˙

’c d¯u’a

to´’i chu’o’ng trình

test

nhu’ moˆ

˙

t tham soˆ

´ cu’a chu’o’ng trình. Thay vì gõ

test expression

có theˆ’ d¯u’a bieˆ’u thu´’c

expression

vào ngoa˘

˙

c vuông:

[ expression ]

Caˆ`n chú ý ra˘`ng,

test

[

d¯ó là hai tên cu’a cu’a cùng moˆ

˙

t chu’o’ng trình, chu´’ không pha’i

là moˆ

˙

t phép bieˆ´n hóa thaˆ`n thông nào d¯ó cu’a heˆ

˙

vo’

bash

(chı’ là cú pháp cu’a

[

d¯òi ho’i pha’i có

daˆ´u d¯óng ngoa˘

˙

c). Và cu˜ng caˆ`n chú ý ra˘`ng o’’ choˆ˜ cu’a

test

trong caˆ´u trúc

if

có theˆ’ su’’ du

˙

ng

baˆ´t ky` chu’o’ng trình nào. D

¯ eˆ’ keˆ

´ t thúc mu

˙

c này, chúng ta d¯u’a ra ví du

˙

su’’ du

˙

ng

if

:

kênh giao tác

if [ -x /usr/bin/unicode_start ] ; then

unicode_start

else

echo "hello world"

fi

Veˆ` toán tu’’

test

(hay

[...]

) caˆ`n d¯i sâu ho’n.

3.8.2

Toán tu’’ test và d¯ieˆ`u kieˆ

˙

n cu’a bieˆ’u thu

´’c

Bieˆ’u thu´’c d¯ieˆ`u kieˆ

˙

n, su’’ du

˙

ng trong toán tu’’

test

, d¯u’o

˙

’c xây du

˙

’ng trên co’ so’’ kieˆ’m tra thuoˆ

˙

c

tính taˆ

˙

p tin, so sánh các dòng và các so sánh soˆ´ ho

˙

c thông thu’o`’ng. Bieˆ’u thu´’c phu´’c ta

˙

p ho’n

d¯u’o

˙

’c ta

˙

o ra tu`’ các thao tác d¯o’n và kép sau ("nhu˜’ng viên ga

˙

ch co’ so’’"):

-a file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i.

-b file

D

¯ úng neˆ

´ u

file

toˆ`n ta

˙

i, và là moˆ

˙

t taˆ

˙

p tin thieˆ´t bi

˙

khoˆ

´ i (block device) d¯a˘

˙

c bieˆ

˙

t.

-c file

D

¯ úng neˆ

´ u

file

toˆ`n ta

˙

i, và là moˆ

˙

t taˆ

˙

p tin thieˆ´t bi

˙

ký tu

˙

’ (charater device) d¯a˘

˙

c bieˆ

˙

t.

-d file

D

¯ úng neˆ

´ u

file

toˆ`n ta

˙

i và là moˆ

˙

t thu’ mu

˙

c.

-e file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i.

background image

44

Bash

-f file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là moˆ

˙

t taˆ

˙

p tin thông thu’o`’ng.

-g file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và d¯u’o

˙

’c d¯a˘

˙

bit thay d¯oˆ’i nhóm.

-h file

hay

-L file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là liên keˆ´t meˆ`m (liên keˆ´t tu’o

˙

’ng tru’ng).

-k file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và d¯u’o

˙

’c d¯a˘

˙

bit sticky.

-p file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là tên cu’a moˆ

˙

t oˆ

´ ng (kênh FIFO).

-p file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là tên cu’a moˆ

˙

t oˆ

´ ng (kênh FIFO).

-r file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n d¯o

˙

c.

-s file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và kích thu’o´’c lo´’n ho’n không.

-t fd

D

¯ úng neˆ

´ u boˆ

˙

mô ta’ cu’a taˆ

˙

p tin (fd) mo’’ và chı’ lên terminal.

-u file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và d¯u’o

˙

’c d¯a˘

˙

bit thay d¯oˆ’i ngu’o`’i dùng.

-w file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n ghi.

-x file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n thu

˙

’c thi.

-0 file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

và chu’ so’’ hu˜’u cu’a nó là ngu’o`’i dùng mà ID có hieˆ

˙

u lu

˙

’c

chı’ d¯eˆ´n.

-G file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và thuoˆ

˙

c veˆ` nhóm, xác d¯i

˙

nh bo’’i ID nhóm có hieˆ

˙

u

lu

˙

’c.

-S file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là socket.

-N file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và thay d¯oˆ’i tu`’ laˆ`n d¯u’o

˙

’c d¯o

˙

c cuoˆ

´ i cùng.

file1 -nt file2

D

¯ úng, neˆ

´ u taˆ

˙

p tin

file1

có tho`’i gian su’’a d¯oˆ’i muoˆ

˙

n ho’n

file2

.

background image

3.8 Shell - moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình

45

file1 -ot file2

D

¯ úng, neˆ

´ u taˆ

˙

p tin

file1

"già" ho’n

file1

(tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i cu’a tru’o`’ng ho

˙

’p trên).

file1 -ef file2

D

¯ úng, neˆ

´ u taˆ

˙

p tin

file1

file2

có cùng moˆ

˙

soˆ´ thieˆ´t bi

˙

và chı’ soˆ

´ mô ta’ inode.

-o optname

D

¯ úng, neˆ

´ u tùy cho

˙

n

optname

cu’a heˆ

˙

vo’ d¯u’o

˙

’c kích hoa

˙

t. Chi tieˆ´t xin xem trên trang

man bash

.

-z string

D

¯ úng, neˆ

´ u d¯oˆ

˙

dài cu’a chuoˆ˜i

string

ba˘`ng không.

-n string

D

¯ úng, neˆ

´ u d¯oˆ

˙

dài cu’a chuoˆ˜i khác không.

string1 == string2

D

¯ úng, neˆ

´ u hai chuoˆ˜i trùng nhau. Có theˆ’ thay hai

==

ba˘`ng moˆ

˙

t

=

.

string1 !== string2

D

¯ úng, neˆ

´ u hai chuoˆ˜i không trùng nhau.

string1 < string2

D

¯ úng, neˆ

´ u chuoˆ˜i

string1

, theo tu`’ d¯ieˆ’n, d¯u´’ng tru’o´’c chuoˆ˜i

string2

(d¯oˆ

´ i vo´’i ngôn

ngu

˜’ hieˆ

˙

n tho`’i).

string1 > string2

D

¯ úng, neˆ

´ u chuoˆ˜i

string1

, theo tu`’d¯ieˆ’n, d¯u´’ng sau chuoˆ˜i

string2

(d¯oˆ

´ i vo´’i ngôn ngu˜’

hieˆ

˙

n tho`’i).

arg1 OP arg2

O

’’ d¯ây OP là moˆ

˙

t trong các phép so sánh soˆ

´ ho

˙

c:

-eq

(ba˘`ng),

-ne

(khác, không ba˘`ng),

-lt

(nho’ ho’n),

-le

(nho’ ho’n hoa˘

˙

c ba˘`ng),

-gt

(lo´’n ho’n),

-ge

(lo´’n ho’n hoa˘

˙

c ba˘`ng).

O

’’ choˆ˜ các tham soˆ´ arg1 và arg2 có theˆ’ su’’du

˙

ng các soˆ

´ nguyên (âm hoa˘

˙

c du’o’ng).

Tu`’ các bieˆ’u thu´’c d¯ieˆ`u kieˆ

˙

n co’ ba’n này có theˆ’ xây du

˙

’ng các bieˆ’u thu´’c phu´’c ta

˙

p theo ý

muoˆ

´ n nho`’ các phép lôgíc thông thu’o`’ng PHU’ D

¯ I

˙

NH, VÀ (coˆ

˙

ng) và HOA

˘
˙

C:

!(expression)

Phép phu’ d¯i

˙

nh. D

¯ úng, neˆ

´ u bieˆ’u thu´’c sai.

expression1 -a expression2

Phép coˆ

˙

ng lôgic

AND

. D

¯ úng neˆ

´ u ca’ hai bieˆ’u thu´’c d¯eˆ`u d¯úng.

expression1 -o expression2

Phép lôgíc hoa˘

˙

c

OR

. D

¯ úng neˆ

´ u moˆ

˙

t trong hai bieˆ’u thu´’c d¯úng.

background image

46

Bash

3.8.3

Toán tu’’ case

Da

˙

ng cu’a toán tu’’

case

nhu’ sau:

case

word

in

[ [(] pattern [ | pattern ] ... ) list ;; ] ...+

esac

Câu leˆ

˙

nh

case

d¯aˆ`u tiên khai trieˆ’n tu`’

word

, và so sánh nó (word) vo´’i moˆ˜i tu`’ trong maˆ˜u

pattern

theo thu´’ tu

˙

’. Sau khi tìm thaˆ

´ y su

˙

’ trùng nhau d¯aˆ`u tiên thì du`’ng vieˆ

˙

c so sánh la

˙

i, và

thu

˙

’c hieˆ

˙

n danh sách

list

các câu leˆ

˙

nh d¯u´’ng sau maˆ˜u d¯ã tìm thaˆ´y. Giá tri

˙

tra’ la

˙

i bo’’i toán tu’’

này, ba˘`ng 0, neˆ´u không tìm thaˆ´y su

˙

’ trùng nhau nào. Trong tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i, tra’ la

˙

i giá tri

˙

mà câu leˆ

˙

nh cuoˆ

´ i cùng trong danh sách

list

d¯u’a ra. Ví du

˙

su’’ du

˙

ng toán tu’’

case

sau laˆ´y tu`’

script

/etc/rc.d/rc.sysinit

(FreeBSD-style):

kênh giao tác

case "$UTC" in

yes|true)

CLOCKFLAGS="$CLOCKFLAGS -u";

CLOCKDEF="$CLOCKDEF (utc)";

;;

no|false)

CLOCKFLAGS="$CLOCKFLAGS --localtime";

CLOCKDEF="$CLOCKDEF (localtime)";

;;

esac

Neˆ´u bieˆ´n soˆ

´ (

UTC

) nhaˆ

˙

n giá tri

˙

yes

hoa˘

˙

c

true

, thì se˜ thu

˙

’c hieˆ

˙

n ca˘

˙

p leˆ

˙

nh thu´’ nhaˆ´t, nhaˆ

˙

n

giá tri

˙

no

hoa˘

˙

c

false

- ca˘

˙

p thu´’ hai.

3.8.4

Toán tu’’ select

Toán tu’’

select

cho phép toˆ’ chu´’c hoˆ

˙

i thoa

˙

i vo´’i ngu’o`’i dùng. Nó có da

˙

ng sau:

select

name [

in

word; ]

do

list;

done

Lúc d¯aˆ`u tu`’ maˆ˜u

word

hình thành moˆ

˙

t danh sách nhu

˜’ng tu`’ tu’o’ng u´’ng vo´’i maˆ˜u này. Taˆ

˙

p

ho

˙

’p nhu

˜’ng tu`’ này d¯u’o

˙

’c d¯u’a vào kênh thông báo loˆ˜i tiêu chuaˆ’n, ho’n nu

˜’a moˆ˜i tu`’ d¯u’o

˙

’c d¯i kèm

vo´’i moˆ

˙

t soˆ

´ thu´’tu

˙

’. Neˆ

´ u maˆ˜u

word

bi

˙

bo’ qua (không có trong toán tu’’

select

), thì se˜ d¯u’a vào

các tham bieˆ´n vi

˙

trí (xem trên) theo moˆ

˙

t cách tu’o’ng tu

˙

’. Sau d¯ó, daˆ

´ u nha˘´c PS3 d¯u’o

˙

’c d¯u’a ra,

và heˆ

˙

vo’ cho`’ chuoˆ˜i nhaˆ

˙

p vào trên d¯aˆ`u vào tiêu chuaˆ’n. Neˆ´u chuoˆ˜i nhaˆ

˙

p vào có chu´’a soˆ´, tu’o’ng

u´’ng vo´’i moˆ

˙

t trong các soˆ

´ d¯ã hieˆ

˙

n ra, thì bieˆ´n

name

se˜ d¯u’o

˙

’c gán giá tri

˙

ba˘`ng tu`’ d¯i kèm vo´’i soˆ´

này. Neˆ´u nhaˆ

˙

p vào moˆ

˙

t dòng roˆ˜ng, thì soˆ

´ và tu`’ se˜ d¯u’o

˙

’c hieˆ

˙

n ra them moˆ

˙

t laˆ`n nu˜’a. Neˆ´u nhaˆ

˙

p

vào baˆ´t ky` moˆ

˙

t giá tri

˙

nào khác, thì bieˆ´n

name

se˜ nhaˆ

˙

n giá tri

˙

ba˘`ng không. Chuoˆ˜i mà ngu’o`’i

dùng nhaˆ

˙

p vào, d¯u’o

˙

’c ghi la

˙

i trong bieˆ´n

REPLY

. Danh sách leˆ

˙

nh

list

d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n vo´’i giá

tri

˙

bieˆ´n

name

d¯ã cho

˙

n. Sau d¯ây là moˆ

˙

t script nho’ (xin hãy gõ không daˆ´u neˆ´u console cu’a ba

˙

n

chu’a hoˆ˜ tro

˙

’ vieˆ

˙

c hieˆ’n thi

˙

Tieˆ´ng Vieˆ

˙

t):

kênh giao tác

#!/bin/sh

echo "Ba

˙

n thích dùng OS nào?"

select var in "Linux" "Gnu Hurd" "Free BSD" "MacOSX" "Solaris" "QNX"

"Other"; do

break

done

echo "Ba

˙

n d

¯ã cho

˙

n $var"

background image

3.8 Shell - moˆ

˙

t ngôn ngu

˜’ laˆ

˙

p trình

47

Ghi d¯oa

˙

n trên vào moˆ

˙

t taˆ

˙

p tin (ví du

˙

,

select.sh

), thay d¯oˆ’i d¯eˆ’ taˆ

˙

p tin thành kha’ thi (ví

du

˙

,

chmod 755 select.sh

), và cha

˙

y (

./select.sh

). Trên màn hình se˜ hieˆ

˙

n ra câu

ho’i sau:

kênh giao tác

Ba

˙

n thích dùng OS nào?

1) Linux

3) Free BSD

5) Solaris

7) Other

2) Gnu Hurd

4) MacOSX

6) QNX

#?

Hãy nhaˆ´n moˆ

˙

t trong 7 soˆ

´ d¯u’a ra (tu`’ 1 d¯eˆ´n 7). Neˆ´u ba

˙

n nhaˆ

˙

p 4 (nhaˆ´n ca’ <Enter>), thì se˜

thaˆ´y thông báo sau:

kênh giao tác

Ba

˙

n d

¯ã cho

˙

n MacOSX

3.8.5

Toán tu’’ for

Toán tu’’

for

làm vieˆ

˙

c có khác moˆ

˙

t chút so vo´’i

for

trong các ngôn ngu

˜’laˆ

˙

p trình thông thu’o`’ng.

Thay vì ta˘ng hoa˘

˙

c gia’m giá tri

˙

cu’a moˆ

˙

t bieˆ´n soˆ

´ nào d¯ó (lên hoa˘

˙

c xuoˆ

´ ng) moˆ

˙

t d¯o’n vi

˙

sau moˆ˜i

vòng la˘

˙

p, thì nó gán giá tri

˙

tieˆ´p theo trong

danh sách tu

`’ d

¯u’a sa

˘

˜n

cho bieˆ´n d¯ó trong

moˆ˜i vòng la˘

˙

p. Nói chung caˆ´u trúc có da

˙

ng sau:

for

name

in

words

do

list

done

Quy luaˆ

˙

t xây du

˙

’ng danh sách leˆ

˙

nh (

list

) gioˆ

´ ng trong toán tu’’

if

. Ví du

˙

. Script sau ta

˙

o

các taˆ

˙

p tin

fu1, fu2

, và

fu3

:

kênh giao tác

for a in 1 2 3 ; do

touch fu$a

done

Có theˆ’ gõ ba dòng này trên moˆ

˙

t dòng leˆ

˙

nh, keˆ´t qua’ thu d¯u’o

˙

’c tu’o’ng tu

˙

’ vo´’i script. Da

˙

ng

toˆ’ng quát cu’a toán tu’’

for

nhu’ sau:

for

name [

in

word; ]

do

list ;

done

D

¯ aˆ`u tiên cu˜ng xa’y ra su

˙

’ khai trieˆ’n tu`’

word

theo quy luaˆ

˙

t khai trieˆ’n bieˆ’u thu´’c (xem trên).

Sau d¯ó bieˆ´n

name

laˆ`n lu’o

˙

’t d¯u’o

˙

’c gán các giá tri

˙

thu d¯u’o

˙

’c tu`’ su

˙

’ khai trieˆ`n này, và thu

˙

’c hieˆ

˙

n

danh sách leˆ

˙

nh

list

trong moˆ˜i laˆ`n nhu’ vaˆ

˙

y. Neˆ´u không có "

in word

", thì danh sách leˆ

˙

nh

list

d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n moˆ

˙

t laˆ`n cho moˆ˜i

tham bie

ˆ

´ n vi

˙

trí

d¯ã d¯u’a ra. Trên Linux có

chu’o’ng trình

seq

, tieˆ´p nhaˆ

˙

n hai soˆ

´ nguyên làm tham soˆ´, và d¯u’a ra chuoˆ˜i taˆ´t ca’ các soˆ´ na˘`m

giu

˜’a hai soˆ

´ này (coˆ

˙

ng thêm ca’ chúng). Nho`’ câu leˆ

˙

nh này có theˆ’ su’’ du

˙

ng

for

cu’a

bash

làm

vieˆ

˙

c nhu’ toán tu’’

for

trong các ngôn ngu

˜’ laˆ

˙

p trình thông thu’o`’ng. D

¯ eˆ’ làm d¯u’o

˙

’c d¯ieˆ`u này chı’

caˆ`n vieˆ´t vòng la˘

˙

p

for

nhu’ sau:

kênh giao tác

for a in $( seq 1 6 ) ; do

cat fu$a

done

Câu leˆ

˙

nh (script) này d¯u’a ra màn hình noˆ

˙

i dung cu’a 10 taˆ

˙

p tin (neˆ´u có): "

fu1

", ..., "

fu10

".

background image

48

Bash

3.8.6

Toán tu’’ while và until

Toán tu’’

while

làm vieˆ

˙

c tu’o’ng tu

˙

’ nhu’

if

, nhu’ng vòng la˘

˙

p các câu leˆ

˙

nh trong

list2

chı’

thu

˙

’c hieˆ

˙

n khi d¯ieˆ`u kieˆ

˙

n còn d¯úng, và se˜ ngu`’ng khi d¯ieˆ`u kieˆ

˙

n không tho’a mãn. Caˆ´u trúc có

da

˙

ng nhu’ sau:

while

list1

do

list2

done

Ví du

˙

:

kênh giao tác

while [ -d directory ] ; do

ls -l directory >> logfile

echo -- SEPARATOR -- >> logfile

sleep 60

done

Chu’o’ng trình (script) trên se˜ theo dõi và ghi la

˙

i noˆ

˙

i dung cu’a thu’ mu

˙

c

directory

theo

tu`’ng phút neˆ´u thu’ mu

˙

c còn toˆ`n ta

˙

i. Toán tu’’

until

tu’o’ng tu

˙

’ nhu’ toán tu’’

while

:

until

list1

do

list2

done

D

¯ ieˆ’m khác bieˆ

˙

t na˘`m o’’ choˆ˜, su’’ du

˙

ng giá tri

˙

phu’ d¯i

˙

nh cu’a d¯ieˆ`u kieˆ

˙

n

list1

, tu´’c là

list2

thu

˙

’c hieˆ

˙

n, neˆ´u câu leˆ

˙

nh cuoˆ

´ i cùng trong danh sách

list1

tra’ la

˙

i tra

˙

ng thái thoát ra khác

không.

3.8.7

Các hàm soˆ

´

Cú pháp

Heˆ

˙

vo’

bash

cho phép ngu’o`’i dùng ta

˙

o các hàm soˆ

´ cho mình. Hàm soˆ´ làm vieˆ

˙

c và

d¯u’o

˙

’c su’’ du

˙

ng gioˆ

´ ng nhu’ các câu leˆ

˙

nh thông thu’o`’ng cu’a heˆ

˙

vo’, tu´’c là chúng ta có theˆ’ tu

˙

’ ta

˙

o

các câu leˆ

˙

nh mo´’i. Hàm soˆ´ có caˆ´u trúc nhu’ sau:

function

name

() {

list

}

Ho’n nu˜’a tu`’

function

không nhaˆ´t thieˆ´t pha’i có,

name

xác d¯i

˙

nh tên cu’a hàm (dùng d¯eˆ’

go

˙

i hàm), còn phaˆ`n thâm cu’a hàm soˆ

´ ta

˙

o bo’’i danh sách các câu leˆ

˙

nh

list

, na˘`m giu

˜’a

{

}

.

Các câu leˆ

˙

nh này se˜ d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n moˆ˜i khi tên

name

d¯u’o

˙

’c go

˙

i (gioˆ

´ ng nhu’ moˆ

˙

t leˆ

˙

nh thông

thu’o`’ng). Caˆ`n chú ý ra˘`ng hàm có theˆ’ là d¯eˆ

˙

qui, tu´’c là go

˙

i hàm soˆ

´ o’’ ngay trong phaˆ`n thân cu’a

nó. Hàm soˆ

´ thu

˙

’c hieˆ

˙

n trong pha

˙

m vi heˆ

˙

vo’ hieˆ

˙

n tho`’i: không có tieˆ´n trình mo´’i nào d¯u’o

˙

’c cha

˙

y

khi biên di

˙

ch hàm soˆ

´ (khác vo´’i vieˆ

˙

c cha

˙

y script).

3.8.8

Tham soˆ

´

Khi hàm soˆ

´ d¯u’o

˙

’c go

˙

i d¯eˆ’ thu

˙

’c hieˆ

˙

n, các tham soˆ

´ cu’a hàm se˜ tro’’ thành các tham bieˆ´n vi

˙

trí

(positional parameters, xem trên) trong tho`’i gian thu

˙

’c hieˆ

˙

n hàm này. Chúng d¯u’o

˙

’c d¯a˘

˙

t các tên

nhu’

$n

, trong d¯ó

n

là soˆ

´ cu’a tham soˆ´ mà chúng ta muoˆ´n su’’ du

˙

ng. Vieˆ

˙

c d¯ánh soˆ

´ ba˘´t d¯aˆ`u tu`’

1, nhu’ vaˆ

˙

y

$1

là tham soˆ

´ d¯aˆ`u tiên. Cu˜ng có theˆ’ su’’ du

˙

ng taˆ´t ca’ các tham soˆ

´ moˆ

˙

t lúc nho`’

$*

,

và d¯u’a ra soˆ´ thu´’ tu

˙

’ cu’a tham soˆ

´ nho`’

$#

Tham soˆ

´ vi

˙

trí soˆ

´ 0 không thay d¯oˆ’i. Trong khi thu

˙

’c

hieˆ

˙

n neˆ´u ga˘

˙

p câu leˆ

˙

nh noˆ

˙

i trú

return

(trong phaˆ`n thâm cu’a hàm), thì hàm soˆ

´ se˜ bi

˙

du`’ng la

˙

i

và quyeˆ`n d¯ieˆ`u khieˆ’n d¯u’o

˙

’c trao cho câu leˆ

˙

nh d¯u´’ng sau hàm. Khi thu

˙

’c hieˆ

˙

n xong hàm soˆ

´ , các

tham bieˆ´n vi

˙

trí và tham bieˆ´n d¯aˆ

˙

c bieˆ

˙

t

#

se˜ d¯u’o

˙

c tra’ la

˙

i các giá tri

˙

mà chúng có tru’o´’c khi cha

˙

y

hàm.

Bieˆ

´ n noˆ

˙

i boˆ

˙

(local)

Neˆ´u muoˆ

´ n ta

˙

o moˆ

˙

t tham bieˆ´n d¯i

˙

a phu’o’ng, có theˆ’ su’’ du

˙

ng tu`’ khóa

local

. Cú pháp d¯u’a ra

bieˆ´n d¯i

˙

a phu’o’ng gioˆ´ng heˆ

˙

t các tham bieˆ´n khác, chı’ có d¯ieˆ`u caˆ`n d¯u´’ng sau tu`’ khóa

local

:

background image

3.9 Script cu’a heˆ

˙

vo’ và leˆ

˙

nh source

49

local name=value

. Du’o´’i d¯ây là moˆ

˙

t ví du

˙

hàm soˆ

´ , thu

˙

’c hieˆ

˙

n công vieˆ

˙

c cu’a leˆ

˙

nh

seq

d¯ã

nha˘´c d¯eˆ´n o’’ trên:

kênh giao tác

seq()

{

local I=$1;

while [ $2 != $I ]; do

{

echo -n "$I ";

I=$(( $I + 1 ))

};

done;

echo $2

}

Caˆ`n chú ý d¯eˆ´n tùy cho

˙

n

-n

cu’a

echo

, nó (tùy cho

˙

n) hu’y bo’ vieˆ

˙

c ta

˙

o dòng mo´’i. Ma˘

˙

c dù

tùy cho

˙

n này không có nhieˆ`u ý nghı˜a vo´’i mu

˙

c d¯ích chúng ta muoˆ

´ n o’’ d¯ây, nhu’ng se˜ raˆ´t có ích

trong các hàm soˆ

´ vo´’i mu

˙

c d¯ích khác. Hàm soˆ

´ tính giai thu`’a fact Moˆ

˙

t ví du

˙

khác:

kênh giao tác

fact()

{

if [ $1 = 0 ]; then

echo 1;

else

{

echo $(( $1 * $( fact $(( $1 -- 1 )) ) ))

};

fi

}

D

¯ ây là hàm soˆ

´ giai thu`’a, moˆ

˙

t ví du

˙

cu’a hàm d¯eˆ

˙

qui. Hãy chú ý d¯eˆ´n su

˙

’ khai trieˆ’n soˆ

´ ho

˙

c,

và phép theˆ´ các câu leˆ

˙

nh.

3.9

Script cu’a heˆ

˙

vo’ và leˆ

˙

nh source

Script cu’a heˆ

˙

vo’ chı’ là các taˆ

˙

p tin có chu´’a chuoˆ˜i leˆ

˙

nh. Tu’o’ng tu

˙

’ hàm soˆ

´ script có theˆ’ d¯u’o

˙

’c

thu

˙

’c hieˆ

˙

n nhu’ moˆ

˙

t câu leˆ

˙

nh. Cú pháp truy caˆ

˙

p d¯eˆ´n các tham soˆ

´ cu˜ng nhu’ hàm soˆ´. Trong các

tru’o`’ng ho

˙

’p thông thu’o`’ng khi cha

˙

y script se˜ có moˆ

˙

t tieˆ´n trình mo´’i d¯u’o

˙

’c cha

˙

y. D

¯ eˆ’ có theˆ’ thu

˙

’c

hieˆ

˙

n script o’’ trong ba’n

bash

hieˆ

˙

n tho`’i, caˆ`n su’’du

˙

ng câu leˆ

˙

nh

source

, hay moˆ

˙

t daˆ´u chaˆ´m "."

(d¯oˆ`ng nghı˜a cu’a source). Trong tru’o`’ng ho

˙

’p này script chı’ d¯o’n gia’n là moˆ

˙

t tham soˆ

´ cu’a leˆ

˙

nh

nói trên. Câu leˆ

˙

nh se˜ có da

˙

ng:

source filename [arguments]

Câu leˆ

˙

nh này d¯o

˙

c và thu

˙

’c hieˆ

˙

n các câu leˆ

˙

nh có trong taˆ

˙

p tin

filename

trong môi tru’o`’ng

hieˆ

˙

n tho`’i, và tra’ la

˙

i giá tri

˙

, xác d¯i

˙

nh bo’’i câu leˆ

˙

nh cuoˆ

´ i cùng cu’a

filename

. Neˆ´u

filename

không chu´’a daˆ´u ga

˙

ch chéo, thì d¯u’o`’ng daˆ˜n, lieˆ

˙

t kê trong bieˆ´n soˆ

´ PATH, se˜ d¯u’o

˙

’c su’’ du

˙

ng d¯eˆ’

tìm taˆ

˙

p tin có tên

filename

. Taˆ

˙

p tin này không nhaˆ´t thieˆ´t pha’i kha’ thi (không nhaˆ´t thieˆ´t

pha’i có bit x). Neˆ´u trong thu’ mu

˙

c, lieˆ

˙

t kê trong PATH, không tìm thaˆ´y taˆ

˙

p tin caˆ`n, thì se˜ tìm

nó (taˆ

˙

p tin) trong thu’ mu

˙

c hieˆ

˙

n tho`’i. Neˆ´u có các tham soˆ´ (d¯u’a ra arguments, xem d¯i

˙

nh da

˙

ng

background image

50

Bash

câu leˆ

˙

nh o’’ trên), thì trong tho`’i gian thu

˙

’c hieˆ

˙

n script chúng se˜ thành các tham bieˆ´n vi

˙

trí. Neˆ´u

không có tham soˆ

´ , thì tham bieˆ´n vi

˙

trí không thay d¯oˆ’i. Giá tri

˙

(tra

˙

ng thái), mà leˆ

˙

nh

source

tra’ la

˙

i, trùng vo´’i giá tri

˙

, tra’ la

˙

i bo’’i câu leˆ

˙

nh cuoˆ

´ i cùng trong script. Neˆ´u không câu leˆ

˙

nh nào

d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n, hoa˘

˙

c không tìm thaˆ´y taˆ

˙

p tin

filename

, thì tra

˙

ng thái thoát ba˘`ng 0.

3.10

Câu leˆ

˙

nh sh

Ba

˙

n luôn luôn có theˆ’ cha

˙

y moˆ

˙

t ba’n sao cu’a heˆ

˙

vo’

bash

nho`’ câu leˆ

˙

nh

bash

hay

sh

. Khi này

có theˆ’ ba˘´t ba’n sao này cha

˙

y moˆ

˙

t script nào d¯ó, neˆ´u d¯u’a tên cu’a script nhu’ moˆ

˙

t tham soˆ

´ cho

leˆ

˙

nh

bash

. Nhu’ vaˆ

˙

y, d¯eˆ’ thu

˙

’c hieˆ

˙

n script

myscript

caˆ`n d¯u’a câu leˆ

˙

nh "

sh myscript

".

Neˆ´u xem noˆ

˙

i dung cu’a moˆ

˙

t taˆ

˙

p tin script nào d¯ó (nhu˜’ng taˆ

˙

p tin nhu’ vaˆ

˙

y có raˆ´t nhieˆ`u trên

heˆ

˙

thoˆ

´ ng), ba

˙

n se˜ thaˆ´y dòng d¯aˆ`u tiên có da

˙

ng sau:

#!/bin/sh

. D

¯ ieˆ`u này có nghı˜a là, khi

chúng ta go

˙

i script d¯eˆ’ thu

˙

’c hieˆ

˙

n nhu’ moˆ

˙

t leˆ

˙

nh thông thu’o`’ng, thì

/bin/sh

se˜ giúp chúng ta

"thu xeˆ´p" mo

˙

i thu´’. Có theˆ’ thay theˆ´ dòng này bo’’i liên keˆ´t d¯eˆ´n baˆ´t ky` moˆ

˙

t chu’o’ng trình nào,

mà se˜ d¯o

˙

c taˆ

˙

p tin và thu

˙

’c hieˆ

˙

n các câu leˆ

˙

nh tu’o’ng u´’ng. Ví du

˙

, script trên ngôn ngu

˜’ Perl ba˘´t

d¯aˆ`u bo’’i dòng có da

˙

ng

!/bin/perl

. Moˆ

˙

t chú ý khác là ký tu

˙

#

dùng d¯eˆ’ vieˆ´t lo`’i chú thích

trong script. Taˆ´t ca’ nhu˜’ng gì d¯u´’ng sau ký tu

˙

’ này d¯eˆ

´ n cuoˆ´i dòng se˜ d¯u’o

˙

’c coi là chú thích và bi

˙

bash

bo’ qua (tu´’c là heˆ

˙

vo’ se˜ không xem dòng này là câu leˆ

˙

nh). Neˆ´u ba

˙

n muoˆ

´ n kieˆ’m chu´’ng

la

˙

i tác du

˙

ng cu’a ký tu

˙

’ này, thì hãy nhaˆ

˙

p vào dòng leˆ

˙

nh moˆ

˙

t câu leˆ

˙

nh baˆ´t ky`, và d¯a˘

˙

t tru’o´’c nó

(câu leˆ

˙

nh) ký tu

˙

#

, ví du

˙

"

# ls

", ba

˙

n se˜ thaˆ´y ra˘`ng heˆ

˙

vo’ bo’’ qua câu leˆ

˙

nh này.

Chúng ta se˜ du`’ng bài ho

˙

c nga˘´n go

˙

n veˆ`

bash

ta

˙

i d¯ây. Taˆ´t nhiên, còn raˆ´t nhieˆ`u vaˆ´n d¯eˆ` quan

tro

˙

ng caˆ`n xem xét nhu’ng na˘`m ngoài pha

˙

m vi cu’a bài ho

˙

c, ví du

˙

, qua’n lý tieˆ´n trình, li

˙

ch su’’câu

leˆ

˙

nh, mô ta’ veˆ` thu’ vieˆ

˙

n readline, tín hieˆ

˙

u, v.v. . . Các ba

˙

n se˜ tìm thaˆ´y thông tin caˆ`n thieˆ´t trong

các cuoˆ

´ n hu’o´’ng daˆ˜n khác hoa˘

˙

c trên trang

man bash

.

background image

3.10 Câu leˆ

˙

nh sh

51


Document Outline