• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Linux cho nguoi_moi_dung
 

Linux cho nguoi_moi_dung

on

  • 76 views

 

Statistics

Views

Total Views
76
Views on SlideShare
76
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Linux cho nguoi_moi_dung Linux cho nguoi_moi_dung Document Transcript

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