• Like
Giao trinh he dieu hanh linux va unix 2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Giao trinh he dieu hanh linux va unix 2

  • 104 views
Published

 

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
104
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. www.nhipsongcongnghe.net I H C QU C GIA HÀ N I TRƯ NG I H C CÔNG NGH ===================================== HÀ QUANG TH Y NGUY N TRÍ THÀNH Giáo trình: H I U HÀNH UNIX - LINUX Dành cho sinh viên ngành Công ngh thông tin, i n t - Vi n thông, Toán tin ng d ng HÀ N I - 2004
  • 2. 2 M C L C L I GI I THI U ..................................................................................................... 9 CHƯƠNG 1. GI I THI U CHUNG V LINUX...................................................... 10 1.1. Gi i thi u v UNIX và Linux...................................................................................... 10 1.1.1. Xu t x , quá trình ti n hóa và m t s c trưng c a h i u hành UNIX ......... 10 1.1.2. Gi i thi u sơ b v Linux................................................................................... 13 1.2. Sơ b v các thành ph n c a Linux ........................................................................... 17 1.2.1. Sơ b v nhân ..................................................................................................... 18 1.2.2. Sơ b v shell ..................................................................................................... 18 1.3. Gi i thi u v s d ng l nh trong Linux..................................................................... 20 1.3.1. Các quy ư c khi vi t l nh................................................................................... 22 1.3.3. Làm ơn gi n thao tác gõ l nh ........................................................................... 25 1.3.4. Ti p n i dòng l nh.............................................................................................. 29 1.4. Trang Man ................................................................................................................... 29 CHƯƠNG 2. THAO TÁC V I H TH NG........................................................... 32 2.1. Quá trình kh i ng Linux......................................................................................... 32 2.2. Th t c ăng nh p và các l nh thoát kh i h th ng ................................................ 33 2.2.1. ăng nh p........................................................................................................... 33 2.2.2. Ra kh i h th ng................................................................................................. 36 2.2.3. Kh i ng l i h th ng ....................................................................................... 38 2.2.4. Kh i ng vào ch ho ............................................................................. 38 2.3. L nh thay i m t kh u.............................................................................................. 42 2.4. L nh xem, thi t t ngày, gi hi n t i và xem l ch trên h th ng ........................... 45 2.4.1 L nh xem, thi t t ngày, gi .............................................................................. 45 2.4.2. L nh xem l ch .................................................................................................... 47 2.5. Xem thông tin h th ng .............................................................................................. 48 2.6. Thay i n i dung d u nh c shell .............................................................................. 49 2.7. L nh g i ngôn ng tính toán s h c .......................................................................... 50 CHƯƠNG 3. H TH NG FILE ............................................................................. 53 3.1 T ng quan v h th ng file........................................................................................... 53 3.1.1. M t s khái ni m................................................................................................ 53 3.1.2. Sơ b ki n trúc n i t i c a h th ng file............................................................. 57 3.1.3. M t s thu t toán làm vi c v i inode ................................................................. 63 3.1.4. H tr nhi u h th ng File.................................................................................. 66 3.1.5. Liên k t tư ng trưng (l nh ln) ............................................................................ 71
  • 3. 3 3.2 Quy n truy nh p thư m c và file ................................................................................ 72 3.2.1 Quy n truy nh p .................................................................................................. 72 3.2.2. Các l nh cơ b n .................................................................................................. 75 3.3 Thao tác v i thư m c.................................................................................................... 80 3.3.1 M t s thư m c c bi t ...................................................................................... 80 3.3.2 Các l nh cơ b n v thư m c ................................................................................ 83 3.4. Các l nh làm vi c v i file ............................................................................................ 87 3.4.1 Các ki u file có trong Linux................................................................................ 87 3.4.2. Các l nh t o file.................................................................................................. 88 3.4.3 Các l nh thao tác trên file.................................................................................... 90 3.4.4 Các l nh thao tác theo n i dung file .................................................................... 98 3.4.5 Các l nh tìm file ................................................................................................ 106 3.5 Nén và sao lưu các file................................................................................................ 115 3.5.1 Sao lưu các file (l nh tar) .................................................................................. 115 3.5.2 Nén d li u ....................................................................................................... 118 CHƯƠNG 4. QU N TR QUÁ TRÌNH................................................................. 122 4.1 Quá trình trong UNIX................................................................................................ 122 4.1.1. Sơ b v quá trình............................................................................................. 122 4.1.2. Sơ b c u trúc i u khi n c a UNIX................................................................ 123 4.1.3. Các h th ng con trong nhân............................................................................ 125 4.1.4. Sơ b v i u khi n quá trình........................................................................... 129 4.1.5. Tr ng thái và chuy n d ch tr ng thái ................................................................ 130 4.1.6. S ngưng ho t ng và ho t ng tr l i c a quá trình.................................... 132 4.1.7. Sơ b v l nh i v i quá trình ........................................................................ 132 4.2. Các l nh cơ b n.......................................................................................................... 133 4.2.1. L nh fg và l nh bg............................................................................................ 133 4.2.2. Hi n th các quá trình ang ch y v i l nh ps ................................................... 135 4.2.3. H y quá trình v i l nh kill ............................................................................... 137 4.2.4. Cho máy ng ng ho t ng m t th i gian v i l nh sleep.................................. 139 4.2.5. Xem cây quá trình v i l nh pstree.................................................................... 139 4.2.6. L nh thi t t l i ưu tiên c a quá trình nice và l nh renice......................... 141 CHƯƠNG 5. QU N LÝ TÀI KHO N NGƯ I DÙNG......................................... 142 5.1 Tài kho n ngư i dùng................................................................................................ 142 5.2 Các l nh cơ b n qu n lý ngư i dùng ........................................................................ 142 5.2.1 File /etc/passwd ................................................................................................ 143 5.2.2 Thêm ngư i dùng v i l nh useradd................................................................... 143 5.2.3 Thay i thu c tính ngư i dùng ........................................................................ 146 5.2.4 Xóa b m t ngư i dùng (l nh userdel).............................................................. 147
  • 4. 4 5.3 Các l nh cơ b n liên quan n nhóm ngư i dùng ................................................... 148 5.3.1 Nhóm ngư i dùng và file /etc/group ................................................................. 148 5.3.2 Thêm nhóm ngư i dùng .................................................................................... 149 5.3.3 S a i các thu c tính c a m t nhóm ngư i dùng (l nh groupmod) ................ 149 5.3.4 Xóa m t nhóm ngư i dùng (l nh groupdel)...................................................... 150 5.4 Các l nh cơ b n khác có liên quan n ngư i dùng................................................ 150 5.4.1 ăng nh p v i tư cách m t ngư i dùng khác khi dùng l nh su ....................... 150 5.4.2 Xác nh ngư i dùng ang ăng nh p (l nh who) ............................................ 151 5.4.3 Xác nh các quá trình ang ư c ti n hành (l nh w)....................................... 153 CHƯƠNG 6. TRUY N THÔNG VÀ M NG UNIX-LINUX................................... 154 6.1. L nh truy n thông ..................................................................................................... 154 6.1.1. L nh write......................................................................................................... 154 6.1.2. L nh mail.......................................................................................................... 155 6.1.3. L nh talk........................................................................................................... 156 6.2 C u hình Card giao ti p m ng .................................................................................. 156 6.3. Các d ch v m ng ...................................................................................................... 159 6.3.1 H thông tin m ng NIS...................................................................................... 159 6.4 H th ng file trên m ng ............................................................................................. 164 6.4.1 Cài t NFS ....................................................................................................... 165 6.4.2 Kh i ng và d ng NFS.................................................................................... 166 6.4.3 C u hình NFS server và Client.......................................................................... 167 6.4.4 S d ng mount................................................................................................... 167 6.4.5 Unmount............................................................................................................ 168 6.4.6 Mount t ng qua t p c u hình........................................................................ 168 CHƯƠNG 7. L P TRÌNH SHELL VÀ L P TRÌNH C TRÊN LINUX ................... 170 7.1. Cách th c pipes và các y u t cơ b n l p trình trên shell ..................................... 170 7.1.1. Cách th c pipes ................................................................................................ 170 7.1.2. Các y u t cơ b n l p trình trong shell ........................................................ 171 7.2. M t s l nh l p trình trên shell ................................................................................ 175 7.2.1. S d ng các toán t bash.................................................................................. 175 7.2.2. i u khi n lu ng .............................................................................................. 179 7.2.3 Các toán t nh hư ng vào ra........................................................................... 193 7.2.4. Hi n dòng văn b n............................................................................................ 194 7.2.5. L nh read c d li u cho bi n ngư i dùng..................................................... 194 7.2.6. L nh set ............................................................................................................ 195 7.2.7. Tính toán trên các bi n ..................................................................................... 196 7.2.8. Chương trình ví d ............................................................................................ 196
  • 5. 5 7.3. L p trình C trên UNIX ............................................................................................. 197 7.3.1. Trình biên d ch gcc........................................................................................... 197 7.3.2. Công c GNU make ......................................................................................... 201 7.3.3. Làm vi c v i file............................................................................................... 203 7.3.4. Thư vi n liên k t............................................................................................... 211 7.3.5 Các công c cho thư vi n ................................................................................. 220 TÀI LI U THAM KH O ...................................................................................... 223 CHÚ THÍCH M T S THU T NG ................................................................... 224 PH L C A. QUÁ TRÌNH CÀI T REDHAT-LINUX ........................................ 227 AA. Cài t phiên b n RedHat 6.2 ................................................................................. 228 AA.1. T o ĩa m m kh i ng................................................................................... 228 AA.2. Phân vùng l i ĩa DOS/Windows hi n th i.................................................. 228 AA.3. Các bư c cài t (b n RedHat 6.2 và kh i ng t CD-ROM)....................... 229 AA.4. Các h n ch v ph n c ng i v i Linux ........................................................ 239 PH L C B. TRÌNH SO N TH O VIM .............................................................. 242 B.1 Kh i ng vim............................................................................................................ 244 B.1.1 M chương trình so n th o vim........................................................................ 244 B.1.2. Tính năng m nhi u c a s .............................................................................. 245 B.1.3. Ghi và thoát trong vim..................................................................................... 246 B.2. Di chuy n tr so n th o trong Vim ......................................................................... 247 B.2.1. Di chuy n trong văn b n.................................................................................. 247 B.2.2. Di chuy n theo các i tư ng văn b n............................................................. 248 B.2.3. Cu n màn hình................................................................................................. 248 B.3. Các thao tác trong văn b n ...................................................................................... 249 B.3.1. Các l nh chèn văn b n trong vim..................................................................... 249 B.3.2. Các l nh xoá văn b n trong vim ...................................................................... 250 B.3.3. Các l nh khôi ph c văn b n trong vim ............................................................ 250 6.3.4. Các l nh thay th văn b n trong vim................................................................ 250 B.3.5. Sao chép và di chuy n văn b n trong vim ....................................................... 252 B.3.6. Tìm ki m và thay th văn b n trong vim......................................................... 253 B.3.7. ánh d u trong vim ......................................................................................... 254 B.3.8. Các phím s d ng trong ch chèn............................................................... 255 B.3.9. M t s l nh trong ch o............................................................................. 256 B.3.10. Các l nh l p ................................................................................................... 256 B.4. Các l nh khác ............................................................................................................ 257 B.4.1. Cách th c hi n các l nh bên trong Vim........................................................... 257 B.4.2. Các l nh liên quan n file............................................................................... 257
  • 6. 6 PH L C C. MIDNIGHT COMMANDER ............................................................ 259 C.1. Gi i thi u v Midnight Commander (MC) ............................................................ 259 C.2. Kh i ng MC .......................................................................................................... 259 C.3. Giao di n c a MC..................................................................................................... 259 C.4. Dùng chu t trong MC .............................................................................................. 260 C.5. Các thao tác bàn phím.............................................................................................. 261 C.6. Th c ơn thanh ngang (menu bar)......................................................................... 263 C.7. Các phím ch c năng................................................................................................. 266 C.8. B so n th o c a Midnight Commander................................................................ 267 PH L C D. SAMBA.......................................................................................... 270 D.1 Cài t Samba............................................................................................................ 270 D.2 Các thành ph n c a Samba ...................................................................................... 271 D.3 File c u hình Samba .................................................................................................. 272 D.4 Các ph n c bi t c a file c u hình Samba............................................................. 275 D.5 Qu n lý ngư i dùng trong Samba............................................................................ 282 D.6 Cách s d ng Samba t các máy tr m.................................................................... 284 D.6.1 Cách s d ng t các máy tr m là Linux........................................................... 284 D.6.2 Cách s d ng t các máy tr m là Windows ..................................................... 287
  • 7. 7 L I GI I THI U Trong hơn mư i năm tr l i ây h i u hành Linux ã
  • 8. 8 CHƯƠNG 1. GI I THI U CHUNG V LINUX 1.1. Gi i thi u v UNIX và Linux 1.1.1. Xu t x , quá trình ti n hóa và m t s c trưng c a h i u hành UNIX Năm 1965, Vi n công ngh Massachusetts (MIT: Massachusetts Institute of Technology) và Phòng thí nghi m Bell c a hãng AT&T th c hi n d án xây d ng m t h i u hành có tên g i là Multics (MULTiplexed Information and Computing Service) v i m c tiêu: t o l p ư c m t h i u hành ph trên vùng lãnh th r ng (ho t ng trên t p các máy tính ư c k t n i), a ngư i dùng, có năng l c cao v tính toán và lưu tr . D án nói trên thành công m c h t s c khiêm t n và ngư i ta ã bi t n m t s khi m khuy t khó kh c ph c c a Multics. Năm1969, Ken Thompson, m t chuyên viên t i phòng thí nghi m Bell, ngư i ã tham gia d án Multics, cùng Dennics Richie vi t l i h i u hành a-bài toán trên máy PDP-7 v i tên là UNICS (UNiplexed Information and Computing Service) t m t câu g i ùa c a m t ng nghi p. Trong h i u hành UNICS, m t s kh i th o u tiên v H th ng file ã ư c Ken Thompson và Dennis Ritchie th c hi n. n năm 1970 h i u hành ư c vi t trên assembler cho máy PDP-11/20 và mang tên là UNIX. Năm 1973, Riche và Thompson vi t l i nhân c a h i u hành UNIX trên ngôn ng C, và h i u hành ã tr nên d dàng cài t t i các lo i máy tính khác nhau; tính ch t như th ư c g i là tính kh chuy n (portable) c a UNIX. Trư c ó, kho ng năm 1971, h i u hành ư c th hi n trên ngôn ng B (mà d a trên ngôn ng B, Ritche ã phát tri n thành ngôn ng C). Hãng AT&T ph bi n chương trình ngu n UNIX t i các trư ng i h c, các công ty thương m i và chính ph v i giá không áng k . Năm 1982, h th ng UNIX-3 là b n UNIX thương m i u tiên c a AT&T. Năm 1983, AT&T gi i thi u H th ng UNIX-4 phiên b n th nh t trong ó ã có trình so n th o vi, thư vi n qu n lý màn hình ư c phát tri n t i h c T ng h p California, Berkley. Giai o n 1985-1987, UNIX-5 phiên b n 2 và 3 tương ng ư c ưa ra vào các năm 1985 và 1987. Trong giai o n này, có kho ng 100000 b n UNIX ã ư c ph bi n trên th gi i, cài t t máy vi tính n các h th ng l n. u th p k 1990. UNIX-5 phiên b n 4 ư c ưa ra như là m t chu n c a UNIX. ây là s k t h p c a các b n sau: AT&T UNIX-5 phiên b n 3, Berkley Software Distribution (BSD), XENIX c a MicroSoft SUN OS Có th tìm th y các n i dung liên quan t i m t s phiên b n m i c a UNIX t i a ch website http://problem.rice.edu/. Các nhóm nhà cung c p khác nhau v UNIX ang ho t ng trong th i gian hi n nay ư c k n như sau: Unix International (vi t t t là UI). UI là m t t ch c g m các nhà cung c p th c hi n vi c chuy n như ng h th ng UNIX-5 và cung c p b n AT&T theo các
  • 9. 9 nhu c u và thông báo phát hành m i, ch ng h n như i u ch nh b n quy n. Giao di n h a ngư i dùng là Open Look. Open Software Foundation (OSF). OSF ư c h tr b i IBM, DEC, HP ... theo hư ng phát tri n m t phiên b n c a Unix nh m tranh ua v i h th ng UNIX-5 phiên b n 4. Phiên b n này có tên là OSF/1 v i giao di n h a ngư i dùng ư c g i là MOTIF. Free SoftWare Foundation (FSF): m t c ng ng do Richard Stallman kh i xư ng năm 1984 ch trương phát hành các ph n m m s d ng t do, trên cơ s m t h i u hành thu c lo i UNIX. B ng sau ây li t kê m t s cài t UNIX khá ph bi n (thư ng th y có ch X cu i tên g i c a H i u hành): Tên h Nhà cung c p N n phát tri n AIX International Business Machines AT&T System V A/UX Apple Computer AT&T System V Dynix Sequent BSD (Berkeley SoftWare Distribution) HP-UX Hewlett-Packard BSD Irix Silicon Graphics AT&T System V Linux Free SoftWare Foundation NextStep Next BSD OSF/1 Digital Equipment Corporation BSD SCO UNIX Santa Cruz Operation AT&T System V Solaris Sun Microsystems AT&T System V SunOS Sun Microsystems BSD UNIX Ultrix Digital Equipment Corporation BSD UNIX Unicos Cray AT&T System V UnixWare Novell AT&T System V XENIX MicroSoft AT&T System III-MS Dư i ây li t kê m t s c trưng c a h i u hành UNIX: H i u hành ư c vi t trên ngôn ng b c cao; b i v y, r t d c, d hi u, d thay i cài t trên lo i máy m i (tính d mang chuy n, như ã nói), Có giao di n ngư i dùng ơn gi n năng l c cung c p các d ch v mà ngư i dùng mong mu n (so sánh v i các h i u hành có t trư c ó thì giao di n c a UNIX là m t ti n b vư t b c), Th a mãn nguyên t c xây d ng các chương trình ph c t p t nh ng chương trình ơn gi n hơn: trư c h t có các mô un cơ b n nh t c a nhân sau ó phát tri n có toàn b h i u hành, S d ng duy nh t m t h th ng File có c u trúc cho phép d dàng b o qu n và s d ng hi u qu ,
  • 10. 1 0 S d ng ph bi n m t d ng ơn gi n trình bày n i t i c a File như m t dòng các byte cho phép d dàng khi vi t các chương trình ng d ng truy nh p, thao tác v i các d li u trong File, Có k t n i ơn gi n v i thi t b ngo i vi: các file thi t b ã ư c t s n trong H th ng File t o ra m t k t n i ơn gi n gi a chương trình ngư i dùng v i các thi t b ngo i vi, Là h i u hành a ngư i dùng, a quá trình, trong ó m i ngư i dùng có th th c hi n các quá trình c a mình m t cách c l p. M i thao tác vào - ra c a h i u hành ư c th c hi n trên h th ng File: m i thi t b vào ra tương ng v i m t file. Chương trình ngư i dùng làm vi c v i file ó mà không c n quan tâm c th tên file ó ư c t cho thi t b nào trong h th ng. Che khu t c u trúc máy i v i ngư i dùng, m b o tính c l p tương i c a chương trình i v i d li u và ph n c ng, t o i u ki n thu n l i hơn cho ngư i l p trình khi vi t các chương trình ch y UNIX v i các i u ki n ph n c ng hoàn toàn khác bi t nhau. 1.1.2. Gi i thi u sơ b v Linux Linus Tovalds (m t sinh viên Ph n lan) ưa ra nhân (phiên b n u tiên) cho h i u hành Linux vào tháng 8 năm 1991 trên cơ s c i ti n m t phiên b n UNIX có tên Minix do Giáo sư Andrew S. Tanenbaum xây d ng và ph bi n. Nhân Linux tuy nh song là t óng gói. K t h p v i các thành ph n trong h th ng GNU, h i u hành Linux ã ư c hình thành. Và cũng t th i i m ó, theo tư tư ng GNU, hàng nghìn, hàng v n chuyên gia trên toàn th gi i (nh ng ngư i này hình thành nên c ng ng Linux) ã tham gia vào quá trình phát tri n Linux và vì v y Linux ngày càng áp ng nhu c u c a ngư i dùng. Dư i ây là m t s m c th i gian quan tr ng trong quá trình hình thành và phát tri n h i u hành Linux. Sau ba năm nhân Linux ra i, n ngày 14-3-1994, h i u hành Linux phiên b n 1.0 ư c ph bi n. Thành công l n nh t c a Linux 1.0 là nó ã h tr giao th c m ng TCP/IP chu n UNIX, sánh v i giao th c socket BSD- tương thích cho l p trình m ng. Trình i u khi n thi t b ã ư c b sung ch y IP trên m t m ng Ethernet ho c trên tuy n ơn ho c qua modem. H th ng file trong Linux 1.0 ã vư t xa h th ng file c a Minix thông thư ng, ngoài ra ã h tr i u khi n SCSI truy nh p ĩa t c cao. i u khi n b nh o ã ư c m r ng h tr i u khi n trang cho các file swap và ánh x b nh c a file c quy n (ch có m t ánh x b nh ch c ư c thi hành trong Linux 1.0). Vào tháng 3-1995, nhân 1.2 ư c ph bi n. i u áng k c a Linux 1.2 so v i Linux 1.0 ch nó h tr m t ph m vi r ng và phong phú ph n c ng, bao g m c ki n trúc tuy n ph n c ng PCI m i. Nhân Linux 1.2 là nhân k t thúc dòng nhân Linux ch h tr PC. M t i u c n lưu ý v các ánh ch s các dòng nhân (h i u hành) Linux. H th ng ch s ư c chia thành m t s m c, ch ng h n hai m c như 2.4 ho c ba m c như 2.2.5. Trong cách ánh ch s như v y, quy ư c r ng v i các ch s t m c th hai tr i, n u là s ch n thì dòng nhân ó ã khá n nh và tương i hoàn thi n, còn n u là s l thì dòng nhân ó v n ang ư c phát tri n ti p.
  • 11. 1 1 Tháng 6-1996, nhân Linux 2.0 ư c ph bi n. Có hai c trưng n i b t c a Linux 2.0 là h tr ki n trúc ph c h p, bao g m c c ng Alpha 64-bit y , và h tr ki n trúc a b x lý. Phân ph i nhân Linux 2.0 cũng thi hành ư c trên b x lý Motorola 68000 và ki n trúc SPARC c a SUN. Các thi hành c a Linux d a trên vi nhân GNU Mach cũng ch y trên PC và PowerMac. T i năm 2000, nhân Linux 2.4 ư c ph bi n. M t trong c i m ư c quan tâm c a nhân này là nó h tr mã ký t Unicode 32 bít, r t thu n l i cho vi c xây d ng các gi i pháp toàn di n và tri t i v i v n ngôn ng t nhiên trên ph m vi toàn th gi i. V n phân ph i và gi y phép Linux V lý thuy t, m i ngư i có th kh i t o m t h th ng Linux b ng cách ti p nh n b n m i nh t các thành ph n c n thi t t các site ftp và biên d ch chúng. Trong th i kỳ u tiên, ngư i dùng Linux ph i ti n hành toàn b các thao tác này và vì v y công vi c là khá v t v . Tuy nhiên, do có s tham gia ông o c a các cá nhân và nhóm phát tri n Linux, ã ti n hành th c hi n nhi u gi i pháp nh m làm cho công vi c kh i t o h th ng v t v . M t trong nh ng gi i pháp i n hình nh t là cung c p t p các gói chương trình ã ti n d ch, chu n hóa. Nh ng t p h p như v y hay nh ng b n phân ph i là l n hơn nhi u so v i h th ng Linux cơ s . Chúng thư ng bao g m các ti n ích b sung cho kh i t o h th ng, các thư vi n qu n lý, cũng như nhi u gói ã ư c ti n d ch, s n sàng kh i t o c a nhi u b công c UNIX dùng chung, ch ng h n như ph c v tin, trình duy t web, công c x lý, so n th o văn b n và th m chí các trò chơi. Cách th c phân ph i ban u r t ơn gi n song ngày càng ư c nâng c p và hoàn thi n b ng phương ti n qu n lý gói tiên ti n. Các b n phân ph i ngày nay bao g m các cơ s d li u ti n hóa gói, cho phép các gói d dàng ư c kh i t o, nâng c p và lo i b . Nhà phân ph i u tiên th c hi n theo phương châm này là Slakware, và chính h là nh ng chuy n bi n m nh m trong c ng ng Linux i v i công vi c qu n lý gói kh i t o Linux. Ti n ích qu n lý gói RPM (RedHat Package Manager) c a công ty RedHat là m t trong nh ng phương ti n i n hình. Nhân Linux là ph n m m t do ư c phân ph i theo Gi y phép s h u công c ng ph n m m GNU GPL. Các thành ph n tích h p H i u hành Linux Linux s d ng r t nhi u thành ph n t D án ph n m m t do GNU, t h i u hành BSD c a i h c Berkeley và t h th ng X-Window c a MIT. Thư vi n h th ng chính c a Linux ư c b t ngu n t D án GNU, sau ó ư c r t nhi u ngư i trong c ng ng Linux phát tri n ti p, nh ng phát tri n ti p theo như v y ch y u liên quan t i vi c gi i quy t các v n như thi u v ng a ch (l i trang), thi u hi u qu và g r i. M t s thành ph n khác c a D án GNU, ch ng h n như trình biên d ch GNU C (gcc), v n là ch t lư ng cao nên ư c s d ng nguyên xy trong Linux. Các tool qu n lý m ng ư c b t ngu n t mã 4.3BSD song sau ó ã ư c c ng ng Linux phát tri n, ch ng h n như thư vi n toán h c ng x lý d u ch m ng Intel và các trình i u khi n thi t b ph n c ng âm thanh PC. Các tool qu n lý m ng này sau ó l i ư c b sung vào h th ng BSD.
  • 12. 1 2 H th ng Linux ư c duy trì g n như b i m t m ng lư i không ch t ch các nhà phát tri n ph n m m c ng tác v i nhau qua Internet, m ng lư i này g m các nhóm nh và cá nhân ch u trách nhi m duy trì tính toàn v n c a t ng thành ph n. M t lư ng nh các site phân c p ftp Internat công c ng ã óng vai trò nhà kho theo chu n de facto ch a các thành ph n này. Tài li u Chu n phân c p h th ng file (File System Hierarchy Standard) ư c c ng ng Linux duy trì nh m gi tính tương thích xuyên qua s khác bi t r t l n gi a các thành ph n h th ng. M t s c i m chính c a Linux Dư i ây trình bày m t s c i m chính c a c a h i u hành Linux hi n t i: Linux tương thích v i nhi u h i u hành như DOS, MicroSoft Windows ...: Cho phép cài t Linux cùng v i các h i u hành khác trên cùng m t c ng. Linux có th truy nh p n các file c a các h i u hành cùng m t ĩa. Linux cho phép ch y mô ph ng các chương trình thu c các h i u hành khác. Do gi ư c chu n c a UNIX nên s chuy n i gi a Linux và các h UNIX khác là d dàng. Linux là m t h i u hành UNIX tiêu bi u v i các c trưng là a ngư i dùng, a chương trình và a x lý. Linux có giao di n ho (GUI) th a hư ng t h th ng X-Window. Linux h tr nhi u giao th c m ng, b t ngu n và phát tri n t dòng BSD. Thêm vào ó, Linux còn h tr tính toán th i gian th c. Linux khá m nh và ch y r t nhanh ngay c khi nhi u quá trình ho c nhi u c a s . Linux ư c cài t trên nhi u ch ng lo i máy tính khác nhau như PC, Mini và vi c cài t khá thu n l i. Tuy nhiên, hi n nay chưa xu t hi n Linux trên máy tính l n (mainframe). Linux ngày càng ư c h tr b i các ph n m m ng d ng b sung như so n th o, qu n lý m ng, qu n tr cơ s d li u, b ng tính ... Linux h tr t t cho tính toán song song và máy tính c m (PC-cluster) là m t hư ng nghiên c u tri n khai ng d ng nhi u tri n v ng hi n nay. Là m t h i u hành v i mã ngu n m , ư c phát tri n qua c ng ng ngu n m (bao g m c Free Software Foundation) nên Linux phát tri n nhanh. Linux là m t trong m t s ít các h i u hành ư c quan tâm nhi u nh t trên th gi i hi n nay. Linux là m t h i u hành h tr a ngôn ng m t cách toàn di n nh t. Do Linux cho phép h tr các b mã chu n t 16 bit tr lên (trong ó có các b mã ISO10646, Unicode) cho nên vi c b n a hóa trên Linux là tri t nh t trong các h i u hành. Tuy nhiên cũng t n t i m t s khó khăn làm cho Linux chưa th c s tr thành m t h i u hành ph d ng, dư i ây là m t s khó khăn i n hình: Tuy ã có công c h tr cài t, tuy nhiên, vi c cài t Linux còn tương i ph c t p và khó khăn. Kh năng tương thích c a Linux v i m t s lo i thi t b ph n c ng còn th p do chưa có các trình i u khi n cho nhi u thi t b ,
  • 13. 1 3 Ph n m m ng d ng ch y trên n n Linux tuy ã phong phú song so v i m t s h i u hành khác, c bi t là khi so sánh v i MS Windows, thì v n còn có kho ng cách. V i s h tr c a nhi u công ty tin h c hàng u th gi i (IBM, SUN, HP ...) và s tham gia phát tri n c a hàng v n chuyên gia trên toàn th gi i thu c c ng ng Linux, các khó khăn c a Linux ch c ch n s nhanh chóng ư c kh c ph c. Chính vì l ó ã hình thành m t s nhà cung c p Linux trên th gi i. B ng dư i ây là tên c a m t s nhà cung c p Linux có ti ng nh t và a ch website c a h . áng chú ý nh t là Red Hat Linux (t i M ) và Red Flag Linux (t i Trung Qu c). Red Hat ư c coi là lâu i và tin c y, còn Red Flag là m t công ty Linux c a Trung qu c, có quan h v i c ng ng Linux Vi t nam và chúng ta có th h c h i m t cách tr c ti p kinh nghi m cho quá trình ưa Linux vào Vi t nam. Tên công ty a ch website Caldera OpenLinux www.caldera.com Corel Linux www.corel.com Debian GNU/Linux www.debian.com Linux Mandrake www.mandrake.com Red Hat Linux www.redhat.com Red Flag Linux www.redflag-linux.com Slackware Linux www.slackware.com SuSE Linux www.suse.com TurboLinux www.turbolinux.com 1.2. Sơ b v các thành ph n c a Linux H th ng Linux, ư c thi hành như m t h i u hành UNIX truy n th ng, g m shell và ba thành ph n ( ã d ng mã chương trình) sau ây: - Nhân h i u hành ch u trách nhi m duy trì các i tư ng tr u tư ng quan tr ng c a h i u hành, bao g m b nh o và quá trình. Các mô un chương trình trong nhân ư c c quy n trong h th ng, bao g m c quy n thư ng tr c b nh trong. - Thư vi n h th ng xác nh m t t p chu n các hàm các ng d ng tương tác v i nhân, và thi hành nhi u ch c năng c a h th ng nhưng không c n có các c quy n c a mô un thu c nhân. M t h th ng con i n hình ư c thi hành d a trên thư viên h th ng là h th ng file Linux. - Ti n ích h th ng là các chương trình thi hành các nhi m v qu n lý riêng r , chuyên bi t. M t s ti n ích h th ng ư c g i ra ch m t l n kh i ng và c u hình phương ti n h th ng, m t s ti n ích khác, theo thu t ng UNIX ư c g i là trình ch y ng m (daemon), có th ch y m t cách thư ng xuyên (thư ng theo chu kỳ), i u khi n các bài toán như hư ng ng các k t n i m ng m i n, ti p nh n yêu c u logon, ho c c p nh t các file log. Ti n ích (hay l nh) có s n trong h i u hành (dư i ây ti n ích ư c coi là l nh thư ng tr c). N i dung chính y u c a tài li u này gi i thi u chi ti t v m t s l nh thông d ng nh t c a Linux. H th ng file s ư c gi i thi u trong chương 3. Trong các chương sau có c p t i nhi u n i dung liên quan n nhân và shell, song dư i ây là m t s nét sơ b v chúng.
  • 14. 1 4 1.2.1. Sơ b v nhân Nhân (còn ư c g i là h lõi) c a Linux, là m t b các môdun chương trình có vai trò i u khi n các thành ph n c a máy tính, phân ph i các tài nguyên cho ngư i dùng (các quá trình ngư i dùng). Nhân chính là c u n i gi a chương trình ng d ng v i ph n c ng. Ngư i dùng s d ng bàn phím gõ n i dung yêu c u c a mình và yêu c u ó ư c nhân g i t i shell: Shell phân tích l nh và g i các chương trình tương ng v i l nh th c hi n. M t trong nh ng ch c năng quan tr ng nh t c a nhân là gi i quy t bài toán l p l ch, t c là h th ng c n phân chia CPU cho nhi u quá trình hi n th i cùng t n t i. i v i Linux, s lư ng quá trình có th lên t i con s hàng nghìn. V i s lư ng quá trình ng th i nhi u như v y, các thu t toán l p l ch c n ph i hi u qu : Linux thư ng l p l ch theo ch Round Robin (RR) th c hi n vi c luân chuy n CPU theo lư ng t th i gian. Thành ph n quan tr ng th hai trong nhân là h th ng các mô un chương trình ( ư c g i là l i g i h th ng) làm vi c v i h th ng file. Linux có hai cách th c làm vi c v i các file: làm vi c theo byte (kí t ) và làm vi c theo kh i. M t c i m áng chú ý là file trong Linux có th ư c nhi u ngư i cùng truy nh p t i nên các l i g i h th ng làm vi c v i file c n m b o vi c file ư c truy nh p theo quy n và ư c chia x cho ngư i dùng. 1.2.2. Sơ b v shell M t s n i dung chi ti t v shell (còn ư c g i là h v ) trong Linux ư c trình bày trong chương "L p trình trên shell". Nh ng n i dung trình bày dư i ây cung c p m t cách nhìn sơ b v shell và vai trò c a nó trong ho t ng chung c a h i u hành. Ngư i dùng mong mu n máy tính th c hi n m t công vi c nào ó thì c n gõ l nh th hi n yêu c u c a mình h th ng áp ng yêu c u ó. Shell là b d ch l nh và ho t ng như m t k t n i trung gian gi a nhân v i ngư i dùng: Shell nh n dòng l nh do ngư i dùng ưa vào; và t dòng l nh nói trên, nhân tách ra các b ph n nh n ư c m t hay m t s l nh tương ng v i các o n văn b n có trong dòng l nh. M t l nh bao g m tên l nh và tham s : t u tiên là tên l nh, các t ti p theo (n u có) là các tham s . Ti p theo, shell s d ng nhân kh i sinh m t quá trình m i (kh i t o quá trình) và sau ó, shell ch i quá trình con này ti n hành, hoàn thi n và k t thúc. Khi shell s n sàng ti p nh n dòng l nh c a ngư i dùng, m t d u nh c shell (còn g i là d u nh c nh p l nh) xu t hi n trên màn hình. Linux có hai lo i shell ph bi n là: C-shell (d u nh c %), Bourne-shell (d u nh c $) và m t s shell phát tri n t các shell nói trên (ch ng h n, TCshell - tcsh v i d u nh c ng m nh > phát tri n t C-shell và GNU Bourne - bash v i d u nh c bash # phát tri n t Bourne-shell). D u m i phân bi t shell nói trên không ph i hoàn toàn rõ ràng do Linux cho phép ngư i dùng thay i l i d u nh c shell nh vi c thay giá tr các bi n môi trư ng PS1 và PS2. Trong tài li u này, chúng ta s d ng kí hi u "hàng rào #" bi u th d u nh c shell. C-shell có tên g i như v y là do cách vi t l nh và chương trình l nh Linux t a như ngôn ng C. Bourne-shell mang tên tác gi c a nó là Steven Bourne. M t s l nh trong C- shell (ch ng h n l nh alias) không còn có trong Bourne-shell và vì v y nh n bi t h th ng ang làm vi c v i shell nào, chúng ta gõ l nh: # alias N u m t danh sách xu t hi n thì shell ang s d ng là C-shell; ngư c l i, n u xu t hi n thông báo "Command not found" thì shell ó là Bourne-shell. L nh ư c chia thành 3 lo i l nh:
  • 15. 1 5 L nh thư ng tr c (có s n c a Linux). Tuy t i a s l nh ư c gi i thi u trong tài li u này là l nh thư ng tr c. Chúng bao g m các l nh ư c ch a s n trong shell và các l nh thư ng tr c khác. File chương trình ngôn ng máy: ch ng h n, ngư i dùng vi t trình trên ngôn ng C qua b d ch gcc (bao g m c trình k t n i link) t o ra m t chương trình trên ngôn ng máy. File chương trình shell (Shell Scrip). Khi k t thúc m t dòng l nh c n gõ phím ENTER shell phân tích và th c hi n l nh. 1.3. Gi i thi u v s d ng l nh trong Linux Như ã gi i thi u ph n trên, Linux là m t h i u hành a ngư i dùng, a nhi m, ư c phát tri n b i hàng nghìn chuyên gia Tin h c trên toàn th gi i nên h th ng l nh cũng ngày càng phong phú; n th i i m hi n nay Linux có kho ng hơn m t nghìn l nh. Tuy nhiên ch có kho ng vài ch c l nh là thông d ng nh t i v i ngư i dùng. Tài li u này cũng h n ch gi i thi u kho ng vài ch c l nh ó. Chúng ta ng e ng i v s lư ng l nh ư c gi i thi u ch chi m m t ph n nh trong t p h p l nh b i vì ây là nh ng l nh thông d ng nh t và chúng cung c p m t ph m vi ng d ng r ng l n, th a mãn yêu c u c a chúng ta. Cũng như ã nói trên, ngư i dùng làm vi c v i máy tính thông qua vi c s d ng tr m cu i: ngư i dùng ưa yêu c u c a mình b ng cách gõ "l nh" t bàn phím và giao cho h i u hành x lý. Khi cài t Linux lên máy tính cá nhân thì máy tính cá nhân v a óng vai trò tr m cu i, v a óng vai trò máy tính x lý. D ng t ng quát c a l nh Linux có th ư c vi t như sau: # <Tên l nh> [<các tham s >] ¿ trong ó: Tên l nh là m t dãy ký t , không có d u cách, bi u th cho m t l nh c a Linux hay m t chương trình. Ngư i dùng c n h i u hành áp ng yêu c u gì c a mình thì ph i ch n úng tên l nh. Tên l nh là b t bu c ph i có khi gõ l nh. Các tham s có th có ho c không có, ư c vi t theo quy nh c a l nh mà chúng ta s d ng, nh m cung c p thông tin v các i tư ng mà l nh tác ng t i. Ý nghĩa c a các d u [, <, >, ] ư c gi i thích ph n quy t c vi t l nh. Các tham s ư c phân ra thành hai lo i: tham s khóa (sau ây thư ng dùng là "tùy ch n") và tham s v trí. Tham s v trí thư ng là tên file, thư m c và thư ng là các i tư ng ch u s tác ng c a l nh. Khi gõ l nh, tham s v trí ư c thay b ng nh ng i tư ng mà ngư i dùng c n hư ng tác ng t i. Tham s khóa chính là nh ng tham s i u khi n ho t ng c a l nh theo các trư ng h p riêng. Trong Linux, tham s khóa thư ng b t u b i d u tr "-" ho c hai d u tr liên ti p "--". Khi gõ l nh, cũng gi ng như tên l nh, tham s khóa ph i ư c vi t chính xác như trình bày trong mô t l nh. M t l nh có th có m t s ho c r t nhi u tham s khóa. Ph thu c vào yêu c u c th c a mình, ngư i dùng có th ch n m t ho c m t s các tham s khóa khi gõ l nh. Trong mô t l nh, thư ng xu t hi n thu t ng tùy-ch n. Tùy ch n l nh (th c ch t là tham s khóa) cho phép i u ch nh ho t ng c a l nh trong Linux, làm cho l nh có tính ph d ng cao. Tuỳ ch n l nh cho phép l nh có th áp ng ý mu n c a ngư i dùng i v i h u h t (tuy không ph i lúc nào cũng v y) các tình hu ng t ra cho thao tác ng v i l nh.
  • 16. 1 6 Ký hi u "↵" bi u th vi c gõ phím h t dòng <Enter>. k t thúc m t yêu c u, ngư i dùng nh t thi t ph i gõ phím "↵". Ví d , khi ngư i dùng gõ l nh xem thông tin v các file: # ls -l g↵↵↵↵¿ trong l nh này: ls là tên l nh th c hi n vi c ưa danh sách các tên file/ thư m c con trong m t thư m c, -l là tham s khóa, cho bi t yêu c u xem y thông tin v các i tư ng hi n ra. Chú ý, trong tham s khóa ch cái (ch "l") ph i i ngay sau d u tr "-". Tương ng v i l nh ls còn có các tham s khóa -a, -L, ... và chúng cũng là các tùy ch n l nh. Trong m t s tham s khóa có nhi u ch cái thay cho m t d u "-" là hai d u "--" u tham s . Ví d , như trư ng h p tham s --file c a l nh date. g* là tham s v trí ch rõ ngư i dùng c n xem thông tin v các file có tên g i b t u là ch cái "g". Trong tài li u này, quy ư c r ng khi vi t m t l nh (trong mô t l nh và gõ l nh) thì không c n ph i vi t d u "↵" cu i dòng l nh ó, song luôn ghi nh r ng phím ENTER ("↵") là b t bu c khi gõ l nh. Lưu ý: Linux (và UNIX nói chung) ư c xây d ng trên ngôn ng l p trình C, vì v y khi gõ l nh ph i phân bi t ch thư ng v i ch hoa. Ngo i tr m t s ngo i l , trong Linux chúng ta th y ph bi n là: Các tên l nh là ch thư ng, M t s tham s có th là ch thư ng ho c ch hoa (ví d , trong l nh date v th i gian h th ng thì hai tham s -r và -R có ý nghĩa hoàn toàn khác nhau). Tên các bi n môi trư ng cũng thư ng dùng ch hoa. Trong tài li u này, t i nh ng dòng văn b n di n gi i, s d ng cách vi t tên l nh, các tham s khóa b ng ki u ch không chân, m như date, -R, -r ... Linux phân bi t siêu ngư i dùng (ti ng Anh là superuser ho c root, còn ư c g i là ngư i qu n tr hay ngư i dùng t i cao ho c siêu ngư i dùng) v i ngư i dùng thông thư ng. Trong t p h p l nh c a Linux, có m t s l nh mà ch siêu ngư i dùng m i ư c phép s d ng còn ngư i dùng thông thư ng thì không ư c phép (ví d như l nh adduser th c hi n vi c b sung thêm ngư i dùng). M t khác trong m t s l nh, v i m t s tham s khóa thì ch siêu ngư i dùng ư c phép dùng, còn v i m t s tham s khác thì m i ngư i dùng u ư c phép (ví d như l nh passwd thay i m t kh u ngư i dùng). M t dòng l nh có th có nhi u hơn m t l nh, trong ó l nh sau ư c ngăn cách b i v i l nh i ngay trư c b ng d u ";" ho c d u "|". Ví d v m t s dòng l nh d ng này: # ls -l; date # head Filetext | sort >temp Sau khi ngư i dùng gõ xong dòng l nh, shell ti p nh n dòng l nh này và phân tích n i dung văn b n c a l nh. N u l nh ư c gõ úng thì nó ư c th c hi n; ngư c l i, trong trư ng h p có sai sót khi gõ l nh thì shell thông báo v sai sót và
  • 17. 1 7 d u nh c shell l i hi n ra ch l nh ti p theo c a ngư i dùng. V ph bi n, n u như sau khi ngư i dùng gõ l nh, không th y thông báo sai sót hi n ra thì có nghĩa l nh ã ư c th c hi n m t cách bình thư ng. Trư c khi i vào n i dung chi ti t các l nh thông d ng, chúng ta xem xét v m t s quy nh dùng trong mô t l nh ư c trình bày trong tài li u này. 1.3.1. Các quy ư c khi vi t l nh Trong tài li u này, các l nh ư c trình bày theo m t b quy t c cú pháp nh t quán. B quy t c này cho phép phân bi t trong m i l nh các thành ph n nào là b t bu c ph i có, các thành ph n nào có th có ho c không ... Dư i ây là n i dung c a các quy t c trong b quy t c ó. Tên l nh là b t bu c, ph i là t u tiên trong b t kỳ l nh nào, ph i ư c gõ úng như khi mô t l nh. Tên khái ni m ư c n m trong c p d u ngo c quan h (< và >) bi u th cho m t l p i tư ng và là tham s b t bu c ph i có. Khi gõ l nh thì tên khái ni m (có th ư c coi là "tham s hình th c") ph i ư c thay th b ng m t t (thư ng là tên file, tên thư m c ... và có th ư c coi là "tham s th c s ") ch i tư ng liên quan n thao tác c a l nh. Ví d , mô t cú pháp c a l nh more xem n i dung file là # more <file> thì t more là tên l nh, còn <file> là tham s trong ó file là tên khái ni m và là tham s b t bu c ph i có. L nh này có tác ng là hi n lên màn hình theo cách th c cu n n i dung c a file v i tên ã ch trong l nh. xem n i dung file có tên là temp, ngư i dùng gõ l nh: # more temp Như v y, tên l nh more ư c gõ úng như mô t cú pháp (c n i dung và v trí) còn "file" ã ư c thay th b ng t "temp" là tên file mà ngư i dùng mu n xem n i dung. Các b ph n n m gi a c p d u ngo c vuông [ và ] là có th gõ ho c không gõ cũng ư c. Ví d , cú pháp c a l nh halt là # halt [tùy-ch n] V i các tùy ch n là -w, -n, -d, -f, -i mã m i tùy ch n cho m t cách th c ho t ng khác nhau c a l nh halt. L nh halt có tác ng chính là làm ng ng ho t ng c a h i u hành, tuy nhiên khi ngư i dùng mu n có m t cách ho t ng nào ó c a l nh này thì s ch n m t (ho c m t s ) tuỳ ch n l nh tương ng. M t s cách gõ l nh halt c a ngư i dùng như sau ây là úng cú pháp: # halt # halt -w # halt -n # halt -f Các giá tr có trong c p | và | trong ó các b ph n cách nhau b ng d u s ng "|" cho bi t c n ch n m t và ch m t trong các giá tr n m gi a hai d u ngo c ó.
  • 18. 1 8 Ví d , khi gi i thi u v tùy ch n l nh c a l nh tail xem ph n cu i n i dung c a file, chúng ta th y: -f, --follow[={tên | c t }] Như v y, sau tham s khóa --follow, n u xu t hi n thêm d u b ng "=" thì ph i có ho c tên ho c c t . ây là trư ng h p các ch n l a "lo i tr nhau". D u ba ch m ... th hi n vi c l p l i thành ph n cú pháp i ngay trư c d u này, vi c l p l i ó có th t không n nhi u l n (không k chính thành ph n cú pháp ó). Cách th c này thư ng ư c dùng v i các tham s như tên file. Ví d , mô t l nh chown như sau: chown [tùy-ch n] <ch >[,[nhóm]]<file>... Như v y trong l nh chown có th không có ho c có m t s tùy ch n l nh và có t m t n nhi u tên file. Các b ph n trong mô t l nh, n u không n m trong các c p d u [ ], <>, { } thì khi gõ l nh th c s ph i gõ y úng như khi mô t (chú ý, quy t c vi t tên l nh là m t trư ng h p riêng c a quy t c này). Vi c k t h p các d u ngo c v i nhau cho phép t o ra cách th c s d ng quy t c t h p các tham s trong l nh. Ví d , l nh more bình thư ng có cú pháp là: # more <file> có nghĩa là thay <file> b ng tên file c n xem n i dung, n u k t h p thêm d u ngo c vuông [ và ], t c là có d ng sau (chính là d ng t ng quát c a l nh more): # more [<file>] thì <file> nói chung ph i có trong l nh more, tuy nhiên trong m t s trư ng h p có th b qua tham s file. Lưu ý: i v i nhi u l nh, cho phép ngư i dùng gõ tham s khóa k t h p tương ng v i tùy_ch n trong mô t l nh. Tham s khóa k t h p ư c vi t theo cách - <xâu-kí-t >, trong ó xâu-kí-t g m các ch cái trong tham s khóa. Ví d , trong mô t l nh in l ch cal: cal [tùy-ch n] [tháng [năm] ] có ba tham s khóa là -m, -j, -y. Khi gõ l nh có th gõ m t t h p nào ó t ba tham s khóa này ư c tình hu ng s d ng l nh theo ý mu n. Ch ng h n, n u gõ l nh cal -mj 3 thì l nh cal th c hi n theo i u khi n c a hai tham s khóa -m (ch n Th Hai là ngày u tu n, thay vì cho ng m nh là Ch Nh t) và -j (hi n th ngày trong tháng dư i d ng s ngày trong năm k t u năm). Vì v y, khi vi t [tùy-ch n] trong mô t l nh bi u th c vi c s d ng t ng tùy ch n, nhi u tùy ch n ho c k t h p các tuỳ ch n. Trong m t s l nh, có hai tham s khóa cùng tương ng v i m t tình hu ng th c hi n l nh, trong ó m t tham s g m m t kí t còn tham s kia l i là m t t . Tham s dài m t t là tham s chu n c a l nh, còn tham s m t kí t là cách vi t ng n g n. Tham s chu n dùng ư c trong m i Linux và khi gõ ph i có kí t trong t .
  • 19. 1 9 Ví d , khi mô t l nh date có tùy ch n: -d, --date=STRING như v y hai tham s -d và --date=STRING có cùng ý nghĩa. Ngoài nh ng quy ư c trên ây, ngư i dùng ng quên m t quy nh cơ b n là c n phân bi t ch hoa v i ch thư ng khi gõ l nh. 1.3.3. Làm ơn gi n thao tác gõ l nh Vi c s d ng bàn phím nh p l nh tuy không ph i là m t công vi c n ng n , song Linux còn cho phép ngư i dùng s d ng m t s cách th c thu n ti n hơn khi gõ l nh. M t s trong nh ng cách th c ó là: S d ng vi c khôi ph c dòng l nh, S d ng các phím c bi t, S d ng các kí hi u thay th và phím <Tab>, S d ng thay th alias, S d ng chương trình l nh. Cách th c s d ng chương trình l nh (shell script) s ư c gi i thi u chi ti t trong các chương sau. Dư i ây, chúng ta xem xét cách th c s d ng vi c khôi ph c dòng l nh, phím c bi t và kí hi u thay th . Cơ ch khôi ph c dòng l nh Linux cung c p m t cách th c c bi t là kh năng khôi ph c l nh. T i d u nh c shell: Ngư i dùng s d ng các phím mũi tên lên/xu ng (↑/↓) trên bàn phím nh n l i các dòng l nh ã ư c ưa vào trư c ây t i d u nh c shell, ch n m t trong các dòng l nh ó và biên t p l i n i dung dòng l nh theo úng yêu c u m i c a mình. Ví d , ngư i dùng v a gõ xong dòng l nh: # ls -l tenfile* sau ó mu n gõ l nh ls -l tentaptin thì t i d u nh c c a shell, ngư i dùng s d ng các phím di chuy n lên (↑) ho c xu ng (↓) nh n ư c: # ls -l tenfile* dùng các phím t t di chuy n, xoá kí t (xem ph n sau) có ư c: # ls -l ten và gõ ti p các kí t "taptin" nh n ư c: # ls -l tentaptin chính là k t qu mong mu n. Trong trư ng h p s lư ng kí t thay th là r t ít so v i s lư ng kí t c a toàn dòng l nh thì hi u qu c a cách th c này r t cao. Lưu ý: Vi c nh n liên ti p các phím di chuy n lên (↑) ho c xu ng (↓) cho phép ngư i dùng nh n ư c các dòng l nh ã gõ t trư c mà không ch dòng l nh m i ư c gõ. Cách th c này tương t v i cách th c s d ng ti n ích DOSKEY trong h i u hành MS-DOS.
  • 20. 2 0 M t s phím c bi t khi gõ l nh Khi ngư i dùng gõ l nh có th x y ra m t s tình hu ng như sau: Dòng l nh ang gõ có ch sai sót, không úng theo yêu c u c a ngư i dùng vì v y c n ph i s a l i ôi chút n i dung trên dòng l nh ó. Trong trư ng h p ó c n s d ng các phím c bi t (còn g i là phím vi t t t hay phím t t) di chuy n, xoá b , b sung vào n i dung dòng l nh. Sau khi s d ng cách th c khôi ph c dòng l nh, chúng ta nh n ư c dòng l nh tương t v i l nh c n gõ và sau ó s d ng các phím t t hoàn thi n l nh. Dư i ây gi i thi u các phím t t và ý nghĩa c a vi c s d ng chúng: • Nh n phím → di chuy n con tr sang bên ph i m t v trí • Nh n phím ← di chuy n con tr sang bên trái m t v trí • Nh n phím <ESC-BACKSPACE> xoá m t t bên trái con tr • Nh n phím <ESC-D> xoá m t t bên ph i con tr • Nh n phím <ESC-F> di chuy n con tr sang bên ph i m t t • Nh n phím <ESC-B> di chuy n con tr sang bên trái m t t • Nh n phím <CTRL-A> di chuy n con tr v u dòng l nh • Nh n phím <CTRL-E> di chuy n con tr v cu i dòng • Nh n phím <CTRL-U> xóa dòng l nh Có th dùng phím <ALT> thay cho phím <ESC>. Các kí hi u mô t nhóm file và phím <Tab> Khi gõ l nh th c s nhi u trư ng h p ngư i dùng mong mu n m t tham s trong l nh không ch xác nh m t file mà l i liên quan n m t nhóm các file mà tên g i c a các file trong nhóm có chung m t tính ch t nào ó. Trong nh ng trư ng h p như v y, ngư i dùng c n s d ng các kí hi u mô t nhóm file (wildcards), chúng ta g i là kí hi u mô t nhóm (còn ư c g i là kí hi u thay th ). Ngư i ta s d ng các kí t *, ? và c p hai d u [ và ] mô t nhóm file. Các kí t này mang ý nghĩa như sau khi vi t vào tham s tên file th c s : • "*" : là ký t mô t nhóm g m m i xâu kí t (thay th m i xâu). Mô t này cho m t nhóm l n nh t trong ba mô t . • "?" : mô t nhóm g m m i xâu v i dài không quá 1 (thay th m t kí t ). Nhóm này là t p con c a nhóm u tiên (theo kí t "*"). • [xâu-kí-t ] : mô t nhóm g m m i xâu có dài 1 là m i kí t thu c xâu nói trên. Mô t này cho m t nhóm có l c lư ng bé nh t trong ba mô t . Nhóm này là t p con c a nhóm th hai (theo kí t "?"). Khi gõ l nh ph i gõ c hai d u [ và ]. M t d ng khác c a mô t nhóm này là [<kí_t _1>-<kí_t _2>] nghĩa là gi a c p d u ngo c có ba kí t trong ó kí t gi a là d u n i (d u -) thì cách vi t này tương ương v i vi c li t kê m i kí t t <kí_t _1> n <kí_t _2>. Ch ng h n, cách vi t [a-d] tương ương v i cách vi t [abcd]. Ví d , gi s khi mu n làm vi c v i t t c các file trong m t thư m c nào ó, ngư i dùng gõ * thay th tham s file thì xác nh ư c các tên file sau (chúng ta vi t b n tên file trên m t dòng):
  • 21. 2 1 info-dir initlog.conf inittab lynx.cfg mail.rc mailcap minicom.users motd mtab mtools.conf services shadow shadow- shells smb.conf sysctl.conf syslog.conf temp termcap up2date.conf temp termcap N u ngư i dùng gõ s* ( ch các tên có ch cái u là s) thay th tham s file thì xác nh ư c các tên file sau: shadow shadow- shells sysctl.conf syslog.conf N u ngư i dùng gõ [si]* ( ch các tên có ch cái u là s ho c i, chú ý dùng c hai kí t [ và ]) thay th tham s file thì xác nh các tên file sau: info-dir initlog.conf inittab services shadow shadow- shells smb.conf sysctl.conf syslog.conf Lưu ý: Như v y, Linux (và UNIX nói chung) không ch s d ng hai kí t mô t nhóm * và ? mà còn có cách th c s d ng c p kí t [ và ]. C n phân bi t c p d u [ và ] ư c s d ng khi ngư i dùng gõ l nh có ý nghĩa hoàn toàn khác v i ý nghĩa c a chúng khi ư c s d ng trong mô t l nh. Hơn th n a, Linux còn cung c p cho ngư i dùng cách th c s d ng phím <TAB> hoàn thành n t tên file (tên thư m c) trong l nh. Ví d , khi chúng ta gõ dòng l nh # ls /u<TAB>local<TAB>b<TAB> thì nó cũng tương ương như gõ dòng l nh (và ây chính là n i dung xu t hi n t i d u nh c shell): # ls /usr/local/bin v i i u ki n trong thư m c /usr ch có thư m c local ư c b t u b i ch "l" và trong thư m c local cũng ch có thư m c bin ư c b t u b i ch "b". Trong trư ng h p n u như m t kí t chưa xác nh, ngư i dùng c n gõ thêm kí t ti p theo trong tên file (tên thư m c) và nh n phím <TAB> hoàn thành dòng l nh. 1.3.4. Ti p n i dòng l nh Như ã lưu ý trên ây, m t dòng l nh có th g m m t ho c m t s l nh, m t khác tham s c a l nh có th là r t dài không th trong khuôn kh c a m t dòng văn b n ư c. Khi gõ l nh, n u dòng l nh quá dài, Linux cho phép ng t dòng l nh xu ng dòng dư i b ng cách thêm kí t báo hi u chuy n dòng "" t i cu i dòng; trong trư ng h p ó, kí t "" ph i là ký t cu i cùng thu c dòng l nh trư c. Ví d , # cd vsd thumuc thì dòng th hai là ph n ti p theo c a dòng th nh t và k t h p c hai dòng này th c ch t là m t dòng l nh Linux.
  • 22. 2 2 1.4. Trang Man Chúng ta có th nói r ng Linux là m t h i u hành r t ph c t p v i hàng nghìn l nh và m i l nh l i có th có t i vài ho c vài ch c tình hu ng s d ng do chúng cho phép có nhi u tùy ch n l nh. thu c h t ư c n i dung t t c các l nh c a Linux là m t i u h t s c khó khăn, có th nói là không th . Linux cho phép ngư i dùng s d ng cách th c g i trang Man có ư c các thông tin y gi i thi u n i dung các l nh. Dư i ây là m t s n i dung v cách th c s d ng trang Man. "Man" là t vi t t t c a "manual", ư c coi là tài li u tr c tuy n trong Linux ã lưu tr toàn b các l nh có s n v i các thông tin tham kh o khá y cho phép ngư i dùng có th m ra nh n ư c tr giúp. m trang Man c a m t l nh, chúng ta s d ng l nh man c a Linux và gõ: # man <tên-l nh> N i dung c a trang Man tuy không ph i là quá khó hi u, song hi u h t ư c nó cũng òi h i không ít th i gian. Tuy v y, n u quên n i dung m t l nh nào ó thì cách t t nh t là hãy s d ng trang Man. C u trúc chung c a m t trang Man như sau: COMMAND(1) Linux Programmer's Manual COMMAND(1) NAME tên l nh - khái quát tác d ng c a l nh SYNOPSIS cú pháp c a l nh DESCRIPTION mô t c th hơn v tác d ng c a l nh OPTIONS li t kê các tùy ch n l nh và tác d ng c a chúng FILES li t kê các file mà l nh s d ng ho c tham chi u n SEE ALSO li t kê các l nh, các tài li u, ..., có liên quan n l nh REPORTING BUGS a ch liên h n u g p l i khi s d ng l nh AUTHOR tên tác gi c a l nh Ngư i dùng th m chí không nh chính xác tên l nh. Linux còn có m t cách th c h tr ngư i dùng có th nhanh chóng tìm ư c l nh c n s d ng trong trư ng h p ch nh nh ng ch cái u c a tên l nh, ó là cách th c s d ng phím TAB. Trong cách th c này, ngư i dùng ch c n nh m t s ch cái u tiên c a tên l nh. Có th trình bày cách th c ó theo cú pháp sau ây: # <dãy-ch -cái><TAB><TAB> Trong ó dãy-ch -cái có t m t n m t vài ch cái thu c ph n u c a tên l nh. Chú ý r ng, các ch cái và hai phím <TAB> ph i ư c gõ liên ti p nhau. K t h p cách th c này v i cách th c s d ng l nh man (v i s phong phú v tùy ch n c a l nh man) nh n ư c m t cách th c khá tuy t v i tr giúp ngư i dùng.
  • 23. 2 3 Ví d , mu n s d ng l nh history nhưng l i không nh chính xác tên l nh ư c vi t ra như th nào mà ch nh nó ư c b t u b i ch h, hãy gõ ch h ó t i d u nh c shell và nh n phím TAB hai l n, s th y m t danh sách các l nh có ch cái u tiên là h ư c hi n ra trên màn hình: # h<TAB><TAB> h2ph hboot help hexdump history hostname htdigest h2xs hcc helpme hf77 hltest hoststat htpasswd halt hcp helptool hinotes host hpcdtoppm hash head hexbin hipstopgm hostid hpftodit Như v y, t t c các l nh có tên b t u v i ch h ư c hi n th trên màn hình và cho phép ngư i dùng có th xác nh ư c l nh c n quan tâm. Trư ng h p t n t i m t s lư ng l n các l nh có cùng ch cái u tiên mà ngư i dùng ã gõ, thay vì hi n h t m i tên l nh, h i u hành cho ra m t thông báo h i ngư i dùng có mu n xem toàn b các l nh ó hay không. Ngư i dùng áp ng thông báo ó tuỳ theo ý mu n c a mình. Ví d , khi ngư i dùng gõ n i dung như sau: # p<TAB><TAB> thì h th ng áp l i là: There are 289 possibilities. Do you really wish to see them all? (y or n) Ngư i dùng gõ phím "y" n u mu n xem, ho c gõ "n" n u b qua. Ngư i dùng có th gõ nhi u hơn m t ch cái u tên l nh và i u ó cho phép gi m b t s tên l nh mà h th ng tìm ư c và hi n th . Ch ng h n, khi bi t hai ch cái u là "pw" và ngư i dùng gõ: # pw<TAB><TAB> thì h th ng s hi n ra danh sách các tên l nh b t u b i "pw": pwck pwconv pwd pwdb_chkpwd pwunconv Trong trư ng h p này, ngư i dùng s nh n bi t ư c tên l nh ang c n tìm thu n ti n hơn.
  • 24. 2 4 CHƯƠNG 2. THAO TÁC V I H TH NG 2.1. Quá trình kh i ng Linux Trong ph n này, chúng ta xem xét sơ b quá trình kh i ng h i u hành Linux. M t trong nh ng cách th c kh i ng Linux ph bi n nh t là cách th c do chương trình LILO (LInux LOader) th c hi n. Chương trình LILO ư c n p lên ĩa c a máy tính khi cài t h i u hành Linux. LILO ư c n p vào Master Boot Record c a ĩa c ng ho c vào Boot Sector t i phân vùng kh i ng (trên ĩa c ng ho c ĩa m m). Gi s máy tính c a chúng ta ã cài t Linux và s d ng LILO kh i ng h i u hành. LILO thích h p v i vi c trên máy tính ư c cài t m t s h i u hành khác nhau và theo ó, LILO còn cho phép ngư i dùng ch n l a h i u hành kh i ng. Giai o n kh i ng Linux tùy thu c vào c u hình LILO ã ư c l a ch n trong quá trình cài t Linux. Trong tình hu ng ơn gi n nh t, Linux ư c kh i ng t ĩa c ng hay ĩa m m kh i ng. Quá trình kh i ng Linux có th ư c mô t theo sơ sau: T heo sơ này, LILO ư c t i vào máy th c hi n mà vi c u tiên là ưa nhân vào b nh trong và sau ó t i chương trình init th c hi n vi c kh i ng Linux. N u cài t nhi u phiên b n Linux hay cài Linux cùng các h i u hành khác (trong các trư ng h p như th , m i phiên b n Linux ho c h i u hành khác ư c gán nhãn - label phân bi t), thì thông báo sau ây ư c LILO ưa ra: LILO boot: cho phép nh p xâu là nhãn c a m t trong nh ng h i u hành hi n có trên máy kh i ng nó. T i th i i m ó, ngư i dùng c n gõ nhãn c a h i u hành c n kh i ng vào, ví d , gõ LILO boot: linux n u ch n kh i ng làm vi c trong Linux, ho c gõ LILO boot: dos n u ch n kh i ng làm vi c trong MS-DOS, Windows. Lưu ý: N u chúng ta không nh ư c nhãn c a h i u hành có trong máy ch n, hãy gõ phím <TAB> ư c LILO cho bi t nhãn c a các h i u hành. LILO boot: <TAB> s hi n ra danh sách các nhãn (ví d như): linux dos ... và hi n l i thông báo nói trên ta gõ nhãn c a h i u hành. LILO cũng cho phép t ch ch n ng m nh h i u hành kh i ng mà theo ó n u chúng ta không có tác ng gì sau thông báo ch n h i u hành thì LILO s t ng ch n h i u hành ng m nh ra kh i ng. N u chúng ta không can thi p vào các file tương ng c a trình LILO thì h i u hành Linux là h i u hành ng m nh. Gi s Linux ã ư c ch n kh i ng. Khi init th c hi n, chúng ta s th y m t chu i (kho ng vài ch c) dòng thông báo cho bi t h th ng ph n c ng ư c Linux nh n di n và LILO Nhân init
  • 25. 2 5 thi t l p c u hình cùng v i t t c trình i u khi n ph n m m ư c n p khi kh i ng. Quá trình init là quá trình kh i th y, là cha c a m i quá trình. T i th i i m kh i ng h th ng init th c hi n vai trò u tiên c a mình là ch y chương trình shell trong file /etc/inittab và các dòng thông báo trên ây chính là k t qu c a vi c ch y chương trình shell ó. Sau khi chương trình shell trên ư c th c hi n xong, b t u quá trình ngư i dùng ăng nh p (login) vào h th ng. 2.2. Th t c ăng nh p và các l nh thoát kh i h th ng 2.2.1. ăng nh p Sau khi h th ng Linux (l y Red Hat 6.2 làm ví d ) kh i ng xong, trên màn hình xu t hi n nh ng dòng sau: Ret Hat Linux release 6.2 (Zoot) Kernel 2.2.14-5.0 on an i686 May1 login: Dòng th nh t và dòng th hai cho bi t lo i phiên b n Linux, phiên b n c a nhân và ki n trúc ph n c ng có trên máy, dòng th ba là d u nh c ăng nh p ngư i dùng th c hi n vi c ăng nh p. Chú ý là các dòng trên ây có th thay i chút ít tùy thu c vào phiên b n Linux. T i d u nh c ăng nh p, hãy nh p tên ngư i dùng (còn g i là tên ăng nh p): ây là tên kí hi u ã cung c p cho Linux nh m nh n di n m t ngư i dùng c th . Tên ăng nh p ng v i m i ngư i dùng trên h th ng là duy nh t, kèm theo m t m t kh u ăng nh p. May1 login: root Password: Chúng ta có th thay i các dòng hi n th như trình bày trên ây b ng cách s a i file /etc/rc.d/rc.local như sau: Thay o n chương trình echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue thành echo "" > /etc/issue echo "Thông báo mu n hi n th " >> /etc/issue ví d s a thành: echo "" > /etc/issue echo "This is my computer" >> /etc/issue thì trên màn hình ăng nh p s có d ng sau: This is my computer hostname login:
  • 26. 2 6 Khi nh p xong tên ăng nh p, h th ng s hi n ra thông báo h i m t kh u và di chuy n con tr xu ng dòng ti p theo ngư i dùng nh p m t kh u. M t kh u khi ư c nh p s không hi n th trên màn hình và chính i u ó giúp tránh kh i s "nhòm ngó" c a ngư i khác. N u nh p sai tên ăng nh p ho c m t kh u, h th ng s ưa ra m t thông báo l i: May1 login: root Password: Login incorrect Máy1 login: N u ăng nh p thành công, ngư i dùng s nhìn th y m t s thông tin v h th ng, m t vài tin t c cho ngư i dùng... Lúc ó, d u nh c shell xu t hi n ngư i dùng b t u phiên làm vi c c a mình. May1 login: root Password: Last login: Fri Oct 27 14:16:09 on tty2 Root[may1 /root]# Dãy kí t trong dòng cu i cùng chính là d u nh c shell. Trong d u nh c này, root là tên ngư i dùng ăng nh p, may1 là tên máy và /root tên thư m c hi n th i (vì ây là ngư i dùng root). Khi d u nh c shell xu t hi n trên màn hình thì i u ó có nghĩa là h i u hành ã s n sàng ti p nh n m t yêu c u m i c a ngư i dùng. D u nh c shell có th khác v i trình bày trên ây (M c 2.7 cung c p cách thay i d u nh c shell), nhưng có th hi u nó là chu i kí t b t u m t dòng có ch a tr chu t và luôn xu t hi n m i khi h i u hành hoàn thành m t công vi c nào ó. 2.2.2. Ra kh i h th ng k t thúc phiên làm vi c ngư i dùng c n th c hi n th t c ra kh i h th ng. Có r t nhi u cách cho phép thoát kh i h th ng, ây chúng ta xem xét m t s cách thông d ng nh t. Cách ơn gi n nh t m b o thoát kh i h th ng úng n là nh n t h p phím CTRL+ALT+DEL. Khi ó, trên màn hình s hi n th m t s thông báo c a h th ng và cu i cùng là thông báo thoát trư c khi t t máy. C n chú ý là: N u ang làm vi c trong môi trư ng X Window System, hãy nh n t h p phím CTRL+ALT+BACKSPACE trư c r i sau ó hãy nh n CTRL+ALT+DEL. Cách th hai là s d ng l nh shutdown v i cú pháp như sau: shutdown [tùy-ch n] <time> [c nh-báo] L nh này cho phép d ng t t c các d ch v ang ch y trên h th ng. Các tùy-ch n c a l nh này như sau: -k : không th c s shutdown mà ch c nh báo. -r : kh i ng l i ngay sau khi shutdown. -h : t t máy th c s sau khi shutdown. -f : kh i ng l i nhanh và b qua vi c ki m tra ĩa.
  • 27. 2 7 -F : kh i ng l i và th c hi n vi c ki m tra ĩa. -c : b qua không ch y l nh shutdown. Trong tùy ch n này không th ưa ra tham s th i gian nhưng có th ưa ra thông báo gi i thích trên dòng l nh g i cho t t c các ngư i dùng. -t s -giây : qui nh init(8) ch kho ng th i gian s -giây t m d ng gi a quá trình g i c nh báo và tín hi u kill, trư c khi chuy n sang m t m c ch y khác. và hai tham s v trí còn l i: time : t th i i m shutdown. Tham s time có hai d ng. D ng tuy t i là gg:pp (gg: gi trong ngày, pp: phút) thì h th ng s shutdown khi ng h máy trùng v i giá tr tham s . D ng tương i là +<s > là h n sau th i kho ng <s > phút s shutdown; coi shutdown l p t c tương ương v i +0. c nh-báo : thông báo g i n t t c ngư i dùng trên h th ng. Khi l nh th c hi n t t c các máy ngư i dùng u nh n ư c c nh báo. Ví d , khi ngư i dùng gõ l nh: shutdown +1 Sau mot phut nua he thong se shutdown! trên màn hình c a t t c ngư i dùng xu t hi n thông báo "Sau mot phut nua he thong se shutdown! " và sau m t phút thì h th ng shutdown th c s . Cách th ba là s d ng l nh halt v i cú pháp như sau: halt [tùy-ch n] L nh này t t h n máy. Các tuỳ ch n c a l nh halt: -w : không th c s t t máy nhưng v n ghi các thông tin lên file /var/log/wtmp ( ây là file lưu tr danh sách các ngư i dùng ăng nh p thành công vào h th ng). -d : không ghi thông tin lên file /var/log/wtmp. Tùy ch n -n có ý nghĩa tương t song không ti n hành vi c ng b hóa. -f : th c hi n t t máy ngay mà không th c hi n l n lư t vi c d ng các d ch v có trên h th ng. -i : ch th c hi n d ng t t c các d ch v m ng trư c khi t t máy. Chúng ta c n nh r ng, n u thoát kh i h th ng không úng cách thì d n n h u qu là m t s file hay toàn b h th ng file có th b hư h ng. Lưu ý: Có th s d ng l nh exit tr v d u nh c ăng nh p ho c k t thúc phiên làm vi c b ng l nh logout. 2.2.3. Kh i ng l i h th ng Ngoài vi c thoát kh i h th ng nh các cách th c trên ây ( n t h p ba phím Ctrl+Alt+Del, dùng l nh shutdown ho c l nh halt), khi c n thi t (ch ng h n, g p ph i tình hu ng m t trình ng d ng ch y qu n) có th kh i ng l i h th ng nh l nh reboot. Cú pháp l nh reboot: reboot [tùy-ch n] L nh này cho phép kh i ng l i h th ng. Nói chung thì ch siêu ngư i dùng m i ư c phép s d ng l nh reboot, tuy nhiên, n u h th ng ch có duy nh t m t ngư i dùng ang
  • 28. 2 8 làm vi c thì l nh reboot v n ư c th c hi n song h th ng òi h i vi c xác nh n m t kh u. Các tùy ch n c a l nh reboot như sau là -w, -d, -n, -f, -i có ý nghĩa tương t như trong l nh halt. 2.2.4. Kh i ng vào ch ho Linux cho phép nhi u ch kh i ng, nh ng ch này ư c li t kê trong file /etc/inittab. Dư i ây là n i dung c a file này: # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <miquels drinkel.nl.mugnet.org> # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) - ây là ch d ng ho t ng c a h th ng # 1 - Single user mode - ây là ch ơn ngư i dùng, ta có th ăng nh p vào ch này trong trư ng h p mu n kh c ph c m t s s c . # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) - ây là ch a ngư i dùng, giao di n text, không h tr k t n i m ng. # 3 - Full multiuser mode – Ch a ngư i dùng, giao di n text # 4 – unused – Không s d ng ch này # 5 - X11 - ây là ch a ngư i dùng, giao di n ho # 6 - reboot (Do NOT set initdefault to this) – Ch kh i ng l i máy tính # id:3:initdefault: - ây là ch ng m nh h th ng s s d ng kh i ng # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Things to run in every runlevel. ud::once:/sbin/update # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now #ca::ctrlaltdel:/bin/echo "You can't do that" # When our UPS tells us power has failed, assume we have a few minutes
  • 29. 2 9 # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 #3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6 # Run xdm in runlevel 5 # xdm is now a separate service x:5:respawn:/etc/X11/prefdm –nodaemon Trong ó ch kh i ng s 3 là ch kh i ng vào ch Text, và ch 5 là kh ng vào ch ho . Như v y cho máy tính kh i ng vào ch ho ta s a l i dòng c u hình id:3:initdefault: thành id:5:initdefault: Trong Linux có m t s lo i giao di n ho do m t s t ch c vi t ra. Hai t ch c n i ti ng là GNOME (http://www.gnome.org) và KDE (http://www.kde.org) ã vi t ra các giao di n ho mang tên trùng v i t ch c ó là GNOME và KDE. Cũng tuỳ vào vi c ư c cài giao di n GNOME hay KDE mà khi kh i ng vào ch ho , máy tính có các giao di n tương ng. Trên hình trên là giao di n GNOME mà khi kh i ng vào ch ho . M t khác, các giao di n này liên t c ư c phát tri n, do ó
  • 30. 3 0 m i phiên b n s có s khác nhau. Trong giao di n ăng nh p h a, h th ng hi n th h p tho i cho phép ngư i dùng nh p vào tên tài kho n; sau khi ngư i dùng nh p tên tài kho n c a mình, h th ng h i ti p m t kh u. N u c tên tài kho n và m t kh u u chính xác thì ngư i dùng ư c phép vào h th ng và m t giao di n làm vi c m i s hi n ra như hình dư i. 2.3. L nh thay i m t kh u M t kh u là v n r t quan tr ng trong các h th ng a ngư i dùng và m b o tính b o m t t i a, c n thi t ph i chú ý t i vi c thay i m t kh u. Th m chí trong trư ng h p h th ng ch có m t ngư i s d ng thì vi c thay i m t kh u v n là r t c n thi t. M t kh u là m t xâu kí t i kèm v i tên ngư i dùng m b o cho phép m t ngư i vào làm vi c trong h th ng v i quy n h n ã ư c quy nh. Trong quá trình ăng nh p, ngư i dùng ph i gõ úng tên và m t kh u, trong ó gõ m t kh u là công vi c b t bu c ph i th c hi n. Tên ngư i dùng có th ư c cô ng khai song m t kh u thì tuy t i ph i ư c m b o bí m t. · Vi c ăng ký tên và m t kh u c a siêu ngư i dùng ư c ti n hành trong quá trình kh i t o h i u hành Linux. · Vi c ăng ký tên và m t kh u c a m t ngư i dùng thông thư ng ư c ti n hành khi m t ngư i dùng m i ăng ký tham gia s d ng h th ng. Thông thư ng siêu ngư i dùng cung c p tên và m t kh u cho ngư i dùng m i (có th do ngư i dùng ngh ) và dùng l nh adduser (ho c l nh useradd) ăng ký tên và m t kh u ó v i h
  • 31. 3 1 th ng. Sau ó, ngư i dùng m i nh t thi t c n thay i m t kh u b o m vi c gi bí m t cá nhân tuy t i. L nh passwd cho phép thay i m t kh u ng v i tên ăng nh p ngư i dùng. Cú pháp l nh passwd: passwd [tùy-ch n] [tên-ngư i-dùng] v i các tùy ch n như sau: -k : thay i m t kh u ngư i dùng. L nh òi h i ph i xác nh n quy n b ng vi c gõ m t kh u ang dùng trư c khi thay i m t kh u. Cho phép ngư i dùng thay i m t kh u c a mình c l p v i siêu ngư i dùng. -f : t m t kh u m i cho ngư i dùng song không c n ti n hành vi c ki m tra m t kh u ang dùng. Ch siêu ngư i dùng m i có quy n s d ng tham s này. -l : khóa m t tài kho n ngư i dùng. Vi c khóa tài kho n th c ch t là vi c d ch b n mã hóa m t kh u thành m t xâu ký t vô nghĩa b t u b i kí hi u "!". Ch siêu ngư i dùng m i có quy n s d ng tham s này. -stdin : vi c nh p m t kh u ngư i dùng ch ư c ti n hành t thi t b vào chu n không th ti n hành t ư ng d n (pipe). N u không có tham s này cho phép nh p m t kh u c t thi t b vào chu n ho c t ư ng d n. -u : m khóa (tháo b khóa) m t tài kho n ( i ng u v i tham s -l). Ch siêu ngư i dùng m i có quy n s d ng tham s này. -d : xóa b m t kh u c a ngư i dùng. Ch siêu ngư i dùng m i có quy n s d ng tham s này. -S : hi n th thông tin ng n g n v tr ng thái m t kh u c a ngư i dùng ư c ưa ra. Ch siêu ngư i dùng m i có quy n s d ng tham s này. N u tên-ngư i-dùng không có trong l nh thì ng m nh là chính ngư i dùng ã gõ l nh này. Ví d khi ngư i dùng user1 gõ l nh: # passwd user1 h th ng thông báo: Changing password for user user1 New UNIX password: ngư i dùng nh p m t kh u m i c a mình vào. Sau khi ngư i dùng gõ xong m t kh u m i, h th ng cho ra thông báo: BAD PASSWORD: it is derived from your password entry Retype new UNIX password: ngư i dùng kh ng nh m t l n n a m t kh u v a gõ dòng trên (nh ph i gõ l i úng h t như l n trư c). Ch nên quá phân vân vì thông báo dòng phía trên vì h u h t khi gõ m t kh u m i luôn g p nh ng thông báo ki u i lo i như v y, ch ng h n như: BAD PASSWORD: it is too simplistic/systematic Và sau khi chúng ta kh ng nh l i m t kh u m i, h th ng cho ra thông báo: Passwd: all authentication tokens updated successfully. cho bi t vi c thay i m t kh u thành công và d u nh c shell l i hi n ra. Khi siêu ngư i dùng gõ l nh:
  • 32. 3 2 # passwd -S root s hi n ra thông báo Changing password for user root Password set, MD5 encryption cho bi t thu t toán mã hóa m t kh u mà Linux s d ng là m t thu t toán hàm băm có tên là MD5. Lưu ý: Có m t l i khuyên i v i ngư i dùng là nên ch n m t kh u không quá ơn gi n quá (nh m tránh ngư i khác d dò tìm ra) ho c không quá ph c t p (tránh khó khăn cho chính ngư i dùng khi ph i ghi nh và gõ m t kh u). c bi t không nên s d ng h tên, ngày sinh, s i n tho i ... c a b n thân ho c ngư i thân làm m t kh u vì ây là m t trong nh ng trư ng h p m t kh u ơn gi n nh t. N u thông báo m t kh u quá ơn gi n ư c l p i l p l i m t vài l n và không có thông báo m t kh u m i thành công ã quay v d u nh c shell thì nên gõ l i l nh và ch n m t m t kh u m i ph c t p hơn ôi chút. 2.4. L nh xem, thi t t ngày, gi hi n t i và xem l ch trên h th ng 2.4.1 L nh xem, thi t t ngày, gi L nh date cho phép có th xem ho c thi t t l i ngày gi trên h th ng. Cú pháp c a l nh g m hai d ng, d ng xem thông tin v ngày, gi : date [tùy-ch n] [+ nh-d ng] và d ng thi t t l i ngày gi cho h th ng: date [tùy-ch n] [MMDDhhmm[ [CC[YY] ]-ss]] Các tùy-ch n như sau: -d, --date=xâu-văn-b n : hi n th th i gian dư i d ng xâu-văn-b n, mà không l y "th i gian hi n t i c a h th ng” như theo ng m nh; xâu-văn-b n ư c t trong hai d u nháy ơn ho c hai d u nháy kép. -f, --file=file-văn-b n : gi ng như m t tham s --date nhưng ng v i nhi u ngày c n xem: m i dòng c a file-văn-b n có vai trò như m t xâu-văn-b n trong trư ng h p tham s --date. -I, --iso-8601[=mô-t ] : hi n th ngày gi theo chu n ISO-8601 (ví d : 2000-11-8). -I tương ương v i tham s --iso-8601='date' V i --iso-8601: n u mô-t là 'date' (ho c không có) thì hi n th ngày, n u mô-t là 'hours' hi n th ngày+gi , n u mô-t là 'minutes': ngày+gi +phút; n u mô-t là 'seconds': ngày + gi + phút + giây. -r, --reference= file : hi n th th i gian s a i file l n g n ây nh t. -R, --rfc-822 : hi n th ngày theo RFC-822 (ví d : Wed, 8 Nov 2000 09:21:46 -0500). -s, --set=xâu-văn-b n : thi t t l i th i gian theo ki u xâu-văn-b n. -u, --utc, --universal : hi n th ho c thi t t th i gian theo UTC (ví d : Wed Nov 8 14:29:12 UTC 2000). --help : hi n th thông tin tr giúp và thoát.
  • 33. 3 3 Trong d ng l nh date cho xem thông tin ngày, gi thì tham s nh-d ng i u khi n cách hi n th thông tin k t qu . nh-d ng là dãy có t m t n nhi u c p g m hai kí t , trong m i c p kí t u tiên là % còn kí t th hai mô t nh d ng. Do s lư ng nh d ng là r t nhi u vì v y chúng ta ch xem xét m t s nh d ng i n hình ( xem y các nh d ng, s d ng l nh man date). Dư i ây là m t s nh d ng i n hình: %% : Hi n ra chính kí t %. %a : Hi n ra thông tin tên ngày trong tu n vi t t t theo ngôn ng b n a. %A : Hi n ra thông tin tên ngày trong tu n vi t y theo ngôn ng b n a. %b : Hi n ra thông tin tên tháng vi t t t theo ngôn ng b n a. %B : Hi n ra thông tin tên tháng vi t y theo ngôn ng b n a. Trong d ng l nh date cho phép thi t t l i ngày gi cho h th ng thì tham s [MMDDhhmm[ [CC[YY] [.ss]] mô t ngày, gi m i c n thi t t, trong ó: MM: hai s ch tháng, DD: hai s ch ngày trong tháng, hh: hai s ch gi trong ngày, mm: hai s ch phút, CC: hai s ch th k , YY: hai s ch năm trong th k . Các dòng ngay dư i ây trình bày m t s ví d s d ng l nh date, m i ví d ư c cho tương ng v i m t c p hai dòng, trong ó dòng trên mô t l nh ư c gõ còn dòng dư i là thông báo c a Linux. # date Wed Jan 3 23:58:50 ICT 2001 # date -d='01/01/2000' Sat Jan 1 00:00:00 ICT 2000 # date -iso-8601='seconds' 2000-12-01T00:36:41-0500 # date -d='01/01/2001' Mon Jan 1 00:00:00 ICT 2001 # date 010323502001.50 Wed Jan 3 23:50:50 ICT 2001 # date +%a%A Wed Wednesday # date +%a%A%b%B Wed Wednesday Jan January # date +%D%%%j 01/05/01%005 2.4.2. L nh xem l ch L nh cal cho phép xem l ch trên h th ng v i cú pháp như sau: cal [tùy-ch n] [<tháng> [<năm>]]
  • 34. 3 4 n u không có tham s , l ch c a tháng hi n th i s ư c hi n th . Các tuỳ-ch n là: -m : ch n ngày Th hai là ngày u tiên trong tu n (m c nh là ngày Ch nh t). -j : hi n th s ngày trong tháng dư i d ng s ngày trong năm (ví d : ngày 1/11/2000 s ư c hi n th dư i d ng là ngày th 306 trong năm 2000, s ngày b t u ư c tính t ngày 1/1). -y : hi n th l ch c a năm hi n th i. Ví d : # cal 1 2001 January 2001 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Khi nh p dòng l nh trên, trên màn hình s hi n th l ch c a tháng 1 năm 2001, m c nh ch n ngày ch nh t là ngày b t u c a tu n. Dư i ây là ví d hi n th s ngày trong tháng 3 dư i d ng s ngày trong năm 2001. # cal -j 3 2001 March 2001 Su Mo Tu We Th Fr Sa 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 2.5. Xem thông tin h th ng L nh uname cho phép xem thông tin h th ng v i cú pháp là: uname [tùy-ch n] N u không có tuỳ ch n thì hi n tên h i u hành. L nh có các tùy ch n là: -a, --all : hi n t t c các thông tin. -m, --machine : ki u ki n trúc c a b x lý (i386, i486, i586, i686...). -n, --nodename : hi n tên c a máy. -r, --release : hi n nhân c a h i u hành. -s, --sysname : hi n tên h i u hành. -p, --processor : hi n ki u b x lý c a máy ch . Ví d , n u gõ l nh # uname -a
  • 35. 3 5 thì màn hình s hi n ra như sau: Linux linuxsrv.linuxvn.net 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown # Thông tin hi n ra có t t c 6 trư ng là: Tên h i u hành: Linux Tên máy: linuxsrv.linuxvn.net Tên nhân c a h i u hành: 2.2.14-5.0 Ngày s n xu t: #1 Tue Mar 7 21:07:39 EST 2000 Ki u ki n trúc b x lý: i686 Ki u b x lý c a máy ch : unknown Ví d n u gõ l nh: # uname -spr thì màn hình s hi n ra như sau: Linux 2.2.14-5.0 unknown là tên h i u hành, tên nhân và ki u b x lý c a máy ch . Lưu ý: Chúng ta làm rõ thêm n i dung lưu ý trong m c 1.3.1 v tham s khóa k t h p: Trong ví d trên ây khi vi t tham s -spr là yêu c u th c hi n l nh usame v i nghĩa k t h p tình hu ng theo c ba tham s khóa -s, -p, -r. Chú ý r ng, không th vi t -s -p -r thay cho -spr ư c. Như ã lưu ý m c 1.3.1 trong nhi u l nh c a Linux cho phép vi t k t h p các tham s khóa theo cách th c như trên mi n là các tham s ó không xung kh c v i nhau. 2.6. Thay i n i dung d u nh c shell Trong Linux có hai lo i d u nh c: d u nh c c p m t (d u nh c shell) xu t hi n khi nh p l nh và d u nh c c p hai (d u nh c nh p li u) xu t hi n khi l nh c n có d li u ư c nh p t bàn phím và tương ng v i hai bi n nh c tên là PS1 và PS2. PS1 là bi n h th ng tương ng v i d u nh c c p 1: Giá tr c a PS1 chính là n i dung hi n th c a d u nh c shell. nh n bi t thông tin h th ng hi n t i, m t nhu c u t ra là c n thay i giá tr c a các bi n h th ng PS1 và PS2. Linux cho phép thay i giá tr c a bi n h th ng PS1 b ng l nh gán tr m i cho nó. L nh này có d ng: # PS1='<dãy kí t >' Năm (5) kí t u tiên c a l nh gán trên ây (PS1=') ph i ư c vi t liên ti p nhau. Dãy kí t n m gi a c p hai d u nháy ơn (có th s d ng c p hai d u kép ") và không ư c phép ch a d u nháy. Dãy kí t này bao g m các c p kí t i u khi n và các kí t khác, cho phép có th có d u cách. C p kí t i u khi n g m hai kí t , kí t u tiên là d u s xuôi "" còn kí t th hai nh n m t trong các trư ng h p li t kê trong b ng dư i ây. B ng dư i ây gi i thi u m t s c p ký t i u khi n có th ư c s d ng khi mu n thay i d u nh c l nh: C p ký t i u khi n Ý nghĩa
  • 36. 3 6 ! Hi n th th t c a l nh trong l ch s # Hi n th th t c a l nh $ Hi n th d u ô-la ($). i v i siêu ngư i dùng (super user), thì hi n th d u s hi u (#) Hi n th d u s () d Hi n th ngày hi n t i h Hi n th tên máy (hostname) n Ký hi u xu ng dòng s Hi n th tên h shell t Hi n th gi hi n t i u Hi n th tên ngư i dùng W Hi n th tên th c s c a thư m c hi n th i (ví d thư m c hi n th i là /mnt/hda1 thì tên th c s c a nó là /hda1) w Hi n th tên y c a thư m c hi n th i (ví d /mnt/hda1) Ví d , hi n th i d u nh c shell có d ng: root[may1 /hda1]# Sau khi gõ l nh root@may1 /hda1]# PS1='[h@u w : d]$' thì d u nh c shell ư c thay i là: [may1@root /mnt/hda1 : Fri Oct 27 ]# ngoài vi c i th t gi a tên ngư i dùng và máy còn cho chúng ta bi t thêm v ngày h th ng qu n lý và tên y c a thư m c hi n th i. Linux cung c p cách th c hoàn toàn tương t như i v i bi n PS1 thay i giá tr bi n h th ng PS2 tương ng v i d u nh c c p hai. 2.7. L nh g i ngôn ng tính toán s h c Linux cung c p m t ngôn ng tính toán v i chính xác tùy ý thông qua l nh bc. Khi yêu c u l nh này, ngư i dùng ư c cung c p m t ngôn ng tính toán (và cho phép l p trình tính toán có d ng ngôn ng l p trình C) ho t ng theo thông d ch. Trong ngôn ng l p trình ư c cung c p (t m th i g i là ngôn ng bc), t n t i r t nhi u công c h tr tính toán và l p trình tính toán: ki u phép toán s h c phong phú, phép toán so sánh, m t s hàm chu n, bi n chu n, c u trúc i u khi n, cách th c nh nghĩa hàm, cách th c thay i chính xác, t l i chú thích ... Ch c n s d ng m t ph n nh tác ng c a l nh bc, chúng ta ã có m t "máy tính s b m tay" hi u qu . Cú pháp l nh bc: bc [tùy-ch n] [file...] v i các tuỳ ch n sau ây: -l, --mathlib : th c hi n phép tính theo chu n thư vi n toán h c (ví d : 5/5=1.00000000000000000000). -w, --warn : khi th c hi n phép tính không tuân theo chu n POSIX (POSIX là m t chu n trong Linux) thì m t c nh báo xu t hi n.
  • 37. 3 7 -s, --standard : th c hi n phép tính chính xác theo chu n c a ngôn ng POSIX bc. -q, --quiet : không hi n ra l i gi i thi u v ph n m m GNU khi dùng bc. Tham s file là tên file ch a chương trình vi t trên ngôn ng bc, khi l nh bc th c hi n s t ng ch y các file chương trình này (N u có nhi u tham s thì có nghĩa s ch y nhi u chương trình liên ti p nhau). Dư i ây là m t ví d s d ng l nh bc d ng ơn gi n nh t. Khi gõ l nh t i d u nh c: # bc -l màn hình xu t hi n l i gi i thi u v GNU khi dùng bc và ngôn ng bc ư c kích ho t ph c v ngư i dùng. bc 1.05 Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 5^3 125 12+12+78*7-62/4 554.50000000000000000000 a=4 a^a 256 a*78 312 b=45 a*b 180 a/b .08888888888888888888 a%b .00000000000000000040 ây * là phép nhân, ^ là phép tính lu th a, / là phép chia l y thương, % là chia l y ph n dư. Lưu ý: Ngôn ng l p trình tính toán bc là m t ngôn ng r t m nh có n i dung h t s c phong phú cho nên trong khuôn kh c a tài li u này không th mô t h t các n i dung c a ngôn ng ó ư c. Chúng ta c n s d ng l nh man bc nh n ư c thông tin y v l nh bc và ngôn ng tính toán bc. ây trình bày sơ b m t s y u t cơ b n nh t c a ngôn ng ó (bt là vi t t t c a bi u th c, b là vi t t t c a bi n): Các phép tính: - bt: l y i; ++ b, --b, b ++, b --: phép toán tăng, gi m b; các phép toán hai ngôi c ng +, tr -, nhân *, chia /, l y ph n dư %, lũy th a nguyên
  • 38. 3 8 b c ^; gán =; gán sau khi thao tác <thao tác>=; các phép toán so sánh <, <=, >, >=, b ng ==, khác != ... Phép so sánh cho 1 n u úng, cho 0 n u sai. B n bi n chu n là scale s lư ng ch s ph n th p phân; last giá tr tính toán cu i cùng; ibase cơ s h m i v i input và obase là cơ s h m v i output (ng m nh hai bi n này có giá tr 10). Các hàm chu n sin s (bt); cosin c (bt); arctg a (bt); lôgarit t nhiên l (bt); mũ cơ s t nhiên e (bt); hàm Bessel b c nguyên n c a bt là j (n, bt).
  • 39. 3 9 CHƯƠNG 3. H TH NG FILE 3.1 T ng quan v h th ng file 3.1.1. M t s khái ni m Ngư i dùng ã t ng làm vi c v i h i u hành DOS/Windows thì r t quen bi t v i các khái ni m: file (t p tin), thư m c, thư m c hi n th i ... m b o tính h th ng và thu n ti n cho ngư i dùng chưa t ng làm vi c thành th o v i m t h i u hành nào khác, chương này v n gi i thi u v các khái ni m này m t cách sơ b . M t i tư ng i n hình trong các h i u hành ó là file. File là m t t p h p d li u có t ch c ư c h i u hành qu n lý theo yêu c u c a ngư i dùng. Cách t ch c d li u trong file thu c v ch c a nó là ngư i ã t o ra file. File có th là m t văn b n (trư ng h p c bi t là chương trình ngu n trên C, PASCAL, shell script ...), m t chương trình ngôn ng máy, m t t p h p d li u ... H i u hành t ch c vi c lưu tr n i dung file trên các thi t b nh lâu dài (ch ng h n ĩa t ) và m b o các thao tác lên file. Chính vì có h i u hành m b o các ch c năng liên quan n file nên ngư i dùng không c n bi t file c a mình lưu vùng nào trên ĩa t , b ng cách nào c/ghi lên các vùng c a ĩa t mà v n th c hi n ư c yêu c u tìm ki m, x lý lên các file. H i u hành qu n lý file theo tên g i c a file (tên file) và m t s thu c tính liên quan n file. Trư c khi gi i thi u m t s n i dung liên quan n tên file và tên thư m c, chúng ta gi i thi u sơ b v khái ni m thư m c. làm vi c ư c v i các file, h i u hành không ch qu n lý n i dung file mà còn ph i qu n lý các thông tin liên quan n các file. Thư m c (directory) là i tư ng ư c dùng ch a thông tin v các file, hay nói theo m t cách khác, thư m c ch a các file. Các thư m c cũng ư c h i u hành qu n lý trên v t d n ngoài và vì v y, theo nghĩa này, thư m c cũng ư c coi là file song trong m t s trư ng h p phân bi t v i "file" thư m c, chúng ta dùng thu t ng file thông thư ng. Khác v i file thông thư ng, h i u hành l i quan tâm n n i dung c a thư m c. M t s n i dung sau ây liên quan n tên file (bao g m c tên thư m c): Tên file trong Linux có th dài t i 256 ký t , bao g m các ch cái, ch s , d u g ch n i, g ch chân, d u ch m. Tên thư m c/file trong Linux có th có nhi u hơn m t d u ch m, ví d : This_is.a.VERY_long.filename. N u trong tên file có d u ch m "." thì xâu con c a tên file t d u ch m cu i cùng ư c g i là ph n m r ng c a tên file (ho c file). Ví d , tên file trên ây có ph n m r ng là .filename. Chú ý r ng khái ni m ph n m r ng ây không mang ý nghĩa như m t s h i u hành khác (ch ng h n như MS-DOS). Lưu ý: Chúng ta nên lưu ý r ng, không ph i ký t nào cũng có nghĩa. N u có hai file ch khác nhau ký t cu i cùng, thì i v i Linux, ó là hai file có th trùng tên. B i l , Linux ch l y 32 hay 64 ký t u tiên trong tên file mà thôi (tùy theo phiên b n Linux), ph n tên file còn l i dành cho ch c a file, Linux theo dõi thông tin, nhưng thư ng không xem các ký t ng sau ký t th 33 hay 65 là quan tr ng i v i nó. Xin nh c l i lưu ý v phân bi t ch hoa và ch thư ng i v i tên thư m c/file, ví d hai file FILENAME.tar.gz và filename.tar.gz là hai file khác nhau.
  • 40. 4 0 N u trong tên thư m c/file có ch a kho ng tr ng, s ph i t tên thư m c/file vào trong c p d u nháy kép s d ng thư m c/file ó. Ví d , t o thư m c có tên là “My document” ch ng h n, hãy ánh dòng l nh sau: # mkdir "My document" M t s ký t sau không ư c s d ng trong tên thư m c/file: !, *, $, &, # ... Khi s d ng chương trình mc (Midnight Commander), vi c hi n th tên file s b sung m t kí t theo nghĩa: d u "*" cho file kh thi trong Linux, d u "~" cho file sao lưu, d u "." cho file n, d u "@" cho file liên k t... T p h p t t c các file có trong h i u hành ư c g i là h th ng file là m t h th ng th ng nh t. B i chính t cách th c s d ng thư m c, h th ng file ư c t ch c lôgic theo d ng hình cây: H th ng file ư c xu t phát t m t thư m c g c ( ư c kí hi u là "/") và cho phép t o ra thư m c con trong m t thư m c b t kỳ. Thông thư ng, khi kh i t o Linux ã có ngay h th ng file c a nó. Hình 3.1. cho minh h a m t ph n trong cây lôgic c a h th ng file. ch m t file hay m t thư m c, chúng ta c n ưa ra m t ư ng d n, ví d ư ng d n xác nh file Xclients trong hình 3.1. chúng ta vi t như sau: /etc/X11/xinit/Xclients ư ng d n này cho bi t Xclients n m trong xinit, xinit n m trong X11, X11 n m trong etc và etc n m trong g c /. / root bin etc usr home dev peng office52 sh date who X11 src bin user1 user2 tty00 tty01 xinit Xclients Xmodmap Hình 3.1. M t ph n c u trúc lôgic d ng cây c a h th ng File
  • 41. 4 1 Tên file thư ng là tham s th c s khi gõ l nh và công vi c gõ l nh tr nên r t n ng n i v i ngư i dùng n u như trong l nh ph i gõ m t ư ng d n dài theo d ng trên ( ư c bi t v i tên g i là ư ng d n tuy t i). Vì v y, Linux (cũng như nhi u h i u hành khác) s d ng khái ni m thư m c hi n th i c a m i ngư i dùng làm vi c trong h th ng. Thư m c hi n th i là m t thư m c trong h th ng file mà hi n th i "ngư i dùng ang ó". Qua thư m c hi n th i, Linux cho phép ngư i dùng ch m t file trong l nh ng n g n hơn nhi u. Ví d , n u thư m c hi n th i là thư m c xinit thì ch file ã nói, ngư i dùng ch c n vi t Xclients ho c ./Xclients trong ó kí hi u "." ch thư m c hi n th i. ư ng d n ư c xác nh qua thư m c hi n th i ư c g i là ư ng d n tương i. Khi m t ngư i dùng ăng nh p vào h th ng, Linux luôn chuy n ngư i dùng vào thư m c riêng, và t i th i i m ó thư m c riêng là thư m c hi n th i c a ngư i dùng. Thư m c riêng c a siêu ngư i dùng là /root, thư m c riêng c a ngư i dùng có tên là user1 là /home/user1 ... Linux cho phép dùng l nh cd chuy n sang thư m c khác (l y thư m c khác làm thư m c hi n th i). Hai d u ch m ".." ư c dùng ch thư m c ngay trên thư m c hi n th i (cha c a thư m c hi n th i). Linux còn cho phép ghép m t h th ng file trên m t thi t b nh ( ĩa m m, vùng ĩa c ng chưa ư c ưa vào h th ng file) thành m t thư m c con trong h th ng file c a h th ng b ng l nh mount. Các h th ng file ư c ghép thu c vào các ki u khác nhau. Hai m c ti p theo (3.1.2 và 3.1.3.) gi i thi u nh ng n i dung sâu hơn v h th ng file Linux. 3.1.2. Sơ b ki n trúc n i t i c a h th ng file Trên ĩa t , h th ng file ư c coi là dãy tu n t các kh i lôgic m i kh i ch a ho c 512B ho c 1024B ho c b i c a 512B là c nh trong m t h th ng file. Trong h th ng file, các kh i d li u ư c a ch hóa b ng cách ánh ch s liên ti p, m i a ch ư c ch a trong 4 byte (32 bit). C u trúc n i t i c a h th ng file bao g m 4 thành ph n k ti p nhau: Boot block (dùng kh i ng h th ng), Siêu kh i (Super block), Danh sách inode và Vùng d li u. Dư i ây, chúng ta xem xét sơ lư c n i dung các thành ph n c u trúc n i t i m t h th ng file. Siêu kh i Siêu kh i ch a nhi u thông tin liên quan n tr ng thái c a h th ng file. Trong siêu kh i có các trư ng sau ây: Kích thư c c a danh sách inode (khái ni m inode s ư c gi i thích trong m c sau): nh kích c vùng không gian trên H th ng file qu n lý các inode. Kích thư c c a h th ng file. Hai kích thư c trên ây tính theo ơn v dung lư ng b nh ngoài, M t danh sách ch s các kh i r i (thư ng tr c trên siêu kh i) trong h th ng file.
  • 42. 4 2 Ch s các kh i r i thư ng tr c trên siêu kh i ư c dùng áp ng nhu c u phân ph i m i. Chú ý r ng, danh sách ch s các kh i r i có trên siêu kh i ch là m t b ph n c a t p t t c các kh i r i có trên h th ng file. Ch s c a kh i r i ti p theo trong danh sách các kh i r i. Ch s kh i r i ti p theo dùng h tr vi c tìm ki m ti p các kh i r i: b t u tìm t kh i có ch s này tr i. i u ó có nghĩa là m i kh i có ch s không l n hơn ch s này ho c có trong danh sách các kh i r i thư ng tr c ho c ã ư c c p phát cho m t file nào ó. Nhi u thao tác t o file m i, xoá file, thay i n i dung file v.v. c p nh t các thông tin này. M t danh sách các inode r i (thư ng tr c trên siêu kh i) trong h th ng file. Danh sách này ch a ch s các inode r i ư c dùng phân ph i ngay ư c cho m t file m i ư c kh i t o. Thông thư ng, danh sách này ch ch a m t b ph n các inode r i trên h th ng file. Ch s inode r i ti p theo trong danh sách các inode r i. Ch s inode r i ti p theo nh v vi c tìm ki m ti p thêm inode r i: b t u tìm t inode có ch s này tr i. i u ó có nghĩa là m i inode có ch s không l n hơn ch s này ho c có trong danh sách các inode r i thư ng tr c ho c ã ư c tương ng v i m t file nào ó. Hai tham s trên ây t o thành c p xác nh ư c danh sách các inode r i trên h th ng file các thao tác t o file m i, xoá file c p nh t thông tin này. Các trư ng khóa (lock) danh sách các kh i r i và danh sách inode r i: Trong m t s trư ng h p, ch ng h n khi h th ng ang làm vi c th c s v i ĩa t c p nh t các danh sách này, h th ng không cho phép c p nh t t i hai danh sách nói trên. C ch d n v vi c siêu kh i ã ư c bi n i: nh kỳ th i gian siêu kh i b nh trong ư c c p nh t l i vào siêu kh i ĩa t và vì v y c n có thông tin v vi c siêu kh i b nh trong khác v i n i dung b nh ngoài: n u hai b n không gi ng nhau thì c n ph i bi n i chúng ư c ng nh t. C ch d n r ng h th ng file ch có th c (c m ghi): Trong m t s trư ng h p, h th ng ang c p nh t thông tin t b nh ngoài thì ch cho phép c i v i h th ng file, S lư ng t ng c ng các kh i r i trong h th ng file, S lư ng t ng c ng các inode r i trong h th ng file, Thông tin v thi t b , Kích thư c kh i ( ơn v phân ph i d li u) c a h th ng file. Hi n t i kích thư c ph bi n c a kh i là 1KB. Trong th i gian máy ho t ng, theo t ng giai o n, nhân s ưa siêu kh i lên ĩa n u nó ã ư c bi n i phù h p v i d li u trên h th ng file. M t trong khái ni m c t lõi xu t hi n trong h th ng file ó là inode. Các i tư ng liên quan n khái ni m này s ư c trình bày trong các m c ti p theo.
  • 43. 4 3 Inode M i khi m t quá trình kh i t o m t file m i, nhân h th ng s gán cho nó m t inode chưa s d ng. hi u rõ hơn v inode, chúng ta xem xét sơ lư c m i quan h liên quan gi a file d li u và vi c lưu tr trên v t d n ngoài i v i Linux. N i dung c a file ư c ch a trong vùng d li u c a h th ng file và ư c phân chia các kh i d li u (ch a n i dung file) và hình nh phân b n i dung file có trong m t inode tương ng. Liên k t n t p h p các kh i d li u này là m t inode, ch thông qua inode m i có th làm vi c v i d li u t i các kh i d li u: Inode ch a d ng thông tin v t p h p các kh i d li u n i dung file. Có th quan ni m r ng, t h p g m inode và t p các kh i d li u như v y là m t file v t lý: inode có thông tin v file v t lý, trong ó có a ch c a các kh i nh ch a n i dung c a file v t lý. Thu t ng inode là s k t h p c a hai t index v i node và ư c s d ng ph d ng trong Linux. Các inode ư c phân bi t nhau theo ch s c a inode: ó chính là s th t c a inode trong danh sách inode trên h th ng file. Thông thư ng, h th ng dùng 2 bytes lưu tr ch s c a inode. V i cách lưu tr ch s như th , không có nhi u hơn 65535 inode trong m t h th ng file. Như v y, m t file ch có m t inode song m t file l i có m t ho c m t s tên file. Ngư i dùng tác ng thông qua tên file và tên file l i tham chi u n inode (tên file và ch s inode là hai trư ng c a m t ph n t c a m t thư m c). M t inode có th tương ng v i m t ho c nhi u tên file, m i tương ng như v y ư c g i là m t liên k t. Inode ư c lưu tr t i vùng danh sách các inode. Trong quá trình làm vi c, Linux dùng m t vùng b nh , ư c g i là b ng inode (trong m t s trư ng h p, nó còn ư c g i tư ng minh là b ng sao in-core inode) v i ch c năng tương ng v i vùng danh sách các inode có trong h th ng file, h tr cho quá trình truy nh p d li u trong h th ng file. N i dung c a m t in-core inode không ch ch a các thông tin trong inode tương ng mà còn ư c b sung các thông tin m i giúp cho quá trình x lý inode. Chúng ta xem xét c u trúc n i t i c a m t inode th y ư c s trình bày n i t i c a m t file. Inode bao g m các trư ng thông tin sau ây: Ki u file. Trong Linux phân lo i các ki u file: file thông thư ng (regular), thư m c, c t kí t , c t kh i và ng d n FIFO (pipes). Linux quy nh trư ng ki u file có giá tr 0 tương ng ó là inode chưa ư c s d ng. Quy n truy nh p file. Trong Linux, file là m t tài nguyên chung c a h th ng vì v y quy n truy nh p file ư c c bi t quan tâm tránh nh ng trư ng h p truy nh p không h p l . i v i m t inode, có 3 m c quy n truy nh p liên quan n các i tư ng: m c ch c a file ( i tư ng này ư c ký hi u là u: t ch user), m c nhóm ngư i dùng c a ch nhân c a file ( i tư ng này ư c ký hi u là g: t ch group), m c ngư i dùng khác ( i tư ng này ư c ký hi u là a: t ch all). Quy n truy nh p là c, ghi, th c hi n ho c m t t h p nào ó t nhóm g m 3 quy n trên. Chú ý r ng, quy n th c hi n i v i m t thư m c tương ng v i vi c cho phép tìm m t tên file có trong thư m c ó. S lư ng liên k t i v i inode: ây chính là s lư ng các tên file trên các thư m c ư c liên k t v i inode này,
  • 44. 4 4 nh danh ch nhân c a inode, nh danh nhóm ch nhân: xác nh tên nhóm ngư i dùng mà ch file là m t thành viên c a nhóm này, dài c a file tính theo byte, Th i gian truy nh p file: th i gian file ư c s a i mu n nh t, th i gian file ư c truy nh p mu n nh t, th i gian file ư c kh i t o, • B ng a ch ch a các a ch kh i nh ch a n i dung file. B ng này có 13 ph n t a ch , trong ó có 10 ph n t tr c ti p, 1 ph n t gián ti p b c 1, 1 ph n t gián ti p b c 2 và m t ph n t gián ti p b c 3 (chi ti t có trong ph n sau). N i dung c a file thay i khi có thao tác ghi lên nó; n i dung c a m t inode thay i khi n i dung c a file thay i ho c thay i ch ho c thay i quy n ho c thay i s liên k t. Ví d v n i dung m t inode như sau: type regular perms rwxr-xr-x links 2 owner 41CT group 41CNTT size 5703 bytes accessed Sep 14 1999 7:30 AM modified Sep 10 1999 1:30 PM inode Aug 1 1995 10:15 AM Các ph n t a ch d li u B n sao in-core inode còn b sung thêm trư ng tr ng thái c a in-core inode. • Trư ng tr ng thái c a in-core inode có các thông tin sau: inode ã b khoá, m t quá trình ang ch i khi inode tháo khóa, in-core inode khác v i inode do s thay i d li u trong inode, in-core inode khác v i inode do s thay i d li u trong file, s lư ng các tên file n i v i file ang ư c m , s hi u thi t b lôgic c a h th ng file ch a file nói trên ch s inode: dùng liên k t v i inode trên ĩa, các móc n i t i các in-core inode khác. Trong b nh trong, các in-core inode ư c liên k t theo m t hàng băm và m t danh sách t do. Trong danh sách hàng băm các in-core inode hòa h p theo s hi u thi t b lôgic và s hi u inode. Trong quá trình h th ng làm vi c, n y sinh khái ni m inode tích c c n u như có m t quá trình ang làm vi c v i inode ó (như m file). M t inode thu c vào danh sách các inode r i khi không có file v t lý nào tương ng v i inode ó.
  • 45. 4 5 B ng ch a a ch kh i d li u c a File trong UNIX B ng ch a a ch kh i d li u c a file g m 13 ph n t v i 10 ph n t tr c ti p và 3 ph n t gián ti p: M i ph n t có dài 4 bytes, ch a m t s hi u c a m t kh i nh trên ĩa. M i ph n t tr c ti p tr t i 1 kh i d li u th c s ch a n i dung file. Ph n t gián ti p b c 1 (single indirect) tr t i 1 kh i nh ngoài. Khác v i ph n t tr c ti p, kh i nh ngoài này không dùng ch a d li u c a file mà l i ch a danh sách ch s các kh i nh ngoài và chính các kh i nh ngoài này m i th c s ch a n i dung file. Như v y, n u kh i có dài 1KB và m t ch s kh i ngoài có dài 4 bytes thì a ch gián ti p cho phép nh v không gian trên ĩa lưu tr d li u c a file t i 256KB (Không gian b nh ngoài trong vùng d li u ph i dùng t i là 257KB). Tương t i v i các ph n t gián ti p m c cao hơn. Cơ ch qu n lý a ch file như trên cho th y có s phân bi t gi a file nh v i file l n. File nh có dài bé hơn và theo cách t ch c như trên, phương pháp truy nh p s cho phép t c nhanh hơn, ơn gi n hơn do ch ph i làm vi c v i các ph n t tr c ti p. Khi x lý, thu t toán c File ti n hành theo các cách khác nhau i v i các ph n t tr c ti p và gián ti p. Cơ ch t ch c lưu tr n i dung Fle như ã trình bày cho phép dài file có th lên t i (224+216 + 28+10) kh i. Vùng d li u bao g m các kh i d li u, m i kh i d li u ư c ánh ch s phân bi t. Kh i trên vùng d li u ư c dùng ch a n i dung các file, n i dung các thư m c và n i dung các kh i nh v a ch c a các file. Chú ý r ng, ch s c a kh i d li u ư c ch a trong 32 bit và thông tin này xác nh dung lư ng l n nh t c a h th ng file. 3.1.3. M t s thu t toán làm vi c v i inode H th ng l i g i h th ng file Khi làm vi c v i file thư ng thông qua l i g i h th ng. M t s l i g i h th ng thư ng g p như m file open, óng file close, c n i dung file read, ghi n i dung file write v.v. B ng dư i ây th ng kê các l i g i h th ng làm vi c v i h th ng file và phân lo i theo ch c năng c a m i l i g i h th ng (m t l i g i có th ư c nh c t i m t s l n): Th i i m s d ng file S d ng namei gán inode thu c tính file Vào-ra file C u trúc h th ng file Qu n lý cây open creat dup pipe close open creat chdir chroot chown chmod stat link unlink mknod mount umount creat mknod link unlink chown chmod stat read write cseek mont umount chdir chown Thu t toán h th ng file m c th p Namei iget iput Ialloc ifree alloc free bmap Thu t toán nh v buffer getblk brelse Bread breada bwrite Hình 3.2. T ng th v l i g i h th ng File
  • 46. 4 6 Chúng ta xem xét m t s thu t toán làm vi c v i inode. Thu t toán truy nh p t i inode (iget) Nhi u tình hu ng òi h i thu t toán iget, ch ng h n như, m t quá trình m m t file m i ho c t o m t file m i v.v.. Thu t toán iget c p phát m t b n in-core inode i v i m t s hi u inode. Tuy nhiên, trong trư ng h p chưa có b n sao in-core inode thì d có n i dung c a nó c n ph i c ư c n i dung c a inode ó và c n nh v kh i d li u ch a inode ã cho. Công th c liên quan n kh i ĩa t ch a inode có th c vào b nh trong như sau: Ch s kh i ch a inode = (s hi u inode - 1) / (s lư ng inode trong m t kh i nh ) + ch s kh i nh u tiên ch a danh sách inode trên ĩa. Sau khi ã c kh i ĩa ch a inode vào b nh trong, xác nh chính xác v trí c a inode, chúng ta có công th c sau: Byte v trí u tiên = ((s hi u inode - 1) mod (s lư ng inode trong m t kh i nh ))* dài m t inode Ví d , n u như m i inode ĩa chi m 64 bytes, m i kh i ĩa ch a 8 inode ĩa thì inode s 8 s b t u t byte th 448 trên kh i ĩa u tiên trong vùng danh sách các inode. ý r ng, khi làm vi c v i m t h th ng file thì super block c a nó luôn có m t trong b nh trong h th ng có nh ng thông tin làm vi c. Chú ý r ng, trong super block có m t danh sách các inode r i (trên nó) và m t danh sách các kh i r i. Thu t toán iget nh n m t inode cho nó tích c c và i u ó tùy thu c vào m t s tình hu ng sau ây: - N u inode không t n t i trong vùng m mà l i không thu c danh sách các inode r i trên super block thì h th ng ph i thông báo m t l i ã ư c g p. L i này x y ra do yêu c u m t inode không còn vùng m làm vi c v i file n a (tương ng v i trư ng h p trong MS-DOS thông báo: too many files opened), - inode ã có trong vùng m các inode trên h th ng file ( ã có in-core inode). Trong trư ng h p này x lý theo hai bư c: + inode tương ng ã b khóa b i m t quá trình khác: lúc ó ph i i cho n khi quá trình trư c ây không khóa inode n a. Sau khi ư c tháo khóa inode có th tr thành tích c c ho c r i, + N u inode danh sách các inode r i thì lo i b nó kh i danh sách này b ng cách t inode sang tích c c. - inode không t n t i trên vùng m tuy nhiên danh sách các inode r i khác r ng. Khi danh sách các inode này khác r ng, có nghĩa là có nh ng inode không có giá tr : lo i b nó và t inode m i vào thay th . Thu t toán iput lo i b inode Thu t toán iput có ch c năng i ng u v i thu t toán iget: c n tháo b t s xu t hi n c a m t inode, ch ng h n khi chương trình th c hi n thao tác óng file. Khác v i trư ng h p thu t toán iget, thu t toán iput không n y sinh tình hu ng sai sót. Trong thu t toán này, khi m t quá trình không làm vi c v i m t file ư c liên k t v i m t inode n a thì m t s tình hu ng x y ra: - H th ng gi m s lư ng file tích c c i 1, - N u s lư ng file tích c c là 0 thì:
  • 47. 4 7 + N u ó là l nh xoá file thì trư c ó h th ng ã th c hi n thao tác gi m s liên k t v i inode i 1 và vì v y có th s lư ng liên k t tr thành 0, có nghĩa là s t n t i c a file v t lý không còn. Khi ó, chúng ta th c hi n vi c xoá th c s file nói trên b ng m t s thao tác: gi i phóng các kh i d li u, t ki u file c a inode là 0 và gi i phóng inode. + khi s liên k t >0 thi c n c p nh t s thay i c a inode lên ĩa t . - Trong trư ng h p s lư ng file tích c c v n dương thì không th c hi n thao tác gì. Chú ý là trong thu t toán này có s d ng thu t toán ifree. Thu t toán ialloc gán inode cho m t file m i Khi m t file m i ư c xu t hi n, ch ng h n kh i t o file creat, ph i cung c p m t inode cho file và thu t toán ialloc áp ng òi h i trên. Ho t ng c a thu t toán ialloc ư c gi i thích như sau: - ki m tra danh sách inode r i trên super block, x y ra m t trong hai trư ng h p ho c danh sách r ng ho c không r ng, - N u danh sách không r ng thì l y m t inode ti p theo cho file, kh i t o các giá tr ban u c a inode ó và gi m s inode r i trên super trên super block. - N u danh sách các inode r i trên super block là r ng: tìm ki m trên h th ng file nh ng inode r i t i vào danh sách các inode r i trên super block. N u danh sách ó y ho c không tìm th y ư c n a thì gán m t inode cho file. N u danh sách inode r i trên super block là r ng và không tìm th y inode r i trên ĩa thì s có thông báo l i. Trên danh sách các inode r i, nhân lưu gi m t inode ư c g i là inode nh , chính là inode cu i cùng ư c tìm th y sau này thu n l i cho tìm ki m. Thu t toán ifree t i m t inode r i trên ĩa vào danh sách các inode r i trên super block Thu t toán namei tìm ch s m t inode theo tên file Thu t toán namei là m t thu t toán ph d ng, nhi u thu t toán làm vi c v i file ph i s d ng namei. T tên m t ư ng d n file/thư m c, thu t toán namei cho inode tương ng. Thu t toán c p phát d li u trên ĩa Khi nhân mu n c p phát m t kh i d li u, nó s c p phát kh i r i ti p theo ã ư c ghi nh n trong super block. Khi m t kh i d li u ã ư c c p cho m t file thì nó ch ư c c p phát l i khi nó tr thành r i. N u không còn kh i r ng nào trên h th ng file mà l i có nhu c u cung c p kh i thì nhân s thông báo l i. 3.1.4. H tr nhi u h th ng File Các phiên b n u tiên c a Linux ch h tr m t h th ng file duy nh t ó là h th ng file minix. Sau ó, v i s m r ng nhân, c ng ng Linux ã thêm vào nó r t nhi u ki u h th ng file khác nhau và Linux tr thành m t h i u hành h tr r t nhi u h th ng file. Dư i ây là m t s h th ng file thông d ng trong các h i u hành khác nhau ư c Linux h tr .
  • 48. 4 8 ♦ H th ng file ADFS: ADFS vi t t t c a Acorn Disc Filing System là h th ng file chu n trên h i u hành RiscOS. V i s h tr này, Linux có th truy c p vào các phân vùng ĩa nh d ng theo h th ng file ADFS. ♦ H th ng file AFFS: AFFS (The Amiga Fast File System) là m t h th ng file ph bi n c a h i u hành AmigaOS phiên b n 1.3 ch y trên các máy Amiga. ♦ H th ng file CODA: CODA là m t h th ng file m ng cho phép ngư i dùng có th k t gán các h th ng file t xa và truy c p chúng như các h th ng file c c b (local). ♦ H th ng file DEVPTS: H th ng file cho Unix98 PTYs. ♦ H th ng file EFS: ây là m t d ng h th ng file s d ng cho CDROM. ♦ H th ng file EXT2: H th ng file EXT2 (The second extended filesystem) là h th ng ư c dùng ch y u trên các phiên b n c a h i u hành Linux. Chúng ta s tr l i ngiên c u h th ng file này trong các ph n sau. ♦ H th ng file HFS: ây là h th ng file ch y trên các máy Apple Macintosh. ♦ H th ng file HPFS: HPFS là h th ng file ư c s d ng trong h i u hành OS/2. Linux h tr h th ng file này m c ch c (read only). ♦ H th ng file ISOFS: ây là h th ng file ư c s d ng cho các ĩa CD. H th ng thông d ng nh t cho các ĩa CD hi n nay là ISO 9660. V i s h tr này, h th ng Linux có th truy c p d li u trên các ĩa CD. ♦ H th ng file MINIX: MINIX là h th ng file u tiên mà Linux h tr . H th ng file này ư c s d ng trong h i u hành Minix và m t s h th ng Linux cũ. ♦ H th ng file MSDOS: V i s h tr này, h th ng Linux có th truy c p ư c các phân vùng c a h i u hành MSDOS. Linux cũng có th s d ng ki u MSDOS truy c p các phân vùng c a Window 95/98 tuy nhiên khi ó, các ưu i m c a h i u hành Window s không còn giá tr ví d như tên file ch t i a 13 ký t (k c m r ng). ♦ H th ng file NFS: NFS (Network File System) là m t h th ng file trên m ng h tr vi c truy c p d li u t xa gi ng như h th ng file CODA. V i NFS, các máy ch y Linux có th chia s các phân vùng ĩa trên m ng s d ng như là các phân vùng c c b c a chính máy mình. ♦ H th ng file NTFS: V i s h tr này, h th ng Linux có th truy c p vào các phân vùng c a h i u hành Microsoft Window NT. ♦ H th ng file PROC: ây là m t h th ng file c bi t ư c Linux h tr . H th ng file PROC không chi m m t phân vùng nào c a h th ng và cũng không qu n lý các d li u lưu tr trên ĩa. PROC hi n th n i dung c a chính nhân h th ng. Các file trong h th ng file PROC lưu tr các thông tin v tr ng thái hi n hành c a nhân. Thông tin v m i m t ti n trình ang th c hi n trong h th ng ư c lưu trong m t thư m c mang tên ng v i ch s process ID c a ti n trình ó. Ngư i dùng có th s d ng h th ng file PROC l y các thông tin v nhân cũng như s a i m t s giá tr c a nhân thông qua s a i n i dung c a các file trong h th ng file này. Tuy nhiên, vi c s a i tr c ti p như trên tương i nguy hi m, d gây v h th ng. ♦ H th ng file QNX4: ây là h th ng file ư c s d ng trong h i u hành QNX 4.
  • 49. 4 9 ♦ H th ng file ROMFS: ây là các h th ng file ch c (read only) ư c s d ng ch y u cho vi c kh i t o ĩa o (ramdisk) trong quá trình kh i ng ĩa cài t. ♦ H th ng file SMB: SMB (Server Mesage Block) là m t giao th c c a Windows dùng chia s file gi a các h i u hành Windows 95/98, Windows NT và OS/2 Lan Manager. V i s h tr SMB, h i u hành Linux có th chia s cũng như truy c p các file n m trên các phân vùng c a m t máy ch y các h i u hành k trên. Nói tóm l i, SMB cũng là m t d ng h tr h th ng file m ng giúp h th ng có th chia s v i các h th ng s d ng chung giao th c SMB. ♦ H th ng file UMSDOS: H th ng file UMSDOS (Unix-like MSDOS) là h th ng file ư c m r ng t h th ng file MSDOS theo nh hư ng Unix. H th ng file này có m t s ưu i m so v i MSDOS như là h tr tên file dài, h tr vi c phân quy n, h tr các liên k t (link), h tr các file c bi t (device, pipe ...) và... H th ng file này có th ư c s d ng làm phân vùng g c c a h th ng Linux. ♦ H th ng file VFAT: VFAT chính là h th ng file m r ng c a h th ng FAT. H th ng file này ư c s d ng trong các h i u hành Windows 95/98. Như v y, ngoài kh năng h tr nhi u lo i thi t b , Linux còn có kh năng h tr nhi u ki u h th ng file. B ng cách h tr nhi u ki u h th ng file, Linux có th truy c p và x lý các file c a nhi u h i u hành khác nhau. M c dù có kh năng truy c p nhi u h th ng file khác nhau, h th ng file c a Linux v n ph i m b o cung c p cho ngư i dùng m t giao di n nh t quán i v i các file, b o v các file trên các h th ng khác nhau, t i ưu các thao tác truy c p vào thi t b ... th c hi n ư c i u này, Linux s d ng m t h th ng file c bi t g i là h th ng file o VFS (Virtual File System).
  • 50. 5 0 H th ng file o VFS ư c thi t k cung c p m t giao di n th ng nh t v các file ư c lưu tr trên các thi t b . Hình 3.3 mô t m i quan h gi a VFS v i các h th ng file th c và các thi t b lưu tr . VFS có trách nhi m cung c p cho chương trình ngư i dùng m t giao di n nh t quán v h th ng file thông qua các l nh g i h th ng (system call). M i khi có m t yêu c u truy c p file, VFS s d a vào các h th ng file th c tìm ki m file yêu c u trên các thi t b v t lý. V i m i file tìm ư c, nó th c hi n thao tác m file ó và cho tương ng file v i m t c u trúc d li u g i là i-node. VFS cung c p r t nhi u l nh g i thao tác v i h th ng file nhưng ch y u thu c vào các lo i sau: ♦ Các thao tác liên quan t i h th ng file. ♦ Các thao tác liên quan t i i-node. ♦ Các thao tác v i file ang m . ♦ Các thao tác v i vùng m d li u. 3.1.5. Liên k t tư ng trưng (l nh ln) Trong Linux có hai ki u liên k t ó là liên k t tư ng trưng (liên k t m m) và liên k t c ng. Programatic file system interface System call interface Virtual File System Buffer cache Ext2 Minix Msdos Vfat Device driver Physical hardware Inode cache Directory cache Hình 3.3. H th ng file o VFS
  • 51. 5 1 "Liên k t c ng" là m t cách g i khác i v i m t file ang t n t i (không có s phân bi t gi a file g c và file liên k t). Theo cách nói k thu t, chúng cùng chia s m t inode và inode này ch a ng t t c các thông tin v file. Không th t o m t liên k t c ng t i m t thư m c. "Liên k t tư ng trưng" là m t ki u file c bi t, trong ó, m t file liên k t th c s tham chi u theo tên n m t file khác. Có th hi u ki u file này như là m t con tr ch d n t i m t file ho c m t thư m c, và ư c s d ng thay th cho file ho c thư m c ư c tr t i. H u h t các thao tác (như m , c, ghi ...) ư c th c hi n trên các file liên k t, sau ó, nhân h th ng s t ng "tham chi u" và th c hi n trên file ích c a liên k t. Tuy nhiên, có m t s các thao tác như xóa file, file liên k t s b xóa b ch không ph i file ích c a nó. t o m t liên k t tư ng trưng, hãy s d ng l nh ln v i cú pháp như sau: ln [tùy-ch n] < ích> [tên-n i] L nh này s t o m t liên k t n thư m c/file ích v i tên file liên k t là tên-n i. N u tên-n i không có, m t liên k t v i tên file liên k t gi ng như tên file ích s ư c t o ra trong thư m c hi n th i. Các tuỳ ch n c a l nh ln: -b, --backup[=CONTROL] : t o liên k t quay tr l i cho m i file ích ang t n t i. -f, --force : xóa b các file ích ang t n t i. -d, -F, --directory : t o liên k t c ng n các thư m c (tùy ch n này ch dành cho ngư i dùng có quy n qu n tr h th ng). M t s phiên b n không có tùy ch n này. -n, --no-dereference : m t file bình thư ng ư c xem là ích liên k t t m t thư m c. -i, interactive : v n t o liên k t dù file ích ã b xóa b . -s, --symbolic : t o các liên k t tư ng trưng. --target-directory=<tên-thư-m c> : xác nh thư m c tên-thư-m c là thư m c có ch a các liên k t. -v, --verbose : hi n th tên các file trư c khi t o liên k t. --help : hi n th trang tr giúp và thoát. Ví d , mu n t o liên k t n file /usr/doc/g77/DOC v i tên file liên k t là g77manual.txt, thì gõ l nh như sau: # ln -s /usr/doc/g77/DOC g77manual.txt Khi ch y chương trình mc, các file liên k t có tên b t u b i d u " ", và khi v t sáng di chuy n n file liên k t thì tên file ư c liên k t n s hi n th bên dư i. 3.2 Quy n truy nh p thư m c và file 3.2.1 Quy n truy nh p M i file và thư m c trong Linux u có m t ch s h u và m t nhóm s h u, cũng như m t t p h p các quy n truy nh p. Cho phép thay i các quy n truy nh p và quy n s h u file và thư m c nh m cung c p truy nh p nhi u hơn hay ít hơn. Thông tin v m t file có d ng sau ( ư c hi n ra theo l nh hi n danh sách file ls -l):
  • 52. 5 2 Trong ó, dãy 10 ký t u tiên mô t ki u file và quy n truy nh p i v i t p tin ó. Theo m c nh, ngư i dùng t o m t file chính là ngư i ch (s h u) c a file ó và là ngư i có quy n s h u nó. Ngư i ch c a file có c quy n thay i quy n truy nh p hay quy n s h u i v i file ó. T t nhiên, m t khi ã chuy n quy n s h u c a mình cho ngư i dùng khác thì ngư i ch cũ không ư c phép chuy n quy n s h u và quy n truy nh p ư c n a. T p h p m t chu i có 10 ký t ã gi i thi u trên ây ư c chia ra làm 4 ph n: ki u file, các quy n truy nh p n file c a ch s h u, c a nhóm s h u và ngư i dùng khác. Có m t s ki u file trong Linux. Ký t u tiên trong t p h p 10 ký t mô t ki u file và quy n truy nh p s cho bi t file thu c ki u nào (ch cái ó ư c g i là ch cái bi u di n). B ng dư i ây s li t kê các ki u file trong Linux: Ch cái bi u di n Ki u file d b c l p s - Thư m c (directory) File ki u kh i (block-type special file) File ki u ký t (character-type special file) Liên k t tư ng trưng (symbolic link) File ư ng ng (pipe) Socket File bình thư ng (regular file) Chín ký t ti p theo trong chu i là quy n truy nh p ư c chia ra làm 3 nhóm tương ng v i quy n truy nh p c a ngư i s h u, nhóm s h u và ngư i dùng khác. Ví d , 10 ký t u tiên trong dòng ví d ngay trư c ây s ư c phân tích thành: hi u ư c chính xác quy n truy nh p có ý nghĩa như th nào i v i h th ng máy tính, ph i nh r ng Linux xem m i th u là file. N u cài t m t ng d ng, nó cũng s ư c xem như m i chương trình khác, tr m t i u: h th ng nh n bi t r ng m t ng d ng là m t chương trình kh thi, t c là nó có th ch y ư c. M t b c thư g i cho m là m t d ng file văn b n bình thư ng, nhưng T p h p quy n truy nh p S liên k t n file (thư m c) Ngư i ch file Nhóm ch file Kích thư c file (byte) Ngày gi t o file Tên file drwxr-xr-x 12 root root 4096 Oct 23 2000 LinuxVN.com Quy n c a ngư i dùng khác Ki u file: thư m c Quy n c a ngư i ch Quy n c a nhóm ch d rwx r-x r-x
  • 53. 5 3 n u thông báo cho h th ng bi t ó là m t chương trình kh thi, h th ng s c ch y chương trình (và t t nhiên là l i). Có ba lo i quy n truy nh p chính i v i thư m c/file, ó là: c (read - r), ghi (write - w) và th c hi n (execute - x). Quy n c cho phép ngư i dùng có th xem n i dung c a file v i r t nhi u chương trình khác nhau, nhưng h s không th thay i, s a ch a ho c xóa b t kỳ thông tin nào trong ó. Tuy nhiên, h có th sao chép file ó thành file c a h và s a ch a file b n sao. Quy n ghi là quy n truy nh p ti p theo. Ngư i s d ng v i quy n ghi khi truy nh p vào file có th thêm thông tin vào file. N u có quy n ghi và quy n c i v i m t file, có th so n th o l i file ó - quy n c cho phép xem n i dung, và quy n ghi cho phép thay i n i dung file. N u ch có quy n ghi, s thêm ư c thông tin vào file, nhưng l i không th xem ư c n i dung c a file. Lo i quy n truy nh p th ba là quy n th c hi n, quy n này cho phép ngư i dùng có th ch y ư c file, n u ó là m t chương trình kh thi. Quy n th c hi n c l p v i các quy n truy nh p khác, vì th hoàn toàn có th có m t chương trình v i quy n c và quy n th c hi n, nhưng không có quy n ghi. Cũng có trư ng h p m t chương trình ch có quy n th c hi n, có nghĩa là ngư i dùng có th ch y ng d ng, nhưng h không th xem ư c cách nó làm vi c hay sao chép nó. B ng dư i ây gi i thi u cách ký hi u c a các quy n truy nh p: Quy n truy nh p Ý nghĩa --- r-- r-x rw- rwx Không cho phép m t quy n truy nh p nào Ch ư c quy n c Quy n c và th c hi n (cho chương trình và shell script) Quy n c và ghi Cho phép t t c các quy n truy nh p (cho chương trình) Tuy nhiên, i v i thư m c thì ch có ba lo i ký hi u c a các quy n truy nh p là: ---, r- x và rwx, vì n i dung c a thư m c là danh sách c a các file và các thư m c con có bên trong thư m c ó. Quy n c m t thư m c là ư c xem n i dung c a thư m c ó và quy n th c hi n i v i m t thư m c là quy n tìm ư c file và thư m c con có trong thư m c. Như v y, v i ví d ang ư c xem xét, chúng ta nh n ư c ây là m t thư m c và quy n truy nh p nó ư c gi i thích như sau: Gi i thích: S h n ch trư ng h p v quy n truy nh p thư m c ư c gi i thích theo các l p lu n như sau: Quy n ngư i dùng khác: c, th c hi n (không ghi) Ki u file: thư m c Quy n c a ngư i ch : c, ghi, th c hi n Quy n c a nhóm ch : c, th c hi n (không ghi) d rwx r-x r-x
  • 54. 5 4 Hãy hình dung, gi s ch có quy n c trên thư m c, khi ó s xem ư c có nh ng file hay thư m c nào trong thư m c nhưng l i không th xem c th n i dung c a m t file hay thư m c có trên thư m c ó vì không tìm ư c nó. Ho c gi s có quy n th c hi n - quy n này s cho phép tìm ư c file có trên thư m c - nhưng l i không có quy n c i v i m t thư m c, v y thì làm th nào bi t ư c trong thư m c có nh ng file nào. 3.2.2. Các l nh cơ b n a. Thay i quy n s h u file v i l nh chown thay i quy n s h u i v i m t file, hãy s d ng l nh chown v i cú pháp như sau: chown [tïy-chän] [chñ][.nhãm] <file ...> L nh này cho phép thay ch s h u file. N u ch có tham s v ch , thì ngư i dùng ch s có quy n s h u file và nhóm s h u không thay i. N u theo sau tên ngư i ch là d u "." và tên c a m t nhóm thì nhóm ó s nhóm s h u file. N u ch có d u "." và nhóm mà không có tên ngư i ch thì ch có quy n s h u nhóm c a file thay i, lúc này, l nh chown có tác d ng gi ng như l nh chgrp (l nh chgrp ư c trình bày dư i ây). Các tùy ch n c a l nh chown: -c, --changes : hi n th dòng thông báo ch v i các file mà l nh làm thay i s h u (s thông báo hi n ra có th ít hơn trư ng h p -v, -verbosr). -f, --silent, --quiet : b qua h u h t các thông báo l i. -R, --recursive : th c hi n i quy n s h u i v i thư m c và file theo quy. -v, --verbose : hi n th dòng thông báo v i m i file liên quan mà chown tác ng t i (có ho c không thay i s h u). --help : ưa ra trang tr giúp và thoát. Ví d , thư m c LinuxVN.com có thông tin v các quy n truy nh p như sau: drwxr-xr-x 12 thu root 4096 Oct 23 2000 LinuxVN.com Ngư i s h u hi n t i thư m c LinuxVN.com là ngư i dùng thu. ngư i dùng lan là ch s h u thư m c trên, hãy gõ l nh: # chown lan LinuxVN.com Khi ó, n u dùng l nh ls thì thông tin v thư m c LinuxVN.com s có d ng: drwxr-xr-x 12 lan root 4096 Oct 23 2000 LinuxVN.com v i ngư i s h u thư m c bây gi là ngư i dùng lan. Khi chuy n quy n s h u file cho m t ngư i khác, ngư i ch cũ m t quy n s h u file ó. b. Thay i quy n s h u nhóm v i l nh chgrp Các file (và ngư i dùng) còn thu c vào các nhóm, ây là phương th c truy nh p file thu n ti n cho nhi u ngư i dùng nhưng không ph i t t c ngư i dùng trên h th ng. Khi ăng nh p, m c nh s là thành viên c a m t nhóm ư c thi t l p khi siêu ngư i dùng root t o tài kho n ngư i dùng. Cho phép m t ngư i dùng thu c nhi u nhóm khác nhau, nhưng m i l n ăng nh p ch là thành viên c a m t nhóm.
  • 55. 5 5 thay i quy n s h u nhóm i v i m t ho c nhi u file, hãy s d ng l nh chgrp v i cú pháp như sau: chgrp [tùy-ch n] {nhóm|--reference=nhómR} <file...> L nh này cho phép thay thu c tính nhóm s h u c a file theo tên nhóm ư c ch ra tr c ti p theo tham s nhóm ho c gián ti p qua thu c tính nhóm c a file có tên là nhómR. Các tùy ch n c a l nh là (m t s tương t như l nh chown): -c, --changes : hi n th dòng thông báo ch v i các file mà l nh làm thay i s h u (s thông báo hi n ra có th ít hơn trư ng h p -v, -verbosr). -f, --silent, --quiet : b qua h u h t các thông báo l i. -R, --recursive : th c hi n i quy n s h u i v i thư m c và file theo quy. -v, --verbose : hi n th dòng thông báo v i m i file liên quan mà chgrp tác ng t i (có ho c không thay i s h u). --help : hi n th trang tr giúp và thoát Tham s --reference=nhómR cho th y cách gián ti p thay nhóm ch c a file theo nhóm ch c a m t file khác (tên là nhómR) là cách th c ư c ưa chu ng hơn. Tham s này là xung kh c v i tham s nhóm c a l nh. c. Thay i quy n truy c p file v i l nh chmod Cú pháp l nh chmod có ba d ng: chmod [tùy-ch n] <mod [,mod]...> <file...> chmod [tùy-ch n] <mod-h -8> <file...> chmod [tùy-ch n] --reference=nhómR <file...> L nh chmod cho phép xác l p quy n truy nh p theo ki u (mode) trên file. D ng u tiên là d ng xác l p tương i, d ng th hai là d ng xác l p tuy t i và d ng cu i cùng là d ng gián ti p ch d n theo quy n truy nh p c a file nhómR. Các tùy ch n c a l nh chmod ư c li t kê như dư i ây và có ý nghĩa tương t các tuỳ ch n tương ng c a các l nh chown, chgrp: -c, --changes -f, --silent, --quiet -v, --verbose -R, --recursive --help và tham s --reference=RFILE cũng ý nghĩa gián ti p như trong l nh chgrp. Gi i thích v hai cách xác l p quy n truy nh p file trong l nh chmod như sau: xác l p tuy t i (dùng h th ng mã s vi t theo h cơ s 8 bi u di n cho các quy n truy nh p) và xác l p tương i (dùng các ch cái bi u di n quy n truy nh p). Cách xác l p tương i
  • 56. 5 6 Cách xác l p tương i là d nh theo ý nghĩa c a n i dung các mod và ch nh ng thay i th c s m i ư c bi u di n trong l nh. Ba h p sau ây s gi i thích các ch cái bi u di n mod theo cách xác l p tương i. Có th k t h p các m c t h p th nh t và h p th ba v i m t m c t h p th hai t o ra m t mod. Ví d , n u mu n thêm quy n ghi i v i file test cho t t c ngư i dùng trong nhóm s h u, hãy ch n g cho nhóm s h u, + cho thêm quy n truy nh p, và w cho quy n ghi. Lúc ó l nh chmod s có d ng sau: chmod g+w test Cách xác l p tương i trong l nh chmod g n gi ng như m t menu có nhi u m c ch n khác nhau, cho phép k t h p có ư c s l a ch n theo yêu c u. N u quy t nh g b quy n c và th c hi n trên file test cho nh ng ngư i không cùng nhóm, hãy ch n o cho ngư i dùng khác, - g b quy n truy nh p, và r,x cho quy n c và th c hi n. L nh chmod s là: chmod o-rx test Cách xác l p tuy t i i v i ngư i dùng hi u sơ b v bi u di n s trong h cơ s 8 thì cách xác l p tuy t i l i ư c ưa chu ng hơn. Ph n 3.2.1. cho bi t bi u di n quy n truy nh p file thông qua dãy g m 9 v trí dư i d ng rwxrwxrwx, trong ó t ng c m 3 v trí theo th t tương ng v i: ch s h u, nhóm s h u và ngư i dùng khác. Như v y thu c tính quy n truy nh p c a m t file có th bi u di n thành 9 bít nh phân trong ó bít có giá tr 1 thì quy n ó ư c xác nh, ngư c l i thì quy n ó b tháo b . Như v y, ch s h u tương ng v i 3 bít u tiên, nhóm s h u tương ng v i 3 bít gi a, ngư i dùng khác tương ng v i 3 bít cu i. M i c m 3 bít như v y cho m t ch s h 8 (nh n giá tr t 0 n 7) và thu c tính quy n truy nh p tương ng v i 3 ch s h 8. Ví d , c p 3 s h 8 là 755 tương ng v i dòng 9 bít 111101101 v i 111 cho ch s h u, 101 cho nhóm s h u, 101 cho ngư i dùng khác. Ví d l nh: chmod 753 memo1 t thu c tính quy n truy nh p i v i file memo1 là rwxr-xr-x. d xác l p 3 ch s h 8 áp d ng cách tính như sau: Quy n truy c p u=user (ngư i s h u) g=group (nhóm s h u) o=other (ngư i khác) a=all (t t c ngư i dùng) Thao tác thay i + (thêm quy n) - (g b quy n) = (xác nh n quy n) Ki u truy c p r=read (quy n c) w=write (quy n ghi) x=execute (quy n th c hi n)
  • 57. 5 7 Quy n Ch s h 8 Quy n Ch s h 8 Ch c 4 Ch c và ghi 6 Ch ghi 2 Ch c và th c hi n 5 Ch th c hi n 1 Ch ghi và th c hi n 3 Không có quy n nào 0 c, ghi và th c hi n 7 d. ăng nh p vào m t nhóm ngư i dùng m i v i l nh newgrp Linux cho phép m t ngư i dùng có th là thành viên c a m t ho c nhi u nhóm ngư i dùng khác nhau, trong ó có m t nhóm ư c g i là nhóm kh i ng. i u này ư c m b o khi th c hi n l nh adduser ho c usersdd. Tuy nhiên, t i m t th i i m, m t ngư i dùng thu c vào ch m t nhóm. Khi m t ngư i dùng ăng nh p, h th ng ng m nh ngư i dùng ó là thành viên c a nhóm kh i ng, và có quy n truy nh p i v i nh ng file thu c quy n s h u c a nhóm kh i ng ó. N u mu n s d ng quy n s h u theo các nhóm khác i v i nh ng file thì ngư i dùng ph i chuy n i thành thành viên c a m t nhóm nh ng nhóm ã ư c g n v i ngư i dùng. L nh newgr cho phép ngư i dùng chuy n sang nhóm ngư i dùng khác ã g n v i mình v i cú pháp: newgrp [nhóm] trong ó nhóm là m t tên nhóm ngư i dùng t n t i trong h th ng. Ví d , m t ngư i dùng là thành viên c a hai nhóm user và installer, v i user là nhóm kh i ng. Khi ăng nh p, ngư i dùng ó có tư cách là thành viên c a nhóm user. Khi mong mu n s d ng m t s các chương trình thu c quy n s h u c a nhóm installer, ngư i dùng c n gõ l nh sau: # newgrp installer N u ngư i dùng nói trên c chuy n vào m t nhóm mà ngư i dùng ó không là thành viên, ch ng h n dùng l nh: # newgrp hot2 thì Linux s ưa ra m t khuy n cáo thân thi n như sau: newgrp: Sorry 3.3 Thao tác v i thư m c Như ã ư c gi i thi u (m c 3.1.1.), Linux t ch c h th ng file theo cách s d ng các thư m c. M c này b t u b ng vi c gi i thi u m t s thư m c chính và tác d ng c a chúng trong h th ng Linux. Sau ó m t s l nh thao tác v i thư m c cơ b n nh t ư c trình bày. 3.3.1 M t s thư m c c bi t * Thư m c g c / ây là thư m c g c ch a ng t t c các thư m c con có trong h th ng.
  • 58. 5 8 * Thư m c /root Thư m c /root có th ư c coi là "thư m c riêng" c a siêu ngư i dùng. Thư m c này ư c s d ng lưu tr các file t m th i, nhân Linux và nh kh i ng, các file nh phân quan tr ng (nh ng file ư c s d ng n trư c khi Linux có th g n k t n phân vùng /user), các file ăng nh p quan tr ng, b m in cho vi c in n, hay vùng lưu t m cho vi c nh n và g i email. Nó cũng ư c s d ng cho các vùng tr ng t m th i khi th c hi n các thao tác quan tr ng, ví d như khi xây d ng (build) m t gói RPM t các file RPM ngu n. * Thư m c /bin Trong Linux, chương trình ư c coi là kh thi n u nó có th th c hi n ư c. Khi m t chương trình ư c biên d ch, nó s có d ng là file nh phân. Như v y, chương trình ng d ng trong Linux là m t file nh phân kh thi. Chính vì l ó, nh ng nhà phát tri n Linux ã quy t nh ph i t ch c m t thư m c "binaries" lưu tr các chương trình kh thi có trên h th ng, ó chính là thư m c /bin. Ban u, thư m c /bin (bin là vi t t t c a t binary) là nơi lưu tr các file nh phân kh thi. Nhưng theo th i gian, ngày càng có nhi u hơn các file kh thi có trong Linux, do ó, có thêm các thư m c như /sbin, /usr/bin ư c s d ng lưu tr các file ó. * Thư m c /dev M t ph n không th thi u trong b t kỳ máy tính nào ó là các trình i u khi n thi t b . Không có chúng, s không th có ư c b t kỳ thông tin nào trên màn hình c a (các thông tin có ư c do trình i u khi n thi t b hi n th ưa ra). Cũng không th nh p ư c thông tin (nh ng thông tin do trình i u khi n thi t b bàn phím c và chuy n t i h th ng), và cũng không th s d ng ĩa m m c a ( ư c qu n lý b i trình i u khi n ĩa m m). T t c các trình i u khi n thi t b u ư c lưu tr trong thư m c /dev. * Thư m c /etc Qu n tr h th ng trong Linux không ph i là ơn gi n, ch ng h n như vi c qu n lý tài kho n ngư i dùng, v n b o m t, trình i u khi n thi t b , c u hình ph n c ng, v.v.. gi m b t ph c t p, thư m c /etc ã ư c thi t k lưu tr t t c các thông tin hay các file c u hình h th ng. * Thư m c /lib Linux có m t trung tâm lưu tr các thư vi n hàm và th t c, ó là thư m c /lib. * Thư m c /lost+found M t file ư c khôi ph c sau khi có b t kỳ m t v n ho c g p m t l i v ghi ĩa trên h th ng u ư c lưu vào thư m c này. * Thư m c /mnt Thư m c /mnt là nơi k t n i các thi t b (ví d ĩa c ng, ĩa m m...) vào h th ng file chính nh l nh mount. Thông thư ng các thư m c con c a /mnt chính là g c c a các h th ng file ư c k t n i: /mnt/floppy: ĩa m m, /mnt/hda1: vùng u tiên c a ĩa c ng th nh t (hda), /mnt/hdb3: vùng th ba c a ĩa c ng th 2 (hdb) ...
  • 59. 5 9 * Thư m c /tmp Thư m c /tmp ư c r t nhi u chương trình trong Linux s d ng như m t nơi lưu tr các file t m th i. Ví d , n u ang so n th o m t file, chương trình s t o ra m t file là b n sao t m th i (b n nháp) c a file ó và lưu vào trong thư m c /tmp. Vi c so n th o th c hi n tr c ti p trên file t m th i này và sau khi so n th o xong, file t m th i s ư c ghi è lên file g c. Cách th c như v y b o m s an toàn i v i file c n so n th o. * Thư m c /usr Thông thư ng thì thư m c /usr là trung tâm lưu tr t t c các l nh hư ng n ngư i dùng (user-related commands). Tuy nhiên, ngày nay th t khó xác nh trong thư m c này có nh ng th gì, b i vì h u h t các file nh phân c n cho Linux u ư c lưu tr ây, trong ó áng chú ý là thư m c con /usr/src bao g m các thư m c con ch a các chương trình ngu n c a nhân Linux. * Thư m c /home Thư m c này ch a các thư m c cá nhân c a ngư i dùng: m i ngư i dùng tương ng v i m t thư m c con ây, tên ngư i dùng ư c l y làm tên c a thư m c con. * Thư m c /var Thư m c /var ư c s d ng lưu tr các file ch a các thông tin luôn luôn thay i, bao g m b m in, vùng lưu t m th i cho vi c nh n và g i thư (mail), các khóa quá trình, v.v.. * Thư m c /boot Là thư m c ch a nhân c a h th ng (Linux-*.*.), System.map (file ánh x n các driver n p các h th ng file khác), nh (image) c a h th ng file dùng cho initrd (ramdisk), trình i u khi n cho các thi t b RAID (m t thi t b g m m t m ng các ĩa c ng tăng t c và an toàn khi ghi d li u), các b n sao lưu boot record c a các phân vùng ĩa khác. Thư m c này cho phép kh i ng và n p l i b t kỳ trình i u khi n nào ư c yêu c u c các h th ng file khác. * Thư m c /proc ây là thư m c dành cho nhân (kernel) c a h i u hành và th c t ây là m t h th ng file c l p do nhân kh i t o. * Thư m c /misc và thư m c /opt Cho phép lưu tr m i i tư ng vào hai thư m c này. * Thư m c /sbin Thư m c lưu gi các file h th ng thư ng t ng ch y. 3.3.2 Các l nh cơ b n v thư m c * Xác nh thư m c hi n th i v i l nh pwd Cú pháp l nh:
  • 60. 6 0 pwd L nh này cho bi t hi n ngư i dùng ang trong thư m c nào và hi n ra theo d ng m t ư ng d n tuy t i. Ví d , gõ l nh pwd t i d u nh c l nh sau khi ngư i dùng lan v a ăng nh p thì màn hình hi n th như sau: # pwd /home/lan # * Xem thông tin v thư m c v i l nh ls S d ng l nh ls và m t s các tùy ch n c a nó là có th bi t ư c m i thông tin v m t thư m c. Cú pháp l nh: ls [tùy-ch n] [file]... L nh này ưa ra danh sách các file liên quan n tham s file trong l nh. Trư ng h p ph bi n tham s file là m t thư m c, tuy nhiên trong m t s trư ng h p khác, tham s file xác nh nhóm (khi s d ng các mô t nhóm *, ? và c p [ và ]); n u không có tham s file, m c nh danh sách các file có trong thư m c hi n th i s ư c hi n th . Các tùy ch n c a l nh: -a : li t kê t t c các file, bao g m c file n. -l : ưa ra thông tin y nh t v các file và thư m c. -s : ch ra kích thư c c a file, tính theo kh i (1 kh i = 1204 byte). -F : xác nh ki u file (/ = thư m c, * = chương trình kh thi). -m : li t kê các file ư c ngăn cách nhau b i d u ",". -C : ưa ra danh sách các file và thư m c theo d ng c t (hai thư m c g n nhau ư c x p vào m t c t). -1 : hi n th m i file ho c thư m c trên m t dòng. -t : s p x p các file và thư m c trong danh sách theo th t v th i gian ư c s a i g n ây nh t. -x : ưa ra danh sách các file và thư m c theo d ng c t (hai thư m c g n nhau ư c x p trên hai dòng u c a hai c t k nhau). -r : s p x p danh sách hi n th theo th t ngư c l i. -R : li t kê l n lư t các thư m c và n i dung c a các thư m c. Ví d , l nh # ls -l s hi n th danh sách y nh t v các file và thư m c có trong thư m c hi n th i. total 108 drwxr-xr-x 12 thu root 4096 Oct 23 2000 LinuxVN.com drwxr-xr-x 2 root root 4096 Oct 31 2000 bin drwxr-xr-x 2 root root 4096 Dec 11 16:54 boot drwxr-xr-x 7 root root 36864 Dec 11 16:54 dev drwxr-xr-x 43 root root 4096 Dec 11 16:55 etc
  • 61. 6 1 drwxr-xr-x 5 root root 4096 Dec 11 16:57 home drwxr-xr-x 4 root root 4096 Oct 31 2000 lib drwxr-xr-x 2 root root 16384 Oct 31 2000 lost+found drwxr-xr-x 2 root root 0 Dec 11 16:54 misc drwxr-xr-x 5 root root 4096 Oct 31 2000 mnt drwxr-xr-x 2 root root 4096 Aug 23 12:03 opt dr-xr-xr-x 56 root root 0 Dec 11 11:54 proc drwxr-x--- 12 root root 4096 Dec 11 16:55 root drwxr-xr-x 3 root root 4096 Oct 31 2000 sbin drwxr-xr-x 3 root root 4096 Oct 31 2000 tftpboot drwxrwxrwx 8 root root 4096 Dec 11 16:58 tmp drwxr-xr-x 22 root root 4096 Oct 31 2000 usr drwxr-xr-x 22 root root 4096 Oct 31 2000 var Dòng u tiên "total 108" cho bi t t ng s kh i (1024 byte) trên ĩa lưu tr các file trong danh sách (14*4+36+16=108). M i dòng ti p theo trình bày thông tin v m i file hay thư m c con. Các thông tin này ã ư c gi i thi u trư c ây. Ch ng h n, ý nghĩa c a m i trư ng trên ây ã ư c gi i thích trong m c 3.2.1. Khi gõ l nh: # ls [is]* cho danh sách các file và thư m c con có tên b t u b ng ho c ch cái i ho c ch cái s có trong thư m c hi n th i: info-dir initlog.conf inittab services shadow shadow- shells smb.conf sysctl.conf syslog.conf * L nh t o thư m c mkdir L nh mkdir t o m t thư m c v i cú pháp: mkdir [tùy-ch n] <thư-m c> L nh này cho phép t o m t thư m c m i n u thư m c ó chưa th c s t n t i. t o m t thư m c, c n c t tên và v trí c a nó trên h th ng file (v trí m c nh là thư m c hi n th i). N u thư m c ã t n t i, h th ng s thông báo cho bi t. Các tùy ch n: Ki u file và quy n truy nh p S liên k t n file (thư m c) Ngư i ch file Nhóm ch file Kích thư c file (byte) Ngày gi t o file Tên file drwxr-xr-x 22 root root 4096 Oct 31 2000 var
  • 62. 6 2 -m, --mode=Mod : thi t l p quy n truy nh p Mod như trong l nh chmod nhưng không cho quy n rwxrwxrwx. -p, --parents : t o các thư m c c n thi t mà không thông báo l i khi nó ã t n t i. --verbose : hi n th các thông báo cho m i thư m c ư c t o. --help : ưa ra trang tr giúp và thoát. Ví d , n u mu n t o thư m c test trong thư m c home, hãy gõ l nh sau: # mkdir /home/test * L nh xóa b thư m c rmdir Như ã bi t, l nh mkdir t o ra m t thư m c m i, và v i ng u thì l nh rmdir ư c dùng xóa b m t thư m c. Cú pháp l nh: rmdir [tùy-ch n[ <thư-m c> Có th xóa b b t kỳ thư m c nào n u có quy n ó. Lưu ý r ng, thư m c ch b xóa khi nó "r ng", t c là không t n t i file hay thư m c con nào trong ó. Không có cách gì khôi ph c l i các thư m c ã b xóa, vì th hãy suy nghĩ c n th n trư c khi quy t nh xóa m t thư m c. Các tùy ch n c a l nh: --ignore-fail-on-non-empty : b qua các l i n u xóa m t thư m c không r ng. -p, --parents : xóa b m t thư m c, sau ó l n lư t xóa b ti p các thư m c có trên ư ng d n ch a thư m c v a xóa. Ví d , dòng l nh rmdir -p /a/b/c s tương ương v i ba dòng l nh rmdir /a/b/c, rmdir /a/b, rmdir /a (v i i u ki n các thư m c là r ng). --verbose : ưa ra thông báo khi xóa m t thư m c. --help : hi n th trang tr giúp và thoát. Ví d : # rmdir -p /test/test1/test2 rmdir: /: No such file or directory # Dòng l nh trên s l n lư t xóa ba thư m c test2, test1, test và hi n th thông báo trên màn hình k t qu c a l nh. * L nh i tên thư m c mv Cú pháp l nh: mv <tên-cũ> <tên-m i> L nh này cho phép i tên m t thư m c t tên-cũ thành tên-m i. Ví d , l nh # mv LinuxVN.com LinuxVN s i tên thư m c LinuxVN.com thành LinuxVN. N u s d ng l nh mv i tên m t thư m c v i m t cái tên ã ư c t cho m t file thì l nh s g p l i. N u tên m i trùng v i tên m t thư m c ang t n t i thì n i dung c a thư m c ư c i tên s ghi è lên n i dung c a thư m c trùng tên.
  • 63. 6 3 3.4. Các l nh làm vi c v i file 3.4.1 Các ki u file có trong Linux M c 3.1.2. ã trình bày sơ lư c v ki u c a các file. Như ã ư c gi i thi u, có r t nhi u file khác nhau trong Linux, nhưng bao gi cũng t n t i m t s ki u file c n thi t cho h i u hành và ngư i dùng, dư i ây gi i thi u l i m t s các ki u file cơ b n. File ngư i dùng (user data file): là các file t o ra do ho t ng c a ngư i dùng khi kích ho t các chương trình ng d ng tương ng. Ví d như các file thu n văn b n, các file cơ s d li u hay các file b ng tính. File h th ng (system data file): là các file lưu tr thông tin c a h th ng như: c u hình cho kh i ng, tài kho n c a ngư i dùng, thông tin thi t b ... thư ng ư c c t trong các t p d ng văn b n ngư i dùng có th can thi p, s a i theo ý mình. File th c hi n (executable file): là các file ch a mã l nh hay ch th cho máy tính th c hi n. File th c hi n lưu tr dư i d ng mã máy mà ta khó có th tìm hi u ư c ý nghĩa c a nó, nhưng t n t i m t s công c "hi u" ư c các file ó. Khi dùng trình ng d ng mc (Midnight Commander, chương 8), file th c hi n ư c b t u b i d u (*) và thư ng có màu xanh l c. Thư m c hay còn g i là file bao hàm (directory): là file bao hàm các file khác và có c u t o hoàn toàn tương t như file thông thư ng khác nên có th g i là file. Trong mc, file bao hàm thư ng có màu tr ng và b t u b ng d u ngã (~) ho c d u chia (/). Ví d : /, /home, /bin, /usr, /usr/man, /dev ... File thi t b (device file): là file mô t thi t b , dùng như là nh danh ch ra thi t b c n thao tác. Theo quy ư c, file thi t b ư c lưu tr trong thư m c /dev. Các file thi t b hay g p trong thư m c này là tty (teletype - thi t b truy n thông), ttyS (teletype serial - thi t b truy n thông n i ti p), fd0, fd1, ... (floppy disk- thi t b ĩa m m), hda1, hda2, ... hdb1, hdb2, ... (hardisk - thi t b c ng theo chu n IDE; a, b,... ánh s ĩa v t lý; 1, 2, 3... ánh s logic). Trong mc, file thi t b có màu tím và b t u b ng d u c ng (+). File liên k t (linked file): là nh ng file ch a tham chi u n các file khác trong h th ng t p tin c a Linux. Tham chi u này cho phép ngư i dùng tìm nhanh t i file thay vì t i v trí nguyên th y c a nó. Hơn n a, ngư i ta có th g n vào ó các thông tin ph tr làm cho file này có tính năng tr i hơn so v i tính năng nguyên th y c a nó. Ta th y lo i file này gi ng như khái ni m shortcut trong MS-Windows98. Không gi ng m t s h i u hành khác (như MS-DOS ch ng h n), Linux qu n lý th i gian c a t p tin qua các thông s th i gian truy nh p (accesed time), th i gian ki n t o (created time) và th i gian s a i (modified time). 3.4.2. Các l nh t o file Trong Linux có r t nhi u cách t o file, sau ây là các cách hay ư c dùng.
  • 64. 6 4 * T o file v i l nh touch L nh touch có nhi u ch c năng, trong ó m t ch c năng là giúp t o file m i trên h th ng: touch r t h u ích cho vi c t ch c m t t p h p các file m i. Cú pháp l nh: touch <file> Th c ch t l nh này có tác d ng dùng c p nh t th i gian truy nh p và s a ch a l n cu i c a m t file. Vì lý do này, các file ư c t o b ng l nh touch u ư c s p x p theo th i gian s a i. N u s d ng l nh touch i v i m t file chưa t n t i, chương trình s t o ra file ó. S d ng b t kỳ trình so n th o nào so n th o file m i. Ví d , dùng l nh touch t o file newfile: # touch newfile * T o file b ng cách i hư ng u ra c a l nh (>) Cách này r t h u ích n u mu n lưu k t qu c a m t l nh ã th c hi n. g i k t qu c a m t l nh vào m t file, dùng d u ">" theo nghĩa chuy n hư ng l i ra chu n. Ví d , ưa k t qu c a l nh ls -l /bin vào file /home/thu/lenhls b ng cách gõ: # ls -l /bin > /home/thu/lenhls Linux t ng t o n u file lenhls chưa có, trong trư ng h p ngư c l i, n i dung file cũ s b th ch b i k t qu c a l nh. # ls -l /bin >/home/thu/lenhls N u mu n b sung k t qu vào cu i file thay vì thay th n i dung file, hãy s d ng d u ">>". Ví d , l nh # ls -l /bin >> /home/thu/lenhls ưa các dòng danh sách file trong thư m c /bin vào cu i n i dung c a file /home/thu/lenhls. * T o file v i l nh cat L nh cat tuy ơn gi n nhưng r t h u d ng trong Linux. Chúng ta có th s d ng l nh này l y thông tin t u vào (bàn phím...) r i k t xu t ra file ho c các ngu n khác (màn hình ...), hay xem n i dung c a m t file ... Ph n này trình bày tác d ng c a l nh cat i v i vi c t o file. Cú pháp l nh: cat > <file> Theo ng m nh, l nh này cho phép l y thông tin u vào t bàn phím r i xu t ra màn hình. So n th o n i dung c a m t file b ng l nh cat t c là ã i hư ng u ra c a l nh t màn hình vào m t file. Ngư i dùng gõ n i dung c a file ngay t i d u nh c màn hình và gõ CTRL+d k t thúc vi c so n th o. Như c i m c a cách t o file này là nó không cho phép s a l i, ví d n u mu n s a m t l i chính t trên m t dòng, ch có cách là xóa n v trí c a l i và gõ l i n i dung v a b xóa. Ví d . t o file newfile trong thư m c /home/vd b ng l nh cat. # cat > /home/vd/newfile This is a example of cat command #
  • 65. 6 5 Sau khi so n th o xong, gõ Enter và CTRL+d tr v d u nh c l nh, n u không gõ Enter thì ph i gõ CTRL+d hai l n. Có th s d ng luôn l nh cat xem n i dung c a file v a so n th o: # cat /home/vd/newfile This is a example of cat command # 3.4.3 Các l nh thao tác trên file * Sao chép file v i l nh cp L nh cp có hai d ng như sau: cp [tùy-ch n] <file-ngu n> ... <file- ích> cp [tùy-ch n] --target-directory=<thư-m c> <file-ngu n>... L nh này cho phép sao file-ngu n thành file- ích ho c sao chép t nhi u file-ngu n vào m t thư m c ích (tham s <file- ích> hay <thư-m c>). D ng th hai là m t cách vi t khác i th t hai tham s v trí. Các tùy ch n: -a, --archive : gi ng như -dpR (t h p ba tham s -d, -p, -R, như dư i ây). -b, --backup[=CONTROL] : t o file lưu cho m i file ích n u như nó ang t n t i. -d, --no-dereference : duy trì các liên k t. -f, --force : ghi è file ích ang t n t i mà không nh c nh . -i, --interactive : có thông báo nh c nh trư c khi ghi è. -l, --link : ch t o liên k t gi a file- ích t file-ngu n mà không sao chép. -p, --preserve : duy trì các thu c tính c a file-ngu n sang file- ích. -r : cho phép sao chép m t cách quy file thông thư ng. -R : cho phép sao chép m t cách quy thư m c. -s, --symbolic-link : t o liên k t tư ng trưng thay cho vi c sao chép các file. -S, --suffix=<h u-t > : b qua các h u t thông thư ng (ho c ư c ch ra). -u, --update : ch sao chép khi file ngu n m i hơn file ích ho c khi file ích chưa có. -v, --verbose : ưa ra thông báo v quá trình sao chép. --help : hi n th trang tr giúp và thoát. File ích ư c t o ra có cùng kích thư c và các quy n truy nh p như file ngu n, tuy nhiên file ích có th i gian t o l p là th i i m th c hi n l nh nên các thu c tính th i gian s khác. Ví d , l nh # cp /home/ftp/vd /home/test/vd1 N u v trí ích, mô t y tên file ích thì n i dung file ngu n s ư c sao chép sang file ích. Trong trư ng h p ch ưa ra v trí file ích ư c t trong thư m c nào thì tên c a file ngu n s là tên c a file ích. # cp /home/ftp/vd /home/test/
  • 66. 6 6 Trong ví d này, tên file ích s là vd nghĩa là t o m t file m i /home/test/vd. N u s d ng l nh này sao m t thư m c, s có m t thông báo ư c ưa ra cho bi t ngu n là m t thư m c và vì v y không th dùng l nh cp sao chép. # cp . newdir cp: .: omitting directory Ví d v vi c l nh cp cho phép sao nhi u file cùng m t lúc vào m t thư m c. # cp vd vd1 newdir # pwd /newdir # ls -l total 8 -rw-r--r-- 1 root ftp 15 Nov 14 11:00 vd -rw-r--r-- 1 root ftp 12 Nov 14 11:00 vd1 Lưu ý: i v i nhi u l nh làm vi c v i file, khi gõ l nh có th s d ng kí hi u mô t nhóm xác nh m t nhóm file làm cho tăng hi u l c c a các l nh ó. Ví d , l nh: # cp * bak th c hi n vi c sao chép m i file có trong thư m c hi n th i sang thư m c con c a nó có tên là bak. Dùng l nh # cp /usr/src/linux-2.2.14/include/linux/*.h bak cho phép sao chép m i file v i tên có hai kí hi u cu i cùng là ".h" sang thư m c con bak. Chính vì lí do nói trên, dù trong nhi u l nh tuy không nói n vi c s d ng kí hi u mô t nhóm file nhưng chúng ta có th áp d ng chúng n u i u ó không trái v i suy lu n thông thư ng. Do nh ng tình hu ng như th là quá phong phú cho nên không th gi i thi u h t trong tài li u. Chúng ta chú ý m t gi i pháp là m i khi s d ng m t l nh nào ó, nên th nghi m cách th c hi u qu này. * i tên file v i l nh mv Cú pháp l nh i tên file: mv <tên-cũ> <tên-m i> L nh này cho phép i tên file t tên cũ thành tên m i. Ví d : # mv vd newfile L nh này s i tên file vd thành newfile. Trong trư ng h p file newfile ã t n t i, n i dung c a file vd s ghi è lên n i dung c a file newfile. * Xóa file v i l nh rm L nh rm là l nh r t "nguy hi m" vì trong Linux không có l nh khôi ph c l i nh ng gì ã xóa, vì th hãy c n tr ng khi s d ng l nh này. Cú pháp l nh:
  • 67. 6 7 rm [tùy-ch n] <file> ... L nh rm cho phép xóa b m t file ho c nhi u file. Các tùy ch n: -d, --directory : lo i b liên k t c a thư m c, k c thư m c không r ng. Ch có siêu ngư i dùng m i ư c phép dùng tùy ch n này. -f, --force : b qua các file (xác nh qua tham s file) không t n t i mà không c n nh c nh . -i, --interactive : nh c nh trư c khi xóa b m t file. -r, -R, --recursive : xóa b n i dung c a thư m c m t cách quy. -v, --verbose : ưa ra các thông báo v quá trình xóa file. --help : hi n th trang tr giúp và thoát. L nh rm cho phép xóa nhi u file cùng m t lúc b ng cách ch ra tên c a các file c n xóa trong dòng l nh (ho c dùng kí ki u mô t nhóm). Ví d , dùng l nh ls xem danh sách các file trong thư m c hi n th i: # ls ld-Linux.so.1 ld-Linux.so.1.9.5 ld-Linux.so.2 ld.so ld.so.1.9.5 libBrokenLocale-2.1.3.so libBrokenLocale.so.1 libNoVersion-2.1.3.so vd2.txt libnss_dns-2.1.3.so libnss_dns.so.1 libnss_dns.so.2 libnss_files-2.1.3.so libnss_files.so.1 libnss_files.so.2 libnss_hesiod-1.3.so telex.o S d ng l nh xóa file vd2.txt sau ây: # rm vd2.txt telex.o và sau ó dùng l nh ls xem l i danh sách file: # ls ld-Linux.so.1 ld-Linux.so.1.9.5 ld-Linux.so.2 ld.so ld.so.1.9.5 libBrokenLocale-2.1.3.so libBrokenLocale.so.1 libNoVersion-2.1.3.so Libnss_dns-2.1.3.so Libnss_dns.so.1 Libnss_dns.so.2 Libnss_files-2.1.3.so Libnss_files.so.1 Libnss_files.so.2 Libnss_hesiod-1.3.so telex.o Dùng l nh # rm bak/*.h xóa m i file v i tên có hai kí hi u cu i cùng là ".h" trong thư m c con bak.
  • 68. 6 8 * L nh m t và dòng trong file wc Linux có l nh wc dùng m s ký t , s t , hay s dòng trong m t file. Cú pháp l nh: wc [tùy-ch n] [file]... L nh hi n ra s lư ng dòng, s lư ng t , s lư ng ký t có trong m i file, và m t dòng tính t ng n u có nhi u hơn m t file ư c ch ra. N u không có tùy ch n nào thì m c nh ưa ra c s dòng, s t và s ký t . Ng m nh khi không có tên file trong l nh thì s c và m trên thi t b vào chu n. Các tuỳ ch n: -c, --byte, --chars : ưa ra s ký t trong file. -l, --lines : ưa ra s dòng trong file. -L, --max-line-length : ưa ra chi u dài c a dòng dài nh t trong file. -w, --words : ưa ra s t trong file. --help : hi n th trang tr giúp và thoát. Ví d , sau khi gõ l nh: # wc /home/lan/mau/mau1 xu t hi n dòng thông báo: 11 64 293 /home/lan/mau/mau1 Dòng thông báo trên cho bi t file mau1 có 293 ký t , s 64 t và có 11 dòng. Ví d sau khi gõ l nh: # wc ngư i dùng gõ ti p các dòng như sau: This is a example of wc command without [namefile] sau ó ngư i dùng gõ c p phím Ctrl-d k t thúc thì th y dòng thông báo hi n ra: 2 9 49 Khi gõ l nh wc mà không có m t tham s nào, m c nh s so n th o tr c ti p n i dung trên thi t b vào chu n. Dùng CTRL+d k t thúc vi c so n th o, k t qu s hi n th lên màn hình như ví d trên. # wc /home/lan/vd/vdcalj /home/lan/vd/vdwc 8 41 192 /home/lan/vd/vdcalj 24 209 1473 /home/lan/vd/vdwc 32 250 1665 total L nh trên m s ký t , s t , s dòng trên m i file ư c ch ra, và dòng cu i cùng hi n th t ng s dòng, s t , s ký t m ư c. B ng cách k t h p l nh wc v i m t s l nh khác, có th có nhi u cách bi t ư c nh ng thông tin c n thi t. Ch ng h n: k t h p v i l nh ls xác nh s file có trong m t thư m c: # ls | wc -l 37
  • 69. 6 9 dòng l nh trên cho bi t trong thư m c ch c a có 36 file (do dòng u tiên k t qu thông báo c a l nh ls không xác nh m t file). k t h p v i l nh cat bi t s tài kho n cá nhân có trên máy c a ngư i dùng: # cat /etc/passwd | wc -l 324 * L nh lo i b nh ng dòng không quan tr ng uniq Trong m t s trư ng h p khi xem n i dung m t file, chúng ta th y có m t s các thông tin b trùng l p, ví d các dòng tr ng ho c các dòng ch a n i dung gi ng nhau. ng th i làm g n và thu nh kích thư c c a file, có th s d ng l nh uniq li t kê ra n i dung file sau khi ã lo i b các dòng trùng l p. Cú pháp l nh: uniq [tùy-ch n] [input] [output] L nh uniq s lo i b các dòng trùng l p k nhau t input (thi t b vào chu n) và ch gi l i m t dòng duy nh t trong s các dòng trùng l p r i ưa ra output (thi t b ra chu n). Các tuỳ ch n: -c, --count : m và hi n th s l n xu t hi n c a các dòng trong file. -d : hi n th lên màn hình dòng b trùng l p. -u : hi n th n i dung file sau khi xóa b toàn b các dòng b trùng l p không gi l i m t dòng nào. -i : hi n th n i dung file sau khi xóa b các dòng trùng l p và ch gi l i duy nh t m t dòng có n i dung b trùng l p. -D : hi n th t t c các dòng trùng l p trên màn hình. N u s d ng l nh uniq trên m t file không có các dòng trùng l p thì l nh không có tác d ng. Ví d , ngư i dùng s d ng l nh cat xem n i dung file vduniq # cat vduniq Gnome có hai phương pháp thoát ra ngoài. Gnome có hai phương pháp thoát ra ngoài. thoát b ng cách s d ng menu chính, hãy m menu chính, ch n m c Logout áy menu. Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. N u mu n thoát b ng cách s d ng nút Logout trên Panel, trư c h t ph i thêm nút này vào Panel. Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. Trong file vduniq có hai dòng b trùng l p và k nhau là dòng th 1 và 2. Gnome có hai phương pháp thoát ra ngoài. Gnome có hai phương pháp thoát ra ngoài. và dòng th 5 và 6 Ch n YES/ NO k t thúc phiên làm vi c v i Gnome.
  • 70. 7 0 Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. Dùng l nh uniq lo i b dòng trùng l p: # uniq vduniq Gnome có hai phương pháp thoát ra ngoài. thoát b ng cách s d ng menu chính, hãy m menu chính, ch n m c Logout áy menu. Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. N u mu n thoát b ng cách s d ng nút Logout trên Panel, trư c h t ph i thêm nút này vào Panel. Ch n YES/ NO k t thúc phiên làm vi c v i Gnome. Dòng cu i cùng trong file vduniq có n i dung trùng v i dòng th 5, nhưng sau l nh uniq, nó không b xóa vì không k v i dòng có n i dung trùng l p. * S p x p n i dung file v i l nh sort sort là l nh c các thông tin và s p x p chúng theo th t trong b ng ch cái ho c theo th t ư c quy nh theo các tùy ch n c a l nh. Cú pháp l nh: sort [tùy-ch n] [file] ... Hi n th n i dung sau khi s p x p c a m t ho c nhi u file ra thi t b ra chu n là tác d ng c a l nh sort. Ng m nh s p x p theo th t t i n c a các dòng có trong các file (t ng ch cái theo b ng ch h th ng (ch ng h n ASCII) và k t v trí u tiên trong các dòng). Các tùy ch n: +<s 1> [-<s 2>] : Hai giá tr s 1 và s 2 xác nh "khóa" s p x p c a các dòng, th c ch t l y xâu con t v trí s 1 t i v trí s 2 c a các dòng so sánh l y th t s p x p các dòng. N u s 2 không có thì coi là h t các dòng; n u s 2 nh hơn s 1 thì b qua l a ch n này. Chú ý, n u có s 2 thì ph i cách s 1 ít nh t m t d u cách. -b : b qua các d u cách ng trư c trong ph m vi s p x p. -c : ki m tra n u file ã s p x p thì thôi không s p x p n a. -d : xem như ch có các ký t [a-zA-Z0-9] trong khóa s p x p, các dòng có các kí t c bi t (d u cách, ? ...) ư c ưa lên u. -f : s p x p không phân bi t ch hoa ch thư ng. -n : s p x p theo kích thư c c a file. -r : chuy n i th t s p x p hi n th i. Ví d , mu n s p x p file vdsort # cat vdsort trư c h t ph i thêm nút này vào Panel. 21434 b n xác nh n là có th c s mu n thoát hay không. menu chính, ch n m c Logout áy menu. B n có th s d ng m c Logout t menu chính Gnome có hai phương pháp thoát ra ngoài.
  • 71. 7 1 ho c nút Logout trên Panel chính thoát ra ngoài. Khi ó m t h p tho i Logout s xu t hi n yêu c u 57879 L a ch n YES ho c NO k t thúc phiên làm vi c v i Gnome. Nó không cung c p ch c năng ho t ng nào khác ngoài ch c năng này. Nó không cung c p ch c năng ho t ng nào khác ngoài ch c năng này. N u mu n thoát b ng cách s d ng nút Logout trên Panel, # sort -f vdsort 21434 57879 B n có th s d ng m c Logout t menu chính b n xác nh n là có th c s mu n thoát hay không. Gnome có hai phương pháp thoát ra ngoài. ho c nút Logout trên Panel chính thoát ra ngoài. Khi ó m t h p tho i Logout s xu t hi n yêu c u L a ch n YES ho c NO k t thúc phiên làm vi c v i Gnome. menu chính, ch n m c Logout áy menu. N u mu n thoát b ng cách s d ng nút Logout trên Panel, Nó không cung c p ch c năng ho t ng nào khác ngoài ch c năng này. Nó không cung c p ch c năng ho t ng nào khác ngoài ch c năng này. trư c h t ph i thêm nút này vào Panel. Có th k t h p l nh sort v i các l nh khác, ví d : # ls -s | sort -n total 127 1 Archive/ 1 infoWorld/ 13 keylime.pie 46 drop.text.hqx 64 bitnet.mailing-lists.Z L nh trên cho th t s p x p c a các file theo kích thư c trong thư m c hi n th i. 3.4.4 Các l nh thao tác theo n i dung file * S d ng l nh file xác nh ki u file Cú pháp l nh file:
  • 72. 7 2 file [tùy-ch n] [-f file] [-m <file- nh>...] <file>... L nh file cho phép xác nh và in ra ki u thông tin ch a trong file. L nh file s l n lư t ki m tra t ki u file h th ng, ki u file magic (ví d file mô t thi t b ) r i n ki u file văn b n thông thư ng. N u file ư c ki m tra th a mãn m t trong ba ki u file trên thì ki u file s ư c in ra theo các d ng cơ b n sau: text: d ng file văn b n thông thư ng, ch ch a các mã ký t ASCII. executable: d ng file nh phân kh thi. data: thư ng là d ng file ch a mã nh phân và không th in ra ư c. M t s tuỳ ch n sau ây: -b : cho phép ch ưa ra ki u file mà không ưa kèm theo tên file. -f tên-file : cho phép hi n th ki u c a các file có tên trùng v i n i dung trên m i dòng trong file tên-file. ki m tra trên thi t b vào chu n, s d ng d u "-". -z : xem ki u c a file nén. Ví d : # file file.c file /dev/hda file.c: C program text file: ELF 32-bit LSB executable, Intel 80386,version 1,dynamically linked, not stripped /dev/hda: block special L nh trên cho xem ki u c a hai file file.c, file và thư m c /dev/hda. Nh r ng k t qu c a l nh file không ph i lúc nào cũng chính xác tuy t i. * Xem n i dung file v i l nh cat o n trư c, chúng ta ã có d p làm quen v i l nh cat thông qua tác d ng t o file c a l nh. Ph n này gi i thi u tác d ng ch y u c a l nh cat: ó là tác d ng xem n i dung c a m t file. Cú pháp l nh: cat [tùy-ch n] <tên file> Các tùy ch n: -A, --show-all : gi ng như tùy ch n -vET. -b, --number-nonblank : hi n th thêm s th t trên m i dòng (b qua dòng tr ng). -e : gi ng như tùy ch n -vE. -E, --show-ends : hi n th d u "$" t i cu i m i dòng. -n, --number : hi n th s th t c a m i dòng (k c dòng tr ng). -s : n u trong n i dung file có nhi u dòng tr ng thì s lo i b b t ch hi n th m t dòng tr ng. -t : gi ng như -vT. -T, --show-tabs : hi n th d u TAB dư i d ng ^I. -v, --show-nonprinting : hi n th các ký t không in ra ư c ngo i tr LFD và TAB. --help : hi n th trang tr giúp và thoát. Ví d :
  • 73. 7 3 # cat vdcat chúng ta th y xu t hi n các dòng sau ây: Gnome có hai phương pháp thoát ra ngoài. có th s d ng m c Logout t menu chính ho c nút Logout trên Panel chính thoát ra ngoài. thoát b ng cách s d ng menu chính, hãy m menu chính, ch n m c Logout áy menu. Khi ó m t h p tho i Logout s xu t hi n yêu c u xác nh n là có th c s mu n thoát hay không. ho c nút Logout trên Panel chính thoát ra ngoài. thoát b ng cách s d ng menu chính, hãy m menu chính, ch n m c Logout áy menu. # cat -bEs vdcat thì n i dung file hi n ra như sau: 1 Gnome có hai phương pháp thoát ra ngoài. $ 2 có th s d ng m c Logout t menu chính $ 3 ho c nút Logout trên Panel chính thoát ra ngoài.$ 4 thoát b ng cách s d ng menu chính, hãy m $ 5 menu chính, ch n m c Logout áy menu. $ $ 6 Khi ó m t h p tho i Logout s xu t hi n yêu c u $ 7 xác nh n là có th c s mu n thoát hay không.$ $ 8 ho c nút Logout trên Panel chính thoát ra ngoài.$ 9 thoát b ng cách s d ng menu chính, hãy m $ 10 menu chính, ch n m c Logout áy menu. * Xem n i dung các file l n v i l nh more L nh cat cho phép xem n i dung c a m t file, nhưng n u file quá l n, n i dung file s trôi trên màn hình và ch có th nhìn th y ph n cu i c a file. Linux có m t l nh cho phép có th xem n i dung c a m t file l n, ó là l nh more. Cú pháp l nh: more [-dlfpcsu] [-s ] [+/xâum u] [+dòng-s ] [file ...] L nh more hi n th n i dung c a file theo t ng trang màn hình. Các l a ch n: -s : xác nh s dòng n i dung c a file ư c hi n th (s ). -d : trên màn hình s hi n th các thông báo giúp ngư i dùng cách s d ng i v i l nh more, ví như [ Press space to continue, "q" to quit .], hay hi n th [Press "h" for instructions .] thay th cho ti ng chuông c nh báo khi b m sai m t phím.
  • 74. 7 4 -l : more thư ng xem ^L là m t ký t c bi t, n u không có tùy ch n này, l nh s d ng t i dòng u tiên có ch a ^L và hi n th % n i dung ã xem ư c (^L không b m t), nh n phím space (ho c enter) ti p t c. N u có tùy ch n -l, n i dung c a file s ư c hi n th như bình thư ng nhưng m t khuôn d ng khác, t c là d u ^L s m t và trư c dòng có ch a ^L s có thêm m t dòng tr ng. -p : không cu n màn hình, thay vào ó là xóa nh ng gì có trên màn hình và hi n th ti p n i dung file. -c : không cu n màn hình, thay vào ó xóa màn hình và hi n th n i dung file b t u t nh màn hình. -s : xóa b t các dòng tr ng li n nhau trong n i dung file ch gi l i m t dòng. -u : b qua d u g ch chân. +/xâum u : tùy ch n +/xâum u ch ra m t chu i s ư c tìm ki m trư c khi hi n th m i file. +dòng-s : b t u hi n th t dòng th dòng-s . Ví d : # more -d vdmore total 1424 drwxr-xr-x 6 root root 4096 Oct 31 2000 AfterStep-1.8.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 AnotherLevel drwxr-xr-x 2 root root 4096 Oct 31 2000 ElectricFence drwxr-xr-x 2 root root 4096 Oct 31 2000 GXedit-1.23 drwxr-xr-x 3 root root 4096 Oct 31 2000 HTML drwxr-xr-x 3 root root 4096 Oct 31 2000 ImageMagick drwxr-xr-x 6 root root 4096 Oct 31 2000 LDP drwxr-xr-x 3 root root 4096 Oct 31 2000 ORBit-0.5.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 SVGATextMode drwxr-xr-x 2 root root 4096 Oct 31 2000 SysVinit-2.78 drwxr-xr-x 2 root root 4096 Oct 31 2000 WindowMaker --More--(9%) [ Press space to continue, "q" to quit .] i v i l nh more, có th s d ng m t s các phím t t th c hi n m t s các thao tác ơn gi n trong khi ang th c hi n l nh. B ng dư i ây li t kê các phím t t ó: Phím t t Ch c năng [Space] n [Enter] h d ho c CTRL+D q ho c CTRL+Q s f b ho c CTRL+B Nh n phím space hi n th màn hình ti p theo Hi n th n dòng ti p theo Hi n th dòng ti p theo Hi n th danh sách các phím t t Cu n màn hình (m c nh là 11 dòng) Thoát kh i l nh more B qua n dòng (m c nh là 1) B qua k màn hình ti p theo (m c nh là 1) Tr l i k màn hình trư c (m c nh là 1)
  • 75. 7 5 = :n :p v CTRL+L :f . Hi n th s dòng hi n th i xem k file ti p theo Tr l i k file trư c Ch y chương trình so n th o vi t i dòng hi n th i V l i màn hình Hi n th tên file hi n th i và s dòng L p l i l nh trư c * Thêm s th t c a các dòng trong file v i l nh nl Như ã bi t l nh cat v i tham s -n s ánh s th t c a các dòng trong file, tuy nhiên Linux còn cho phép dùng l nh nl th c hi n công vi c như v y. Cú pháp l nh: nl [tùy-ch n] <file> L nh này s ưa n i dung file ra thi t b ra chu n, v i s th t c a dòng ư c thêm vào. N u không có file (tên file), ho c khi file là d u "-", thì c n i dung t thi t b vào chu n. Các tuỳ ch n: -b, --body-numbering=STYLE : s d ng ki u STYLE cho vi c ánh th t các dòng trong n i dung file. Có các ki u STYLE sau: a : ánh s t t c các dòng k c dòng tr ng; t : ch ánh s các dòng không tr ng; n : không ánh s dòng. -d, --section-delimiter=CC : s d ng CC ánh s trang logic (CC là hai ký t xác nh ph m vi cho vi c phân trang logic). -f, --footer-numbering=STYLE : s d ng ki u STYLE ánh s các dòng trong n i dung file (m t câu có th có hai dòng ...). -h, --header-numbering=STYLE : s d ng ki u STYLE ánh s các dòng trong n i dung file. -i, --page-increment=s : ánh s th t c a dòng theo c p s c ng có công sai là s . -l, --join-blank-lines=s :nhóm s dòng tr ng vào thành m t dòng tr ng. -n, --number-format=khuôn : chèn s dòng theo khuôn (khuôn: ln - căn trái, không có s 0 u; rn - căn ph i, không có s 0 u; rz - căn ph i và có s 0 u) -p, --no-renumber : không thi t l p l i s dòng t i m i trang logic. -s, --number-separator=xâu : thêm chu i xâu vào sau s th t c a dòng. -v, --first-page=s : s dòng u tiên trên m i trang logic. -w, --number-width=s : hi n th s th t c a dòng trên c t th s . --help : hi n th trang tr giúp và thoát. Ví d : # nl --body-numbering=a --number-format=rz vdnl 000001 1) New configuration mode 000002 000003
  • 76. 7 6 000004 1-1) Directories 000005 000006 Now, everything goes to ~/GNUstep/Library/AfterStep or 000007 /usr/local/share/afterstep ! 000008 000009 You can use your old .steprc config file with afterstep - f myoldsteprc, 000010 however, this isn't recommended at all. 000011 000012 New versions of asapps will also put their config. file here in a near 000013 future, like modules currently do. 000014 L nh trong ví d trên cho thêm s th t c a các câu trong file vdnl theo d ng: ánh s th t t t c các dòng, k c dòng tr ng, các s th t ư c căn ph i và có s 0 u (lưu ý r ng có dòng trong file ư c hi n ra thành hai dòng trên gi y). * Xem qua n i dung file v i l nh head Các o n trư c cho bi t cách th c xem n i dung c a m t file nh l nh cat hay more. Trong Linux cũng có các l nh khác cho nhi u cách th c xem n i dung c a m t file. Trư c h t, chúng ta hãy làm quen v i l nh head. Cú pháp l nh head [tùy-ch n] [file]... L nh này m c nh s ưa ra màn hình 10 dòng u tiên c a m i file. N u có nhi u hơn m t file, thì l n lư t tên c a file và 10 dòng n i dung u tiên s ư c hi n th . N u không có tham s file, ho c file là d u "-", thì ng m nh s c t thi t b vào chu n. Các tuỳ ch n: -c, --bytes=c : hi n th c (s nguyên) ký t u tiên trong n i dung file (c có th nh n giá tr là b cho 512, k cho 1K, m cho 1 Meg) -n, --lines=n : hi n th n (s nguyên) dòng thay cho 10 dòng ng m nh. -q, --quiet, --silent : không ưa ra tên file dòng u. -v, --verbose : luôn ưa ra tên file dòng u. --help : hi n th trang tr giúp và thoát. Ví d : # head -6 vdhead1 vdhead2 ==> vdhead1 <== 1) New configuration mode 1-1) Directories Now, everything goes to Ú/GNUstep/Library/AfterStep or ==> vdhead2 <==
  • 77. 7 7 1.7.164 patch 3 $HOME/GNUstep/Library/AfterStep/start/Desktop/Theme/.include changed from shell script call to perl script call L nh này cho xem qua 6 dòng u tiên trong n i dung hai file vdhead1 và vdhead2. * Xem qua n i dung file v i l nh tail L nh th hai cho phép xem qua n i dung c a file là l nh tail v i cú pháp: tail [tùy-ch n] [file]... L nh tail ng m nh ưa ra màn hình 10 dòng cu i trong n i dung c a các file. N u có nhi u hơn m t file, thì l n lư t tên c a file và 10 dòng cu i s ư c hi n th . N u không có tham s file, ho c file là d u "-" thì ng m nh s c t thi t b vào chu n. Các tùy ch n: --retry : c g ng m m t file khó truy nh p khi b t u th c hi n l nh tail. -c, --bytes=n : hi n th n (s ) ký t sau cùng. -f, --follow[={name | descritptor}] : sau khi hi n n i dung file s hi n thông tin v file: -f, -- follow, và --follow=descriptor là như nhau. -n, --lines=n : hi n th n (s ) dòng cu i cùng c a file thay cho 10 dòng ng m nh. --max-unchanged-stats=n : hi n th tài li u v file (ng m nh n là 5). --max-consecutive-size-changes=n : hi n th tài li u v file (ng m nh n là 200). --pid=PID : k t h p v i tùy ch n -f, ch m d t sau khi quá trình có ch s = PID l i. -q, --quiet, --silent : không ưa ra tên file dòng u trong n i dung ư c hi n th . -s, --sleep-interval=k : k t h p v i tùy ch n -f, d ng k giây gi a các ho t ng. -v, --verbose : luôn hi n th tên c a file. --help : hi n th trang tr giúp và thoát. Ví d : # tail -2 vdtail1 vdtail2 ==> vdtail1 <== Now, everything goes to ~/GNUstep/Library/AfterStep or /usr/local/share/afterstep ! ==> vdtail2 <== changed from shell script call to perl script call L nh trên cho xem hai dòng cu i c a hai file vdtail1 và vdtail2. * Tìm s khác nhau gi a hai file (l nh diff) Vi c tìm ra s khác nhau gi a hai file ôi khi là r t c n thi t. Linux có m t l nh có tác d ng như v y, ó là l nh diff v i cú pháp: diff [tuỳ-ch n] <file1> <file2>
  • 78. 7 8 Trong trư ng h p ơn gi n, l nh diff s so sánh n i dung c a hai file. N u file1 là m t thư m c còn file2 là m t file bình thư ng, diff s so sánh file có tên trùng v i file2 trong thư m c file1 v i file2. N u c file1 và file2 u là thư m c, diff s th c hi n s so sánh l n lư t các file trong c hai thư m c theo th t t a-z (s so sánh này s không qui n u tuỳ ch n -r ho c --recursive không ư c ưa ra). T t nhiên so sánh gi a hai thư m c không th chính xác như khi so sánh hai file. Các tuỳ ch n: -a: xem t t c các file d ng văn b n và so sánh theo t ng dòng. -b: b qua s thay i v s lư ng c a ký t tr ng. -B: b qua m i s thay i mà ch chèn ho c xoá các dòng tr ng. --brief: ch thông báo khi có s khác nhau mà không ưa ra chi ti t n i dung khác nhau. -d: tìm ra s khác bi t nh (tuỳ ch n này có th làm ch m t c làm vi c c a l nh diff). --exclude-from=file: khi so sánh thư m c, b qua các file và các thư m c con có tên phù h p v i m u có trong file. -i: so sánh không bi t ch hoa ch thư ng. -r: th c hi n so sánh qui trên thư m c. -s: thông báo khi hai file là gi ng nhau. -y: hi n th hai file c nh nhau d phân bi t s khác nhau. 3.4.5 Các l nh tìm file * Tìm theo n i dung file b ng l nh grep L nh grep cũng như l nh ls là hai l nh r t quan tr ng trong Linux. L nh này có hai tác d ng cơ b n như sau: tác d ng th nh t là l c u ra c a m t l nh khác v i cú pháp là <l nh> | grep <m u l c> tác d ng th hai, và cũng là tác d ng cơ b n ư c gi i thi u trong ph n này, là tìm dòng ch a m u ã nh trong file ư c ch ra. Cú pháp l nh grep: grep [tùy-ch n] <m u-l c> [file] L nh grep hi n th t t c các dòng có ch a m u-l c trong file ư c ch ra (ho c t thi t b vào chu n n u không có file ho c file có d ng là d u "-") Các tùy ch n: -G, --basic-regexp : xem m u l c như m t bi u th c thông thư ng. i u này là ng m nh. -E, --extended-regexp : xem m u l c như m t bi u th c m r ng. -F, --fixed-strings : xem m u như m t danh sách các xâu c nh, ư c phân ra b i các dòng m i. Ngoài l nh grep còn có hai l nh là egrep và fgrep. egrep tương t như l nh grep -E, fgrep tương t v i l nh grep -F . L nh grep còn có các tùy ch n sau: -A NUM, --after-context=NUM : ưa ra NUM dòng n i dung ti p theo sau dòng có ch a m u.
  • 79. 7 9 -B NUM, --before-context=NUM : ưa ra NUM dòng n i dung trư c dòng có ch a m u. -C [NUM], --context[=NUM] : hi n th NUM dòng (m c nh là 2 dòng) n i dung. -NUM : gi ng --context=NUM ưa ra các dòng n i dung trư c và sau dòng có ch a m u. Tuy nhiên, grep s không ưa ra dòng nào nhi u hơn m t l n. -b, --byte-offset : hi n th a ch tương i trong file u vào trư c m i dòng ư c ưa ra -c, --count : m s dòng tương ng ch a m u trong file u vào thay cho vi c hi n th các dòng ch a m u. -d ACTION, --directories=ACTION : n u u vào là m t thư m c, s d ng ACTION x lý nó. M c nh, ACTION là read, t c là s c n i dung thư m c như m t file thông thư ng. N u ACTION là skip, thư m c s b b qua. N u ACTION là recurse, grep s c n i dung c a t t c các file bên trong thư m c ( quy); tùy ch n này tương ương v i tùy ch n -r. -f file, --file=file : l y các m u t file, m t m u trên m t dòng. File tr ng ch a ng các m u r ng, và các dòng ưa ra cũng là các dòng tr ng. -H, --with-file : ưa ra tên file trên m i dòng ch a m u tương ng. -h, --no-filename : không hi n th tên file kèm theo dòng ch a m u trong trư ng h p tìm nhi u file. -i : hi n th các dòng ch a m u không phân bi t ch hoa ch thư ng. -l : ưa ra tên các file trùng v i m u l c. -n, --line-number : thêm s th t c a dòng ch a m u trong file. -r, --recursive : c t t c các file có trong thư m c ( quy). -s, --no-messages : b qua các thông báo l i file không c ư c ho c không t n t i. -v, --invert-match : hi n th các dòng không ch a m u. -w, --word-regexp : ch hi n th nh ng dòng có ch a m u l c là m t t tr n v n. -x, --line-regexp : ch hi n th nh ng dòng mà n i dung trùng hoàn toàn v i m u l c. Ví d , ngư i dùng gõ l nh cat xem n i dung file text: # cat -n text thì hi n ra n i dung file ó như sau: 1$ file file.c file /dev/hda 2file.c: C program text 3file:ELF 32-bit LSB executable, Intel 80386, version 1, 4dynamically linked, not stripped 5/dev/hda: block special 6 7$ file -s /dev/hdaỳ,1,2,3,4,5,6,7,8,9,10 8/dev/hda: x86 boot sector 9/dev/hda1: Linux/i386 ext2 filesystem 10 /dev/hda2: x86 boot sector 11 /dev/hda3: x86 boot sector, extended partition table 12 /dev/hda4: Linux/i386 ext2 filesystem 13 /dev/hda5: Linux/i386 swap file 14 /dev/hda6: Linux/i386 swap file
  • 80. 8 0 15 /dev/hda7: Linux/i386 swap file 16 /dev/hda8: Linux/i386 swap file 17 thutest 18 toithutest Sau ó, dùng l nh grep l c các dòng có c m filesystem # grep -n filesystem text 9: /dev/hda1: Linux/i386 ext2 filesystem 12: /dev/hda4: Linux/i386 ext2 filesystem Cũng có th s d ng các ký hi u bi u di n thông thư ng (regular - expression) trong m u l c ưa ra ư c nhi u cách tìm ki m file khác nhau. B ng dư i ây li t kê m t s ký hi u hay dùng: # grep - H thutest text text: thutest text: toithutest # grep -H "^thutest" text text: thutest Ngoài các tùy ch n khác nhau, l nh grep còn có hai d ng n a trên Linux. Hai d ng ó là egrep - s d ng v i các m u l c ph c t p, và fgrep - s d ng tìm nhi u m u l c cùng m t lúc. Th nh tho ng m t bi u th c ơn gi n không th xác nh ư c i tư ng c n tìm, ví d , như ang c n tìm các dòng có m t ho c hai m u l c. Nh ng lúc ó, l nh egrep t ra r t có ích. egrep - expression grep - có r t nhi u các ký hi u bi u di n m nh hơn grep. Dư i ây là các ký hi u hay dùng: Ký hi u Ý nghĩa C c ^ $ . [xy] [^xy] c* - thay th cho ký t c - hi n th c như là m t ký t bình thư ng n u c là m t ký t i u khi n - b t u m t dòng - k t thúc dòng - thay cho m t ký t ơn - ch n m t ký t trong t p h p các ký t ư c ưa ra - ch n m t ký t không thu c t p h p các ký t ư c ưa ra - thay cho m t m u có ho c không ch a ký t c
  • 81. 8 1 Ví d , gi s bây gi mu n tìm các dòng có ch a m t ho c nhi u hơn ký t b trên file passwk v i l nh egrep. # egrep 'b+' /etc/passwd | head cho ra các dòng k t qu sau: root : x : 0 : 0 : root : /root : /bin/bash bin : x : 1 : 1 : bin : /bin : daemon : x : 2 : 2 : daemon : /sbin : sync : x : 5 : 0 : sync : /sbin : /bin/sync shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdown halt : x : 7 : 0 : halt : /sbin : /sbin/halt gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data : nobody : x : 99 : 99 : Nobody : / : xfs : x : 43 : 43 : X Font Server : /etc/X11/fs : /bin/false named : x : 25 : 25 : Named : /var/named : /bin/false Khi gõ l nh: # egrep '([^a-zA-Z] | :wi)' /etc/printcap | head thì nh n ư c thông báo k t qu : aglw:Ư :wi=AG 23 : wk=multiple Apple LaserWrite IINT: aglw1: :wi=AG 23 : wk=Apple LaserWrite IINT: Ký hi u Ý nghĩa c c ^ $ . [xy] [^xy] c* c+ c? a | b (a) - thay th cho ký t c - hi n th c như là m t ký t bình thư ng n u c là m t ký t i u khi n - b t u m t dòng - k t thúc dòng - thay cho m t ký t ơn - ch n m t ký t trong t p h p các ký t ư c ưa ra - ch n m t ký t không thu c t p h p các ký t ư c ưa ra - thay cho m t m u có ho c không ch a ký t c - thay cho m t m u có ch a m t ho c nhi u hơn ký t c - thay cho m t m u không có ho c ch có ch a duy nh t m t ký t c - ho c là a ho c là b - a m t bi u th c
  • 82. 8 2 aglw2: :wi=AG 23 : wk=Apple LaserWrite IINT: aglw3: :wi=AG 23 : wk=Apple LaserWrite IINT: L nh trên cho phép tìm các dòng ư c b t u b i (^) m t ch cái không phân bi t ch hoa ch thư ng ([a-zA-Z]) ho c ( | ) dòng có ch a m u :wi. B t kỳ lúc nào mu n tìm các dòng có ch a nhi u hơn m t m u l c, egrep là l nh t t nh t s d ng. Có nh ng lúc c n ph i tìm nhi u m u l c trong m t lúc. Ví d , có m t file ch a r t nhi u m u l c và mu n s d ng m t l nh trong Linux tìm các dòng có ch a các m u ó. L nh fgrep s làm ư c i u này. Ví d , file thu có n i dung như sau: # cat thu /dev/hda4: Linux/i386 ext2 filesystem /dev/hda5: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty thutest toithutest và file mauloc có n i dung là: # cat mauloc empty test Bây gi mu n s d ng n i dung file mauloc làm m u l c tìm các câu trong file thu, hãy gõ l nh: # fgrep -i -f mauloc thu /dev/hda9: empty /dev/hda10: empty thutest toithutest * Tìm theo các c tính c a file v i l nh find Các o n trên ây ã gi i thi u cách th c tìm file theo n i dung v i các l nh grep, egrep và fgrep. Linux còn cho phép ngư i dùng s d ng m t cách th c khác y năng l c, ó là s d ng l nh find, l nh tìm file theo các thu c tính c a file. L nh này có m t s khác bi t so v i các l nh khác, ó là các tùy ch n c a l nh là m t t ch không ph i m t ký t . i u ki n c n i v i l nh này là ch ra ư c i m b t u c a vi c tìm ki m trong h th ng file và nh ng quy t c c n tuân theo c a vi c tìm ki m. Cú pháp c a l nh find: find [ ư ng-d n] [bi u-th c] L nh find th c hi n vi c tìm ki m file trên cây thư m c theo bi u th c ư c ưa ra. M c nh ư ng d n là thư m c hi n th i, bi u th c là -print. Bi u th c có th có nh ng d ng sau:
  • 83. 8 3 Các toán t : ( EXPR ); ! EXPR ho c -not EXPR; EXPR1 -a EXPR2 ho c EXPR1 -and EXPR2; EXPR1 -o EXPR2 ho c EXPR1 -or EXPR2; và EXPR1, EXPR2 Các tùy ch n l nh: t t c các tùy ch n này luôn tr v giá tr true và ư c t u bi u th c -daystart : o th i gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). -depth : th c hi n tìm ki m t n i dung bên trong thư m c trư c (m c nh vi c tìm ki m ư c th c hi n b t u t i g c cây thư m c có ch a file c n tìm). -follow : (tùy ch n này ch áp d ng cho thư m c) n u có tùy ch n này thì các liên k t tư ng trưng có trong m t thư m c liên k t s ư c ch ra. -help, --help : hi n th k t qu c a l nh find và thoát. các test -amin n : tìm file ư c truy nh p n phút trư c. -atime n : tìm file ư c truy nh p n*24 gi trư c. -cmin n : tr ng thái c a file ư c thay i n phút trư c ây. -ctime n : tr ng thái c a file ư c thay i n*24 gi trư c ây. -empty : file r ng và ho c là thư m c ho c là file bình thư ng. -fstype ki u : file thu c h th ng file v i ki u. -gid n : ch s nhóm c a file là n. -group nhóm : file thu c quy n s h u c a nhóm. -links n : file có n liên k t. -mmin n : d li u c a file ư c s a l n cu i vào n phút trư c ây. -mtime n : d li u c a file ư c s a vào n*24 gi trư c ây. -name m u : tìm ki m file có tên là m u. Trong tên file có th ch a c các ký t i di n như d u "*", "?"... -type ki u : tìm các file thu c ki u v i ki u nh n các giá tr : b: c bi t theo kh i c: c bi t theo ký t d: thư m c p: pipe f: file bình thư ng l: liên k t tư ng trưng s: socket -uid n: ch s ngư i s h u file là n. -user tên-ngư i: file ư c s h u b i ngư i dùng tên-ngư i. Các hành ng -exec l nh : tùy ch n này cho phép k t h p l nh find v i m t l nh khác có ư c thông tin nhi u hơn v các thư m c có ch a file c n tìm. Tùy ch n exec ph i s d ng d u {} - nó s thay th cho tên file tương ng, và d u '' t i cu i dòng l nh, (ph i có kho ng tr ng gi a {} và ''). K t thúc l nh là d u ';'
  • 84. 8 4 -fprint file : hi n th y tên file vào trong file. N u file không t n t i thì s ư c t o ra, n u ã t n t i thì s b thay th n i dung. -print : hi n th y tên file trên thi t b ra chu n. -ls : hi n th file hi n th i theo khuôn d ng: li t kê danh sách y kèm c s thư m c, ch s c a m i file, v i kích thư c file ư c tính theo kh i (block). Ví d : # find -name 'what*' ./usr/bin/whatis ./usr/bin/whatnow ./usr/doc/AfterStep-1.8.0/TODO/1.0 to 1.5/whatsnew ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev- info/gnome-dev-info/what.html ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev- info/gnome-dev-info/whatis.html # find . -type f -exec grep -l -i mapping {} ; ./OWL/WordMap/msw-to-txt.c ./.elm/aliases.text ./Mail/mark ./News/usenet.alt ./bin/my.new.cmd: Permission denied ./src/fixit.c ./temp/attach.msg 3.5 Nén và sao lưu các file 3.5.1 Sao lưu các file (l nh tar) D li u r t có giá tr , s m t nhi u th i gian và công s c n u ph i t o l i, th m chí có lúc cũng không th nào t o l i ư c. Vì v y, Linux ưa ra các cách th c ngư i dùng b o v d li u c a mình. Có b n nguyên nhân cơ b n khi n d li u có th b m t: l i ph n c ng, l i ph n m m, l i do con ngư i ho c do thiên tai. Sao lưu là cách b o v d li u m t cách kinh t nh t. B ng cách sao lưu d li u, s không có v n gì x y ra n u d li u trên h th ng b m t. M t v n r t quan tr ng trong vi c sao lưu ó là l a ch n phương ti n sao lưu. c n ph i quan tâm n giá c , tin c y, t c , ích l i cũng như tính kh d ng c a các phương ti n sao lưu. Có r t nhi u các công c có th ư c s d ng sao lưu. Các công c truy n th ng là tar, cpio và dump (công c trong tài li u này là tar). Ngoài ra còn r t nhi u các công c khác có th l a ch n tùy theo phương ti n sao lưu có trong h th ng. Có hai ki u sao lưu là sao lưu theo ki u toàn b (full backup) và sao lưu theo ki u tăng d n (incremental backup). Sao lưu toàn b th c hi n vi c sao m i th trên h th ng file, bao g m t t c các file. Sao lưu tăng d n ch sao lưu nh ng file ư c thay i ho c ư c t o ra k t t sao lưu cu i cùng.
  • 85. 8 5 Vi c sao lưu toàn b có th ư c th c hi n d dàng v i l nh tar v i cú pháp: tar [tùy-ch n] [<file>, ...] [<thư-m c>, ...] L nh (chương trình) tar ư c thi t k t o l p m t file lưu tr duy nh t. V i tar, có th k t h p nhi u file thành m t file duy nh t có kích thư c l n hơn, i u này s giúp cho vi c di chuy n file ho c sao lưu băng t tr nên d dàng hơn nhi u. L nh tar có các l a ch n: -c, --create : t o file lưu tr m i. -d, --diff, --compare : tìm ra s khác nhau gi a file lưu tr và file h th ng ư c lưu tr . --delete : xóa t file lưu tr (không s d ng cho băng t ). -r, --append : chèn thêm file vào cu i file lưu tr . -t, --list : li t kê n i dung c a m t file lưu tr . -u, --update : ch thêm vào file lưu tr các file m i hơn các file ã có. -x, --extract, --get : tách các file ra kh i file lưu tr . -C, --directory tên-thư-m c : thay i n thư m c có tên là tên-thư-m c. --checkpoint : ưa ra tên thư m c khi c file lưu tr . -f, --file [HOSTNAME:]file : tùy ch n này xác nh tên file lưu tr ho c thi t b lưu tr là file (n u không có tùy ch n này, m c nh nơi lưu tr là /dev/rmt0). -h, --dereference : không hi n các file liên k t mà hi n các file mà chúng tr t i. -k, --keep-old-files : gi nguyên các file lưu tr ang t n t i mà không ghi è file lưu tr m i lên chúng. -K, --starting-file file : b t u t i file trong file lưu tr . -l, --one-file-system : t o file lưu tr trên h th ng file c c b . -M, --multi-volume : tùy ch n này ư c s d ng khi dung lư ng c a file c n sao lưu là l n và không ch a h t trong m t ơn v lưu tr v t lý. -N, --after-date DATE, --newer DATE : ch lưu tr các file m i hơn các file ư c lưu tr trong ngày DATE. --remove-files : xóa file g c sau khi ã sao lưu chúng vào trong file lưu tr . --totals : ưa ra t ng s byte ư c t o b i tùy ch n --create. -v, --verbose : hi n th danh sách các file ã ư c x lý. Ví d : # tar --create --file /dev/ftape /usr/src tar: Removing leading / from absolute path names in the archive # L nh trên t o m t file sao lưu c a thư m c /usr/src trong thư m c /dev/ftape, (dòng thông báo trên cho bi t r ng tar s chuy n c d u / vào trong file sao lưu). N u vi c sao lưu không th th c hi n g n vào trong m t băng t , lúc ó hãy s d ng tùy ch n -M: # tar -cMf /dev/fd0H1440 /usr/src tar: Removing leading / from absolute path names in the archive
  • 86. 8 6 Prepare volume #2 for /dev/fd0H1440 and hit return: # Chú ý r ng ph i nh d ng ĩa m m trư c khi th c hi n vi c sao lưu, có th s d ng m t thi t b u cu i khác th c hi n vi c nh d ng ĩa khi tar yêu c u m t ĩa m m m i. Sau khi th c hi n vi c sao lưu, có th ki m tra k t qu c a công vi c b ng tùy ch n -- compare: # tar --compare --verbose -f /dev/ftape usr/src/ usr/src/Linux usr/src/Linux-1.2.10-includes/ ... # s d ng ki u sao lưu tăng d n, hãy s d ng tùy ch n -N: # tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src --verbose tar: Removing leading / from absolute path names in the archive usr/src/ usr/src/Linux-1.2.10-includes/ usr/src/Linux-1.2.10-includes/include/ usr/src/Linux-1.2.10-includes/include/Linux/ usr/src/Linux-1.2.10-includes/include/Linux/modules/ usr/src/Linux-1.2.10-includes/include/asm-generic/ usr/src/Linux-1.2.10-includes/include/asm-i386/ usr/src/Linux-1.2.10-includes/include/asm-mips/ usr/src/Linux-1.2.10-includes/include/asm-alpha/ usr/src/Linux-1.2.10-includes/include/asm-m68k/ usr/src/Linux-1.2.10-includes/include/asm-sparc/ usr/src/patch-1.2.11.gz # Lưu ý r ng, tar không th thông báo ư c khi các thông tin trong inode c a m t file b thay i, ví d như thay i quy n truy nh p c a file, hay thay i tên file ch ng h n. bi t ư c nh ng thông tin thay i s c n dùng n l nh find và so sánh v i tr ng thái hi n th i c a file h th ng v i danh sách các file ư c sao lưu t trư c. 3.5.2 Nén d li u Vi c sao lưu r t có ích nhưng ng th i nó cũng chi m r t nhi u không gian c n thi t sao lưu. gi m không gian lưu tr c n thi t, có th th c hi n vi c nén d li u trư c khi sao lưu, sau ó th c hi n vi c gi i nén (dãn) nh n l i n i dung trư c khi nén. Trong Linux có khá nhi u cách nén d li u, tài li u này gi i thi u hai phương cách ph bi n là gzip và compress.
  • 87. 8 7 * Nén, gi i nén và xem n i dung các file v i l nh gzip, gunzip và zcat Cú pháp các l nh này như sau: gzip [tùy-ch n] [ -S suffix ] [ < file> ] gunzip [tùy-ch n] [ -S suffix ] [ <file> ] zcat [tùy-ch n] [ <file> ] L nh gzip s làm gi m kích thư c c a file và khi s d ng l nh này, file g c s b thay th b i file nén v i ph n m r ng là .gz, các thông tin khác liên quan n file không thay i. N u không có tên file nào ư c ch ra thì thông tin t thi t b vào chu n s ư c nén và g i ra thi t b ra chu n. Trong m t vài trư ng h p, l nh này s b qua liên k t tư ng trưng. N u tên file nén quá dài so v i tên file g c, gzip s c t b b t. gzip s ch c t ph n tên file vư t quá 3 ký t (các ph n ư c ngăn cách v i nhau b i d u ch m). N u tên file g m nhi u ph n nh thì ph n dài nh t s b c t b . Ví d , tên file là gzip.msdos.exe, khi ư c nén s có tên là gzip.msd.exe.gz. File ư c nén có th ư c khôi ph c tr l i d ng nguyên th v i l nh gzip -d ho c gunzip. V i l nh gzip có th gi i nén m t ho c nhi u file có ph n m r ng là .gz, -gz, .z, -z, _z ho c .Z ... gunzip dùng gi i nén các file nén b ng l nh gzip, zip, compress, compress -H. L nh zcat ư c s d ng khi mu n xem n i dung m t file nén trên thi t b ra chu n. Các tùy ch n: -c, --stdout --to-stdout : ưa ra trên thi t b ra chu n; gi nguyên file g c không có s thay i. N u có nhi u hơn m t file u vào, u ra s tu n t là các file ư c nén m t cách c l p. -d, --decompress --uncompress : gi i nén. -f, --force : th c hi n nén ho c gi i nén th m chí file có nhi u liên k t ho c file tương ng th c s ã t n t i, hay d li u nén ư c c ho c ghi trên thi t b u cu i. -h, --help : hi n th màn hình tr giúp và thoát. -l, --list : hi n th nh ng thông tin sau i v i m t file ư c nén: compressed size: kích thư c c a file nén uncompressed size: kích thư c c a file ư c gi i nén ratio: t l nén (0.0% n u không bi t) uncompressed_name: tên c a file ư c gi i nén N u k t h p v i tùy ch n --verbose, các thông tin sau s ư c hi n th : method: phương th c nén crc: CRC 32-bit cho d li u ư c gi i nén date & time: th i gian các file ư c gi i nén N u k t h p v i tùy ch n --name, tên file ư c gi i nén, th i gian gi i nén ư c lưu tr trong file nén N u k t h p v i tùy ch n --verbose, t ng kích thư c và t l nén c a t t c các file s ư c hi n th N u k t h p v i tùy ch n --quiet, tiêu và t ng s dòng c a các file nén không ư c hi n th .
  • 88. 8 8 -n, --no-name : khi nén, tùy ch n này s không lưu tr tên file g c và th i gian nén, (tên file g c s luôn ư c lưu n u khi nén tên c a nó b c t b ). Khi gi i nén, tùy ch n này s không khôi ph c l i tên file g c cũng như th i gian th c hi n vi c nén. Tùy ch n này ư c ng m nh. -N, --name : tùy ch n này ngư c v i tùy ch n trên (-n), nó h u ích trên h th ng có s gi i h n v dài tên file hay khi th i i m nén b m t sau khi chuy n i file. -q, --quiet : b qua m i c nh báo. -r, --recursive : nén thư m c. -S .suf, --suffix .suf : s d ng ph n m r ng .suf thay cho .gz. B t kỳ ph n m r ng nào cũng có th ư c ưa ra, nhưng các ph n m r ng khác .z và .gz s b ngăn ch n tránh s l n x n khi các file ư c chuy n n h th ng khác. -t, --test : tùy ch n này ư c s d ng ki m tra tính toàn v n c a file ư c nén -v, --verbose : hi n th ph n trăm thu g n i v i m i file ư c nén ho c gi i nén -#, --fast, --best : i u ch nh t c c a vi c nén b ng cách s d ng d u #, n u -# là -1 ho c --fast thì s d ng phương th c nén nhanh nh t (less compression), n u là -9 ho c --best thì s dùng phương th c nén ch m nh t (best compression). Ng m nh m c nén là -6 ( ây là phương th c nén theo t c nén cao). Ví d : # ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1 # gzip /home/test/vd1 # ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1.gz # zcat /home/test/vd1 PID TTY TIME CMD 973 pts/0 00:00:00 bash 996 pts/0 00:00:00 man 1008 pts/0 00:00:00 sh 1010 pts/0 00:00:00 less 1142 pts/0 00:00:00 cat 1152 pts/0 00:00:00 cat 1181 pts/0 00:00:00 man 1183 pts/0 00:00:00 sh 1185 pts/0 00:00:00 less # * Nén, gi i nén và xem file v i các l nh compress, uncompress, zcat Cú pháp các l nh như sau: compress [tùy-ch n] [<file>]
  • 89. 8 9 uncompress [tùy-ch n] [<file>] zcat [tùy-ch n] [<file>] L nh compress làm gi m kích thư c c a file và khi s d ng l nh này, file g c s b thay th b i file nén v i ph n m r ng là .Z, các thông tin khác liên quan n file không thay i. N u không có tên file nào ư c ch ra, thông tin t thi t b vào chu n s ư c nén và g i ra thi t b ra chu n. L nh compress ch s d ng cho các file thông thư ng. Trong m t vài trư ng h p, nó s b qua liên k t tư ng trưng. N u m t file có nhi u liên k t c ng, compress b qua vi c nén file ó tr khi có tùy ch n -f. Các tùy ch n: -f : n u tùy ch n này không ư c ưa ra và compress ch y trong ch n n trư c, ngư i dùng s ư c nh c khi các file ã th c s t n t i và có th b ghi è. Các file ư c nén có th ư c khôi ph c l i nh vi c s d ng l nh uncompress. -c : tùy ch n này s th c hi n vi c nén ho c gi i nén r i ưa ra thi t b ra chu n, không có file nào b thay i. L nh zcat tương ương v i uncompress -c. zcat th c hi n vi c gi i nén ho c là các file ư c li t kê trong dòng l nh ho c t thi t b vào chu n ưa ra d li u ư c gi i nén trên thi t b ra chu n. -r : n u tùy ch n này ư c ưa ra, compress s th c hi n vi c nén các thư m c. -v : hi n th t l gi m kích thư c cho m i file ư c nén.
  • 90. 9 0 CHƯƠNG 4. QU N TR QUÁ TRÌNH 4.1 Quá trình trong UNIX 4.1.1. Sơ b v quá trình Quá trình là i tư ng trong h th ng tương ng v i m t phiên th c hi n c a m t chương trình. Quá trình bao g m ba thành ph n là text, data, stack. Text là thành ph n câu l nh th c hi n, data là thành ph n d li u còn stack là thành ph n thông tin t m th i ho t ng theo cơ ch LIFO. Các câu l nh trong text ch thao tác t i vùng data, stack tương ng c a quá trình, không truy nh p ư c t i data và stack c a các quá trình khác, ngo i tr các vùng d li u dùng chung. Các quá trình ư c h th ng phân bi t b ng s hi u c a quá trình, vi t t t là PID (Proccess Index). Quá trình ư c t o khi kh i ng h i u hành là quá trình 0. M i quá trình khác u ư c t o ra t m t quá trình khác thông qua l i g i h th ng fork: quá trình th c hi n l i g i h th ng fork ư c g i là quá trình cha, còn quá trình ư c t o ra theo l i g i fork ư c g i là quá trình con. Tr quá trình 0 không có cha, m i quá trình có trong h th ng u có m t cha và m t cha có th có nhi u con. K t qu d ch chương trình ngu n s t o ra file chương trình ích g m m t s ph n như sau (lưu tr trên v t d n ngoài): Ph n u file mô t m t s c tính c a file chương trình (tương t File header c a file chương trình trong MS-DOS), Ph n text c a chương trình, Các giá tr m u v vi c phân ph i b nh i v i vùng data c a chương trình, M t s b ng thông tin liên quan n t file. Khi có l i g i fork, thông qua l i g i h th ng exec, nhân s t i n i dung c a file chương trình vào b nh trong theo các vùng text, data và stack: Vùng text c a quá trình tương ng v i file chương trình, Vùng data c a quá trình tương ng v i các giá tr ư c quy nh trong file chương trình, Vùng stack ư c nhân t ng t o v i kích thư c theo s linh ho t c a nhân. Ph n stach bao g m các stack frame (khung) lôgic: m i satck frame ư c t vào khi g i m t hàm và l y ra khi quay v . M i stack frame ch a tham sô c a hàm, các bi n a phương v.v. Tương ng trong stack có m t stack pointer liên quan n chi u sâu c a stack. Trong mã chương trình có các dòng l nh qu n lý hình tr ng c a stack, và nhân s nh v không gian i v i stack theo yêu c u. 4.1.2. Sơ b c u trúc i u khi n c a UNIX Theo phân c p, h th ng th c hi n theo ba m c: m c ngư i dùng, m c nhân và m c ph n c ng. • M c ngư i dùng (user level): g m có chương trình ngư i dùng và chương trình trong các thư vi n. Các chương trình này ch y (ph n l nh c a chúng th c hi n)
  • 91. 9 1 trong tr ng thái ngư i dùng c a quá trình. Chương trình ngư i dùng thao tác v i nhân ho c tr c ti p ho c gián ti p nh g i thư vi n nh các l i g i h th ng. • M c nhân là m c tr ng tâm nh t c a h i u hành Linux-UNIX. Ch y m c nhân là nh ng chương trình c a h i u hành thu c h th ng con i u khi n File (h th ng con làm vi c v i File - File Subsystem), h th ng con i u khi n quá trình (Proccess Control System), các l i g i h th ng (system calls), các chương trình i u khi n thi t b (Device Drivers), Cache b m (Buffer cache) và các chương trình i u khi n ph n c ng (Hard Control). Hai thành ph n cơ b n nh t là H th ng i u khi n File và H th ng con i u khi n quá trình. Hình v dư i ây cho sơ b c u trúc i u khi n trong UNIX: Chương trình ngư i dùng Thư vi n m u Gíao di n theo các l i g i h th ng H th ng con i u khi n File H th ng con i u khi n quá trình (bao g m 3 thành ph n con bên ph i B truy n thông liên quá trình B l p l ch Thành ph n i u ph i b nh Cache b m Ký t Kh i i u khi n thi t b  I U KHI N PH N C NG PH N C NG M c ph n c ng M c ngư i dùng M c nhân M c nhân C u trúc c a Nhân và các m c quá trình
  • 92. 9 2 4.1.3. Các h th ng con trong nhân H th ng con i u khi n File có nhi m v qu n lý h th ng File, cung c p vùng nh r i ĩa cho File, i u khi n truy c p File và tìm ki m d li u v.v. a s các thu t toán v các l i g i h th ng liên quan n File và các hàm chương trình con m c th p ã ư c trình bày trong chương 2. Các quá trình tương tác v i H th ng con i u khi n File nh các l i g i h th ng (các l i g i h th ng File m c cao). Vi c truy nh p t i File nh hai cách th c: truy nh p tr c ti p v i File ho c thông qua buffer cache. Các buffer cache lưu tr d li u t m th i theo t ng kh i. Nhân vào-ra d li u thông qua các kh i trung gian và nh thi t b nh th c p: truy nh p d li u theo kh i, Nhân thao tác tr c ti p v i kh i i u khi n thi t b truy nh p tr c ti p d li u trong File không qua thi t b ph : truy nh p theo ký t . H th ng con i u khi n quá trình ch u trách nhi m ng b hóa s tương tác liên quá trình, qu n lý b nh và l p l ch th c hi n i v i các quá trình ang t n t i. H th ng con i u khi n File và H th ng con i u khi n quá trình tương tác v i nhau khi file ư c t i vào b nh trong và cho th c hi n. M t s l i g i h th ng cho kh i i u khi n quá trình: fork: T o quá trình m i. L i g i hàm này có d ng pid=fork() exec: Cho th c hi n quá trình ang t n t i; exec(pid) exit: Cho k t thúc quá trình ang t n t i, brk: i u khi n kích thư c b nh c p phát cho quá trình, signal: i u khi n các hi n tư ng b t thư ng trong quá trình H th ng con i u khi n quá trình bao g m 3 thành ph n sau ây: Thành ph n i u ph i b nh có nhi m v qu n lý, i u khi n c p phát b nh . M t s trang b lo i b khi c p phát b nh cho quá trình. B l p l ch (schelduler) có nhi m v i u ph i CPU cho các quá trình. Các quá trình có ưu tiên và b l p l ch ch n quá trình có ưu tiên cao nh t. B truy n thông liên quá trình th c hi n vi c ng b hóa các quá trình liên quan nhau. B i u khi n ph n c ng (hardware control) có ch c năng cho phép ng t và tương tác thông tin v i máy. Các thi t b như ĩa, thi t b u cu i có th ng t CPU khi ang th c hi n quá trình. Các chương trình x lý ng t là hàm riêng bi t trong nhân mà không ph i là m t quá trình. Stack trong quá trình M i quá trình th c hi n ư c mode nhân và mode ngư i dùng vì v y phân chia hai lo i stack nhân và stack ngư i dùng. Chúng ta xem xét ví d sau: #include <fenth.h> char buffer[2048]; int version; main (argc, argv); int argc; char *argv[]; | int fdold, fdnew;
  • 93. 9 3 if (argc != 3) | printf(' c n 2 i s i v i chương trình sao file!'); exit(1) | fdold = open (argv[1], O_RDONLY); /* m file ngu n ch c */ if (fdold == -1) | printf (' Không th m file &csn',argv[1]); exit(1); | fdnew =creat (argv[2],0666); /*m File ich rw cho m i ngư i */ if (fdnew ==-1) | printf('Không th kh i t o file &csn',argv[2]; exit(1); | copy(fdold,fdnew); exit(0); | copy (old, new) int old, new; | int count; while (count = read(old,buffer,sizeof(buffer))>0) write(buffer,count); | Trong chương trình trên, mã l nh (g i là ph n text) c a file ư c sinh ra t các hàm main và copy. Kh i t o giá tr ban u cho bi n version và dành vùng nh cho bi n m ng buffer. Trong ví d trên, các tham s argc, argv và các bi n fdold, fdnew trong chương trình main trong stack khi main ư c g i (m t l n i v i m i chương trình), còn các tham s old và new và bi n count trong hàm copy xu t hi n m i khi copy ư c g i. Stack ngư i dùng Stack nhân Bi n c c b không có a ch frame 2 a ch quay l i sau khi write Hư ng tăng c a stack Các tham s c a write b m buffer m i frame 3 Frame 3 Các bi n c c b count call write () call func2() Bi n c c b a ch c a Frame 1 a ch c a Frame 1
  • 94. 9 4 a ch quay v sau l i g i copy a ch quay v sau l i g i func2 Các tham s c a copy old new frame 2 Frame 2 Tham s c a func2 nhân Bi n c c b fdold fdnew call copy () call func2() Bi n c c b a ch c a Frame 0 a ch c a Frame 0 a ch quay v sau l i g i main a ch quay v sau l i g i func1 Tham s c a main argc argv Frame 1 Frame 1 Tham s c a func1 nhân call main () call func1() Các stack cho m t quá trình Quá trình trong UNIX ư c th c hi n theo m t trong hai mode: mode nhân hay mode ngư i dùng và tương ng v i 2 mode này, quá trình s d ng stack riêng bi t i v i m i mode. Stack ngư i dùng ch a các i s , bi n c c b , và các d li u khác i v i vi c th c hi n hàm trong mode ngư i dùng. Stach nhân ch a các i s , bi n c c b , các tham s , các a ch liên k t v.v. liên quan n th c hi n các hàm theo mode nhân. 4.1.4. Sơ b v i u khi n quá trình Nhân s d ng 4 c u trúc d li u sau ây truy nh p n quá trình: • B ng các quá trình, tương ng v i m i quá trình ang t n t i trong h th ng là m t thành ph n. M i thành ph n bao g m m t s trư ng sau ây (m i thành ph n ây chính là m t PCB): - Tr ng thái c a quá trình, - Ch s h u c a quá trình, - Trư ng liên quan n tr ng thái ngưng c a quá trình (theo l i g i hàm sleep) - a ch c a vùng s d ng tương ng v i quá trình, - Các thông tin tương ng ư c trình bày trong PCB. • Vùng s d ng (U-area) ch a các thông tin riêng, có tác d ng khi quá trình ang th c hi n: - Ch s thành ph n tương ng v i quá trình trong b ng các quá trình: a ch c a kh i PCB tương ng, - B m th i gian ch y m c nhân và m c ngư i dùng, - Các giá tr tr v và mã l i (n u có) i v i l i g i h th ng hi n t i, - Mô t v các file ang m ng v i quá trình, - Tham s lưu tr dung lư ng d li u di chuy n trong vào - ra. - Thư m c hi n t i và thư m c g c hi n t i: môi trư ng c a quá trình, - Các gi i h n kích thư c file và quá trình, - Các m c cho phép th c hi n i v i quá trình, - M t s thông tin khác • Các b ng nh v a ch b nh i v i m i quá trình,
  • 95. 9 5 • B ng ch a vùng b nh chung: phân ho ch b nh , c tính m i vùng theo phân ho ch: ch a text, data ho c vùng b nh dùng chung v.v. Sơ b v m i liên k t c a các c u trúc d li u trên ư c mô t như hình v phía sau. Nhân x lý v i các l i g i h th ng như sau: - V i l i g i fork: Nhân sao vùng a ch c a quá trình cũ, cho phép các quá trình chia x vùng b nh , - V i l i g i exec: Nhân c p phát các vùng b nh th c cho các vùng text, data và stack, - V i l i g i exit: Nhân s gi i phóng các vùng b nh liên quan n quá trình. Cá c c u trú c d li u i u khi n quá trìn h 4.1. 5. Tr ng thái và chuy n d ch tr ng thái Sơ bi u di n các tr ng thái và vi c chuy n tr ng thái trong UNIX ư c trình bày trong hình dư i ây (S hi u tr ng thái quá trình xem trong hình v ). Th c hi n m c nhân (2) Th c hi n m c ngư i dùng (1) S n sàng sang m c ngư i dùng (7) Hoàn thi n (9) Ch i thi u tài nguyên (4) S n sàng th c hi n (3) Ch i b nh ngoài (6) Quá trình phát sinh (8)i b nh th c hi n (5) U-area B nh trong (các trang th c) B ng các vùng nh cho m t quá trình B ng các vùng nh (b ng các trang o)
  • 96. 9 6 Sơ chuy n tr ng thái quá trình Khi quá trình ư c phát sinh nó tr ng thái (8), tùy thu c vào tình tr ng b nh quá trình ư c phân ph i b nh trong (3) hay b nh ngoài (5). Tr ng thái (3) th hi n quá trình ã s n sáng th c hi n, các thành ph n c a nó ã b nh trong ch i CPU th c hi n. Vi c th c hi n ti p theo tùy thu c vào tr ng thái trư c ó c a nó. N u l n u phát sinh, nó c n i t i th c hi n m c nhân hoàn thi n công vi c l i g i fork s t tr ng thái (3) sang tr ng thái (1), trong trư ng h p khác, t tr ng thái (3) nó i t i tr ng thái ch d i CPU m c ngư i dùng (7). Trong tr ng thái th c hi n m c ngư i dùng (1), quá trình i t i tr ng thái (2) khi g p l i g i h th ng ho c hi n tư ng ng t x y ra. T tr ng thái (1) t i tr ng thái (7) khi h t lư ng t th i gian. Tr ng thái (4) là tr ng thái ch i trong b nh còn tr ng thái (6) th hi n vi c ch i trong b nh ngoài. Cung chuy n t tr ng thái (2) vào ngay tr ng thái (2) x y ra khi quá trình tr ng thái th c hi n m c nhân, nhân h th ng g i các hàm x lý ng t tương ng. 4.1.6. S ngưng ho t ng và ho t ng tr l i c a quá trình M t quá trình trong tr ng thái th c hi n m c nhân có kh năng chuy n sang tr ng thái ngưng theo l i g i hàm sleep. Tr ng thái ngưng x y ra trong m t s tình hu ng ch i m t s ki n: hoàn thành vi c vào-ra, quá trình khác th c hi n l i g i exit v.v. Sau khi s ki n x y ra, quá trình t tr ng thái ngưng chuy n sang tr ng thái s n sàng có th ư c c p phát CPU ch y. 4.1.7. Sơ b v l nh i v i quá trình Khi m m t trang man, li t kê các file v i l nh ls, ch y trình so n th o vi hay ch y b t kỳ m t l nh nào trong Linux thì i u ó có nghĩa là ang kh i t o m t ho c nhi u quá trình. Trong Linux, b t c chương trình nào ang ch y u ư c coi là m t quá trình. Có th có nhi u quá trình cùng ch y m t lúc. Ví d dòng l nh ls -l | sort | more s kh i t o ba quá trình: ls, sort và more. Quá trình có th tr i qua nhi u tr ng thái khác nhau và t i m t th i i m m t quá trình rơi vào m t trong các tr ng thái ó. B ng dư i ây gi i thi u các tr ng thái cơ b n c a quá trình trong Linux. Ký hi u Ý nghĩa D R S T Z (uninterruptible sleep) tr ng thái này quá trình b treo và không th ch y l i nó b ng m t tín hi u. (runnable) tr ng thái s n sàng th c hi n, t c là quá trình có th th c hi n ư c nhưng ch n lư t th c hi n vì m t quá trình khác ang có CPU. (sleeping) tr ng thái t m d ng, t c là quá trình t m d ng không ho t ng (20 giây ho c ít hơn) (traced or stopped) tr ng thái d ng, quá trình có th b treo b i m t quá trình ngoài
  • 97. 9 7 W < N L (zombie process) quá trình ã k t thúc th c hi n, nhưng nó v n ư c tham chi u trong h th ng không có các trang thư ng trú quá trình có m c ưu tiên cao hơn quá trình có m c ưu tiên th p hơn có các trang khóa bên trong b nh 4.2. Các l nh cơ b n 4.2.1. L nh fg và l nh bg Linux cho phép ngư i dùng s d ng t h p phím CTRL+z d ng m t quá trình và kh i ng l i quá trình ó b ng cách gõ l nh fg. L nh fg (foreground) tham chi u n các chương trình mà màn hình cũng như bàn phím ang làm vi c v i chúng. Ví d , ngư i dùng ang xem trang man c a l nh sort, nhìn xu ng cu i th y có tùy ch n -b, mu n th tùy ch n này ng th i v n mu n xem trang man. Thay cho vi c ánh q thoát và sau ó ch y l i l nh man, cho phép ngư i dùng gõ CTRL+z t m d ng l nh man và gõ l nh th tùy ch n -b. Sau khi th xong, hãy gõ fg ti p t c xem trang man c a l nh sort. K t qu c a quá trình trên hi n th như sau: # man sort | more SORT(1) FSF SORT(1) NAME sort - sort lines of text Files SYNOPSIS ../src/sort [OPTION] ... [Files]... DESCRIPTION Write sorted concatenation of all FILE(s) to standard out-put. +POS1 [-POS2] start a key at POS1,end it *before* POS2 obsoles-cent)field numbers and character offsets are num-bered starting with zero(contrast with the -k option) -b ignore leading blanks in sort fields or keys --More-- (CTRL+z) [1]+ Stopped man sort | more # ls -s | sort -b | head -4 1 Archives/ 1 InfoWorld/ 1 Mail/ 1 News/ 1 OWL/ # fg man sort | more --More--
  • 98. 9 8 Trong ph n trư c, cách th c gõ phím CTRL+z t m d ng m t quá trình ã ư c gi i thi u. Linux còn ngư i dùng cách th c ch y m t chương trình dư i ch n n (background) - s d ng l nh bg - trong khi các chương trình khác ang ch y, và chuy n m t chương trình vào trong ch n n - dùng ký hi u &. N u m t quá trình ho t ng mà không ưa ra thông tin nào trên màn hình và không c n nh n b t kỳ thông tin u vào nào, thì có th s d ng l nh bg ưa nó vào trong ch n n ( ch này nó s ti p t c ch y cho n khi k t thúc). Khi chương trình c n ưa thông tin ra màn hình ho c nh n thông tin t bàn phím, h th ng s t ng d ng chương trình và thông báo cho ngư i dùng. Cũng có th s d ng ch s i u khi n công vi c (job control) làm vi c v i chương trình nào mu n. Khi ch y m t chương trình trong ch n n, chương trình ó ư c ánh s th t ( ư c bao b i d u ngo c vuông []), theo sau là ch s c a quá trình. Sau ó có th s d ng l nh fg + s th t c a chương trình ưa chương trình tr l i ch n i và ti p t c ch y. có m t chương trình (ho c m t l nh ng) t ng ch y trong ch n n, ch c n thêm ký hi u '&' vào cu i l nh. Trong m t s h th ng, khi quá trình n n k t thúc thì h th ng s g i thông báo t i ngư i dùng, nhưng trên h u h t các h th ng, khi quá trình trên n n hoàn thành thì h th ng s ch cho n khi ngư i dùng gõ phím Enter thì m i hi n th d u nh c l nh m i kèm theo thông báo hoàn thành quá trình (thư ng thì m t quá trình hoàn thành sau kho ng 20 giây). N u c chuy n m t chương trình vào ch n n m c dù nó có các thông tin c n xu t ho c nh p t các thi t b vào ra chu n thì h th ng s ưa ra thông báo l i dư i d ng sau: Stopped (tty input/output) tên chương trình. Ví d , l nh sau ây th c hi n vi c tìm ki m file thu1 trong ch n n: # find -name thu1 & [5] 918 trong ch này, s th t c a chương trình là [5], ch s quá trình tương ng v i l nh find là 918. Vì gõ Enter khi quá trình chưa th c hi n xong nên trên màn hình ch hi n th s th t c a chương trình và ch s quá trình, n u ch kho ng 30 ho c 40 giây sau r i gõ Enter l n n a, màn hình hi n th thông báo hoàn thành chương trình như sau: # [5] Done find -name thu1 # Gi s chương trình chưa hoàn thành và mu n chuy n nó lên ch n i, hãy gõ l nh sau: # fg 5 find -name thu1 ./thu1 chương trình ã hoàn thành và hi n th thông báo r ng file thu1 n m thư m c g c. Thông thư ng s ưa ra m t thông báo l i n u ngư i dùng c chuy n m t chương trình vào ch n n khi mà chương trình ó c n ph i xu t ho c nh p thông tin t thi t b vào ra chu n. Ví d , l nh: # vi & [6] 920
  • 99. 9 9 # nh n Enter # [6] + Stopped (tty output) vi # L nh trên ch y chương trình vi trong ch n n, tuy nhiên l nh g p ph i l i vì ây là chương trình òi h i hi n th các thông tin ra màn hình (output). Dòng thông báo l i Stopped (tty intput) vi cũng x y ra khi chương trình vi c n nh n thông tin. 4.2.2. Hi n th các quá trình ang ch y v i l nh ps Linux cung c p cho ngư i dùng hai cách th c nh n bi t có nh ng chương trình nào ang ch y trong h th ng. Cách d hơn, ó là l nh jobs s cho bi t các quá trình nào ã d ng ho c là ư c ch y trong ch n n. Cách ph c t p hơn là s d ng l nh ps. L nh này cho bi t thông tin y nh t v các quá trình ang ch y trên h th ng. Ví d : # ps PID TTY TIME CMD 7813 pts/0 00:00:00 bash 7908 pts/0 00:00:00 ps # (PID - ch s c a quá trình, TTY - tên thi t b u cu i trên ó quá trình ư c th c hi n, TIME - th i gian ch y quá trình, CMD - l nh kh i t o quá trình). Cú pháp l nh ps: ps [tùy-ch n] L nh ps có m t lư ng quá phong phú các tùy ch n ư c chia ra làm nhi u lo i. Dư i ây là m t s các tùy ch n hay dùng. Các tùy ch n ơn gi n: -A, -e : ch n hi n th t t c các quá trình. -T : ch n hi n th các quá trình trên tr m cu i ang ch y. -a : ch n hi n th t t c các quá trình trên m t tr m cu i, bao g m c các quá trình c a nh ng ngư i dùng khác. -r : ch hi n th quá trình ang ư c ch y. Ch n theo danh sách -C : ch n hi n th các quá trình theo tên l nh. -G : hi n th các quá trình theo ch s nhóm ngư i dùng. -U : hi n th các quá trình theo tên ho c ch s c a ngư i dùng th c s (ngư i dùng kh i ng quá trình). -p : hi n th các quá trình theo ch s c a quá trình. -s : hi n th các quá trình thu c v m t phiên làm vi c. -t : hi n th các quá trình thu c m t tr m cu i. -u : hi n th các quá trình theo tên và ch s c a ngư i dùng hi u qu .
  • 100. 1 0 Thi t t khuôn d ng ư c ưa ra c a các quá trình -f : hi n th thông tin v quá trình v i các trư ng sau UID - ch s ngư i dùng, PID - ch s quá trình, PPID - ch s quá trình kh i t o ra quá trình, C - , STIME - th i gian kh i t o quá trình, TTY - tên thi t b u cu i trên ó quá trình ư c ch y, TIME - th i gian th c hi n quá trình, CMD - l nh kh i t o quá trình -l : hi n th y các thông tin v quá trình v i các trư ng F, S, UID, PID, PPID, C, PRI, NI, ADDR, SZ, WCHAN, TTY, TIME, CMD -o xâu-ch n : hi n th các thông tin v quá trình theo d ng do ngư i dùng t ch n thông qua xâu-ch n các kí hi u i u khi n hi n th có các d ng như sau: %C, %cpu % CPU ư c s d ng cho quá trình %mem % b nh ư c s d ng ch y quá trình %G tên nhóm ngư i dùng %P ch s c a quá trình cha kh i ng ra quá trình con %U nh danh ngư i dùng %c l nh t o ra quá trình %p ch s c a quá trình %x th i gian ch y quá trình %y thi t b u cu i trên ó quá trình ư c th c hi n Ví d , mu n xem các thông tin như tên ngư i dùng, tên nhóm, ch s quá trình, ch s quá trình kh i t o ra quá trình, tên thi t b u cu i, th i gian ch y quá trình, l nh kh i t o quá trình, hãy gõ l nh: # ps -o '%U %G %p %P %y %x %c' USER GROUP PID PPID TTY TIME COMMAND root root 1929 1927 pts/1 00:00:00 bash root root 2279 1929 pts/1 00:00:00 ps 4.2.3. H y quá trình v i l nh kill Trong m t s trư ng h p, s d ng l nh kill h y b m t quá trình. i u quan tr ng nh t khi s d ng l nh kill là ph i xác nh ư c ch s c a quá trình mà chúng ta mu n h y. Cú pháp l nh: kill [tùy-ch n] <ch -s -c a-ti n-trình> kill -l [tín hi u] L nh kill s g i m t tín hi u n quá trình ư c ch ra. N u không ch ra m t tín hi u nào thì ng m nh là tín hi u TERM s ư c g i. -s : xác nh tín hi u ư c g i. Tín hi u có th là s ho c tên c a tín hi u. Dư i ây là m t s tín hi u hay dùng: S Tên Ý nghĩa 1 SIGHUP (hang up) ây là tín hi u ư c g i n t t c các quá trình ang ch y trư c khi logout kh i h th ng 2 SIGINT (interrupt) ây là tín hi u ư c g i khi nh n
  • 101. 1 0 CTRL+c 9 SIGKILL (kill) tín hi u này s d ng quá trình ngay l p t c 15 SIGTERM tín hi u này yêu c u d ng quá trình ngay l p t c, nhưng cho phép chương trình xóa các file t m. -p : l nh kill s ch ưa ra ch s c a quá trình mà không g i m t tín hi u nào. -l : hi n th danh sách các tín hi u mà l nh kill có th g i n các quá trình (các tín hi u này có trong file /usr/include/Linux/signal.h) Ví d , # ps PID TTY TIME CMD 2240 pts/2 00:00:00 bash 2276 pts/2 00:00:00 man 2277 pts/2 00:00:00 more 2280 pts/2 00:00:00 sh 2281 pts/2 00:00:00 sh 2285 pts/2 00:00:00 less 2289 pts/2 00:00:00 man 2291 pts/2 00:00:00 sh 2292 pts/2 00:00:00 gunzip 2293 pts/2 00:00:00 less 2298 pts/2 00:00:00 ps # kill 2277 PID TTY TIME CMD 2240 pts/2 00:00:00 bash 2276 pts/2 00:00:00 man 2280 pts/2 00:00:00 sh 2281 pts/2 00:00:00 sh 2285 pts/2 00:00:00 less 2289 pts/2 00:00:00 man 2291 pts/2 00:00:00 sh 2292 pts/2 00:00:00 gunzip 2293 pts/2 00:00:00 less 2298 pts/2 00:00:00 ps 4.2.4. Cho máy ng ng ho t ng m t th i gian v i l nh sleep N u mu n cho máy ngh m t th i gian mà không mu n t t vì ng i kh i ng l i thì c n dùng l nh sleep. Cú pháp: sleep [tùy-ch n] NUMBER[SUFFIXƯ] NUMBER: s giây(s) ng ng ho t ng. SUFFIX : có th là giây(s) ho c phút(m) ho c gi ho c ngày(d)
  • 102. 1 0 Các tùy ch n: --help : hi n th tr giúp và thoát --version : hi n th thông tin v phiên b n và thoát 4.2.5. Xem cây quá trình v i l nh pstree ã bi t l nh xem các quá trình ang ch y trên h th ng, tuy nhiên trong Linux còn có m t l nh cho phép có th nhìn th y m c phân c p c a các quá trình, ó là l nh pstree. Cú pháp l nh: pstree [tùy-ch n] [pid | ngư i-dùng] L nh pstree s hi n th các quá trình ang ch y dư i d ng cây quá trình. G c c a cây quá trình thư ng là init. N u ưa ra tên c a m t ngư i dùng thì cây c a các quá trình do ngư i dùng ó s h u s ư c ưa ra. pstree thư ng g p các nhánh quá trình trùng nhau vào trong d u ngo c vuông, ví d : init -+-getty |-getty |-getty |-getty thành init ---4*[getty] -a : ch ra tham s dòng l nh. N u dòng l nh c a m t quá trình ư c tráo i ra bên ngoài, nó ư c ưa vào trong d u ngo c ơn. -c : không th thu g n các cây con ng nh t. M c nh, các cây con s ư c thu g n khi có th -h : hi n th quá trình hi n th i và "t tiên" c a nó v i màu sáng tr ng -H : gi ng như tùy ch n -h, nhưng quá trình con c a quá trình hi n th i không có màu sáng tr ng -l : hi n th dòng dài. -n : s p x p các quá trình cùng m t t tiên theo ch s quá trình thay cho s p x p theo tên Ví d , # pstree init-+-apmd |-atd |-automount |-crond |-enlightenment |-gdm-+-X | `-gdm---gnome-session |-gen_util_applet |-gmc |-gnome-name-serv |-gnome-smproxy |-gnomepager_appl |-gpm |-identd---identd---3*[identd]
  • 103. 1 0 |-inetd |-kflushd |-klogd |-kpiod |-kswapd |-kupdate |-lockd---rpciod |-login---bash---mc-+-bash-+-cat | | |-passwd | | `-pstree | `-cons.saver |-lpd |-mdrecoveryd |-5*[mingetty] |-panel |-portmap |-rpc.statd |-sendmail |-syslogd `-xfs 4.2.6. L nh thi t t l i ưu tiên c a quá trình nice và l nh renice Ngoài các l nh xem và h y b quá trình, trong Linux còn có hai l nh liên quan n ưu tiên c a quá trình, ó là l nh nice và l nh renice. ch y m t chương trình v i ưu tiên nh trư c, hãy s d ng l nh nice. Cú pháp l nh: nice [tùy-ch n] [l nh [tham-s ]... ] L nh nice s ch y m t chương trình (l nh) theo ưu tiên ã s p x p. N u không có l nh, m c ưu tiên hi n t i s hi n th . ưu tiên ư c s p x p t -20 (m c ưu tiên cao nh t) n 19 (m c ưu tiên th p nh t). -ADJUST : tăng ưu tiên theo ADJUST u tiên --help : hi n th trang tr giúp và thoát thay i ưu tiên c a m t quá trình ang ch y, hãy s d ng l nh renice. Cú pháp l nh: renice < -ưu-tiên> [tùy-ch n] L nh renice s thay i m c ưu tiên c a m t ho c nhi u quá trình ang ch y. -g : thay i quy n ưu tiên theo nhóm ngư i dùng -p : thay i quy n ưu tiên theo ch s c a quá trình -u : thay i quy n ưu tiên theo tên ngư i dùng Ví d : # renice +1 987 -u daemon root -p 32
  • 104. 1 0 l nh trên s thay i m c ưu tiên c a quá trình có ch s là 987 và 32, và t t c các quá trình do ngư i dùng daemon và root s h u.
  • 105. 1 0 CHƯƠNG 5. QU N LÝ TÀI KHO N NGƯ I DÙNG Chương này cung c p m t s công c h u ích trong Linux qu n lý các tài kho n ngư i dùng trên h th ng. 5.1 Tài kho n ngư i dùng Như ã bi t, trong h i u hành a ngư i dùng, c n phân bi t ngư i dùng khác nhau do quy n s h u các tài nguyên trong h th ng, ch ng h n như, m i ngư i dùng có quy n h n v i file, quá trình c a riêng h . i u này v n r t quan tr ng th m chí c khi máy tính ch có m t ngư i s d ng t i m t th i i m. M i truy c p h th ng Linux u thông qua tài kho n ngư i dùng. Vì th , m i ngư i s d ng ư c g n v i tên duy nh t ( ã ư c ăng ký) và tên ó ư c s d ng ăng nh p. Tuy nhiên m t ngư i dùng th c s có th có nhi u tên ăng nh p khác nhau. Tài kho n ngư i dùng có th hi u là t t c các file, các tài nguyên, và các thông tin thu c v ngư i dùng ó. Khi cài t h i u hành Linux, ăng nh p root s ư c t ng t o ra. ăng nh p này ư c xem là thu c v siêu ngư i dùng (ngư i dùng c p cao, ngư i qu n tr ), vì khi ăng nh p v i tư cách ngư i dùng root, có th làm b t c i u gì mu n trên h th ng. T t nh t ch nên ăng nh p root khi th c s c n thi t, và hãy ăng nh p vào h th ng v i tư cách là m t ngư i dùng bình thư ng. N i dung chương này gi i thi u các l nh t o m t ngư i dùng m i, thay i thu c tính c a m t ngư i dùng cũng như xóa b m t ngư i dùng. Lưu ý, ch có th th c hi n ư c các l nh trên n u có quy n c a m t siêu ngư i dùng. 5.2 Các l nh cơ b n qu n lý ngư i dùng Ngư i dùng ư c qu n lý thông qua tên ngư i dùng (th c ra là ch s ngư i dùng). Nhân h th ng qu n lý ngư i dùng theo ch s , vì vi c qu n lý theo ch s s d dàng và nhanh thông qua m t cơ s d li u lưu tr các thông tin v ngư i dùng. Vi c thêm m t ngư i dùng m i ch có th th c hi n ư c n u ăng nh p v i tư cách là siêu ngư i dùng. t o m t ngư i dùng m i, c n ph i thêm thông tin v ngư i dùng ó vào trong cơ s d li u ngư i dùng, và t o m t thư m c cá nhân cho riêng ngư i dùng ó. i u này r t c n thi t thi t l p các bi n môi trư ng phù h p cho ngư i dùng. L nh chính thêm ngư i dùng trong h th ng Linux là useradd (ho c adduser). 5.2.1 File /etc/passwd Danh sách ngư i dùng cũng như các thông tin tương ng ư c lưu tr trong file /etc/passwd. Ví d dư i ây là n i dung c a file /etc/passwd: mail:x:8:12:mail:/var/spool/mail: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: bien:x:500:0:Nguyen Thanh Bien:/home/bien:/bin/bash sangnm:x:17:100:Nguyen Minh Sang:/home/sangnm:/bin/bash lan:x:501:0:Lan GNU:/home/lan:/bin/bash M i dòng trong file tương ng v i b y trư ng thông tin c a m t ngư i dùng, và các trư ng này ư c ngăn cách nhau b i d u ':'. ý nghĩa c a các trư ng thông tin ó l n lư t như sau:
  • 106. 1 0 Tên ngư i dùng (username) M t kh u ngư i dùng (passwd - ư c mã hóa) Ch s ngư i dùng (user id) Các ch s nhóm ngư i dùng (group id) Tên y ho c các thông tin khác v tài kho n ngư i dùng (comment) Thư m c ngư i dùng ăng nh p Shell ăng nh p (chương trình ch y lúc ăng nh p) B t kỳ ngư i dùng nào trên h th ng u có th c ư c n i dung file /etc/passwd, và có th ăng nh p v i tư cách ngư i dùng khác n u h bi t ư c m t kh u, ây chính là lý do vì sao m t kh u ăng nh p c a ngư i dùng không hi n th trong n i dung file. 5.2.2 Thêm ngư i dùng v i l nh useradd Siêu ngư i dùng s d ng l nh useradd t o m t ngư i dùng m i ho c c p nh t ng m nh các thông tin v ngư i dùng. Cú pháp l nh: useradd [tùy-ch n] <tên-ngư i-dùng> useradd -D [tùy-ch n] N u không có tùy ch n -D, l nh useradd s t o m t tài kho n ngư i dùng m i s d ng các giá tr ư c ch ra trên dòng l nh và các giá tr m c nh c a h th ng. Tài kho n ngư i dùng m i s ư c nh p vào trong các file h th ng, thư m c cá nhân s ư c t o, hay các file kh i t o ư c sao chép, i u này tùy thu c vào các tùy ch n ư c ưa ra. Các tùy ch n như sau: -c, comment : so n th o trư ng thông tin v ngư i dùng. -d, home_dir : t o thư m c ăng nh p cho ngư i dùng. -e, expire_date : thi t t th i gian (YYYY-MM-DD) tài kho n ngư i dùng s b h y b . -f, inactive_days : tùy ch n này xác nh s ngày trư c khi m t kh u c a ngư i dùng h t hi u l c khi tài kho n b h y b . N u =0 thì h y b tài kho n ngư i dùng ngay sau khi m t kh u h t hi u l c, =-1 thì ngư c l i (m c nh là -1). -g, initial_group : tùy ch n này xác nh tên ho c s kh i t o ăng nh p nhóm ngư i dùng. Tên nhóm ph i t n t i, và s c a nhóm ph i tham chi u n m t nhóm ã t n t i. S nhóm ng m nh là 1. -G, group : danh sách các nhóm ph mà ngư i dùng cũng là thành viên thu c các nhóm ó. M i nhóm s ư c ngăn cách v i nhóm khác b i d u ',', m c nh ngư i dùng s thu c vào nhóm kh i t o. -m : v i tùy ch n này, thư m c cá nhân c a ngư i dùng s ư c t o n u nó chưa t n t i. -M : không t o thư m c ngư i dùng. -n : ng m nh khi thêm ngư i dùng, m t nhóm cùng tên v i ngư i dùng s ư c t o. Tùy ch n này s lo i b s ng m nh trên.// -p, passwd : t o m t kh u ăng nh p cho ngư i dùng.// -s, shell : thi t l p shell ăng nh p cho ngư i dùng. -u, uid : thi t t ch s ngư i dùng, giá tr này ph i là duy nh t. Thay i các giá tr ng m nh
  • 107. 1 0 Khi tùy ch n -D ư c s d ng, l nh useradd s b qua các giá tr ng m nh và c p nh t các giá tr m i. -b, default_home : thêm tên ngư i dùng vào cu i thư m c cá nhân t o tên thư m c cá nhân m i. -e, default_expire_date : thay i th i h n h t giá tr c a tài kho n ngư i dùng. -f, default_inactive : xác nh th i i m h t hi u l c c a m t kh u ăng nh p khi tài kho n ngư i dùng b xóa b . -g, default_group : thay i ch s nhóm ngư i dùng. -s, default_shell : thay i shell ăng nh p. Ngoài l nh useradd, có th t o ngư i dùng m i b ng cách sau: So n th o file /etc/passwd b ng vipw. L nh vipw m trình so n th o trên h th ng và hi u ch nh b n sao t m c a file /etc/passwd. Vi c s d ng file t m và khóa file s có tác d ng như m t cơ ch khóa ngăn vi c hai ngư i dùng cùng so n th o file m t lúc. Lúc ó s thêm dòng thông tin m i v ngư i dùng c n t o. Hãy c n th n trong vi c so n th o tránh nh m l n. Riêng trư ng m t kh u nên tr ng và t o m t kh u sau. Khi file này ư c lưu, vipw s ki m tra s ng nh t trên file b thay i. N u t t c m i th dư ng như thích h p thì có nghĩa là file /etc/passwd ã ư c c p nh t. Ví d : thêm ngư i dùng có tên là new, ch s ngư i dùng 503, ch s nhóm là 100, thư m c cá nhân là /home/new và shell ăng nh p là shell bash: # vipw mail:x:8:12:mail:/var/spool/mail: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: bien:x:500:0:Nguyen Thanh Bien:/home/bien:/bin/bash sang:x:17:100:Nguyen Minh Sang:/home/sangnm:/bin/bash lan:x:501:0:Lan GNU:/home/lan:/bin/bash new::503:100:them mot nguoi moi:/home/new:/bin/bash T o thư m c cá nhân c a ngư i dùng m i v i l nh mkdir # mkdir /home/new Sao chép các file t thư m c /etc/skel/ ( ây là thư m c lưu tr các file c n thi t cho ngư i dùng) vào file cá nhân v a t o Thay i quy n s h u và các quy n truy nh p file /home/new v i các l nh chown và chmod # chown new /home/new # chmod go=u,go-w /home/new Thi t l p m t kh u c a ngư i dùng v i l nh passwd # passwd new passwd: Sau khi thi t l p m t kh u cho ngư i dùng bư c cu i cùng, tài kho n ngư i dùng s làm vi c. Nên thi t l p m t kh u ngư i dùng bư c cu i cùng, n u không h có th vô tình ăng nh p trong khi ang sao chép các file.
  • 108. 1 0 5.2.3 Thay i thu c tính ngư i dùng Trong Linux có r t nhi u l nh cho phép thay i m t s các thu c tính c a tài kho n ngư i dùng như: chfn: thay i thông tin cá nhân c a ngư i dùng. chsh: thay i shell ăng nh p. passwd: thay i m t kh u. M t s các thu c tính khác s ph i thay i b ng tay. Ví d , thay i tên ngư i dùng, c n so n th o l i tr c ti p trên file /etc/passwd (v i l nh vipw). Nhưng có m t l nh t ng quát cho phép có th thay i b t kỳ thông tin nào v tài kho n ngư i dùng, ó là l nh usermod. Cú pháp l nh: usermod [tùy-ch n] <tên- ăng-nh p> L nh usermod s a i các file tài kho n h th ng theo các thu c tính ư c xác nh trên dòng l nh. Các tùy ch n c a l nh: -c, comment : thay i thông tin cá nhân c a tài kho n ngư i dùng. -d, home_dir : thay i thư m c cá nhân c a tài kho n ngư i dùng. -e, expire_date : thay i th i i m h t h n c a tài kho n ngư i dùng (YYYY-MM-DD). -f, inactive_days : thi t t s ngày h t hi u l c c a m t kh u trư c khi tài kho n ngư i dùng h t h n s d ng. -g, initial_group : tùy ch n này thay i tên ho c s kh i t o ăng nh p nhóm ngư i dùng. Tên nhóm ph i t n t i, và s c a nhóm ph i tham chi u n m t nhóm ã t n t i. S nhóm ng m nh là 1. -G, group : thay i danh sách các nhóm ph mà ngư i dùng cũng là thành viên thu c các nhóm ó. M i nhóm s ư c ngăn cách v i nhóm khác b i d u ',' m c nh ngư i dùng s thu c vào nhóm kh i t o. -l, login_name : thay i tên ăng nh p c a ngư i dùng. Trong m t s trư ng h p, tên thư m c riêng c a ngư i dùng có th s thay i tham chi u n tên ăng nh p m i. -p, passwd : thay i m t kh u ăng nh p c a tài kho n ngư i dùng. -s, shell : thay i shell ăng nh p. -u, uid : thay i ch s ngư i dùng. L nh usermod không cho phép thay i tên c a ngư i dùng ang ăng nh p. Ph i m b o r ng ngư i dùng ó không th c hi n b t kỳ quá trình nào trong khi l nh usermod ang th c hi n thay i các thu c tính c a ngư i dùng ó. Ví d mu n thay i tên ngư i dùng new thành tên m i là newuser, hãy gõ l nh sau: # usermod -l new newuser 5.2.4 Xóa b m t ngư i dùng (l nh userdel) xóa b m t ngư i dùng, trư c h t ph i xóa b m i th có liên quan n ngư i dùng ó. L nh hay ư c dùng xóa b m t tài kho n ngư i dùng là l nh userdel v i cú pháp: userdel [-r] <tên-ngư i-dùng>
  • 109. 1 0 L nh này s thay i n i dung c a các file tài kho n h th ng b ng cách xóa b các thông tin v ngư i dùng ư c ưa ra trên dòng l nh. Ngư i dùng này ph i th c s t n t i. Tuỳ ch n -r có ý nghĩa: -r : các file t n t i trong thư m c riêng c a ngư i dùng cũng như các file n m trong các thư m c khác có liên quan n ngư i dùng b xóa b cùng lúc v i thư m c ngư i dùng. L nh userdel s không cho phép xóa b ngư i dùng khi h ang ăng nh p vào h th ng. Ph i h y b m i quá trình có liên quan n ngư i dùng trư c khi xoá b ngư i dùng ó. Ngoài ra cũng có th xóa b tài kho n c a m t ngư i dùng b ng cách hi u ch nh l i file /etc/passwd. 5.3 Các l nh cơ b n liên quan n nhóm ngư i dùng M i ngư i dùng trong h th ng Linux u thu c vào m t nhóm ngư i dùng c th . T t c nh ng ngư i dùng trong cùng m t nhóm có th cùng truy nh p m t trình ti n ích, ho c u c n truy c p m t thi t b nào ó như máy in ch ng h n. M t ngư i dùng cùng lúc có th là thành viên c a nhi u nhóm khác nhau, tuy nhiên t i m t th i i m, ngư i dùng ch thu c vào m t nhóm c th . Nhóm có th thi t l p các quy n truy nh p các thành viên c a nhóm ó có th truy c p thi t b , file, h th ng file ho c toàn b máy tính mà nh ng ngư i dùng khác không thu c nhóm ó không th truy c p ư c. 5.3.1 Nhóm ngư i dùng và file /etc/group Thông tin v nhóm ngư i dùng ư c lưu trong file /etc/group, file này có cách b trí tương t như file /etc/passwd. Ví d n i dung c a file /etc/group có th như sau: root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon disk:x:6:root lp:x:7:daemon,lp mail:x:12:mail huyen:x:500: langnu:x:501: M i dòng trong file có b n trư ng ư c phân cách b i d u ':'. ý nghĩa c a các trư ng theo th t xu t hi n như sau: Tên nhóm ngư i dùng (groupname) M t kh u nhóm ngư i dùng (passwd - ư c mã hóa), n u trư ng này r ng, t c là nhóm không yêu c u m t kh u Ch s nhóm ngư i dùng (group id) Danh sách các ngư i dùng thu c nhóm ó (users)
  • 110. 1 1 5.3.2 Thêm nhóm ngư i dùng Cho phép hi u ch nh thông tin trong file /etc/group b ng b t kỳ trình so n th o văn b n nào có trên h th ng c a thêm nhóm ngư i dùng, nhưng cách nhanh nh t là s d ng l nh groupadd. Cú pháp l nh : groupadd [tùy-ch n] <tên-nhóm> Các tuỳ ch n là: -g, gid : tùy ch n này xác nh ch s nhóm ngư i dùng, ch s này ph i là duy nh t. Ch s m i ph i có giá tr l n hơn 500 và l n hơn các ch s nhóm ã có trên h th ng. Giá tr t 0 n 499 ch dùng cho các nhóm h th ng. -r : tùy ch n này ư c dùng khi mu n thêm m t tài kho n h th ng. -f : tùy ch n này s b qua vi c nh c nh , n u nhóm ngư i dùng ó ã t n t i, nó s b ghi è. Ví d : Thêm nhóm ngư i dùng b ng cách so n th o file /etc/group: installer:x:102:hieu, huy, sang tiengviet:x:103:minh, long, dung Hai dòng trên s b sung hai nhóm ngư i dùng m i cùng danh sách các thành viên trong nhóm: nhóm installer v i ch s nhóm là 102 và các thành viên là các ngư i dùng có tên hieu, huy, sang. Tương t là nhóm tiengviet v i ch s nhóm là 103 và danh sách các thành viên là minh, long, dung. ây là hai nhóm (102, 103) ngư i dùng h th ng. Thêm nhóm ngư i dùng m i v i l nh groupadd: # groupadd -r installer L nh trên s cho phép t o m t nhóm ngư i dùng m i có tên là installer, tuy nhiên các thành viên trong nhóm s ph i b sung b ng cách so n th o file /etc/group. 5.3.3 S a i các thu c tính c a m t nhóm ngư i dùng (l nh groupmod) Trong m t s trư ng h p c n ph i thay i m t s thông tin v nhóm ngư i dùng b ng l nh groupmod v i cú pháp như sau: groupmod [tùy-ch n] <tên-nhóm> Thông tin v các nhóm xác nh qua tham s tên-nhóm ư c i u ch nh. Các tùy ch n c a l nh: -g, gid : thay i giá tr ch s c a nhóm ngư i dùng. -n, group_name : thay i tên nhóm ngư i dùng. 5.3.4 Xóa m t nhóm ngư i dùng (l nh groupdel) N u không mu n m t nhóm nào ó t n t i n a thì ch vi c xóa tên nhóm ó trong file /etc/group. Nhưng ph i lưu ý r ng, ch xóa ư c m t nhóm khi không có ngư i dùng nào thu c nhóm ó n a. Ngoài ra có th s d ng l nh groupdel xóa m t nhóm ngư i dùng. Cú pháp l nh: groupdel <tên-nhóm>
  • 111. 1 1 L nh này s s a i các file tài kho n h th ng, xóa t t c các th c th liên quan n nhóm. Tên nhóm ph i th c s t n t i. 5.4 Các l nh cơ b n khác có liên quan n ngư i dùng Ngoài các l nh như thêm ngư i dùng, xóa ngư i dùng ..., còn có m t s l nh khác có th giúp ích r t nhi u n u ang làm vi c trên m t h th ng a ngư i dùng. 5.4.1 ăng nh p v i tư cách m t ngư i dùng khác khi dùng l nh su ôi lúc mu n th c hi n l nh như m t ngư i dùng khác và s d ng các file hay thi t b thu c quy n s h u c a ngư i dùng ó. L nh su cho phép thay i tên ngư i dùng m t cách hi u qu và c p cho các quy n truy nh p c a ngư i dùng ó. Cú pháp l nh: su <ngư i-dùng> N u ăng nh p v i tư cách ngư i dùng bình thư ng và mu n tr thành siêu ngư i dùng (root) dùng l nh sau: # su root Khi ó h th ng s yêu c u nh p m t kh u c a siêu ngư i dùng. N u cung c p úng m t mã, thì s là ngư i dùng root cho t i khi dùng l nh exit ho c CTRL+d ăng xu t ra kh i tài kho n này và tr v ăng nh p ban u. Tương t , n u ăng nh p v i tư cách root và mu n tr thành ngư i dùng bình thư ng có tên là newer thì hãy gõ l nh sau: # su newer s không b h i v m t kh u khi thay i t siêu ngư i dùng sang m t ngư i dùng khác. Tuy nhiên n u ăng nh p v i tư cách ngư i dùng bình thư ng và mu n chuy n i sang m t ăng nh p ngư i dùng khác thì ph i cung c p m t kh u c a ngư i dùng ó. 5.4.2 Xác nh ngư i dùng ang ăng nh p (l nh who) * L nh who là m t l nh ơn gi n, cho bi t ư c hi n t i có nh ng ai ang ăng nh p trên h th ng v i cú pháp như sau: who [tùy-ch n] Các tuỳ ch n là: -H, --heading : hi n th tiêu c a các c t trong n i dung l nh. -m : hi n th tên máy và tên ngư i dùng v i thi t b vào chu n. -q, --count : hi n th tên các ngư i dùng ăng nh p và s ngư i dùng ăng nh p. Ví d : # who root tty1 Nov 15 03:54 lan pts/0 Nov 15 06:07 # L nh who hi n th ba c t thông tin cho t ng ngư i dùng trên h th ng. C t u là tên c a ngư i dùng, c t th hai là tên thi t b u cu i mà ngư i dùng ó ang s d ng, c t th ba hi n th ngày gi ngư i dùng ăng nh p. Ngoài who, có th s d ng thêm l nh users xác nh ư c nh ng ngư i ăng nh p trên h th ng.
  • 112. 1 1 Ví d : # users lan root # * Trong trư ng h p ngư i dùng không nh n i tên ăng nh p trong m t phiên làm vi c ( i u này nghe có v như hơi vô lý nhưng là tình hu ng ôi lúc g p ph i), hãy s d ng l nh whoami và who am i. Cú pháp l nh: whoami ho c who am i Ví d : # whoami lan # # who am i may9!lan pts/0 Nov 15 06:07 # L nh who am i s hi n k t qu y hơn v i tên máy ăng nh p, tên ngư i dùng ang ăng nh p, tên thi t b và ngày gi ăng nh p. * Có m t cách khác xác nh thông tin ngư i dùng v i l nh id Cú pháp l nh: id [tùy-ch n] [ngư i-dùng] L nh này s ưa ra thông tin v ngư i dùng ư c xác nh trên dòng l nh ho c thông tin v ngư i dùng hi n th i. Các tuỳ ch n là: -g, --group : ch hi n th ch s nhóm ngư i dùng. -u, --user : ch hi n th ch s c a ngư i dùng. --help : hi n th trang tr giúp và thoát. Ví d : # id uid=506(lan) gid=503(lan) groups=503(lan) # # id -g 503 # # id -u 506 # # id root
  • 113. 1 1 uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon), 3(sys),4(adm),6(disk),10(wheel) # 5.4.3 Xác nh các quá trình ang ư c ti n hành (l nh w) L nh w cho phép xác nh ư c thông tin v các quá trình ang ư c th c hi n trên h th ng và nh ng ngư i dùng ti n hành quá trình ó. Cú pháp l nh: w [ngư i-dùng] L nh w ưa ra thông tin v ngư i dùng hi n th i trên h th ng và quá trình h ang th c hi n. N u ch ra ngư i dùng trong l nh thì ch hi n ra các quá trình liên quan n ngư i dùng ó. Ví d : # w root tty2 - 2:14pm 13:03 9.30s 9.10s /usr/bin/mc -P lan pts/1 192.168.2.213 3:20pm 0.00s 0.69s 0.10s w root pts/2 :0 3:33pm 9:32 0.41s 0.29s /usr/bin/mc –P
  • 114. 1 1 CHƯƠNG 6. TRUY N THÔNG VÀ M NG UNIX-LINUX 6.1. L nh truy n thông 6.1.1. L nh write L nh write ư c dùng trao i gi a nh ng ngư i hi n ang cùng làm vi c trong h th ng. Thông thư ng, m t ngư i dùng mu n liên h v i ngư i dùng khác, c n s d ng l nh who: $who hi n thông tin như sau: user1 tty17 Oct 15 10:20 user2 tty43 Oct 15 8:25 user4 tty52 Oct 15 12:20 trong ó có tên ngư i dùng, s hi u terminal, ngày gi vào h th ng. Sau ó s d ng l nh write chuy n thông báo cho nhau. $write <tên ngư i dùng> [<tên tr m cu i>] c n g i thông báo n ngư i dùng user1 có tên user2 s gõ: $write user2 tty43 • N u ngư i dùng user2 hi n không làm vi c thì trên màn hình ngư i dùng user1 s hi n ra: "user2 is not logged in" và hi n l i d u m i shell. • N u ngư i dùng user2 ang làm vi c, máy ngư i dùng user2 s phát ra ti ng chuông và trên màn hình hi n ra: Message from user1 on tty17 at <gi , phút> Cùng lúc ó, t i máy c a user1 màn hình tr ng hi n nh ng thông tin g i t i ngư i dùng user2. Ngư i g i gõ thông báo c a mình theo quy t c: - K t thúc m t dòng b ng c m -o, - K t thúc dòng cu i cùng (h t thông báo) b ng c m -oo. k t thúc k t n i v i ngư i dùng user2, ngư i dùng user1 gõ ctrl-d. t ch i m i vi c nh n thông báo t ngư i khác, s d ng l nh không nh n thông báo: $mesg n (n - no) M t ngư i khác g i thông báo n ngư i này s nh n ư c vi c truy nh p không cho phép permission denied. ti p t c cho phép ngư i khác g i thông báo n, s d ng l nh: $mesg y (y - yes) 6.1.2. L nh mail L nh mail cho phép g i thư i n t gi a các ngư i dùng, song ho t ng theo ch off-line (gián ti p). Khi dùng l nh write truy n thông cho nhau thì òi h i hai ngư i g i và nh n ng th i ang làm vi c và cùng ch p nh n cu c trao i ó. Cách th c s d ng mail là khác h n: m t trong hai ngư i g i ho c nh n có th không ăng nh p vào h th ng. m bào cách th c truy n thông gián ti p (còn g i là off-line) như v y, h th ng t o ra cho m i ngư i dùng m t h p thư riêng. Khi m t ngư i dùng l nh mail g i thư n m t ngư i khác thì thư ư c t ng cho vào h p thư c a ngư i nh n và ngư i nh n sau ó cũng dùng l nh mail xem trong h p thư có thư m i hay không. Không nh ng th mail còn cho phép s d ng trên m ng internet ( a ch mail thư ng dư i d ng tên- login@máy.m ng.lĩnh-v c.qu c-gia).
  • 115. 1 1 - L nh mail ch yêu c u ngư i g i (ho c ngư i nh n) login trong h th ng. Vi c nh n và g i thư ư c ti n hành t m t ngư i dùng. Thư g i i cho ngư i dùng khác, ư c lưu t i h p thư c a h th ng. - T i th i i m login h th ng, ngư i dùng có th th y ư c có thư m i khi trên màn hình xu t hi n dòng thông báo "you have mail". L nh mail trong UNIX g m 2 ch c năng: g i thư và qu n lý thư. Tương ng, có hai ch làm vi c v i l nh mail: mode l nh (command mode) qu n tr thư và mode so n (compose mode) cho phép t o thư. a/ Mode so n Mode so n làm vi c tr c ti p v i m t thư và g i ngay cho ngư i khác. Mode so n th c ch t là s d ng l nh mail có tham s : $mail tên_ngư i_nh n> Ví d , $mail user2 L nh này cho phép so n và g i thư cho ngư i nh n có tên ư c ch . Sau khi gõ l nh, màn hình b xóa và con tr so n th o nh p nháy góc trên, trái ngư i dùng gõ n i dung thư. k t thúc so n thư, hãy gõ ctrl-d, màn hình c a mail bi n m t và d u m i c a shell l i xu t hi n. Chú ý: D ng sau ây ư c dùng g i thư ã so n trong n i dung m t file nào ó (chú ý d u "<" ch d n thi t b vào chu n là n i dung file thay vì cho bàn phím): $mail tên_ngư i_nh n < tên_file_n i_dung_thư Ví d , $ mail user2 < thu1 N i dung thư t File thu1 ư c g i cho ngư i nh n user2, d u m i c a shell l i hi n ra. Cách làm trên ây hay ư c s d ng trong g i / nh n thư i n t ho c liên k t truy n thông vì cho phép ti t ki m ư c th i gian k t n i vào h th ng, c bi t chi phí ph i tr khi k t n i là áng k . b/ Mode l nh Như ã nói s d ng mode l nh c a mail qu n lý h p thư. Vào mail theo mode l nh khi dùng l nh mail không tham s : $mail Sau khi gõ l nh, màn hình mail mode l nh ư c hi n ra v i d u m i c a mode l nh. (ph bi n là d u ch m h i "?") T i ây ngư i dùng s d ng các l nh c a mail qu n lý h th ng thư c a mình. C n tr giúp gõ d u ch m h i (màn hình có hai d u ??): ? màn hình hi n ra d ng sau: <s > Hi n thư s <s > (d u cách) Hi n thư ngay phía trư c + Hi n thư ngay ti p theo l cmd th c hi n l nh cmd dq xóa thư hi n th i và ra kh i mail m user g i thư hi n th i cho ngư i dùng s tên-file ghi thư hi n th i vào file có tên r [tên-file] tr l i thư hi n th i (có th t file) d <s > xóa thư s u khôi ph c thư hi n th i u <s > khôi ph c thư s m <user> ... chuy n ti p thư t i các ngư i dùng khác q ra kh i mail
  • 116. 1 1 Th c hi n các l nh theo ch d n trên ây qu n tr ư c h p thư c a cá nhân. 6.1.3. L nh talk Trong Linux cho phép s d ng l nh talk thay th cho l nh write. 6.2 C u hình Card giao ti p m ng các máy có th giao ti p ư c v i nhau trong m ng theo giao th c TCP/IP, thi t b dùng làm phương ti n giao ti p ó là Card giao ti p m ng (network card). qu n lý thi t b này Linux cung c p l nh ifconfig. L nh này dùng xem các thông tin v c u hình m ng hi n th i c a máy cũng như gán các a ch cho các card giao ti p m ng (interface). Ngoài ra ta cũng có th dùng l nh này kích ho t ho c t t m t card m ng. /sbin/ifconfig <giao di n> [ < a ch > ] [ arp | -arp][ broadcast < a ch >][netmask <m t n m ng> ] trong ó: <giao di n> tên c a thi t b giao ti p m ng, ch ng h n eth0 cho card m ng u tiên, eth1 cho card m ng th hai. < a ch > a ch m ng s gán cho giao di n này. up tuỳ ch n này s kích ho t giao di n ư c ch ra. down tuỳ ch n này s t t giao di n ư c ch ra. arp | -arp cho phép hay c m giao th c ARP trên giao di n này. broadcast < a ch > xác nh a ch qu ng bá cho giao di n này. netmask <m t n m ng> xác nh m t n m ng cho giao di n này. xem c u hình c a máy hi n t i ta dùng l nh # ifconfig Và ví d v k t qu thu ư c là: eth0 Link encap:Ethernet HWaddr 00:02:55:07:63:07 inet addr:203.113.130.201 Bcast:203.113.130.223 Mask:255.255.255.224 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3912830 errors:84463 dropped:0 overruns:0 frame:0 TX packets:2402090 errors:0 dropped:0 overruns:0 carrier:0 collisions:84463 txqueuelen:100 RX bytes:2767096664 (2638.9 Mb) TX bytes:1265930467 (1207.2 Mb) Interrupt:29
  • 117. 1 1 eth1 Link encap:Ethernet HWaddr 00:05:1C:98:05:B1 inet addr:10.10.0.10 Bcast:10.10.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15389731 errors:0 dropped:0 overruns:0 frame:0 TX packets:7768909 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:2578998337 (2459.5 Mb) TX bytes:1471928637 (1403.7 Mb) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:45868 errors:0 dropped:0 overruns:0 frame:0 TX packets:45868 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5338927 (5.0 Mb) TX bytes:5338927 (5.0 Mb) Trong trư ng h p này ta th y máy hi n t i có 2 card m ng và ư c gán các a ch tương ng như trên. Mu n ch xem các thông tin v m t card m ng nào ó thôi ta dùng l nh: # ifconfig eth0 Mu n kích ho t m t card m ng ta dùng l nh # ifconfig eth0 up Mu n t t m t card m ng ta dùng l nh # ifconfig eth0 down Mu n t l i a ch cho m t card m ng ta dùng l nh: # ifconfig eth0 203.162.9.154 netmask 255.255.255.248 Ngoài ra n u máy tính có cài giao di n GNOME cùng các package qu n lý m ng c a GNOME thì ta có th s d ng l nh có giao di n ho giúp cho vi c c u hình các tham s card m ng d dàng hơn. có công c này ta ph i cài t package redhat-config-network- xxx.rpm trong ó xxx là s hi u phiên b n c a chương trình. Trong giao di n ho GNOME ta ánh l nh redhat-config-network, m t h p tho i s hi n lên cho phép ta thay i các tham s cho t ng card m ng ư c cài trên máy. 6.3. Các d ch v m ng 6.3.1 H thông tin m ng NIS Khi s d ng h th ng m ng nói chung, m c ích c a chúng ta là làm cho môi trư ng m ng tr nên trong su t i v i ngư i dùng. M t trong nh ng i m quan tr ng là làm cho các d li u quan tr ng như là thông tin v ngư i dùng, v các tr m trong m ng là ng nh t trên t t c các tr m làm vi c. NIS (Network Information System) là m t ng d ng cung c p các ti n ích truy nh p cơ s d li u phân ph i thông tin, ch ng h n như d li u trong /etc/passwd và /etc/group cho t t c các máy tr m trên m ng. i u này làm cho m ng tr nên m t h th ng duy nh t. NIS ư c xây d ng trên vi c s d ng d ch v RPC (Remote Procedure Call). Nó bao g m m t thư vi n máy ch , thư vi n máy tr m và các công c qu n tr . Ban u NIS ư c g i là nh ng trang vàng (Yellow Pages –YP). Cùng v i s phát
  • 118. 1 1 tri n c a NIS mà có s xu t hi n khác nhau trong các phiên b n. NIS truy n th ng ư c xây d ng trên thư vi n libc 4/5. NIS+ là s m r ng c a NIS song v n h tr b o m t thông tin. NYS là m t phiên b n chu n h tr c NIS và NIS+. Ho t ng c a NIS NIS lưu tr cơ s d li u v thông tin qu n tr m ng trong các file maps. Các file này ư c t trên m t NIS server trung tâm, t ó các NIS client có th truy nh p n các thông tin thông qua d ch v RPC. Các file maps thư ng là các file theo nh d ng DMB, m t d ng cơ s d li u ơn gi n. Các file maps ư c t o ra t các file văn b n như /etc/hosts hay /etc/passwd. M i file văn b n này có th có nhi u file maps khác nhau tùy thu c vào khóa c a nó. Ví d n u khóa là tên máy tr m thì ta có file hosts.byname, n u khóa là a ch IP thì ta có file hosts.byname. File ch File maps tương ng /etc/hosts hosts.addr Hosts.byname /etc/networks network.byname network.byaddr /etc/passwd passwd.byname passwd.byid /etc/groups Groups.byname group.byid /etc/services service.byname service.bynumber /etc/rpc rpc.bynumber rpc.byname /etc/protocol protocol.byname protocol.bynumber /usr/lib/aliases mail.aliases M i m t file maps có m t tên ng n hơn nh i v i ngư i dùng g i là các nickname. hi n th danh sách các nickname ta dùng l nh ypcat: #ypcat -x Use "ethers" for map "ethers.byname" Use "aliases" for map "mail.aliases" Use "services" for map "services.byname" Use "protocols" for map "protocols.bynumber" Use "hosts" for map "hosts.byname" Use "networks" for map "networks.byaddr" .... Các chương trình máy ch c a NIS thư ng có tên là ypserv. Trong các m ng c nh ta ch c n m t máy làm máy ch NIS. M t mi n (domain) NIS là m t t p h p các máy tr m ư c qu n lý b i m t máy ch NIS. hi n th và t tên cho m t mi n ta s d ng l nh #domainname nis-domain Tên mi n NIS s cho bi t máy ch c a mi n nào các ng d ng s truy c p nh n thông tin c n thi t. bi t ư c máy ch nào trong m ng là NIS server, các chương trình ng d ng ph i h i ypbind, m t chương trình ch y ng m có nhi m v phát hi n các NIS server trên m ng. Nó s phát các gói tin qu ng bá tìm các máy ch NIS trên m ng ho c s d ng các thông tin trong các file c u hình ngư i qu n tr ã cung c p.
  • 119. 1 1 Cài t và c u hình cho máy ch NIS V i NIS ta có khái ni m máy ch NIS chính và máy ch NIS ph , m t mi n ch có th có m t máy ch NIS chính. Khi trong m ng có nhi u máy tr m làm vi c, m t máy ch NIS có th b quá t i, ho c khi có s c thì toàn b h th ng m ng ó s không th ho t ng ư c. Các máy ch NIS ph s giúp gi i quy t v n này. Vi c cài t các máy ch NIS ph ch khác máy ch NIS chính ch t o ra các file map. Chúng không ư c t o ra b ng makedbm mà ư c l y v t máy ch chính. Bây gi ta tìm hi u cách cài t máy ch NIS chính. Trư c tiên ta ph i cài t ph n m m ypserv lên máy tính. Chương trình s n m trong package ypserv-xxx.rpm. Ta có th cài t b ng l nh: #rpm -ivh ypserv-xxx.rpm #mkdir /var/yp/nis-domain t o các file cơ s d li u ta s d ng chương trình makedbm. Do ó ph i m b o chương trình ã ư c cài trên máy, vi c t o l p s ư c ti n hành thông qua m t makefile. Trong file này s ch a các l nh c n thi t t o ra file maps. Sau khi cài t ph n m m ta dùng l nh make: #domainname nis-domain #cd /var/yp #make Các file map không t ng c p nh t m i khi ta s a thông tin qu n tr . Do v y m i khi có s thay i, ta c n th c hi n l i l nh make c p nh t s s a i. Cài t các máy tr m NIS Trư c tiên ta c n cài t ph n m m ypbind lên máy tr m b ng l nh: #rpm -ivh ypbind-xxx.rpm Bư c ti p theo là ch ra tên c a máy ch và tên mi n NIS mà tr m này s s d ng b ng cách thay i thông tin trong file /etc/yp.conf như sau: #/etc/yp.conf domainname nis-domain server lnserver Dòng u tiên cho bi t máy tr m này thu c vào mi n NIS có tên là nis-domain. N u không có dòng l nh này thì ta có th ch ra b ng cách ánh l nh domainname t i d u nh c dòng l nh. Dòng th 2 ch ra tên máy ch NIS. a ch IP c a tên máy ch này ph i xu t hi n trong file /etc/hosts. Ho c ta có th s d ng a ch IP ngay trên dòng này. Khi ta s d ng máy tính thư ng xuyên ph i thay i mi n NIS, ta có th ch ra nhi u mi n NIS và các máy ch tương ng v i nó b ng l nh server. File c u hình dư i ây cho phép th c hi n i u ó: #yp.conf server ln-server1 domainname1 server ln-server2 domainname2 Khi mu n s d ng m t mi n khác thì ta ch c n ánh l i l nh domainname xác nh mi n ta tương ng.
  • 120. 1 2 Sau khi ã t o ra các file c u hình cơ b n, ta nên ki m tra xem chương trình ypbind ã ho t ng hay chưa. Trư c h t, kh i ng ypbind, sau ó dùng ti n ích ypcat l y thông tin qu n lý b i NIS server. xem thông tin v a ch IP c a các tr m ta dùng l nh: #ypbind #ypcat hosts.byname 192.168.50.1 may1 192.168.50.1 may2 .... N u ta không nh n ư c k t qu như trên ho c ta nh n ư c m t thông báo l i “can’t bind to servers domain”, có nghĩa là h th ng NIS ho t ng chưa t t, ta có th ki m tra xem tên mi n và tên máy ch trong file yp.conf ã chính xác chưa và sau ó ping máy ch . N u máy ch ã ho t ng ta ki m tra xem s ho t ng c a ypserv b ng l nh rpcinfo: #rpcinfo –u serverhost ypserv program 10004 version 2 ready and waiting N u ta nh n ư c thông báo như trên là ypserv ang ho t ng t t. L a ch n các file map Khi s d ng NIS ta c n xác nh nh ng file c u hình nào c a các máy tr m s ư c thay th b i NIS. Thông thư ng NIS ư c s d ng tra c u các thông tin v máy tr m và tài kho n ngư i dùng. M c dù ta ã s d ng NIS như là m t h qu n tr t p trung, h th ng này v n cho phép các máy tr m làm vi c ư c quy n t do l a ch n s d ng các file c u hình c c b ho c s d ng t NIS server. Th t ư c ch ra trong file /etc/nsswitch.conf. Ví d sau cho bi t th t s d ng d ch v c a các hàm gethostbyname(), gethostbyaddr() và getservbyname(). Các d ch v ư c li t kê trư c s ư c s d ng, n u không thành công thì s d ng d ch v sau ó. #nsswitch.conf hosts: nis dns files services files nis Dư i ây là danh sách các d ch v có th s d ng trong file /etc/nsswitch.conf. Các file, chương trình c th ư c s d ng s ph thu c vào t ng lo i d ch v : nisplus hay nis+: s d ng NIS+ server cho mi n NIS hi n th i. Tên c a server ư c ch ra trong file /etc/nis.conf. nis: s d ng NIS server cho domain hi n th i. Tên c a server ư c ch ra trong file /etc/yp.conf. V i thành ph n hosts, các file map là hosts.byname và hosts.byaddr s ư c s d ng. dns: s d ng DNS server, d ch v này ư c s d ng cho mình thành ph n hosts. Tên c a máy ch ư c t trong file /etc/resolv.conf. files: s d ng các file c u hình c c b , ví d : /etc/passwd cho thành ph n passwd. dbm: tìm thông tin trong các file cơ s d li u /var/dbm. Tên c a các file là tên c a các file map tương ng c a d ch v NIS. Các thành ph n ư c h tr hi n th i c a NYS là: hosts, networks, passwd, group, shadow, services, protocols, rpc, và m t s file khác. N u có t khóa [NOTFOUND=return] trong các thành ph n c a file nsswitch.conf, NIS s thoát ra ngay mà không s d ng ti p các d ch v sau trong trư ng h p nó không tìm th y thông tin d ch v trư c ó. Ch khi nào d ch v trư c b l i, NIS m i dùng ti p d ch v
  • 121. 1 2 sau. Trong ví d dư i NIS ch s d ng các file c c b khi kh i ng ho c DNS, NIS server b h ng. #/ect/nsswitch.conf hosts: nis dns [NOTFOUND=return] files network: nis [NOTFOUND=return] files services: file nis protocol: files nis rpc: files nis S d ng các file map passwd và group M t trong nh ng ng d ng chính c a NIS là ng b thông tin v các tài kho n c a ngư i s d ng trên t t c các máy tr m trong mi n NIS. Khi ó thông tin v ngư i dùng trên tr m ư c li t kê m t ph n nh trong /etc/passwd, ph n còn l i ư c lưu trong file map passwd.byname. Vi c ch n nis trong file /etc/nsswitch.conf chưa NIS có th ho t ng. Khi s d ng tài kho n c a ngư i dùng ư c cung c p b i NIS, trư c tiên ph i m b o s hi u c a ngư i dùng trong file passwd ph i trùng v i s hi u c a ngư i dùng ó trên NIS. N u s hi u ngư i dùng, s hi u nhóm c a ngư i dùng ó khác v i thông tin trong mi n NIS, ta c n s a l i cho trùng nhau. Trư c tiên ta thay i s hi u ngư i dùng (uid) và s hi u nhóm (gid) trong ó file /etc/passwd và /etc/group trên tr m c c b sang các giá tr m i c a NIS. Sau ó i quy n s h u c a t t c các file b ng cách thay i s hi u uid và gid cũ sang uid và gid m i. Gi s ngư i dùng anhnv có s hi u uid là 501, thu c nhóm sinhvien có gid là 423, ta s a i quy n s h u như sau: #find / -uid 501 – print > /tmp/uid/uid.501 #find / -gid 501 – print > /tmp/uid/gid.501 #cat /tmp/uid.501 | xargs chown anhnv #cat /tmp/gid.501 | xargs chgrp sinhvien Sau khi th c hi n các công vi c trên s hi u uid và gid c a m t ngư i dùng trên máy tr m s ng nh t v i NIS. Bư c ti p theo là s a i file /etc/nsswitch.conf như sau: #/etc/nsswitch.conf passwd: nis files group: nis files File trên quy nh l nh login và các l nh thu c h này s truy v n NIS server khi m t ngư i dùng mu n truy nh p, n u không tìm th y nó s tìm ti p n các file c c b . Thông thư ng ta lo i b h u h t ngư i dùng kh i các file c c b , ch gi l i root ho c các tài kho n chung như mail, news,… cho m t s tác v c n chuy n i s hi u uid sang tên và ngư c l i. Ví d trong chương trình qu n lý công vi c cron s d ng l nh su t m tr thành news. N u news không có trong /etc/passwd, chương trình trên s không th c hi n ư c. Khi ngư i dùng mu n thay i m t kh u, h không th dùng l nh passwd như khi chưa có NIS. L nh passwd ch có tác d ng s a i các file c u hình c c b . NIS cung c p m t công c là yppasswd, nó không nh ng cho phép s a i m t kh u ngư i dùng trên NIS mà còn thay i các thu c tính khác như shell… Chương trình này ư c th c hi n khi kh i ng h th ng b ng cách ch y thêm d ch v rpc.yppasswd. Vì thói quen ngư i dùng có th
  • 122. 1 2 gõ l nh passwd khi mu n thay i m t kh u. Gi i pháp ây là thay i passwd b ng m t liên k t n yppasswd. #cd /bin #mv passwd passwd.old #ln yppasswd passwd 6.4 H th ng file trên m ng Linux có d ch v chia s file trên m ng máy tính. Khi ta mu n có kh năng các máy Linux có th chia s tài nguyên là các file v i nhau, d ch v NFS s cung c p kh năng này. D ch v này cho phép chia s file cho các ngư i dùng trên m ng LAN, các file này có kh năng xu t hi n i v i các ngư i dùng như là các file trên máy c a mình. 6.4.1 Cài t NFS cài t d ch v này ta c n chu n b m t package là nfs-utils-xxx.rpm trong ó xxx là s hi u phiên b n. ăng nh p v i quy n root và s d ng l nh: # rpm –ivh nfs-utils-xxx.rpm N u không có l i thông báo l i thì vi c cài t ã thành công. NFS s d ng th t c RPC (Remote Procedure Calls) g i và nh n yêu c u gi a các máy ch và máy tr m trên m ng, do v y d ch v ánh x c ng portmap (d ch v qu n lý các yêu c u RPC) ph i ư c kh i ng trư c. Trên máy ch NFS d nh s chia s các file d li u ph i kh i ng hai d ch v nfs và portmap b ng l nh: # service nfs start # service portmap start NFS ho t ng thì ta c n ph i kh i ng các d ch v sau: Portmapper: ti n trình này không làm vi c tr c ti p v i NFS mà tham gia qu n lý các yêu c u RPC t máy tr m g i n. Mountd: ti n trình này s ánh x các file trên máy ch t i các thư m c trên máy tr m yêu c u. Nó s hu b ánh x này n u có l nh umount t máy tr m. Nfs: là ti n trình chính th c hi n các nhi m v c a giao th c NFS. Nó có nhi m v cung c p cho các máy tr m các thư m c ho c file ư c yêu c u. Ta có th ki m tra các thông tin v các d ch v NFS b ng l nh: #rpcinfo -p Ta s thu ư c k t qu : program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper … 100005 3 udp 1024 mountd 100005 3 tcp 1024 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs ...
  • 123. 1 2 6.4.2 Kh i ng và d ng NFS Vi c kh i ng d ch v NFS cũng khá ơn gi n và ã ư c gi i thi u trên b ng cách kh i ng portmap và nfs. # service nfs start ho c #/etc/init.d/nfs start Vi c d ng (t t) d ch v này cũng khá ơn gi n, ta dùng l nh sau: #service nfs stop ho c #/etc/init.d/nfs stop Ta có th t cho d ch v này ư c t ng kh i ng khi ta kh i ng máy tính b ng cách dùng l nh: #setup Hình t các ng d ng t kh i ng khi Linux kh i ng Sau ó ch n “System services”, ti p ó ta s nh n ư c m t danh sách các d ch v hi n ang có trong h th ng. Mu n cho d ch v nào ư c t ng kh i ng ta ch c n ch n d ch v ó, ây ta ch n d ch v có tên nfs. Ch n OK và cu i cùng ch n Quit. 6.4.3 C u hình NFS server và Client C u hình nfs ta ch c n s a file /etc/exports, ây là file ch a danh sách các thư m c ư c chia s cho các máy khác. Nó cũng ng th i ch a danh sách các máy tr m có quy n ư c truy c p và quy n truy c p c a các máy tr m này. M t chú ý v nh d ng c a file này như sau: các dòng tr ng s ư c b qua, các dòng b t u b ng d u # ư c coi là các dòng
  • 124. 1 2 chú thích và s ư c b qua. Các dòng dài quá ta có th ng t trên nhi u dòng b ng cách s d ng d u ng t dòng (). C u trúc c a m i dòng khai báo trong file này như sau: Tên thư m c Danh sách a ch các máy tr m, quy n truy nh p c a các máy tr m ó Danh sách a ch các máy tr m, quy n truy nh p c a các máy tr m ó /software/project 192.168.0.172(rw) 192.168.0.127(ro) /software/setup 192.168.0.0/28(ro) Trong ó, các tham s có ý nghĩa như sau: tên thư m c là ư ng d n n thư m c ta mu n chia s cho các máy khác. Danh sách a ch các máy tr m, có th là a ch IP ho c tên máy ( ư c li t kê trong file /etc/hosts). Trong trư ng h p mu n li t kê danh sách các máy có a ch g n k nhau trong m t kho ng nào ó ta có th có cách vi t rút g n như sau: ch ng h n ta mu n li t kê các a ch c a máy tr m trong kho ng t 192.168.0.0 n các máy tr m có a ch 192.168.0.15 ta ch c n vi t 192.168.0.0/28. Quy n truy nh p ư c vi t dư i d ng (rw) ch quy n c và ghi, còn (ro) thì các máy tr m ch có quy n c trên thư m c ó, (noaccess) c m các máy tr m truy nh p vào các thư m c con c a thư m c chia s . Chú ý, gi a a ch c a máy và quy n truy nh p không có d u cách. 6.4.4 S d ng mount c d li u trên các thư m c ã ư c chia s này ta có th dùng cách sau: ta s dùng l nh mount, nhưng trong trư ng h p này ta ph i c n quy n qu n tr (root). Cú pháp c a l nh s như sau: #mount <tên_máy_ch :/tên_thư_m c_chia_s > </tên_thư_m c_c n_ánh_x > Lưu ý, trư c khi ra l nh này ta ph i t o ra thư m c c n ánh x (trong trư ng h p nó chưa t n t i). Ví d , ánh x thư m c /software/project trên m t máy ch 192.168.0.33 vào thư m c /mnt/project trên máy hi n t i ta dùng l nh sau: #mount 192.168.0.33:/software/project /mnt/project Bây gi thư m c /mnt/project trên máy hi n t i s bình ng như các thư m c khác trên máy. Ta có th sao chép, c các file trên thư m c này. 6.4.5 Unmount Sau khi th c hi n xong các thao tác c n thi t, ta có th h y b ánh x này b ng l nh umount như sau: #umount /mnt/project Sau l nh này thì ta không còn có kh năng thao tác v i thư m c trên máy ch ư c n a, n u mu n ta l i ph i ánh x l i.
  • 125. 1 2 Ngoài ra mu n xem tr ng thái ho t ng c a d ch v nfs ta có th dùng l nh: #/etc/init.d/nfs status Nó s hi n th thông tin v tr ng thái hi n t i c a d ch v này ang ch y hay ã d ng l i. rpc.mountd (pid 936) is running... nfsd (pid 948 947 946 945 944 943 942 941) is running... rpc.rquotad (pid 931) is running... 6.4.6 Mount t ng qua t p c u hình Bây gi n u ta mu n h th ng s t ng ánh x thư m c này khi máy kh i ng cho nh ng ngư i dùng không có quy n qu n tr có th dùng ư c thì ta có th s d ng cách s a i n i dung c a file /etc/fstab. Cũng tương t như l nh mount trên, trong file /etc/fstab cũng có các trư ng gi ng như ã nói trên. M i m t dòng trong file này s có c u trúc như sau: <tên_máy_ch :/ ư ng_d n_ n_thư_m c_chia_s > </ ư ng_d n_ n_thư_m c_c c_b > nfs tham s nfs ch cho h i u hành bi t ki u file là nfs. Ví d ta có th thêm dòng 192.168.0.33:/software/project /mnt/project nfs vào cu i file /etc/fstab.
  • 126. 1 2 CHƯƠNG 7. L P TRÌNH SHELL VÀ L P TRÌNH C TRÊN LINUX 7.1. Cách th c pipes và các y u t cơ b n l p trình trên shell 7.1.1. Cách th c pipes Trong Linux có m t s lo i shell, shell ng m nh là bash. Shell cho phép ngư i dùng ch y t ng l nh shell (th c hi n tr c ti p) ho c dãy l nh shell (file script) và c bi t hơn là theo d ng thông qua ng d n (pipe). • Trong m t dòng l nh c a shell có th th c hi n m t danh sách các l nh tu n t nhau d ng: <l nh> [; <l nh>]... Như v y danh sách l nh là dãy các l nh liên ti p nhau, cái sau cách cái trư c b i d u ch m ph y ";" Ví d , $ cal 10 1999; cal 11 1999 ; cal 12 1999 Shell cho ngư i dùng cách th c c bi t th c hi n các l nh tu n t nhau, cái ra c a l nh trư c là cái vào c a l nh sau và không ph i thông qua nơi lưu tr trung gian. • S d ng ng d n là cách th c c bi t trong UNIX và Linux, ư c th hi n là m t cách th c c a shell truy n thông liên quá trình. ng d n ư c t ch c theo ki u c u trúc d li u dòng x p hàng "vào trư c ra trư c" FIFO "First In First Out". Trong c u trúc dòng x p hàng, m t u c a dòng nh n ph n t vào và còn u kia l i xu t ph n t ra. Trong ng c nh c a shell, v i hai quá trình A và B ư c k t n i m t ng d n ư c th hi n như sau: Như v y u ra c a A thông thư ng ho c là thi t b ra chu n (màn hình) ho c là m t File (là m t tham s c a l nh) ư c thay b ng " u nh p c a ng d n". Tương t , u vào c a B thông thư ng ho c là thi t b vào chu n (bàn phím) ho c là m t File (là m t tham s c a l nh) ư c thay b ng " u xu t c a ng d n". Dòng byte l n lư t "ch y" t quá trình A sang quá trình B. Mô t cách th c s d ng ư ng ng trong shell như sau: <l nh ph c h p> là ho c <l nh> ho c (<l nh>[;<l nh>]...) V y ư ng ng có d ng <l nh ph c h p> | <l nh ph c h p> L nh ph c h p phía sau có th không có i s . Trong trư ng h p ó, thông tin k t qu t l nh phía trư c tr thành thông tin input c a l nh ngay phía sau mà không ch u tác ng theo cách thông thư ng c a l nh trư c n a. Ví d , $ cal 1999 | more N i dung l ch năm 1999 (l nh cal óng vai trò quá trình A) không ư c in ngay ra màn hình như thông thư ng theo tác ng c a l nh cal n a mà ư c lưu lên m t "file" t m th i ki u " ng d n" c a h th ng và sau ó tr thành i s c a l nh more (l nh more óng vai trò quá trình B). Trong chương trình, có th dùng ng d n làm file vào chu n cho các l nh c ti p theo. Ví d , ls -L | Quá trình BQuá trình A
  • 127. 1 2 thì ký hi u "" ch ra r ng ng d n ư c dùng như file vào chu n. 7.1.2. Các y u t cơ b n l p trình trong shell Shell có công c cho phép có th l p trình trên shell làm tăng thêm thân thi n khi giao ti p v i ngư i dùng. Các i tư ng tham gia công c như th có th ư c li t kê: - Các bi n (trong ó chú ý t i các bi n chu n), - Các hàm vào - ra - Các phép toán s h c, - Bi u th c i u ki n, - C u trúc r nhánh, - C u trúc l p. a. M t s n i dung trong chương trình shell - Chương trình là dãy các dòng l nh shell song ư c t trong m t file văn b n ( ư c so n th o theo so n th o văn b n), - Các dòng l nh b t u b ng d u # chính là dòng chú thích, b b qua khi shell th c hi n chương trình, - Thông thư ng các b d ch l nh shell là sh (/bin/sh) ho c ksh (/bin/ksh) th c hi n m t chương trình shell ta có các cách sau ây: $sh <<tên chương trình> ho c $sh <tên chương trình> ho c nh i mod c a chương trình: $chmod u+x <tên chương trình> và ch y chương trình $<tên chương trình> - Ph n l n các y u t ngôn ng trong l p trình shell là tương ng v i l p trình C. Trong tài li u này s d ng chúng m t cách t nhiên. b. Các bi n trong file script Trong shell có th k t i 3 lo i bi n: • Bi n môi trư ng (bi n shell c bi t, bi n t khóa, bi n shell xác nh trư c ho c bi n shell chu n) ư c li t kê như sau (các bi n này thư ng g m các ch cái hoa): - HOME : ư ng d n thư m c riêng c a ngư i dùng, - MAIL: ư ng d n thư m c ch a h p thư ngư i dùng, - PATH: thư m c dùng tìm các file th hi n n i dung l nh, - PS1: d u m i ban u c a shell (ng m nh là $), - PS2: d u m i th 2 c a shell (ng m nh là >), - PWD: Thư m c hi n t i ngư i dùng ang làm, - SHELL: ư ng d n c a shell (/bin/sh ho c /bin/ksh) - TERM: S hi u gán cho tr m cu i, - USER: Tên ngư i dùng ã vào h th ng, Trong .profile thư m c riêng c a m i ngư i dùng thư ng có các câu l nh d ng: <bi n môi trư ng> = <giá tr > • Bi n ngư i dùng: Các bi n này do ngư i dùng t tên và có các cánh th c nh n giá tr các bi n ngư i dùng t bàn phím (l nh read). Bi n ư c t tên g m m t xâu ký t , quy t c t tên như sau: ký t u tiên ph i là m t ch c i ho c d u g ch chân (_), sau tên là m t hay nhi u ký t khác. t o ra m t bi n ta ch c n gán bi n ó m t giá tr nào ó. Phép gán là m t d u b ng (=). Ví d : myname=”TriThanh”
  • 128. 1 2 Chú ý: không ư c có d u cách (space) ng trư c hay ng sau d u b ng. Tên bi n là phân bi t ch hoa ch thư ng. truy xu t n m t bi n ta dùng cú pháp sau; $tên_bi n. Ch ng h n ta mu n in ra giá tr c a bi n myname trên ta ch c n ra l nh: echo $myname. $myname. $myname. M t s ví d v cách t tên bi n: $ no=10 # ây là m t cách khai báo h p l Nhưng cách khai báo dư i ây là không h p l $ no =10 #có d u cách sau tên bi n $ no= 10 # có d u cách sau d u = $ no = 10 # có d u cách c ng trư c l n ng sau d u = Ta có th khai báo m t bi n nhưng nó có giá tr NULL như trong nh ng cách sau: $ vech= $ vech="" N u ta ra l nh in giá tr c a bi n này thì ta s thu ư c m t giá tr NULL ra màn hình (m t dòng tr ng). • Bi n t ng (hay bi n-ch c, tham s v trí) là các bi n do shell ã có s n; tên các bi n này cho trư c. Có 10 bi n t ng: $0, $1, $2, ..., $9 Tham bi n “$0” ch a tên c a l nh, các tham bi n th c b t u b ng “$1” (n u tham s cú v trí l n hơn 9, ta ph i s d ng cú pháp ${} – ví d , ${10} thu ư c các giá tr c a chúng). Shell bash có ba tham bi n v trí c bi t, “$#”, “$@”, và “$#”. “$#” là s lư ng tham bi n v trí (không tính “$0”). “$*” là m t danh sách t t c các tham bi n v trí lo i tr “$0”, ã ư c nh d ng như là m t xâu ơn v i m i tham bi n ư c phân cách b i k t $IFS. “$@” tr v t t c các tham bi n v trí ư c ưa ra dư i d ng N xâu ư c bao trong d u ngo c kép. S khác nhau gi a “$*” và “$@” là gì và t i sao l i có s phân bi t? S khác nhau cho phép ta x lý các i s dòng l nh b ng hai cách. Cách th nh t, “$*”, do nó là m t xâu ơn, nên có th ư c bi u di n linh ho t hơn không c n yêu c u nhi u mã shell. “$@” cho phép ta x lý m i i s riêng bi t b i vì giá tr c a chúng là N i s c l p. Dòng ra (hay dòng vào) tương ng v i các tham s v trí là các "t " có trong các dòng ó. Ví d , $chay vao chuong trinh roi N u chay là m t l nh thì dòng vào này thì: $0 có giá tr chay $1 có giá tr vao $2 có giá tr chuong $3 có giá tr trinh $4 có giá tr roi M t ví d khác v bi n v trí giúp ta phân bi t ư c s khác nhau gi a bi n $* và $@: #!/bin/bash #testparm.sh function cntparm {
  • 129. 1 2 echo –e “inside cntparm $# parms: $*” } cntparm ‘$*’ cntparm ‘$@’ echo –e “outside cntparm $* parmsn” echo –e “outside cntparm $@ parmsn” Khi ch y chương trình này ta s thu ư c k t qu : $./testparm.sh Kurt Roland Wall inside cntparm 1 parms: Kurt Roland Wall inside cntparm 3 parms: Kurt Roland Wall outside cntparm: Kurt Roland Wall outside cntparm: Kurt Roland Wall Trong dòng th nh t và th 2 ta th y k t qu có s khác nhau, dòng th nh t bi n “$*” tr v tham bi n v trí dư i d ng m t xâu ơn, vì th cntparm báo cáo m t tham bi n ơn. Dòng th hai g i cntparm, tr v i s dòng l nh c a là 3 xâu c l p, vì th cntparm báo cáo ba tham bi n. c. Các ký t c bi t trong bash Ký t Mô t < > ( ) | & { } ~ ` ; # ‘ “ $ * ? nh hư ng u vào nh hư ng u ra B t u subshell K t thúc subshell Ký hi u d n Dùng hi n ký t c bi t Thi hành l nh ch y ch ng m B t u kh i l nh K t thúc kh i l nh Thư m c home c a ngư i dùng hi n t i Thay th l nh Chia c t l nh L i chú gi i Trích d n m nh Trích d n y u Bi u th c bi n Ký t i di n cho chu i Ký t i di n cho m t ký t Các ký t c bi t c a bash D u chia c t l nh, ; , cho phép th c hi n nh ng l nh bash ph c t p ánh trên m t dòng. Nhưng quan tr ng hơn, nó là k t thúc l nh theo lý thuy t POSIX. Ký t chú gi i, # , khi n bash b qua m i ký t t ó cho n h t dòng. i m khác nhau gi a các ký t trích d n m nh và trích d n y u, ‘ và “, tương ng là: trích d n m nh b t bash hi u t t c các ký t theo nghĩa en; trích d n y u ch b o h cho m t vài ký t c bi t c a bash .
  • 130. 1 3 7.2. M t s l nh l p trình trên shell 7.2.1. S d ng các toán t bash Các toán t string Các toán t string, cũng ư c g i là các toán t thay th trong tài li u v bash, ki m tra giá tr c a bi n là chưa gán giá tr ho c kh ng xác nh. B ng dư i là danh sách các toán t này cùng v i miêu t c th cho ch c năng c a t ng toán t . Toán t Ch c năng ${var:- word} N u bi n t n t i và xác nh thì tr v giá tr c a nó, n u không thì tr v word ${var:= word} N u bi n t n t i và xác nh thì tr v giá tr c a nó, n u không thì gán bi n thành word, sau ó tr v giá tr c a nó ${var:+ word} N u bi n t n t i và xác nh thì tr v word, còn không thì tr v null ${var:?message} N u bi n t n t i và xác nh thì tr v giá tr c a nó, còn không thì hi n th “bash: $var:$message” và thoát ra kh i l nh hay t p l nh hi n th i. ${var: offset[:length]} Tr v m t xâu con c a var b t u t i offset c a dài length. N u length b b qua, toàn b xâu t offset s ư c tr v . Các toán t string c a bash minh ho , hãy xem xét m t bi n shell có tên là status ư c kh i t o v i giá tr defined. S d ng 4 toán t string u tiên cho k t qu status như sau: $echo ${status:-undefined} defined $echo ${status:=undefined} defined $echo ${status:+undefined} undefined $echo ${status:?Dohhh! undefined} defined Bây gi s d ng l nh unset xoá bi n status, và th c hi n v n các l nh ó, ư c output như sau: $unset status $echo ${status:-undefined} undefined $echo ${status:=undefined} undefined $echo ${status:+undefined} undefined $unset status $echo ${status:?Dohhh! undefined} bash:status Dohhh! Undefined
  • 131. 1 3 C n thi t unset status l n th hai vì l nh th ba, echo ${status:+undefined}, kh i t o l i status thành undefined. Các toán t substring ã có trong danh sách b ng trên c bi t có ích. Hãy xét bi n foo có giá tr Bilbo_the_Hobbit. Bi u th c ${foo:7} tr v he_Hobbit, trong khi ${foo:7:5} l i tr v he_Ho. Các toán t Pattern-Matching Các toán t pattern-matching có ích nh t trong công vi c v i các b n ghi dài bi n hay các xâu ã ư c nh d ng t do ư c nh gi i b i các kí t c nh. Bi n môi trư ng $PATH là m t ví d . M c dù nó có th khá dài, các thư m c riêng bi t ư c phân nh b i d u hai ch m. B ng dư i là danh sách các toán t Pattern-Matching c a bash và ch c năng c a chúng. Toán t Ch c năng ${var#pattern} Xoá b ph n kh p (match) ng n nh t c a pattern trư c var và tr v ph n còn l i ${var##pattern} Xoá b ph n kh p (match) dài nh t c a pattern trư c var và tr v ph n còn l i ${var%pattern} Xoá b ph n kh p ng n nh t c a pattern cu i var và tr v ph n còn l i ${var%%pattern} Xoá b ph n kh p dài nh t c a pattern cu i var và tr v ph n còn l i ${var/pattern/string} Thay ph n kh p dài nh t c a pattern trong var b ng string. Ch thay ph n kh p u tiên. Toán t này ch có trong bash 2.0 hay l n hơn. ${var//pattern/string} Thay ph n kh p dài nh t c a pattern trong var b ng string. Thay t t c các ph n kh p. Toán t này có trong bash 2.0 ho c l n hơn. Các toán t bash Pattern-Matching Thông thư ng quy t c chu n c a các toán t bash pattern-matching là thao tác v i file và tên ư ng d n. Ví d , gi s ta có m t tên bi n shell là mylife có giá tr là /usr/src/linux/Documentation/ide.txt (tài li u v trình i u khi n ĩa IDE c a nhân). S d ng m u “/*” và “*/” ta có th tách ư c tên thư m c và tên file. #!/bin/bash ############################################ myfile=/usr/src/linux/Documentation/ide.txt echo ‘${myfile##*/}=’ ${myfile##*/} echo ‘basename $myfile =’ $(basename $myfile) echo ‘${myfile%/*}=’ ${myfile%/*} echo ‘dirname $myfile =’ $(dirname $myfile) L nh th 2 xoá xâu matching “*/” dài nh t trong tên file và tr v tên file. L nh th 4 làm kh p t t c m i th sau “/”, b t u t cu i bi n, b tên file và tr v ư ng d n c a file. K t qu c a t p l nh này là: $ ./pattern.sh
  • 132. 1 3 ${myfile##*/} = ide.txt basename $myfile = ide.txt ${myfile%/*} = /usr/src/linux/Documentation dirname $myfile = /usr/src/linux/Documentation minh ho v các toán t pattern-matching và thay th , l nh thay th m i d u hai ch m trong bi n môi trư ng $PATH b ng m t dòng m i, k t qu hi n th ư ng d n r t d c (ví d này s sai n u ta không có bash phiên b n 2.0 ho c m i hơn): $ echo –e ${PATH//:/n} /usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/kwall/bin /home/wall/wp/wpbin Các toán t so sánh chu i ki m tra i u ki n th c str1 = str2 str1 b ng str2 str1 != str2 str1 khác str2 -n str str có dài l n hơn 0 (khác null) -z str str có dài b ng 0 (null) Toán t sánh chu i c a bash Các toán t so sánh s h c ki m tra i u ki n th c -eq b ng -ge l n hơn ho c b ng -gt l n hơn -le nh hơn ho c b ng -lt nh hơn -ne khác Các cách test s nguyên c a bash 7.2.2. i u khi n lu ng Các c u trúc i u khi n lu ng c a bash, nó bao g m: • if – Thi hành m t ho c nhi u câu l nh n u có i u ki n là true ho c false. • for – Thi hành m t ho c nhi u câu l nh trong m t s c nh l n. • while – Thi hành m t ho c nhi u câu l nh trong khi m t i u ki n nào ó là true ho c false. • until – Thi hành m t ho c nhi u câu l nh cho n khi m t i u ki n nào ó tr thành true ho c false. • case – Thi hành m t ho c nhi u câu l nh ph thu c vào giá tr c a bi n. • select – Thi hành m t ho c nhi u câu l nh d a trên m t kho ng tuỳ ch n c a ngư i dùng.
  • 133. 1 3 7.2.2.1 C u trúc r nhánh có i u ki n if Bash cung c p s th c hi n có i u ki n l nh nào ó s d ng câu l nh if, câu l nh if c a bash y ch c năng như c a C. Cú pháp c a nó ư c khái quát như sau: if condition then statements [elif condition statements] [else statements] fi u tiên, ta c n ph i ch c ch n r ng mình hi u if ki m tra tr ng thái thoát c a câu l nh last trong condition. N u nó là 0 (true), sau ó statements s ư c thi hành, nhưng n u nó khác 0, thì m nh else s ư c thi hành và i u khi n nh y t i dòng u tiên c a mã fi. Các m nh elif (tuỳ ch n) (có th nhi u tuỳ ý) s ch thi hành khi i u ki n if là false. Tương t , m nh else (tuỳ ch n) s ch thi hành khi t t c else không th a mãn. Nhìn chung, các chương trình Linux tr v 0 n u thành công hay hoàn toàn bình thư ng, và khác 0 n u ngư c l i, vì th không có h n ch nào c . Chú ý: Không ph i t t c chương trình u tuân theo cùng m t chu n cho giá tr tr v , vì th c n ki m tra tài li u v các chương trình ta ki m tra mã thoát v i i u ki n if. Ví d chương trình diff, tr v 0 n u không có gì khác nhau, 1 n u có s khác bi t và 2 n u có v n nào ó. N u m t câu i u ki n ho t ng không như mong i thì hãy ki m tra tài li u v mã thoát . Không quan tâm n cách mà chương trình xác nh mã thoát c a chúng, bash l y 0 có nghĩa là true ho c bình thư ng còn khác 0 là false. N u ta c n c th ki m tra m t mã thoát c a l nh, s d ng toán t $? ngay sau khi ch y l nh. $? tr v mã thoát c a l nh ch y ngay lúc ó. Ph c t p hơn, bash cho phép ta ph i h p các mã thoát trong ph n i u ki n s d ng các toán t && và || ư c g i là toán t logic AND và OR. Cú pháp y cho toán t AND như sau: command1 && command2 Câu l nh command2 ch ư c ch y khi và ch khi command1 tr v tr ng thái là s 0 (true). Cú pháp cho toán t OR thì như sau: command1 || command2 Câu l nh command2 ch ư c ch y khi và ch khi command1 tr l i m t giá tr khác 0 (false). Ta có th k t h p l i c 2 lo i toán t l i có m t bi u th c như sau: command1 && comamnd2 || command3 N u câu l nh command1 ch y thành công thì shell s ch y l nh command2 và n u command1 không ch y thành công thì command3 ư c ch y.
  • 134. 1 3 Ví d : $ rm myf && echo "File is removed successfully" || echo "File is not removed" N u file myf ư c xóa thành công (giá tr tr v c a l nh là 0) thì l nh "echo File is removed successfully" s ư c th c hi n, n u không thì l nh "echo File is not removed" ư c ch y. Gi s trư c khi ta vào trong m t kh i mã, ta ph i thay i m t thư m c và copy m t file. Có m t cách th c hi n i u này là s d ng các toán t if l ng nhau, như là o n mã sau: if cd /home/kwall/data then if cp datafile datafile.bak then # more code here fi fi Tuy nhiên, bash cho phép ta vi t o n mã này súc tích hơn nhi u như sau: if cd /home/kwall/data && cp datafile datafile.bak then # more code here fi C hai o n mã u th c hi n cùng m t ch c năng, nhưng o n th hai ng n hơn nhi u, g n nh và ơn gi n. M c dù if ch ki m tra các mã thoát, ta có th s d ng c u trúc […] l nh test ki m tra các i u ki n ph c t p hơn. [condition] tr v giá tr bi u th condition là true hay false. test cũng có tác d ng tương t . M t ví d khác v cách s d ng c u trúc if: #!/bin/sh # Script to test if..elif...else # if [ $1 -gt 0 ]; then echo "$1 is positive" elif [ $1 -lt 0 ] then echo "$1 is negative" elif [ $1 -eq 0 ] then echo "$1 is zero" else echo "Opps! $1 is not number, give number" fi S lư ng các phép toán i u ki n c a bi n hi n t i kho ng 35, khá nhi u và hoàn ch nh. Ta có th ki m tra các thu c tính file, so sánh các xâu và các bi u th c s h c. Chú ý: Các kho ng tr ng trư c d u m ngo c và sau d u óng ngo c trong [condition] là c n ph i có. ây là i u ki n c n thi t trong cú pháp shell c a bash. B ng dư i là danh sách các toán t test file ph bi n nh t (danh sách hoàn ch nh có th tìm th y trong nh ng trang manual y v bash).
  • 135. 1 3 Toán t i u ki n true -d file file t n t i và là m t thư m c -e file file t n t i -f file file t n t i và là m t file bình thư ng(không là m t thư m c hay m t file c bi t) -r file file cho phép c -s file file t n t i và khác r ng -w file file cho phép ghi -x file file kh thi ho c n u file là m t thư m c thì cho phép tìm ki m trên file -O file file c a ngư i dùng hi n t i -G file file thu c m t trong các nhóm ngư i dùng hi n t i là thành viên file1 -nt file2 file1 m i hơn file2 file1 -ot file2 file1 cũ hơn file2 Các toán t test file c a bash Ví d chng trình shell cho các toán t test file trên các thư m c trong bi n $PATH. Mã cho chương trình descpath.sh như sau: #!/bin/bash ################################ IFS=: for dir in $PATH; do echo $dir if [ -w $dir ]; then echo -e "tYou have write permission in $dir" else echo –e “tYou don’t have write permission in $dir” fi if [ -0 $dir ]; then echo -e "tYou own $dir" else echo –e “tYou don’t own $dir” fi if [ -G $dir ]; then echo -e "tYou are a member of $dir's group" else echo -e "tYou aren't a member of $dir's group" fi done Chương trình descpath.sh
  • 136. 1 3 Vòng l p for (gi i thi u trong ph n dư i) s duy t toàn b các ư ng d n thư m c trong bi n PATH sau ó ki m tra các thu c tính c a thư m c ó. K t qu như sau (k t qu có th khác nhau trên các máy khác nhau do giá tr c a bi n PATH khác nhau): /usr/local/bin You don’t have write permission in /usr/local/bin You don’t own /usr/local/bin You aren’t a member of /usr/local/bin’s group /bin You don’t have write permission in /bin You don’t own /bin You aren’t a member of /bin’s group /usr/bin You don’t have write permission in /usr/bin You don’t own /usr/bin You aren’t a member of /usr/bin’s group /usr/X11R6/bin You don’t have write permission in /usr/X11R6/bin You don’t own /usr/X11R6/bin You aren’t a member of /usr/X11R6/bin’s group /home/kwall/bin You have write permission in /home/kwall/bin You own /home/kwall/bin You are a member of /home/kwall/bin’s group /home/kwall/wp/wpbin You have write permission in /home/kwall/wp/wpbin You own /home/kwall/wp/wpbin You are a member of /home/kwall/wp/wpbin’s group Các bi u th c trong ph n i u ki n cũng có th k t h p v i nhau t o thành các bi u th c ph c t p hơn b ng các phép toán logic. Dư i ây là m t b ng các bi u th c logic trong shell. Toán t Ý nghĩa ! expression Logical NOT expression1 -a expression2 Logical AND expression1 -o expression2 Logical OR 7.2.2.2 Các vòng l p ã quy t nh: for Như ã th y chương trình trên, for cho phép ta ch y m t o n mã m t s l n nh t nh. Tuy nhiên c u trúc for c a bash ch cho phép ta l p i l p l i trong danh sách các giá tr nh t nh b i vì nó không t ng tăng hay gi m con m vòng l p như là C, Pascal, hay Basic. Tuy nhiên vòng l p for là công c l p thư ng xuyên ư c s d ng b i vì nó i u khi n g n gàng trên các danh sách, như là các tham s dòng l nh và các danh sách các file trong thư m c. Cú pháp y c a for là: for value in list
  • 137. 1 3 do statements using $value done list là m t danh sách các giá tr , ví d như là tên file. Giá tr là m t thành viên danh sách ơn và statements là các l nh s d ng value. M t cú pháp khác c a l nh for có d ng như sau: for (( expr1; expr2; expr3 )) do ..... ... repeat all statements between do and done until expr2 is TRUE done Linux không có ti n ích i tên hay copy các nhóm c a file. Trong MS-DOS n u ta có 17 file có ph n m r ng a*.doc, ta có th s d ng l nh COPY copy *.doc thành file *.txt. L nh DOS như sau: C: cp doc*.doc doc*.txt s d ng vòng l p for c a bash bù p nh ng thi u sót này. o n mã dư i ây có th ư c chuy n thành chương trình shell th c hi n úng như nh ng gì ta mu n: for docfile in doc/*.doc do cp $docfile ${docfile%.doc}.txt done S d ng m t trong các toán t pattern-matching c a bash, o n mã này làm vi c copy các file có ph n m r ng là *.doc b ng cách thay th .doc cu i c a tên file b ng .txt. M t ví d khác v vòng for ơn gi n như sau: #!/bin/bash for i in 1 2 3 4 5 do echo "Welcome $i times" done Ta cũng có m t c u trúc v for như sau, chương trình này cũng có cùng ch c năng như chương trình trên nhưng ta chú ý n s khác bi t v cú pháp c a l nh for. #!/bin/bash for (( i = 0 ; i <= 5; i++ )) do echo "Welcome $i times" done $ chmod +x for2 $ ./for2 Welcome 0 times Welcome 1 times Welcome 2 times Welcome 3 times
  • 138. 1 3 Welcome 4 times Welcome 5 times Ti p theo là m t ví d v vòng for l ng nhau: #!/bin/bash for (( i = 1; i <= 5; i++ )) ### Outer for loop ### do for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ### do echo -n "$i " done Ví d khác v cách s d ng c u trúc if và for như sau: #!/bin/sh #Script to test for loop # # if [ $# -eq 0 ] then echo "Error - Number missing form command line argument" echo "Syntax : $0 number" echo "Use to print multiplication table for given number" exit 1 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i * $n`" done Khi ta ch y chương trình v i tham s : $ chmod 755 mtable $ ./mtable 7 Ta thu ư c k t qu như sau: 7 * 1 = 7 7 * 2 = 14 ... .. 7 * 10 = 70 7.2.2.3 Các vòng l p không xác nh: while và until
  • 139. 1 3 Vòng l p for gi i h n s l n mà m t o n mã ư c thi hành, các c u trúc while và until c a bash cho phép m t o n mã ư c thi hành liên t c cho n khi m t i u ki n nào ó x y ra. Ch v i chú ý là o n mã này c n vi t sao cho i u ki n cu i ph i x y ra n u không s t o ra m t vòng l p vô t n. Cú pháp c a nó như sau: while condition do statements done Cú pháp này có nghĩa là khi nào condition còn true, thì th c hi n statements cho n khi condition tr thành false (cho n khi m t chương trình hay m t l nh tr v khác 0): until condition do statements done Cú pháp until có nghĩa là trái ngư c v i while: cho n khi condition tr thành true thì thi hành statements (có nghĩa là cho n khi m t l nh hay chương trình tr v mã thoát khác 0) C u trúc while c a bash kh c ph c thi u sót không th t ng tăng, gi m con m cua vòng l p for. Ví d , ta mu n copy 150 b n c a m t file, thì vòng l p while là m t l a ch n gi i quy t bài toán này. Dư i ây là chương trình: #!/bin/sh # declare -i idx idx=1 while [ $idx != 150] do cp somefile somefile.$idx idx=$idx+1 done Chương trình này gi i thi u cách s d ng tính toán s nguyên c a bash. Câu l nh declare kh i t o m t bi n, idx, nh nghĩa là m t s nguyên. M i l n l p idx tăng lên, nó s ư c ki m tra thoát kh i vòng l p. Vòng l p until tuy cũng có kh năng gi ng while nhưng không ư c dùng nhi u vì r t khó vi t và ch y ch m. M t ví d n a v cách s d ng vòng l p while ư c minh h a trong chương trình in b n nhân c a m t s : #!/bin/sh #Script to test while statement # # if [ $# -eq 0 ] then echo "Error - Number missing form command line argument" echo "Syntax : $0 number" echo " Use to print multiplication table for given number" exit 1 fi n=$1 i=1 while [ $i -le 10 ]
  • 140. 1 4 do echo "$n * $i = `expr $i * $n`" i=`expr $i + 1` done 7.2.2.4 Các c u trúc l a ch n: case và select C u trúc i u khi n lu ng ti p theo là case, ho t ng cũng tương t như l nh switch c a C. Nó cho phép ta th c hi n các kh i l nh ph thu c vào giá tr c a bi n. Cú pháp y c a case như sau: case expr in pattern1 ) statements ;; pattern2 ) statements ;; … [*) statements ;;] esac expr ư c em i so sánh v i t ng pattern, n u nó b ng nhau thì các l nh tương ng s ư c thi hành. D u ;; là tương ương v i l nh break c a C, t o ra i u khi n nh y t i dòng u tiên c a mã esac. Không như t khoá switch c a C, l nh case c a bash cho phép ta ki m tra giá tr c a expr d a vào pattern, nó có th ch a các kí t i di n. Cách làm vi c c a c u trúc case như sau: nó s kh p (match) bi u th c expr v i các m u pattern1, pattern2,…n u có m t m u nào ó kh p thì kh i l nh tương ng v i m u ó s ư c th c thi, sau ó nó thoát ra kh i l nh case. N u t t c các m u u không kh p và ta có s d ng m u * (trong nhánh *)), ta th y ây là m u có th kh p v i b t kỳ giá tr nào (ký t i di n là *), nên các l nh trong nhánh này s ư c th c hi n. C u trúc i u khi n select (không có trong các phiên b n bash nh hơn 1.14) ch riêng có trong Korn và các shell bash. Thêm vào ó, nó không có s tương t như trong các ngôn ng l p trình quy ư c. select cho phép ta d dàng trong vi c xây d ng các menu ơn gi n và áp ng các ch n l a c a ngư i dùng. Cú pháp c a nó như sau: select value [in list] do statements that manipulate $value done Dư i ây là m t ví d v cách s d ng l nh select: #!/bin/bash # menu.sh – Createing simple menus with select ####################################### IFS=: PS3=“choice? ” # clear the screen clear
  • 141. 1 4 select dir in $PATH do if [ $dir ]; then cnt=$(ls –Al $dir | wc -l) echo “$cnt files in $dir” else echo “Dohhh! No such choice!” fi echo –e “nPress ENTER to continue, CTRL –C to quit” read clear done Chương trình t o các menu b ng select L nh u tiên t kí t IFS là : (ký t phân cách), vì th select có th phân tích hoàn ch nh bi n môi trư ng $PATH. Sau ó nó thay i l i nh c default khi select b ng bi n PS3. Sau khi xoá s ch màn hình, nó bư c vào m t vòng l p, ưa ra m t danh sách các thư m c n m trong $PATH và nh c ngư i dùng ch n l a như là minh ho trong hình dư i. N u ngư i dùng ch n h p l , l nh ls ư c th c hi n k t qu ư c g i cho l nh m t wc m s file trong thư m c và hi n th k t qu có bao nhiêu file trong thư m c ó. Do ls có th s d ng mà không c n i s , script u tiên c n ch c ch n là $dir khác null (n u nó là null, ls s ho t ng trên thư m c hi n hành n u ngư i dùng ch n 1 menu không h p l ). N u ngư i dùng ch n không h p l , m t thông báo l i s ư c hi n th . Câu l nh read ( ư c gi i thi u sau) cho phép ngư i dùng ánh vào l a ch n c a mình và nh n Enter l p l i vòng l p hay nh n Ctrl + C thoát. Chú ý: Như ã gi i thi u, các vòng l p script không k t thuc n u ta không nh n Ctrl+C. Tuy nhiên ta có th s d ng l nh break thoát ra.
  • 142. 1 4 7.2.2.5 Các hàm shell Các hàm ch c năng c a bash là m t cách m r ng các ti n ích s n có trong shell, nó có các i m l i sau: • Thi hành nhanh hơn do các hàm shell luôn thư ng tr c trong b nh . • Cho phép vi c l p trình tr nên d dàng hơn vì ta có th t ch c chương trình thành các module. Ta có th nh nghĩa các hàm shell s d ng theo hai cách: function fname { commands } ho c là fname() { commands } C hai d ng u ư c ch p nh n và không có gì khác gi a chúng. g i m t hàm ã nh nghĩa ơn gi n là g i tên hàm cùng v i các i s mà nó c n. N u so sánh v i C hay Pascal, hàm c a bash không ư c ch t ch , nó không ki m tra l i và không có phương th c tr v i s b ng giá tr . Tuy nhiên gi ng như C và Pascal, các bi n a phương có th khai báo c c b i v i hàm, do ó tránh ư c s xung t v i bi n toàn c c. th c hi n i u này ta dùng t khoá local như trong o n mã sau: function foo { local myvar local yourvar=1 } Trong ví d v các bi n v trí trên ta cũng th y ư c cách s d ng hàm trong bash. Các hàm shell giúp mã c a ta d hi u và d b o dư ng. S d ng các hàm và các chú thích ta s r t nhi u công s c khi ta ph i tr l i nâng c p o n mã mà ta ã vi t t th i gian r t lâu trư c ó. 7.2.3 Các toán t nh hư ng vào ra Ta ã ư c bi t v các toán t nh hư ng vào ra, > và <. Toán t nh hư ng ra cho phép ta g i k t qu ra c a m t l nh vào m t file. Ví d như l nh sau: $ cat $HOME/.bash_profile > out Nó s t o m t file tên là out trong thư m c hi n t i ch a các n i dung c a file bash_profile, b ng cách nh hư ng u ra c a cat t i file ó. Tương t , ta có th cung c p u vào là m t lênh t m t file ho c là l nh s d ng toán t u vào, <. Tacó th vi t l i l nh cat s d ng toán t nh hư ng u vào như sau: $ cat < $HOME/.bash_profile > out
  • 143. 1 4 K t qu c a l nh này v n như th nhưng nó cho ta hi u thêm v cách s d ng nh hư ng u vào u ra. Toán t nh hư ng u ra, >, s ghi è lên b t c file nào ang t n t i. ôi khi i u này là không mong mu n, vì th bash cung c p toán t n i thêm d li u, >>, cho phép n i thêm d li u vào cuôi file. Hay xem l nh thêm bí danh cdlpu vào cu i c a file .bashrc c a tôi: $echo “alias cdlpu=’cd $HOME/kwall/projects/lpu’ ” >> $HOME/.bashrc M t cách s d ng nh hư ng u vào là u vào chu n (bàn phím). Cú pháp c a l nh này như sau: Command << label Input … Label Cú pháp này nói lên r ng command c các input cho n khi nó g p label. Dư i ây là ví d v cách s d ng c u trúc này: #!/bin/bash #################################### USER=anonymous PASS=kwall@xmission.com ftp -i -n << END open ftp.caldera.com user $USER $PASS cd /pub ls close END 7.2.4. Hi n dòng văn b n L nh echo hi n ra dòng văn b n ư c ghi ngay trong dòng l nh có cú pháp: echo [tùy ch n] [xâu ký t ]… v i các tùy ch n như sau: -n : hi n xâu ký t và d u nh c trên cùng m t dòng. -e : b t kh năng thông d ch ư c các ký t i u khi n. -E : t t kh năng thông d ch ư c các ký t i u khi n. --help : hi n h tr và thoát. M t s b n Linux không h tr tham s này. Ví d , dùng l nh echo v i tham s -e # echo -e ‘th dùng l nh echo n’ s th y hi n ra chính dòng văn b n l nh: th dùng l nh echo # ây ký t i u khi n ‘n’ là ký t xu ng dòng.
  • 144. 1 4 7.2.5. L nh read c d li u cho bi n ngư i dùng L nh read có d ng read <tên bi n> Ví d chương trình shell có tên thu1.arg có n i dung như sau: #!/bin/sh # Chuong trinh hoi ten nguoi va hien lai echo "Ten anh la gi?" read name echo "Xin chao, $name , anh go $# doi so" echo "$*" Sau ó, ta th c hi n $chmod u+x thu1.arg và $thu1.arg Hoi ten nguoi va hien lai s th y xu t hi n Ten anh la gi? Tran Van An Xin chao, Tran Van An, anh go 6 doi so Hoi ten nguoi va hien lai 7.2.6. L nh set gán k t qu ư ra t l nh shell ra các bi n t ng, ta dùng l nh set D ng l nh set set `<l nh>` Sau l nh này, k t qu th c hi n l nh không hi ra lê màn hình mà gán k t qu ó tương ng cho các bi n t ng. M t cách t ng các t trong k t qu th c hi n l nh s gán tương ng cho các bi n t ng (t $1 tr i). Xem xét m t ví d sau ây (chương trình thu2.arg) có n i dung: #!/bin/sh # Hien thoi diem chay chuong trinh nay set `date` echo "Thoi gian: $4 $5" echo "Thu: $1" echo "Ngay $3 thang $2 nam $6" Sau khi i mode c a File chương trình này và ch y, chúng ta nh n ư c: Thoi gian: 7:20:15 EST Thu: Tue Ngay 20 thang Oct nam 1998 Như v y, $# = 6 $* = Tue Oct 20 7:20:15 EST 1998 $1 = Tue $2=Oct $3 = 20 $4 = 7:20:15 $5 = EST $6 = 1998 7.2.7. Tính toán trên các bi n Các tính toán trong shell ư c th c hi n v i các i s nguyên. Các phép toán g m có: c ng (+), tr (-), nhân (*), chia (/), mod (%). Bi u th c th c hi n theo các phép toán ã nêu. Tính toán trên shell có d ng: `expr <bi u th c>`
  • 145. 1 4 Ví d , chương trình v i tên cong.shl sau ây: #!/bin/sh # Tinh va in hai so tong = `expr $1 + $2` echo "Tong = $tong" Sau ó, khi i mod và ch y $cong.shl 5 6 s hi n ra: Tong = 11 7.2.8. Chương trình ví d /* Program 5 */ #!/bin/sh # Chuong trinh liet ke cac thu muc con cua 1 thu muc # Minh hoa cach su dung if then fi, while do done # va cac CT test, expr if test $# -ne 1 then echo Cu phap: $0 <Ten thu muc> exit 1 fi cd $1 # Chuyen vao thu muc can list if test $? -ne 0 # Neu thu muc khong ton tai thi ra khoi CT then exit 1 fi ls -lL | # Liet ke ca cac thong tin cua symbolic link # Su dung sub-shell de tu giai phong bien { sum=0 # Lenh read x y de bo di dong 'total 1234..' cua lenh ls -lL read x y ; while read mode link user group size month day hour name do if [ -d $name ] then echo $name $size ($mode)
  • 146. 1 4 fi done } 7.3. L p trình C trên UNIX 7.3.1. Trình biên d ch gcc H i u hành UNIX luôn kèm theo b d ch ngôn ng l p trình C v i tên g i là cc (C compiler). Trong Linux, b d ch có tên là gcc (GNU C Compiler) v i ngôn ng l p trình không khác nhi u v i C chu n. N i dung chi ti t v các ngôn ng l p trình trên Linux thu c ph m vi c a các tài li u khác. gcc cho ngư i l p trình ki m tra trình biên d ch. Quá trình biên d ch bao g m b n giai o n: • Ti n x lý • Biên d ch • T p h p • Liên k t Ta có th d ng quá trình sau m t trong nh ng giai o n ki m tra k t qu biên d ch t i giai o n y. gcc cũng có th ch p nh n ngôn ng khác c a C, như ANSI C hay C truy n th ng. Như ã nói trên, gcc thích h p biên d ch C++ hay Objective-C. Ta có th ki m soát lư ng cũng như ki u thông tin c n debug, t t nhiên là có th nhúng trong quá trình nh phân hóa k t qu và gi ng như h u h t các trình biên d ch, gcc cũng th c hi n t i ưu hóa mã. Trư c khi b t u i sâu vào nghiên c u gcc, ta xem m t ví d sau: #include<stdio.h> int main (void) { fprintf( stdout, “Hello, Linux programming world!n”); return 0; } M t chương trình i n hình dùng minh ho vi c s d ng gcc biên d ch và ch y chương trình này hãy gõ: $ gcc hello.c –o hello $ ./hello Hello, Linux programming world! Dòng l nh u tiên ch cho gcc ph i biên d ch và liên k t file ngu n hello.c, t o ra t p tin th c thi, b ng cách ch nh s d ng i s -o hello. Dòng l nh th hai th c hi n chương trình, và k t qu cho ra trên dòng th 3. Có nhi u ch mà ta không nhìn th y ư c, gcc trư c khi ch y hello.c thông qua b ti n x lý c a cpp, m r ng b t kỳ m t macro nào và chèn thêm vào n i dung c a nh ng file #include. Ti p n, nó biên d ch mã ngu n ti n x lý sang mã obj . Cu i cùng, trình liên k t, t o ra mã nh phân cho chương trình hello.
  • 147. 1 4 Ta có th t o l i t ng bư c này b ng tay, chia thành t ng bư c qua ti n trình biên d ch. ch cho gcc bi t ph i d ng vi c biên d ch sau khi ti n x lý, ta s d ng tuỳ ch n –E c a gcc: $ gcc –E hello.c –o hello.cpp Xem xét hello.cpp và ta có th th y n i dung c a stdio.h ư c chèn vào file, cùng v i nh ng mã thông báo ti n x lý khác. Bư c ti p theo là biên d ch hello.cpp sang mã obj. S d ng tuỳ ch n –c c a gcc hoàn thành: $ gcc –x cpp-output -c hello.cpp –o hello.o Trong trư ng h p này, ta không c n ch nh tên c a file output b i vì trình biên d ch t o m t tên file obj b ng cách thay th .c b i .o. Tuỳ ch n –x ch cho gcc bi t b t u biên d ch bư c ư c ch báo trong trư ng h p này v i mã ngu n ti n x lý. Làm th nào gcc bi t chia lo i c bi t c a file? Nó d a vào uôi m r ng c a file trên xác nh rõ ph i x lý file như th nào cho dúng. H u h t nh ng uôi m r ng thông thư ng và chú thích c a chúng ư c li t kê trong b ng dư i. Ph n m r ng Ki u .c Mã ngu n ngôn ng C .c, .cpp Mã ngu n ngôn ng C++ .i Mã ngu n C ti n x lý .ii Mã ngu n C++ ti n x lý .S, .s Mã ngu n Hơp ng .o Mã i tư ng biên d ch (obj) .a, .so Mã thư vi n biên d ch Các ph n m r ng c a tên file i v i gcc Liên k t file i tư ng, và cu i cùng t o ra mã nh phân: $ gcc hello.o –o hello Trong trư ng h p , ta ch mu n t o ra các file obj, và như v y thì bư c liên k t là không c n thi t. H u h t các chương trình C ch a nhi u file ngu n thì m i file ngu n ó u ph i ư c biên d ch sang mã obj trư c khi t i bư c liên k t cu i cùng. Gi s có m t ví d , ta ang làm vi c trên killerapp.c là chương trình s d ng ph n mã c a helper.c, như v y biên d ch killerapp.c ta ph i dùng dòng l nh sau: $ gcc killerapp.c helper.c –o killerapp gcc qua l n lư t các bư c ti n x lý - biên d ch – liên k t, lúc này t o ra các file obj cho m i file ngu n trư c khi t o ra mã nh phân cho killerapp. M t s tuỳ ch n dòng l nh c a gcc: -o FILE Ch nh tên file output; không c n thi t khi biên d ch sang mã obj. N u FILE không ư c ch rõ thì tên m c nh s là a.out. -c Biên d ch không liên k t.
  • 148. 1 4 -DF00=BAR nh nghĩa macro ti n x lý t tên F00 v i m t giá tr c a BAR trên dòng l nh. -IDIRNAME Trư c khi chưa quy t nh ư c DIRNAME hãy tìm ki m nh ng file include trong danh sách các thư m c( tìm trong danh sách các ư ng d n thư m c) -LDIRNAME Trư c khi chưa quy t nh ư c DIRNAME hãy tìm ki m nh ng file thư vi n trong danh sách các thư m c. V i m c nh gcc liên k t d a trên nh ng thư vi n dùng chung -static Liên k t d a trên nh ng thư vi n tĩnh -lF00 Liên k t d a trên libF00 -g Bao g m chu n g r i thông tin mã nh phân -ggdb Bao g m t t c thông tin mã nh phân mà ch có chương trình g r i GNU- gdb m i có th hi u ư c -O T i ưu hoá mã biên d ch -ON Ch nh m t m c t i ưu hoá mã N, 0<=N<=3. -ANSI H tr chu n ANSI/ISO c a C, lo i b nh ng m r ng c a GNU mà xung t v i chu n( tuỳ ch n này không b o m mã theo ANSI). -pedantic Cho ra t t c nh ng c nh báo quy nh b i chu n -pedantic-erors Thông báo ra t t c các l i quy nh b i chu n ANSI/ISO c a C. -traditional H tr cho cú pháp ngôn ng C c a Kernighan và Ritchie (gi ng như cú pháp nh nghĩa hàm ki u cũ). -w Ch n t t c thông i p c nh báo. -Wall Thông báo ra t t c nh ng c nh báo h u ích thông thư ng mà gcc có th cung c p. -werror Chuy n i t t c nh ng c nh báo sang l i mà s làm ngưng ti n trình biên d ch. -MM Cho ra m t danh sách s ph thu c tương thích ư c t o. -v Hi n ra t t c các l nh ã s d ng trong m i bư c c a ti n trình biên d ch. 7.3.2. Công c GNU make Trong trư ng h p ta vi t m t chương trình r t l n ư c c u thành b i t nhi u file, vi c biên d ch s r t ph c t p vì ph i vi t các dòng l nh gcc r t là dài. kh c ph c tình tr ng này, công c GNU make ã ư c ưa ra. GNU make ư c gi i quy t b ng cách ch a t t c các dòng l nh ph c t p ó trong m t file g i là makefile. Nó cũng làm t i ưu hóa quá trình d ch b ng cách phát hi n ra nh ng file nào có thay i thì nó m i d ch l i, còn file nào không b thay i thì nó s không làm gì c , vì v y th i gian d ch s ư c rút ng n.
  • 149. 1 4 M t makefile là m t cơ s d li u văn b n ch a cách lu t, các lu t này s báo cho chương trình make bi t ph i làm gì và làm như th nào. M t lu t bao g m các thành ph n như sau: • ích (target) – cái mà make ph i làm • M t danh sách các thành ph n ph thu c (dependencies) c n t o ra ích • M t danh sách các câu l nh th c thi trên các thành ph n ph thu c Khi ư c g i, GNU make s tìm các file có tên là GNUmakefile, makefile hay Makefile. Các lu t s có cú pháp như sau: target: dependency1, dependency2, …. command command …… Target thư ng là m t file như file kh thi hay file object ta mu n t o ra. Dependency là m t danh sách các file c n thi t như là u vào t o ra target. Command là các bư c c n thi t (ch ng h n như g i chương trình d ch) t o ra target. Dư i ây là m t ví d v m t makefile v t o ra m t chương trình kh thi có tên là editor (s hi u dòng ch ưa vào ti n theo dõi, còn n i dung c a makefile không ch a s hi u dòng). Chương trình này ư c t o ra b i m t s các file ngu n: editor.c, editor.h, keyboard.h, screen.h, screen.c, keyboard.c. 1. editor : editor.o screen.o keyboard.o 2. gcc -o editor.o screen.o keyboard.o 3. editor.o : editor.c editor.h keyboard.h screen.h 4. gcc -c editor.c 5. screen.o : screen.c screen.h 6. gcc -c screen.c 7. keyboard.o : keyboard.c keyboard.h 8. gcc -c keyboard.c 9. clean: 10. rm *.o biên d ch chương trình này ta ch c n ra l nh make trong thư m c ch a file này. Trong makefile này ch a t t c 5 lu t, lu t u tiên có ích là editor ư c g i là ích ng m nh. ây chính là file mà make s ph i t o ra, editor có 3 dependencies editor.o, screen.o, keyboard.o. T t c các file này ph i t n t i thì m i t o ra ư c ích trên. Dòng th 2 là l nh mà make s g i th c hi n t o ra ích trên. Các dòng ti p theo là các ích và các l nh tương ng t o ra các file i tư ng (object). 7.3.3. Làm vi c v i file Trong Linux, làm vi c v i file ta s d ng mô t file (file descriptor). M t trong nh ng thu n l i trong Linux và các h th ng UNIX khác là giao di n file làm như nhau i v i nhi u lo i thi t b . ĩa t , các thi t b vào/ra, c ng song song, gi
  • 150. 1 5 máy tr m (pseudoterminal), c ng máy in, b ng m ch âm thanh, và chu t ư c qu n lý như các thi t b c bi t gi ng như các t p thông thư ng l p trình ng d ng. Các socket TCP/IP và mi n, khi k t n i ư c thi t l p, s d ng mô t file như th chúng là các file chu n. Các ng (pipe) cũng tương t các file chu n. M t mô t file ơn gi n ch là m t s nguyên ư c s d ng như ch m c (index) vào m t b ng các file m liên k t v i t ng ti n trình. Các giá tr 0, 1 và 2 liên quan n các dòng (streams) vào ra chu n: stdin, stderr và stdout; ba dòng ó thư ng k t n i v i máy c a ngư i s d ng và có th ư c chuy n ti p (redirect). M t s l i g i h th ng s d ng mô t file. H u h t các l i g i ó tr v giá tr -1 khi có l i x y ra và bi n errno ghi mã l i. Mã l i ư c ghi trong trang chính tuỳ theo t ng l i g i h th ng. Hàm perror() ư c s d ng hi n th n i dung thông báo l i d a trên mã l i. Hàm open() L i g i open() s d ng m m t file. Khuôn m u c a hàm và gi i thích tham s và c c a nó ư c cho dư i ây: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); i s pathname là m t xâu ch ra ư ng d n n file s ư c m . Thông s th ba xác nh ch c a file Unix (các bit ư c phép) ư c s d ng khi t o m t file và nên ư c s d ng khi t o m t file . Tham s flags nh n m t trong các giá tr O_RDONLY, O_WRONLY ho c O_RDWR C Chú gi i O_RDONLY O_WRONLY O_RDWR O_CREAT O_EXCL O_NOCTTY O_TRUNC O_APPEND O_NONBLOCK O_NODELAY O_SYNC M file c M file ghi M file c và ghi T o file n u chưa t n t i file ó Th t b i n u file ã có Không i u khi n tty n u tty ã m và ti n trình không i u khi n tty C t file n u nó t n t i N i thêm và con tr t cu i file N u m t quá trình không th hoàn thành mà không có tr , tr v tr ng thái trư c ó Tương t O_NONBLOCK Thao tác s không tr v cho n khi d li u ư c ghi vào ĩa ho c thi t b khác Các giá tr c c a hàm open()
  • 151. 1 5 open() tr v m t mô t file n u không có l i x y ra. Khi có l i , nó tr v giá tr -1 và t giá tr cho bi n errno. Hàm create() cũng tương t như open() v i các c O_CREATE | O_WRONLY | O_TRUNC Hàm close() Chúng ta nên óng mô t file khi ã thao tác xong v i nó. Ch có m t i s ó là s mô t file mà l i g i open() tr v . D ng c a l i g i close() là: #include <unistd.h> int close(int fd); T t c các khoá (lock) do ti n trình x lý trên file ư c gi i phóng, cho dù chúng ư c t mô t file khác. N u quá trình óng file làm cho b m liên k t b ng 0 thì file s b xoá. N u ây là mô t file cu i cùng liên k t n m t file ư c m thì b n ghi b ng file m ư c gi i phóng. N u không ph i là m t file bình thư ng thì các hi u ng không mong mu n có th x y ra. Hàm read() L i g i h th ng read() s d ng c d li u t file tương ng v i m t mô t file. #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); i s u tiên là mô t file mà ư c tr v t l i g i open() trư c ó. i s th hai là m t con tr t i b m sao chép d li u và i s th ba là s byte s ư c c. read() tr v s byte ư c c ho c -1 n u có l i x y ra. Hàm write() L i g i h th ng write() s d ng ghi d li u vào file tương ng v i m t mô t file. #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); i s u tiên là s mô t file ư c tr v t l i g i open() trư c ó. i s th hai là con tr t i b m ( sao chép d li u, có dung lư ng l n ch a d li u) và i s th ba xác nh s byte s ư c ghi. write() tr v s byte c ho c -1 n u có l i x y ra Hàm ftruncate() L i g i h th ng ftruncate() c t file tham chi u b i mô t file fd v i dài ư c xác nh b i tham s length #include <unistd.h> int ftruncate(int fd, size_t length); Tr v giá tr 0 n u thành công và -1 n u có l i x y ra. Hàm lseek() Hàm lseek() t v trí c và ghi hi n t i trong file ư c tham chi u b i mô t file files t i v trí offset
  • 152. 1 5 #include <sys/types.h> #include <unistd.h> off_t lseek(int fildes, off_t offset, int whence); Ph thu c vào giá tr c a whence, giá tr c a offset là v trí b t u (SEEK_SET), v trí hi n t i (SEEK_CUR), ho c cu i file (SEEK_END). Giá tr tr v là k t qu c a offset: b t u file, ho c m t giá tr c a off_t , giá tr -1 n u có l i. Hàm fstat() Hàm fstat () ưa ra thông tin v file thông qua vi c mô t các file, nơi k t qu c a struct stat ư c ch ra con tr ch n buf().K t qu tr v giá tr 0 n u thành công và nh n giá tr -1 n u sai ( ki m tra l i). #include <sys/stat.h> #include <unistd.h> int fstat(int filedes, struct stat *buf); Sau ây là nh nghĩa c a struct stat: struct stat { dev_t st_dev;/ * thi t b */ int_t st_ino ; /* inode */ mode_t st_mode; /* ch b o v */ nlink_t st_nlink; /* s lư ng các liên k t c ng */ uid_t st_uid; /* s hi u c a ngư i ch */ gid_t st_gid; /* s hi u nhóm c a ngư i ch */ dev_t st_rdev; /* ki u thi t b */ off_t st_size;/* kích thư c bytes */ unsigned long st_blksize; /* kích thư c kh i*/ unsigned long st_blocks; /* S lư ng các kh i ã s d ng*/ time_t st_atime; /* th i gian truy c p cu i cùng*/ time_t st_mtime; /* th i gian c p nh t cu i cùng */ time_t st_ctime; /* th i gian thay i cu i cùng */ }; Hàm fchown() L i g i h th ng fchown() cho phép tathay i ngư i ch và nhóm ngư i ch k t h p v i vi c m file. #include <sys/types.h> #include <unistd.h> int fchown(int fd, uid_t owner, gid_t group); Tham s u tiên là mô t file, tham s th hai là s nh danh c a ngư i ch , và tham s th ba là s nh danh c a nhóm ngư i ch . Ngư i dùng ho c nhóm ngư i dùng s ư c
  • 153. 1 5 phép s d ng khi giá tr -1 thay i. Giá tr tr v là 0 n u thành công và –1 n u g p l i (ki m tra bi n errno). Thông thư ng ngư i dùng có th thay i nhóm các file thu c v h . Ch root m i có quy n thay i ngư i ch s h u c a nhi u nhóm. Hàm fchdir( ) L i g i hàm fchdir( ) thay i thư m c b ng cách m file ư c mô t b i bi n fd. Giá tr tr v là 0 n u thành công và –1 n u có l i (ki m tra bi n errno). #include <unistd.h> int fchdir(int fd); M t ví d v cách s d ng các hàm thao tác v i file: /* filedes_io.c */ #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include <fcntl.h> #include <unistd.h> #include < assert.h> #include <errno.h> #include <string.h> #include <stdio.h> /*for print */ char sample1[] = “This is sample data 1n”; char sample2[] = “This is sample data 2n”; char data[16]; main ( ) { int fd; int rc; struct stat statbuf; printf( “Creating filen”); fd = open(“junk.out”, 0_WRONLY | 0_CREAT| 0_TRUNG, 0666); assert(fd>=0); rc = write(fd, sample1, strlen(sample 1) ); assert(fd>=0); rc = write(fd, sample1, strlen(sample1)); assert(rc == strlen(sample1)); close(fd);
  • 154. 1 5 printf(“ Appending to filen”); fd = open(“junk.out”, 0_WRONLY| 0_APPEND); assert(fd>=0); printf( “ locking filen”); rc = flock(fd, LOCK_EX); assert(rc == 0); printf(“sleeping for 10 secondsn”); sleep(10); printf(“writing datan”); rc = write(fd, sample2, strlen(sample2)); assert(rc == strlen(sample2)); printf(“unlocking filen”); rc = flock(fd, LOCK_UN); assert(rc == 0); close(fd); printf(“Reading file n”); fd = open(“junk.out”, 0_RDONLY); assert (fd >=0); while (1) { rc = read (fd, data, sizeof (data) ); if( rc > 0 ) { data[rc] =0; /* k t thúc xâu */ printf (“ Data read (rc = %d): <%s>n”, rc, data); } else if (rc == 0) { printf (“ End of file read n”); break; } else { perror ( “ read error ” ); break; } } close (fd); printf (“ Fiddling with inoden”); fd = open (“ junk.out”, 0_RDONLY);
  • 155. 1 5 assert (fd >= 0); printf (“ changing file moden”); rc = fchmod ( fd, 0600); assert (rc == 0); if ( getuid ( ) == 0 ) { printf ( “ changing file owner n ” ); rc = fchown (fd, 99, 99); assert (rc == 0); } else { printf ( “ not changing file ownern”); } fstat (fd, &statbuf); printf (“ file mode = 0% ( octal ) n”, statbuf.st_mode); printf(“Owner uid = %d n”, statbuf.st_uid); printf(“ Owner gid = %d n”, statbuf.st_uid); close(fd); } 7.3.4. Thư vi n liên k t Ph n này s gi i thi u cách t o ra và s d ng thư vi n (các module chương trình ã ư c vi t và ư c tái s d ng nhi u l n). Thư vi n g c c a C/C++ trên Linux chính là glibc, thư vi n này cung c p cho ngư i dùng r t nhi u l i g i h th ng. Các thư vi n trên Linux thư ng ư c t ch c dư i d ng tĩnh (static library), thư vi n chia s (shared library) và ng (dynamic library - gi ng như DLL trên MS Windows). Thư vi n tĩnh ư c liên k t c nh vào trong chương trình trong quá trình liên k t. Thư vi n dùng chung ư c n p vào b nh trong khi chương trình b t u th c hi n và cho phép các ng d ng cùng chia s lo i thư vi n này. Thư vi n liên k t ng ư c n p vào b nh ch khi nào chương trình g i t i. 7.3.4.1 Thư vi n liên k t tĩnh Thư vi n tĩnh và các thư vi n dùng chung (shared library) là các file ch a các file ư c g i là các module ã ư c biên d ch và có th s d ng l i ư c. Chúng ư c lưu tr dư i m t nh d ng c bi t cùng v i m t b ng (ho c m t b n ) ph c v cho quá trình liên k t và biên d ch. Các thư vi n liên k t tĩnh có ph n m r ng là .a. s d ng các module trong thư vi n ta c n thêm ph n #include file tiêu (header) vào trong chương trình ngu n và khi liên k t (sau quá trình biên d ch) thì liên k t v i thư vi n ó. Dư i ây là m t ví d v cách t o và s d ng m t thư viên liên k t tĩnh. Có 2 ph n trong ví d này, ph n th nh t là mã ngu n cho thư vi n và ph n th 2 cho chương trình s d ng thư vi n.
  • 156. 1 5 /* * liberr.h */ #ifndef _LIBERR_H #define _LIBERR_H #include <stdarg.h> /* in ra m t thông báo l i t i vi cg i stderr và return hàm g i */ void err_quit(const char *fmt, … ); /* in ra m t thông i p l i cho logfile và tr v hàm g i */ void log_ret(char *logfile, const char *fmt, …); /* in ra m t thông i p l i cho logfile và thoát */ void log_quit( char *logfile, const char *fmt , …); /* in ra m t thông báo l i và tr l i hàm g i */ void err_prn(const char *fmt, va_list ap, char *logfile); #endif //_LIBERR_H Mã ngu n cho file liberr.h #include <errno.h> #include <stdarg.h> #include <stdlib.h> #include <stdio.h> #include "liberr.h" #define MAXLINELEN 500 void err_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); return; } void err_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); exit(1); } void log_ret(char *logfile, const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt,ap, logfile); va_end(ap); return; }
  • 157. 1 5 void log_quit(char *logfile, const char *fmt,... ) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap,logfile); va_end(ap); exit(1); } extern void err_prn( const char *fmt, va_list ap, char *logfile) { int save_err; char buf[MAXLINELEN]; FILE *plf; save_err = errno; vsprintf(buf,fmt, ap); sprintf( buf+strlen(buf), ": %s", strerror(save_err)); strcat(buf, "n"); fflush(stdout); if(logfile !=NULL){ if((plf=fopen(logfile, "a") ) != NULL){ fputs(buf, plf); fclose(plf); }else fputs("failed to open log file n", stderr); }else fputs(buf, stderr); fflush(NULL); return; } Mã ngu n file liberr.c t o m t thư vi n tĩnh, bư c u tiên là d ch o n mã c a form i tư ng: $gcc –H –c liberr.c –o liberr.o ti p theo: $ar rcs liberr.a liberr.o /* * errtest.c */ #include <stdio.h> #include <stdlib.h> #include "liberr.h" #define ERR_QUIT_SKIP 1 #define LOG_QUIT_SKIP 1 int main(void) {
  • 158. 1 5 FILE *pf; fputs("Testing err_ret()...n", stdout); if((pf = fopen("foo", "r")) == NULL) err_ret("%s %s", "err_ret()", "failed to open foo"); fputs("Testing log_ret()...n", stdout); if((pf = fopen("foo", "r")) == NULL); log_ret("errtest.log", "%s %s", "log_ret()", "failed to open foo"); #ifndef ERR_QUIT_SKIP fputs("Testing err_quit()...n", stdout); if((pf = fopen("foo", "r")) == NULL) err_ret("%s %s", "err_quit()", "failed to open foo"); #endif /* ERR_QUIT_SKIP */ #ifndef LOG_QUIT_SKIP fputs("Testing log_quit()...n", stdout); if((pf = fopen("foo", "r")) == NULL) log_ret("errtest.log", "%s %s", "log_quit()", "failed to open foo"); #endif /* LOG_QUIT_SKIP */ return EXIT_SUCCESS; } Mã ngu n file testerr.c Biên d ch chương trình ki m tra, ta s d ng dòng l nh: $ gcc -g errtest.c -o errtest -L. -lerr Tham s -L. ch ra ư ng d n t i thư m c ch a file thư vi n là thư m c hi n th i, tham s –lerr ch rõ thư vi n thích h p mà chúng ta mu n liên k t. Sau khi d ch ta có th ki m tra b ng cách ch y chương trình. 7.3.4.2 Thư vi n dùng chung Thư vi n dùng chung có nhi u thu n l i hơn thư vi n tĩnh.Th nh t, thư vi n dùng chung t n ít tài nguyên h th ng, chúng s d ng ít không gian ĩa vì mã ngu n thư vi n dùng chung không biên d ch sang mã nh phân nhưng ư c liên k t và ư c dùng t ng m i l n dùng. Chúng s d ng ít b nh h th ng vì nhân chia s b nh cho thư vi n dùng chung này và t t c các chương trình u s d ng chung mi n b nh này. Th 2, thư vi n dùng chung nhanh hơn vi chúng ch c n n p vào m t b nh . Lí do cu i cùng là mã ngu n trong thư vi n dùng chung d b o trì. Khi các l i ư c s a hay thêm vào các c tính, ngư i dùng c n s d ng thư vi n nâng c p. i v i thư vi n tĩnh, m i chương trình khi s d ng thư vi n ph i biên d ch l i. Trình liên k t (linker)/module t i (loader) ld.so liên k t tên bi u tư ng t i thư vi n dùng chung m i l n ch y. Thư vi n dùng chung có tên c bi t (g i là soname), bao g m tên thư vi n và phiên b n chính. Ví d : tên y c a thư vi n C trong h th ng là libc.so.5.4.46, tên thư vi n là libc.so, tên phiên b n chính là 5, tên phiên b n ph là 4, 46 là m c vá (patch
  • 159. 1 5 level). Như v y, soname thư vi n C là libc.5. Thư vi n libc6 có soname là libc.so.6, s thay i phiên b n chính là s thay i áng k thư vi n. Phiên b n ph và patch level thay i khi l i ư c s a nhưng soname không thay i và b n m i có s thay khác bi t áng k so v i b n cũ. Các chương trình ng d ng liên k t d a vào soname. Ti n ích idconfig t o m t bi u tư ng liên k t t thư vi n chu n libc.so.5.4.46 t i soname libc.5 và lưu tr thông tin này trong /etc/ld.so.cache. Trong lúc ch y, ld.so c ph n lưu tr , tìm soname thích h p và n p thư vi n hi n tai vào b nh , k t n i hàm ng d ng g i t i i tư ng thích h p trong thư vi n. Các phiên b n thư vi n khác nhau n u: Các giao di n hàm u ra thay i. Các giao di n hàm m i ư c thêm. Ch c năng ho t ng thay i so v i c t ban u C u trúc d li u u ra thay i C u trúc d li u u ra ư c thêm duy trì tính tương thích c a thư vi n, c n m b o các yêu c u: Không thêm vào nh ng tên hàm ã có ho c thay i ho t ng c a nó Ch thêm vào cu i c u trúc d li u ã có ho c làm cho chúng có tính tuỳ ch n hay ư c kh i t o trong thư vi n Không m r ng c u trúc d li u s d ng trong các m ng Xây d ng thư vi n dùng chung hơi khác so v i thư vi n tĩnh, quá trình xây d ng thư vi n dùng chung ư c minh ho dư i ây: Khi biên d ch file i tư ng, s d ng tùy ch n -fpic c a gcc nó s t o ra mã c l p v trí (position independence code) t ó có th liên k t hay s d ng b t c ch nào Không lo i b file i tư ng và không s d ng các tùy ch n –fomit –frame -pointer c a gcc, vì n u không s nh hư ng n quá trình g r i (debug) S d ng tuỳ ch n -shared and –soname c a gcc S d ng tuỳ ch n –Wl c a gcc truy n tham s t i trình liên k t ld. Th c hi n quá trình liên k t d a vào thư vi n C, s d ng tuỳ ch n –l c a gcc Tr l i thư vi n x li l i , t o thư vi n dùng chung trư c h t xây d ng file i tư ng: $ gcc -fPiC -g -c liberr.c -o liberr.o Ti p theo liên k t thư vi n: $ gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc Vì không th cài t thư vi n này như thư vi n h th ng trong /usr hay /usr/lib chúng ta c n t o 2 kiên k t, m t cho soname: Và cho trình liên k t khi k t n i d a vào liberr, s d ng –lerr: $ ln -s liberr.so.1.0.0 liberr.so Bây gi , d d ng thư vi n dùng chung m i chúng ta quay l i chương trình ki m tra, chúng ta c n hư ng trình liên k t t i thư vi n nào s d ng và tìm nó âu, vì v y chúng ta s s d ng tuỳ ch n –l và –L: $ gcc -g errtest.c -o errtest -L. -lerr Cu i cùng ch y chưong trình, chúng ta c n ch cho ld.so nơi tìm thư vi n dùng chung : $ LD_LIBRARY_PATH=$(pwd) ./errtest 7.3.4.3 S d ng i tư ng dùng chung theo cách ng
  • 160. 1 6 M t cách s d ng thư vi n dùng chung là n p chúng t ng m i khi ch y không gi ng như nhũng thư vi n liên k t và n p m t cách t ng. Ta có th s d ng giao di n dl (dynamic loading) vì nó t o s linh ho t cho l p trình viên hay ngư i dùng. Gi s ta ang t o m t ng d ng s lý ho . Trong ng d ng, ta bi u di n d li u m t d ng không theo chu n nhưng l i thu n ti n cho ta x lý, và ta c n có nhu c u chuy n d li u ó ra các nh d ng thông d ng ã có (s lư ng các nh d ng này có th có hàng trăm lo i) ho c c d li u t các nh d ng m i này vào x lý. gi i quy t v n này ta có th s d ng gi i pháp là thư vi n. Nhưng khi có thêm m t nh d ng m i thì ta l i ph i biên d ch l i chương trình. ây l i là m t i u không thích h p l m. Kh năng s d ng thư vi n ng s giúp ta gi i quy t v n v a g p ph i. Giao di n dl cho phép t o ra giao di n (các hàm) c và vi t chung không ph thu c vào nh d ng c a file nh. thêm ho c s a các nh d ng c a file nh ta ch c n vi t thêm m t module m nh n ch c năng ó và báo cho chương trình ng d ng bi t là có thêm m t module m i b ng cách ch c n thay i m t file c u hình trong m t thư m c xác nh nào ó. Giao di n dl (cũng ơn thu n ư c xây d ng như m t thư vi n - thư vi n libdl) ch a các hàm t i (load), tìm ki m và gi i phóng (unload) các i tư ng chia s . s d ng các hàm này ta thêm file <dlfcn.h> vào ph n #include vào trong mã ngu n, và khi d ch thì liên k t nó v i thư vi n libdl b ng cách s d ng tham s và tên –ldl trong dòng l nh d ch. dl cung c p 4 hàm x lí các công vi c c n thi t t i, s d ng và gi i phóng i tư ng dùng chung. Truy c p i tư ng chia s truy c p m t i tư ng chia s , dùng hàm dlopen() có c t như sau: void *dlopen(const char *filename, int flag); dlopen() truy c p i tư ng chia s b ng filename và b ng c . Filename có th là ư ng d n y , tên file rút g n hay NULL. N u là NULL dlopen() m chương trình ang ch y, ó là chương trình c a b n, n u filename là ư ng d n dlopen() m file ó, n u là tên rút g n dlopen() s tìm trong v trí sau tìm file: $LD_ELF_LiBRARY_PATH, $LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, và /lib. C có th là RTLD_LAZY, có nghĩa là các kí hi u (symbol) hay tên hàm t i tư ng truy c p s ư c tìm m i khi chúng ư c g i, ho c c có th là RTLD_NOW, có nghĩa t t c kí hi u t i tư ng truy c p s ư c tìm trư c khi hàm dlopen() tr v . dlopen() tr i u khi n t i i tư ng truy nhâp n u nó tìm th y t filename hay tr v giá tr NULL n u không tìm th y. S d ng i tư ng chia s Trư c khi có th s d ng mã ngu n trong thư vi n ta ph i bi t ang tìm cái gì và tìm âu. Hàm dlsym() s giúp i u ó: void *dlsym(void *handle, char *symbol); dlsym() tìm kí hi u hay tên hàm trong truy c p và tr l i con tr ki u void t i i tư ng hay NULL n u không thành công. Ki m tra l i Hàm dlerror() s giúp ta ki m tra l i khi s d ng i tư ng truy c p ng: const char *dlerror(void); N u m t trong các hàm l i, dlerror() tr v thông báo chi ti t l i và gán giá tr NULL cho ph n b l i. Gi i phóng i tư ng chia s
  • 161. 1 6 b o v tài nguyên h th ng c bi t b nh , khi ta s d ng xong module trong m t i tư ng chia s , thì gi i phóng chúng. Hàm dlclose() s óng i tư ng chia s : int dlclose(void *handle); S d ng giao di n dl minh ho cách s d ng dl,chúng ta quay l i thư vi n x lí l i, s d ng m t chương trình khác như sau: /* * dltest.c * Dynamically load liberr.so and call err_ret() */ #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main(void) { void *handle; void (*errfcn)(); const char *errmsg; FILE *pf; handle = dlopen("liberr.so", RTLD_NOW); if(handle == NULL) { fprintf(stderr, "Failed to load liberr.so: %sn", dlerror()); exit(EXIT_FAILURE); } dlerror(); errfcn = dlsym(handle, "err_ret"); if((errmsg = dlerror()) != NULL) { fprintf(stderr, "Didn't find err_ret(): %sn", errmsg); exit(EXIT_FAILURE); } if((pf = fopen("foobar", "r")) == NULL) errfcn("couldn't open foobar"); dlclose(handle); return EXIT_SUCCESS; } Mã ngu n chương trình dltest.c Biên d ch ví d trên b ng l nh: $ gcc -g -Wall dltest.c -o dltest -ldl Như tacó th th y, chúng ta không liên k t d a vào liberr hay liberr.h trong mã ngu n. T t c truy c p t i liberr.so thông qua dl. Ch y chương trình b ng cách sau: $ LD_LIBRARY_PATH=$(pwd) ./dltest N u thành công thì ta nh n ư c k t qu như sau: couldn’t open foobar: No such file or directory
  • 162. 1 6 7.3.5 Các công c cho thư vi n Công c nm L nh nm li t kê toàn b các tên hàm (symbol) ư c mã hoá trong file i tư ng (object) và nh phân (binary). L nh nm s d ng cú pháp sau: nm [options] file Lênh nm li t kê nh ng tên hàm ch a trong file. B ng dư i li t kê các tuỳ ch n c a l nh nm: Tuỳ ch n Miêu t -C| -demangle Chuy n tên ký t vào tên m c ngư i dùng cho d c. -s|-print-armap Khi s d ng các file lưu tr (ph n m r ng là “.a”), in ra các ch s c a module ch a hàm ó. -u| -undefined-only Ch ưa ra các hàm không ư c nh nghĩa trong file này, t c là các hàm ư c nh nghĩa m t file khác. - l | -line-numbers S d ng thông tin g r i in ra s dòng nơi hàm ư c nh nghĩa. Các tuỳ ch n c a l nh nm Công c ar L nh ar s d ng cú pháp sau: ar {dmpqrtx} [thành viên] file L nh ar t o, ch nh s a và trích các file lưu tr . Nó thư ng ư c s d ng t o các thư vi n tĩnh- nh ng file mà ch a m t ho c nhi u file i tư ng ch a các chương trình con thư ng ư c s d ng (subrountine) nh d ng ti n biên d ch (precompiled format), l nh ar cũng t o và duy trì m t b ng mà tham chi u qua tên ký t t i các thành viên mà trong ó chúng ư c nh nghĩa. Chi ti t c a l nh này ã ư c trình bày trong chương trư c. Công c idd L nh nm li t kê các hàm ư c nh nghĩa trong m t file i tư ng, nhưng tr khi ta bi t nh ng gì thư vi n nh nghĩa nh ng hàm nào. L nh idd h u ích hơn nhi u. idd li t kê các thư vi n ư c chia s mà m t chương trình yêu c u mà ch y. Cú pháp c a nó là: idd [options] file L nh idd in ra tên c a thư vi n chia s mà file này s d ng. Ví d : chương trình thư “client mutt” c n 5 thư vi n chia s , như ư c minh ho sau ây: $ idd /usr/bin/mutt libnsl.so.1 => /lib/libns1.so.1 (0x40019000) libslang.so.1 => /usr/lib/libslang.so.1 (0x4002e000) libm.so.6 => /lib/libm/so.6 (0x40072000) libc.so.6 => /lib/libc.so.6 (0x4008f000) /lib/id-linux.so.2 => /lib/id-Linux.so.2 (0x4000000) Tìm hi u l nh idconfig L nh idconfig s d ng cú pháp sau: ldconfig [tuỳ ch n] [libs]
  • 163. 1 6 L nh ldconfig xác nh rõ các liên k t ng (liên k t khi ch y) ư c yêu c u b i thư vi n ư c chia s n m trong các thư m c /usr/lib và /lib. Dư i ây là các tùy ch n c a l nh này: Các tuỳ ch n Các miêu t -p ơn thu n ch in ra n i dung c a /etc/ld.so.cache, m t danh sách hi n th i các thư vi n ư c chia s mà ld.so bi t. -v C p nh t /etc/ld.so.cache , li t kê s phiên b n c a m i thư vi n, quét các thư m c và b t kỳ liên k t mà ư c t o ra ho c c p nh t. Các tuỳ ch n c a hàm idconfig Bi n môi trư ng và file c u hình. Chương trình t i (loader) và trình liên k t (linker) ld.so s d ng 2 bi n môi trư ng. Bi n th nh t là $LD_LIBRARY, ch a danh sách các thư m c ch a các file thư vi n ư c phân cách b i d u hai ch m tìm ra các thư vi n c n thi t khi ch y. Nó gi ng như bi n môi trư ng $PATH. Bi n môi trư ng th hai là $LD_PRELOAD, m t danh sách các thư vi n ư c ngư i dùng thêm vào ư c phân cách nhau b i kho ng tr ng (space). ld.so cũng cho phép s d ng 2 file c u hình mà có cùng m c ích v i bi n môi trư ng ư c c p trên. File /etc/ld.so.conf ch a m t danh sách các thư m c mà chương trình t i và trình liên k t (loader/linker) nên tìm ki m các thư vi n chia s bên c nh /usr/lib và /lib. /etc/ld.so.preload ch a danh sách các file thư vi n ư c phân cách b ng m t kho ng tr ng các thư vi n này là thư vi n ngư i dùng t o ra.
  • 164. 1 6 TÀI LI U THAM KH O ……
  • 165. 1 6 CHÚ THÍCH M T S THU T NG V n ch n thu t ng ti ng Vi t cho các thu t ng g c ti ng Anh luôn là v n c n ư c th o lu n vi c ch n l a như v y là thích h p. Dù cho trong tài li u này, nhi u thu t ng ti ng Vi t ã ư c s d ng m t cách ph bi n nhưng tài li u cũng li t kê vào b ng chú thích dư i ây v i m c ích giúp b n c thu n ti n trong tra c u và liên h . Trong b ng chú thích, m i thu t ng ti ng Vi t dùng trong tài li u s ư c kèm theo thu t ng ti ng Anh g c và sau ó có th là m t l i chú thích ng n. B ng chú thích là m t c g ng nh nh m h tr s d ng tài li u này hi u qu hơn và ph m vi s d ng c a nó gi i h n trong tài li u. Ti ng Vi t Ti ng Anh Gi i thích ng n File File T p h p d li u có t ch c theo m t m c ích s d ng: o n văn b n, m t chương trình ngu n, m t t p h p d li u ... Còn ư c g i là t p hay g i theo cách gi nguyên g c ti ng Anh là File. Tên file Filename Tên g i c a file (file thư ng, thư m c, file c bi t ...) ư c dùng xác nh file. Thư m c Directory Nơi ch a m t danh sách các file trong h th ng File, ư c Linux coi như m t d ng file c bi t. H th ng file File system H th ng toàn b các file có trong h i u hành Linux (và UNIX nói chung). L nh Command Linux cho phép ngư i s d ng dùng l nh trình bày m t "thao tác" yêu c u h th ng th c hi n. Ti n ích (còn g i là l nh thư ng tr c) Utility L nh có s n trong Linux (trong shell ho c ư c t t i nh ng thư m c theo quy nh c a Linux). Dòng l nh Command line Dòng l nh bao g m m t ho c m t s l nh trong m t l n yêu c u c a ngư i dùng. K t thúc dòng l nh là d u xu ng dòng. ăng nh p Login Th t c b t u m t phiên làm vi c c a m t ngư i s d ng. Login là l nh cho phép ăng nh p. Th t c logout k t thúc phiên làm vi c. Ngư i dùng User Ngư i s d ng Linux cho công vi c c a mình. Siêu ngư i dùng (ngư i dùng t i cao/ngư i qu n tr ) Superuser Linux quy nh có m t siêu ngư i dùng th c hi n có quy n h n t i cao trong h th ng bao g m các l nh qu n tr h th ng. V i m t s l nh Linux (thêm, b t ngư i dùng ...) thì ch siêu ngư i dùng ư c phép s d ng. Con tr cursor i m ánh d u trên màn hình ánh d u v trí hi n th i hi n thông tin. Trong trình so n th o văn b n, nó là v trí so n th o hi n th i trong văn b n H i u hành Operating System (OS) B chương trình bao g m các file trên ĩa (băng) t có ch c năng qu n lý tài nguyên máy tính và óng vai trò là "máy tính o" i v i ngư i dùng.
  • 166. 1 6 H i u hành a chương trình Multiprogram- ming OS H i u hành ho t ng theo cách th c trong b nh ng th i có nhi u chương trình ư c "bình ng" trong phân ph i tài nguyên (CPU, b nh ). H i u hành a ngư i dùng Multi-users OS M i ngư i dùng s d ng m t tr m cu i ư c k t n i máy tính tr c ti p th c hi n công vi c trên máy tính (có a chương trình). Nhân Kernel B ph n c t lõi nh t c a Linux, thư ng tr c th c hi n các ch c năng cơ b n c a h i u hành (còn ư c g i là lõi) Quá trình Process M t l n th c hi n c a m t chương trình (Còn ư c g i là ti n trình). M t s h i u hành g i là bài toán (task). Chương trình gi i thích l nh Command Comment Program (CCP) M t chương trình thu c h i u hành có ch c năng ti p nh n, phân tích dòng l nh ngư i dùng l nh ư c th c hi n. Trong Linux là shell, trong MS- DOS là COMMAND.COM. ăng nh p Login Th t c mà m t ngư i dùng c n ph i th c hi n khi b t u phiên làm vi c v i Linux. Th t c này yêu c u ngư i dùng ưa vào tên kí hi u và m t kh u ã ư c ăng kí trong h th ng. ăng xu t Logout Th t c mà m t ngư i dùng c n ph i th c hi n khi k t thúc phiên làm vi c v i Linux. Trên máy tính cá nhân, sau khi ăng xu t s kéo theo m t ăng nh p m i. D u nh c shell Còn g i là d u nh c dòng l nh Kí hi u mô t nhóm wildcards Kí hi u ư c dùng xác nh m t nhóm file (ví d *, ?, [] và [] v i -). Còn ư c g i là kí hi u thay th . Cài t Linux Installation Linux Quá trình t o ra h i u hành Linux lên máy tính s d ng
  • 167. 1 6 PH L C A. QUÁ TRÌNH CÀI T REDHAT-LINUX Linux s d ng ph n c ng c a máy PC hi u qu hơn MS-DOS, Window hay WinNT, và do ó kh năng ch u các l i do c u hình sai ph n c ng s kém hơn. Chúng ta c n làm m t s vi c trư c khi b t u cài t gi m thi u các kh năng không th cài t ti p khi g p ph i v n này. Trư c tiên, hãy c g ng tìm càng nhi u càng t t các tài li u v ph n c ng máy PC mà mình nh cài, như mainboard, card ho , màn hình, modem... và chúng nơi có th tìm th y và tra c u d dàng. Ti p theo, tìm hi u thông tin v ph n c ng máy tính c a và t p h p chúng l i. Chúng ta có th làm i u này khi s d ng ch c năng in c u hình máy c a m t s ti n ích như MSD trong DOS, ho c System Information trong Windows. Nh ng thông tin chính xác v bàn phím, chu t, màn hình... s giúp r t nhi u trong quá trình c u hình X sau này. Sau ó, ki m tra ph n c ng máy tính c a tìm ra các v n n u có, b i chúng có th làm quá trình cài t Linux b treo. Sau ây là m t s v n thư ng g p. M t h th ng DOS hay Windows có th qu n lý ĩa IDE và CDROM c khi jumper master/slave không ư c t úng. Trong khi Linux không gi i quy t ư c v n này. Vì v y n u có nghi ng hãy xem l i các jumper này ã ư c t úng chưa. M t s thi t b ngo i vi c n có nh ng ti n ích t c u hình cho chúng khi máy kh i ng. Các thi t b như card m ng, CD-ROM, card âm thanh ho c băng t có th g p ph i v n này. N u trư ng h p này x y ra, có th s d ng l nh t c u hình l i t i d u nh c kh i ng. M t s h i u hành khác cho phép chu t d ng bus chia s m t IRQ v i các thi t b khác, trong khi Linux không h tr i u này. N u th làm i u ó, h th ng có th b treo. Nên liên h v i ngư i dùng Linux có kinh nghi m ư c gi i áp nh ng vư ng m c. C n ti n hành công vi c chu n b th i gian cho vi c cài t. Quá trình cài t có th kéo dài m t ti ng ho c hơn v i nh ng h th ng ch cài Linux, ho c lên t i ba ti ng v i h th ng c n ch y nhi u h i u hành khác nhau (thư ng v i nh ng h th ng này kh năng b treo máy ho c có l i khi cài t s cao hơn). Ph l c này gi i thi u cách cài t hai phiên b n RedHat là 6.2 và 7.1 nh m cung c p tính a d ng khi cài t, t o i u ki n cho ngư i s d ng. AA. Cài t phiên b n RedHat 6.2 AA.1. T o ĩa m m kh i ng Bư c này ch c n thi t khi không th kh i ng t CD-ROM. N u mua Red Hat Linux tr c ti p t Red Hat Linux s nh n kèm ĩa kh i ng. Còn n u mua b n copy t công ty th 3, ta ph i t t o ĩa kh i ng và cách t o là như sau: Trong Windows, ưa ĩa m m vào . B m phím ph i chu t vào desktop t o folder m i, t tên Bootdisk r i m folder này. ưa ĩa CD Red Hat vào CD. M My Computer, nh n vào CD, m folder có tên Dosutils, nh n vào file Rawrite, b m phím ph i chu t và kéo nó vào Bootdisk. Ch n Copy here t menu xu t hi n. óng c a s Dosutils. M folder Images trong CD-ROM. Chép file Boot.img vào folder Bootdisk, gi ng như ã làm v i Rawrite.
  • 168. 1 6 Ch n Start.Run gõ vào Command trong h p h i tho i, nh n OK. M t c a s xu t hi n v i d u nh c DOS “C:WindowsDesktop”. Gõ vào cd bootdisk, nh n Enter. Khi ã hoàn t t vi c t o ĩa m m kh i ng: gõ rawrite t i d u nh c DOS. Nh p boot.img là tên file mu n copy, nh n Enter. Gõ a: (tên ĩa m m), và nh n Enter khi ư c h i ích. AA.2. Phân vùng l i ĩa DOS/Windows hi n th i Trong h u h t các h th ng ư c s d ng, c ng thư ng ư c phân vùng cho MS- DOS, OS/2,... C n thay i kích thư c, s p x p l i các phân vùng này t o ch tr ng cho vi c cài t Linux. Cách t t nh t làm vi c này là dùng m t ph n m m chuyên d ng, ch ng h n như ph n m m PQMagic c a Power Quest. Dùng ph n m m này, có th di chuy n / thay i kích thư c / thêm / xoá / format các phân vùng trong c ng m t cách d dàng v i giao di n ho . Còn vi c dùng FDisk c a MS-DOS thì c c kỳ v t v , mu n di chuy n / thay i kích thư c c a m t phân vùng nào ó, u tiên ph i backup t t c các d li u trong phân vùng, xoá phân vùng ó (vi c này s làm m t các thông tin v d li u trong phân vùng), ti p theo là t o m t phân vùng m i v i kích thư c mong mu n, cu i cùng là restore l i toàn b d li u ã backup vào phân vùng m i t o này! T t nh t dùng m t ph n m m mi n phí c c m nh như PQMagic. AA.3. Các bư c cài t (b n RedHat 6.2 và kh i ng t CD-ROM) ưa ĩa CDROM Redhat 6.2 vào CD, sau ó trong BIOS SETUP ta t ch kh i ng t CD. Khi kh i ng l i máy, quá trình s ư c boot t CDROM. Sau ây là chi ti t quá trình m t ĩa kh i ng cài t ti n hành. L a ch n ch cài t H th ng ưa ra các ch cho chúng ta l a ch n : Gõ Enter ch n ch cài t h a. Gõ “text” + Enter ch n ch Text. Gõ “expert” + Enter ch n ch Expert. Ch n ch này có nghĩa ta t ch n c u hình ph n c ng còn hai ch trên s t ng detect. Gõ “linux ks” + Enter ch n ch cài t t m ng ho c t ĩa m m. L a ch n ngôn ng hi n th . H th ng ưa ra r t nhi u ngôn ng cho phép l a ch n, ví d như Czech, English, French, German.... Thư ng ch n English. L a ch n c u hình bàn phím Linux òi h i l a ch n c u hình bàn phím t các mô hình sau: Model : Brazilian ABNT 2 Dell Generic. Microsoft. .................
  • 169. 1 6 Ta s l a ch n bàn phím tương thích theo các d ng trên, n u không rõ bàn phím thu c lo i nào thì nên ch n ki u Generic. Layout: Ngôn ng s d ng gõ (kho ng 24 ngôn ng ) Variant: Có 2 ch là. Eliminate Dead Keys (khi chúng ta s d ng các kí t c bi t). None (ki u m c nh). Test: chúng ta s gõ các phím ki m tra th . Ch n c u hình chu t H th ng ưa ra 10 lo i chu t l a ch n lo i tương thích v i chu t c a mình, n u không bi t rõ chu t thu c lo i nào thì nên ch n ki u Generic. Và ph i ch n úng ki u chu t là PS/2 hay Serial n u không thì s không s d ng ư c chu t. H th ng ưa ra l i gi i thi u v b n Red Hat ang cài t. L a ch n ki u cài t. Install (cài m i) g m có các ch : GNome Workstation. KDE Workstation. Server Custom Upgrade (Nâng c p) • Tuỳ ch n cài t WorkStation N u l a ch n ki u cài m i là GNome Workstation ho c KDE Workstation thì h th ng s cài t X Window System và chương trình qu n lý Desktop theo d ng GNome ho c KDE. N u chưa th o l m v Linux thì hãy s d ng tuỳ ch n này, nó s b qua nhi u bư c. L a ch n Custom là ch phù h p v i ngư i ã quen v i Linux. C hai l a ch n WorkStation này s chu n b các vi c sau: N u ĩa c ng c a chưa h ư c phân vùng trư c ó, Linux s xoá h t t t c các phân vùng trên các ĩa c ng và cài t các phân vùng sau: + M t phân vùng swap kích thư c 64MB + M t phân vùng root ( ư c mount là / ) ch a ng m i file ư c cài t. Chú ý là chúng ta s ph i c n t i thi u 600MB c ng ti n hành cài t theo ki u WorkStattion. N u h th ng ã ư c cài s n Windows (Windows 3.1/95/98), ki u cài t WorkStation s t ng c u hình h th ng kh i ng ch song song s d ng LILO. • Tuỳ ch n cài t Server N u l a ch n ki u cài t m i là Server thì h th ng s cài t theo ki u máy ch Linux và cũng như ki u WorkStation, tuỳ ch n này s tránh ph i c u hình nhi u thành ph n ph n c ng. Và khi cài t theo ki u này, nên c n th n vì h th ng s xoá t t c các partition trên
  • 170. 1 7 t t c các ĩa. Vì v y, ch ch n ki u cài t Server n u ch c ch n trong c ng không có m t d li u gì c . Sau ây là các bư c mà ki u này ti n hành phân vùng ĩa: + T o m t phân vùng Swap kích thư c 64MB. + T o m t phân vùng kích thư c 256MB v i mount point là “/”. + T o m t phân vùng kích thư c t i thi u 512MB ư c mount là “/usr”. + T o m t phân vùng t i thi u 215MB ư c mount là “/home”. + T o m t phân vùng kích thư c 256MB ư c mount là “/var”. Như v y chúng ta ph i c n t i thi u 1.6BG c ng ti n hành cài t theo ki u Server. • Tuỳ ch n cài t Custom i v i ki u Custom h th ng s cho phép t ch n các thành ph n và c u hình ph n c ng cài t m t cách y nh t, tuy nhiên cũng r i r m và ph c t p nh t. T bư c 7 tr i, ch gi i thi u v tuỳ ch n cài t này. Sau ây s gi i thi u t ng quát m t s bư c mà quá trình này thi t t: T o các phân vùng: c n ph i ch rõ Redhat s ư c cài t vào phân vùng nào. Format các phân vùng: Nh ng phân vùng m i ư c thêm vào s ph i ư c format l i theo nh d ng Linux filesystem. Tuy nhiên cũng có th l a ch n phân vùng nào c n ph i format. L a ch n và cài t các gói ph n m m i kèm: Th c hi n sau khi ã phân vùng ĩa c ng. Thi t t c u hình LILO: có th l a ch n cài t LILO vào Master Boot Record ho c Sector u tiên c a phân vùng Root ho c không l a ch n cài LILO. Xác nh các Partition u tiên c n xác nh các i m kích ho t (mount point) cho m t ho c nhi u partition. Trong b ng partition có các thông tin sau: Mount Point: Xác nh partition nào s ư c kích ho t khi Linux ư c cài t và ch y. N u partition t n t i và có nhãn là not set thì ta xác nh mount point b ng cách kích chu t vào nút Edit ho c double - click trên partition. Và h th ng khuyên chúng ta nên t o các partition theo cách sau: M t swap partition (ít nh t 16MB) - dùng h tr b nh o. N u máy chúng ta có 16Mb Ram ho c ít hơn thì b t bu c chúng ta ph i t o swap partition. Th m chí n u có nhi u b nh hơn, chúng ta cũng nên t o swap partition. Kích thư c t i thi u c a swap partition = max |b nh Ram và 16Mb|. M t boot partition (t i a 16Mb) - ch a nhân c a H H cùng v i các file trong quá trình kh i ng. M t root partition (t 500Mb - 1Gb) là nơi ch a thư m c g c và t t c các file (tr các file trong boot partition). V i 500Mb cho phép cài theo ki u Workstation và v i 1Gb cho phép cài m i th .
  • 171. 1 7 Device: Hi n tên các device partition (Ví d : hda2 i di n cho partition th 2 trên c ng primary). Request: Cho bi t không gian mà partition hi n có. N u mu n thay i kích thư c thì chúng ta ph i xoá partition ó và t o l i b ng cách dùng nút “Add”. Actual: Cho bi t không gian mà partition ang s d ng. Type: Cho bi t ki u c a partition. Và chúng ta có th add, edit, và delete các partition b ng cách kích chu t vào các nút ó. Ch c năng c a t ng nút là: Add: Dùng t o m t partition m i, g m có các thông tin sau: Mount Point: g m có các ki u / : /boot : /usr : /home : /var : /opt : /tmp : /usr/local : Size (Megs): ch n kích thư c c a partition. Grow to fill disk: n u ch n thì partition này s s d ng toàn b vùng ĩa tr ng còn l i. Partition type: g m có các ki u Linux Swap: ch n ki u này n u chúng ta mu n t o partition swap. Linux Native : ch n ki u này n u chúng ta mu n t o partition root. Linux RAID : DOS 16-bit < 32 : DOS 16-bit > 32 : Edit: Dùng thay i mount point c a partition. Delete: Dùng xoá partition. Reset: Khôi ph c l i nh ng thay i. Make RAID Device: S d ng Make Raid device ch khi ã có kinh nghi m v RAID. Drive Summaries: hi n th thông tin v c u hình ĩa. Ch n Partition Format G m có các thông tin:
  • 172. 1 7 Partition mu n Format. L a ch n “Check for bad blocks while formating” Ch n “Check for bad blocks while formating” tìm ra nh ng bad bocks trên ĩa sau ó s ánh d u l i nh m không ghi d li u lên chúng n a. Ch n c u hình LILO (Linux Loader) ch n c u hình LILO, ph i không t d u ki m “Do not install LILO”. N u Linux Native có tên là /dev/hda5 thì màn hình s hi n ra cho phép cài t chương trình n p Linux vào Master Boot Record (MBR) ho c First Sector of boot partition (sector u tiên c a phân vùng kh i ng). Nói chung là nên ch n Master Boot Record có th kh i ng t nhi u . N u có các ĩa SCSI ho c ĩa c ng c a h tr LBA thì c n ph i ánh d u ki m vào m c “Use Linear Mode”. Kernel Parameters: Các tham s s dùng b t c khi nào nhân ư c kh i ng. B ng dư i s cho bi t thông tin v các phân vùng: tên phân vùng, lo i phân vùng, có ph i là phân vùng kh i ng không ?. c n ch n phân vùng kh i ng là phân vùng có tên Linux (thư ng là phân vùng mà Redhat s t m c nh và chúng ta không ph i thay i gì). N u ã có phân vùng tên là ‘dos’, chính là phân vùng trư c khi cài t thì sau này m i khi kh i ng máy tính, chúng ta có th ch n phân vùng này kh i ng m t cách bình thư ng b ng cách gõ tên phân vùng ó t i d u nh c “LILO Boot” trong quá trình kh i ng. Cho phép thay i tên c a phân vùng tương ng trong ph n “Boot Label”. Tuỳ ch n “Create boot disk”: ch c n ch n m c này n u không cài LILO ho c cài LILO nhưng không cài vào MBR. Chú ý là n u không cài LILO thì b t bu c ph i ch n m c này kh i ng t ĩa m m. Ch n múi gi N u cài trong ch h a, màn hình m c nh s hi n ra m t b n th gi i. Có th thay i b n theo các ki u sau: World (b n th gi i) North American (B c M ) South American (Nam M ) Pacific Rim (Châu úc) Europe (Châu Âu) Africa (Châu Phi) Asia (Châu á) i v i Vi t Nam ta thì ch n Asia/Saigon (trong ĩa CD cài t LinuxVN thì m c ch n là Asia/Hanoi). Có th ch n múi gi theo ki u UTC Offset (Universal Time Coordinated), t c là ki u GMT +/- l ch. N u h th ng gi s t i s d ng UTC thì ch n “System clock uses UTC”.
  • 173. 1 7 Thi t t c u hình Account (ngư i s d ng) Như ã bi t Linux k th a t Unix, do ó nó cũng h tr ch a ngư i dùng như Unix. B n cài t Redhat cho phép t luôn c u hình ngư i dùng ngay trong quá trình cài t. u tiên chúng ta c n t m t kh u cho ngư i dùng Root trong ph n “Root Password” và xác nh n l i m t kh u này trong m c “Confirm”. Chú ý là m c nh t t c các m t kh u u ph i t i thi u 6 ký t . Sau ó ta có th thêm ngay m t s ngư i dùng u tiên: Tên t trong “Account Name”, gõ password trong m c “Password” và xác nh n m t kh u trong m c Password (confirm) ngay bên c nh, tên y c a ngư i dùng trong m c “Full Name”. Sau ó gõ phím “Add” th thêm ngư i dùng m i vào danh sách các ngư i dùng. Phím “Edit” cho phép hi n th ngư i dùng hi n hành trong b ng danh sách ngư i dùng, phím “Delete” xoá ngư i dùng hi n th i. Thi t t c u hình quy n h n (Authentication Configuration) Th c hi n các m c sau: Enable MD5 Password: cách mã hoá này cho phép m t kh u dài t i 256 ký t . Shadow Password: ây là cách b o m t t i a cho m t kh u, file ch a m t kh u /etc/passwd s ư c thay b ng etc/shadow và file này ch ư c phép hi n th b i ngư i dùng Root. Ch n c 2 m c này s tăng tính b o m t c a h th ng. Enable NIS: ch n m c này n u máy tính k t n i vào m ng NIS (Network Information System) cho phép m t nhóm máy tính trong vùng Network Information Service v i cùng m t password. NIS domain: tên c a domain ho c nhóm máy tính ch a h th ng. NIS server: cho phép máy tính dùng m t NIS server rêng, hơn là m t thông i p r ng rãi trong m ng LAN. L a ch n các gói ph n m m cài t (Pakage Selection) Có r t nhi u m c ch n s nói chi ti t ph n sau như: Printer Support, h th ng X Window, GNome, KDE, DOS / Window Connectivity,.... L a ch n “Everything” s cài y t t c m i th , do ó c n ph i l a ch n các gói ph n m m phù h p n u Linux Native / không . Các packages có th ư c ch n cài t bao g m: Printer Support: N u ư c cài Linux s c g ng nh n máy in ho c cho phép ngư i dùng thi t l p các thông s v máy in c a h th ng. X Window System: Môi trư ng h a nguyên thu trong Linux, ư c g i t t là X. X không ph i là m t giao di n h a ngư i dùng th c s mà ch là m t h c a s cùng v i các công c m t giao di n h a ngư i dùng có th ư c xây d ng t ó. GNOME: Là m t giao di n h a ngư i dùng p hơn, ti n l i và thân thi n hơn X, GNOME cũng cung c p m t giao di n l p trình m c cao hơn t o ra các ng d ng v i giao di n ki u GNOME.
  • 174. 1 7 KDE: KDE là m t giao di n h a ngư i dùng ư c phát tri n d a trên thư vi n giao di n h a C++ Qt. Thư vi n giao di n này h tr UNIX, Windows và c Mac. Do ư c phát tri n trư c GNOME nên KDE có nhi u i m t t hơn. Mail/ WWW/ News tools: B công c dùng g i, nh n thư tín i n t , duy t Web và c các b n tin. Dos/ Windows Connectivity: B gi l p DOS và Windows cho phép ngư i dùng ch y các ng d ng DOS và Windows ngay trong Linux. Graphic Manupulation: Các ti n ích h a như Gview, Imgedit... cho phép trình di n và x lý các file hình nh. Games: M t s chương trình trò chơi gi i trí trong ch text ho c X Window. Multimedia Support: Các chương trình h tr a phương ti n, như nghe midi, wave, mp3... i u khi n joystick, thu âm ... Dialup WorkStation: Cho phép ngư i dùng s d ng modem và quay s s d ng các d ch v qua ư ng i n tho i như g i nh n mail, web... News Server: Cung c p d ch v máy ch news, cho phép máy tính tr thành m t server b n tin. NFS Server: Máy ch h th ng file m ng NFS (Network File System). SMB Server: Máy ch h th ng file m ng Samba. IPX/ Netware Connectivity: Giúp h th ng ch y Linux giao ti p v i các máy tính khác qua m ng Netware s d ng giao th c IPX. Anonymous FTP Server: Cài t package này giúp máy tính tr thành m t máy ch FTP (File Transfer Protocol), có th cung c p d ch v truy n file cho các máy khác trong m ng. Web Server: Cài t package này giúp máy tính tr thành m t máy ch Web, có th cung c p d ch v web cho các máy khác trong m ng. DNS Name Server: Cài t package này giúp máy tính tr thành m t máy ch DNS, có th cung c p d ch v t tên vùng cho các máy khác trong m ng. Postgres (SQL) Server: Cài t package này giúp máy tính tr thành m t máy ch SQL, có th cung c p d ch v truy v n d li u cho các máy khác trong m ng. Network Management Workstation: Giúp máy tính tr m làm vi c i u hành tr thành m t máy ch SQL, có th cung c p d ch v truy v n d li u cho các máy khác trong m ng. TeX Document Formatting: H so n th o và nh d ng văn b n dư i d ng Tex. Emacs: H so n th o văn b n ơn gi n. Development: Các b biên d ch, g r i, công c phát tri n ph n m m ... dư i các ngôn ng như Perl, C, C++. Mã ngu n c a các chương trình trong Linux. Kernel Development: Mã ngu n nhân Linux và b công c phát tri n dành cho phát tri n nhân Linux.
  • 175. 1 7 Extra Documentation: M i tài li u v Linux có trong ĩa CD, dư i nh ng ngôn ng như Anh, Pháp, Italia, Tây Ban Nha... Utilities: Các ti n ích cho Linux. Thi t t c u hình X (X Configuration) Ph n này s t c u hình card màn hình th hi n khi chúng ta s d ng các h th ng X Window. Ví d sau ây là m t s thông s hi n th khi chúng ta cài t: Video Card: ATI Mach64 Video Ram: 4096KB X server: Mach64 Monitor: 14” COLOR quét ngang: 30 - 54 Khz quét d c: 50 - 120 Hz ây là ph n khá quan tr ng, n u card màn hình c a không ph i là d ng chu n thì s ph i cài b ng tay, m t công vi c khá m t m i. Test this Configuration: n vào ây ki m tra tính năng ho có ho t ng t t không, n u màn hình c a qua kh i cu c ki m tra này thì có th coi là ã thành công t i 90% quá trình cài t Redhat. Customize X Configuration: N u ch n m c này thì ghi gõ Next, Redhat s cho m t b ng cho thi t l p b ng tay các ch h a 8 bits, 16 bits, 32 bits; các ch phân gi i 640x480, 800x600, 1024x786, ... Chú ý là khi ch n phân gi i nào thì luôn luôn gõ phím “Test this Configuration” m b o màn hình c a luôn hi n th úng. B t u quá trình copy t ĩa CD vào c ng Bư c cu i cùng này s th c hi n các bư c format Linux Native / (n u ã ch n ph n trư c), format Linux Swap, và sau ó là gi i nén t t c các gói ph n m m mà ã l a ch n trong bư c th 13 vào c ng. Quá trình này m t kho ng 10 phút n 20 phút tuỳ theo s lư ng các gói ch n. K t thúc quá trình này, gõ “Exit”, kh i ng l i máy, nh tháo ĩa CD Redhat ra kh i b t u kh i ng t c ng. AA.4. Các h n ch v ph n c ng i v i Linux Các b vi x lý mà Linux h tr Linux ch y u ch y trên các máy PC th h 386, 486, 586 s d ng các ph n c ng h vi x lý 80386. Vi c cài t trên các ph n c ng khác thì v n ang trong giai o n thi t k . Có th ch y th Linux b ng m t máy v i ph n c ng t i thi u là: b vi x lý Intel 386, 486, 586, 4MB RAM và m t m m. Dĩ nhiên là càng nhi u RAM thì càng t t. Linux h tr VESA Local Bus và PCI.
  • 176. 1 7 Linux cũng h tr ph n l n cho các c ng chu n ESDI và MCA (bus c quy n c a IBM). Linux cũng có th ch y trên các laptop h 386. Có m t cách cài t Linux trên 8086 ư c bi t n dư i tên g i ELKS (Embeddable Linux Kernel Subset). ây là m t nhân Linux 16 bit ư c ch y u s d ng trong các h th ng nhúng. Th c ra phiên b n Linux hi n nay không th ch y ư c y trên 8086 hay 286 b i vì nh ng b vi x lý này không h tr cho vi c chuy n i tác v cũng như qu n lý b nh . Linux h tr a quá trình cho các ki n trúc Intel MP. Dư i ây là danh sách các b VXL mà Linux h tr : Dòng 68000 c a Amigas và Ataris hi n ang ư c tri n khai nghiên c u. Các phiên b n GNU/Linux cũng ư c th cài t cho các n n Alpha, Sparc, PowerPC, ARM. M t d án v Linux trên PPC cũng ã ư c ti n hành. Apple ã h tr MkLinux trên các Power Macs d a trên OSF c a Mach vi nhân. Linux cho máy 64 bit DEC Alpha/AXP. ang nghiên c u v Linux cho MIPS, b t u i v i R4 trên các máy Deskstation Type. Hi n có 2 b n Linux cho dòng máy dùng h vi x lý ARM. M t là c a vi x lý ARM3 trên các máy Acorn A5000 và nó còn bao g m c các thi t b I/O cho 82710. Còn l i là cho h vi x lý ARM610 c a máy Acorn RISC PC. Linux cho SPARC ang ư c ti n hành. Có b n Hardhat cho các máy SGI/Indy. Các yêu c u v không gian c ng i vi c cài t t i thi u là 10 MB, ch y u là th ch không có nhi u các tính năng khác. Ta có th cài t thêm X v i kho ng 80 MB. N u cài t c b GNU/Linux s c n kho ng 500MB-1GB bao g m c mã ngu n và nhi u th khác n a. Các yêu c u v b nh T i thi u là 4MB. Ta có th s d ng swapping ch y thêm các cài t khác. Linux nói chung là ch y tương i “tho i mái” v i 4MB Ram nhưng các ng d ng X Windows s ch y ch m b i vì chúng c n ph i th c vi c swap vào ra trên ĩa. M t vài ng d ng hi n t i l i ch ch y bình thư ng v i 128MB b nh v t lý ch ng h n như Netscape. S tương thích v i các h i u hành khác: DOS, OS/2, 386BSD, Win95 Linux s d ng s p x p phân d ng gi ng như MS-DOS do ó nó có th chia s ĩa v i các h i u hành khác. Tuy v y, i u này cũng có nghĩa là các h i u hành khác cũng có th không h n là hoàn toàn tương thích. Các trình Fdisk và Format c a DOS th nh tho ng l i có th vi t è lên d li u trong phân vùng c a Linux b i vì chúng có th s d ng các thông tin phân vùng sai l nh t boot sector c a phân vùng ch không ph i là t b ng phân vùng. tránh hi n tư ng này, m t ý tư ng là ưa v 0 a ch b t u c a m t phân vùng
  • 177. 1 7 v a m i t o l p trong Linux trư c khi s d ng các l nh format c a MS-DOS. S d ng l nh sau: $ dd if=/dev/zero of=/dev/hdXY bs=512 count=1 V i hdXY là phân vùng liên quan, ch ng h n /dev/hda1 là phân vùng u tiên trên ĩa IDE u tiên. Linux có th c và ghi các file trên các phân vùng FAT c a DOS và OS/2 và các ĩa m m b ng cách s d ng h th ng file DOS ư c tích h p vào nhân ho c các công c mtool. Nhân cũng cung c p h tr cho h th ng file VFAT c a Windows 9x và Windows NT. Hi n t i các ĩa phân vùng theo NTFS cũng ang ư c nghiên c u h tr cùng v i vi c h tr nén ĩa như là m t tính năng chu n. Linux cũng có th truy c p ư c t i h th ng file HPFS c a OS/2 nhưng ch ch read-only. Ngư i ta có th th c hi n i u này như m t l a ch n khi biên d ch nhân. Linux cũng h tr cho vi c thao tác trên các nh d ng AFFS (Amiga Fast File System) t b n 1.3 tr v sau b ng cách như m t l a ch n lúc biên d ch hay như m t mô un riêng. Tuy v y, i u này cũng ch d ng m c ch c. Các truy c p ĩa m m thì chưa có h tr b i vì s khác bi t gi a các i u khi n ĩa c a PC và Amiga. i v i các máy ch y các h i u hành c a Unix như BSD, System V... thì các nhân hi n t i cũng m i ch có th c h th ng file UFS trên System V, Xenix, BSD, m t s s n ph m th a k khác như SunOS, FreeBSD, NetBSD, NeXTStep. H tr UFS cũng ư c coi như m t l a ch n lúc biên d ch nhân hay như m t mô un. Linux cho phép c/vi t trên các ĩa SMB c a các nhóm Windows và WinNT. Có m t chương trình tên là Samba cho phép truy c p và h th ng file m ng WfW (mi n là dùng giao th c TCP/IP) . i v i các máy Macintosh thì có m t t p h p các chương trình c p ngư i dùng có th c, ghi trên HFS (Macintosh Hierarchical File System). Câu h i t ra là có th ch y m t chương trình Windows trong Linux hay không ? Chương trình tên WINE ang ư c phát tri n mô ph ng môi trư ng Windows trong Linux. Hi n t i khi mu n dùng hai h i u hành cùng lúc v i Linux thì ta ã có chương trình LILO boot. LILO boot b t bu c ta ph i l a ch n h i u hành vào lúc kh i ng. Ngoài ra, còn có m t chương trình tên LOADLIN là m t chương trình DOS cho phép n p Linux (cũng như b t kỳ h i u hành khác) khi n cho Linux cùng t n t i v i DOS. LOADLIN c bi t h u d ng khi ta mu n cài Linux trên các ĩa th 3, 4 c a h th ng (ho c khi ta thêm m t SCSI vào m t h th ng có ch a IDE). Trong trư ng h p này thì LILO boot s không có kh năng tìm ki m và n p nhân. Do ó ta s ph i t o m t thư m c ch ng h n C: LINUX, t LOADLIN vào trong ó cùng v i m t b n copy c a nhân và r i s d ng nó. Chú ý: C n t o ít nh t m t phân vùng Linux dư i gi i h n 1024 cylinder logic.
  • 178. 1 7 PH L C B. TRÌNH SO N TH O VIM UNIX có hai b so n th o là ed và vi trong ó vi ư c ưa chu ng hơn do vi ư c phát tri n t b so n th o dòng l nh ed. Trong ch văn b n, Linux cho phép ngư i dùng s d ng trình so n th o vim mà vim chính là b so n th o tương thích v i vi. vim ư c ph n l n ngư i dùng s d ng so n th o các file văn b n ASCII, c bi t là t o ra các văn b n chương trình ngu n. vim có sáu ch cơ b n: Ch thư ng (Normal mode): trong ch thư ng ngư i dùng ư c phép nh p t t c các l nh so n th o thông thư ng. N u không thi t l p tuỳ ch n insertmode, ng m nh vào ngay ch thư ng khi kh i ng vim. Ch thư ng còn ư c g i là ch l nh. Ch o (Visual mode): ch này cũng g n gi ng như ch thư ng, ch khác ch là l nh di chuy n có tác d ng ánh d u văn b n. M t khác, các l nh khác (không là l nh di chuy n) th c s tác d ng trong ph m vi nh ng o n văn b n ã ư c ánh d u. Ch ch n l a (Select mode): ch này tương t như ch l a ch n c a MS-Windows. Ngư i dùng có th nh p m t ký t thu c lo i in n ư c xoá m t s l a ch n và ch y ch chèn. Ch chèn (Insert mode): Trong ch này, có th so n th o văn b n bình thư ng như các b so n th o quen bi t khác. Văn b n ó s ư c chèn vào trong b m. Ch dòng l nh (Command-line mode hay cmdline mode): Trong ch này, m t dòng l nh ư c nh p t i áy c a s so n th o. ó có th là các l nh Ex (:), các l nh tìm ki m (/ hay ?), và các l nh l c (!). Ch Ex (Ex mode): gi ng như ch dòng l nh, nhưng sau khi nh p m t l nh, v n trong ch Ex. Tuy nhiên còn r t nhi u h n ch i v i các l nh ch này. Ngoài ra còn có năm ch ph sau: Ch ch th c hi n (Operator-pending mode): ch này gi ng ch thư ng, nhưng sau khi g i m t l nh, vim s ch cho n khi o n văn b n ch u tác ng c a l nh ư c ưa ra. Ch thay th (Replace mode): ch thay th là m t trư ng h p c bi t c a ch chèn. Ngư i dùng có th nh p m i ký t như trong ch chèn, ch khác ch : m i ký t nh p s thay th cho m t ký t ã t n t i (có th g i là ch è - overwrite). Ch chèn-l nh (Insert Normal mode): gõ CTRL-O trong ch chèn chuy n sang ch chèn-l nh. Ch này cũng gi ng như ch thư ng, nhưng sau khi th c hi n m t l nh, vim s tr l i ch chèn. Ch chèn- o (Insert Visual mode): ch này ư c sinh ra khi trong ch chèn th c hi n m t s l a ch n o. vim s tr v ch chèn sau khi s l a ch n o ó k t thúc.
  • 179. 1 7 Ch chèn-l a ch n (Insert Select mode): ch này ư c kh i t o khi ch y ch l a ch n trong ch chèn. Khi ch l a ch n k t thúc, vim s tr v ch chèn. Vi c chuy n i gi a các ch trong vim ư c th c hi n nh các l nh (phím l nh ho c xâu l nh) c a vim và ư c t p h p trong b ng dư i ây. Trong b ng này, c t u tiên là ch ngu n, hàng u tiên là ch ích, ô giao gi a hàng và c t ch a các phím l nh chuy n ch (ký hi u *1, *2, *3, *4, *5, *6 là cách vi t t t danh sách l nh ư c gi i thích sau): Ch c n chuy n t i Ch hi n th i Thư ng o L a ch n Chèn Thay th Dòng l nh Ex Thư ng v, V, ^V *4 *1 R :, /, ?, ! Q o *2 ^G c, C -- : -- L a ch n *5 ^O, ^G *6 -- : -- Chèn <Esc> -- -- <Insert> -- -- Thay th <Esc> -- -- <Insert> -- -- Dòng l nh *3 -- -- :start -- -- Ex :vi -- -- -- -- -- Gi i thích các l nh vi t t t: *1 chuy n sang ch chèn t ch thư ng, s d ng m t trong các phím: i, I, a, A, o, O, c, C, s, S. *2 chuy n sang ch thư ng t ch o: ngoài <Esc>, v, V, CTRL-V có th gõ m t phím l nh thông thư ng (ngo i tr phím l nh di chuy n con tr ). *3 chuy n sang ch thư ng t ch dòng l nh: Th c hi n l nh <Enter> Gõ CTRL-C ho c <Esc> *4 chuy n sang ch l a ch n t ch thư ng: S d ng chu t l a ch n văn b n S d ng các phím không in ư c di chuy n d u nh c tr trong khi n gi phím SHIFT *5 chuy n sang ch thư ng t ch l a ch n: s d ng các phím không in ư c di chuy n d u nh c tr mà không nh n phím SHIFT. *6 chuy n sang ch chèn t ch l a ch n: nh p m t ký t có th in ư c. Dư i ây trình bày n i dung m t s các l nh cơ b n trong vim.
  • 180. 1 8 B.1 Kh i ng vim B.1.1 M chương trình so n th o vim Cách ơn gi n nh t b t u dùng vim so n th o m t file văn b n, là gõ m t trong ba l nh sau: vim [tuỳ-ch n] b t u so n th o hay hi u ch nh m t file vim [tuỳ-ch n] <danh sách các file> b t u so n th o m t ho c nhi u file vim [tuỳ ch n] - so n th o m t file t thi t b vào chu n N u tham s danh sách các file không có thì vim s thao tác v i m t file m i (vùng m so n th o r ng). Ngư c l i, file u tiên trong danh sách tr thành file hi n hành và ư c c vào trong vùng so n th o. Con tr s xu t hi n u dòng u tiên c a vùng này. hư ng n file k ti p, ta ánh l nh ":next" ch l nh. so n th o m t file có tên b t u b ng "-" thì ph i i n vào tên file d u "--". Ví d : # vim vdvim` ~ ~ ~ ~ ~ ~ ~ "vdvim"[New File] 0,0-1 All L nh trên m m t c a s cho ngư i dùng so n th o m t file m i có tên là "vdvim" M t s các tuỳ ch n cơ b n: B.1.2. Tính năng m nhi u c a s Trong vim, có th chia c a s so n th o hi n th i thành nhi u ph n hay m nhi u c a s cùng lúc so n th o các file khác nhau. Ví d l nh sau s m hai file vd1 và vd2 trên hai c a s so n th o: # vim -o2 vd1 vd2 ~ ~ ~ + [n] t d u nh c tr t i dòng th n (ng m nh là dòng cu i) + <l nh> th c hi n l nh sau khi n p file +/<m u> <file> t d u nh c tr t i dòng u tiên có ch a m u trong file -o[n] m n c a s (ng m nh có m t c a s cho m t file: n=1) --help hi n th danh sách các tham s và thoát
  • 181. 1 8 vd1 0,0-1 All ~ ~ ~ vd2 0,0-1 All "vd2" [New File] Sau ây là m t s các l nh hay dùng: CTRL-W chia c a s hi n t i thành hai ph n :split <file> chia c a s và so n th o <file> trên m t ph n chia c a c a s :sf <file> chia c a s , tìm file trên ư ng d n và so n th o nó CTRL-W CTRL-^ chia c a s và edit alternate file CTRL-W n t o m t c a s tr ng m i (gi ng :new) CTRL-W q d ng vi c so n th o và óng c a s (gi ng :q) CTRL-W o phóng to c a s hi n hành trên toàn màn hình CTRL-W j di chuy n tr so n th o xu ng c a s dư i CTRL-W k di chuy n tr so n th o lên c a s trên CTRL-W t di chuy n tr so n th o lên nh c a s CTRL-W b di chuy n tr so n th o xu ng áy c a s CTRL-W p di chuy n tr so n th o n c a s ư c kích ho t lúc trư c CTRL-W x di chuy n tr so n th o n c a s ti p theo CTRL-W = t o t t c các c a s có chi u cao như nhau CTRL-W - gi m chi u cao c a c a s hi n th i CTRL-W + tăng chi u cao c a c a s hi n th i CTRL-W thi t t chi u cao c a c a s hi n th i B.1.3. Ghi và thoát trong vim B ng dư i ây gi i thi u các l nh ghi n i dung file lên h th ng file và thoát kh i vim sau khi ã so n th o xong n i dung c a file (tham s n, m n u có mang ý nghĩa "t dòng n t i dòng m"). :[n,m] w [!] ghi file hi n th i. :[n,m] w <file> ghi n i dung ra <file>, tr khi file ó ã th c s t n t i :[n,m] w! <file> ghi n i dung ra <file>, n u file ã t n t i thì ghi è lên n i dung cũ :[n,m] w[!] >> [<file>] chèn thêm vào <file>, n u không có file, m c nh là file hi n th i :[n,m] w !<l nh> th c hi n <l nh> trên các dòng t dòng th n n dòng th m như thi t b vào chu n :[n,m] up [th i gian] [!] ghi file hi n th i n u nó ư c s a i :q [!] thoát kh i vim :wq [!] [<file>] ghi n i dung <file> (m c nh là file hi n th i) và thoát kh i vim :x [!] <file> gi ng :wq nhưng ch ghi khi th c s có s thay i trong n i dung file (gi ng ZZ)
  • 182. 1 8 :st [!] d ng vim và kh i t o m t shell (gi ng CTRL-Z) B.2. Di chuy n tr so n th o trong Vim B.2.1. Di chuy n trong văn b n Di chuy n tr so n th o trong văn b n là m t tính năng r t quan tr ng trong m t trình so n th o văn b n vim. Dư i ây là m t s các l nh th c hi n vi c trên (c t u tiên có n ch m t s là s lư ng): N l di chuy n tr so n th o v bên ph i n ký t N h di chuy n tr so n th o v bên trái n ký t n k di chuy n tr so n th o lên n dòng n j di chuy n tr so n th o xu ng n dòng 0 di chuy n v u dòng ^ di chuy n n t u tiên c a dòng hi n t i $ di chuy n n cu i dòng <Enter> di chuy n n u dòng ti p theo n - di chuy n n u dòng trư c dòng hi n t i n dòng n + di chuy n n u dòng sau dòng hi n t i n dòng n _ di chuy n n u dòng sau dòng hi n t i n-1 dòng G di chuy n n dòng cu i cùng trong file n G di chuy n n dòng th n trong file (gi ng :n) H di chuy n n dòng u tiên trên màn hình M di chuy n n dòng gi a màn hình n gg di chuy n n u dòng th n (m c nh là dòng u tiên) n gk di chuy n lên n dòng màn hình n gj di chuy n xu ng n dòng màn hình B.2.2. Di chuy n theo các i tư ng văn b n vim cung c p các l nh dư i ây cho phép di chuy n tr so n th o nhanh theo các i tư ng văn b n và i u ó t o nhi u thu n ti n khi biên t p, ch ng h n, trong các trư ng h p ngư i dùng c n xoá b hay thay i m t t , m t câu ... N W di chuy n n t ti p theo N E di chuy n n cu i c a t th n N B di chuy n ngư c l i n t N ge di chuy n ngư c l i n t và t d u nh c tr t i ch cái cu i t N > di chuy n n n câu ti p theo N < di chuy n ngư c l i n câu N | di chuy n n n o n ti p theo N | di chuy n ngư c l i n o n N ]] di chuy n n n ph n ti p theo và t d u nh c tr t i u ph n N [[ di chuy n ngư c l i n ph n và t d u nh c tr t i u ph n n ][ di chuy n n n ph n ti p theo và t d u nh c tr t i cu i ph n n [] di chuy n ngư c l i n ph n và t d u nh c tr t i cu i ph n
  • 183. 1 8 B.2.3. Cu n màn hình Màn hình s t ng cu n khi di tr so n th o n áy ho c lên nh màn hình. Tuy nhiên các l nh sau ây giúp ngư i dùng cu n màn hình theo ý mu n: N <CTRL-f> cu n lên n màn hình (m c nh là 1 màn hình) N <CTRL-b> cu n xu ng n màn hình (m c nh là 1 màn hình) N <CTRL-d> cu n xu ng n dòng (m c nh là 1/2 màn hình) N <CTRL-u> cu n lên n dòng (m c nh là 1/2 màn hình) N <CTRL-e> cu n xu ng n dòng (m c nh là 1 dòng) N <CTRL-y> cu n lên n dòng (m c nh là 1 dòng) z<Enter> v l i c a s so n th o, dòng hi n t i s là dòng trên cùng c a c a s (gi ng zt) z. v l i c a s so n th o, dòng hi n t i s là dòng gi a c a c a s (gi ng zz) z- v l i c a s so n th o, dòng hi n t i s là dòng áy c a c a s (gi ng zb) B.3. Các thao tác trong văn b n vim có r t nhi u các l nh h tr thao tác so n th o hay hi u ch nh m t file. Ph n dư i ây gi i thi u chi ti t v các cách thêm văn b n, hi u ch nh văn b n hay xoá m t văn b n. Khi so n th o văn b n, nhi u dòng có th ư c nh p b ng cách s d ng phím Enter. N u có m t l i c n ph i s a, có th s d ng các phím mũi tên di chuy n tr so n th o trong văn b n và s d ng các phím Backspace ho c Delete hi u ch nh. B.3.1. Các l nh chèn văn b n trong vim A chèn văn b n vào v trí d u nh c tr hi n th i (n l n) N A chèn văn b n vào cu i m t dòng (n l n) n i chèn văn b n vào bên trái d u nh c tr (n l n) n I chèn văn b n vào bên trái ký t u tiên khác tr ng trên dòng hi n t i (n l n) n gI chèn văn b n vào c t u tiên (n l n) n o chèn n dòng tr ng vào dư i dòng hi n t i n O chèn n dòng tr ng vào trên dòng hi n t i :r file chèn vào v trí con tr n i dung c a file :r! l nh chèn vào v trí con tr k t qu c a l nh l nh B.3.2. Các l nh xoá văn b n trong vim Bên c nh các l nh t o hay chèn văn b n, vim cũng có m t s l nh cho phép ngư i dùng có th xoá văn b n. Dư i ây là b ng li t kê m t s l nh cơ b n: N x xoá n ký t bên ph i d u nh c tr N X xoá n ký t bên trái d u nh c tr N dd xoá n dòng k t dòng hi n th i D ho c d$ xoá t v trí hi n th i n h t dòng
  • 184. 1 8 N dw xoá n t k t v trí hi n th i dG xoá t v trí hi n th i n cu i file d1G xoá ngư c t v trí hi n th i n u file dn$ xoá t dòng hi n th i n h t dòng th n N,m d xoá t dòng th n n dòng th m N cc xoá n dòng, k c dòng hi n th i r i kh i t o ch chèn (Insert) N C xoá n dòng k t v trí hi n th i r i kh i t o ch chèn (Insert) cn$ xoá t dòng hi n th i n h t dòng th n r i kh i t o ch chèn (Insert) N s xoá n ký t và ch y ch chèn (Insert) N S xoá n dòng và ch y ch chèn (Insert) B.3.3. Các l nh khôi ph c văn b n trong vim Các l nh sau cho phép khôi ph c l i văn b n sau m t thao tác hi u ch nh nào ó: N u khôi ph c l i văn b n như trư c khi th c hi n n l n thay i U khôi ph c l i hoàn toàn dòng văn b n hi n th i như trư c khi th c hi n b t kỳ s hi u ch nh nào trên dòng ó : e! hi u ch nh l i. Lưu tr tr ng thái c a l n ghi trư c N CTRL-R làm l i (redo) n l n khôi ph c (undo) trư c ó ! 6.3.4. Các l nh thay th văn b n trong vim vim còn có các l nh cho phép thay i văn b n mà không c n ph i xoá văn b n r i sau ó ánh m i. n r <ký t > thay th n ký t bên ph i d u tr b i <ký t > R ghi è văn b n b i m t văn b n m i (hay chuy n sang ch thay th - Replace trong Vim) n ~ chuy n n ch hoa thành ch thư ng và ngư c l i n gUU chuy n các ký t trên n dòng, k t dòng hi n t i, t ch thư ng thành ch hoa n guu chuy n các ký t trên n dòng, k t dòng hi n t i, t ch hoa thành ch thư ng n CTRL-A c ng thêm n ơn v vào s hi n có n CTRL-X b t i n ơn v t s hi n có n > [> ...] chuy n dòng th n sang bên ph i x kho ng tr ng (gi ng như phím TAB trong Win), n u không có n m c nh là dòng hi n t i, x là s d u ' > ' (ví d : >>> thì x b ng 3) n < [< ...] chuy n dòng th n sang bên trái x kho ng tr ng (gi ng như phím SHIFT+TAB trong Win), n u không có n m c nh là dòng hi n t i, x là s d u ' < '
  • 185. 1 8 n J k t h p n dòng, k t dòng hi n t i, thành m t dòng n gJ gi ng như J nhưng không chèn các kho ng tr ng :[n,m] ce [width] căn gi a t dòng th n n dòng th m v i r ng là width, n u không có width, m c nh r ng là 80 :[n,m] ri [width] căn ph i t dòng th n n dòng th m v i r ng là width, n u không có width, m c nh r ng là 80 :[n,m] le [width] căn trái t dòng th n n dòng th m v i r ng là width, n u không có width, m c nh r ng là 80 :[n,m]s/<m u1>/<m u2>/[g][c] tìm t dòng th n n dòng th m và thay th m u1 b i m u2. V i [g], thay th cho m i m u tìm ư c. V i [c], yêu c u xác nh n i v i m i m u tìm ư c :[n,m]s[g][c] l p l i l nh tìm và thay th trư c (:s) v i ph m Vim m i t dòng n n dòng m kèm theo là các tuỳ ch n & l p l i vi c tìm ki m và thay th trên dòng hi n th i mà không có các tuỳ ch n B.3.5. Sao chép và di chuy n văn b n trong vim Ph n này gi i thi u v i các các l nh cơ b n c t và dán văn b n trong vim. sao chép văn b n ph i th c hi n ba bư c sau: Sao chép văn b n vào m t b nh m (Yanking) Di chuy n d u nh c tr n v trí c n sao chép (Moving) Dán văn b n (Pasting) Sau ây là các l nh c th c a t ng bư c: * Sao chép văn b n vào b nh m n yw sao chép n ký t n Y sao chép n dòng văn b n, k t dòng hi n t i, vào b nh m (gi ng yy) : [n] co [m] sao chép dòng th n vào dư i dòng th m * Dán văn b n: n P dán o n văn b n ư c sao chép vào bên ph i v trí hi n th i (n l n) n P dán n o n văn b n ư c sao chép vào bên trái v trí hi n th i (n l n) n Gp gi ng như p, nhưng ưa d u nh c tr v sau o n văn b n m i dán n gP gi ng như P, nhưng ưa d u nh c tr v sau o n văn b n m i dán : [n] put m dán m dòng văn b n vào sau dòng th n (n u không có n ng m nh
  • 186. 1 8 là dòng hi n t i) : [n] put! m dán m dòng văn b n vào trư c dòng th n (n u không có n ng m nh là dòng hi n t i) Ngoài các l nh trên, khi s d ng vim trong xterm, ngư i dùng có th s d ng chu t th c hi n các thao tác cho vi c sao chép văn b n. Vi c này ch th c hi n ư c khi ang trong ch so n th o c a vim. Nh n phím trái chu t và kéo t i m b t u n i m k t thúc c a o n văn b n c n sao chép. o n văn b n ó s ư c t ng sao vào b nh m. Sau ó di tr so n th o n v trí c n dán và nháy nút chu t gi a, văn b n s ư c dán vào v trí mu n. di chuy n văn b n trong vim, cũng ph i th c hi n qua ba bư c sau: C t o n văn b n và dán vào b m Di chuy n d u nh c tr t i v trí m i c a o n văn b n Dán o n văn b n vào v trí m i Di chuy n văn b n ch khác sao chép bư c u tiên là bư c c t o n văn b n. hãy s d ng các l nh xoá trong vim c t o n văn b n. Ví d , khi dùng l nh dd, dòng b xoá s ư c lưu vào trong b m, khi ó có th s d ng các l nh dán dán văn b n vào v trí m i. Ngoài ra còn có th s d ng m t s l nh sau: B.3.6. Tìm ki m và thay th văn b n trong vim vim có m t s các l nh tìm ki m như sau: / <xâu> tìm xâu t dòng hi n t i n dòng cu i trong file ? <xâu> tìm xâu t dòng hi n t i ngư c lên dòng u trong file N tìm ti p xâu ư c ưa ra trong l nh / ho c ? (t trên xu ng dư i) N tìm ti p xâu ư c ưa ra trong l nh / ho c ? (t dư i lên trên) Xâu ư c tìm ki m trong l nh / hay ? có th là m t bi u th c. M t bi u th c thông thư ng là m t t p các ký t . T p ký t này ư c xây d ng b ng cách k t h p gi a các ký t thông thư ng và các ký t c bi t. Các ký t c bi t trong bi u th c thư ng là: . thay th cho m t ký t ơn ngo i tr ký t xu ng dòng hi n th các ký t c bi t * thay th cho 0 ho c nhi u ký t + thay th cho 1 ho c nhi u ký t = thay th cho 0 ho c m t ký t ^ thay th cho ký t u dòng $ thay th cho ký t cu i dòng < thay th cho ch b t u c a t > thay th cho ch cu i c a t : [n] m [x] di chuy n dòng th n vào dư i dòng th x ' ' d ch chuy n n v trí lúc trư c ' " d ch chuy n n v trí lúc trư c th c hi n vi c hi u ch nh file
  • 187. 1 8 [] thay th cho m t ký t n m trong c p d u [] [^] thay th cho ký t không thu c trong c p d u [] và ng sau d u ^ [-] thay th cho m t t p có th t các ký t p thay th cho m t ký t có th in ư c s thay th cho m t ký t tr ng e thay th cho phím Esc t thay th cho phím Tab vim s d ng ch l nh Ex th c hi n các vi c tìm ki m và thay th . T t c các l nh trong ch này ư c b t u b ng d u ':'. có th k t h p l nh tìm ki m và thay thay th ưa ra ư c các l nh ph c t p theo d ng t ng quát sau: :< i m b t u>,< i m k t thúc> s/<m u c n thay th >/<m u ư c thay th >/[g][c] Ví d , l nh sau ây: :1,$s/the/The/g tìm trong file ang so n th o các t the và thay chúng b i các t The. B.3.7. ánh d u trong vim m |a-zA-Z| ánh d u văn b n t i v trí hi n th i v i d u là các ch cái |a-zA-Z| '|a-z| d ch chuy n con tr t i v trí ã ư c ánh d u b i các ch cái |a-z| trong ph m Vim file hi n th i '|A-Z| d ch chuy n con tr t i v trí ã ư c ánh d u b i các ch cái |A-Z| trong m t file b t kỳ :marks hi n th các ánh d u hi n th i B.3.8. Các phím s d ng trong ch chèn Chuy n i ch <Insert> chuy n vào ch chèn ho c ch thay th <Esc> thoát kh i ch chèn, tr l i ch thông thư ng CTRL-C gi ng như <Esc>, nhưng ??? CTRL-O <l nh> th c hi n <l nh> và tr v ch chèn Di chuy n Các phím mũi tên di chuy n tr so n th o sang trái/ph i/lên/xu ng m t ký t SHIFT-left/right di chuy n tr so n th o sang trái/ph i m t t <Home> di chuy n tr so n th o v u dòng <End> di chuy n tr so n th o v cu i dòng Các phím c bi t <Enter>, CTRL-M, CTRL-J b t u m t dòng m i CTRL-E chèn ký t vào bên ph i d u nh c tr CTRL-Y chèn m t ký t vào bên trái d u nh c tr CTRL-A chèn vào trư c o n văn b n ư c chèn CTRL- chèn vào trư c o n văn b n ư c chèn và d ng ch chèn CTRL-R <thanh ghi> chèn n i dung c a m t thanh ghi
  • 188. 1 8 CTRL-N chèn t ti p theo vào trư c d u nh c tr CTRL-P chèn t trư c ó vào trư c d u nh c tr CTRL-X ... hoàn thành t trư c d u nh c tr theo nhi u cách khác nhau <Backspace>, CTRL-H xoá m t ký t trư c d u nh c tr <Del> xoá m t ký t sau d u nh c tr CTRL-W xoá t trư c d u nh c tr CTRL-U xoá t t c các ký t trên dòng hi n t i CTRL-T chèn m t kho ng tr ng trư c dòng hi n th i CTRL-D xoá m t kho ng tr ng trư c dòng hi n th i B.3.9. M t s l nh trong ch o v khi nh n phím này, có th s d ng các phím di chuy n ánh d u o n văn b n ho c b ánh d u (văn b n ư c ánh d u có màu tr ng) V khi nh n phím này, m t dòng văn b n s ư c ánh d u và có th s d ng các phím di chuy n ánh d u o n văn b n ho c b ánh d u CTRL-V nh n phím này s ánh d u m t kh i văn b n và có th s d ng các phím di chuy n ánh d u o n văn b n ho c b ánh d u o di chuy n v trí d u nh c tr trên kh i ư c ánh d u ho c b ánh d u gv ánh d u l i o n văn b n ư c ánh d u lúc trư c n aw ch n ánh d u n t n as ch n ánh d u n câu n ap ch n ánh d u n o n n ab ch n ánh d u n kh i B.3.10. Các l nh l p n . l p l i n l n thay i cu i q |a-z| ghi các ký t ư c nh p vào trong thanh ghi |a-z| n @|a-z| th c hi n n i dung có trong thanh ghi |a-z| n l n n @@ l p l i n l n s th c hi n c a l nh @|a-z| trư c :@|a-z| th c hi n n i dung c a thanh ghi |a-z| như m t l nh Ex :@@ l p l i s th c hi n c a l nh :@|a-z| trư c :[n,m]g/m u/[l nh] th c hi n l nh (m c nh là :p) trên các dòng có ch a m u n m trong kho ng t dòng th n n dòng th m :[n,m]g!/<m u>/[l nh] th c hi n l nh (m c nh là :p) trên các dòng không ch a m u n m trong kho ng t dòng th n n dòng th m :sl [n] t m d ng trong n giây n gs ti p t c d ng trong n giây B.4. Các l nh khác B.4.1. Cách th c hi n các l nh bên trong Vim :sh kh i t o m t shell :! <l nh> th c hi n m t l nh shell trong Vim
  • 189. 1 8 :!! l p l i l nh ':! <l nh>' lúc trư c K m trang man c a l nh trùng v i n i dung t t i d u nh c tr q thoát kh i l nh ang th c hi n tr l i Vim B.4.2. Các l nh liên quan n file Ngoài các l nh cơ b n như sao chép hay c t dán, trong vim còn có m t s l nh cho phép có th có ư c nh ng thông tin c n thi t v file. CTRL-G hi n th tên file hi n th i kèm theo tr ng thái file và v trí d u nh c tr (tr ng thái có th là: ch c, ư c s a, l i khi c, file m i) (gi ng :f) n CTRL-G hi n th thông tin như CTRL -G và có thêm ư ng d n y c a file (n u n>1, tên buffer hi n th i s ư c ưa ra) g CTRL-G ưa ra v trí d u nh c tr theo d ng: c t/t ng s c t, dòng/t ng s dòng và ký t /t ng s ký t :f <tên m i> i tên file hi n th i thành tên m i :ls li t kê t t c các file hi n th i ang ư c s d ng trong Vim (gi ng :buffer và :files) :cd ưa thêm ư ng d n vào tên file :w <tên file> t o m t b n sao c a file hi n th i v i tên m i là tên file (gi ng như save as trong Win) Xác nh file c n so n th o :e[n, /m u] <file> so n th o file, t dòng th n ho c t dòng có ch a m u, tr khi có s thay i th c s trong file :e[n, /m u]! <file> luôn so n th o file, t dòng th n ho c t dòng có ch a m u, b qua m i s thay i trong file :e n p l i file hi n th i, tr khi có s thay i th c s trong file :e! luôn n p l i file hi n th i, b qua m i s thay i th c s trong file :fin [!] <file> tìm file trên ư ng d n và so n th o :e #n so n th o file th n (gi ng n CTRL-^) Các l nh khác :pw ưa ra tên thư m c hi n th i :conf <l nh trong vim > th c hi n l nh trong vim và ưa ra h p tho i yêu c u xác nh n khi có thao tác òi h i s xác nh n
  • 190. 1 9 PH L C C. MIDNIGHT COMMANDER C.1. Gi i thi u v Midnight Commander (MC) Ngư i s d ng h i u hành MS-DOS u bi t tính năng ti n ích Norton Commander (NC) r t m nh trong qu n lý, i u khi n các thao tác v file, thư m c, ĩa cũng như là môi trư ng tr c quan trong ch văn b n (text). Dù trong h i u hành Windows sau này ã có s h tr c a ti n ích Explorer nhưng không vì th mà vai trò c a NC gi m i: Nhi u ngư i dùng v n thích dùng NC trong các thao tác v i file và thư m c. Linux cũng có m t ti n ích mang tên Midnight Commander (vi t t t là MC) có ch c năng và giao di n g n gi ng v i NC c a MS-DOS và s d ng MC trong Linux tương t như s d ng NC trong MS-DOS. C.2. Kh i ng MC L nh kh i ng MC: # mc [Tùy-ch n] Có m t s tuỳ ch n khi dùng ti n ích này theo m t s d ng thông d ng sau: -a Không s d ng các ký t ho v các ư ng th ng khung. -b Kh i ng trong ch màn hình en tr ng. -c Kh i ng trong ch màn hình màu. -d Không h tr chu t -P V i tham s này, Midnight Commander s t ng chuy n thư m c hi n hành t i thư m c ang làm vi c. Như v y, sau khi k t thúc, thư m c hi n hành s là thư m c cu i cùng thao tác. -v file S d ng ch c năng View c a MC xem n i dung c a file ư c ch ra. -V Cho bi t phiên b n chương trình ang s d ng. N u ch ra ư ng d n (path), ư ng d n u tiên là thư m c ư c hi n th trong panel ch n (selected panel), ư ng d n th hai ư c hi n th panel còn l i. C.3. Giao di n c a MC Giao di n c a MC ư c chia ra làm b n ph n. Ph n l n màn hình là không gian hi n th c a hai panel. Panel là m t khung c a s hi n th các file thư m c cùng các thu c tính c a nó ho c m t s n i dung khác. Theo m c nh, dòng th hai t dư i lên s là dòng l nh còn dòng dư i cùng hi n th các phím ch c năng. Dòng u tiên trên nh màn hình là th c ơn ngang (menu bar) c a MC. Thanh th c ơn này có th không xu t hi n nhưng n u kích ho t b ng c hai chu t t i dòng u tiên ho c nh n phím <F9> thì nó s hi n ra và ư c kích ho t. Midnight Commander cho phép hi n th cùng m t lúc c hai panel. M t trong hai panel là panel hi n hành (panel ch n). Thanh sáng ch n n m trên panel hi n hành. H u h t các thao tác u di n ra trên Panel này. M t s các thao tác khác v file như Rename hay Copy s m c nh s d ng thư m c Panel còn l i làm thư m c ích. Tuy nhiên ta v n có th s a ư c thư m c này trư c khi thao tác vì các thao tác này u tiên bao gi cũng yêu c u nh p ư ng d n. Trên panel s hi n th h u h t các file và thư m c con c a thư m c hi n hành. Midnight Commander có cơ ch hi n th các ki u file khác nhau b ng các ký hi u và màu
  • 191. 1 9 s c khác nhau, ví d như các file bi u tư ng liên k t s có ký hi u ‘@’ u, các file thi t b s có màu tím, các file ư ng ng có màu en, các thư m c có ký hi u ‘/’ u, các thư m c liên k t có ký hi u ‘~’... Cho phép thi hành m t l nh h th ng t MC b ng cách gõ chúng lên màn hình. T t c nh ng gì có gõ vào u ư c hi n th dòng l nh phía dư i tr m t s ký t i u khi n và khi nh n Enter, Midnight Commander s thi hành l nh gõ vào. C.4. Dùng chu t trong MC Midnight Commander s h tr chu t trong trư ng h p không g i v i tham s -d. Khi kích chu t vào m t file trên Panel, file ó s ư c ch n, có nghĩa là thanh sáng ch n s n m t i v trí file ó và panel ch a file ó s tr thành panel hi n hành. Còn n u kích chu t ph i vào m t file, file ó s ư c ánh d u ho c xoá d u tuỳ thu c vào tr ng thái kích trư c ó. N u kích ôi chu t t i m t file, file ó s ư c thi hành n u ó là file thi hành ư c (executable program) ho c n u có m t chương trình c trưng cho riêng ph n m r ng ó thì chương trình c trưng này s ư c th c hi n. Ngư i dùng cũng có th th c hi n các l nh c a các phím ch c năng b ng cách nháy chu t lên phím ch c năng ó. N u kích chu t t i dòng u tiên trên khung panel, toàn b panel s b kéo lên. Tương t kích chu t t i dòng cu i cùng trên khung panel, toàn b panel s b kéo xu ng. Có th b qua các thao tác chu t c a MC và s d ng các thao tác chu t chu n b ng cách gi phím <Shift> C.5. Các thao tác bàn phím M t s thao tác c a Midnight Commander cho phép s d ng nhanh b ng cách gõ các phím t t (hot key). tương thích v i m t s h th ng khác, trong các b ng dư i ây v Midnight Commander, vi t t t phím CTRL là “C”, phím ALT là “M” (Meta), phím SHIFT là “S”. Các ký hi u t h p phím có d ng như sau: C-<chr> Có nghĩa là gi phím CTRL trong khi gõ phím <char>. Ví d C -f có nghĩa là gi CTRL và nh n <f>. C-<chr1><char2> Có nghĩa là gi phím CTRL trong khi gõ phím <char1> sau ó nh t t c ra và gõ phím <char2>. M-<chr> Có nghĩa là gi phím ALT trong khi gõ phím <char>. N u không có hi u l c thì có th th c hi n b ng cách gõ phím <Esc> nh ra r i gõ phím <char>. S-<chr> Có nghĩa là gi phím SHIFT trong khi gõ phím <char>. Sau ây là ch c năng m t s phím thông d ng. Các phím th c hi n l nh: Enter N u có dòng l nh, l nh ó s ư c thi hành. Còn n u không thì s tuỳ vào v trí c a thanh sáng trên panel hi n hành là file hay thư m c mà ho c vi c chuy n i thư m c ho c thi hành file hay thi hành m t chương trình tương ng s di n ra. C-l C p nh t l i các thông tin trên Panel.
  • 192. 1 9 Các phím thao tác trên dòng l nh: M-Enter hay C- Enter chép tên file v trí thanh sáng ch n xu ng dòng l nh M-Tab hoàn thành tên file, l nh, bi n, tên ngư i dùng ho c tên máy giúp C-x t, C-x C-t sao các file ư c ánh d u (m c nh là file hi n th i) trên panel ch n (C-x t) ho c trên panel kia (C-x C-t) xu ng dòng l nh C-x p, C-x C-p ưa tên ư ng d n hi n th i trên panel ch n (C-x p) ho c trên panel kia (C-x C-p) xu ng dòng l nh M-p, M-n s d ng hi n l i trên dòng l nh các l nh ã ư c g i trư c ó. M-p s hi n l i dòng l nh ư c thi hành g n nh t, M-n hi n l i l nh ư c g i trư c l nh ó C-a ưa d u nh c tr v u dòng C-e ưa d u nh c tr v cu i dòng C-b, Left ưa d u nh c tr di chuy n sang trái m t ký t C-f, Right ưa d u nh c tr di chuy n sang ph i m t ký t M-f ưa d u nh c tr n t ti p theo M-b ưa d u nh c tr ngư c l i m t t C-h, Space xoá ký t trư c ó C-d, Delete xoá ký t t i v trí d u nh c tr C-@ ánh d u c t C-k xoá các ký t t v trí d u nh c tr n cu i dòng M-C-h, M- Backspace xoá ngư c l i m t t Các phím thao tác trên panel: Up,Down, PgUp, PgDown, Home, End s d ng các phím này di chuy n trong m t panel b, C-b, C-h, Backspace, Delete di chuy n ngư c l i m t trang màn hình Space di chuy n ti p m t trang màn hình u, d di chuy n lên/ xu ng 1/2 trang màn hình g, G di chuy n n i m u ho c cu i c a m t màn hình Tab, C-i hoán i panel hi n hành. Thanh sáng ch n s chuy n t panel cũ sang panel hi n hành Insert, C-t ch n ánh d u m t file ho c thư m c M-g, M-h, M-j l n lư t ch n file u tiên, file gi a và file cu i trên panel hi n th
  • 193. 1 9 C-s, M-s tìm ki m file trong thư m c. Khi kích ho t ch này, nh ng ký t gõ vào s ư c thêm vào xâu tìm ki m thay vì hi n th trên dòng l nh. N u tuỳ ch n Show mini-status trong option ư c t thì xâu tìm ki m s ư c hi n th dòng tr ng thái. Khi gõ các kí t , thanh sáng ch n s di chuy n n file u tiên có nh ng ký t u gi ng nh ng ký t gõ vào. S d ng phím Backspace ho c Del hi u ch nh sai sót. N u nh n C-s l n n a, vi c tìm ki m s ư c ti p t c M-t chuy n i ki u hi n th thông tin v file ho c thư m c C- thay i thư m c hi n th i + s d ng d u c ng l a ch n ánh d u m t nhóm file. Có th s d ng các ký t i di n như ‘*’, ‘?’... bi u di n các file s ch n s d ng d u tr xoá ánh d u m t nhóm file. Có th s d ng các ký t d i di n như ‘*’, ‘?’ bi u di n các file s xoá * s d ng d u * ánh d u ho c xoá ánh d u t t c các file trong panel M-o m t panel s hi n th n i dung thư m c hi n th i ho c thư m c cha c a thư m c hi n th i c a panel kia M-y di chuy n n thư m c lúc trư c ã ư c s d ng M-u di chuy n n thư m c ti p theo ã ư c s d ng C.6. Th c ơn thanh ngang (menu bar) Th c ơn thanh ngang trong Midnight Commander ư c hi n th dòng u tiên trên màn hình. M i khi nh n <F9> ho c kích chu t t i dòng d u tiên trên màn hình th c ơn ngang s ư c kích ho t. Th c ơn ngang c a MC có năm m c “Left”, “File”, “Command”, “Option” và “Right”. Th c ơn Left và Right giúp ta thi t l p cũng như thay i ki u hi n th c a hai panel left và right. Các th c ơn m c con c a chúng g m: Listing Mode ... th c ơn này ư c dùng khi mu n thi t l p ki u hi n th c a các file. Có b n ki u hi n th : * Full - hi n th thông tin v tên , kích thư c, và th i gian s i c a file; * Brief - ch hi n th tên c a file; * Long - hi n th thông tin y v file (tương t l nh ls -l); * User - hi n th các thông tin do t ch n v file; Quick view C-x q xem nhanh n i dung c a m t file Info C-x i xem các thông tin v m t thư m c ho c file Tree hi n th dư i d ng cây thư m c Sort order... th c hi n s p x p n i dung hi n th theo tên, theo tên m r ng, th i gian s a ch a, th i gian truy nh p, th i gian thay i, kích thư c, inode Filter ... th c hi n vi c l c file theo tên Network link ... th c hi n liên k t n m t máy tính FTP link ... th c hi n vi c l y các file trên các máy t xa
  • 194. 1 9 Rescan C-r quét l i Th c ơn File ch a m t danh sách các l nh mà có th thi hành trên các file ã ư c ánh d u ho c file t i v trí thanh ch n. Các th c ơn m c con: User menu F2 th c ơn dành cho ngư i dùng View F3 xem n i dung c a file hi n th i View file ... m và xem n i dung c a m t file b t kì Filtered view M-! th c hi n m t l nh l c v i tham s là tên file và hi n th n i dung c a file ó Edit F4 so n th o file hi n th i v i trình so n th o m c nh trên h th ng Copy F5 th c hi n copy cHmod C-x c thay i quy n truy nh p i v i m t thư m c hay m t file Link C-x l t o m t liên k t c ng n file hi n th i Symlink C-x s t o m t liên k t tư ng trưng n file hi n th i edit sYimlink C-x C-s hi u ch nh l i m t liên k t tư ng trưng chOwn C-x o thay i quy n s h u i v i thư m c hay file Advanced chown thay i quy n s h u cũng như quy n truy nh p c a file hay thư m c Rename/Move F6 th c hi n vi c i tên hay di chuy n i v i m t file Mkdir F7 t o m t thư m c Delete F8 xoá m t ho c nhi u file Quick cd M-c chuy n nhanh n m t thư m c select Group M-+ th c hi n vi c ch n m t nhóm các file Unselect group M- ngư c v i l nh trên reverse selecTion M-* ch n các file trong thư m c hi n th i Exit F10 thoát kh i MC Th c ơn Command cũng ch a m t danh sách các l nh. Directory tree hi n th thư m c dư i d ng cây thư m c Find file M-? tìm m t file Swap panels C-u th c hi n tráo i n i dung gi a hai panel hi n th Switch panels on/of C-o ưa ra l nh shell ư c th c hi n l n cu i (ch s d ng trên xterm, trên console SCO và Linux) Compare directories C-x d th c hi n so sánh thư m c hi n t i trên panel ch n v i các thư m c khác Command history ưa ra danh sách các l nh ã th c hi n Directory hotlist C- thay i thư m c hi n th i External panelize C-x ! th c hi n m t l nh trong MC và hi n th k t qu trên panel ch n (ví d : n u mu n trên panel ch n hi n th t t c các file liên k t trong thư m c hi n th i, hãy ch n m c th c ơn này và nh p l nh find . -type l -print
  • 195. 1 9 s th y k t qu th t tuy t v i) Show directory size hi n th kích thư c c a thư m c Command history hi n th danh sách các l nh ã th c hi n Directory hotlist C- chuy n nhanh n m t thư m c Background C-x j th c hi n m t s l nh liên quan n các quá trình n n Extension file edit cho phép hi u ch nh file ~/.mc/ext xác nh chương trình s th c hi n khi xem, so n th o hay làm b t c i u gì trên các file có tên m r ng Th c ơn Options cho phép thi t l p, hu b m t s tuỳ ch n có liên quan n ho t ng c a chương trình MC. Configuration ... thi t l p các tuỳ ch n c u hình cho MC Lay-out ... xác l p cách hi n th c a MC trên màn hình Confirmation ... thi t l p các h p tho i xác nh n khi th c hi n m t thao tác nào ó Display bits ... thi t l p cách hi n th c a các ký t Learn keys ... xác nh các phím không ư c kích ho t Virtual FS ... thi t l p h th ng file o Save setup ghi m i s thi t l p ư c thay i C.7. Các phím ch c năng Các phím ch c năng c a Midnight Commander ư c hi n th t i dòng cu i cùng c a màn hình. Có th th c hi n các ch c năng ó b ng cách kích chu t lên nhãn c a các ch c năng tương ng ho c nh n trên bàn phím ch c năng ó. F1 hi n th trang tr giúp F2 ưa ra th c ơn ngư i dùng F3 xem n i dung m t file F4 so n th o n i dung m t file F5 th c hi n sao chép file F6 th c hi n di chuy n ho c i tên file F7 t o thư m c m i F8 xoá thư m c ho c file F9 ưa tr so n th o lên thanh th c ơn n m ngang F10 thoát kh i MC C.8. B so n th o c a Midnight Commander Midnight Commander cung c p m t b so n th o khá ti n d ng trong vi c so n th o các văn b n ASCII. B so n th o này có giao di n và thao tác khá gi ng v i ti n ích Edit c a DOS hay NcEdit c a Norton Commander. hi u ch nh m t s file văn b n, hãy di chuy n thanh sáng ch n n v trí file ó r i nh n F4, n i dung c a file ó s hi n ra trong vùng so n th o. Sau khi hi u ch nh xong, nh n F2 ghi l i. B so n th o này có m t th c ơn ngang cung c p các ch c năng y như m t b so n th o thông thư ng. N u ã t ng là ngư i dùng DOS và m i dùng Linux thì nên dùng b so n th o này hi u ch nh và so n th o văn b n thay vì b so n th o Vim. Sau ây là b ng li t kê các phím ch c năng cũng như các m c th c ơn trong b so n th o này:
  • 196. 1 9 * Thanh th c ơn Th c ơn File: các thao tác liên quan n file Open/load C-o m ho c n p m t file New C-n t o m t file m i Save F2 ghi n i dung file ã ư c so n th o Save as ... F12 t o m t file khác tên nhưng có n i dung trùng v i n i dung file hi n th i Insert file ... F15 chèn n i dung m t file vào file hi n th i Copy to file ... C-f sao o n văn b n ư c ánh d u n m t file khác About .. thông tin v b so n th o Quit F10 thoát kh i b so n th o Th c ơn Edit: các thao tác liên quan n vi c so n th o n i dung file Toggle Mark F3 th c hi n ánh d u m t o n văn b n Mark Columns S-F3 ánh d u theo c t Toggle Ins/overw Ins chuy n i gi a hai ch chèn/ è Copy F5 th c hi n sao chép file Move F6 th c hi n di chuy n file Delete F8 xoá file Undo C-u tr v tr ng thái trư c khi th c hi n m t s thay i Beginning C-PgUp di chuy n n u màn hình End C-PgDn di chuy n n cu i màn hình Th c ơn Sear/Repl: các thao tác liên quan n vi c tìm ki m và thay th Search .. F7 th c hi n tìm ki m m t xâu văn b n Search again F17 tìm ki m ti p Replace ... F4 tìm và thay th xâu văn b n Th c ơn Command: Các l nh có th ư c th c hi n trong khi so n th o Goto line ... M-l di chuy n tr so n th o n m t dòng Insert Literal ... C-q chèn vào trư c d u nh c tr m t ký t Refresh screen C-l làm tươi l i màn hình Insert Date/time chèn ngày gi hi n t i vào v trí d u n hc tr Format paragraph M-p nh d ng l i o n văn b n Sort M-t th c hi n s p x p
  • 197. 1 9 Th c ơn Options: Các tuỳ ch n có th thi t l p cho b so n th o General ... thi t l p các tuỳ ch n cho b so n th o Save mode ... ghi l i m i s thi t l p ư c thay i * Các phím ch c năng F1 hi n th trang tr giúp F2 ghi n i dung file F3 th c hi n vi c ánh d u o n văn b n F4 tìm và thay th xâu văn b n F5 th c hi n vi c sao chép F6 di chuy n file F7 tìm ki m xâu văn b n F8 xoá o n văn b n ư c ánh d u F9 hi n th thanh th c ơn ngang F10 thoát kh i b so n th o
  • 198. 1 9 PH L C D. SAMBA D.1 Cài t Samba N u các d ch v chia s file gi a các máy Windows v i nhau và gi a các máy Linux v i nhau ã ư c gi i quy t thì còn l i là v n chia s file gi a các máy Linux và Windows l i là m t nhu c u quan tr ng. Samba hi n ã tr thành cây c u n i gi a Linux và Windows. Samba cho phép các máy tính ch y Linux có th ho t ng và giao ti p trên cùng m t giao th c m ng v i máy Windows. Samba server th c hi n các d ch v sau: • Chia s m t hay nhi u h th ng file. • Chia s các máy in ã ư c cài t c hai phía server và client c a nó. • H tr các client duy t Network Neighborhood trong các máy windows. • Ki m tra xác nh n các client ăng nh p vào vùng c a Windows. • Cung c p ho c h tr vi c phân gi i a ch c a server b ng WINS (Windows Internet Name Server). d hình dung hơn, ta l y ví d m ng ơn gi n có dùng Samba. Gi s ta có m t c u hình m ng cơ b n sau: m t máy ch Linux có s d ng Samba v i tên ư c t là Toltec, và hai client trên MS Windows, v i tên là Maya và Aztec, ư c n i v i nhau trong m t m ng Lan và tham gia vào nhóm làm vi c có tên METRAN. Ta còn gi s máy ch Toltec còn có m t máy in phun tên là lp ư c n i t i ch , ng th i vi c chia s ĩa c ng cho phép các máy “nhìn” th y nhau. Mô t m ng trên b ng hình v D.1 ư c bi u di n dư i ây: Hình D.1 M t m ng có nhi u h i u hành Các vai trò c a Samba i v i m ng Windows NT (phiên b n Samba 2.0.4b.) Vai Trò Có th th c hi n ư c File Server Có Printer Server Có Primary Domain Controller Có (Samba 2.1 hay mu n hơn) Backup Domain Controller Không Window 95/98 Authentication Có Local Master Browser Có Local Backup Browser Không Domain Master Browser Có Primary WINS Server Có Secondary WINS Server Không
  • 199. 1 9 D.2 Các thành ph n c a Samba Samba th c ch t ch a m t s chương trình ph c v cho nh ng m c ích khác nhau nh- ng có liên quan v i nhau. H t nhân c a Samba là hai deamon có nh ng nhi m v sau: smbd Daemon: smbd ch u trách nhi m i u khi n các tài nguyên ư c chia s gi a máy ch Samba và các máy tr m c a nó. Nó cung c p các d ch v v file, in, và trình duy t cho các máy tr m SMB thông qua m t hay nhi u m ng. smdb x lý t t c các trao i gi a máy ch Samba và các client m ng c a nó. Ngoài ra, deamon này còn ch u trách nhi m ki m tra xác nh n ngư i dùng, khoá tài nguyên, và chia s d li u thông qua giao th c SMB. nmbd Deamon: nmbd là m t máy ch d ch v tên ơn gi n b t chư c các ch c năng máy ch d ch v tên, ch y v i các giao th c WINS và NetBIOS. Daemon này l ng ngheÕ các yêu c u c a máy ch d ch v tên và cung c p các thông tin thích h p khi ư c g i t i. Nó còn cung c p danh sách duy t Network Neighborhood và tham gia vào l a ch n các i tư ng m ng trong ó. B cài t Samba còn có m t t p h p nh các công c dòng l nh Linux: smbclient: M t client Linux theo kiêu ftp có th dùng ti n ích này k t n i v i tài nguyên ư c Samba chia s . Smbtar: Chương trình lưu tr các tài nguyên ư c chia s , tương t như l nh tar c a Linux. nmblookup: Chương trình cung c p NetBIOS thông qua vi c tìm tên b ng TCP/IP. smbpasswd: Chương trình cho phép ngưư i qu n tr thay i m t kh u ã mã hóa c a Samba. testparm: Chương trình ơn gi n làm cho file c u hình Samba có hi u l c. testprns: Chương trình ki m tra li u các máy in khác nhau có ư c deamon smbd nh n ra hay không. N u mu n xem t ng deamon th c hi n nh ng gì, Samba có chương trình v i tên smbstatus s a t t c các thông tin ó lên màn hình như sau: Samba version 2.2.7-security-rollup-fix Service uid gid pid machine ---------------------------------------------- IPC$ root root 21608 httt-09 (10.10.16.5) Fri Nov 28 09:42:52 2003 No locked files Vi c cài t samba cũng khá ơn gi n, ta c n chu n b các package sau: samba-client-xxx.rpm samba-xxx.rpm samba-common-xxx.rpm Trong ó xxx là s hi u phiên b n c a samba. ăng nh p v i quy n root và sau ó ra l nh: #rpm –ivh samba-client-xxx.rpm samba-xxx.rpm samba- common-xxx.rpm N u ta không nh n l i thông báo l i nào c thì quá trình cài t ã hoàn t t.
  • 200. 2 0 D.3 File c u hình Samba Nh ng tên ư c bao trong các ngo c vuông dùng ký hi u cho các ph n c a file c u hình smb.conf, mô t các chia s hay d ch v mà Samba cung c p. Ví d , các ph n “test” và “homes” là các chia s riêng r i v i ĩa c ng; chúng ch a các tuỳ ch n ư c ánh x t i các thư m c c th trên server Samba. Ph n chia s “printers” ch a các tuỳ ch n ánh x t i các máy in khác nhau c a servers. T t c các ph n ư c xác nh trong file smb.conf, tr ph n [global, s ư c coi như các chia s ĩa c ng ho c máy in cho nh ng dùng k t n i v i server Samba. Các dòng vào còn l i là các tuỳ ch n riêng ư c quy nh c th cho s chia s ã ư c c p t i. Các tuỳ ch n ó có tác d ng cho t i khi b t u m t ph n m i ư c ký hi u trong c p ngo c vuông, ho c cho t i i m cu i c a file smb.conf ư c thi t l p b ng cách gán giá tr cho chúng. M i m t tuỳ ch n c u hình u có cú pháp ơn gi n: option = value Cu i cùng, ta có th dùng kho ng tr ng d ngăn cách chu i các giá tr trong danh sách, ho c có th dùng các d u ph y, Hai cách trên là tơng ơng nhau nhng ta ch nên dùng m t cách ho c d u ph y ho c kho ng tr ng. Ch vi t hoa không có ý nghĩa gì i v i file c u hính Samba, ngo i tr trong các v trí mà h i u hành ư c ch t i không cho phép vi t, b i vì h i u hành Linux phân bi t ch vi t thư ng và vi t hoa. Trong trư ng h p dòng vào quá dài không th gói g n trong không gian mà c a s dòng l nh cho phép, ta có th vi t ti p dòng trong file c u hình Samba b ng cách dùng ký hi u d u g ch ngư c “”, ví d : comment = Su chia se dau tien la ban sao chinh cua s an pham phan mem Teamworks moi Có th thay i file smb.conf và b t kỳ tuỳ ch n nào c a nó vào th i i m b t kỳ trong khi các daemon Samba ang ch y. Theo m c nh, Samba ki m tra file c u hình c a mình c 60 giây m t l n ti p nh n cá thay i m i. N u không mu n ch i lâu như v y, b n có th b t các daemon ó n p l i b ng cách g i tín hi u SIGHUP t i chúng, ho c ch ơn gi n là kh i ng l i. Ví d , n u ti n trình smbd có PID là 893, ta có th b t nó c l i file c u hình b ng l nh sau ây: # kill –SIGHUP 893 Không ph i t t c các thay i u ư c cá máy client ch p nh n ngay. Ví d , các tài nhuyên chia s hi n th i ang ư c s d ng s không ư c ăng ký cho n khi các máy client c t các n i k t r i k t n i l i t i các tài nguyên ó. Thêm n a, cũng s không ư c ăng ký ngay l p t c. i u ó giúp cho các máy client tích c c không b ng t n i k t m t cách b t ng ho c g p ph i các v n không ư c ch i v truy c p tài nguyên khi phiên làm vi c v n ang ư c m . Các bi n: Samba có m t t p h p y cá bi n xác nh các c trưng c a server Samba và c a cá máy client n i v i nó. M i m t bi n ư c b t u b ng d u ph n trăm “%”, ti p theo là m t ký t ơn vi t hoa ho c vi t thư ng và ch có th ư c dùng bên v ph i c a dòng li nh tuỳ ch n c u hình theo cú pháp potion = variable nh trong câu li l nh ví d sau: [pub] path = /home/ftp/pub/%a
  • 201. 2 0 Ký hi u bi n %a có nghĩa i di n cho ki n trúc c a máy tính client, như WinNT ch các máy tính ch y trên Windows NT, Win95 – cho máy Windows 95 ho c 98, hay như WfWg – cho Windows for Worrgroups (Windows 3.11). Theo cách vi t trên, Samba s gán ư ng d n chung ch t i tài nguyên ư c chia s trong ph n [pub] cho các máy client ch y trên Windows NT, gán ư ng d n khác cho các máy Windows 9x, và m t ư ng d n n a cho các máy v i Windows for Worrkgroups. Nói cách khác, các ư ng d n mà theo ó m i máy client nh n th y tài nhuyên chia s s khác nhau, tuỳ thu c vào ki n trúc c a client. Bi n nh nghĩa Các bi n c a máy client %a Ki n trúc c a các máy client(ví d , Samba, wfwg, winNT, win95, ho c UNKNOWN). %I a ch IP c a client(ví d , 192.168.220.100). %m Tên NetBIOS c a client. %M Tên DNS c a client. Các bi n v ngư i dùng %g Nhóm chính c a %u %G Nhóm chính c a %U %u Thư m c home hi n th i c a %u. %U Tên ngư i dùng ư c yêu c u trên máy client Các bi n v tài nguyên ư c chia s %p ư ng d n cho automounter t i thư m c g c c a tài nguyên ư c chia s , n u thư m c ó khác v i %P %P Th m c g c hi n th i c a tài nguyên ư c chia s . %S Tên hi n th i c a tài nguyên ư c chia s . Các bi n c a server %d nh danh ti n trình (PID) server hi n th i. %h Tên host DNS c a server Samba. %L Tên host NetBIOS c a server Samba %N Th m c home c a server Samba, l y t file ánh x (map) c a automount. %v Phiên b n Samba. Các bi n khác %R M c c a giao th c SMB ư c tho thu n thi t l p. %T Ngày gi hi n t i. Danh sách các bi n c a Samba D.4 Các ph n c bi t c a file c u hình Samba Ph n [global]: Ph n [global] xu t hi n h u như trong m i file c u hình Samba, th m chí khi trong ó không có dòng l nh b t bu c nào. M i tuỳ ch n ư c thi t l p trong ph n này u ư c áp d ng i v i t t c các tài nguyên chia s khác, vì n i dung c a ph n này s ư c sao chép vào các ph n khác. Nhưng các ph n khác, n u cũng có các tuỳ ch n gi ng như trong ph n [global], thì trong các ph n ó, các tuỳ ch n s ư c xác nh v i các giá tr m i ư c ghi è lên các lên các giá tr cũ c a [global]. Ta có th c u hình server
  • 202. 2 0 Samba, u tiên ta ph i chú ý n ba tuỳ ch n c u hình cơ b n xu t hi n trong ph n global c a file c u hình smb.conf: [global] Server configuration parameters netbios name = HYDRA server string = Samba %v on (%L) workgroup = SIMPLE Tuỳ ch n netbios name: cho phép t tên NetBIOS cho server. Ví d : netbios name = DHQGHN Giá tr m c nh cho tuỳ ch n này là tên máy c a server (ph n bên trái cùng c a tên DNS y ). Ví d , tên NetBIOS m c nh c a máy hut.edu.vn s là HUT. Thông thư ng, ngư i ta t tên NetBIOS khác v i tên DNS hi n th i. Vi c thay i tên NetBIOS c a server không ư c khuy n khích n u không có lý do chính áng, n u như tên ó không ph i là duy nh t vì m ng LAN ư c chia ra thành hai hay nhi u vùng DNS. Ví d , khi m ng hut.edu.vn b chia thành hai vùng v i các server là hut.lythuyet.edu.vn và hut.thuchanh.edu.vn thì tên NetBIOS cũ là HUT bây gi có th thành các tên HUTLYTHUYET và HUTTHUCHANH. Tùy ch n server string: Thông s c a server string xác nh n i dung dòng chú thích s xu t hi n c nh tên c a server Samba trong c c a s Network Neighborhood (khi ch Details) l n c a s qu n lý in c a Microsoft Windows. B n có th dùng các bi n chu n cung c p thông tin cho dòng mô t ó, ví d trên ta ã s d ng hai bi n là %v và %L. Tùy ch n workgroup: Thông s c a tuỳ ch n workgroup thi t l p nhóm làm bi c hi n th i, nơi mà server Samba t thông báo cho các thành biên c a m ng v mình. Các clients mu n truy c p ư c tài nguyên ư c chia s trên server Samba ph i cùng thu c v m t nhóm làm vi c NetBIOS. Nên nh r ng các nhóm làm vi c ph i có các tên nhóm NetBIOS th c th , tuân theo quy t c t tên NetBIOS. C u hình chia s ĩa c ng Trong ví d ph n trư c ta ã nh c n r ng do chưa có tài nguyên ư c chia s nên c a s chi ti t c a server hydra ang còn tr ng. Bây gi ta ti p t c làm vi c c i file c u hình Samba và t o ra m t ĩa c ng ư c chia s còn r ng có tên là [data]. ây là các ng tác c n thêm vào t ư c k t qu v a nêu: SampleDataDrive] comment=Data Drive path = /export/samba/data writable = yes guest ok = yes Tài nguyên ư c chia s SampleDataDrive thư ng là ĩa c ng ư c Samba chia s và ánh x t i thư m c /export/samba/data trên server Samba. Ta ã cho thêm m t dòng vào có chú thích mô t tài nguyên ư c chia s ó là Data Drive, cũng như gán cho b n thân tài nguyên ó m t cái tên SampleDataDrive. Tài nguyên ư c chia s ư c thi t l p có quy n ghi cho các ngư i dùng. Giá tr m c nh c a tuỳ ch n này là ch c. Trong phương án không c n n c b o m t ch t ch như ây, ta t giá tr yes cho tuỳ ch n guest ok, cho b t kỳ ai cũng có th k t n i ư c
  • 203. 2 0 t i tài nguyên v a ư c chia s . Trên máy UNIX có cài t Samba ta t o thư m c /export/samba/data v i quy n root b ng các l nh sau: # mkdir /export/samba/data #chmod 777 /export/samba/data Bây gi , n u ta l i k t n i v i server hydra (b ng cách kích phím chu t vào bi u tư ng c a server trong c a s Network Neighborhood c a Windows), m t thư m c ư c chia s v i tên data ã xu t hi n. Tuỳ ch n Thông s Ch c năng M c nh Ph m vi Path (directory) String ( ư ng d n n thư m c) t thư m c UNIX dùng cho chia s ĩa c ng ho c cho vi c x p hàng ch b i máy in ư c chia s . /tmp Share Guest ok (public) Nh phân (yes/no) N u t là yes, s không d n ki m tra xác nh n ngư i dùng truy c p tài nguyên ư c chia s này. no Share Comment String (xâu ký t ) t chú thích s xu t hi n cùng tài nguyên ư c chia s . Không có Share volume String t tên cho ĩa, theo d ng c a DOS. Tên c a tài nguyên ư c chia s Share Read only Nh phân (yes/no) N u là yes, cho phép truy c p ch c t i tài nguyên ư c chia s . yes Share Writeable (write ok) nh phân (yes/no) N u là no, cho phép truy c p ch c t i tài nguyên ư c chia s . no Share Các tuỳ ch n cơ b n chia s ĩa c ng Các tuỳ ch n v m ng c a Samba Tuỳ ch n Thông s Ch c năng M c nh Ph m vi hosts allow (allow hosts) String (danh sách tên máy) Xác nh các máy có th k t n i v i Samba. Không có Share Hosts deny (deny hosts) String (danh sách tên máy) Xác nh các máy không th k t n i v i Samba. Không có Share Bind interfaces only Nh phân (yes/no) N u t là yes, Samba s ch liên k t t i các giao di n xác nh b i tuỳ ch n no Global
  • 204. 2 0 interfaces. socket address String ( a ch IP) t a ch IP ngheÕ, dùng cho tr ng h p có nhi u giao th c o trên servers. Không có Global Các tuỳ ch n c u hình m ng Tùy ch n hosts allow: Tuỳ ch n này xác nh các máy có quy n truy c p các tài nguyên ư c chia s trên servers Samba, ư c vi t như danh sách các máy hay a ch IP c a chúng, cách nhau b ng d u ph y ho c kho ng tr ng. Ta có th t ư c m t chút ít m c b o m t, ch ơn gi n b ng cách t a ch m ng con LAN c a mình vào ch giá tr c a tuỳ ch n này. Ví d : hosts allow = 192.168.200. localhost Chú ý r ng ta t localhost (ho c a ch 127.0.0.1) v trí sau a ch c a m ng con. M t trong s các l i thư ng th y khi dùng tuỳ ch n hosts allow là c m luôn servers Samba liên h v i chính nó. Chương trình smbpasswd s c n ư c k t n i v i servers Samba như là m t client thay i m t kh u mã hóa c a ngư i dùng. Thêm n a, vi c duy t t i ch cũng òi h i có ư c ăng nh p t i ch . Sau ây là các quy t c c a Samba quy nh cho vi c dùng các tuỳ ch n hosts allow và hosts deny: - N u không có tuỳ ch n allow ho c deny nào ư c xác nh trong file c u hình smb.conf Samba s cho phép các k t n i t b t kỳ máy nào mà h th ng Unix ch p nh n - N u có các tuỳ ch n allow hoăc deny ư c xác trong ph n global c a file c u hình smb.conf, chúng s ư c áp d ng cho t t c các tài nguyên ư c chia s , th m chí khi m t tài nguyên nào ó có tuỳ ch n ghi è lên ư c xác nh. - N u ch có tuỳ ch n allow ư c xác nh cho m t tài nguyên ư c chia s , ch có các máy ư c li t kê m i có quy n truy c p tài nguyên ó. Các máy khác u b c m. - N u ch có tuỳ ch n deny ư c xác nh cho m t tài nguyên ư c chia s , m i máy không có trong danh sách u có quy n s d ng tài nguyên ó. - N u c hai tuỳ ch n allow và deny ư c xác nh, m t máy ã xu t hi n trong danh sách ư c phép thì không có m t trong danh sách b c m. N u không máy ó s b c m truy c p vào tài nguyên ư c chia s . Chý ý: C n th n tránh tr ng h p ta cho phép m t máy nào ó, nhưng sau y l i c m c m ng con mà máy y tham gia. hosts deny: Tuỳ ch n hosts deny xác nh các máy không có quy n truy nh p tài nguyên ư c chia s , ư c vi t như danh sách các tên máy ho c a ch IP c a chúng, cách nhau b ng d u ph y hay kho ng tr ng v i cú pháp gi ng như i v i tuỳ ch n hosts allow trên. Ví d , h n ch truy c p t i servers t m t máy, tr t vùng example.com, ta có th vi t: hosts deny = ALL EXCEPT.example.com
  • 205. 2 0 Gi ng như hosts allow, không có giá tr m c nh cho tuỳ ch n hosts deny. N u mu n cho phép hay c m truy c p t i tài nguyên ư c chia s c th ta ph i qua c hai tuỳ ch n hosts allow và hosts deny trong ph n global hay n u có d ng thì ph i ghi è giá tr m i trong ph n c u hình cho tài nguyên ư c chia s ó. interfaces: Tuỳ ch n interfaces li t kê các a ch m ng mà ta mu n servers Samba nh n bi t và áp ng. Tuỳ ch n này r t ti n l i n u ta mu n máy tính tham gia ng th i nhi u m ng con. N u không ư c dùng Samba tìm giao di n m ng chính c a servers (th- ư ng là card Ethernet u tiên) khi kh i ng và t c u hình ho t ng ch trong m ng con có giao di n m ng ó. Ta ph i dùng tuỳ ch n này b t bu c Samba ph i th c hi n m ng con khác n a trong m ng c a ta. Giá tr c a tuỳ ch n là m t hay nhi u b g m các ôi a ch IP/ m t n m ng, gi ng như trong ví d sau: interfaces = 192.168.220.100/255.255.255.0 192.168.210.30/255.255.0 Có th dùng nh d ng m t n bít CIDR nh sau: interfaces = 192.168.220.100/24 192.168.210.30/24 S c a m t n bít ch s u tiên ư c b t trong m t n m ng, ví d s 24 nghĩa là 24 bít u tiên (trong s t t c 32 bit) s ư c kích ho t, hay ông nghĩa v i giá tr m t n m ng 255.255.255.0. Tương t nh v y, s 16 tương ương v i m t n 255.255.0.0, và 8- v i 255.0.0.0. Tuy nhiên, tuỳ ch n này có th ho t ng không úng n u ta dùng DHCP (phân ph i a ch IP ng). Bind interfaces only: Tuỳ ch n này có th ư c dùng b t bu c các ti n trình smbd và nmbd ph c v các yêu c u SMB ch cho các a ch ư c xác nh b i tuỳ ch n interfaces mà thôi. Ti n trình nmbd bình thư ng liên k t giao di n (0.0.0.0.) trên các c ng 137 và 138 t i t t c các a ch , cho phép chúng nh n các thông báo phân ph i công c ng t kh p m i nơi. Tuy nhiên, n u ta ghi è lên giá tr ó b ng: bind interfaces only = yes Thì ch các gói i t các a ch ngu n xác thông qua tuỳ ch n interfaces m i ư c ch p nh n. V i smbd, tuỳ ch n này cũng b t Samba không ph c v các yêu c u v file c a các m ng con ngoài danh sách c a tuỳ ch n interfaces. N u mu n cho phép có các n i k t m ng t m th i, như d ng SLIP ho c ppp, ta không ư c d ng tuỳ ch n này. Nói chung, tuỳ ch n này ít ư c dùng, và thư ng ch có nhng ngư i qu n tr y kinh nghi m m i ý t i nó. N u t giá tr cho bind intefaces only là yes, ta ph i thêm a ch c a máy t i ch (127.0.0.1) vào danh sách c a interfaces, n u không smbpasswd s không th ho t ng ư c. socket address: Tuỳ ch n socket address quy nh a ch nào trong s ư c xác nh b i interfaces s “ghe” t c là ch các k t n i. Samba theo m c nh ch p nh n t t c các n i k t v i t t c các a ch . Khi ư c dùng trong file smb.conf, tuỳ ch n này h n ch s a ch mà Samba s dùng ch các n i k t. Vi d : Interfaces = 192.168.220.100/24 192.168.210.30/24 Socket address = 192.168.210.30 Bình thư ng, tuỳ ch n này không ư c khuyên dùng. N u như có dùng các m t kh u ã mã hoá, ta ph i thêm vào m t dòng có n i dung encrypt passwords=yes vào file c u hình trên. Sau khi ã so n th o n i dung như trên c a file smb.conf và t nó vào úng v trí c n thi t, ta kh i ng l i server Samba và dùng các máy client Windows ki m tra k t qu .
  • 206. 2 0 T t nhiên các máy client Windows ó cũng ph i thu c v nhóm SIMPLE – trong ví d ta v n dùng t u chơng – ó là các máy phoenix và chimaera. M i tuỳ ch n xu t hi n tr c ph n ư c ánh d u b ng ngo c vuông “[]” u tiên, t c là bên ngoài ph n [lobal] cũng ư c coi là nh ng tuỳ ch n chung. Ph n [mes] N u m t client nào ó c g ng k t n i t i tài nguyên ư c chia s không ư c nêu trong file c u hình smb.conf, Samba s tìm tài nguyên ư c chia s homes trong file c u hình. N u ph n này t n t i, tên c a tài nguyên ư c chia s không xác nh kia s ư c coi như tên ngư i dùng c a Linux và ư c yêu c u tìm trong cơ s d li u m t kh u c a server Samba. N u như có tên ngưư i dùng ó, Samba coi máy ư c nói t i trên là m t ngưư i dùng Linux ang c k t n i t i th m c home c a mình trong server. Ví d , gi s m t máy client k t n i v i server Samba hydra l n u tiên, và c truy c p t i tài nguyên ư c chia s có tên là [dung]. Trong file smb.conf, không có tài nguyên ư c chia s nào tên là dung ư c xác nh, nhng l i có ph n [homes], vì th Samba tìm file cơ s d li u m t kh u và tìm xem có tài kho n ngưư i dùng dung trong h th ng hay không, Sau ó Samba ki m tra m y kh u ư c client cung c p và so sánh v i m t kh u c a ngưư i dùng Linux dung - ho c trong file cơ s d li u m t kh u n u dùng m t kh u mã hoá. N u các m t kh u ó trùng nhau, Samba nh n bi t ch c là ngưư i dùng dung có quy n và ang mu n k t n i t i th m c home c a mình trong máy Linux. Sau ó Samba s t t o tài nguyên ư c chia s ư c g i là dung cho ngư i dùng dung. Ngư i ta cũng áp d ng phơng pháp ư c th c hi n v i ph n [homes] t o tài kho n ngư i dùng m i, kèm theo m t kh u. Ph n [printers]: Ph n c bi t th ba g i là [printers] tương t như ph n [homes]. N u m t client c k t n i t i tài nguyên ư c chia s không có m t trong file c u hình smb.conf file, và n u tên c a nó không th tìm ư c trong file m t kh u, Samba s ki m tra xem nó có ph i s chia s máy in cho client ó. Samba th c hi n i u ó thông qua vi c c file d li u máy in (thư ng là /etc/printcap hay /etc/terminfo) xem có tên c a tài nguyên ư c chia s ó hay không. N u có, Samba t o ra tài nguyên ư c chia s v i tên liên quan t i vi c chia s máy in. có th in ư c trong Samba ta ph i thêm các tuỳ ch n printer driver, printer driver file, và printer driver location vào file c u hình smb.conf c a Samba. Tuỳ ch n chung printer driver file ch n file printers.def ph i ư c t vào ph n [global]. Các tuỳ ch n còn l i ư c t vào ph n tài nguyên máy in ư c chia s mà ta mu n c u hình m t cách t ng các trình i u khi n máy in. Giá tri cho printer driver ph i trùng v i xâu ư c hi n ra trong Printer Winzard trên h th ng Windows. Giá tr c a printer driver location là - ng d n c a tài nguyên PRINTER$ mà ta thi t l p, ch không ph i là ng d n UNIX trên server. Do ó, ta có th dùng các dòng mã sau ây trong file c u hình Samba: [global] printer driver file = /usr/local/samba/print/printers.def [hpdeskjet] path = /var/spool/samba/printers printable = yes printer driver = HP DeskJet 560C Printer printer driver location = %LPRINTER$ Gi ng như i v i ph n [home], ta không c n ph i b o trì tài nguyên ư c chia s cho m i m t may in c a h th ng trong file c u hình smb.conf. Th c v y, Samba luôn d a vào
  • 207. 2 0 vi c ăng ký máy in c a Linux n u ta c n n, và cung c p các máy in ã ăng ký cho các client. Tuy nhiên, có m t h n ch nh : n u tài kho n ngưư i dùng và máy in u có tên là hai, Samba bao gi cũng tìm tài kho n ngưư i dùng tr c tiên, b t k là client th c ra là c n k t n i v i máy in. Các chi ti t vè vi c thi t l p tài nguyên ư c chia s printers ư c trình bày trong ph n liên quan t i vi c in và phân gi i tên. Các tuỳ ch n c u hình: Các tuỳ ch n trong file c u hình Samba ư c chia s làm hai lo i: global (toàn c c) và share (chia s ). M i m t lo i quy nh m t tuỳ ch n s ư c xu t hi n âu trong file c u hình. Global (toàn c c): Các tuỳ ch n global ph i có m t ch trong ph n [global] mà thôi. ây là các tuỳ ch n thư ng ch ps d ng xác nh ho t ng c a chính server Samba. Share: Các tuỳ ch n share có th xu t hi n trong các tài nguyên ư c chia s c th , ho c c trong ph n [global]. N u có m t trong ph n [global], chúng s xác nh các giá tr m c nh cho t t c các tài nguyên ư c chia s , ch ng nào cha b các tuỳ ch n cùng tên t i các ph n tài nguyên ư c chia s c th ghi è nh ng giá tr m i. D.5 Qu n lý ngư i dùng trong Samba Samba có kh năng qu n lý ngư i dùng có kh năng truy c p vào máy ch Samba. Nó có kh năng qu n lý ngư i dùng khá c l p v i h th ng ngư i dùng h th ng. Thông thư ng các thông tin v ngư i dùng s ư c lưu trong file smbpasswd, file này n m trong thư m c /etc/samba. thêm m t ngư i dùng cho samba qu n lý, ngư i dùng ó ph i là m t ngư i dùng trong h th ng. Sau ó, thao tác v i nh ng ngư i dùng c a samba, ta có công c smbpasswd. smbpasswd [-a][-x][-d][-e][-h][-s] [ tên ngư i dùng ] Trong ó, - a : tuỳ ch n này cho phép ta thêm m t ngư i dùng m i vào trong danh sách ngư i dùng c a samba. - x : tuỳ ch n này cho phép xoá b m t ngư i dùng trong danh sách ngư i dùng c a samba. - d : tuỳ ch n này cho phép ta khoá (disable) m t ngư i dùng trong danh sách ngư i dùng c a samba. - e : tuỳ ch n này cho phép ta m khoá (enable) m t ngư i dùng trong danh sách ngư i dùng c a samba mà ngư i dùng ó ã b khoá b ng tham s -d. - <tên ngư i dùng>: tên c a ngư i dùng ta mu n x lý. Ch ng h n, mu n thêm m t ngư i dùng vào trong danh sách ngư i dùng c a samba, ta dùng l nh (s d ng l nh này v i quy n root): #smbpasswd –a thanhnt Trong ó ngư i dùng thanhnt ph i là m t ngư i dùng h th ng. Sau khi ánh l nh này, máy s h i ta ánh vào m t kh u cho ngư i dùng m i này, và samba cho phép ngư i dùng do nó qu n lý có th có m t kh u khác v i m t kh u h th ng c a ngư i dùng ó. New SMB password: Retype new SMB password: Password changed for user thanhnt.
  • 208. 2 0 Lưu ý là m t kh u s ư c h i hai l n m b o tính chính xác và m t kh u s không ư c hi n th ra màn hình. N u thành công thì ta s nh n ư c thông báo như trên. Ta cũng có th dùng l nh này thay i m t kh u c a m t ngư i dùng b ng l nh (th c hi n b ng quy n root): #smbpasswd thanhnt Khi ó nó s thông báo cho ta nh p m t kh u hai l n gi ng như trên. Còn trong trư ng h p là m t ngư i dùng bình thư ng thì mu n thay i m t kh u samba cho chính ngư i dùng ó ta ch c n ánh: #smbpasswd Old SMB password: New SMB password: Retype new SMB password: Mismatch - password unchanged. Unable to get new password. Trong trư ng h p trên, máy s yêu c u ta nh p m t kh u cũ trư c khi nh p m t kh u m i, n u có sai sót (m t kh u cũ không úng ho c m t kh u m i không kh p nhau) thì ta s nh n ư c thông báo l i. N u mu n xoá ngư i dùng ra kh i danh sách ngư i dùng thì s d ng l nh (v i quy n root): #smbpasswd –x thanhnt Còn n u mu n m t ngư i dùng trong danh sách v n t n t i nhưng không có hi u l c, thì ta có th khoá ngư i dùng ó b ng l nh: #smbpasswd –d thanhnt Khi ó ngư i dùng thanhnt tuy v n còn n m trong danh sách nhưng không ư c samba coi là ngư i dùng h p l n a. Khi mu n khôi ph c ngư i dùng này có các quy n như ban u thì ta có th khôi ph c b ng l nh: #smbpasswd –e thanhnt D.6 Cách s d ng Samba t các máy tr m D.6.1 Cách s d ng t các máy tr m là Linux Samba có cung c p m t công c nh m s d ng các thư m c chia s theo giao th c SMB trong m ng LAN, ó chính là smbclient. V i công c này ta có th thao tác v i tài nguyên ư c chia s trên m ng, ch ng h n như k t n i vào m t thư m c chia s trên m t máy nào ó thao tác, sao chép file t thư m c ó. smbclient cũng gi ng như m t chương trình client ftp. smbclient <tên d ch v > [-U <tên ngư i dùng> ] [ -W <tên mi n ho c group> ] –L [<tên netbios>] Trong ó: - <tên d ch v > : là tên c a d ch v mu n s d ng, có d ng //Maychu/dichvu. Maychu là tên netbios c a máy ch cung c p d ch v , còn dichvu là tên c a d ch v mu n s d ng. Ch ng h n như //dulieu/setups, thì tên máy ch c n truy nh p là dulieu, còn
  • 209. 2 0 setups là tên thư m c mu n tham chi u n. Ta cũng có th s d ng a ch IP thay cho tên netbios dư i d ng //192.168.0.12/setups. - U <tên ngư i dùng> : là tên ngư i dùng mu n s d ng tài nguyên ó. - W <tên mi n ho c group> : là tên mi n ho c group mà máy ch ó thu c vào. - L <tên netbios> : là tên netbios c a máy ch ta mu n xem các d ch v mà máy ch ó ang cung c p. Ví d , xem thông tin v các thư m c chia s c a m t máy ng th i cùng v i các thông tin v các máy trong mi n, các máy mi n khác ta dùng l nh: # smbclient -L 10.10.16.5 -U thanhnt -W httt Thì máy s h i ta m t kh u ng v i ngư i dùng trên, sau khi ánh úng m t kh u ta s thu ư c k t qu : added interface ip=10.10.16.23 bcast=10.10.255.255 nmask=255.255.0.0 Password: Domain= CHTTTMPI OS= Unix Server= Samba 2.2.3a Sharename Type Comment --------- ---- ------- netlogon Disk Network Logon Service public Disk Public Stuff Source Disk Source and documents for vietseek IPC$ IPC IPC Service (Samba Server) ADMIN$Disk IPC Service (Samba Server) thanhnt Disk Home Directories Server Comment --------- ------- HTTT-23 Samba Server Workgroup Master --------- ------- BCNK.FOTECH VINHTQ BMVT NGUYENHONG CHTTTMPI HTTT-23 ECC HUNGTN FOTECH ANHNV FOTECH-CTSV MAIPT s d ng m t d ch v (m t thư m c chia s ch ng h n) ta có th dùng l nh như sau: # smbclient //10.10.16.5/setup -U thanhnt -W httt Trong trư ng h p này ta s ư c máy h i m t kh u, n u thành công thì nó s cho ta m t phiên làm vi c v i d ch v ó, c th ta s ư c m t phiên làm vi c v i thư m c, ta có th sao chép file trên thư m c này vào máy hi n t i và ngư c l i. added interface ip=10.10.16.23 bcast=10.10.255.255 nmask=255.255.0.0 Password: Domain=[CHTTTMPI] OS=[Unix] Server=[Samba 2.2.3a]
  • 210. 2 1 smb: > smb: > ls . D 0 Tue Sep 11 12:03:53 2001 .. D 0 Tue Sep 11 12:03:53 2001 ee120-ta D 0 Wed Aug 29 09:37:14 2001 fa01 D 0 Fri Sep 21 09:47:34 2001 60472 blocks of size 2097152. 52606 blocks available smb: > cd fa01ee120-kmm smb: > put hello.p [send files from local to remote] smb: > get interruptq.doc [receive files to local from remote] smb: > quit Khi d u nh c hi n ra, xem các l nh thao tác, ta có th ánh l nh help. Sau khi k t thúc phiên làm vi c, ta dùng l nh quit thoát. K t g n m t thư m c chia s vào m t thư m c trong h th ng file hi n t i: Trong trư ng h p ta không mu n dùng các l nh smbclient cho t ng phiên làm vi c khi mà ta s có nhi u thao tác v i thư m c ư c chia s ó, gi i pháp t t nh t là k t g n thư m c chia s ó vào thành m t thư m c trên máy c c b . Khi ó thư m c ư c k t g n s tr thành m t thư m c bình ng như các thư m c trên máy c c b . M i vi c thao tác s tr nên thu n ti n hơn r t nhi u. làm i u ó ta dùng l nh (v i quy n root): #smbmount //10.10.16.5/setup /mnt/smb –o username=thanhnt ho c #mount –t smbfs //10.10.16.5/setup /mnt/smb –o username=thanhnt Khi ó máy s h i m t kh u, khi thành công thì ta s ánh x ư c thư m c chia s setup trên máy 10.10.16.5 thành m t thư m c /mnt/smb trên máy c a mình. Khi nào xong ta có th b k t g n ó b ng l nh: #smbmount /mnt/smb ho c #umount /mnt/smb D.6.2 Cách s d ng t các máy tr m là Windows Ta ch n menu start, ta ch n run, sau ó ánh vào tên máy mà ta mu n s d ng m t d ch v nào ó như trên hình D.2.
  • 211. 2 1 Hình D.2 S d ng d ch v samba t máy tr m Windows Sau ó máy s h i ta tên ngư i dùng và m t kh u dùng truy c p. Sau khi nh p các thông tin, n u thành công thì ta s ư c m t c a s hi n th danh sách các d ch v c a máy ch samba ó cung c p như hình D.3. Hình D.3 Danh sách các d ch v trên m t samba server Cho phép ánh x m t thư m c trên m t samba server thành m t ĩa trêm máy tr m Windows b ng cách trên c a s hi n danh sách các tài nguyên trên ta nháy ph i chu t vào thư m c ta mu n ánh x , sau ó ch n “Map network drive” như trên hình D.4.
  • 212. 2 1 Hình D.4 T o m t ánh x ĩa trên máy tr m Windows Sau ó máy s h i tên ĩa mà ta mu n t cho m i này như hình D.5:
  • 213. 2 1 Hình D.5 t tên ĩa cho m t ánh x ĩa