Linux Cho Người Dùng Phan Vĩnh Thịnh, 55 Trang

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ý 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 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 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ˆ

˙

t phân vùng swap riêng bieˆ

˙

t cho Linux. Khi xác

d¯i

˙

nh dung lu’o

˙

’ng cu’a phân vùng swap Linux caˆ`n tính d¯eˆ

´ n nhu˜’ng yeˆ´u toˆ´ sau:

• Trong Linux, RAM và không gian swap ho

˙

’p la

˙

i ta

˙

o thành boˆ

˙

nho´’ a’o chung. Ví du

˙

, neˆ´u

ba

˙

n d¯o

˙

c có 256 MByte RAM và 128 Mbyte không gian swap, thì se˜ có 384 Mbyte boˆ

˙

nho´’ a’o.

• D

¯ eˆ’ làm vieˆ

˙

c vo´’i Linux caˆ`n ít nhaˆ´t 16 Mbyte boˆ

˙

nho´’ a’o, vì theˆ´ neˆ´u ba

˙

n d¯o

˙

c chı’ có 4

Mbyte RAM, thì caˆ`n phân vùng swap không nho’ ho’n 12 Mbyte.

• Trên Linux kích thu’o´’c moˆ

˙

t phân vùng swap không theˆ’ vu’o

˙

’t quá 128 Mbyte. Nghı˜a là

phân vùng swap có theˆ’ có kích thu’o´’c lo´’n bao nhiêu tùy thích nhu’ng Linux không theˆ’
su’’ du

˙

ng ho’n 128 Mbyte. Neˆ´u ba

˙

n d¯o

˙

c muoˆ

´ n có boˆ

˙

nho´’ a’o lo´’n ho’n, thì caˆ`n ta

˙

o hai phân

vùng swap hoa˘

˙

c su’’ du

˙

ng taˆ

˙

p tin swap.

• Khi tính kích thu’o´’c cu’a không gian swapping, caˆ`n nho´’ ra˘`ng kích thu’o´’c quá lo´’n có theˆ’

là vô ích. Trên máy tính vo´’i 16 Mbyte RAM khi cài d¯a˘

˙

t Linux vo´’i caˆ´u hình chuaˆ’n và

các chu’o’ng trình u´’ng du

˙

ng chuaˆ’n thì 48 Mbyte không gian swapping là d¯u’. Còn neˆ´u

cài d¯a˘

˙

t Linux vo´’i caˆ´u hình nho’ nhaˆ´t, thì không caˆ`n d¯eˆ´n không gian swap. Taˆ´t nhiên,

kích thu’o´’c chính xác cu’a không gian swap phu

˙

thuoˆ

˙

c lo´’n vào chu’o’ng trình se˜ d¯u’o

˙

’c cài

d¯a˘

˙

t.

Nói chung, chı’ nên suy nghı˜ veˆ` vaˆ´n d¯eˆ` dung lu’o

˙

’ng cu’a phân vùng swap khi có moˆ

˙

t d¯ı˜a

nho’ và ít boˆ

˙

nho´’ RAM. Trong tru’o`’ng ho

˙

’p ngu’o

˙

’c la

˙

i hãy phân chia d¯eˆ’ toˆ’ng soˆ

´ dung lu’o

˙

’ng cu’a

boˆ

˙

nho´’ a’o (goˆ`m RAM và phân vùng swap) không nho’ ho’n 128 Mbyte. Còn neˆ´u nhu’ ba

˙

n d¯o

˙

c

có 128 Mbyte RAM hay nhieˆ`u ho’n, thì phân vùng này có theˆ’ không caˆ`n thieˆ´t.

Taˆ´t ca’ các phaˆ`n còn la

˙

i cu’a Linux và các chu’o’ng trình hoˆ˜ tro

˙

’ theo nguyên ta˘´c có theˆ’ d¯a˘

˙

t

vào moˆ

˙

t phân vùng. Tuy nhiên, vieˆ

˙

c d¯a˘

˙

t heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux lên vài phân vùng riêng re˜ là

có ý nghı˜a. Ví du

˙

, có nhà chuyên gia khuyên nên dành cho heˆ

˙

thoˆ

´ ng taˆ

˙

p tin Linux ba phân

vùng (neˆ´u tính ca’ swap thì thành 4). Phân vùng thu´’nhaˆ´t (theo ý kieˆ´n cá nhân tác gia’, 1 Gbyte
là d¯u’) se˜ chu´’a heˆ

˙

thoˆ

´ ng taˆ

˙

p tin goˆ

´ c (

/

). Phân vùng thu´’ hai dành cho thu’ mu

˙

c

/home

. Còn

phân vùng thu´’ ba d¯u’o

˙

’c ga˘´n vào thu’ mu

˙

c

/usr

. Vieˆ

˙

c phân chia nhu’ vaˆ

˙

y du

˙

’a trên nhu

˜’ng lý le˜

sau. Dù HD

¯ H Linux có oˆ’n d¯i

˙

nh và d¯áng tin caˆ

˙

y d¯eˆ´n d¯âu, thì thı’nh thoa’ng cu˜ng caˆ`n cài d¯a˘

˙

t la

˙

i.

Ví du

˙

, ba

˙

n d¯o

˙

c muoˆ

´ n caˆ

˙

p nhaˆ

˙

t phiên ba’n mo´’i cu’a ba’n phân phoˆ´i, hoa˘

˙

c vì ít kinh nghieˆ

˙

m su’’

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

˙

i câu leˆ

˙

nh. Khi này, có theˆ’ chuyeˆ’n hu’o´’ng

không chı’ d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n, mà còn các kênh khác. D

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

˙

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

d¯a˘

˙

t tru’o´’c ký hieˆ

˙

u chuyeˆ’n hu’o´’ng soˆ´ cu’a kênh muoˆ´n chuyeˆ’n. D

¯ aˆ`u vào tiêu chuaˆ’n stdin có soˆ

´ 0,

d¯aˆ`u ra tiêu chuaˆ’n stdout - soˆ

´ 1, kênh thông báo loˆ˜i stderr - soˆ´ 2. Tu´’c là leˆ

˙

nh chuyeˆ’n hu’o´’ng có

da

˙

ng d¯aˆ`y d¯u’ nhu’ sau (xin d¯u’o

˙

’c nha˘´c la

˙

i, khoa’ng tra˘´ng ca

˙

nh > là không nhaˆ´t thieˆ´t):

command N > M

3

ba

˙

n caˆ`n dùng toˆ’ ho

˙

’p phím <Ctrl>+<Alt>+<F2> d¯eˆ’ chuyeˆ’n to´’i cu’’a soˆ’ terminal này và d¯a˘ng nhaˆ

˙

p tru’o´’c

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ˆ

˙

u d¯eˆ´n:

command N > &M

Leˆ

˙

nh này có nghı˜a là, d¯aˆ`u ra cu’a kênh vo´’i soˆ´ N d¯u’o

˙

’c gu’’i d¯eˆ

´ n ca’ d¯aˆ`u ra tiêu chuaˆ’n, và sao

chép to´’i kênh có soˆ´ M. Ví du

˙

, d¯eˆ’ sao chép thông báo loˆ˜i vào d¯aˆ`u ra tiêu chuaˆ’n, caˆ`n dùng leˆ

˙

nh

2>&1, còn 1>&2 sao chép stdout vào stderr. Kha’ na˘ng này d¯a˘

˙

c bieˆ

˙

t có ích khi muoˆ

´ n ghi d¯aˆ`u

ra vào taˆ

˙

p tin, vì khi d¯ó chúng ta vu`’a có theˆ’ nhìn thaˆ´y thông báo trên màn hình, vu`’a ghi chúng

vào taˆ

˙

p tin. Ví du

˙

, tru’o`’ng ho

˙

’p sau thu’o`’ng d¯u’o

˙

’c u´’ng du

˙

ng trong các script cha

˙

y khi kho’’i d¯oˆ

˙

ng

Linux:

kênh giao tác

teppi82@teppi:~$ cat hiho > /dev/null

cat: hiho: No such file or directory

teppi82@teppi:~$ cat hiho > /dev/null 2>&1

3.5.2

Su’’ du

˙

ng |

Moˆ

˙

t tru’o`’ng ho

˙

’p d¯a˘

˙

c bieˆ

˙

t cu’a chuyeˆ’n hu’o´’ng d¯aˆ`u ra là su

˙

’ toˆ’ chu´’c các d¯u’o`’ng oˆ

´ ng (ha y còn có

theˆ’ go

˙

i là kênh giu

˜’a các chu’o’ng trình, hoa˘

˙

c ba˘ng chuyeˆ`n). Hai hay vài câu leˆ

˙

nh, mà d¯aˆ`u ra

cu’a leˆ

˙

nh tru’o´’c dùng làm d¯aˆ`u vào cho leˆ

˙

nh sau, liên keˆ´t vo´’i nhau (có theˆ’ nói phân cách nhau,

neˆ´u muoˆ

´ n) bo’’i ký hieˆ

˙

u ga

˙

ch tha˘’ng d¯u´’ng - "

|

". Khi này d¯aˆ`u ra tiêu chuaˆ’n cu’a leˆ

˙

nh d¯u´’ng bên

trái so vo´’i

|

du’o

˙

’c chuyeˆ’n d¯eˆ

´ n d¯aˆ`u vào tiêu chuaˆ’n cu’a chu’o’ng trình, du´’ng bên pha’i so vo´’i

|

.

Ví du

˙

:

kênh giao tác

maikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l

Dòng này có nghı˜a là keˆ´t qua’ cu’a leˆ

˙

nh

cat

, tu´’c là noˆ

˙

i dung taˆ

˙

p tin ls.txt, se˜ d¯u’o

˙

’c chuyeˆ’n

d¯eˆ´n d¯aˆ`u vào cu’a leˆ

˙

nh

grep

, leˆ

˙

nh này se˜ phân chia noˆ

˙

i dung nói trên và chı’ laˆ´y ra nhu˜’ng

dòng nào có chu´’a tu`’ knoppix. D

¯ eˆ

´ n lu’o

˙

’t mình, keˆ

´ t qu’a cu’a leˆ

˙

nh

grep

d¯u’o

˙

’c chuyeˆ’n to´’i d¯aˆ`u

vào cu’a leˆ

˙

nh

wc -l

, mà tính soˆ

´ nhu˜’ng dòng thu d¯u’o

˙

’c. D

¯ u’o`’ng oˆ

´ ng su’’ du

˙

ng d¯eˆ’ keˆ´t ho

˙

’p vài

chu’o’ng trình nho’ la

˙

i vo´’i nhau (moˆ˜i chu’o’ng trình thu

˙

’c hieˆ

˙

n moˆ

˙

t bieˆ´n d¯oˆ’i xác d¯i

˙

nh nào d¯ó trên

d¯aˆ`u vào) ta

˙

o thành moˆ

˙

t leˆ

˙

nh toˆ’ng quát, mà keˆ´t qua’ cu’a nó se˜ là moˆ

˙

t bieˆ´n d¯oˆ’i phu´’c ta

˙

p. Caˆ`n

chú ý ra˘`ng, heˆ

˙

vo’ go

˙

i và thu

˙

’c hieˆ

˙

n taˆ´t ca’ các câu leˆ

˙

nh có trong d¯u’o`’ng oˆ´ng cùng moˆ

˙

t lúc, cha

˙

y

moˆ˜i leˆ

˙

nh d¯ó trong moˆ

˙

t ba’n sao heˆ

˙

vo’ riêng. Vì theˆ´ ngay khi chu’o’ng trình thu´’nhaˆ´t ba˘´t d¯aˆ`u d¯u’a

keˆ´t qua’ o’’ d¯aˆ`u ra, chu’o’ng trình tieˆ´p theo ba˘´t d¯aˆ`u xu’’ lý keˆ´t qua’ này. Cu˜ng y nhu’ vaˆ

˙

y, các leˆ

˙

nh

tieˆ´p theo thu

˙

’c hieˆ

˙

n các công vieˆ

˙

c cu’a mình: cho`’ du˜’ lieˆ

˙

u tu`’ leˆ

˙

nh tru’o´’c và d¯u’a keˆ´t qua’ cho leˆ

˙

nh

tieˆ´p theo, gioˆ

´ ng nhu’moˆ

˙

t dây chuyeˆ`n sa’n xuaˆ´t. Neˆ´u nhu’muoˆ´n moˆ

˙

t leˆ

˙

nh nào d¯ó keˆ´t thúc hoàn

toàn, tru’o´’c khi thu

˙

’c hieˆ

˙

n leˆ

˙

nh tieˆ´p theo, ba

˙

n có theˆ’ su’e’ du

˙

ng trên moˆ

˙

t dòng ca’ ký hieˆ

˙

u dây

chuyeˆ`n

|

, cu˜ng nhu’ daˆ´u chaˆ´p phaˆ’y

;

. Tru’o´’c moˆ˜i daˆ´u chaˆ´m phaˆ’y, heˆ

˙

vo’ se˜ du`’ng la

˙

i và cho`’

cho d¯eˆ´n khi thu

˙

’c hieˆ

˙

n xong taˆ´t ca’ các câu leˆ

˙

nh tru’o´’c cu’a d¯u’o`’ng oˆ´ng. Tra

˙

ng thái thoát ra (giá

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˘

˙

p daˆ´u ngoa˘

˙

c se˜ ta

˙

o ra vài dòng riêng re˜ (soˆ

´ nhu˜’ng dòng này ba˘`ng soˆ´ tu`’

na˘`ng trong daˆ´u ngoa˘

˙

c) ba˘`ng cách ghi thêm vào tru’o´’c moˆ˜i tu`’trong ngoa˘

˙

c nhu

˜’ng gì d¯u´’ng tru’o´’c

daˆ´u ngoa˘

˙

c, và ghi thêm vào sau moˆ˜i tu`’ này nhu˜’ng gì d¯u´’ng sau daˆ´u ngoa˘

˙

c. Moˆ

˙

t ví du

˙

khác:

dòng

a{d,c,b}e

khi khai trieˆ’n se˜ thu d¯u’o

˙

’c ba tu`’ "

ade ace abe

". Khai trieˆ’n daˆ´u ngoa˘

˙

c

d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n tru’o´’c các da

˙

ng khai trieˆ’n khác trong dòng leˆ

˙

nh, ho’n nu˜’a taˆ´t ca’ các ký tu

˙

’ d¯a˘

˙

c

bieˆ

˙

t có trong dòng leˆ

˙

nh, keˆ’ ca’ nhu˜’ng ký tu

˙

’ na˘`m trong daˆ

´ u ngoa˘

˙

c, se˜ d¯u’o

˙

’c giu

˜’ không thay d¯oˆ’i

(chúng se˜ d¯u’o

˙

’c biên di

˙

ch o’’ các bu’o´’c phía sau).

3.7.2

Thay theˆ

´ daˆ´u ngã (Tilde Expansion)

Neˆ´u nhu’tu`’ba˘´t d¯aˆ`u vo´’i ký tu

˙

’daˆ

´ u ngã (’∼’), taˆ´t ca’ các ký tu

˙

’d¯u´’ng tru’o´’c daˆ

´ u ga

˙

ch chéo d¯aˆ`u tiên

(hay taˆ´t ca’ các ký tu

˙

’ neˆ

´ u nhu’ không có daˆ´u ga

˙

ch chéo) se˜ d¯u’o

˙

’c hieˆ’u là tên ngu’o`’i dùng (login

name). Neˆ´u nhu’tên này là moˆ

˙

t dòng roˆ˜ng (tu´’c là daˆ´u ga

˙

ch chéo d¯u´’ng ngay phía sau daˆ´u ngã),

thì daˆ´u ngã se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i giá tri

˙

cu’a bieˆ´n

HOME

. Và neˆ´u giá tri

˙

cu’a bieˆ´n

HOME

không

d¯u’o

˙

’c gán thì daˆ

´ u ngã se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i d¯u’o`’ng daˆ˜n d¯aˆ`u d¯u’ d¯eˆ´n thu’ mu

˙

c cá nhân cu’a ngu’o`’i

dùng, mà d¯ã cha

˙

y heˆ

˙

vo’. Neˆ´u nhu’ ngay sau daˆ´u ngã (và tru’o´’c daˆ´u ga

˙

ch chéo) là moˆ

˙

t tu`’ trùng

vo´’i tên cu’a moˆ

˙

t ngu’o`’i dùng ho

˙

’p pháp, thì daˆ

´ u ngã coˆ

˙

ng vo´’i tên ngu’o`’i dùng d¯u’o

˙

’c thay theˆ

´ bo’’i

d¯u’o`’ng daˆ˜n d¯aˆ`y d¯u’ d¯eˆ´n thu’ mu

˙

c cá nhân cu’a ngu’o`’i dùng này. Neˆ´u nhu’ tu`’ d¯u´’ng sau daˆ´u ngã

không pha’i là tên cu’a moˆ

˙

t ngu’o`’i dùng (và không roˆ˜ng), thì tu`’không bi

˙

thay d¯oˆ’i. Neˆ´u nhu’sau

daˆ´u ngã là ’+’, hay ký hieˆ

˙

u này se˜ d¯u’o

˙

’c thay theˆ

´ bo’’i tên d¯aˆ`u d¯u’ cu’a thu’ mu

˙

c hieˆ

˙

n tho`’i (tu´’c là

giá tri

˙

cu’a bieˆ´n

PWD

). Neˆ´u du´’ng sau daˆ´u ngã là ’-’, thì thay theˆ´ giá tri

˙

cu’a bieˆ´n

OLDPWD

(thu’

mu

˙

c "cu˜").

3.7.3

Phép theˆ

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

Ký tu

˙

’ $ d¯u’o

˙

’c su’’ du

˙

ng cho các thao tác theˆ´ tham bieˆ´n, theˆ´ các câu leˆ

˙

nh và theˆ´ các bieˆ’u thu´’c

soˆ

´ ho

˙

c. Bieˆ’u thu´’c hay tên d¯u´’ng sau $ có theˆ’ d¯u’o

˙

’c d¯u’a vào ngoa˘

˙

c, không nhaˆ´t thieˆ´t, nhu’ng

raˆ´t tieˆ

˙

n, vì daˆ´u ngoa˘

˙

c phân cách bieˆ’u thu´’c vo´’i các tu`’ hay ký tu

˙

’ d¯u´’ng sau. Nhu’ vaˆ

˙

y, d¯eˆ’ go

˙

i

giá tri

˙

cu’a tham bieˆ´n nói chung cu˜ng nhu’ bieˆ´n môi tru’o`’ng nói riêng trong dòng leˆ

˙

nh, caˆ`n d¯a˘

˙

t

bieˆ’u thu´’c da

˙

ng $parameter. Daˆ´u ngoa˘

˙

c chı’ caˆ`n thieˆ´t, neˆ´u tên cu’a tham bieˆ´n có chu´’a vài chu˜’

soˆ

´ , hoa˘

˙

c khi theo sau tên còn có các ký tu

˙

’ khác, mà chúng ta không muoˆ

´ n heˆ

˙

vo’ "hieˆ’u laˆ`m"

chúng là moˆ

˙

t phaˆ`n cu’a tên tham bieˆ´n. Trong taˆ´t ca’ các giá tri

˙

cu’a bieˆ´n soˆ

´ xa’y ra phép theˆ´ daˆ´u

ngã (∼), su

˙

’ khai trieˆ’n tham bieˆ

´ n và bieˆ´n soˆ´, phép theˆ´ các câu leˆ

˙

nh, phép theˆ´ các bieˆ’u thu´’c soˆ´

ho

˙

c, cu˜ng nhu’ xóa các ký tu

˙

’ trích daˆ˜n (xem du’o´’i). Su

˙

’ phân chia tu`’ không xa’y ra, tru`’ tru’o`’ng

ho

˙

’p "$" (lo`’i gia’i thích xem o’’ ba’ng soˆ

´ 3). Su

˙

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

˙

p tin và thu’ mu

˙

c cu˜ng

không d¯u’o

˙

’c thu

˙

’c hieˆ

˙

n.

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

˙

n nhu’ sau:

if

list1

then

list2

else

list3

fi

trong d¯ó,

list1, list2

, và

list3

là các chuoˆ˜i câu leˆ

˙

nh, phân cách nhau bo’’i daˆ´u

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

˙

t bit thay d¯oˆ’i nhóm.

-h file

hay

-L file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là liên keˆ´t meˆ`m (liên keˆ´t tu’o

˙

’ng tru’ng).

-k file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và d¯u’o

˙

’c d¯a˘

˙

t bit sticky.

-p file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là tên cu’a moˆ

˙

t oˆ

´ ng (kênh FIFO).

-p file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là tên cu’a moˆ

˙

t oˆ

´ ng (kênh FIFO).

-r file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n d¯o

˙

c.

-s file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và kích thu’o´’c lo´’n ho’n không.

-t fd

D

¯ úng neˆ

´ u boˆ

˙

mô ta’ cu’a taˆ

˙

p tin (fd) mo’’ và chı’ lên terminal.

-u file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và d¯u’o

˙

’c d¯a˘

˙

t bit thay d¯oˆ’i ngu’o`’i dùng.

-w file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n ghi.

-x file

D

¯ úng neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và có quyeˆ`n thu

˙

’c thi.

-0 file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

và chu’ so’’ hu˜’u cu’a nó là ngu’o`’i dùng mà ID có hieˆ

˙

u lu

˙

’c

chı’ d¯eˆ´n.

-G file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và thuoˆ

˙

c veˆ` nhóm, xác d¯i

˙

nh bo’’i ID nhóm có hieˆ

˙

u

lu

˙

’c.

-S file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và là socket.

-N file

D

¯ úng, neˆ

´ u taˆ

˙

p tin có tên

file

toˆ`n ta

˙

i và thay d¯oˆ’i tu`’ laˆ`n d¯u’o

˙

’c d¯o

˙

c cuoˆ

´ i cùng.

file1 -nt file2

D

¯ úng, neˆ

´ u taˆ

˙

p tin

file1

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ˆ

˙

t soˆ´ thieˆ´t bi

˙

và chı’ soˆ

´ mô ta’ inode.

-o optname

D

¯ úng, neˆ

´ u tùy cho

˙

n

optname

cu’a heˆ

˙

vo’ d¯u’o

˙

’c kích hoa

˙

t. Chi tieˆ´t xin xem trên trang

man bash

.

-z string

D

¯ úng, neˆ

´ u d¯oˆ

˙

dài cu’a chuoˆ˜i

string

ba˘`ng không.

-n string

D

¯ úng, neˆ

´ u d¯oˆ

˙

dài cu’a chuoˆ˜i khác không.

string1 == string2

D

¯ úng, neˆ

´ u hai chuoˆ˜i trùng nhau. Có theˆ’ thay hai

==

ba˘`ng moˆ

˙

t

=

.

string1 !== string2

D

¯ úng, neˆ

´ u hai chuoˆ˜i không trùng nhau.

string1 < string2

D

¯ úng, neˆ

´ u chuoˆ˜i

string1

, theo tu`’ d¯ieˆ’n, d¯u´’ng tru’o´’c chuoˆ˜i

string2

(d¯oˆ

´ i vo´’i ngôn

ngu

˜’ hieˆ

˙

n tho`’i).

string1 > string2

D

¯ úng, neˆ

´ u chuoˆ˜i

string1

, theo tu`’d¯ieˆ’n, d¯u´’ng sau chuoˆ˜i

string2

(d¯oˆ

´ i vo´’i ngôn ngu˜’

hieˆ

˙

n tho`’i).

arg1 OP arg2

O

’’ d¯ây OP là moˆ

˙

t trong các phép so sánh soˆ

´ ho

˙

c:

-eq

(ba˘`ng),

-ne

(khác, không ba˘`ng),

-lt

(nho’ ho’n),

-le

(nho’ ho’n hoa˘

˙

c ba˘`ng),

-gt

(lo´’n ho’n),

-ge

(lo´’n ho’n hoa˘

˙

c ba˘`ng).

O

’’ choˆ˜ các tham soˆ´ arg1 và arg2 có theˆ’ su’’du

˙

ng các soˆ

´ nguyên (âm hoa˘

˙

c du’o’ng).

Tu`’ các bieˆ’u thu´’c d¯ieˆ`u kieˆ

˙

n co’ ba’n này có theˆ’ xây du

˙

’ng các bieˆ’u thu´’c phu´’c ta

˙

p theo ý

muoˆ

´ n nho`’ các phép lôgíc thông thu’o`’ng PHU’ D

¯ I

˙

NH, VÀ (coˆ

˙

ng) và HOA

˘
˙

C:

!(expression)

Phép phu’ d¯i

˙

nh. D

¯ úng, neˆ

´ u bieˆ’u thu´’c sai.

expression1 -a expression2

Phép coˆ

˙

ng lôgic

AND

. D

¯ úng neˆ

´ u ca’ hai bieˆ’u thu´’c d¯eˆ`u d¯úng.

expression1 -o expression2

Phép lôgíc hoa˘

˙

c

OR

. D

¯ úng neˆ

´ u moˆ

˙

t trong hai bieˆ’u thu´’c d¯úng.

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


Wyszukiwarka

Podobne podstrony:
ĐHBK Tài Liệu Hướng Dẫn Thiết Kế Thiết Bị Điện Tử Công Suất Trần Văn Thịnh, 122 Trang
ĐHĐN Giáo Trình Quy Hoạch Đô Thị 2 Ths Tô Văn Hùng & Phan Hữu Bách, 28 Trang
ĐHĐN Giáo Trình Quy Hoạch Đô Thị 1 Ths Tô Văn Hùng & Phan Hữu Bách, 71 Trang
ĐHHH Bài Giảng Hệ Thống Thông Tin Vệ Tin Ths Nguyễn Ngọc Sơn, 43 Trang
ĐHĐL Giáo Trình Điện Tử Căn Bản Phan Văn Nghĩa, 177 Trang
Summaries of the Four Arab Israeli Conflicts in the th?n
ĐHTN Giáo Trình Môn Học Xử Lý Ảnh Ts Đỗ Năng Toàn & Ts Phạm Việt Bình, 76 Trang
Slide kỹ Thuật Lập Trình Nguyễn Thủy Đoan Trang, 20 Trang
Căn Bản Về IP CNTT VNE, 16 Trang
ĐHCN Thực Hành Phân Tích Mạch DC AC Ths Nguyễn Chương Đỉnh, 29 Trang
ĐHSP Giáo Trình Trí Tuệ Nhân Tạo (NXB Hà Nội 2011) Phạm Thọ Hoàn, 58 Trang
ĐHCT Giáo Trình Thực Hành Lập Trình Hệ Thống (NXB Cần Thơ 2008) Nguyễn Hứa Duy Khang, 39 Trang
ĐHCN Giáo Trình Lý Thuyết Trường Điện Từ Võ Xuân Ân, 108 Trang
C Cơ Bản Và Nâng Cao Updatesofts, 79 Trang
Quy Phạm Trang Bị Điện 4 Bảo Vệ Và Tự Động
LVDA An Ninh Trong Các Hệ Thống Thông Tin Di Động Đinh Xuân Hiệp, 74 Trang
ĐHMO Thực Hành Điện Tử Tương Tự Ks Nguyễn Phúc Ân, 38 Trang

więcej podobnych podstron