You are on page 1of 93

B GIAO THNG VN TI TRNG I HC HNG HI B MN: K THUT MY TNH KHOA: CNG NGH THNG TIN

BI GING
H IU HNH M NGUN M

TN HC PHN : H IU HNH M NGUN M M HC PHN : 17308 TRNH O TO : I HC CHNH QUY DNG CHO SV NGNH : CNG NGH THNG TIN

HI PHNG - 2010

MC LC
Chng 1. GII THIU CHUNG V LINUX ................................................................................ 6 1.1. Gii thiu chung .................................................................................................................... 6 1.1.1. Tng quan v Linux ........................................................................................................ 6 1.1.2. Vn bn quyn ............................................................................................................ 6 1.1.3. Cc thnh phn tch hp H iu hnh Linux ................................................................. 7 1.1.4. Mt s c im chnh ca Linux ................................................................................... 7 1.2. Cc thnh phn c bn ca Linux .......................................................................................... 8 1.2.1. Nhn h thng (kernel) ................................................................................................... 8 1.2.2. H v (shell) .................................................................................................................... 9 1.3. S dng lnh trong Linux ...................................................................................................... 9 1.3.1. Dng tng qut ca lnh Linux ..................................................................................... 10 1.3.2. Cc k hiu i din ...................................................................................................... 11 1.3.3. Tr gip lnh ................................................................................................................. 11 Chng 2. THAO TC VI H THNG..................................................................................... 12 2.1. Tin trnh khi ng Linux .................................................................................................. 12 2.2. Th tc ng nhp v cc lnh thot khi h thng ............................................................ 12 2.2.1. ng nhp ..................................................................................................................... 12 2.2.2. Ra khi h thng ........................................................................................................... 12 2.2.3. Khi ng li h thng .................................................................................................. 13 2.2.4. Khi ng vo ch ho ....................................................................................... 13 2.3. Mt s lin quan n h thng ............................................................................................. 15 2.3.1. Lnh thay i mt khu ................................................................................................. 15 2.3.2. Lnh xem, thit lp ngy, gi........................................................................................ 15 2.3.3. Lnh kim tra nhng ai ang s sng h thng ............................................................ 15 2.3.4. Thay i ni dung du nhc shell ................................................................................. 15 2.3.5. Lnh gi ngn ng tnh ton s hc .............................................................................. 16 Chng 3. H THNG FILE ........................................................................................................ 17 3.1 Tng quan v h thng file ................................................................................................... 17 3.1.1. Mt s khi nim........................................................................................................... 17 3.1.2. S b kin trc ni ti ca h thng file ....................................................................... 18 3.1.3. H tr nhiu h thng File ............................................................................................ 20 3.1.4. Lin kt tng trng (lnh ln) ....................................................................................... 21 3.2 Quyn truy nhp th mc v file .......................................................................................... 22 3.2.1 Quyn truy nhp ............................................................................................................. 22 3.2.2. Cc lnh c bn ............................................................................................................. 23 3.3 Thao tc vi th mc ............................................................................................................ 25 3.3.1 Mt s th mc c bit ................................................................................................. 25 3.3.2 Cc lnh c bn v th mc ........................................................................................... 26 3.4. Cc lnh lm vic vi file .................................................................................................... 28 3.4.1 Cc kiu file c trong Linux .......................................................................................... 28 3.4.2. Cc lnh to file ............................................................................................................ 29 -1-

3.4.3 Cc lnh thao tc trn file .............................................................................................. 30 3.4.4 Cc lnh thao tc theo ni dung file ............................................................................... 32 3.4.5 Cc lnh tm file ............................................................................................................. 35 3.5 Nn v sao lu cc file .......................................................................................................... 37 3.5.1 Sao lu cc file (lnh tar) ............................................................................................... 37 3.5.2 Nn d liu ..................................................................................................................... 38 CHNG 4. QUN TR H THNG V NGI DNG ........................................................ 41 4.1. Qun tr ngi dng ............................................................................................................. 41 4.1.1. Ti khon ngi dng ................................................................................................... 41 4.1.2. Cc lnh c bn qun l ngi dng ............................................................................. 41 4.2. Cc lnh c bn lin quan n nhm ngi dng................................................................ 44 4.2.1. Nhm ngi dng v file /etc/group ............................................................................. 45 4.2.2. Cc lnh c bn khc c lin quan n ngi dng ...................................................... 46 4.3. Qun tr h thng ................................................................................................................. 47 4.3.1. Qun l tin trnh .......................................................................................................... 47 4.3.2 Qun tr phn mm ......................................................................................................... 51 4.3.3. Qun tr h thng Linux ................................................................................................ 51 Chng 5. TRUYN THNG V MNG UNIX-LINUX .......................................................... 53 5.1. Lnh truyn thng ................................................................................................................ 53 5.1.1. Lnh write ..................................................................................................................... 53 5.1.2. Lnh mail ...................................................................................................................... 53 5.1.3. Lnh talk ....................................................................................................................... 54 5.2 Cu hnh Card giao tip mng .............................................................................................. 54 5.3. Cc dch v mng ................................................................................................................ 55 5.3.1 H thng tin mng NIS .................................................................................................. 55 5.3.2. Ci t v cu hnh cho my ch NIS ........................................................................... 56 5.3.3. Ci t cc my trm NIS ............................................................................................. 56 5.3.4. La chn cc file map ................................................................................................... 57 5.3.5. S dng cc file map passwd v group ......................................................................... 58 5.4 H thng file trn mng ........................................................................................................ 59 5.4.1 Ci t NFS .................................................................................................................... 59 5.4.2 Khi ng v dng NFS ................................................................................................ 59 5.4.3 Cu hnh NFS server v Client ...................................................................................... 60 5.4.4 S dng mount ............................................................................................................... 60 5.4.5 Unmount......................................................................................................................... 61 5.4.6 Mount t ng qua tp cu hnh .................................................................................... 61 Chng 6. LP TRNH SHELL V LP TRNH C TRN LINUX ........................................... 62 6.1. Cch thc pipes v cc yu t c bn lp trnh trn shell .................................................... 62 6.1.1. Cch thc pipes ............................................................................................................. 62 6.1.2. Cc yu t c bn lp trnh trong shell ..................................................................... 62 6.2. Mt s lnh lp trnh trn shell ............................................................................................ 65 6.2.1. S dng cc ton t bash .............................................................................................. 65 6.2.2. iu khin lung ........................................................................................................... 67 -2-

6.2.3 Cc hm shell ................................................................................................................. 75 6.2.4. Cc ton t nh hng vo ra ...................................................................................... 75 6.2.5. Hin dng vn bn ........................................................................................................ 76 6.2.5. Lnh read c d liu cho bin ngi dng.................................................................. 76 6.2.6. Lnh set ......................................................................................................................... 77 6.2.7. Tnh ton trn cc bin .................................................................................................. 77 6.2.8. Chng trnh v d ........................................................................................................ 77 6.3. Lp trnh C trn UNIX ......................................................................................................... 78 6.3.1. Trnh bin dch gcc ....................................................................................................... 78 6.3.2. Cng c GNU make ...................................................................................................... 80 6.3.3. Lm vic vi file ........................................................................................................... 81 6.3.4. Th vin lin kt ........................................................................................................... 83 6.3.5 Cc cng c cho th vin ............................................................................................... 89

-3-

YU CU V NI DUNG CHI TIT


Tn hc phn: H iu hnh m ngun m B mn ph trch ging dy: K thut my tnh M hc phn: 17303 TS tit 60 L thuyt 30 Thc hnh/Xemina 30 T hc 0 Loi hc phn: 2 Khoa ph trch: CNTT Tng s TC: 3 Bi tp ln 0 n mn hc 0

iu kin tin quyt: Sinh vin phi hc xong cc hc phn sau mi c ng k hc phn ny: Kin trc my tnh, Nguyn l h iu hnh Mc tiu ca hc phn: - Nm bt c v h iu hnh m ngun m. Ni dung ch yu - Cc kin thc c bn v h iu hnh Linux. Ni dung chi tit ca hc phn: PHN PHI S TIT TS LT BT TH 2 2 0,5 0,5 1 10 3 6 0.5 1 1 8 4 4 1 1 2 12 7 4 0,5 0,5 1 1 8 4 4

TN CHNG MC Chng 1: Gii thiu Unix Linux 1.1. Gii thiu chung 1.2. Cc thnh phn c bn ca Linux 1.3. S dng lnh trong Linux Chng 2. Thao tc vi h thng 2.1. Tin trnh khi ng Linux 2.2. Th tc ng nhp v cc lnh thot khi h thng 2.3. Mt s lin quan n h thng Chng 3. Qun tr h thng v ngi dng 3.1 Qun l ngi dng 3.2 Qun l nhm cc vn lin quan 3.3 Qun tr h thng Chng 4. H thng file 4.1. Tng quan v h thng file 4.2. Quyn truy nhp th mc v file 4.3. Thao tc vi th mc 4.4. Cc lnh lm vic vi file 4.5 Nn v sao lu cc file Chng 5. Truyn thng v mng

KT

-4-

5.1. Lnh truyn thng 5.2 Cu hnh Card giao tip mng 5.3. Cc dch v mng 5.4 H thng file trn mng Chng 6: Lp trnh shell v lp trnh C trn Linux 6.1. Cch thc pipes v cc yu t c bn lp trnh trn shell 6.2. Mt s lnh lp trnh trn shell 6.3. Lp trnh C trn Linux 20

1 1 1 1 7 2 2 1

12

Nhim v ca sinh vin : Tham d cc bui thuyt trnh ca gio vin, t hc, t lm bi tp do gio vin giao, tham d cc bui thc hnh, cc bi kim tra nh k v cui k, hon thnh bi tp ln theo yu cu. Ti liu hc tp : - Richard Petersen - Linux: The Complete Reference, Sixth Edition Nh xut bn McGraw-Hill Osborne Media ,2007. - Michael Rash - Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort Nh xut bn No Starch Press ,2007 - Christopher Negus - Linux Bible Nh xut bn Wiley, 2007 - Andrew Hudson v Paul Hudson Fedora 7 UNLEASHED, 2007 Hnh thc v tiu chun nh gi sinh vin: - nh gi da trn tnh hnh tham d bui hc trn lp, cc bui thc hnh, im kim tra thng xuyn v im kt thc hc phn. - Hnh thc thi cui k : thi vit. Thang im: Thang im ch A, B, C, D, F im nh gi hc phn Z = 0.3X + 0.7Y. Bi ging ny l ti liu chnh thc v thng nht ca B mn K thut my tnh, Khoa Cng ngh Thng tin v c dng ging dy cho sinh vin. Ngy ph duyt: 15 / 6 / 2010 Trng B mn: ThS. Ng Quc Vinh

-5-

Chng 1. GII THIU CHUNG V LINUX


1.1. Gii thiu chung 1.1.1. Tng quan v Linux Linus Tovalds (mt sinh vin Phn lan) a ra nhn (phin bn u tin) cho h iu hnh Linux vo thng 8 nm 1991 trn c s ci tin mt phin bn UNIX c tn Minix do Gio s Andrew S. Tanenbaum xy dng v ph bin. Nhn Linux tuy nh song l t ng gi. Kt hp vi cc thnh phn trong h thng GNU, h iu hnh Linux c hnh thnh. V cng t thi im , theo t tng GNU, hng nghn, hng vn chuyn gia trn ton th gii (nhng ngi ny hnh thnh nn cng ng Linux) tham gia vo tin trnh pht trin Linux v v vy Linux ngy cng p ng nhu cu ca ngi dng. Nm 1991, Linus Torvald vit thm phin bn nhn v0.01 (kernel) u tin ca Linux a ln cc BBS, nhm ngi dng mi ngi cng s dng v pht trin. Nm 1994, h iu hnh Linux phin bn 1.0 c chnh thc pht hnh v ngy cng nhn c s quan tm ca ngi dng. Nm 1995, nhn 1.2 c ph bin. Phin bn ny h tr mt phm vi rng v phong ph phn cng, bao gm c kin trc tuyn phn cng PCI mi Nm 1996, nhn Linux 2.0 c ph bin. Phn bn ny h tr kin trc phc hp, bao gm c cng Alpha 64-bit y , v h tr kin trc a b x l. Phn phi nhn Linux 2.0 cng thi hnh c trn b x l Motorola 68000 v kin trc SPARC ca SUN. Cc thi hnh ca Linux da trn vi nhn GNU Mach cng chy trn PC v PowerMac. Nm 1999, phin bn nhn v2.2 mang nhiu c tnh u vit v gip cho Linux bt u tr thnh i th cnh tranh ng k ca MS Windows trn mi trng server. Nm 2000 phin bn nhn v2.4 h tr nhiu thit b mi (a x l ti 32 chip, USB, RAM trn 2GB...) bt u t chn vo th trng my ch cao cp. Cc phin bn ca Linux c xc nh bi h thng ch s theo mt s mc (hai hoc ba mc). Trong quy c rng vi cc ch s t mc th hai tr i, nu l s chn th dng nhn kh n nh v tng i hon thin, cn nu l s l th dng nhn vn ang c pht trin tip. 1.1.2. Vn bn quyn V l thuyt, mi ngi c th khi to mt h thng Linux bng cch tip nhn bn mi nht cc thnh phn cn thit t cc site ftp v bin dch chng. Trong thi k u tin, ngi dng Linux phi tin hnh ton b cc thao tc ny v v vy cng vic l kh vt v. Tuy nhin, do c s tham gia ng o ca cc c nhn v nhm pht trin Linux, tin hnh thc hin nhiu gii php nhm lm cho cng vic khi to h thng vt v. Mt trong nhng gii php in hnh nht l cung cp tp cc gi chng trnh tin dch, chun ha. Nhng tp hp nh vy hay nhng bn phn phi l ln hn nhiu so vi h thng Linux c s. Chng thng bao gm cc tin ch b sung cho khi to h thng, cc th vin qun l, cng nh nhiu gi c tin dch, sn sng khi to ca nhiu b cng c UNIX dng chung, chng hn nh phc v tin, trnh duyt web, cng c x l, son tho vn bn v thm ch cc tr chi. Cch thc phn phi ban u rt n gin song ngy cng c nng cp v hon thin bng phng tin qun l gi tin tin. Cc bn phn phi ngy nay bao gm cc c s d liu tin ha gi, cho php cc gi d dng c khi to, nng cp v loi b. Nh phn phi u tin thc hin theo phng chm ny l Slakware, v chnh h l nhng chuyn bin mnh m trong cng ng Linux i vi cng vic qun l gi khi to
-6-

Linux. Tin ch qun l gi RPM (RedHat Package Manager) ca cng ty RedHat l mt trong nhng phng tin in hnh. Nhn Linux l phn mm t do c phn phi theo Giy php s hu cng cng phn mm GNU GPL. 1.1.3. Cc thnh phn tch hp H iu hnh Linux Linux s dng rt nhiu thnh phn t D n phn mm t do GNU, t h iu hnh BSDca i hc Berkeley v t h thng X-Window ca MIT. Th vin h thng chnh ca Linux c bt ngun t D n GNU, sau c rt nhiu ngi trong cng ng Linux pht trin tip, nhng pht trin tip theo nh vy ch yu lin quan ti vic gii quyt cc vn nh thiu vng a ch (li trang), thiu hiu qu v g ri. Mt s thnh phn khc ca D n GNU, chng hn nh trnh bin dch GNU C (gcc), vn l cht lng cao nn c s dng nguyn xy trong Linux. Cc tool qun l mng c bt ngun t m 4.3BSD song sau c cng ng Linux pht trin, chng hn nh th vin ton hc ng x l du chm ng Intel v cc trnh iu khin thit b phn cng m thanh PC. Cc tool qun l mng ny sau li c b sung vo h thng BSD. H thng Linux c duy tr gn nh bi mt mng li khng cht ch cc nh pht trin phn mm cng tc vi nhau qua Internet, mng li ny gm cc nhm nh v c nhn chu trch nhim duy tr tnh ton vn ca tng thnh phn. Mt lng nh cc site phn cp ftp Internat cng cng ng vai tr nh kho theo chun de facto cha cc thnh phn ny. Ti liu Chun phn cp h thng file (File System Hierarchy Standard) c cng ng Linux duy tr nhm gi tnh tng thch khc phc c s khc bit rt ln gia cc thnh phn h thng. 1.1.4. Mt s c im chnh ca Linux Di y trnh by mt s c im chnh ca ca h iu hnh Linux hin ti: Linux tng thch vi nhiu h iu hnh nh DOS, MicroSoft Windows...: Cho php ci t Linux cng vi cc h iu hnh khc trn cng mt cng. Linux c th truy nhp n cc file ca cc h iu hnh cng mt a. Linux cho php chy m phng cc chng trnh thuc cc h iu hnh khc. Do gi c chun ca UNIX nn s chuyn i gia Linux v cc h UNIX khc l d dng. Linux l mt h iu hnh UNIX tiu biu vi cc c trng l a ngi dng, a chng trnh v a x l. Linux c giao din ho (GUI) tha hng t h thng X-Window. Linux h tr nhiu giao thc mng, bt ngun v pht trin t dng BSD. Thm vo , Linux cn h tr tnh ton thi gian thc. Linux kh mnh v chy rt nhanh ngay c khi nhiu tin trnh hoc nhiu ca s. Linux c ci t trn nhiu chng loi my tnh khc nhau nh PC, Mini v vic ci t kh thun li. Tuy nhin, hin nay cha xut hin Linux trn my tnh ln (mainframe). Linux ngy cng c h tr bi cc phn mm ng dng b sung nh son tho, qun l mng, qun tr c s d liu, bng tnh... Linux h tr tt cho tnh ton song song v my tnh cm (PC-cluster) l mt hng nghin cu trin khai ng dng nhiu trin vng hin nay. L mt h iu hnh vi m ngun m, c pht trin qua cng ng ngun m (bao gm c Free Software Foundation) nn Linux pht trin nhanh. Linux l mt trong mt s t cc h iu hnh c quan tm nhiu nht trn th gii hin nay.
-7-

Linux l mt h iu hnh h tr a ngn ng mt cch ton din nht. Do Linux cho php h tr cc b m chun t 16 bit tr ln (trong c cc b m ISO10646, Unicode) cho nn vic bn a ha trn Linux l trit nht trong cc h iu hnh. Tuy nhin cng tn ti mt s kh khn lm cho Linux cha thc s tr thnh mt h iu hnh ph dng, di y l mt s kh khn in hnh: Tuy c cng c h tr ci t, tuy nhin, vic ci t Linux cn tng i phc tp v kh khn. Kh nng tng thch ca Linux vi mt s loi thit b phn cng cn thp do cha c cc trnh iu khin cho nhiu thit b, Phn mm ng dng chy trn nn Linux tuy phong ph song so vi mt s h iu hnh khc, c bit l khi so snh vi MS Windows, th vn cn c khong cch. Vi s h tr ca nhiu cng ty tin hc hng u th gii (IBM, SUN, HP...) v s tham gia pht trin ca hng vn chuyn gia trn ton th gii thuc cng ng Linux, cc kh khn ca Linux chc chn s nhanh chng c khc phc. 1.2. Cc thnh phn c bn ca Linux H thng Linux, c thi hnh nh mt h iu hnh UNIX truyn thng, gm shell v ba thnh phn ( dng m chng trnh) sau y: Nhn h iu hnh chu trch nhim duy tr cc i tng tru tng quan trng ca h iu hnh, bao gm b nh o v tin trnh. Cc m un chng trnh trong nhn c c quyn trong h thng, bao gm c quyn thng trc b nh trong. Th vin h thng xc nh mt tp chun cc hm cc ng dng tng tc vi nhn, v thi hnh nhiu chc nng ca h thng nhng khng cn c cc c quyn ca m un thuc nhn. Mt h thng con in hnh c thi hnh da trn th vin h thng l h thng file Linux. Tin ch h thng l cc chng trnh thi hnh cc nhim v qun l ring r, chuyn bit. Mt s tin ch h thng c gi ra ch mt ln khi ng v cu hnh phng tin h thng, mt s tin ch khc, theo thut ng UNIX c gi l trnh chy ngm (daemon), c th chy mt cch thng xuyn (thng theo chu k), iu khin cc bi ton nh hng ng cc kt ni mng mi n, tip nhn yu cu logon, hoc cp nht cc file log. Tin ch (hay lnh) c sn trong h iu hnh (di y tin ch c coi l lnh thng trc). Ni dung chnh yu ca ti liu ny gii thiu chi tit v mt s lnh thng dng nht ca Linux. H thng file s c gii thiu trong chng 3. Trong cc chng sau c cp ti nhiu ni dung lin quan n nhn v shell, song di y l mt s nt s b v chng. 1.2.1. Nhn h thng (kernel) Nhn (cn c gi l h li) ca Linux, l mt b cc mdun chng trnh c vai tr iu khin cc thnh phn ca my tnh, phn phi cc ti nguyn cho ngi dng (cc tin trnh ngi dng). Nhn chnh l cu ni gia chng trnh ng dng vi phn cng. Ngi dng s dng bn phm g ni dung yu cu ca mnh v yu cu c nhn gi ti shell: Shell phn tch lnh v gi cc chng trnh tng ng vi lnh thc hin. Mt trong nhng chc nng quan trng nht ca nhn l gii quyt bi ton lp lch, tc l h thng cn phn chia CPU cho nhiu tin trnh hin thi cng tn ti. i vi Linux, s lng tin trnh c th ln ti con s hng nghn. Vi s lng tin trnh ng thi nhiu nh vy, cc thut ton lp lch cn phi hiu qu: Linux thng lp lch theo ch Round Robin (RR) thc hin vic lun chuyn CPU theo lng t thi gian.
-8-

Thnh phn quan trng th hai trong nhn l h thng cc mun chng trnh (c gi l li gi h thng) lm vic vi h thng file. Linux c hai cch thc lm vic vi cc file: lm vic theo byte (k t) v lm vic theo khi. Mt c im ng ch l file trong Linux c th c nhiu ngi cng truy nhp ti nn cc li gi h thng lm vic vi file cn m bo vic file c truy nhp theo quyn v c chia x cho ngi dng. 1.2.2. H v (shell) Ngi dng mong mun my tnh thc hin mt cng vic no th cn g lnh th hin yu cu ca mnh h thng p ng yu cu . Shell l b dch lnh v hot ng nh mt kt ni trung gian gia nhn vi ngi dng: Shell nhn dng lnh do ngi dng a vo; v t dng lnh ni trn, nhn tch ra cc b phn nhn c mt hay mt s lnh tng ng vi cc on vn bn c trong dng lnh. Mt lnh bao gm tn lnh v tham s: t u tin l tn lnh, cc t tip theo (nu c) l cc tham s. Tip theo, shell s dng nhn khi sinh mt tin trnh mi (khi to tin trnh) v sau , shell ch i tin trnh con ny tin hnh, hon thin v kt thc. Khi shell sn sng tip nhn dng lnh ca ngi dng, mt du nhc shell (cn gi l du nhc nhp lnh) xut hin trn mn hnh. Linux c hai loi shell ph bin l: C-shell (du nhc %), Bourne-shell (du nhc $) v mt s shell pht trin t cc shell ni trn (chng hn, TCshell - tcsh vi du nhc ngm nh > pht trin t C-shell v GNU Bourne - bash vi du nhc bash # pht trin t Bourneshell). Du mi phn bit shell ni trn khng phi hon ton r rng do Linux cho php ngi dng thay i li du nhc shell nh vic thay gi tr cc bin mi trng PS1 v PS2. Trong ti liu ny, chng ta s dng k hiu "hng ro #" biu th du nhc shell. C-shell c tn gi nh vy l do cch vit lnh v chng trnh lnh Linux ta nh ngn ng C. Bourne-shell mang tn tc gi ca n l Steven Bourne. Mt s lnh trong C- shell (chng hn lnh alias) khng cn c trong Bourne-shell v v vy nhn bit h thng ang lm vic vi shell no, chng ta g lnh: # alias Nu mt danh sch xut hin th shell ang s dng l C-shell; ngc li, nu xut hin thng bo "Command not found" th shell l Bourne-shell. Lnh c chia thnh 3 loi lnh: Lnh thng trc (c sn ca Linux). Tuyt i a s lnh c gii thiu trong ti liu ny l lnh thng trc. Chng bao gm cc lnh c cha sn trong shell v cc lnh thng trc khc. File chng trnh ngn ng my: chng hn, ngi dng vit trnh trn ngn ng C qua b dch gcc (bao gm c trnh kt ni link) to ra mt chng trnh trn ngn ng my. File chng trnh shell (Shell Scrip). Khi kt thc mt dng lnh cn g phm ENTER shell phn tch v thc hin lnh. 1.3. S dng lnh trong Linux Nh gii thiu phn trn, Linux l mt h iu hnh a ngi dng, a nhim, c pht trin bi hng nghn chuyn gia tin hc trn ton th gii nn h thng lnh cng ngy cng phong ph; n thi im hin nay Linux c khong hn mt nghn lnh. Tuy nhin ch c khong vi chc lnh l thng dng nht i vi ngi dng. Cng nh ni trn, ngi dng lm vic vi my tnh thng qua vic s dng trm cui: ngi dng a yu cu ca mnh bng cch g "lnh" t bn phm v giao cho h iu hnh x l. Khi ci t Linux ln my tnh c nhn th my tnh c nhn va ng vai tr trm cui, va ng vai tr my tnh x l.
-9-

1.3.1. Dng tng qut ca lnh Linux C php lnh: # <Tn lnh> [<cc tham s>] Trong : Tn lnh l mt dy k t, khng c du cch, biu th cho mt lnh ca Linux hay mt chng trnh. Ngi dng cn h iu hnh p ng yu cu g ca mnh th phi chn ng tn lnh. Tn lnh l bt buc phi c khi g lnh. Cc tham s c th c hoc khng c, c vit theo quy nh ca lnh m chng ta s dng, nhm cung cp thng tin v cc i tng m lnh tc ng ti. ngha ca cc du [, <, >, ] c gii thch phn quy tc vit lnh. Cc tham s c phn ra thnh hai loi: tham s kha (sau y gi l "ty chn") v tham s v tr. Tham s v tr thng l tn file, th mc v thng l cc i tng chu s tc ng ca lnh. Khi g lnh, tham s v tr c thay bng nhng i tng m ngi dng cn hng tc ng ti. Tham s kha chnh l nhng tham s iu khin hot ng ca lnh theo cc trng hp ring. Trong Linux, tham s kha thng bt u bi du tr "-" hoc hai du tr lin tip "--". Mt lnh c th c mt s hoc rt nhiu tham s kha. V d, khi ngi dng g lnh xem thng tin v cc file: # ls -l Trong lnh ny: ls : l tn lnh thc hin vic a danh sch cc tn file/ th mc con trong mt th mc, -l : l tham s kha, cho bit yu cu xem y thng tin v cc i tng hin ra. Ch , trong tham s kha ch ci (ch "l") phi i ngay sau du tr "-". Ch : Linux (v UNIX ni chung) c xy dng trn ngn ng lp trnh C, v vy khi g lnh phi phn bit ch thng vi ch hoa. Ngoi tr mt s ngoi l, trong Linux chng ta thy ph bin l: o Cc tn lnh l ch thng, o Mt s tham s khi biu din bi ch thng hoc ch hoa s c ngha hon ton khc nhau). o Tn cc bin mi trng cng thng dng ch hoa. Linux phn bit siu ngi dng (superuser hoc root) vi ngi dng thng thng. Trong tp hp lnh ca Linux, c mt s lnh cng nh mt s tham s kha m ch siu ngi dng mi c php s dng. Mt dng lnh c th c nhiu hn mt lnh, trong lnh sau c ngn cch bi vi lnh i ngay trc bng du ";" hoc du "|". Khi g lnh, nu dng lnh qu di, Linux cho php ngt dng lnh xung dng di bng cch thm k t bo hiu chuyn dng "\" ti cui dng. Sau khi ngi dng g xong dng lnh, shell tip nhn dng lnh ny v phn tch ni dung vn bn ca lnh. Nu lnh c g ng th n c thc hin; ngc li, trong trng hp c sai st khi g lnh th shell thng bo v sai st vdu nhc shell li hin ra ch lnh tip theo ca ngi dng. V ph bin, nu nh sau khi ngi dng g lnh, khng thy thng bo sai st hin ra th c ngha lnh c thc hin mt cch bnh thng.

- 10 -

1.3.2. Cc k hiu i din Khi chng ta s dng cc cu lnh v file v th mc, chng ta c th s dng cc k t c bit c gi l cc k t i din xc nh tn file, tn th mc.: K t ngha * Tng ng vi th t bt k ca mt hay nhiu k t ? Tng ng vi mt k t bt k [] Tng ng vi mt trong nhng k t trong ngoc hoc gii hn V d: Jo* : Cc file bt u vi Jo Jo*y : Cc file bt u vi Jo v kt thc vi y Ut*l*s.c : Cc file bt u vi Ut, cha mt k t l v kt thc vi s.c ?.h : Cc file bt u vi mt k t n, theo sau bi .h Doc[0-9].txt : Cc file c tn Doc0.txt, Doc1.txt .Doc9.txt Doc0[A-Z].txt : Cc file c tn Doc0A.txt, Doc0B.txt Doc0Z.txt Cc k hiu lin quan n c php cu lnh c s dng bi phn ln cc cu lnh. Chng cung cp mt cch thun tin v ng nht xc nh cc mu ph hp. Chng tng t vi cc k t i din, nhng chng mnh hn rt nhiu. Chng cung cp mt phm vi rng cc mu la chn. K t ngha . Tng ng vi mt k t n bt k ngoi tr dng mi * Tng ng vi khng hoc nhiu hn cc k t ng trc ^ Tng ng vi bt u ca mt dng $ Tng ng vi kt thc mt dng \< Tng ng vi bt u mt t \> Tng ng vi kt thc mt t [] Tng ng vi mt trong cc k t bn trong hoc mt dy cc k t [^] Tng ng vi cc k t bt k khng nm trong ngoc \ Ly k hiu theo sau du gch ngc 1.3.3. Tr gip lnh Do Linux l mt h iu hnh rt phc tp vi hng nghn lnh v mi lnh li c th c ti vi hoc vi chc tnh hung s dng do chng cho php c nhiu ty chn lnh. tr gip cch s dng cc cu lnh, Linux cho php ngi dng s dng cch thc gi trang Man c c cc thng tin y gii thiu ni dung cc lnh. C php lnh: # man <tn-lnh> CU HI V BI TP 1. Tm hiu v cc phin bn pht trin ca Linux. 2. Trnh by nguyn tc thc hin lnh trn Linux 3. Thc hin ci t h iu hnh Linux c th trn my tnh 4. Nghin cu cc thao tc giao tip vi Linux; so snh cc thao tc vi h iu hnh Windows.

- 11 -

Chng 2. THAO TC VI H THNG


2.1. Tin trnh khi ng Linux Mt trong nhng cch thc khi ng Linux ph bin nht l cch thc do chng trnh LILO (LInux LOader) thc hin. Chng trnh LILO c np ln a ca my tnh khi ci t h iu hnh Linux. LILO c np vo Master Boot Record ca a cng hoc vo Boot Sector ti phn vng khi ng (trn a cng hoc a mm). Gi s my tnh ca chng ta ci t Linux v s dng LILO khi ng h iu hnh. LILO thch hp vi vic trn my tnh c ci t mt s h iu hnh khc nhau v theo , LILO cn cho php ngi dng chn la h iu hnh khi ng. Giai on khi ng Linux ty thuc vo cu hnh LILO c la chn trong tin trnh ci t Linux. Trong tnh hung n gin nht, Linux c khi ng t a cng hay a mm khi ng. Tin trnh khi ng Linux c th c m t theo s sau: LILO Kernel init

Theo s ny, LILO c ti vo my thc hin m vic u tin l a nhn vo b nh trong v sau ti chng trnh init thc hin vic khi ng Linux. Nu ci t nhiu phin bn Linux hay ci Linux cng cc h iu hnh khc (trong cc trng hp nh th, mi phin bn Linux hoc h iu hnh khc c gn nhn - label phn bit). Khi ta nhp nhn ca mt trong nhng h iu hnh hin c trn my trn dng thng bo LILO boot: V d: LILO boot: linux Sau khi Linux c chn khi ng, trnh init thc hin, chng ta s thy mt khong vi chc dng thng bo cho bit h thng phn cng c Linux nhn din v thit lp cu hnh cng vi tt c trnh iu khin phn mm c np khi khi ng. Ti thi im khi ng h thng init thc hin vai tr u tin ca mnh l chy chng trnh shell trong file /etc/inittab v cc dng thng bo trn y chnh l kt qu ca vic chy chng trnh shell . Sau khi chng trnh shell trn c thc hin xong, bt u qu trnh ngi dng ng nhp (login) vo h thng. 2.2. Th tc ng nhp v cc lnh thot khi h thng 2.2.1. ng nhp Sau khi h thng Linux khi ng xong, trn mn hnh xut hin du nhc ng nhp. Ti du nhc ng nhp, ta nhp tn ng nhp, km theo mt mt khu ng nhp. May1 login: root Password: Sau khi ng nhp thnh cng, du nhc shell xut hin (#) mi ngi dng thc hin cc thao tc tip theo. Last login: Fri Oct 27 14:16:09 on tty2 Root[may1 /root]# 2.2.2. Ra khi h thng C rt nhiu cch cho php thot khi h thng, y chng ta xem xt mt s cch thng dng nht.

- 12 -

Dng t hp phm Ctrl + Alt + Del: y l cch n gin nht m bo thot khi h iu hnh Linux. Nu ang lm vic trong mi trng X Window, cn nhn t hp phm Ctrl+Alt+BackSpace trc. Dng lnh shutdown: shutdown [ty-chn] <time> [cnh-bo] Lnh ny cho php dng tt c cc dch v ang chy trn h thng. Cc ty chn: -k : Khng thc s shutdown m ch cnh bo. -r : Khi ng li ngay sau khi shutdown. -h : Tt my thc s sau khi shutdown. -f : Khi ng li nhanh v b qua vic kim tra a. -F : Khi ng li v thc hin vic kim tra a. -c : B qua khng chy lnh shutdown. -t s -giy : Ch khong thi gian s-giy Hai tham s v tr cn li: time : t thi im shutdown. cnh-bo : Cnh bo n tt c ngi dng trn h thng. Dng lnh halt: halt [ty-chn] Lnh ny tt hn my. Cc tu chn: -w : khng thc s tt my nhng vn ghi cc thng tin ln file /var/log/wtmp -d : khng ghi thng tin ln file /var/log/wtmp. -n: c ngha tng t nh d song khng tin hnh vic ng b ha. -f : thc hin tt my ngay m khng thc hin ln lt vic dng cc dch v c trn h thng. -i : ch thc hin dng tt c cc dch v mng trc khi tt my. Ch : Trc khi thc hin tt my, cn phi lu li d liu trc trnh b mt C th s dng lnh exit tr v du nhc ng nhp hoc kt thc phin lm vic bng lnh logout. 2.2.3. Khi ng li h thng Ngoi vic thot khi h thng nh cc cch thc trn y, khi cn thit c th khi ng li h thng nh lnh reboot. C php lnh: reboot [ty-chn] Lnh ny cho php khi ng li h thng. Ni chung th ch siu ngi dng mi c php s dng lnh reboot, tuy nhin, nu h thng ch c duy nht mt ngi dng ang lm vic th lnh reboot vn c thc hin song h thng i hi vic xc nhn mt khu. Cc ty chn ca lnh reboot (l -w, -d, -n, -f, -i) c ngha tng t nh trong lnh halt. 2.2.4. Khi ng vo ch ho Linux cho php nhiu ch khi ng, nhng ch ny c lit k trong file /etc/inittab. Di y l ni dung ca file ny: # inittab This file describes how the INIT process should set up # the system in a certain run-level. #
- 13 -

# Author: Miquel van Smoorenburg, <miquelsdrinkel.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) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # 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 # 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 khi ng s 3 l ch khi ng vo ch Text, v ch 5 l khi ng vo ch ho. Nh vy cho my tnh khi ng vo ch ho ta sa li dng cu hnh id:3:initdefault: thnh id:5:initdefault:
- 14 -

2.3. Mt s lin quan n h thng 2.3.1. Lnh thay i mt khu C php lnh: passwd [ty-chn] [tn-ngi-dng] Cc ty chn: -k : i hi phi g li mt khu c trc khi thay i mt khu mi. -f : Khng cn kim tra mt khu c. (Ch supervisor mi c quyn) -l : Kha mt ti khon ngi dng. (Ch supervisor mi c quyn) -stdin : vic nhp mt khu ngi dng ch c tin hnh t thit b vo chun khng th tin hnh t ng dn (pipe). Nu khng c tham s ny cho php nhp mt khu c t thit b vo chun hoc t ng dn. -u : M kha mt ti khon. (Ch supervisor mi c quyn) -d : Xa b mt khu ca ngi dng. (Ch supervisor mi c quyn) -S : hin th thng tin ngn gn v trng thi mt khu ca ngi dng c a ra. (Ch supervisor mi c quyn) Nu tn-ngi-dng khng c trong lnh th ngm nh l chnh ngi dng g lnh ny. 2.3.2. Lnh xem, thit lp ngy, gi Lnh xem, thit lp ngy C php lnh: date [-ty_chn] [ngy gi] Lnh xem, thit lp gi C php lnh: time [-ty_chn] [+nh-dng] Lnh xem lch C php lnh: cal [ty-chn] [<thng> [<nm>]] 2.3.3. Lnh kim tra nhng ai ang s sng h thng C php lnh: who kim tra nh danh ca ngi ang s dng hin thi, dng lnh: who am i 2.3.4. Thay i ni dung du nhc shell Trong Linux c hai loi du nhc: du nhc cp mt (du nhc shell) xut hin khi nhp lnh v du nhc cp hai (du nhc nhp liu) xut hin khi lnh cn c d liu c nhp t bn phm v tng ng vi hai bin nhc tn l PS1 v PS2. PS1 l bin h thng tng ng vi du nhc cp 1: Gi tr ca PS1 chnh l ni dung hin th ca du nhc shell. nhn bit thng tin h thng hin ti, mt nhu cu t ra l cn thay i gi tr ca cc bin h thng PS1 v PS2. Linux cho php thay i gi tr ca bin h thng PS1 bng lnh gn tr mi cho n. Lnh ny c dng: # PS1='<dy k t>' Nm (5) k t u tin ca lnh gn phi c vit lin tip nhau. Dy k t nm gia cp hai du nhy n (c th s dng cp hai du kp) v khng c php cha du nhy. Dy k t ny bao gm cc cp k t iu khin v cc k t khc, cho php c th c du cch. Cp k t iu khin gm hai k t, k t u tin l du s xui "\" cn k t th hai nhn mt trong cc trng hp lit k trong bng di y. Cp k t iu khin ngha \! Hin th th t ca lnh trong lch s \# Hin th th t ca lnh \$ Hin th du $. i vi superuser th hin th du #
- 15 -

Cp k t iu khin \\ \d \h \n \s \t \u \W \w

ngha Hin th du s (\) Hin th ngy hin ti Hin th tn my (hostname) K hiu xung dng Hin th tn h shell Hin th gi hin ti Hin th tn ngi dng Hin th tn thc s ca th mc hin thi Hin th tn y ca th mc hin thi

2.3.5. Lnh gi ngn ng tnh ton s hc Linux cung cp mt ngn ng tnh ton vi chnh xc ty thng qua lnh bc. Khi yu cu lnh ny, ngi dng c cung cp mt ngn ng tnh ton (v cho php lp trnh tnh ton c dng ngn ng lp trnh C) hot ng theo thng dch. Trong ngn ng lp trnh c cung cp (tm thi gi l ngn ng bc), tn ti rt nhiu cng c h tr tnh ton v lp trnh tnh ton: kiu php ton s hc phong ph, php ton so snh, mt s hm chun, bin chun, cu trc iu khin, cch thc nh ngha hm, cch thc thay i chnh xc, t li ch thch... Ch cn s dng mt phn nh tc ng ca lnh bc, chng ta c mt "my tnh s bm tay" hiu qu. C php lnh: bc [ty-chn] [file...] Cc tu chn: -l, --mathlib : php tnh theo chun th vin ton hc -w, --warn : thc hin php tnh khng tun theo chun POSIX -s, --standard : php tnh chnh xc theo chun ca ngn ng POSIX -q, --quiet : khng hin ra li gii thiu v phn mm GNU CU HI V BI TP 1. Thc hin cc thao tc ng nhp, thot khi h thng trn h iu hnh Linux 2. Thc hin cc thao tc lin quan n h thng Linux 3. Thc hin cc thao tc s dng lnh bc tnh ton mt bi ton s hc n gin.

- 16 -

Chng 3. H THNG FILE


3.1 Tng quan v h thng file 3.1.1. Mt s khi nim File l mt tp hp d liu c t chc c h iu hnh qun l theo yu cu ca ngi dng. Cch t chc d liu trong file thuc v ch ca n l ngi to ra file. H iu hnh m bo cc chc nng lin quan n file nn ngi dng khng cn bit file ca mnh lu vng no trn a t, bng cch no c/ghi ln cc vng ca a t m vn thc hin c yu cu tm kim, x l ln cc file. H iu hnh qun l cc file theo tn gi ca file (tn file) v mt s thuc tnh lin quan n file. lm vic c vi cc file, h iu hnh khng ch qun l ni dung file m cn phi qun l cc thng tin lin quan n cc file. Th mc (directory) l i tng c dng cha thng tin v cc file (th mc cha cc file). Cc th mc cng c h iu hnh qun l trn thit b lu tr ngoi v v vy, theo ngha ny, th mc cng c coi l file song trong mt s trng hp phn bit vi "file" th mc, chng ta dng thut ng file thng thng. Khc vi file thng thng, h iu hnh li quan tm n ni dung ca th mc. Mt s ni dung sau y lin quan n tn file (bao gm c tn th mc): Tn file trong Linux c th di ti 256 k t, bao gm cc ch ci, ch s, du gch ni, gch chn, du chm. Nu trong tn file c nhiu du chm "." th xu con ca tn file t du chm cui cng c gi l phn m rng ca tn file C phn bit ch hoa v ch thng i vi tn th mc/file Nu trong tn th mc/file c cha khong trng, s phi t tn th mc/file vo trong cp du nhy kp s dng th mc/file . Mt s k t sau khng c s dng trong tn th mc/file: !, *, $, &, #... Khi s dng chng trnh mc (Midnight Commander), vic hin th tn file s b sung mt k t theo ngha: du "*" cho file kh thi trong Linux, du "~" cho file sao lu, du "." cho file n, du "@" cho file lin kt... Tp hp tt c cc file c trong h iu hnh c gi l h thng file l mt h thng thng nht. H thng file c cu trc hnh cy, c xut pht t mt th mc gc (k hiu l "/") v cho php to ra th mc con trong mt th mc bt k. Thng thng, khi khi to Linux c ngay h thng file ca n.
/(root)

sbin

usr

dev

var

etc

home

sbin

bin

lib

man

User01

User02

ch mt file hay mt th mc, chng ta cn a ra mt ng dn. V d xc nh file user01, chng ta vit nh sau: /home/user01 ng dn file xc nh t th mc gc c bit vi tn gi l ng dn tuyt i s rt kh khn cho ngi dng khi thc hin g lnh. V vy, Linux (cng nh nhiu h iu hnh khc) s dng khi nim th mc hin thi (l mt th mc trong h thng file m hin thi "ngi dng ang ") ca mi ngi dng lm vic trong h thng. Qua th mc hin thi, Linux cho php ngi dng ch mt file trong lnh ngn gn hn nhiu. ng dn c xc nh qua th mc hin thi c gi l ng dn tng i.
- 17 -

Khi mt ngi dng ng nhp vo h thng, Linux lun chuyn ngi dng vo th mc ring, v ti thi im th mc ring l th mc hin thi ca ngi dng. Th mc ring ca siu ngi dng l /root, th mc ring ca ngi dng c tn l user01 l /home/user1... Linux cho php dng lnh cd chuyn sang th mc khc (ly th mc khc lm th mc hin thi). Hai du chm ".." c dng ch th mc ngay trn th mc hin thi (cha ca th mc hin thi). Linux cn cho php ghp mt h thng file trn mt thit b nh (a mm, vng a cng cha c a vo h thng file) thnh mt th mc con trong h thng file ca h thng bng lnh mount. Cc h thng file c ghp thuc vo cc kiu khc nhau. 3.1.2. S b kin trc ni ti ca h thng file Trn a t, h thng file c coi l dy tun t cc khi lgic mi khi cha hoc 512B hoc 1024B hoc bi ca 512B l c nh trong mt h thng file. Trong h thng file, cc khi d liu c a ch ha bng cch nh ch s lin tip, mi a ch c cha trong 4 byte (32 bit). Cu trc ni ti ca h thng file bao gm 4 thnh phn k tip nhau: Boot block (dng khi ng h thng), Siu khi (Super block), Danh sch inode v Vng d liu. Siu khi Siu khi cha nhiu thng tin lin quan n trng thi ca h thng file. Trong siu khi c cc trng sau y: Kch thc ca danh sch inode (nh kch c vng khng gian trn H thng file qun l cc inode). Kch thc ca h thng file. Hai kch thc trn y tnh theo n v dung lng b nh ngoi, Mt danh sch ch s cc khi ri (thng trc trn siu khi) trong h thng file. Ch s cc khi ri thng trc trn siu khi c dng p ng nhu cu phn phi mi. Ch s ca khi ri tip theo trong danh sch cc khi ri. Ch s khi ri tip theo dng h tr vic tm kim tip cc khi ri: bt u tm t khi c ch s ny tr i. Mt danh sch cc inode ri (thng trc trn siu khi) trong h thng file. Danh sch ny cha ch s cc inode ri c dng phn phi ngay c cho mt file mi c khi to. Ch s inode ri tip theo trong danh sch cc inode ri. Ch s inode ri tip theo nh v vic tm kim tip thm inode ri: bt u tm t inode c ch s ny tr i. Hai tham s trn y to thnh cp xc nh c danh sch cc inode ri trn h thng file cc thao tc to file mi, xo file cp nht thng tin ny. Cc trng kha (lock) danh sch cc khi ri v danh sch inode ri: Trong mt s trng hp, chng hn khi h thng ang lm vic thc s vi a t cp nht cc danh sch ny, h thng khng cho php cp nht ti hai danh sch ni trn. C ch dn v vic siu khi c bin i: nh k thi gian siu khi b nh trong c cp nht li vo siu khi a t v v vy cn c thng tin v vic siu khi b nh trong khc vi ni dung b nh ngoi: nu hai bn khng ging nhau th cn phi bin i chng c ng nht. C ch dn rng h thng file ch c th c (cm ghi): Trong mt s trng hp, h thng ang cp nht thng tin t b nh ngoi th ch cho php c i vi h thng file, S lng tng cng cc khi ri trong h thng file, S lng tng cng cc inode ri trong h thng file, - 18 -

Thng tin v thit b, Kch thc khi (n v phn phi d liu) ca h thng file. Hin ti kch thc ph bin ca khi l 1KB. Trong thi gian my hot ng, theo tng giai on, nhn s a siu khi ln a nu n c bin i ph hp vi d liu trn h thng file. Inode Mi khi mt tin trnh khi to mt file mi, nhn h thng s gn cho n mt inode cha s dng. hiu r hn v inode, chng ta xem xt s lc mi quan h lin quan gia file d liu v vic lu tr trn vt dn ngoi i vi Linux. Ni dung ca file c cha trong vng d liu ca h thng file v c phn chia cc khi d liu (cha ni dung file) v hnh nh phn b ni dung file c trong mt inode tng ng. Lin kt n tp hp cc khi d liu ny l mt inode, ch thng qua inode mi c th lm vic vi d liu ti cc khi d liu: Inode cha dng thng tin v tp hp cc khi d liu ni dung file. C th quan nim rng, t hp gm inode v tp cc khi d liu nh vy l mt file vt l: inode c thng tin v file vt l, trong c a ch ca cc khi nh cha ni dung ca file vt l. Thut ng inode l s kt hp ca hai t index vi node v c s dng ph dng trong Linux. Cc inode c phn bit nhau theo ch s ca inode: chnh l s th t ca inode trong danh sch inode trn h thng file. Thng thng, h thng dng 2 bytes lu tr ch s ca inode. Vi cch lu tr ch s nh th, khng c nhiu hn 65535 inode trong mt h thng file. Nh vy, mt file ch c mt inode song mt file li c mt hoc mt s tn file. Ngi dng tc ng thng qua tn file v tn file li tham chiu n inode (tn file v ch s inode l hai trng ca mt phn t ca mt th mc). Mt inode c th tng ng vi mt hoc nhiu tn file, mi tng ng nh vy c gi l mt lin kt. Inode c lu tr ti vng danh sch cc inode. Trong tin trnh lm vic, Linux dng mt vng b nh, c gi l bng inode (trong mt s trng hp, n cn c gi tng minh l bng sao in-core inode) vi chc nng tng ng vi vng danh sch cc inode c trong h thng file, h tr cho tin trnh truy nhp d liu trong h thng file. Ni dung ca mt in-core inode khng ch cha cc thng tin trong inode tng ng m cn c b sung cc thng tin mi gip cho tin trnh x l inode. Inode bao gm cc trng thng tin sau y: Kiu file. Trong Linux phn loi cc kiu file: file thng thng (regular), th mc, c t k t, c t khi v ng dn FIFO (pipes). Linux quy nh trng kiu file c gi tr 0 tng ng l inode cha c s dng. Quyn truy nhp file. Trong Linux, file l mt ti nguyn chung ca h thng v vy quyn truy nhp file c c bit quan tm trnh nhng trng hp truy nhp khng hp l. i vi mt inode, c 3 mc quyn truy nhp lin quan n cc i tng: o Mc ch ca file (k hiu l u), o Mc nhm ngi dng ca ch nhn ca file (k hiu l g), o Mc ngi dng khc (k hiu l a). S lng lin kt i vi inode: y chnh l s lng cc tn file trn cc th mc c lin kt vi inode ny, nh danh ch nhn ca inode, nh danh nhm ch nhn: xc nh tn nhm ngi dng m ch file l mt thnh vin ca nhm ny, di ca file tnh theo byte, Thi gian truy nhp file: o Thi gian file c sa i mun nht, - 19 -

o Thi gian file c truy nhp mun nht, o Thi gian file c khi to, Bng cha a ch khi d liu ca File trong UNIX Bng cha a ch khi d liu ca file gm 13 phn t vi 10 phn t trc tip v 3 phn t gin tip: Mi phn t c di 4 bytes, cha mt s hiu ca mt khi nh trn a. Mi phn t trc tip tr ti 1 khi d liu thc s cha ni dung file. Phn t gin tip bc 1 (single indirect) tr ti 1 khi nh ngoi. Khc vi phn t trc tip, khi nh ngoi ny khng dng cha d liu ca file m li cha danh sch ch s cc khi nh ngoi v chnh cc khi nh ngoi ny mi thc s cha ni dung file. Nh vy, nu khi c di 1KB v mt ch s khi ngoi c di 4 bytes th a ch gin tip cho php nh v khng gian trn a lu tr d liu ca file ti 256KB (Khng gian b nh ngoi trong vng d liu phi dng ti l 257KB). Tng t i vi cc phn t gin tip mc cao hn. C ch qun l a ch file nh trn cho thy c s phn bit gia file nh vi file ln. File nh c di b hn v theo cch t chc nh trn, phng php truy nhp s cho php tc nhanh hn, n gin hn do ch phi lm vic vi cc phn t trc tip. Khi x l, thut ton c File tin hnh theo cc cch khc nhau i vi cc phn t trc tip v gin tip. Vng d liu Bao gm cc khi d liu, mi khi d liu c nh ch s phn bit. Khi trn vng d liu c dng cha ni dung cc file, ni dung cc th mc v ni dung cc khi nh v a ch ca cc file. Ch rng, ch s ca khi d liu c cha trong 32 bit v thng tin ny xc nh dung lng ln nht ca h thng file. 3.1.3. H tr nhiu h thng File Cc phin bn u tin ca Linux ch h tr mt h thng file duy nht l h thng file minix. Sau , vi s m rng nhn, cng ng Linux thm vo n rt nhiu kiu h thng file khc nhau v Linux tr thnh mt h iu hnh h tr rt nhiu h thng file nh: H thng file CODA: L mt h thng file mng cho php ngi dng c th kt gn cc h thng file t xa v truy cp chng nh cc h thng file cc b. H thng file EFS: L mt dng h thng file s dng cho CDROM. H thng file EXT2: (The second extended file system) l h thng c dng ch yu trn cc phin bn ca h iu hnh Linux. H thng file HFS: L h thng file chy trn cc my Apple Macintosh. H thng file HPFS: L h thng file c s dng trong h iu hnh OS/2. Linux h tr h thng file ny mc ch c. H thng file ISOFS: L h thng file c s dng cho cc a CD. H thng thng dng nht cho cc a CD hin nay l ISO 9660. H thng file MSDOS: Vi s h tr ny, h thng Linux c th truy cp c cc phn vng ca h iu hnh MSDOS. Linux cng c th s dng kiu MSDOS truy cp cc phn vng ca Window 95/98 tuy nhin khi , cc u im ca h iu hnh Window s khng cn gi tr v d nh tn file ch ti a 13 k t (k c m rng). H thng file NFS: (Network File System) l mt h thng file trn mng h tr vic truy cp d liu t xa ging nh h thng file CODA. Vi NFS, cc my chy Linux c th chia s cc phn vng a trn mng s dng nh l cc phn vng cc b ca chnh my mnh. H thng file NTFS: Vi s h tr ny, h thng Linux c th truy cp vo cc phn vng ca h iu hnh Microsoft Window NT. H thng file ROMFS: L cc h thng file ch c (read only) c s dng ch yu cho vic khi to a o (ramdisk) trong tin trnh khi ng a ci t.
- 20 -

H thng file SMB: (Server Mesage Block) l mt giao thc ca Windows dng chia s file gia cc h iu hnh Windows 95/98, Windows NT v OS/2 Lan Manager. Vi s h tr SMB, h iu hnh Linux c th chia s cng nh truy cp cc file nm trn cc phn vng ca mt my chy cc h iu hnh k trn. H thng file VFAT: L h thng file m rng ca h thng FAT. H thng file ny c s dng trong cc h iu hnh Windows 95/98. Nh vy, ngoi kh nng h tr nhiu loi thit b, Linux cn c kh nng h tr nhiu kiu h thng file. Bng cch h tr nhiu kiu h thng file, Linux c th truy cp v x l cc file ca nhiu h iu hnh khc nhau. Mc d c kh nng truy cp nhiu h thng file khc nhau, h thng file ca Linux vn phi m bo cung cp cho ngi dng mt giao din nht qun i vi cc file, bo v cc file trn cc h thng khc nhau, ti u cc thao tc truy cp vo thit b... thc hin c iu ny, Linux s dng mt h thng file c bit gi l h thng file o VFS (Virtual File System). H thng file o VFS c thit k cung cp mt giao din thng nht v cc file c lu tr trn cc thit b. VFS c trch nhim cung cp cho chng trnh ngi dng mt giao din nht qun v h thng file thng qua cc lnh gi h thng (system call). Mi khi c mt yu cu truy cp file, VFS s da vo cc h thng file thc tm kim file yu cu trn cc thit b vt l. Vi mi file tm c, n thc hin thao tc m file v cho tng ng file vi mt cu trc d liu gi l i-node. VFS cung cp rt nhiu lnh gi thao tc vi h thng file nhng ch yu thuc vo cc loi sau: Cc thao tc lin quan ti h thng file. Cc thao tc lin quan ti i-node. Cc thao tc vi file ang m. Cc thao tc vi vng m d liu. 3.1.4. Lin kt tng trng (lnh ln) Trong Linux c hai kiu lin kt l lin kt tng trng (lin kt mm) v lin kt cng. - "Lin kt cng" l mt cch gi khc i vi mt file ang tn ti (khng c s phn bit gia file gc v file lin kt). Theo cch ni k thut, chng cng chia s mt inode v inode ny cha ng tt c cc thng tin v file. Khng th to mt lin kt cng ti mt th mc. - "Lin kt tng trng" l mt kiu file c bit, trong , mt file lin kt thc s tham chiu theo tn n mt file khc. C th hiu kiu file ny nh l mt con tr ch dn ti mt file hoc mt th mc, v c s dng thay th cho file hoc th mc c tr ti. Hu ht cc thao tc (nh m, c, ghi...) c thc hin trn cc file lin kt, sau , nhn h thng s t ng "tham chiu" v thc hin trn file ch ca lin kt. Tuy nhin, c mt s cc thao tc nh xa file, file lin kt s b xa b ch khng phi file ch ca n. C php lnh: ln [ty-chn] <ch> [tn-ni] Lnh ny s to mt lin kt n th mc/file ch vi tn file lin kt l tn-ni. Nu tn-ni khng c, mt lin kt vi tn file lin kt ging nh tn file ch s c to ra trong th mc hin thi. Cc tu chn: -b, --backup[=CONTROL] : to lin kt quay tr li cho mi file ch ang tn ti. -f, --force : xa b cc file ch ang tn ti. -d, -F, --directory : to lin kt cng n cc th mc (ch dnh cho ngi dng c quyn qun tr h thng; Mt s phin bn khng c ty chn ny).
- 21 -

-n, --no-dereference : mt file bnh thng c xem l ch lin kt t mt th mc. -i, interactive : vn to lin kt d file ch b xa b. -s, --symbolic : to cc lin kt tng trng. --target-directory=<tn-th-mc> : xc nh th mc tn-th-mc l th mc c cha cc lin kt. -v, --verbose : hin th tn cc file trc khi to lin kt. --help : hin th trang tr gip v thot. 3.2 Quyn truy nhp th mc v file 3.2.1 Quyn truy nhp Mi file v th mc trong Linux u c mt ch s hu v mt nhm s hu, cng nh mt tp hp cc quyn truy nhp. Cho php thay i cc quyn truy nhp v quyn s hu file v th mc nhm cung cp truy nhp nhiu hn hay t hn. Thng tin v mt file c dng sau (c hin ra theo lnh hin danh sch file ls -l): drwxr-xr-x 12 root root 4096 Oct 23 2000 LinuxVN.com

Tp hp S lin kt Ngi Nhm ch Kch thc Ngy gi Tn file quyn truy n file ch file file file to file nhp (th mc) Trong , dy 10 k t u tin m t kiu file v quyn truy nhp i vi tp tin , chng c chia ra lm 4 phn: kiu file, cc quyn truy nhp n file ca ch s hu, ca nhm s hu v ngi dng khc. Theo mc nh, ngi dng to mt file chnh l ngi ch (s hu) ca file v l ngi c quyn s hu n. Ngi ch ca file c c quyn thay i quyn truy nhp hay quyn s hu i vi file . Tt nhin, mt khi chuyn quyn s hu ca mnh cho ngi dng khc th ngi ch c khng c php chuyn quyn s hu v quyn truy nhp c na. C mt s kiu file trong Linux. K t u tin trong tp hp 10 k t m t kiu file v quyn truy nhp s cho bit file thuc kiu no (ch ci c gi l ch ci biu din). Ch ci biu din d b c Kiu file Th mc (directory) File kiu khi (block-type special file) File kiu k t (character-type special file)

l Lin kt tng trng (symbolic link) p File ng ng (pipe) s Socket File bnh thng (regular file) Chn k t tip theo trong chui l quyn truy nhp c chia ra lm 3 nhm tng ng vi quyn truy nhp ca ngi s hu, nhm s hu v ngi dng khc. C ba loi quyn truy nhp chnh i vi th mc/file, l: c (read -r), ghi (write -w) v thc hin (execute -x).
- 22 -

Ch ci biu din --r-r-x

Kiu file Khng cho php mt quyn truy nhp no Ch c quyn c Quyn c v thc hin (cho chng trnh v shell script)

rwQuyn c v ghi rwx Cho php tt c cc quyn truy nhp (cho chng trnh) Tuy nhin, i vi th mc th ch c ba loi k hiu ca cc quyn truy nhp l: ---, r-x v rwx, v ni dung ca th mc l danh sch ca cc file v cc th mc con c bn trong th mc . Quyn c mt th mc l c xem ni dung ca th mc v quyn thc hin i vi mt th mc l quyn tm c file v th mc con c trong th mc. 3.2.2. Cc lnh c bn 3.2.2.1. Thay i quyn s hu file C php lnh: chown [ty-chn] [ch][.nhm] <file...> Nu ch c tham s v ch, th ngi dng ch s c quyn s hu file v nhm s hu khng thay i. Nu theo sau tn ngi ch l du "." v tn ca mt nhm th nhm s nhm s hu file. Nu ch c du "." v nhm m khng c tn ngi ch th ch c quyn s hu nhm ca file thay i, lc ny, lnh chown c tc dng ging nh lnh chgrp Cc ty chn: -c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s hu (s thng bo hin ra c th t hn trng hp -v, -verbosr). -f, --silent, --quiet : b qua hu ht cc thng bo li. -R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy. -v, --verbose : hin th dng thng bo vi mi file lin quan m chown tc ng ti (c hoc khng thay i s hu). --help : a ra trang tr gip v thot. 3.2.2.2. Thay i quyn s hu nhm Cc file (v ngi dng) cn thuc vo cc nhm, y l phng thc truy nhp file thun tin cho nhiu ngi dng nhng khng phi tt c ngi dng trn h thng. Khi ng nhp, mc nh s l thnh vin ca mt nhm c thit lp khi siu ngi dng root to ti khon ngi dng. Cho php mt ngi dng thuc nhiu nhm khc nhau, nhng mi ln ng nhp ch l thnh vin ca mt nhm. C php lnh: chgrp [ty-chn] {nhm|--reference=nhmR} <file...> Lnh ny cho php thay thuc tnh nhm s hu ca file theo tn nhm c ch ra trc tip theo tham s nhm hoc gin tip qua thuc tnh nhm ca file c tn l nhmR. Cc ty chn: (mt s tng t nh lnh chown): -c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s hu (s thng bo hin ra c th t hn trng hp -v, -verbosr). -f, --silent, --quiet : b qua hu ht cc thng bo li. -R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy. -v, --verbose : hin th dng thng bo vi mi file lin quan m chgrp tc ng ti (c hoc khng thay i s hu). --help : hin th trang tr gip v thot Tham s --reference=nhmR cho thy cch gin tip thay nhm ch ca file theo nhm ch ca mt file khc (tn l nhmR) l cch thc c a chung hn. Tham s ny l xung khc vi tham s nhm ca lnh. - 23 -

3.2.2.3. Thay i quyn truy cp file C php lnh chmod c ba dng: chmod [ty-chn] <mod [,mod]...> <file...> chmod [ty-chn] <mod-h-8> <file...> chmod [ty-chn] --reference=nhmR <file...> Lnh chmod cho php xc lp quyn truy nhp theo kiu (mode) trn file. Dng u tin l dng xc lp tng i, dng th hai l dng xc lp tuyt i v dng cui cng l dng gin tip ch dn theo quyn truy nhp ca file nhmR. Cc ty chn (-c,--changes; -f, --silent, --quiet; -v, --verbose; -R, --recursive; --help) c ngha tng t cc tu chn tng ng ca cc lnh chown, chgrp: Tham s --reference=RFILE cng ngha gin tip nh trong lnh chgrp. Gii thch v hai cch xc lp quyn truy nhp file trong lnh chmod nh sau: xc lp tuyt i (dng h thng m s vit theo h c s 8 biu din cho cc quyn truy nhp) v xc lp tng i (dng cc ch ci biu din quyn truy nhp). Cch xc lp tng i Cch xc lp tng i l d nh theo ngha ca ni dung cc mod v ch nhng thay i thc s mi c biu din trong lnh. Quyn truy cp u=user (ngi s hu) g=group (nhm s hu) o=other (ngi khc) a=all (tt c ngi dng) Thao tc thay i + (thm quyn) - (g b quyn) = (xc nhn quyn) Kiu truy cp r=read (c) w=write (ghi) x=execute (thc hin)

V d: chmod g+w test Cch xc lp tuyt i i vi ngi dng hiu s b v biu din s trong h c s 8 th cch xc lp tuyt i li c a chung hn. Ta bit quyn truy nhp file xc nh thng qua dy gm 9 v tr di dng rwxrwxrwx, Nh vy thuc tnh quyn truy nhp ca mt file c th biu din thnh 9 bt nh phn trong bt c gi tr 1 th quyn c xc nh, ngc li th quyn b tho b. Nh vy, ch s hu tng ng vi 3 bt u tin, nhm s hu tng ng vi 3 bt gia, ngi dng khc tng ng vi 3 bt cui. Mi cm 3 bt nh vy cho mt ch s h 8 (nhn gi tr t 0 n 7) v thuc tnh quyn truy nhp tng ng vi 3 ch s h 8. Quyn Ch s h 8 Quyn Ch s h 8 Ch c 4 Ch c v ghi 6 Ch ghi 2 Ch c v thc hin 5 Ch thc hin 1 Ch ghi v thc hin 3 Khng c quyn no 0 c, ghi v thc hin 7 3.2.2.4. ng nhp vo mt nhm ngi dng mi Linux cho php mt ngi dng c th l thnh vin ca mt hoc nhiu nhm ngi dng khc nhau, trong c mt nhm c gi l nhm khi ng. iu ny c m bo khi thc hin lnh adduser hoc usersdd. Tuy nhin, ti mt thi im, mt ngi dng thuc vo ch mt nhm. Khi mt ngi dng ng nhp, h thng ngm nh ngi dng l thnh vin ca nhm khi ng, v c quyn truy nhp i vi nhng file thuc quyn s hu ca nhm khi ng . Nu mun s dng quyn s hu theo cc nhm khc i vi
- 24 -

nhng file th ngi dng phi chuyn i thnh thnh vin ca mt nhm nhng nhm c gn vi ngi dng. Lnh newgr cho php ngi dng chuyn sang nhm ngi dng khc gn vi mnh vi C php lnh: newgrp [nhm] Trong nhm l mt tn nhm ngi dng tn ti trong h thng. 3.3 Thao tc vi th mc 3.3.1 Mt s th mc c bit * Th mc gc / y l th mc gc cha ng tt c cc th mc con c trong h thng. * Th mc /root Th mc /root c th c coi l "th mc ring" ca siu ngi dng. Th mc ny c s dng lu tr cc file tm thi, nhn Linux v nh khi ng, cc file nh phn quan trng (nhng file c s dng n trc khi Linux c th gn kt n phn vng /user), cc file ng nhp quan trng, b m in cho vic in n, hay vng lu tm cho vic nhn v gi email. N cng c s dng cho cc vng trng tm thi khi thc hin cc thao tc quan trng, v d nh khi xy dng (build) mt gi RPM t cc file RPM ngun. * Th mc /bin Trong Linux, chng trnh c coi l kh thi nu n c th thc hin c. Khi mt chng trnh c bin dch, n s c dng l file nh phn. Nh vy, chng trnh ng dng trong Linux l mt file nh phn kh thi.Chnh v l , nhng nh pht trin Linux quyt nh phi t chc mt th mc "binaries" lu tr cc chng trnh kh thi c trn h thng, chnh l th mc /bin. Ban u, th mc /bin (bin l vit tt ca t binary) l ni lu tr cc file nh phn kh thi. Nhng theo thi gian, ngy cng c nhiu hn cc file kh thi c trong Linux, do , c thm cc th mc nh /sbin, /usr/bin c s dng lu tr cc file . * Th mc /dev Mt phn khng th thiu trong bt k my tnh no l cc trnh iu khin thit b. Khng c chng, s khng th c c bt k thng tin no trn mn hnh ca, cng khng th nhp c thng tin, v cng khng th s dng a mm ca. Tt c cc trnh iu khin thit b u c lu tr trong th mc /dev. * Th mc /etc Qun tr h thng trong Linux khng phi l n gin, chng hn nh vic qun l ti khon ngi dng, vn bo mt, trnh iu khin thit b, cu hnh phn cng,... gim bt phc tp, th mc /etc c thit k lu tr tt c cc thng tin hay cc file cu hnh h thng. * Th mc /lib Linux c mt trung tm lu tr cc th vin hm v th tc, l th mc /lib. * Th mc /lost+found Mt file c khi phc sau khi c bt k mt vn hoc gp mt li v ghi a trn h thng u c lu vo th mc ny. * Th mc /mnt Th mc /mnt l ni kt ni cc thit b (v d a cng, a mm...) vo h thng file chnh nh lnh mount. Thng thng cc th mc con ca /mnt chnh l gc ca cc h thng file c kt ni: /mnt/floppy: a mm, /mnt/hda1: vng u tin ca a cng th nht (hda), /mnt/hdb3: vng th ba ca a cng th 2 (hdb)...
- 25 -

* Th mc /tmp Th mc /tmp c rt nhiu chng trnh trong Linux s dng nh mt ni lu tr cc file tm thi. * Th mc /usr Thng thng th th mc /usr l trung tm lu tr tt c cc lnh hng n ngi dng (user-related commands). Tuy nhin, ngy nay tht kh xc nh trong th mc ny c nhng th g, bi v hu ht cc file nh phn cn cho Linux u c lu tr y, trong ng ch l th mc con /usr/src bao gm cc th mc con cha cc chng trnh ngun ca nhn Linux. * Th mc /home Th mc ny cha cc th mc c nhn ca ngi dng: mi ngi dng tng ng vi mt th mc con y, tn ngi dng c ly lm tn ca th mc con. * Th mc /var Th mc /var c s dng lu tr cc file cha cc thng tin lun lun thay i, bao gm b m in, vng lu tm thi cho vic nhn v gi th (mail), cc kha tin trnh,... * Th mc /boot L th mc cha nhn ca h thng (Linux-*.*.), System.map (file nh x n cc driver np cc h thng file khc), nh (image) ca h thng file dng cho initrd (ramdisk), trnh iu khin cho cc thit b RAID (mt thit b gm mt mng cc a cng tng tc v an ton khi ghi d liu), cc bn sao lu boot record ca cc phn vng a khc. Th mc ny cho php khi ng v np li bt k trnh iu khin no c yu cu c cc h thng file khc. * Th mc /proc y l th mc dnh cho nhn (kernel) ca h iu hnh v thc t y l mt h thng file c lp do nhn khi to. * Th mc /misc v th mc /opt Cho php lu tr mi i tng vo hai th mc ny. * Th mc /sbin Th mc lu gi cc file h thng thng t ng chy. 3.3.2 Cc lnh c bn v th mc * Xc nh th mc hin thi C php lnh: pwd Lnh ny cho bit hin ngi dng ang trong th mc no v hin ra theo dng mt ng dn tuyt i. * Xem thng tin v th mc C php lnh: ls [ty-chn] [file]... Lnh ny a ra danh sch cc file lin quan n tham s file trong lnh. Trng hp ph bin tham s file l mt th mc, tuy nhin trong mt s trng hp khc, tham s file xc nh nhm (khi s dng cc m t nhm *, ? v cp [ v ]); nu khng c tham s file, mc nh danh sch cc file c trong th mc hin thi s c hin th. Cc ty chn: -a : lit k tt c cc file, bao gm c file n. -l : a ra thng tin y nht v cc file v th mc. -s : ch ra kch thc ca file, tnh theo khi (1 khi = 1204 byte). -F : xc nh kiu file (/ = th mc, * = chng trnh kh thi). -m : lit k cc file c ngn cch nhau bi du ",".
- 26 -

-C : a ra danh sch cc file v th mc theo dng ct (hai th mc gn nhau c xp vo mt ct). -1 : hin th mi file hoc th mc trn mt dng. -t : sp xp cc file v th mc trong danh sch theo th t v thi gian c sa i gn y nht. -x : a ra danh sch cc file v th mc theo dng ct (hai th mc gn nhau c xp trn hai dng u ca hai ct k nhau). -r : sp xp danh sch hin th theo th t ngc li. -R : lit k ln lt cc th mc v ni dung ca cc th mc. V d, lnh: # ls -l s hin th danh sch y nht v cc file v th mc c trong th mc hin thi. 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 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 Dng u tin "total 108" cho bit tng s khi (1024 byte) trn a lu tr cc file trong danh sch (14*4+36+16=108). Mi dng tip theo trnh by thng tin v mi file hay th mc con. Khi g lnh: # ls [is]* Cho danh sch cc file v th mc con c tn bt u bng hoc ch ci i hoc ch ci s c trong th mc hin thi: info-dir initlog.conf inittab services shadow shadowshells smb.conf sysctl.conf syslog.conf * Lnh to th mc C php lnh: mkdir [ty-chn] <th-mc> Lnh ny cho php to mt th mc mi nu th mc cha thc s tn ti. to mt th mc, cn c t tn v v tr ca n trn h thng file (v tr mc nh l th mc hin thi). Nu th mc tn ti, h thng s thng bo cho bit. Cc ty chn: -m, --mode=Mod : thit lp quyn truy nhp Mod nh trong lnh chmod nhng khng cho quyn rwxrwxrwx. -p, --parents : to cc th mc cn thit m khng thng bo li khi n tn ti.
- 27 -

--verbose : hin th cc thng bo cho mi th mc c to. --help : a ra trang tr gip v thot. V d: # mkdir /home/test * Lnh xa b th mc Nh bit, lnh mkdir to ra mt th mc mi, v v i ngu th lnh rmdir c dng xa b mt th mc. C php lnh: rmdir [ty-chn[ <th-mc> C th xa b bt k th mc no nu c quyn . Lu rng, th mc ch b xa khi n "rng", tc l khng tn ti file hay th mc con no trong . Khng c cch g khi phc li cc th mc b xa, v th hy ch trc khi quyt nh xa mt th mc. Cc ty chn: --ignore-fail-on-non-empty : b qua cc li nu xa mt th mc khng rng. -p, --parents : xa b mt th mc, sau ln lt xa b tip cc th mc c trn ng dn cha th mc va xa. V d, dng lnh rmdir -p /a/b/c s tng ng vi ba dng lnh rmdir /a/b/c, rmdir /a/b, rmdir /a (vi iu kin cc th mc l rng). --verbose : a ra thng bo khi xa mt th mc. --help : hin th trang tr gip v thot. V d: # rmdir -p /test/test1/test2 * Lnh i tn th mc C php lnh: mv <tn-c> <tn-mi> Lnh ny cho php i tn mt th mc t tn-c thnh tn-mi. Nu s dng lnh mv i tn mt th mc vi mt ci tn c t cho mt file th lnh s gp li. Nu tn mi trng vi tn mt th mc ang tn ti th ni dung ca th mc c i tn s ghi ln ni dung ca th mc trng tn. 3.4. Cc lnh lm vic vi file 3.4.1 Cc kiu file c trong Linux Trong Linux c rt nhiu file khc nhau, nhng bao gi cng tn ti mt s kiu file cn thit cho h iu hnh v ngi dng, di y gii thiu li mt s cc kiu file c bn. File ngi dng (user data file): l cc file to ra do hot ng ca ngi dng khi kch hot cc chng trnh ng dng tng ng. V d nh cc file thun vn bn, cc file c s d liu hay cc file bng tnh. File h thng (system data file): l cc file lu tr thng tin ca h thng nh: cu hnh cho khi ng, ti khon ca ngi dng, thng tin thit b... thng c ct trong cc tp dng vn bn ngi dng c th can thip, sa i theo mnh. File thc hin (executable file): l cc file cha m lnh hay ch th cho my tnh thc hin. File thc hin lu tr di dng m my m ta kh c th tm hiu c ngha ca n, nhng tn ti mt s cng c "hiu" c cc file . Khi dng trnh ng dng mc (Midnight Commander, chng 8), file thc hin c bt u bi du (*) v thng c mu xanh lc. Th mc hay cn gi l file bao hm (directory): l file bao hm cc file khc v c cu to hon ton tng t nh file thng thng khc nn c th gi l file. Trong mc, file bao hm thng c mu trng v bt u bng du ng (~) hoc du chia (/). V d: /, /home, /bin, /usr, /usr/man, /dev...
- 28 -

File thit b (device file): l file m t thit b, dng nh l nh danh ch ra thit b cn thao tc. Theo quy c, file thit b c lu tr trong th mc /dev. Cc file thit b hay gp trong th mc ny l tty (teletype - thit b truyn thng), ttyS (teletype serial - thit b truyn thng ni tip), fd0, fd1,... (floppy disk- thit b a mm), hda1, hda2,... hdb1, hdb2,... (hardisk - thit b cng theo chun IDE; a, b,... nh s a vt l; 1, 2, 3... nh s logic). Trong mc, file thit b c mu tm v bt u bng du cng (+). File lin kt (linked file): l nhng file cha tham chiu n cc file khc trong h thng tp tin ca Linux. Tham chiu ny cho php ngi dng tm nhanh ti file thay v ti v tr nguyn thy ca n. Hn na, ngi ta c th gn vo cc thng tin ph tr lm cho file ny c tnh nng tri hn so vi tnh nng nguyn thy ca n. Ta thy loi file ny ging nh khi nim shortcut trong MSWindows98. Khng ging mt s h iu hnh khc (nh MS-DOS chng hn), Linux qun l thi gian ca tp tin qua cc thng s thi gian truy nhp (accesed time), thi gian kin to (created time) v thi gian sa i (modified time). 3.4.2. Cc lnh to file Trong Linux c rt nhiu cch to file, sau y l cc cch hay c dng. * To file vi lnh touch Lnh touch c nhiu chc nng, trong mt chc nng l gip to file mi trn h thng: touch rt hu ch cho vic t chc mt tp hp cc file mi. C php lnh: touch <file> Thc cht lnh ny c tc dng dng cp nht thi gian truy nhp v sa cha ln cui ca mt file. V l do ny, cc file c to bng lnh touch u c sp xp theo thi gian sa i. Nu s dng lnh touch i vi mt file cha tn ti, chng trnh s to ra file . S dng bt k trnh son tho no son tho file mi. * To file bng cch i hng u ra ca lnh (>) Cch ny rt hu ch nu mun lu kt qu ca mt lnh thc hin. gi kt qu ca mt lnh vo mt file, dng du ">" theo ngha chuyn hng li ra chun. V d: # ls -l /bin > /home/thu/lenhls Linux t ng to nu file lenhls cha c, trong trng hp ngc li, ni dung file c s b th ch bi kt qu ca lnh. Nu mun b sung kt qu vo cui file thay v thay th ni dung file, dng du ">>". * To file vi lnh cat Lnh cat tuy n gin nhng rt hu dng trong Linux. Chng ta c th s dng lnh ny ly thng tin t u vo (bn phm...) ri kt xut ra file hoc cc ngun khc (mn hnh...), hay xem ni dung ca mt file... Phn ny trnh by tc dng ca lnh cat i vi vic to file. C php lnh: cat > <file> Theo ngm nh, lnh ny cho php ly thng tin u vo t bn phm ri xut ra mn hnh. Son tho ni dung ca mt file bng lnh cat tc l i hng u ra ca lnh t mn hnh vo mt file. Ngi dng g ni dung ca file ngay ti du nhc mn hnh v g CTRL+d kt thc vic son tho. Nhc im ca cch to file ny l n khng cho php sa li, v d nu mun sa mt li chnh t trn mt dng, ch c cch l xa n v tr ca li v g li ni dung va b xa. V d: # cat > /home/vd/newfile
- 29 -

Sau khi son tho xong, g Enter v CTRL+d tr v du nhc lnh, nu khng g Enter th phi g CTRL+d hai ln. C th s dng lun lnh cat xem ni dung ca file va son tho: 3.4.3 Cc lnh thao tc trn file * Sao chp file Lnh cp c hai dng nh sau: cp [ty-chn] <file-ngun>... <file-ch> cp [ty-chn] --target-directory=<th-mc> <file-ngun>... Lnh ny cho php sao file-ngun thnh file-ch hoc sao chp t nhiu file-ngun vo mt th mc ch (tham s <file-ch> hay <th-mc>). Dng th hai l mt cch vit khc i th t hai tham s v tr. Cc ty chn: -a, --archive : ging nh -dpR (t hp ba tham s -d, -p, -R, nh di y). -b, --backup[=CONTROL] : to file lu cho mi file ch nu nh n ang tn ti. -d, --no-dereference : duy tr cc lin kt. -f, --force : ghi file ch ang tn ti m khng nhc nh. -i, --interactive : c thng bo nhc nh trc khi ghi . -l, --link : ch to lin kt gia file-ch t file-ngun m khng sao chp. -p, --preserve : duy tr cc thuc tnh ca file-ngun sang file-ch. -r : cho php sao chp mt cch quy file thng thng. -R : cho php sao chp mt cch quy th mc. -s, --symbolic-link : to lin kt tng trng thay cho vic sao chp cc file. -S, --suffix=<hu-t> : b qua cc hu t thng thng (hoc c ch ra). -u, --update : ch sao chp khi file ngun mi hn file ch hoc khi file ch cha c. -v, --verbose : a ra thng bo v tin trnh sao chp. --help : hin th trang tr gip v thot. File ch c to ra c cng kch thc v cc quyn truy nhp nh file ngun, tuy nhin file ch c thi gian to lp l thi im thc hin lnh nn cc thuc tnh thi gian s khc. Nu v tr ch, m t y tn file ch th ni dung file ngun s c sao chp sang file ch. Trong trng hp ch a ra v tr file ch c t trong th mc no th tn ca file ngun s l tn ca file ch. Nu s dng lnh ny sao mt th mc, s c mt thng bo c a ra cho bit ngun l mt th mc v v vy khng th dng lnh cp sao chp. V d sao chp nhiu file cng mt lc vo mt th mc. # cp vd vd1 newdir Lu : i vi nhiu lnh lm vic vi file, khi g lnh c th s dng k hiu m t nhm xc nh mt nhm file lm cho tng hiu lc ca cc lnh . * i tn file C php lnh: mv <tn-c> <tn-mi> Lnh ny cho php i tn file t tn c thnh tn mi. V d: # mv vd newfile Trong trng hp file newfile tn ti, ni dung ca file vd s ghi ln ni dung ca file newfile.
- 30 -

* Xa file Lnh rm l lnh rt "nguy him" v trong Linux khng c lnh khi phc li nhng g xa, v th hy cn trng khi s dng lnh ny. C php lnh: rm [ty-chn] <file>... Lnh rm cho php xa b mt file hoc nhiu file. Cc ty chn: -d, --directory : loi b lin kt ca th mc, k c th mc khng rng. Ch c siu ngi dng mi c php dng ty chn ny. -f, --force : b qua cc file (xc nh qua tham s file) khng tn ti m khng cn nhc nh. -i, --interactive : nhc nh trc khi xa b mt file. -r, -R, --recursive : xa b ni dung ca th mc mt cch quy. -v, --verbose : a ra cc thng bo v tin trnh xa file. --help : hin th trang tr gip v thot. Lnh rm cho php xa nhiu file cng mt lc bng cch ch ra tn ca cc file cn xa trong dng lnh (hoc dng k kiu m t nhm). * Lnh m t v dng trong file C php lnh: wc [ty-chn] [file]... Lnh hin ra s lng dng, s lng t, s lng k t c trong mi file, v mt dng tnh tng nu c nhiu hn mt file c ch ra. Nu khng c ty chn no th mc nh a ra c s dng, s t v s k t. Ngm nh khi khng c tn file trong lnh th s c v m trn thit b vo chun. Cc tu chn: -c, --byte, --chars : a ra s k t trong file. -l, --lines : a ra s dng trong file. -L, --max-line-length : a ra chiu di ca dng di nht trong file. -w, --words : a ra s t trong file. --help : hin th trang tr gip v thot. * Lnh loi b nhng dng khng quan trng Trong mt s trng hp khi xem ni dung mt file, chng ta thy c mt s cc thng tin b trng lp, v d cc dng trng hoc cc dng cha ni dung ging nhau. ng thi lm gn v thu nh kch thc ca file, c th s dng lnh uniq lit k ra ni dung file sau khi loi b cc dng trng lp. C php lnh: uniq [ty-chn] [input] [output] Lnh uniq s loi b cc dng trng lp k nhau t input (thit b vo chun) v ch gi li mt dng duy nht trong s cc dng trng lp ri a ra output (thit b ra chun). Cc tu chn: -c, --count : m v hin th s ln xut hin ca cc dng trong file. -d : hin th ln mn hnh dng b trng lp. -u : hin th ni dung file sau khi xa b ton b cc dng b trng lp khng gi li mt dng no. -i : hin th ni dung file sau khi xa b cc dng trng lp v ch gi li duy nht mt dng c ni dung b trng lp. -D : hin th tt c cc dng trng lp trn mn hnh. Nu s dng lnh uniq trn mt file khng c cc dng trng lp th lnh khng c tc dng.

- 31 -

* Sp xp ni dung file sort l lnh c cc thng tin v sp xp chng theo th t trong bng ch ci hoc theo th t c quy nh theo cc ty chn ca lnh. C php lnh: sort [ty-chn] [file]... Hin th ni dung sau khi sp xp ca mt hoc nhiu file ra thit b ra chun l tc dng ca lnh sort. Ngm nh sp xp theo th t t in ca cc dng c trong cc file (tng ch ci theo bng ch h thng (chng hn ASCII) v k t v tr u tin trong cc dng). Cc ty chn: +<s1> [-<s2>] : Hai gi tr s1 v s2 xc nh "kha" sp xp ca cc dng, thc cht ly xu con t v tr s1 ti v tr s2 ca cc dng so snh ly th t sp xp cc dng. Nu s2 khng c th coi l ht cc dng; nu s2 nh hn s1 th b qua la chn ny. Ch , nu c s2 th phi cch s1 t nht mt du cch. -b : b qua cc du cch ng trc trong phm vi sp xp. -c : kim tra nu file sp xp th thi khng sp xp na. -d : xem nh ch c cc k t [a-zA-Z0-9] trong kha sp xp, cc dng c cc k t c bit (du cch, ?...) c a ln u. -f : sp xp khng phn bit ch hoa ch thng. -n : sp xp theo kch thc ca file. -r : chuyn i th t sp xp hin thi. V d, mun sp xp file vdsort 3.4.4 Cc lnh thao tc theo ni dung file * Xc nh kiu file C php lnh: file [ty-chn] [-f file] [-m <file-nh>...] <file>... Lnh file cho php xc nh v in ra kiu thng tin cha trong file. Lnh file s ln lt kim tra t kiu file h thng, kiu file magic (v d file m t thit b) ri n kiu file vn bn thng thng. Nu file c kim tra tha mn mt trong ba kiu file trn th kiu file s c in ra theo cc dng c bn sau: text: dng file vn bn thng thng, ch cha cc m k t ASCII. executable: dng file nh phn kh thi. data: thng l dng file cha m nh phn v khng th in ra c. Cc tu chn: -b : cho php ch a ra kiu file m khng a km theo tn file. -f tn-file : cho php hin th kiu ca cc file c tn trng vi ni dung trn mi dng trong file tn-file. kim tra trn thit b vo chun, s dng du "-". -z : xem kiu ca file nn. * Xem ni dung file phn trc, chng ta c dp lm quen vi lnh cat thng qua tc dng to file ca lnh. Phn ny gii thiu tc dng ch yu ca lnh cat: l tc dng xem ni dung ca mt file. C php lnh: cat [ty-chn] <tn file> Cc ty chn: -A, --show-all : ging nh ty chn -vET. -b, --number-nonblank : hin th thm s th t trn mi dng (b qua dng trng). -e : ging nh ty chn -vE. -E, --show-ends : hin th du "$" ti cui mi dng. -n, --number : hin th s th t ca mi dng (k c dng trng).
- 32 -

-s : nu trong ni dung file c nhiu dng trng th s loi b bt ch hin th mt dng trng. -t : ging nh -vT. -T, --show-tabs : hin th du TAB di dng ^I. -v, --show-nonprinting : hin th cc k t khng in ra c ngoi tr LFD v TAB. --help : hin th trang tr gip v thot. * Xem ni dung cc file ln Lnh cat cho php xem ni dung ca mt file, nhng nu file qu ln, ni dung file s tri trn mn hnh v ch c th nhn thy phn cui ca file. Linux c mt lnh cho php c th xem ni dung ca mt file ln, l lnh more. C php lnh: more [-dlfpcsu] [-s] [+/xumu] [+dng-s] [file...] Lnh more hin th ni dung ca file theo tng trang mn hnh. Cc la chn: -s : xc nh s dng ni dung ca file c hin th (s). -d : trn mn hnh s hin th cc thng bo gip ngi dng cch s dng i vi lnh more, v nh [ Press space to continue, "q" to quit .], hay hin th [Press "h" for instructions .] thay th cho ting chung cnh bo khi bm sai mt phm. -l : more thng xem ^L l mt k t c bit, nu khng c ty chn ny, lnh s dng ti dng u tin c cha ^L v hin th % ni dung xem c (^L khng b mt), nhn phm space (hoc enter) tip tc. Nu c ty chn -l, ni dung ca file s c hin th nh bnh thng nhng mt khun dng khc, tc l du ^L s mt v trc dng c cha ^L s c thm mt dng trng. -p : khng cun mn hnh, thay vo l xa nhng g c trn mn hnh v hin th tip ni dung file. -c : khng cun mn hnh, thay vo xa mn hnh v hin th ni dung file bt u t nh mn hnh. -s : xa bt cc dng trng lin nhau trong ni dung file ch gi li mt dng. -u : b qua du gch chn. +/xumu : ty chn +/xumu ch ra mt chui s c tm kim trc khi hin th mi file. +dng-s : bt u hin th t dng th dng-s. * Xem qua ni dung file Cc on trc cho bit cch thc xem ni dung ca mt file nh lnh cat hay more. Trong Linux cng c cc lnh khc cho nhiu cch thc xem ni dung ca mt file. Trc ht, chng ta hy lm quen vi lnh head. C php lnh: head [ty-chn] [file]... Lnh ny mc nh s a ra mn hnh 10 dng u tin ca mi file. Nu c nhiu hn mt file, th ln lt tn ca file v 10 dng ni dung u tin s c hin th. Nu khng c tham s file, hoc file l du "-", th ngm nh s c t thit b vo chun. Cc tu chn: -c, --bytes=c : hin th c (s nguyn) k t u tin trong ni dung file (c c th nhn gi tr l b cho 512, k cho 1K, m cho 1 Meg) -n, --lines=n : hin th n (s nguyn) dng thay cho 10 dng ngm nh. -q, --quiet, --silent : khng a ra tn file dng u. -v, --verbose : lun a ra tn file dng u. --help : hin th trang tr gip v thot.
- 33 -

* Xem qua ni dung file C php lnh: tail [ty-chn] [file]... Lnh tail ngm nh a ra mn hnh 10 dng cui trong ni dung ca cc file. Nu c nhiu hn mt file, th ln lt tn ca file v 10 dng cui s c hin th. Nu khng c tham s file, hoc file l du "-" th ngm nh s c t thit b vo chun. Cc ty chn: --retry : c gng m mt file kh truy nhp khi bt u thc hin lnh tail. -c, --bytes=n : hin th n (s) k t sau cng. -f, --follow[={name | descritptor}] : sau khi hin ni dung file s hin thng tin v file: -f, -- follow, v --follow=descriptor l nh nhau. -n, --lines=n : hin th n (s) dng cui cng ca file thay cho 10 dng ngm nh. --max-unchanged-stats=n : hin th ti liu v file (ngm nh n l 5). --max-consecutive-size-changes=n : hin th ti liu v file (ngm nh n l 200). --pid=PID : kt hp vi ty chn -f, chm dt sau khi tin trnh c ch s = PID li. -q, --quiet, --silent : khng a ra tn file dng u trong ni dung c hin th. -s, --sleep-interval=k : kt hp vi ty chn -f, dng k giy gia cc hot ng. -v, --verbose : lun hin th tn ca file. --help : hin th trang tr gip v thot. * Thm s th t ca cc dng trong file C php lnh: nl [ty-chn] <file> Lnh ny s a ni dung file ra thit b ra chun, vi s th t ca dng c thm vo. Nu khng c file (tn file), hoc khi file l du "-", th c ni dung t thit b vo chun. Cc tu chn: -b, --body-numbering=STYLE : s dng kiu STYLE cho vic nh th t cc dng trong ni dung file. C cc kiu STYLE sau: o a : nh s tt c cc dng k c dng trng; o t : ch nh s cc dng khng trng; o n : khng nh s dng. -d, --section-delimiter=CC : s dng CC nh s trang logic (CC l hai k t xc nh phm vi cho vic phn trang logic). -f, --footer-numbering=STYLE : s dng kiu STYLE nh s cc dng trong ni dung file (mt cu c th c hai dng...). -h, --header-numbering=STYLE : s dng kiu STYLE nh s cc dng trong ni dung file. -i, --page-increment=s : nh s th t ca dng theo cp s cng c cng sai l s. -l, --join-blank-lines=s :nhm s dng trng vo thnh mt dng trng. -n, --number-format=khun : chn s dng theo khun (khun: ln - cn tri, khng c s 0 u; rn - cn phi, khng c s 0 u; rz - cn phi v c s 0 u) -p, --no-renumber : khng thit lp li s dng ti mi trang logic. -s, --number-separator=xu : thm chui xu vo sau s th t ca dng. -v, --first-page=s : s dng u tin trn mi trang logic. -w, --number-width=s : hin th s th t ca dng trn ct th s.
- 34 -

--help : hin th trang tr gip v thot. * Tm s khc nhau gia hai file C php lnh: diff [tu-chn] <file1> <file2> Trong trng hp n gin, lnh diff s so snh ni dung ca hai file. Nu file1 l mt th mc cn file2 l mt file bnh thng, diff s so snh file c tn trng vi file2 trong th mc file1 vi file2. Nu c file1 v file2 u l th mc, diff s thc hin s so snh ln lt cc file trong c hai th mc theo th t t a-z (s so snh ny s khng qui nu tu chn -r hoc -recursive khng c a ra). Tt nhin so snh gia hai th mc khng th chnh xc nh khi so snh hai file. Cc tu chn: -a: xem tt c cc file dng vn bn v so snh theo tng dng. -b: b qua s thay i v s lng ca k t trng. -B: b qua mi s thay i m ch chn hoc xo cc dng trng. --brief: ch thng bo khi c s khc nhau m khng a ra chi tit ni dung khc nhau. -d: tm ra s khc bit nh (tu chn ny c th lm chm tc lm vic ca lnh diff). --exclude-from=file: khi so snh th mc, b qua cc file v cc th mc con c tn ph hp vi mu c trong file. -i: so snh khng bit ch hoa ch thng. -r: thc hin so snh qui trn th mc. -s: thng bo khi hai file l ging nhau. -y: hin th hai file cnh nhau d phn bit s khc nhau. 3.4.5 Cc lnh tm file * Tm theo ni dung file Lnh grep cng nh lnh ls l hai lnh rt quan trng trong Linux. Lnh ny c hai tc dng c bn nh sau: Lc u ra ca mt lnh: <lnh> | grep <mu lc> Tm dng cha mu nh trong file c ch ra: grep [ty-chn] <mu-lc> [file] Lnh grep hin th tt c cc dng c cha mu-lc trong file c ch ra (hoc t thit b vo chun nu khng c file hoc file c dng l du "-") Cc ty chn: -G, --basic-regexp : xem mu lc nh mt biu thc thng thng. iu ny l ngm nh. -E, --extended-regexp : xem mu lc nh mt biu thc m rng. -F, --fixed-strings : xem mu nh mt danh sch cc xu c nh, c phn ra bi cc dng mi. Ngoi lnh grep cn c hai lnh l egrep v fgrep. egrep tng t nh lnh grep -E, fgrep tng t vi lnh grep -F . Lnh grep cn c cc ty chn sau: -A NUM, --after-context=NUM : a ra NUM dng ni dung tip theo sau dng c cha mu. -B NUM, --before-context=NUM : a ra NUM dng ni dung trc dng c cha mu.
- 35 -

-C [NUM], --context[=NUM] : hin th NUM dng (mc nh l 2 dng) ni dung. -NUM : ging --context=NUM a ra cc dng ni dung trc v sau dng c cha mu. Tuy nhin, grep s khng a ra dng no nhiu hn mt ln. -b, --byte-offset : hin th a ch tng i trong file u vo trc mi dng c a ra -c, --count : m s dng tng ng cha mu trong file u vo thay cho vic hin th cc dng cha mu. -d ACTION, --directories=ACTION : nu u vo l mt th mc, s dng ACTION x l n. Mc nh, ACTION l read, tc l s c ni dung th mc nh mt file thng thng. Nu ACTION l skip, th mc s b b qua. Nu ACTION l recurse, grep s c ni dung ca tt c cc file bn trong th mc ( quy); ty chn ny tng ng vi ty chn -r. -f file, --file=file : ly cc mu t file, mt mu trn mt dng. File trng cha ng cc mu rng, v cc dng a ra cng l cc dng trng. -H, --with-file : a ra tn file trn mi dng cha mu tng ng. -h, --no-filename : khng hin th tn file km theo dng cha mu trong trng hp tm nhiu file. -i : hin th cc dng cha mu khng phn bit ch hoa ch thng. -l : a ra tn cc file trng vi mu lc. -n, --line-number : thm s th t ca dng cha mu trong file. -r, --recursive : c tt c cc file c trong th mc ( quy). -s, --no-messages : b qua cc thng bo li file khng c c hoc khng tn ti. -v, --invert-match : hin th cc dng khng cha mu. -w, --word-regexp : ch hin th nhng dng c cha mu lc l mt t trn vn. -x, --line-regexp : ch hin th nhng dng m ni dung trng hon ton vi mu lc. * Tm theo cc c tnh ca file Cc on trn y gii thiu cch thc tm file theo ni dung vi cc lnh grep, egrep v fgrep. Linux cn cho php ngi dng s dng mt cch thc khc y nng lc, l s dng lnh find, lnh tm file theo cc thuc tnh ca file. Lnh ny c mt s khc bit so vi cc lnh khc, l cc ty chn ca lnh l mt t ch khng phi mt k t. iu kin cn i vi lnh ny l ch ra c im bt u ca vic tm kim trong h thng file v nhng quy tc cn tun theo ca vic tm kim. C php lnh: find [ng-dn] [biu-thc] Lnh find thc hin vic tm kim file trn cy th mc theo biu thc c a ra. Mc nh ng dn l th mc hin thi, biu thc l -print. Biu thc c th c nhng dng sau: Cc ton t: ( EXPR ); ! EXPR hoc -not EXPR; EXPR1 -a EXPR2 hoc EXPR1 and EXPR2; EXPR1 -o EXPR2 hoc EXPR1 -or EXPR2; v EXPR1, EXPR2 Cc ty chn lnh: tt c cc ty chn ny lun tr v gi tr true v c t u biu thc o -daystart : o thi gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). o -depth : thc hin tm kim t ni dung bn trong th mc trc (mc nh vic tm kim c thc hin bt u ti gc cy th mc c cha file cn tm).
- 36 -

o -follow : (ty chn ny ch p dng cho th mc) nu c ty chn ny th cc lin kt tng trng c trong mt th mc lin kt s c ch ra. o -help, --help : hin th kt qu ca lnh find v thot. Cc test o -amin n : tm file c truy nhp n pht trc. o -atime n : tm file c truy nhp n*24 gi trc. o -cmin n : trng thi ca file c thay i n pht trc y. o -ctime n : trng thi ca file c thay i n*24 gi trc y. o -empty : file rng v hoc l th mc hoc l file bnh thng. o -fstype kiu : file thuc h thng file vi kiu. o -gid n : ch s nhm ca file l n. o -group nhm : file thuc quyn s hu ca nhm. o -links n : file c n lin kt. o -mmin n : d liu ca file c sa ln cui vo n pht trc y. o -mtime n : d liu ca file c sa vo n*24 gi trc y. o -name mu : tm kim file c tn l mu. Trong tn file c th cha c cc k t i din nh o du "*", "?"... o -type kiu : tm cc file thuc kiu vi kiu nhn cc gi tr: - b: c bit theo khi - c: c bit theo k t - d: th mc - p: pipe - f: file bnh thng - l: lin kt tng trng - s: socket o -uid n: ch s ngi s hu file l n. o -user tn-ngi: file c s hu bi ngi dng tn-ngi. Cc hnh ng o -exec lnh : ty chn ny cho php kt hp lnh find vi mt lnh khc c c thng tin nhiu hn v cc th mc c cha file cn tm. Ty chn exec phi s dng du {} - n s thay o th cho tn file tng ng, v du '\' ti cui dng lnh, (phi c khong trng gia {} v '\'). Kt thc lnh l du ';' o -fprint file : hin th y tn file vo trong file. Nu file khng tn ti th s c to ra, nu o tn ti th s b thay th ni dung. o -print : hin th y tn file trn thit b ra chun. o -ls : hin th file hin thi theo khun dng: lit k danh sch y km c s th mc, ch s ca mi file, vi kch thc file c tnh theo khi (block). 3.5 Nn v sao lu cc file 3.5.1 Sao lu cc file (lnh tar) Mt vn rt quan trng trong vic sao lu l la chn phng tin sao lu. cn phi quan tm n gi c, tin cy, tc , ch li cng nh tnh kh dng ca cc phng tin sao lu. C rt nhiu cc cng c c th c s dng sao lu. Cc cng c truyn thng l tar, cpio v dump (cng c trong ti liu ny l tar). Ngoi ra cn rt nhiu cc cng c khc c th la chn ty theo phng tin sao lu c trong h thng.
- 37 -

C hai kiu sao lu l sao lu theo kiu ton b (full backup) v sao lu theo kiu tng dn (incremental backup). Sao lu ton b thc hin vic sao mi th trn h thng file, bao gm tt c cc file. Sao lu tng dn ch sao lu nhng file c thay i hoc c to ra k t t sao lu cui cng. C php lnh: tar [ty-chn] [<file>,...] [<th-mc>,...] Lnh (chng trnh) tar c thit k to lp mt file lu tr duy nht. Vi tar, c th kt hp nhiu file thnh mt file duy nht c kch thc ln hn, iu ny s gip cho vic di chuyn file hoc sao lu bng t tr nn d dng hn nhiu. Cc ty chn: -c, --create : to file lu tr mi. -d, --diff, --compare : tm ra s khc nhau gia file lu tr v file h thng c lu tr. --delete : xa t file lu tr (khng s dng cho bng t). -r, --append : chn thm file vo cui file lu tr. -t, --list : lit k ni dung ca mt file lu tr. -u, --update : ch thm vo file lu tr cc file mi hn cc file c. -x, --extract, --get : tch cc file ra khi file lu tr. -C, --directory tn-th-mc : thay i n th mc c tn l tn-th-mc. --checkpoint : a ra tn th mc khi c file lu tr. -f, --file [HOSTNAME:]file : ty chn ny xc nh tn file lu tr hoc thit b lu tr l file (nu khng c ty chn ny, mc nh ni lu tr l /dev/rmt0). -h, --dereference : khng hin cc file lin kt m hin cc file m chng tr ti. -k, --keep-old-files : gi nguyn cc file lu tr ang tn ti m khng ghi file lu tr mi ln chng. -K, --starting-file file : bt u ti file trong file lu tr. -l, --one-file-system : to file lu tr trn h thng file cc b. -M, --multi-volume : ty chn ny c s dng khi dung lng ca file cn sao lu l ln v khng cha ht trong mt n v lu tr vt l. -N, --after-date DATE, --newer DATE : ch lu tr cc file mi hn cc file c lu tr trong ngy DATE. --remove-files : xa file gc sau khi sao lu chng vo trong file lu tr. --totals : a ra tng s byte c to bi ty chn --create. -v, --verbose : hin th danh sch cc file c x l. 3.5.2 Nn d liu Vic sao lu rt c ch nhng ng thi n cng chim rt nhiu khng gian cn thit sao lu. gim khng gian lu tr cn thit, c th thc hin vic nn d liu trc khi sao lu, sau thc hin vic gii nn nhn li ni dung trc khi nn. Trong Linux c kh nhiu cch nn d liu, ti liu ny gii thiu hai phng cch ph bin l gzip v compress. * Nn, gii nn v xem ni dung cc file vi lnh gzip, gunzip v zcat C php cc lnh: gzip [ty-chn] [ -S suffix ] [ < file> ] gunzip [ty-chn] [ -S suffix ] [ <file> ] zcat [ty-chn] [ <file> ] Lnh gzip s lm gim kch thc ca file v khi s dng lnh ny, file gc s b thay th bi file nn vi phn m rng l .gz, cc thng tin khc lin quan n file khng thay i. Nu khng c tn file no c ch ra th thng tin t thit b vo chun s c nn v gi ra thit b ra chun. Trong mt vi trng hp, lnh ny s b qua lin kt tng trng.
- 38 -

Nu tn file nn qu di so vi tn file gc, gzip s ct b bt. gzip s ch ct phn tn file vt qu 3 k t (cc phn c ngn cch vi nhau bi du chm). Nu tn file gm nhiu phn nh th phn di nht s b ct b. V d, tn file l gzip.msdos.exe, khi c nn s c tn l gzip.msd.exe.gz. File c nn c th c khi phc tr li dng nguyn th vi lnh gzip -d hoc gunzip. Vi lnh gzip c th gii nn mt hoc nhiu file c phn m rng l .gz, -gz, .z, -z, _z hoc .Z... gunzip dng gii nn cc file nn bng lnh gzip, zip, compress, compress -H. Lnh zcat c s dng khi mun xem ni dung mt file nn trn thit b ra chun. Cc ty chn: -c, --stdout --to-stdout : a ra trn thit b ra chun; gi nguyn file gc khng c s thay i. Nu c nhiu hn mt file u vo, u ra s tun t l cc file c nn mt cch c lp. -d, --decompress --uncompress : gii nn. -f, --force : thc hin nn hoc gii nn thm ch file c nhiu lin kt hoc file tng ng thc s tn ti, hay d liu nn c c hoc ghi trn thit b u cui. -h, --help : hin th mn hnh tr gip v thot. -l, --list : hin th nhng thng tin sau i vi mt file c nn: o compressed size: kch thc ca file nn o uncompressed size: kch thc ca file c gii nn o ratio: t l nn (0.0% nu khng bit) o uncompressed_name: tn ca file c gii nn Nu kt hp vi ty chn --verbose, cc thng tin sau s c hin th: o method: phng thc nn o crc: CRC 32-bit cho d liu c gii nn o date & time: thi gian cc file c gii nn Nu kt hp vi ty chn --name, tn file c gii nn, thi gian gii nn c lu tr trong file nn Nu kt hp vi ty chn --verbose, tng kch thc v t l nn ca tt c cc file s c hin th Nu kt hp vi ty chn --quiet, tiu v tng s dng ca cc file nn khng c hin th. -n, --no-name : khi nn, ty chn ny s khng lu tr tn file gc v thi gian nn, (tn file gc s lun c lu nu khi nn tn ca n b ct b). Khi gii nn, ty chn ny s khng khi phc li tn file gc cng nh thi gian thc hin vic nn. Ty chn ny c ngm nh. -N, --name : ty chn ny ngc vi ty chn trn (-n), n hu ch trn h thng c s gii hn v di tn file hay khi thi im nn b mt sau khi chuyn i file. -q, --quiet : b qua mi cnh bo. -r, --recursive : nn th mc. -S .suf, --suffix .suf : s dng phn m rng .suf thay cho .gz. Bt k phn m rng no cng c th c a ra, nhng cc phn m rng khc .z v .gz s b ngn chn trnh s ln xn khi cc file c chuyn n h thng khc. -t, --test : ty chn ny c s dng kim tra tnh ton vn ca file c nn -v, --verbose : hin th phn trm thu gn i vi mi file c nn hoc gii nn -#, --fast, --best : iu chnh tc ca vic nn bng cch s dng du #,
- 39 -

o Nu -# l -1 hoc --fast th s dng phng thc nn nhanh nht (less compression), o Nu l -9 hoc --best th s dng phng thc nn chm nht (best compression). o Ngm nh mc nn l -6 (y l phng thc nn theo tc nn cao). * Nn, gii nn v xem file vi cc lnh compress, uncompress, zcat C php cc lnh: compress [ty-chn] [<file>] uncompress [ty-chn] [<file>] zcat [ty-chn] [<file>] Lnh compress lm gim kch thc ca file v khi s dng lnh ny, file gc s b thay th bi file nn vi phn m rng l .Z, cc thng tin khc lin quan n file khng thay i. Nu khng c tn file no c ch ra, thng tin t thit b vo chun s c nn v gi ra thit b ra chun. Lnh compress ch s dng cho cc file thng thng. Trong mt vi trng hp, n s b qua lin kt tng trng. Nu mt file c nhiu lin kt cng, compress b qua vic nn file tr khi c ty chn -f. Cc ty chn: -f : nu ty chn ny khng c a ra v compress chy trong ch nn trc, ngi dng s c nhc khi cc file thc s tn ti v c th b ghi . Cc file c nn c th c khi phc li nh vic s dng lnh uncompress. -c : ty chn ny s thc hin vic nn hoc gii nn ri a ra thit b ra chun, khng c file no b thay i. Lnh zcat tng ng vi uncompress -c. zcat thc hin vic gii nn hoc l cc file c lit k trong dng lnh hoc t thit b vo chun a ra d liu c gii nn trn thit b ra chun. -r : nu ty chn ny c a ra, compress s thc hin vic nn cc th mc. -v : hin th t l gim kch thc cho mi file c nn. CU HI V BI tP 1. Trnh by c trng ca h qun l file. 2. Trnh by khi nim v cu trc siu khi 3. Trnh by khi nim v cu trc inode 4. Trnh by tn v tc dng ca cc th mc c bit trong Linux 5. Thc hnh cc lnh lin quan n h thng file

- 40 -

CHNG 4. QUN TR H THNG V NGI DNG


4.1. Qun tr ngi dng 4.1.1. Ti khon ngi dng Nh bit, trong h iu hnh a ngi dng, cn phn bit ngi dng khc nhau do quyn s hu cc ti nguyn trong h thng, chng hn nh, mi ngi dng c quyn hn vi file, qu trnh ca ring h. iu ny vn rt quan trng thm ch c khi my tnh ch c mt ngi s dng ti mt thi im. Mi truy cp h thng Linux u thng qua ti khon ngi dng. V th, mi ngi s dng c gn vi tn duy nht ( c ng k) v tn c s dng ng nhp. Tuy nhin mt ngi dng thc s c th c nhiu tn ng nhp khc nhau. Ti khon ngi dng c th hiu l tt c cc file, cc ti nguyn, v cc thng tin thuc v ngi dng . Khi ci t h iu hnh Linux, ng nhp root s c t ng to ra. ng nhp ny c xem l thuc v siu ngi dng (ngi dng cp cao, ngi qun tr), v khi ng nhp vi t cch ngi dng root, c th lm bt c iu g mun trn h thng. Tt nht ch nn ng nhp root khi thc s cn thit, v hy ng nhp vo h thng vi t cch l mt ngi dng bnh thng. Ni dung chng ny gii thiu cc lnh to mt ngi dng mi, thay i thuc tnh ca mt ngi dng cng nh xa b mt ngi dng. Lu , ch c th thc hin c cc lnh trn nu c quyn ca mt siu ngi dng. 4.1.2. Cc lnh c bn qun l ngi dng Ngi dng c qun l thng qua tn ngi dng (thc ra l ch s ngi dng). Nhn h thng qun l ngi dng theo ch s, v vic qun l theo ch s s d dng v nhanh thng qua mt c s d liu lu tr cc thng tin v ngi dng. Vic thm mt ngi dng mi ch c th thc hin c nu ng nhp vi t cch l siu ngi dng. to mt ngi dng mi, cn phi thm thng tin v ngi dng vo trong c s d liu ngi dng, v to mt th mc c nhn cho ring ngi dng . iu ny rt cn thit thit lp cc bin mi trng ph hp cho ngi dng. Lnh chnh thm ngi dng trong h thng Linux l useradd (hoc adduser). 4.1.2.1. File /etc/passwd Danh sch ngi dng cng nh cc thng tin tng ng c lu tr trong file /etc/passwd. V d di y l ni dung ca 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 Mi dng trong file tng ng vi by trng thng tin ca mt ngi dng, v cc trng ny c ngn cch nhau bi du ':'. ngha ca cc trng thng tin ln lt nh sau: Tn ngi dng (username) Mt khu ngi dng (passwd - c m ha) Ch s ngi dng (user id) Cc ch s nhm ngi dng (group id) Tn y hoc cc thng tin khc v ti khon ngi dng (comment)
- 41 -

Th mc ngi dng ng nhp Shell ng nhp (chng trnh chy lc ng nhp) Bt k ngi dng no trn h thng u c th c c ni dung file /etc/passwd, v c th ng nhp vi t cch ngi dng khc nu h bit c mt khu, y chnh l l do v sao mt khu ng nhp ca ngi dng khng hin th trong ni dung file. 4.1.2.2. Thm ngi dng vi lnh useradd Siu ngi dng s dng lnh useradd to mt ngi dng mi hoc cp nht ngm nh cc thng tin v ngi dng. C php lnh: useradd [ty-chn] <tn-ngi-dng> useradd -D [ty-chn] Nu khng c ty chn -D, lnh useradd s to mt ti khon ngi dng mi s dng cc gi tr c ch ra trn dng lnh v cc gi tr mc nh ca h thng. Ti khon ngi dng mi s c nhp vo trong cc file h thng, th mc c nhn s c to, hay cc file khi to c sao chp, iu ny ty thuc vo cc ty chn c a ra. Cc ty chn: -c, comment : son tho trng thng tin v ngi dng. -d, home_dir : to th mc ng nhp cho ngi dng. -e, expire_date : thit t thi gian (YYYY-MM-DD) ti khon ngi dng s b hy b. -f, inactive_days : ty chn ny xc nh s ngy trc khi mt khu ca ngi dng ht hiu lc khi ti khon b hy b. Nu =0 th hy b ti khon ngi dng ngay sau khi mt khu ht hiu lc, =-1 th ngc li (mc nh l -1). -g, initial_group : ty chn ny xc nh tn hoc s khi to ng nhp nhm ngi dng. Tn nhm phi tn ti, v s ca nhm phi tham chiu n mt nhm tn ti. S nhm ngm nh l 1. -G, group : danh sch cc nhm ph m ngi dng cng l thnh vin thuc cc nhm . Mi nhm s c ngn cch vi nhm khc bi du ',', mc nh ngi dng s thuc vo nhm khi to. -m : vi ty chn ny, th mc c nhn ca ngi dng s c to nu n cha tn ti. -M : khng to th mc ngi dng. -n : ngm nh khi thm ngi dng, mt nhm cng tn vi ngi dng s c to. Ty chn ny s loi b s ngm nh trn.// -p, passwd : to mt khu ng nhp cho ngi dng.// -s, shell : thit lp shell ng nhp cho ngi dng. -u, uid : thit t ch s ngi dng, gi tr ny phi l duy nht. Thay i cc gi tr ngm nh Khi ty chn -D c s dng, lnh useradd s b qua cc gi tr ngm nh v cp nht cc gi tr mi. -b, default_home : thm tn ngi dng vo cui th mc c nhn to tn th mc c nhn mi. -e, default_expire_date : thay i thi hn ht gi tr ca ti khon ngi dng. -f, default_inactive : xc nh thi im ht hiu lc ca mt khu ng nhp khi ti khon ngi dng b xa b. -g, default_group : thay i ch s nhm ngi dng. -s, default_shell : thay i shell ng nhp. Ngoi lnh useradd, c th to ngi dng mi bng cch sau:
- 42 -

Son tho file /etc/passwd bng vipw. Lnh vipw m trnh son tho trn h thng v hiu chnh bn sao tm ca file /etc/passwd. Vic s dng file tm v kha file s c tc dng nh mt c ch kha ngn vic hai ngi dng cng son tho file mt lc. Lc s thm dng thng tin mi v ngi dng cn to. Hy cn thn trong vic son tho trnh nhm ln. Ring trng mt khu nn trng v to mt khu sau. Khi file ny c lu, vipw s kim tra s ng nht trn file b thay i. Nu tt c mi th dng nh thch hp th c ngha l file /etc/passwd c cp nht. V d: thm ngi dng c tn l new, ch s ngi dng 503, ch s nhm l 100, th mc c nhn l /home/new v shell ng nhp 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 To th mc c nhn ca ngi dng mi # mkdir /home/new Sao chp cc file t th mc /etc/skel/ (y l th mc lu tr cc file cn thit cho ngi dng) vo file c nhn va to Thay i quyn s hu v cc quyn truy nhp file /home/new vi cc lnh chown v chmod # chown new /home/new # chmod go=u,go-w /home/new Thit lp mt khu ca ngi dng: # passwd new passwd: Sau khi thit lp mt khu cho ngi dng bc cui cng, ti khon ngi dng s lm vic. Nn thit lp mt khu ngi dng bc cui cng, nu khng h c th v tnh ng nhp trong khi ang sao chp cc file. 4.1.2.3. Thay i thuc tnh ngi dng Trong Linux c rt nhiu lnh cho php thay i mt s cc thuc tnh ca ti khon ngi dng nh: chfn: thay i thng tin c nhn ca ngi dng. chsh: thay i shell ng nhp. passwd: thay i mt khu. Mt s cc thuc tnh khc s phi thay i bng tay. V d, thay i tn ngi dng, cn son tho li trc tip trn file /etc/passwd (vi lnh vipw). Nhng c mt lnh tng qut cho php c th thay i bt k thng tin no v ti khon ngi dng, l lnh usermod. C php lnh: usermod [ty-chn] <tn-ng-nhp> Lnh usermod sa i cc file ti khon h thng theo cc thuc tnh c xc nh trn dng lnh. Cc ty chn: -c, comment : son tho trng thng tin v ngi dng. -d, home_dir : to th mc ng nhp cho ngi dng.

- 43 -

-e, expire_date : thit t thi gian (YYYY-MM-DD) ti khon ngi dng s b hy b. -f, inactive_days : ty chn ny xc nh s ngy trc khi mt khu ca ngi dng ht hiu lc khi ti khon b hy b. Nu =0 th hy b ti khon ngi dng ngay sau khi mt khu ht hiu lc, =-1 th ngc li (mc nh l -1). -g, initial_group : ty chn ny xc nh tn hoc s khi to ng nhp nhm ngi dng. Tn nhm phi tn ti, v s ca nhm phi tham chiu n mt nhm tn ti. S nhm ngm nh l 1. -G, group : danh sch cc nhm ph m ngi dng cng l thnh vin thuc cc nhm . Mi nhm s c ngn cch vi nhm khc bi du ',', mc nh ngi dng s thuc vo nhm khi to. -m : vi ty chn ny, th mc c nhn ca ngi dng s c to nu n cha tn ti. -M : khng to th mc ngi dng. -n : ngm nh khi thm ngi dng, mt nhm cng tn vi ngi dng s c to. Ty chn ny s loi b s ngm nh trn.// -p, passwd : to mt khu ng nhp cho ngi dng.// -s, shell : thit lp shell ng nhp cho ngi dng. -u, uid : thit t ch s ngi dng, gi tr ny phi l duy nht. Lnh usermod khng cho php thay i tn ca ngi dng ang ng nhp. Phi m bo rng ngi dng khng thc hin bt k qu trnh no trong khi lnh usermod ang thc hin thay i cc thuc tnh ca ngi dng . V d mun thay i tn ngi dng new thnh tn mi l newuser, hy g lnh sau: # usermod -l new newuser 4.1.2.4 Xa b mt ngi dng xa b mt (ti khon) ngi dng, trc ht phi xa b mi th c lin quan n ngi dng. C php lnh: userdel [-r] <tn-ngi-dng> Lnh ny s thay i ni dung ca cc file ti khon h thng bng cch xa b cc thng tin v ngi dng c a ra trn dng lnh. Ngi dng ny phi thc s tn ti. Tu chn -r c ngha cc file tn ti trong th mc ring ca ngi dng cng nh cc file nm trong cc th mc khc c lin quan n ngi dng b xa b cng lc vi th mc ngi dng. Lnh userdel s khng cho php xa b ngi dng khi h ang ng nhp vo h thng. Phi hy b mi qu trnh c lin quan n ngi dng trc khi xo b ngi dng . Ngoi ra cng c th xa b ti khon ca mt ngi dng bng cch hiu chnh li file /etc/passwd. 4.2. Cc lnh c bn lin quan n nhm ngi dng Mi ngi dng trong h thng Linux u thuc vo mt nhm ngi dng c th. Tt c nhng ngi dng trong cng mt nhm c th cng truy nhp mt trnh tin ch, hoc u cn truy cp mt thit b no nh my in chng hn. Mt ngi dng cng lc c th l thnh vin ca nhiu nhm khc nhau, tuy nhin ti mt thi im, ngi dng ch thuc vo mt nhm c th. Nhm c th thit lp cc quyn truy nhp cc thnh vin ca nhm c th truy cp thit b, file, h thng file hoc ton b my tnh m nhng ngi dng khc khng thuc nhm khng th truy cp c.
- 44 -

4.2.1. Nhm ngi dng v file /etc/group Thng tin v nhm ngi dng c lu trong file /etc/group, file ny c cch b tr tng t nh file /etc/passwd. V d ni dung ca 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: Mi dng trong file c bn trng c phn cch bi du ':'. ngha ca cc trng theo th t xut hin nh sau: Tn nhm ngi dng (groupname) Mt khu nhm ngi dng (passwd - c m ha), nu trng ny rng, tc l nhm khng yu cu mt khu Ch s nhm ngi dng (group id) Danh sch cc ngi dng thuc nhm (users) 4.2.1.2. Thm nhm ngi dng Cho php hiu chnh thng tin trong file /etc/group bng bt k trnh son tho vn bn no c trn h thng ca thm nhm ngi dng, nhng cch nhanh nht l s dng lnh groupadd. C php lnh : groupadd [ty-chn] <tn-nhm> Cc tu chn: g, gid : ty chn ny xc nh ch s nhm ngi dng, ch s ny phi l duy nht. Ch s mi phi c gi tr ln hn 500 v ln hn cc ch s nhm c trn h thng. Gi tr t 0 n 499 ch dng cho cc nhm h thng. -r : ty chn ny c dng khi mun thm mt ti khon h thng. -f : ty chn ny s b qua vic nhc nh, nu nhm ngi dng tn ti, n s b ghi . V d: Thm nhm ngi dng bng cch son tho file /etc/group: installer:x:102:hieu, huy, sang tiengviet:x:103:minh, long, dung Hai dng trn s b sung hai nhm ngi dng mi cng danh sch cc thnh vin trong nhm: nhm installer vi ch s nhm l 102 v cc thnh vin l cc ngi dng c tn hieu, huy, sang. Tng t l nhm tiengviet vi ch s nhm l 103 v danh sch cc thnh vin l minh, long, dung. y l hai nhm (102, 103) ngi dng h thng. Thm nhm ngi dng mi vi lnh groupadd: # groupadd -r installer Lnh trn s cho php to mt nhm ngi dng mi c tn l installer, tuy nhin cc thnh vin trong nhm s phi b sung bng cch son tho file /etc/group. 4.2.1.2. Sa i cc thuc tnh ca mt nhm ngi dng C php lnh: groupmod [ty-chn] <tn-nhm> Thng tin v cc nhm xc nh qua tham s tn-nhm c iu chnh. Cc ty chn: -g, gid : thay i gi tr ch s ca nhm ngi dng.
- 45 -

-n, group_name : thay i tn nhm ngi dng. 4.2.1.3. Xa mt nhm ngi dng Nu khng mun mt nhm no tn ti na th ch vic xa tn nhm trong file /etc/group. Nhng phi lu rng, ch xa c mt nhm khi khng c ngi dng no thuc nhm na. C php lnh: groupdel <tn-nhm> Lnh ny s sa i cc file ti khon h thng, xa tt c cc thc th lin quan n nhm. Tn nhm phi thc s tn ti. 4.2.2. Cc lnh c bn khc c lin quan n ngi dng Ngoi cc lnh nh thm ngi dng, xa ngi dng..., cn c mt s lnh khc c th gip ch rt nhiu nu ang lm vic trn mt h thng a ngi dng. 4.2.2.1. ng nhp vi t cch mt ngi dng khc khi dng lnh su i lc mun thc hin lnh nh mt ngi dng khc v s dng cc file hay thit b thuc quyn s hu ca ngi dng . Lnh su cho php thay i tn ngi dng mt cch hiu qu v cp cho cc quyn truy nhp ca ngi dng . C php lnh: su <ngi-dng> Nu ng nhp vi t cch ngi dng bnh thng v mun tr thnh siu ngi dng (root) dng lnh sau: # su root Khi h thng s yu cu nhp mt khu ca siu ngi dng. Nu cung cp ng mt m, th s l ngi dng root cho ti khi dng lnh exit hoc CTRL+d ng xut ra khi ti khon ny v tr v ng nhp ban u. Tng t, nu ng nhp vi t cch root v mun tr thnh ngi dng bnh thng c tn l newer th hy g lnh sau: # su newer s khng b hi v mt khu khi thay i t siu ngi dng sang mt ngi dng khc. Tuy nhin nu ng nhp vi t cch ngi dng bnh thng v mun chuyn i sang mt ng nhp ngi dng khc th phi cung cp mt khu ca ngi dng . 4.2.2.2. Xc nh ngi dng ang ng nhp * Xc nh hin ti c nhng ai ang ng nhp trn h thng. C php lnh: who [ty-chn] Cc tu chn: -H, --heading : hin th tiu ca cc ct trong ni dung lnh. -m : hin th tn my v tn ngi dng vi thit b vo chun. -q, --count : hin th tn cc ngi dng ng nhp v s ngi dng ng nhp. V d: # who root tty1 Nov 15 03:54 lan pts/0 Nov 15 06:07 # Lnh who hin th ba ct thng tin cho tng ngi dng trn h thng. Ct u l tn ca ngi dng, ct th hai l tn thit b u cui m ngi dng ang s dng, ct th ba hin th ngy gi ngi dng ng nhp. Ngoi who, c th s dng thm lnh users xc nh c nhng ngi ng nhp trn h thng. V d: # users

- 46 -

* Trong trng hp ngi dng khng nh ni tn ng nhp trong mt phin lm vic (iu ny nghe c v nh hi v l nhng l tnh hung i lc gp phi), hy s dng lnh whoami v who am i. C php lnh: whoami hoc who am i Lnh who am i s hin kt qu y hn vi tn my ng nhp, tn ngi dng ang ng nhp, tn thit b v ngy gi ng nhp. * Xc nh thng tin ngi dng C php lnh: id [ty-chn] [ngi-dng] Lnh ny s a ra thng tin v ngi dng c xc nh trn dng lnh hoc thng tin v ngi dng hin thi. Cc tu chn: -g, --group : ch hin th ch s nhm ngi dng. -u, --user : ch hin th ch s ca ngi dng. --help : hin th trang tr gip v thot. 4.2.2.3. Xc nh cc qu trnh ang c tin hnh Lnh w cho php xc nh c thng tin v cc qu trnh ang c thc hin trn h thng v nhng ngi dng tin hnh qu trnh . C php lnh: w [ngi-dng] Lnh w a ra thng tin v ngi dng hin thi trn h thng v qu trnh h ang thc hin. Nu ch ra ngi dng trong lnh th ch hin ra cc qu trnh lin quan n ngi dng . 4.3. Qun tr h thng 4.3.1. Qun l tin trnh 4.3.1.1. Gii thiu chung Linux l h iu hnh a ngi s dng, a tin trnh. Vic iu khin tin trnh ang hot ng rt quan trng trong qun tr h thng Linux. Tin trnh l on chng trnh n chy trn khng gian a ch o ca n. Cn phn bit tin trnh vi lnh v mt dng shell c th sinh ra nhiu tin trnh. C ba loi tin trnh chnh trn Linux: Tin trnh i thoi (interarctive process): L tin trnh khi ng v qun l bi shell, k c tin trnh foreground hoc background. Tin trnh batch (batch process): Tin trnh khng gn lin n terminal v c nm trong hng i sn sng thc hin. Tin trnh n trn b nh (Daemon process): L cc tin trnh chy di nn (background). Cc tin trnh ny thng c khi ng t u. y l cc chng trnh sau khi c gi ln b nh, i th ng cc yu cu ca chng trnh khch (client). 4.3.1.2. iu khin v gim st cc tin trnh Nh cp trc y, cc tin trnh thng trc thng c bt u bng tin trnh init khi khi ng. Chng ta c th iu khin tin trnh no chy ngay khi khi ng bng cch cu hnh li cc file cu hnh v kch bn ca init. Ngoi tr cc tin trnh thng trc, cc loi tin trnh khc m chng ta s chy c gi l cc tin trnh ca ngi s dng hay cc tin trnh tng tc. Chng ta phi chy mt tin trnh tng tc thng qua mt shell. Mi mt shell chun cung cp mt dng lnh khi ngi s dng vo tn ca mt chng trnh. Khi ngi s dng vo tn chng trnh hp l trn dng lnh, shell s t to mt bn copy nh
- 47 -

mt tin trnh mi v thay th tin trnh mi vi chng trnh c t tn trn dng lnh. Ni mt cch khc shell s chy chng trnh c t tn nh mt tin trnh khc. ly thng tin v tt c cc tin trnh ang chy trn h thng ca chng ta, chng ta cn chy tin ch c tn l ps 4.3.1.3. Cc lnh x l tin trnh * Lnh fg v lnh bg Trong phn trc, cch thc g phm CTRL+z tm dng mt tin trnh c gii thiu. Linux cn ngi dng cch thc chy mt chng trnh di ch nn (background) - s dng lnh bg - trong khi cc chng trnh khc ang chy, v chuyn mt chng trnh vo trong ch nn - dng k hiu &. Nu mt tin trnh hot ng m khng a ra thng tin no trn mn hnh v khng cn nhn bt k thng tin u vo no, th c th s dng lnh bg a n vo trong ch nn ( ch ny n s tip tc chy cho n khi kt thc). Khi chng trnh cn a thng tin ra mn hnh hoc nhn thng tin t bn phm, h thng s t ng dng chng trnh v thng bo cho ngi dng. Cng c th s dng ch s iu khin cng vic (job control) lm vic vi chng trnh no mun. Khi chy mt chng trnh trong ch nn, chng trnh c nh s th t (c bao bi du ngoc vung []), theo sau l ch s ca tin trnh. Sau c th s dng lnh fg + s th t ca chng trnh a chng trnh tr li ch ni v tip tc chy. c mt chng trnh (hoc mt lnh ng) t ng chy trong ch nn, ch cn thm k hiu '&' vo cui lnh. Trong mt s h thng, khi tin trnh nn kt thc th h thng s gi thng bo ti ngi dng, nhng trn hu ht cc h thng, khi tin trnh trn nn hon thnh th h thng s ch cho n khi ngi dng g phm Enter th mi hin th du nhc lnh mi km theo thng bo hon thnh tin trnh (thng th mt tin trnh hon thnh sau khong 20 giy). * Hin th cc tin trnh ang chy Linux cung cp cho ngi dng hai cch thc nhn bit c nhng chng trnh no ang chy trong h thng. Cch d hn, l lnh jobs s cho bit cc tin trnh no dng hoc l c chy trong ch nn. Cch phc tp hn l s dng lnh ps. Lnh ny cho bit thng tin y nht v cc tin trnh ang chy trn h thng. V d: # ps PID TTY TIME CMD 7813 pts/0 00:00:00 bash 7908 pts/0 00:00:00 ps # Trong : PID - ch s ca tin trnh, TTY - tn thit b u cui trn tin trnh c thc hin, TIME - thi gian chy tin trnh, CMD - lnh khi to tin trnh C php lnh: ps [ty-chn] Lnh ps c mt lng qu phong ph cc ty chn c chia ra lm nhiu loi. Di y l mt s cc ty chn hay dng. Cc ty chn n gin:
- 48 -

-A, -e : chn hin th tt c cc tin trnh. -T : chn hin th cc tin trnh trn trm cui ang chy. -a : chn hin th tt c cc tin trnh trn mt trm cui, bao gm c cc tin trnh ca nhng ngi dng khc. -r : ch hin th tin trnh ang c chy. Chn theo danh sch -C : chn hin th cc tin trnh theo tn lnh. -G : hin th cc tin trnh theo ch s nhm ngi dng. -U : hin th cc tin trnh theo tn hoc ch s ca ngi dng thc s (ngi dng khi ng tin trnh). -p : hin th cc tin trnh theo ch s ca tin trnh. -s : hin th cc tin trnh thuc v mt phin lm vic. -t : hin th cc tin trnh thuc mt trm cui. -u : hin th cc tin trnh theo tn v ch s ca ngi dng hiu qu. Thit t khun dng c a ra ca cc tin trnh -f : hin th thng tin v tin trnh vi cc trng sau UID - ch s ngi dng, PID - ch s tin trnh, PPID - ch s tin trnh khi to ra tin trnh, C - , STIME - thi gian khi to tin trnh, TTY - tn thit b u cui trn tin trnh c chy, TIME - thi gian thc hin tin trnh, CMD - lnh khi to tin trnh -l : hin th y cc thng tin v tin trnh vi cc trng F, S, UID, PID, PPID, C, PRI, NI, ADDR, SZ, WCHAN, TTY, TIME, CMD -o xu-chn : hin th cc thng tin v tin trnh theo dng do ngi dng t chn thng qua xu-chn cc k hiu iu khin hin th c cc dng nh sau: %C, %cpu % CPU c s dng cho tin trnh %mem % b nh c s dng chy tin trnh %G tn nhm ngi dng %P ch s ca tin trnh cha khi ng ra tin trnh con %U nh danh ngi dng %c lnh to ra tin trnh %p ch s ca tin trnh %x thi gian chy tin trnh %y thit b u cui trn tin trnh c thc hin * Hy tin trnh Trong mt s trng hp, s dng lnh kill hy b mt tin trnh. iu quan trng nht khi s dng lnh kill l phi xc nh c ch s ca tin trnh m chng ta mun hy. C php lnh: kill [ty-chn] <ch-s-ca-tin-trnh> kill -l [tn hiu] Lnh kill s gi mt tn hiu n tin trnh c ch ra. Nu khng ch ra mt tn hiu no th ngm nh l tn hiu TERM s c gi. -s : xc nh tn hiu c gi. Tn hiu c th l s hoc tn ca tn hiu. Di y l mt s tn hiu hay dng: o SIGHUP (hang up) y l tn hiu c gi n tt c cc qu trnh ang chy trc khi logout khi h thng o SIGINT (interrupt) y l tn hiu c gi khi nhn Ctrl+C o SIGK (kill) tn hiu ny s dng tin trnh ngay lp o SIGT tn hiu ny yu cu dng tin trnh ngay lp tc, nhng cho php chng trnh xa cc file tm -p : lnh kill s ch a ra ch s ca tin trnh m khng gi mt tn hiu no.
- 49 -

-l : hin th danh sch cc tn hiu m lnh kill c th gi n cc tin trnh (cc tn hiu ny c trong file /usr/include/Linux/signal.h) * Cho my ngng hot ng mt thi gian Nu mun cho my ngh mt thi gian m khng mun tt v ngi khi ng li th cn dng lnh sleep. C php lnh: sleep [ty-chn] NUMBER[SUFFIX] NUMBER: s giy(s) ngng hot ng. SUFFIX : c th l giy(s) hoc pht(m) hoc gi hoc ngy(d) Cc ty chn: --help : hin th tr gip v thot --version : hin th thng tin v phin bn v thot * Xem cy tin trnh bit lnh xem cc tin trnh ang chy trn h thng, tuy nhin trong Linux cn c mt lnh cho php c th nhn thy mc phn cp ca cc qu trnh, l lnh pstree. C php lnh: pstree [ty-chn] [pid | ngi-dng] Lnh pstree s hin th cc tin trnh ang chy di dng cy tin trnh. Gc ca cy tin trnh thng l init. Nu a ra tn ca mt ngi dng th cy ca cc tin trnh do ngi dng s hu s c a ra. pstree thng gp cc nhnh tin trnh trng nhau vo trong du ngoc vung, v d: nit -+-getty |-getty |-getty |-getty thnh init ---4*[getty] Cc ty chn: -a : ch ra tham s dng lnh. Nu dng lnh ca mt tin trnh c tro i ra bn ngoi, n c a vo trong du ngoc n. -c : khng th thu gn cc cy con ng nht. Mc nh, cc cy con s c thu gn khi c th -h : hin th tin trnh hin thi v "t tin" ca n vi mu sng trng -H : ging nh ty chn -h, nhng tin trnh con ca tin trnh hin thi khng c mu sng trng -l : hin th dng di. -n : sp xp cc tin trnh cng mt t tin theo ch s tin trnh thay cho sp xp theo tn * Lnh thit t li u tin ca tin trnh Ngoi cc lnh xem v hy b tin trnh, trong Linux cn c hai lnh lin quan n u tin ca tin trnh, l lnh nice v lnh renice. - chy mt chng trnh vi u tin nh trc, hy s dng lnh nice. C php lnh: nice [ty-chn] [lnh [tham-s ]... ] Lnh nice s chy mt chng trnh (lnh) theo u tin sp xp. Nu khng c lnh, mc u tin hin ti s hin th. u tin c sp xp t -20 (mc u tin cao nht) n 19 (mc u tin thp nht). -ADJUST : tng u tin theo ADJUST u tin
- 50 -

--help : hin th trang tr gip v thot - thay i u tin ca mt tin trnh ang chy, hy s dng lnh renice. C php lnh: renice <-u-tin> [ty-chn] Lnh renice s thay i mc u tin ca mt hoc nhiu tin trnh ang chy. -g : thay i quyn u tin theo nhm ngi dng -p : thay i quyn u tin theo ch s ca tin trnh -u : thay i quyn u tin theo tn ngi dng 4.3.2 Qun tr phn mm Linux pht trin h thng qun tr phn mm c giao din thn thin v hiu qu l RPM (Redhad Package Manager). RPM l chng trnh qun l cc package, n t ng lm cc qu trnh nh ci t, nng cp, xa v bo tr phn mm trong Linux. Lnh rpm c rt nhiu tham s. kim tra mt cch nhanh chng danh sch cc phn mm c trong h thng, ta dng: rpm qa qa c ngha l query all packet. ci t mt phn mm, ta dng lnh rpm ivh <phn_mm> xa mt phn mm, ta dng lnh rpm --erase <phn_mm> Ngoi ra Linux cn dng tin ch kpacket trong mi trng KDE gip ta qun l cc kpacket mt cch c hiu qu trn giao din ha. 4.3.3. Qun tr h thng Linux * H thng /proc Th mc /proc rt quan trng, ng vai tr sng cn i vi Linux. y l th mc o, n cha thng tin ca h thng, cc tin trnh, cc tham s h thng theo thi gian thc. Cc thng tin cha trong n c to ra mt cch ng da trn cc qu trnh startup v shutdown ca h thng. * Cc lnh bo tr khc: Lnh free: Hin th tng dung lng b nh chnh v swap ang c dng v cn trng cng nh share memory v buffers c dng bi kernel. Lnh df: Hin th dung lng a cn trng trn h thng file. n v l 1K block, vi 512B cho 1 blick. Lnh sudo: Cho php qun tr h thng nng cp quyn truy xut n mt tp lnh qun tr h thng cho mt vi user thng. * H thng log file: var/log/message: Cho bit cc s kin din ra trong h thng bao gm cc hnh ng start, stop cc tin trnh, user login logout, cc li h thng var/log/sercure: Lu gi thng tin thng k login, logout v cc ipadress truy cp vo h thng. var/log/boot: Lu cc thng tin khi h thng mi khi ng. dmesg: Hin th cc thng tin ca phn cng khi h thng boot ln dmesg |more

- 51 -

CU HI V BI TP 1. Trnh by cu trc thng tin lu tr v ti khon ngi ca mt dng trong trong file /etc/passwd 2. Trnh by cu trc thng tin lu tr v nhm ti khon ngi dng trong trong file /etc/group 3. Thc hnh cc lnh lin quan n qun l nhm, qun l ti khon ngi dng.

- 52 -

Chng 5. TRUYN THNG V MNG UNIX-LINUX


5.1. Lnh truyn thng 5.1.1. Lnh write Lnh write c dng trao i gia nhng ngi hin ang cng lm vic trong h thng. C php lnh: $write <tn ngi dng> [<tn trm cui>] V d cn gi thng bo n ngi dng c tn user2 s g: $write user2 tty43 Nu ngi dng user2 hin khng lm vic th trn mn hnh ngi dng user1 s hin ra: "user2 is not logged in" v hin li du mi shell. Nu ngi dng user2 ang lm vic, my ngi dng user2 s pht ra ting chung v trn mn hnh hin ra: Message from user1 on tty17 at <gi, pht> Cng lc , ti my ca user1 mn hnh trng hin nhng thng tin gi ti ngi dng user2. Ngi gi g thng bo ca mnh theo quy tc: Kt thc mt dng bng cm -o, Kt thc dng cui cng (ht thng bo) bng cm -oo. kt thc kt ni vi ngi dng user2, ngi dng user1 g ctrl-d. t chi mi vic nhn thng bo t ngi khc, s dng lnh khng nhn thng bo: $mesg n (n - no) Mt ngi khc gi thng bo n ngi ny s nhn c vic truy nhp khng cho php permission denied. tip tc cho php ngi khc gi thng bo n, s dng lnh: $mesg y (y - yes) 5.1.2. Lnh mail Lnh mail cho php gi th in t gia cc ngi dng, song hot ng theo ch off-line (gin tip). Khi dng lnh write truyn thng cho nhau th i hi hai ngi gi v nhn ng thi ang lm vic v cng chp nhn cuc trao i . Cch thc s dng mail l khc hn: mt trong hai ngi gi hoc nhn c th khng ng nhp vo h thng. m bo cch thc truyn thng gin tip (cn gi l off-line) nh vy, h thng to ra cho mi ngi dng mt hp th ring. Khi mt ngi dng lnh mail gi th n mt ngi khc th th c t ng cho vo hp th ca ngi nhn v ngi nhn sau cng dng lnh mail xem trong hp th c th mi hay khng. Khng nhng th mail cn cho php s dng trn mng internet (a ch mail thng di dng tn- login@my.mng.lnhvc.quc-gia). - Lnh mail ch yu cu ngi gi (hoc ngi nhn) login trong h thng. Vic nhn v gi th c tin hnh t mt ngi dng. Th gi i cho ngi dng khc, c lu ti hp th ca h thng. - Ti thi im login h thng, ngi dng c th thy c c th mi khi trn mn hnh xut hin dng thng bo "you have mail". Lnh mail trong UNIX gm 2 chc nng: gi th v qun l th. Tng ng, c hai ch lm vic vi lnh mail: mode lnh (command mode) qun tr th v mode son (compose mode) cho php to th.
- 53 -

a/ Mode son Mode son lm vic trc tip vi mt th v gi ngay cho ngi khc. Mode son thc cht l s dng lnh mail c tham s: $mail < tn_ngi_nhn Lnh ny cho php son v gi th cho ngi nhn c tn c ch. Sau khi g lnh, mn hnh b xa v con tr son tho nhp nhy gc trn, tri ngi dng g ni dung th. kt thc son th, hy g ctrl-d, mn hnh ca mail bin mt v du mi ca shell li xut hin. Ch : Dng sau y c dng gi th son trong ni dung mt file no (ch du "<" ch dn thit b vo chun l ni dung file thay v cho bn phm): $mail tn_ngi_nhn < tn_file_ni_dung_th Cch lm trn y hay c s dng trong gi / nhn th in t hoc lin kt truyn thng v cho php tit kim c thi gian kt ni vo h thng, c bit chi ph phi tr khi kt ni l ng k. b/ Mode lnh Nh ni s dng mode lnh ca mail qun l hp th. Vo mail theo mode lnh khi dng lnh mail khng tham s: $mail Sau khi g lnh, mn hnh mail mode lnh c hin ra vi du mi ca mode lnh. (ph bin l du chm hi "?") Ti y ngi dng s dng cc lnh ca mail qun l h thng th ca mnh. Cn tr gip g du chm hi (mn hnh c hai du ??): ? mn hnh hin ra dng sau: <s> Hin th s <s> (du cch) Hin th ngay pha trc + Hin th ngay tip theo l cmd thc hin lnh cmd dq xa th hin thi v ra khi mail m user gi th hin thi cho ngi dng s tn-file ghi th hin thi vo file c tn r [tn-file] tr li th hin thi (c th t file) d <s> xa th s u khi phc th hin thi u <s> khi phc th s m <user>... chuyn tip th ti cc ngi dng khc q ra khi mail Thc hin cc lnh theo ch dn trn y qun tr c hp th ca c nhn. 5.1.3. Lnh talk Trong Linux cho php s dng lnh talk thay th cho lnh write. 5.2 Cu hnh Card giao tip mng cc my c th giao tip c vi nhau trong mng theo giao thc TCP/IP, thit b dng lm phng tin giao tip l Card giao tip mng (network card). qun l thit b ny Linux cung cp lnh ifconfig. Lnh ny dng xem cc thng tin v cu hnh mng hin thi ca my cng nh gn cc a ch cho cc card giao tip mng (interface). Ngoi ra ta cng c th dng lnh ny kch hot hoc tt mt card mng. /sbin/ifconfig <giao din> [ <a ch> ] [ arp | -arp][broadcast <a ch>] [netmask <mt n mng> ] - 54 -

Trong : <giao din> : tn ca thit b giao tip mng, chng hn eth0 cho card mng u tin, eth1 cho card mng th hai. <a ch> : a ch mng s gn cho giao din ny. up : tu chn ny s kch hot giao din c ch ra. down : tu chn ny s tt giao din c ch ra. arp | -arp : cho php hay cm giao thc ARP trn giao din ny. broadcast <a ch> : xc nh a ch qung b cho giao din ny. netmask <mt n mng> : xc nh mt n mng cho giao din ny. xem cu hnh ca my hin ti ta dng lnh # ifconfig Mun ch xem cc thng tin v mt card mng no thi ta dng lnh: # ifconfig eth0 Mun kch hot mt card mng ta dng lnh # ifconfig eth0 up Mun tt mt card mng ta dng lnh # ifconfig eth0 down Mun t li a ch cho mt card mng ta dng lnh: # ifconfig eth0 203.162.9.154 netmask 255.255.255.248 Ngoi ra nu my tnh c ci giao din GNOME cng cc package qun l mng ca GNOME th ta c th s dng lnh c giao din ho gip cho vic cu hnh cc tham s card mng d dng hn. c cng c ny ta phi ci t package redhat-config-networkxxx.rpm trong xxx l s hiu phin bn ca chng trnh. Trong giao din ho GNOME ta nh lnh redhat-config-network, mt hp thoi s hin ln cho php ta thay i cc tham s cho tng card mng c ci trn my. 5.3. Cc dch v mng 5.3.1 H thng tin mng NIS Khi s dng h thng mng ni chung, mc ch ca chng ta l lm cho mi trng mng tr nn trong sut i vi ngi dng. Mt trong nhng im quan trng l lm cho cc d liu quan trng nh l thng tin v ngi dng, v cc trm trong mng l ng nht trn tt c cc trm lm vic. NIS (Network Information System) l mt ng dng cung cp cc tin ch truy nhp c s d liu phn phi thng tin, chng hn nh d liu trong /etc/passwd v /etc/group cho tt c cc my trm trn mng. iu ny lm cho mng tr nn mt h thng duy nht. NIS c xy dng trn vic s dng dch v RPC (Remote Procedure Call). N bao gm mt th vin my ch, th vin my trm v cc cng c qun tr. Ban u NIS c gi l nhng trang vng (Yellow Pages YP). Cng vi s pht trin ca NIS m c s xut hin khc nhau trong cc phin bn. NIS truyn thng c xy dng trn th vin libc 4/5. NIS+ l s m rng ca NIS song vn h tr bo mt thng tin. NYS l mt phin bn chun h tr c NIS v NIS+. Hot ng ca NIS: NIS lu tr c s d liu v thng tin qun tr mng trong cc file maps. Cc file ny c t trn mt NIS server trung tm, t cc NIS client c th truy nhp n cc thng tin thng qua dch v RPC. Cc file maps thng l cc file theo nh dng DMB, mt dng c s d liu n gin. Cc file maps c to ra t cc file vn bn nh /etc/hosts hay /etc/passwd. Mi file vn bn ny c th c nhiu file maps khc nhau ty thuc vo kha ca n. V d nu kha l tn my trm th ta c file hosts.byname, nu kha l a ch IP th ta c file hosts.byname.
- 55 -

File ch File maps tng 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 Mi mt file maps c mt tn ngn hn nh i vi ngi dng gi l cc nickname. hin th danh sch cc nickname ta dng lnh ypcat: #ypcat -x Cc chng trnh my ch ca NIS thng c tn l ypserv. Trong cc mng c nh ta ch cn mt my lm my ch NIS. Mt min (domain) NIS l mt tp hp cc my trm c qun l bi mt my ch NIS. hin th v t tn cho mt min ta s dng lnh: #domainname nis-domain Tn min NIS s cho bit my ch ca min no cc ng dng s truy cp nhn thng tin cn thit. bit c my ch no trong mng l NIS server, cc chng trnh ng dng phi hi ypbind, mt chng trnh chy ngm c nhim v pht hin cc NIS server trn mng. N s pht cc gi tin qung b tm cc my ch NIS trn mng hoc s dng cc thng tin trong cc file cu hnh ngi qun tr cung cp. 5.3.2. Ci t v cu hnh cho my ch NIS Vi NIS ta c khi nim my ch NIS chnh v my ch NIS ph, mt min ch c th c mt my ch NIS chnh. Khi trong mng c nhiu my trm lm vic, mt my ch NIS c th b qu ti, hoc khi c s c th ton b h thng mng s khng th hot ng c. Cc my ch NIS ph s gip gii quyt vn ny. Vic ci t cc my ch NIS ph ch khc my ch NIS chnh ch to ra cc file map. Chng khng c to ra bng makedbm m c ly v t my ch chnh. By gi ta tm hiu cch ci t my ch NIS chnh. Trc tin ta phi ci t phn mm ypserv ln my tnh. Chng trnh s nm trong package ypserv-xxx.rpm. Ta c th ci t bng lnh: #rpm -ivh ypserv-xxx.rpm #mkdir /var/yp/nis-domain to cc file c s d liu ta s dng chng trnh makedbm. Do phi m bo chng trnh c ci trn my, vic to lp s c tin hnh thng qua mt makefile. Trong file ny s cha cc lnh cn thit to ra file maps. Sau khi ci t phn mm ta dng lnh make: #domainname nis-domain #cd /var/yp #make Cc file map khng t ng cp nht mi khi ta sa thng tin qun tr. Do vy mi khi c s thay i, ta cn thc hin li lnh make cp nht s sa i. 5.3.3. Ci t cc my trm NIS Trc tin ta cn ci t phn mm ypbind ln my trm bng lnh: #rpm -ivh ypbind-xxx.rpm
- 56 -

Bc tip theo l ch ra tn ca my ch v tn min NIS m trm ny s s dng bng cch thay i thng tin trong file /etc/yp.conf nh sau: #/etc/yp.conf domainname nis-domain server lnserver Dng u tin cho bit my trm ny thuc vo min NIS c tn l nis-domain. Nu khng c dng lnh ny th ta c th ch ra bng cch nh lnh domainname ti du nhc dng lnh. Dng th 2 ch ra tn my ch NIS. a ch IP ca tn my ch ny phi xut hin trong file /etc/hosts. Hoc ta c th s dng a ch IP ngay trn dng ny. Khi ta s dng my tnh thng xuyn phi thay i min NIS, ta c th ch ra nhiu min NIS v cc my ch tng ng vi n bng lnh server. File cu hnh di y cho php thc hin iu : #yp.conf server ln-server1 domainname1 server ln-server2 domainname2 Khi mun s dng mt min khc th ta ch cn nh li lnh domainname xc nh min ta tng ng. Sau khi to ra cc file cu hnh c bn, ta nn kim tra xem chng trnh ypbind hot ng hay cha. Trc ht, khi ng ypbind, sau dng tin ch ypcat ly thng tin qun l bi NIS server. xem thng tin v a ch IP ca cc trm ta dng lnh: #ypbind #ypcat hosts.byname 192.168.50.1 may1 192.168.50.1 may2 ... Nu ta khng nhn c kt qu nh trn hoc ta nhn c mt thng bo li cant bind to servers domain, c ngha l h thng NIS hot ng cha tt, ta c th kim tra xem tn min v tn my ch trong file yp.conf chnh xc cha v sau ping my ch. Nu my ch hot ng ta kim tra xem s hot ng ca ypserv bng lnh rpcinfo: #rpcinfo u serverhost ypserv program 10004 version 2 ready and waiting Nu ta nhn c thng bo nh trn l ypserv ang hot ng tt. 5.3.4. La chn cc file map Khi s dng NIS ta cn xc nh nhng file cu hnh no ca cc my trm s c thay th bi NIS. Thng thng NIS c s dng tra cu cc thng tin v my trm v ti khon ngi dng. Mc d ta s dng NIS nh l mt h qun tr tp trung, h thng ny vn cho php cc my trm lm vic c quyn t do la chn s dng cc file cu hnh cc b hoc s dng t NIS server. Th t c ch ra trong file /etc/nsswitch.conf. V d sau cho bit th t s dng dch v ca cc hm gethostbyname(), gethostbyaddr() v getservbyname(). Cc dch v c lit k trc s c s dng, nu khng thnh cng th s dng dch v sau . #nsswitch.conf hosts: nis dns files services files nis Di y l danh sch cc dch v c th s dng trong file /etc/nsswitch.conf. Cc file, chng trnh c th c s dng s ph thuc vo tng loi dch v: nisplus hay nis+: s dng NIS+ server cho min NIS hin thi. Tn ca server c ch ra trong file /etc/nis.conf. nis: s dng NIS server cho domain hin thi. Tn ca server c ch ra trong file
- 57 -

/etc/yp.conf. Vi thnh phn hosts, cc file map l hosts.byname v hosts.byaddr s c s dng. dns: s dng DNS server, dch v ny c s dng cho mnh thnh phn hosts. Tn ca my ch c t trong file /etc/resolv.conf. files: s dng cc file cu hnh cc b, v d: /etc/passwd cho thnh phn passwd. dbm: tm thng tin trong cc file c s d liu /var/dbm. Tn ca cc file l tn ca cc file map tng ng ca dch v NIS. Cc thnh phn c h tr hin thi ca NYS l: hosts, networks, passwd, group, shadow, services, protocols, rpc, v mt s file khc. Nu c t kha [NOTFOUND=return] trong cc thnh phn ca file nsswitch.conf, NIS s thot ra ngay m khng s dng tip cc dch v sau trong trng hp n khng tm thy thng tin dch v trc . Ch khi no dch v trc b li, NIS mi dng tip dch v sau. Trong v d di NIS ch s dng cc file cc b khi khi ng hoc DNS, NIS server b hng. #/ect/nsswitch.conf hosts: nis dns [NOTFOUND=return] files network: nis [NOTFOUND=return] files services: file nis protocol: files nis rpc: files nis 5.3.5. S dng cc file map passwd v group Mt trong nhng ng dng chnh ca NIS l ng b thng tin v cc ti khon ca ngi s dng trn tt c cc my trm trong min NIS. Khi thng tin v ngi dng trn trm c lit k mt phn nh trong /etc/passwd, phn cn li c lu trong file map passwd.byname. Vic chn nis trong file /etc/nsswitch.conf cha NIS c th hot ng. Khi s dng ti khon ca ngi dng c cung cp bi NIS, trc tin phi m bo s hiu ca ngi dng trong file passwd phi trng vi s hiu ca ngi dng trn NIS. Nu s hiu ngi dng, s hiu nhm ca ngi dng khc vi thng tin trong min NIS, ta cn sa li cho trng nhau. Trc tin ta thay i s hiu ngi dng (uid) v s hiu nhm (gid) trong file /etc/passwd v /etc/group trn trm cc b sang cc gi tr mi ca NIS. Sau i quyn s hu ca tt c cc file bng cch thay i s hiu uid v gid c sang uid v gid mi. Gi s ngi dng anhnv c s hiu uid l 501, thuc nhm sinhvien c gid l 423, ta sa i quyn s hu 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 thc hin cc cng vic trn s hiu uid v gid ca mt ngi dng trn my trm s ng nht vi NIS. Bc tip theo l sa i file /etc/nsswitch.conf nh sau: #/etc/nsswitch.conf passwd: nis files group: nis files File trn quy nh lnh login v cc lnh thuc h ny s truy vn NIS server khi mt ngi dng mun truy nhp, nu khng tm thy n s tm tip n cc file cc b. Thng thng ta loi b hu ht ngi dng khi cc file cc b, ch gi li root hoc cc ti khon chung nh mail, news, cho mt s tc v cn chuyn i s hiu uid sang tn v ngc li. V d trong chng trnh qun l cng vic cron s dng lnh su tm tr thnh news. Nu news khng c trong /etc/passwd, chng trnh trn s khng thc hin c. Khi ngi dng mun thay i mt khu, h khng th dng lnh passwd nh khi cha c NIS. Lnh passwd ch c tc dng sa i cc file cu hnh cc b. NIS cung cp mt cng c l yppasswd, n khng nhng cho php sa i mt khu ngi dng trn NIS m cn thay
- 58 -

i cc thuc tnh khc nh shell Chng trnh ny c thc hin khi khi ng h thng bng cch chy thm dch v rpc.yppasswd. V thi quen ngi dng c th g lnh passwd khi mun thay i mt khu. Gii php y l thay i passwd bng mt lin kt n yppasswd. #cd /bin #mv passwd passwd.old #ln yppasswd passwd 5.4 H thng file trn mng Linux c dch v chia s file trn mng my tnh. Khi ta mun c kh nng cc my Linux c th chia s ti nguyn l cc file vi nhau, dch v NFS s cung cp kh nng ny. Dch v ny cho php chia s file cho cc ngi dng trn mng LAN, cc file ny c kh nng xut hin i vi cc ngi dng nh l cc file trn my ca mnh. 5.4.1 Ci t NFS ci t dch v ny ta cn chun b mt package l nfs-utils-xxx.rpm trong xxx l s hiu phin bn. ng nhp vi quyn root v s dng lnh: # rpm ivh nfs-utils-xxx.rpm Nu khng c li thng bo li th vic ci t thnh cng. NFS s dng th tc RPC (Remote Procedure Calls) gi v nhn yu cu gia cc my ch v my trm trn mng, do vy dch v nh x cng portmap (dch v qun l cc yu cu RPC) phi c khi ng trc. Trn my ch NFS d nh s chia s cc file d liu phi khi ng hai dch v nfs v portmap bng lnh: # service nfs start # service portmap start NFS hot ng th ta cn phi khi ng cc dch v sau: Portmapper: tin trnh ny khng lm vic trc tip vi NFS m tham gia qun l cc yu cu RPC t my trm gi n. Mountd: tin trnh ny s nh x cc file trn my ch ti cc th mc trn my trm yu cu. N s hu b nh x ny nu c lnh umount t my trm. Nfs: l tin trnh chnh thc hin cc nhim v ca giao thc NFS. N c nhim v cung cp cho cc my trm cc th mc hoc file c yu cu. Ta c th kim tra cc thng tin v cc dch v NFS bng lnh: #rpcinfo -p 5.4.2 Khi ng v dng NFS Vic khi ng dch v NFS cng kh n gin v c gii thiu trn bng cch khi ng portmap v nfs. # service nfs start hoc #/etc/init.d/nfs start Vic dng (tt) dch v ny cng kh n gin, ta dng lnh sau: #service nfs stop hoc #/etc/init.d/nfs stop Ta c th t cho dch v ny c t ng khi ng khi ta khi ng my tnh bng cch dng lnh: #setup
- 59 -

Sau chn System services, tip ta s nhn c mt danh sch cc dch v hin ang c trong h thng. Mun cho dch v no c t ng khi ng ta ch cn chn dch v , y ta chn dch v c tn nfs. Chn OK v cui cng chn Quit. 5.4.3 Cu hnh NFS server v Client Cu hnh nfs ta ch cn sa file /etc/exports, y l file cha danh sch cc th mc c chia s cho cc my khc. N cng ng thi cha danh sch cc my trm c quyn c truy cp v quyn truy cp ca cc my trm ny. Mt ch v nh dng ca file ny nh sau: cc dng trng s c b qua, cc dng bt u bng du # c coi l cc dng ch thch v s c b qua. Cc dng di qu ta c th ngt trn nhiu dng bng cch s dng du ngt dng (\). Cu trc ca mi dng khai bo trong file ny nh sau: Tn th mc Danh sch a ch cc my Danh sch a ch cc my trm, quyn truy nhp ca trm, quyn truy nhp ca cc my trm cc my trm /software/project 192.168.0.172(rw) 192.168.0.127(ro) /software/setup 192.168.0.0/28(ro) Trong , cc tham s c ngha nh sau: tn th mc l ng dn n th mc ta mun chia s cho cc my khc. Danh sch a ch cc my trm, c th l a ch IP hoc tn my (c lit k trong file /etc/hosts). Trong trng hp mun lit k danh sch cc my c a ch gn k nhau trong mt khong no ta c th c cch vit rt gn nh sau: chng hn ta mun lit k cc a ch ca my trm trong khong t 192.168.0.0 n cc my trm c a ch 192.168.0.15 ta ch cn vit 192.168.0.0/28. Quyn truy nhp c vit di dng (rw) ch quyn c v ghi, cn (ro) th cc my trm ch c quyn c trn th mc , (noaccess) cm cc my trm truy nhp vo cc th mc con ca th mc chia s. Ch , gia a ch ca my v quyn truy nhp khng c du cch. 5.4.4 S dng mount c d liu trn cc th mc c chia s ny ta c th dng cch sau: ta s dng lnh mount, nhng trong trng hp ny ta phi cn quyn qun tr (root). C php ca lnh s nh sau: #mount <tn_my_ch:/tn_th_mc_chia_s> </tn_th_mc_cn_nh_x> Lu , trc khi ra lnh ny ta phi to ra th mc cn nh x (trong trng hp n cha tn ti). V d, nh x th mc /software/project trn mt my ch 192.168.0.33 vo th mc /mnt/project trn my hin ti ta dng lnh sau:
- 60 -

#mount 192.168.0.33:/software/project /mnt/project By gi th mc /mnt/project trn my hin ti s bnh ng nh cc th mc khc trn my. Ta c th sao chp, c cc file trn th mc ny. 5.4.5 Unmount Sau khi thc hin xong cc thao tc cn thit, ta c th hy b nh x ny bng lnh umount nh sau: #umount /mnt/project Sau lnh ny th ta khng cn c kh nng thao tc vi th mc trn my ch c na, nu mun ta li phi nh x li. Ngoi ra mun xem trng thi hot ng ca dch v nfs ta c th dng lnh: #/etc/init.d/nfs status N s hin th thng tin v trng thi hin ti ca dch v ny ang chy hay dng li. rpc.mountd (pid 936) is running... nfsd (pid 948 947 946 945 944 943 942 941) is running... rpc.rquotad (pid 931) is running... 5.4.6 Mount t ng qua tp cu hnh By gi nu ta mun h thng s t ng nh x th mc ny khi my khi ng cho nhng ngi dng khng c quyn qun tr c th dng c th ta c th s dng cch sa i ni dung ca file /etc/fstab. Cng tng t nh lnh mount trn, trong file /etc/fstab cng c cc trng ging nh ni trn. Mi mt dng trong file ny s c cu trc nh sau: <tn_my_ch:/ng_dn_n_th_mc_chia_s> </ng_dn_n_th_mc_cc_b> nfs tham s nfs ch cho h iu hnh bit kiu file l nfs. V d ta c th thm dng 192.168.0.33:/software/project /mnt/project nfs vo cui file /etc/fstab. CU HI V BI TP 1. Trnh by cc lnh cu hnh card giao tip mng trn Linux 2. Trnh by quy trnh ci t v cu hnh cho my ch NIC. 3. Trnh by quy trnh ci t v cu hnh cc my trm NIC 4. Thc hnh cc thao tc lin quan n h thng mng trn Linux

- 61 -

Chng 6. LP TRNH SHELL V LP TRNH C TRN LINUX


6.1. Cch thc pipes v cc yu t c bn lp trnh trn shell 6.1.1. Cch thc pipes Trong Linux c mt s loi shell, shell ngm nh l bash. Shell cho php ngi dng chy tng lnh shell (thc hin trc tip) hoc dy lnh shell (file script) v c bit hn l theo dng thng qua ng dn (pipe). - Trong mt dng lnh ca shell c th thc hin mt danh sch cc lnh tun t nhau dng: <lnh> [; <lnh>]... Nh vy danh sch lnh l dy cc lnh lin tip nhau, ci sau cch ci trc bi du chm phy ";" V d: $ cal 10 1999; cal 11 1999 ; cal 12 1999 Shell cho ngi dng cch thc c bit thc hin cc lnh tun t nhau, ci ra ca lnh trc l ci vo ca lnh sau v khng phi thng qua ni lu tr trung gian. - S dng ng dn l cch thc c bit trong UNIX v Linux, c th hin l mt cch thc ca shell truyn thng lin tin trnh. ng dn c t chc theo kiu cu trc d liu dng xp hng "vo trc ra trc" FIFO "First In First Out". M t cch thc s dng ng ng trong shell nh sau: <lnh phc hp> l hoc <lnh> hoc (<lnh>[;<lnh>]...) Vy ng ng c dng <lnh phc hp> | <lnh phc hp> Lnh phc hp pha sau c th khng c i s. Trong trng hp , thng tin kt qu t lnh pha trc tr thnh thng tin input ca lnh ngay pha sau m khng chu tc ng theo cch thng thng ca lnh trc na. V d: $ cal 1999 | more Ni dung lch nm 1999 (lnh cal ng vai tr tin trnh A) khng c in ngay ra mn hnh nh thng thng theo tc ng ca lnh cal na m c lu ln mt "file" tm thi kiu "ng dn" ca h thng v sau tr thnh i s ca lnh more (lnh more ng vai tr tin trnh B). Trong chng trnh, c th dng ng dn lm file vo chun cho cc lnh c tip theo. V d: ls -L | \ th k hiu "\" ch ra rng ng dn c dng nh file vo chun. 6.1.2. Cc yu t c bn lp trnh trong shell Shell c cng c cho php c th lp trnh trn shell lm tng thm thn thin khi giao tip vi ngi dng. Cc i tng tham gia cng c nh th c th c lit k: - Cc bin (trong ch ti cc bin chun), - Cc hm vo - ra - Cc php ton s hc, - Biu thc iu kin, - Cu trc r nhnh, - Cu trc lp. * Mt s ni dung trong chng trnh shell - Chng trnh l dy cc dng lnh shell song c t trong mt file vn bn (c son tho theo son tho vn bn),
- 62 -

- Cc dng lnh bt u bng du # chnh l dng ch thch, b b qua khi shell thc hin chng trnh, - Thng thng cc b dch lnh shell l sh (/bin/sh) hoc ksh (/bin/ksh) thc hin mt chng trnh shell ta c cc cch sau y: $sh <<tn chng trnh> hoc $sh <tn chng trnh> hoc nh i mod ca chng trnh: $chmod u+x <tn chng trnh> v chy chng trnh $<tn chng trnh> - Phn ln cc yu t ngn ng trong lp trnh shell l tng ng vi lp trnh C. * Cc bin trong file script Trong shell c th k ti 3 loi bin: - Bin mi trng (bin shell c bit, bin t kha, bin shell xc nh trc hoc bin shell chun) c lit k nh sau (cc bin ny thng gm cc ch ci hoa): HOME : ng dn th mc ring ca ngi dng, MAIL: ng dn th mc cha hp th ngi dng, PATH: th mc dng tm cc file th hin ni dung lnh, PS1: du mi ban u ca shell (ngm nh l $), PS2: du mi th 2 ca shell (ngm nh l >), PWD: Th mc hin ti ngi dng ang lm, SHELL: ng dn ca shell (/bin/sh hoc /bin/ksh) TERM: S hiu gn cho trm cui, USER: Tn ngi dng vo h thng, Trong .profile th mc ring ca mi ngi dng thng c cc cu lnh dng: <bin mi trng> = <gi tr> - Bin ngi dng: Cc bin ny do ngi dng t tn v c cc cnh thc nhn gi tr cc bin ngi dng t bn phm (lnh read). Bin c t tn gm mt xu k t, quy tc t tn nh sau: k t u tin phi l mt ch ci hoc du gch chn (_), sau tn l mt hay nhiu k t khc. to ra mt bin ta ch cn gn bin mt gi tr no . Php gn l mt du bng (=). V d: myname=TriThanh Ch : khng c c du cch (space) ng trc hay ng sau du bng. Tn bin l phn bit ch hoa ch thng. truy xut n mt bin ta dng c php sau; $tn_bin. Chng hn ta mun in ra gi tr ca bin myname trn ta ch cn ra lnh: echo $myname. Mt s v d v cch t tn bin: $ no=10 # y l mt cch khai bo hp l Nhng cch khai bo di y l khng hp l $ no =10 # c du cch sau tn bin $ no= 10 # c du cch sau du = $ no = 10 # c du cch c ng trc ln ng sau du = Ta c th khai bo mt bin nhng n c gi tr NULL nh trong nhng cch sau: $ vech= $ vech=""
- 63 -

Nu ta ra lnh in gi tr ca bin ny th ta s thu c mt gi tr NULL ra mn hnh (mt dng trng). - Bin t ng (hay bin-ch c, tham s v tr) l cc bin do shell c sn; tn cc bin ny cho trc. C 10 bin t ng: $0, $1, $2,..., $9 Tham bin $0 cha tn ca lnh, cc tham bin thc bt u bng $1 (nu tham s c v tr ln hn 9, ta phi s dng c php ${} v d, ${10} thu c cc gi tr ca chng). Shell bash c ba tham bin v tr c bit, $#, $@, v $#. $# l s lng tham bin v tr (khng tnh $0). $* l mt danh sch tt c cc tham bin v tr loi tr $0, c nh dng nh l mt xu n vi mi tham bin c phn cch bi k t $IFS. $@ tr v tt c cc tham bin v tr c a ra di dng N xu c bao trong du ngoc kp. S khc nhau gia $* v $@ l g v ti sao li c s phn bit? S khc nhau cho php ta x l cc i s dng lnh bng hai cch. Cch th nht, $*, do n l mt xu n, nn c th c biu din linh hot hn khng cn yu cu nhiu m shell. $@ cho php ta x l mi i s ring bit bi v gi tr ca chng l N i s c lp. Dng ra (hay dng vo) tng ng vi cc tham s v tr l cc "t" c trong cc dng . V d: $chay vao chuong trinh roi Nu chay l mt lnh th dng vo ny 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 Mt v d khc v bin v tr gip ta phn bit c s khc nhau gia bin $* v $@: #!/bin/bash #testparm.sh function cntparm { echo e inside cntparm $# parms: $* } cntparm $* cntparm $@ echo e outside cntparm $* parms\n echo e outside cntparm $@ parms\n Khi chy chng trnh ny ta s thu c kt 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 dng th nht v th 2 ta thy kt qu c s khc nhau, dng th nht bin $* tr v tham bin v tr di dng mt xu n, v th cntparm bo co mt tham bin n. Dng th hai gi cntparm, tr v i s dng lnh ca l 3 xu c lp, v th cntparm bo co ba tham bin. 7.1.2.3. Cc k t c bit trong bash K t < > ( ) M t nh hng u vo nh hng u ra Bt u subshell Kt thc subshell K t ~ ` ; # M t Th mc home ca user hin ti Thay th lnh Chia ct lnh Li ch gii
- 64 -

K t M t K t M t | K hiu dn Trch dn mnh \ Dng hin k t c bit Trch dn yu & Thi hnh lnh chy ch ngm $ Biu thc bin { Bt u khi lnh * K t i din cho chui } Kt thc khi lnh ? K t i din cho mt k t Cc k t c bit ca bash Du chia ct lnh, ; , cho php thc hin nhng lnh bash phc tp nh trn mt dng. Nhng quan trng hn, n l kt thc lnh theo l thuyt POSIX. K t ch gii, # , khin bash b qua mi k t t cho n ht dng. im khc nhau gia cc k t trch dn mnh v trch dn yu, v , tng ng l: trch dn mnh bt bash hiu tt c cc k t theo ngha en; trch dn yu ch bo h cho mt vi k t c bit ca bash . 6.2. Mt s lnh lp trnh trn shell 6.2.1. S dng cc ton t bash Cc ton t string Cc ton t string, cng c gi l cc ton t thay th trong ti liu v bash, kim tra gi tr ca bin l cha gn gi tr hoc khng xc nh. Bng di l danh sch cc ton t ny cng vi miu t c th cho chc nng ca tng ton t. Ton t Chc nng ${var:- word} Nu bin tn ti v xc nh th tr v gi tr ca n, nu khng th tr v word ${var:= word} Nu bin tn ti v xc nh th tr v gi tr ca n, nu khng th gn bin thnh word, sau tr v gi tr ca n ${var:+ word} Nu bin tn ti v xc nh th tr v word, cn khng th tr v null ${var:?message} Nu bin tn ti v xc nh th tr v gi tr ca n, cn khng th hin th bash: $var:$message v thot ra khi lnh hay tp lnh hin thi. ${var: offset[:length]} Tr v mt xu con ca var bt u ti offset ca di length. Nu length b b qua, ton b xu t offset s c tr v. Cc ton t string ca bash minh ho, hy xem xt mt bin shell c tn l status c khi to vi gi tr defined. S dng 4 ton t string u tin cho kt qu status nh sau: $echo ${status:-undefined} defined $echo ${status:=undefined} defined $echo ${status:+undefined} undefined $echo ${status:?Dohhh\! undefined} defined By gi s dng lnh unset xo bin status, v thc hin vn cc lnh , c output nh sau:
- 65 -

$unset status $echo ${status:-undefined} undefined $echo ${status:=undefined} undefined $echo ${status:+undefined} undefined $unset status $echo ${status:?Dohhh\! undefined} bash:status Dohhh! Undefined Cn thit unset status ln th hai v lnh th ba, echo ${status:+undefined}, khi to li status thnh undefined. Cc ton t substring c trong danh sch bng trn c bit c ch. Hy xt bin foo c gi tr Bilbo_the_Hobbit. Biu thc ${foo:7} tr v he_Hobbit, trong khi ${foo:7:5} li tr v he_Ho. Cc ton t Pattern-Matching Cc ton t pattern-matching c ch nht trong cng vic vi cc bn ghi di bin hay cc xu c nh dng t do c nh gii bi cc k t c nh. Bin mi trng $PATH l mt v d. Mc d n c th kh di, cc th mc ring bit c phn nh bi du hai chm. Bng di l danh sch cc ton t Pattern-Matching ca bash v chc nng ca chng. Ton t Chc nng ${var#pattern} Xo b phn khp (match) ngn nht ca pattern trc var v tr v phn cn li ${var##pattern} Xo b phn khp (match) di nht ca pattern trc var v tr v phn cn li ${var%pattern} Xo b phn khp ngn nht ca pattern cui var v tr v phn cn li ${var%%pattern} Xo b phn khp di nht ca pattern cui var v tr v phn cn li ${var/pattern/string} Thay phn khp di nht ca pattern trong var bng string. Ch thay phn khp u tin. Ton t ny ch c trong bash 2.0 hay ln hn. ${var//pattern/string} Thay phn khp di nht ca pattern trong var bng string. Thay tt c cc phn khp. Ton t ny c trong bash 2.0 hoc ln hn. Cc ton t bash Pattern-Matching Thng thng quy tc chun ca cc ton t bash pattern-matching l thao tc vi file v tn ng dn. V d, gi s ta c mt tn bin shell l mylife c gi tr l /usr/src/linux/Documentation/ide.txt (ti liu v trnh iu khin a IDE ca nhn). S dng mu /* v */ ta c th tch c tn th mc v tn 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)

- 66 -

Lnh th 2 xo xu matching */ di nht trong tn file v tr v tn file. Lnh th 4 lm khp tt c mi th sau /, bt u t cui bin, b tn file v tr v ng dn ca file. Kt qu ca tp lnh ny l: $ ./pattern.sh ${myfile##*/} = ide.txt basename $myfile = ide.txt ${myfile%/*} = /usr/src/linux/Documentation dirname $myfile = /usr/src/linux/Documentation minh ho v cc ton t pattern-matching v thay th, lnh thay th mi du hai chm trong bin mi trng $PATH bng mt dng mi, kt qu hin th ng dn rt d c (v d ny s sai nu ta khng c bash phin bn 2.0 hoc mi hn): $ echo e ${PATH//:/\\n} /usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/kwall/bin /home/wall/wp/wpbin Cc ton t so snh chui str1 = str2 : str1 bng str2 str1 != str2 : str1 khc str2 -n str : str c di ln hn 0 (khc null) -z str : str c di bng 0 (null) Cc ton t so snh s hc -eq : bng -ge : ln hn hoc bng -gt : ln hn -le : nh hn hoc bng -lt : nh hn -ne : khc 6.2.2. iu khin lung Cc cu trc iu khin lung ca bash, n bao gm: if Thi hnh mt hoc nhiu cu lnh nu c iu kin l true hoc false. for Thi hnh mt hoc nhiu cu lnh trong mt s c nh ln. while Thi hnh mt hoc nhiu cu lnh trong khi mt iu kin no l true hoc false. until Thi hnh mt hoc nhiu cu lnh cho n khi mt iu kin no tr thnh true hoc false. case Thi hnh mt hoc nhiu cu lnh ph thuc vo gi tr ca bin. select Thi hnh mt hoc nhiu cu lnh da trn mt khong tu chn ca ngi dng. * Cu trc r nhnh c iu kin if Bash cung cp s thc hin c iu kin lnh no s dng cu lnh if, cu lnh if ca bash y chc nng nh ca C. C php ca n c khi qut nh sau: if condition then statements [elif condition statements] [else
- 67 -

statements] fi u tin, ta cn phi chc chn rng mnh hiu if kim tra trng thi thot ca cu lnh last trong condition. Nu n l 0 (true), sau statements s c thi hnh, nhng nu n khc 0, th mnh else s c thi hnh v iu khin nhy ti dng u tin ca m fi. Cc mnh elif (tu chn) (c th nhiu tu ) s ch thi hnh khi iu kin if l false. Tng t, mnh else (tu chn) s ch thi hnh khi tt c else khng tha mn. Nhn chung, cc chng trnh Linux tr v 0 nu thnh cng hay hon ton bnh thng, v khc 0 nu ngc li, v th khng c hn ch no c. Ch : Khng phi tt c chng trnh u tun theo cng mt chun cho gi tr tr v, v th cn kim tra ti liu v cc chng trnh ta kim tra m thot vi iu kin if. V d chng trnh diff, tr v 0 nu khng c g khc nhau, 1 nu c s khc bit v 2 nu c vn no . Nu mt cu iu kin hot ng khng nh mong i th hy kim tra ti liu v m thot . Khng quan tm n cch m chng trnh xc nh m thot ca chng, bash ly 0 c ngha l true hoc bnh thng cn khc 0 l false. Nu ta cn c th kim tra mt m thot ca lnh, s dng ton t $? ngay sau khi chy lnh. $? tr v m thot ca lnh chy ngay lc . Phc tp hn, bash cho php ta phi hp cc m thot trong phn iu kin s dng cc ton t && v || c gi l ton t logic AND v OR. C php y cho ton t AND nh sau: command1 && command2 Cu lnh command2 ch c chy khi v ch khi command1 tr v trng thi l s 0 (true). C php cho ton t OR th nh sau: command1 || command2 Cu lnh command2 ch c chy khi v ch khi command1 tr li mt gi tr khc 0 (false). Ta c th kt hp li c 2 loi ton t li c mt biu thc nh sau: command1 && comamnd2 || command3 Nu cu lnh command1 chy thnh cng th shell s chy lnh command2 v nu command1 khng chy thnh cng th command3 c chy. V d: $ rm myf && echo "File is removed successfully" || echo "File is not removed" Nu file myf c xa thnh cng (gi tr tr v ca lnh l 0) th lnh "echo File is removed successfully" s c thc hin, nu khng th lnh "echo File is not removed" c chy. Gi s trc khi ta vo trong mt khi m, ta phi thay i mt th mc v copy mt file. C mt cch thc hin iu ny l s dng cc ton t if lng nhau, nh l on m sau: if cd /home/kwall/data then if cp datafile datafile.bak then # more code here fi fi Tuy nhin, bash cho php ta vit on m ny sc tch hn nhiu nh sau: if cd /home/kwall/data && cp datafile datafile.bak then # more code here fi
- 68 -

C hai on m u thc hin cng mt chc nng, nhng on th hai ngn hn nhiu, gn nh v n gin. Mc d if ch kim tra cc m thot, ta c th s dng cu trc [] lnh test kim tra cc iu kin phc tp hn. [condition] tr v gi tr biu th condition l true hay false. test cng c tc dng tng t. Mt v d khc v cch s dng cu trc 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 lng cc php ton iu kin ca bin hin ti khong 35, kh nhiu v hon chnh. Ta c th kim tra cc thuc tnh file, so snh cc xu v cc biu thc s hc. Ch : Cc khong trng trc du m ngoc v sau du ng ngoc trong [condition] l cn phi c. y l iu kin cn thit trong c php shell ca bash. Danh sch cc ton t test file ph bin nht: Ton t iu kin true -d file file tn ti v l mt th mc -e file file tn ti -f file file tn ti v l mt file bnh thng (khng l mt th mc hay mt file c bit) -r file file cho php c -s file file tn ti v khc rng -w file file cho php ghi -x file file kh thi hoc nu file l mt th mc th cho php tm kim trn file -O file file ca ngi dng hin ti -G file file thuc mt trong cc nhm ngi dng hin ti l thnh vin file1 -nt file2 file1 mi hn file2 file1 -ot file2 file1 c hn file2 V d chng trnh shell cho cc ton t test file trn cc th mc trong bin $PATH. M cho chng trnh 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" - 69 -

else echo e \tYou dont have write permission in $dir fi if [ -0 $dir ]; then echo -e "\tYou own $dir" else echo e \tYou dont 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 Chng trnh descpath.sh Vng lp for (gii thiu trong phn di) s duyt ton b cc ng dn th mc trong bin PATH sau kim tra cc thuc tnh ca th mc . Kt qu nh sau (kt qu c th khc nhau trn cc my khc nhau do gi tr ca bin PATH khc nhau): /usr/local/bin You dont have write permission in /usr/local/bin You dont own /usr/local/bin You arent a member of /usr/local/bins group /bin You dont have write permission in /bin You dont own /bin You arent a member of /bins group /usr/bin You dont have write permission in /usr/bin You dont own /usr/bin You arent a member of /usr/bins group /usr/X11R6/bin You dont have write permission in /usr/X11R6/bin You dont own /usr/X11R6/bin You arent a member of /usr/X11R6/bins group /home/kwall/bin You have write permission in /home/kwall/bin You own /home/kwall/bin You are a member of /home/kwall/bins 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/wpbins group Cc biu thc trong phn iu kin cng c th kt hp vi nhau to thnh cc biu thc phc tp hn bng cc php ton logic. Ton t ngha ! expression Logical NOT expression1 -a expression2 Logical AND expression1 -o expression2 Logical OR * Cc vng lp quyt nh: for Nh thy chng trnh trn, for cho php ta chy mt on m mt s ln nht nh. Tuy nhin cu trc for ca bash ch cho php ta lp i lp li trong danh sch cc gi tr
- 70 -

nht nh bi v n khng t ng tng hay gim con m vng lp nh l C, Pascal, hay Basic. Tuy nhin vng lp for l cng c lp thng xuyn c s dng bi v n iu khin gn gng trn cc danh sch, nh l cc tham s dng lnh v cc danh sch cc file trong th mc. C php y ca for l: for value in list do done statements using $value list l mt danh sch cc gi tr, v d nh l tn file. Gi tr l mt thnh vin danh sch n v statements l cc lnh s dng value. Mt c php khc ca lnh for c dng nh sau: for (( expr1; expr2; expr3 )) do .... repeat all statements between do and done until expr2 is TRUE done Linux khng c tin ch i tn hay copy cc nhm ca file. Trong MS-DOS nu ta c 17 file c phn m rng a*.doc, ta c th s dng lnh COPY copy *.doc thnh file *.txt. Lnh DOS nh sau: C:\ cp doc\*.doc doc\*.txt s dng vng lp for ca bash b p nhng thiu st ny. on m di y c th c chuyn thnh chng trnh shell thc hin ng nh nhng g ta mun: for docfile in doc/*.doc do cp $docfile ${docfile%.doc}.txt done S dng mt trong cc ton t pattern-matching ca bash, on m ny lm vic copy cc file c phn m rng l *.doc bng cch thay th .doc cui ca tn file bng .txt. Mt v d khc v vng for n gin nh sau: #!/bin/bash for i in 1 2 3 4 5 do echo "Welcome $i times" done Ta cng c mt cu trc v for nh sau, chng trnh ny cng c cng chc nng nh chng trnh trn nhng ta ch n s khc bit v c php ca lnh 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 Welcome 4 times Welcome 5 times Tip theo l mt v d v vng for lng nhau: #!/bin/bash for (( i = 1; i <= 5; i++ )) ### Outer for loop ###
- 71 -

do for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ### do echo -n "$i " done done V d khc v cch s dng cu trc 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 chy chng trnh vi tham s: $ chmod 755 mtable $ ./mtable 7 Ta thu c kt qu nh sau: 7*1=7 7 * 2 = 14 ... 7 * 10 = 70 * Cc vng lp khng xc nh: while v until Vng lp for gii hn s ln m mt on m c thi hnh, cc cu trc while v until ca bash cho php mt on m c thi hnh lin tc cho n khi mt iu kin no xy ra. Ch vi ch l on m ny cn vit sao cho iu kin cui phi xy ra nu khng s to ra mt vng lp v tn. C php ca n nh sau: while condition do statements done C php ny c ngha l khi no condition cn true, th thc hin statements cho n khi condition tr thnh false (cho n khi mt chng trnh hay mt lnh tr v khc 0): until condition do statements done C php until c ngha l tri ngc vi while: cho n khi condition tr thnh true th thi hnh statements (c ngha l cho n khi mt lnh hay chng trnh tr v m thot khc 0) Cu trc while ca bash khc phc thiu st khng th t ng tng, gim con m cua vng lp for.
- 72 -

V d, ta mun copy 150 bn ca mt file, th vng lp while l mt la chn gii quyt bi ton ny. #!/bin/sh # declare -i idx idx=1 while [ $idx != 150] do cp somefile somefile.$idx idx=$idx+1 done Chng trnh ny gii thiu cch s dng tnh ton s nguyn ca bash. Cu lnh declare khi to mt bin, idx, nh ngha l mt s nguyn. Mi ln lp idx tng ln, n s c kim tra thot khi vng lp. Vng lp until tuy cng c kh nng ging while nhng khng c dng nhiu v rt kh vit v chy chm. Mt v d na v cch s dng vng lp while c minh ha trong chng trnh in bn nhn ca mt 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 ] do echo "$n * $i = `expr $i \* $n`" i=`expr $i + 1` done * Cc cu trc la chn: case v select Cu trc iu khin lung tip theo l case, hot ng cng tng t nh lnh switch ca C. N cho php ta thc hin cc khi lnh ph thuc vo gi tr ca bin. C php y ca case nh sau: case expr in pattern1 ) statements ;; pattern2 ) statements ;; [*) esac statements ;;] expr c em i so snh vi tng pattern, nu n bng nhau th cc lnh tng ng s c thi hnh. Du ;; l tng ng vi lnh break ca C, to ra iu khin nhy ti dng u tin ca m esac. Khng nh t kho switch ca C, lnh case ca bash cho php ta kim tra gi tr ca expr da vo pattern, n c th cha cc k t i din. Cch lm vic ca cu trc case nh sau: n s khp (match) biu thc expr vi cc mu pattern1, pattern2,nu c mt mu no khp th khi lnh tng ng vi mu s c thc thi, sau n thot ra khi lnh case. Nu tt c cc mu u khng khp v ta c s dng mu * (trong nhnh *)),
- 73 -

ta thy y l mu c th khp vi bt k gi tr no (k t i din l *), nn cc lnh trong nhnh ny s c thc hin. Cu trc iu khin select (khng c trong cc phin bn bash nh hn 1.14) ch ring c trong Korn v cc shell bash. Thm vo , n khng c s tng t nh trong cc ngn ng lp trnh quy c. select cho php ta d dng trong vic xy dng cc menu n gin v p ng cc chn la ca ngi dng. C php ca n nh sau: select value [in list] do statements that manipulate $value done Di y l mt v d v cch s dng lnh select: #!/bin/bash # menu.sh Createing simple menus with select ####################################### IFS=: PS3=choice? # clear the screen clear 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 Chng trnh to cc menu bng select Lnh u tin t k t IFS l : (k t phn cch), v th select c th phn tch hon chnh bin mi trng $PATH. Sau n thay i li nhc default khi select bng bin PS3. Sau khi xo sch mn hnh, n bc vo mt vng lp, a ra mt danh sch cc th mc nm trong $PATH v nhc ngi dng chn la nh l minh ho trong hnh di.

Nu ngi dng chn hp l, lnh ls c thc hin kt qu c gi cho lnh m t wc m s file trong th mc v hin th kt qu c bao nhiu file trong th mc . Do ls c th s dng m khng cn i s, script u tin cn chc chn l $dir khc null (nu n l null, ls s hot ng trn th mc hin hnh nu ngi dng chn 1 menu khng hp l). Nu
- 74 -

ngi dng chn khng hp l, mt thng bo li s c hin th. Cu lnh read (c gii thiu sau) cho php ngi dng nh vo la chn ca mnh v nhn Enter lp li vng lp hay nhn Ctrl + C thot. Ch : Nh gii thiu, cc vng lp script khng kt thuc nu ta khng nhn Ctrl+C. Tuy nhin ta c th s dng lnh break thot ra. 6.2.3 Cc hm shell Cc hm chc nng ca bash l mt cch m rng cc tin ch sn c trong shell, n c cc im li sau: Thi hnh nhanh hn do cc hm shell lun thng trc trong b nh. Cho php vic lp trnh tr nn d dng hn v ta c th t chc chng trnh thnh cc module. Ta c th nh ngha cc hm shell s dng theo hai cch: function fname { commands } Hoc l fname() { commands } C hai dng u c chp nhn v khng c g khc gia chng. gi mt hm nh ngha n gin l gi tn hm cng vi cc i s m n cn. Nu so snh vi C hay Pascal, hm ca bash khng c cht ch, n khng kim tra li v khng c phng thc tr v i s bng gi tr. Tuy nhin ging nh C v Pascal, cc bin a phng c th khai bo cc b i vi hm, do trnh c s xung t vi bin ton cc. thc hin iu ny ta dng t kho local nh trong on m sau: Function foo { local myvar local yourvar=1 } Trong v d v cc bin v tr trn ta cng thy c cch s dng hm trong bash. Cc hm shell gip m ca ta d hiu v d bo dng. S dng cc hm v cc ch thch ta s rt nhiu cng sc khi ta phi tr li nng cp on m m ta vit t thi gian rt lu trc . 6.2.4. Cc ton t nh hng vo ra Ta c bit v cc ton t nh hng vo ra, > v <. Ton t nh hng ra cho php ta gi kt qu ra ca mt lnh vo mt file. V d nh lnh sau: $ cat $HOME/.bash_profile > out N s to mt file tn l out trong th mc hin ti cha cc ni dung ca file bash_profile, bng cch nh hng u ra ca cat ti file . Tng t, ta c th cung cp u vo l mt lnh t mt file hoc l lnh s dng ton t u vo, <. Tac th vit li lnh cat s dng ton t nh hng u vo nh sau: $ cat < $HOME/.bash_profile > out Kt qu ca lnh ny vn nh th nhng n cho ta hiu thm v cch s dng nh hng u vo u ra.
- 75 -

Ton t nh hng u ra, >, s ghi ln bt c file no ang tn ti. i khi iu ny l khng mong mun, v th bash cung cp ton t ni thm d liu, >>, cho php ni thm d liu vo cui file. Hay xem lnh thm b danh cdlpu vo cui ca file .bashrc ca ti: $echo alias cdlpu=cd $HOME/kwall/projects/lpu >> $HOME/.bashrc Mt cch s dng nh hng u vo l u vo chun (bn phm). C php ca lnh ny nh sau: Command << label Input Label C php ny ni ln rng command c cc input cho n khi n gp label. V d #!/bin/bash #################################### USER=anonymous PASS=kwall@xmission.com ftp -i -n << END open ftp.caldera.com user $USER $PASS cd /pub ls close END 6.2.5. Hin dng vn bn Lnh echo hin ra dng vn bn c ghi ngay trong dng lnh c C php lnh: echo [ty chn] [xu k t] Cc ty chn: -n : hin xu k t v du nhc trn cng mt dng. -e : bt kh nng thng dch c cc k t iu khin. -E : tt kh nng thng dch c cc k t iu khin. --help : hin h tr v thot. Mt s bn Linux khng h tr tham s ny. V d, dng lnh echo vi tham s -e # echo -e th dng lnh echo \n s thy hin ra chnh dng vn bn lnh: th dng lnh echo # y k t iu khin \n l k t xung dng. 6.2.5. Lnh read c d liu cho bin ngi dng Lnh read c dng read <tn bin> V d chng trnh shell c tn thu1.arg c ni 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 thc hin $chmod u+x thu1.arg $thu1.arg Hoi ten nguoi va hien lai S thy xut hin Ten anh la gi? Tran Van An Xin chao, Tran Van An, anh go 6 doi so Hoi ten nguoi va hien lai
- 76 -

6.2.6. Lnh set gn kt qu ra t lnh shell ra cc bin t ng, ta dng lnh set Dng lnh: set `<lnh>` Sau lnh ny, kt qu thc hin lnh khng hin ln mn hnh m gn kt qu tng ng cho cc bin t ng. Mt cch t ng cc t trong kt qu thc hin lnh s gn tng ng cho cc bin t ng (t $1 tr i). Xem xt mt v d sau y (chng trnh thu2.arg) c ni 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 ca File chng trnh ny v chy, chng ta nhn c: Thoi gian: 7:20:15 EST Thu: Tue Ngay 20 thang Oct nam 1998 Nh vy, $# = 6 $* = Tue Oct 20 7:20:15 EST 1998 $1 = Tue $2=Oct $3 = 20 $4 = 7:20:15 $5 = EST $6 = 1998 6.2.7. Tnh ton trn cc bin Cc tnh ton trong shell c thc hin vi cc i s nguyn. Cc php ton gm c: cng (+), tr (-), nhn (*), chia (/), mod (%). Biu thc thc hin theo cc php ton nu. Tnh ton trn shell c dng: `expr <biu thc>` V d, chng trnh vi tn cong.shl sau y: #!/bin/sh # Tinh va in hai so tong = `expr $1 + $2` echo "Tong = $tong" Sau , khi i mod v chy $cong.shl 5 6 s hin ra: Tong = 11 6.2.8. Chng trnh 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
- 77 -

if 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\) fi done } 6.3. Lp trnh C trn UNIX 6.3.1. Trnh bin dch gcc H iu hnh UNIX lun km theo b dch ngn ng lp trnh C vi tn gi l cc (C compiler). Trong Linux, b dch c tn l gcc (GNU C Compiler) vi ngn ng lp trnh khng khc nhiu vi C chun. gcc cho ngi lp trnh kim tra trnh bin dch. Tin trnh bin dch bao gm bn giai on: Tin x l Bin dch Tp hp Lin kt Ta c th dng tin trnh sau mt trong nhng giai on kim tra kt qu bin dch ti giai on y. gcc cng c th chp nhn ngn ng khc ca C, nh ANSI C hay C truyn thng. Nh ni trn, gcc thch hp bin dch C++ hay Objective-C. Ta c th kim sot lng cng nh kiu thng tin cn debug, tt nhin l c th nhng trong tin trnh nh phn ha kt qu v ging nh hu ht cc trnh bin dch, gcc cng thc hin ti u ha m. Trc khi bt u i su vo nghin cu gcc, ta xem mt v d sau: #include<stdio.h> int main (void) { fprintf( stdout, Hello, Linux programming world!\n); return 0; } Mt chng trnh in hnh dng minh ho vic s dng gcc bin dch v chy chng trnh ny hy g: $ gcc hello.c o hello $ ./hello Hello, Linux programming world! Dng lnh u tin ch cho gcc phi bin dch v lin kt file ngun hello.c, to ra tp tin thc thi, bng cch ch nh s dng i s -o hello. Dng lnh th hai thc hin chng trnh, v kt qu cho ra trn dng th 3. C nhiu ch m ta khng nhn thy c, gcc trc khi chy hello.c thng qua b tin x l ca cpp, m rng bt k mt macro no v chn thm vo ni dung ca nhng file #include. Tip n, n bin dch m ngun tin x l sang m obj . Cui cng, trnh lin kt, to ra m nh phn cho chng trnh hello.
- 78 -

Ta c th to li tng bc ny bng tay, chia thnh tng bc qua tin trnh bin dch. ch cho gcc bit phi dng vic bin dch sau khi tin x l, ta s dng tu chn E ca gcc: $ gcc E hello.c o hello.cpp Xem xt hello.cpp v ta c th thy ni dung ca stdio.h c chn vo file, cng vi nhng m thng bo tin x l khc. Bc tip theo l bin dch hello.cpp sang m obj. S dng tu chn c ca gcc hon thnh: $ gcc x cpp-output -c hello.cpp o hello.o Trong trng hp ny, ta khng cn ch nh tn ca file output bi v trnh bin dch to mt tn file obj bng cch thay th .c bi .o. Tu chn x ch cho gcc bit bt u bin dch bc c ch bo trong trng hp ny vi m ngun tin x l. Lm th no gcc bit chia loi c bit ca file? N da vo ui m rng ca file trn xc nh r phi x l file nh th no cho dng. Hu ht nhng ui m rng thng thng v ch thch ca chng c lit k trong bng di. Phn m rng Kiu M ngun ngn ng C .c M ngun ngn ng C++ .c, .cpp M ngun C tin x l .i M ngun C++ tin x l .ii M ngun Hp ng .S, .s M i tng bin dch (obj) .o M th vin bin dch .a, .so Cc phn m rng ca tn file i vi gcc Lin kt file i tng, v cui cng to ra m nh phn: $ gcc hello.o o hello Trong trng hp , ta ch mun to ra cc file obj, v nh vy th bc lin kt l khng cn thit. Hu ht cc chng trnh C cha nhiu file ngun th mi file ngun u phi c bin dch sang m obj trc khi ti bc lin kt cui cng. Gi s c mt v d, ta ang lm vic trn killerapp.c l chng trnh s dng phn m ca helper.c, nh vy bin dch killerapp.c ta phi dng dng lnh sau: $ gcc killerapp.c helper.c o killerapp gcc qua ln lt cc bc tin x l - bin dch lin kt, lc ny to ra cc file obj cho mi file ngun trc khi to ra m nh phn cho killerapp. Mt s tu chn dng lnh ca gcc: -o FILE : Ch nh tn file output; khng cn thit khi bin dch sang m obj. Nu FILE khng c ch r th tn mc nh s l a.out. -c : Bin dch khng lin kt. -DF00=BAR : nh ngha macro tin x l t tn F00 vi mt gi tr ca BAR trn dng lnh. -IDIRNAME : Trc khi cha quyt nh c DIRNAME hy tm kim nhng file include trong danh sch cc th mc( tm trong danh sch cc ng dn th mc) -LDIRNAME : Trc khi cha quyt nh c DIRNAME hy tm kim nhng file th vin trong danh sch cc th mc. Vi mc nh gcc lin kt da trn nhng th vin dng chung -static : Lin kt da trn nhng th vin tnh - 79 -

-lF00 : Lin kt da trn libF00 -g : Bao gm chun g ri thng tin m nh phn -ggdb : Bao gm tt c thng tin m nh phn m ch c chng trnh g ri GNU- gdb mi c th hiu c -O : Ti u ho m bin dch -ON : Ch nh mt mc ti u ho m N, 0<=N<=3. -ANSI : H tr chun ANSI/ISO ca C, loi b nhng m rng ca GNU m xung t vi chun( tu chn ny khng bo m m theo ANSI). -pedantic : Cho ra tt c nhng cnh bo quy nh bi chun -pedantic-erors : Thng bo ra tt c cc li quy nh bi chun ANSI / ISO ca C. -traditional : H tr cho c php ngn ng C ca Kernighan v Ritchie (ging nh c php nh ngha hm kiu c). -w : Chn tt c thng ip cnh bo. -Wall : Thng bo ra tt c nhng cnh bo hu ch thng thng m gcc c th cung cp. -werror : Chuyn i tt c nhng cnh bo sang li m s lm ngng tin trnh bin dch. -MM : Cho ra mt danh sch s ph thuc tng thch c to. -v : Hin ra tt c cc lnh s dng trong mi bc ca tin trnh bin dch. 6.3.2. Cng c GNU make Trong trng hp ta vit mt chng trnh rt ln c cu thnh bi t nhiu file, vic bin dch s rt phc tp v phi vit cc dng lnh gcc rt l di. khc phc tnh trng ny, cng c GNU make c a ra. GNU make c gii quyt bng cch cha tt c cc dng lnh phc tp trong mt file gi l makefile. N cng lm ti u ha tin trnh dch bng cch pht hin ra nhng file no c thay i th n mi dch li, cn file no khng b thay i th n s khng lm g c, v vy thi gian dch s c rt ngn. Mt makefile l mt c s d liu vn bn cha cch lut, cc lut ny s bo cho chng trnh make bit phi lm g v lm nh th no. Mt lut bao gm cc thnh phn nh sau: ch (target) ci m make phi lm Mt danh sch cc thnh phn ph thuc (dependencies) cn to ra ch Mt danh sch cc cu lnh thc thi trn cc thnh phn ph thuc Khi c gi, GNU make s tm cc file c tn l GNUmakefile, makefile hay Makefile. Cc lut s c c php nh sau: target: dependency1, dependency2, . command command Target thng l mt file nh file kh thi hay file object ta mun to ra. Dependency l mt danh sch cc file cn thit nh l u vo to ra target. Command l cc bc cn thit (chng hn nh gi chng trnh dch) to ra target. Di y l mt v d v mt makefile v to ra mt chng trnh kh thi c tn l editor (s hiu dng ch a vo tin theo di, cn ni dung ca makefile khng cha s hiu dng). Chng trnh ny c to ra bi mt s cc file ngun: 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
- 80 -

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 bin dch chng trnh ny ta ch cn ra lnh make trong th mc cha file ny. Trong makefile ny cha tt c 5 lut, lut u tin c ch l editor c gi l ch ngm nh. y chnh l file m make s phi to ra, editor c 3 dependencies editor.o, screen.o, keyboard.o. Tt c cc file ny phi tn ti th mi to ra c ch trn. Dng th 2 l lnh m make s gi thc hin to ra ch trn. Cc dng tip theo l cc ch v cc lnh tng ng to ra cc file i tng (object). 6.3.3. Lm vic vi file Trong Linux, lm vic vi file ta s dng m t file (file descriptor). Mt trong nhng thun li trong Linux v cc h thng UNIX khc l giao din file lm nh nhau i vi nhiu loi thit b. a t, cc thit b vo/ra, cng song song, gi my trm (pseudoterminal), cng my in, bng mch m thanh, v chut c qun l nh cc thit b c bit ging nh cc tp thng thng lp trnh ng dng. Cc socket TCP/IP v min, khi kt ni c thit lp, s dng m t file nh th chng l cc file chun. Cc ng (pipe) cng tng t cc file chun. Mt m t file n gin ch l mt s nguyn c s dng nh ch mc (index) vo mt bng cc file m lin kt vi tng tin trnh. Cc gi tr 0, 1 v 2 lin quan n cc dng (streams) vo ra chun: stdin, stderr v stdout; ba dng thng kt ni vi my ca ngi s dng v c th c chuyn tip (redirect). Mt s li gi h thng s dng m t file. Hu ht cc li gi tr v gi tr -1 khi c li xy ra v bin errno ghi m li. M li c ghi trong trang chnh tu theo tng li gi h thng. Hm perror() c s dng hin th ni dung thng bo li da trn m li. Hm open() Li gi open() s dng m mt file. Khun mu ca hm v gii thch tham s v c ca n c cho di 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 mt xu ch ra ng dn n file s c m. Thng s th ba xc nh ch ca file Unix (cc bit c php) c s dng khi to mt file v nn c s dng khi to mt file . Tham s flags nhn mt trong cc gi tr O_RDONLY, O_WRONLY hoc O_RDWR C Ch gii O_RDONLY M file c O_WRONLY M file ghi O_RDWR M file c v ghi O_CREAT To file nu cha tn ti file O_EXCL Tht bi nu file c O_NOCTTY Khng iu khin tty nu tty m v tin trnh khng iu khin tty O_TRUNC Ct file nu n tn ti - 81 -

C Ch gii O_APPEND Ni thm v con tr t cui file O_NONBLOCK Nu mt tin trnh khng th hon thnh m khng c tr, tr v trng thi trc O_NODELAY Tng t O_NONBLOCK O_SYNC Thao tc s khng tr v cho n khi d liu c ghi vo a hoc thit b khc Cc gi tr c ca hm open() open() tr v mt m t file nu khng c li xy ra. Khi c li , n tr v gi tr -1 v t gi tr cho bin errno. Hm create() cng tng t nh open() vi cc c O_CREATE | O_WRONLY | O_TRUNC Hm close() Chng ta nn ng m t file khi thao tc xong vi n. Ch c mt i s l s m t file m li gi open() tr v. Dng ca li gi close() l: #include <unistd.h> int close(int fd); Tt c cc kho (lock) do tin trnh x l trn file c gii phng, cho d chng c t m t file khc. Nu tin trnh ng file lm cho b m lin kt bng 0 th file s b xo. Nu y l m t file cui cng lin kt n mt file c m th bn ghi bng file m c gii phng. Nu khng phi l mt file bnh thng th cc hiu ng khng mong mun c th xy ra. Hm read() Li gi h thng read() s dng c d liu t file tng ng vi mt m t file. #include <unistd.h> ssize_t read(int fd, void *buf, size_t count); i s u tin l m t file m c tr v t li gi open() trc . i s th hai l mt con tr ti b m sao chp d liu v i s th ba l s byte s c c. read() tr v s byte c c hoc -1 nu c li xy ra. Hm write() Li gi h thng write() s dng ghi d liu vo file tng ng vi mt m t file. #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); i s u tin l s m t file c tr v t li gi open() trc . i s th hai l con tr ti b m ( sao chp d liu, c dung lng ln cha d liu) v i s th ba xc nh s byte s c ghi. write() tr v s byte c hoc -1 nu c li xy ra Hm ftruncate() Li gi h thng ftruncate() ct file tham chiu bi m t file fd vi di c xc nh bi tham s length #include <unistd.h> int ftruncate(int fd, size_t length); Tr v gi tr 0 nu thnh cng v -1 nu c li xy ra. Hm lseek() Hm lseek() t v tr c v ghi hin ti trong file c tham chiu bi m t file files ti v tr offset #include <sys/types.h> #include <unistd.h> off_t lseek(int fildes, off_t offset, int whence);
- 82 -

Ph thuc vo gi tr ca whence, gi tr ca offset l v tr bt u (SEEK_SET), v tr hin ti (SEEK_CUR), hoc cui file (SEEK_END). Gi tr tr v l kt qu ca offset: bt u file, hoc mt gi tr ca off_t , gi tr -1 nu c li. Hm fstat() Hm fstat () a ra thng tin v file thng qua vic m t cc file, ni kt qu ca struct stat c ch ra con tr ch n buf().Kt qu tr v gi tr 0 nu thnh cng v nhn gi tr 1 nu sai ( kim tra li). #include <sys/stat.h> #include <unistd.h> int fstat(int filedes, struct stat *buf); Sau y l nh ngha ca struct stat: struct stat { dev_t st_dev; / * thit b */ int_t st_ino ; /* inode */ mode_t st_mode; /* ch bo v */ nlink_t st_nlink; /* s lng cc lin kt cng */ uid_t st_uid; /* s hiu ca ngi ch */ gid_t st_gid; /* s hiu nhm ca ngi ch*/ dev_t st_rdev; /* kiu thit b */ off_t st_size; /* kch thc bytes */ unsigned long st_blksize; /* kch thc khi*/ unsigned long st_blocks; /* S lng cc khi s dng*/ time_t st_atime; /* thi gian truy cp cui cng*/ time_t st_mtime; /* thi gian cp nht cui cng */ time_t st_ctime; /* thi gian thay i cui cng */ }; Hm fchown() Li gi h thng fchown() cho php tathay i ngi ch v nhm ngi ch kt hp vi vic m file. #include <sys/types.h> #include <unistd.h> int fchown(int fd, uid_t owner, gid_t group); Tham s u tin l m t file, tham s th hai l s nh danh ca ngi ch, v tham s th ba l s nh danh ca nhm ngi ch. Ngi dng hoc nhm ngi dng s c php s dng khi gi tr -1 thay i. Gi tr tr v l 0 nu thnh cng v 1 nu gp li (kim tra bin errno). Thng thng ngi dng c th thay i nhm cc file thuc v h. Ch root mi c quyn thay i ngi ch s hu ca nhiu nhm. Hm fchdir( ) Li gi hm fchdir( ) thay i th mc bng cch m file c m t bi bin fd. Gi tr tr v l 0 nu thnh cng v 1 nu c li (kim tra bin errno). #include <unistd.h> int fchdir(int fd); 6.3.4. Th vin lin kt Phn ny s gii thiu cch to ra v s dng th vin (cc module chng trnh c vit v c ti s dng nhiu ln). Th vin gc ca C/C++ trn Linux chnh l glibc, th vin ny cung cp cho ngi dng rt nhiu li gi h thng. Cc th vin trn Linux thng c t chc di dng tnh (static library), th vin chia s (shared library) v ng
- 83 -

(dynamic library - ging nh DLL trn MS Windows). Th vin tnh c lin kt c nh vo trong chng trnh trong tin trnh lin kt. Th vin dng chung c np vo b nh trong khi chng trnh bt u thc hin v cho php cc ng dng cng chia s loi th vin ny. Th vin lin kt ng c np vo b nh ch khi no chng trnh gi ti. * Th vin lin kt tnh Th vin tnh v cc th vin dng chung (shared library) l cc file cha cc file c gi l cc module c bin dch v c th s dng li c. Chng c lu tr di mt nh dng c bit cng vi mt bng (hoc mt bn ) phc v cho tin trnh lin kt v bin dch. Cc th vin lin kt tnh c phn m rng l .a. s dng cc module trong th vin ta cn thm phn #include file tiu (header) vo trong chng trnh ngun v khi lin kt (sau tin trnh bin dch) th lin kt vi th vin . Di y l mt v d v cch to v s dng mt th vin lin kt tnh. C 2 phn trong v d ny, phn th nht l m ngun cho th vin v phn th 2 cho chng trnh s dng th vin. M ngun cho file liberr.h /* * liberr.h */ #ifndef _LIBERR_H #define _LIBERR_H #include <stdarg.h> /* in ra mt thng bo li ti vicgi stderr v return hm gi */ void err_quit(const char *fmt, ); /* in ra mt thng ip li cho logfile v tr v hm gi */ void log_ret(char *logfile, const char *fmt, ); /* in ra mt thng ip li cho logfile v thot */ void log_quit( char *logfile, const char *fmt , ); /* in ra mt thng bo li v tr li hm gi */ void err_prn(const char *fmt, va_list ap, char *logfile); #endif //_LIBERR_H M ngun file liberr.c #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,...)
- 84 -

{ va_list ap; va_start(ap, fmt); err_prn(fmt,ap, logfile); va_end(ap); return; } 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; } to mt th vin tnh, bc u tin l dch on m ca form i tng: $gcc H c liberr.c o liberr.o Tip theo: $ar rcs liberr.a liberr.o /* * M ngun file testerr.c */ #include <stdio.h> #include <stdlib.h> #include "liberr.h" #define ERR_QUIT_SKIP 1 #define LOG_QUIT_SKIP 1 int main(void) { 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
- 85 -

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; } Bin dch chng trnh kim tra, ta s dng dng lnh: $ gcc -g errtest.c -o errtest -L. -lerr Tham s -L. ch ra ng dn ti th mc cha file th vin l th mc hin thi, tham s lerr ch r th vin thch hp m chng ta mun lin kt. Sau khi dch ta c th kim tra bng cch chy chng trnh. * Th vin dng chung Th vin dng chung c nhiu thun li hn th vin tnh.Th nht, th vin dng chung tn t ti nguyn h thng, chng s dng t khng gian a v m ngun th vin dng chung khng bin dch sang m nh phn nhng c lin kt v c dng t ng mi ln dng. Chng s dng t b nh h thng v nhn chia s b nh cho th vin dng chung ny v tt c cc chng trnh u s dng chung min b nh ny. Th 2, th vin dng chung nhanh hn vi chng ch cn np vo mt b nh. L do cui cng l m ngun trong th vin dng chung d bo tr. Khi cc li c sa hay thm vo cc c tnh, ngi dng cn s dng th vin nng cp. i vi th vin tnh, mi chng trnh khi s dng th vin phi bin dch li. Trnh lin kt (linker)/module ti (loader) ld.so lin kt tn biu tng ti th vin dng chung mi ln chy. Th vin dng chung c tn c bit (gi l soname), bao gm tn th vin v phin bn chnh. V d: tn y ca th vin C trong h thng l libc.so.5.4.46, tn th vin l libc.so, tn phin bn chnh l 5, tn phin bn ph l 4, 46 l mc v (patch level). Nh vy, soname th vin C l libc.5. Th vin libc6 c soname l libc.so.6, s thay i phin bn chnh l s thay i ng k th vin. Phin bn ph v patch level thay i khi li c sa nhng soname khng thay i v bn mi c s thay khc bit ng k so vi bn c. Cc chng trnh ng dng lin kt da vo soname. Tin ch idconfig to mt biu tng lin kt t th vin chun libc.so.5.4.46 ti soname libc.5 v lu tr thng tin ny trong /etc/ld.so.cache. Trong lc chy, ld.so c phn lu tr, tm soname thch hp v np th vin hin tai vo b nh, kt ni hm ng dng gi ti i tng thch hp trong th vin. Cc phin bn th vin khc nhau nu: Cc giao din hm u ra thay i. Cc giao din hm mi c thm. Chc nng hot ng thay i so vi c t ban u Cu trc d liu u ra thay i Cu trc d liu u ra c thm duy tr tnh tng thch ca th vin, cn m bo cc yu cu: Khng thm vo nhng tn hm c hoc thay i hot ng ca n Ch thm vo cui cu trc d liu c hoc lm cho chng c tnh tu chn hay c khi to trong th vin Khng m rng cu trc d liu s dng trong cc mng
- 86 -

Xy dng th vin dng chung hi khc so vi th vin tnh, tin trnh xy dng th vin dng chung c minh ho di y: Khi bin dch file i tng, s dng ty chn -fpic ca gcc n s to ra m c lp v tr (position independence code) t c th lin kt hay s dng bt c ch no Khng loi b file i tng v khng s dng cc ty chn fomit frame pointer ca gcc, v nu khng s nh hng n tin trnh g ri (debug) S dng tu chn -shared and soname ca gcc S dng tu chn Wl ca gcc truyn tham s ti trnh lin kt ld. Thc hin tin trnh lin kt da vo th vin C, s dng tu chn l ca gcc Tr li th vin x li li , to th vin dng chung trc ht xy dng file i tng: $ gcc -fPiC -g -c liberr.c -o liberr.o Tip theo lin kt th vin: $ gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc V khng th ci t th vin ny nh th vin h thng trong /usr hay /usr/lib chng ta cn to 2 kin kt, mt cho soname.V cho trnh lin kt khi kt ni da vo liberr, s dng lerr: $ ln -s liberr.so.1.0.0 liberr.so By gi, d dng th vin dng chung mi chng ta quay li chng trnh kim tra, chng ta cn hng trnh lin kt ti th vin no s dng v tm n u, v vy chng ta s s dng tu chn l v L: $ gcc -g errtest.c -o errtest -L. -lerr Cui cng chy chong trnh, chng ta cn ch cho ld.so ni tm th vin dng chung : $ LD_LIBRARY_PATH=$(pwd) ./errtest * S dng i tng dng chung theo cch ng Mt cch s dng th vin dng chung l np chng t ng mi khi chy khng ging nh nhng th vin lin kt v np mt cch t ng. Ta c th s dng giao din dl (dynamic loading) v n to s linh hot cho lp trnh vin hay ngi dng. Gi s ta ang to mt ng dng s l ho. Trong ng dng, ta biu din d liu mt dng khng theo chun nhng li thun tin cho ta x l, v ta cn c nhu cu chuyn d liu ra cc nh dng thng dng c (s lng cc nh dng ny c th c hng trm loi) hoc c d liu t cc nh dng mi ny vo x l. gii quyt vn ny ta c th s dng gii php l th vin. Nhng khi c thm mt nh dng mi th ta li phi bin dch li chng trnh. y li l mt iu khng thch hp lm. Kh nng s dng th vin ng s gip ta gii quyt vn va gp phi. Giao din dl cho php to ra giao din (cc hm) c v vit chung khng ph thuc vo nh dng ca file nh. thm hoc sa cc nh dng ca file nh ta ch cn vit thm mt module m nhn chc nng v bo cho chng trnh ng dng bit l c thm mt module mi bng cch ch cn thay i mt file cu hnh trong mt th mc xc nh no . Giao din dl (cng n thun c xy dng nh mt th vin - th vin libdl) cha cc hm ti (load), tm kim v gii phng (unload) cc i tng chia s. s dng cc hm ny ta thm file <dlfcn.h> vo phn #include vo trong m ngun, v khi dch th lin kt n vi th vin libdl bng cch s dng tham s v tn ldl trong dng lnh dch. dl cung cp 4 hm x l cc cng vic cn thit ti, s dng v gii phng i tng dng chung. Truy cp i tng chia s truy cp mt i tng chia s, dng hm dlopen() c c t nh sau: void *dlopen(const char *filename, int flag); - 87 -

dlopen() truy cp i tng chia s bng filename v bng c. Filename c th l ng dn y , tn file rt gn hay NULL. Nu l NULL dlopen() m chng trnh ang chy, l chng trnh ca bn, nu filename l ng dn dlopen() m file , nu l tn rt gn dlopen() s tm trong v tr sau tm file: $LD_ELF_LiBRARY_PATH, $LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, v /lib. C c th l RTLD_LAZY, c ngha l cc k hiu (symbol) hay tn hm t i tng truy cp s c tm mi khi chng c gi, hoc c c th l RTLD_NOW, c ngha tt c k hiu t i tng truy cp s c tm trc khi hm dlopen() tr v. dlopen() tr iu khin ti i tng truy nhp nu n tm thy t filename hay tr v gi tr NULL nu khng tm thy. S dng i tng chia s Trc khi c th s dng m ngun trong th vin ta phi bit ang tm ci g v tm u. Hm dlsym() s gip iu : void *dlsym(void *handle, char *symbol); dlsym() tm k hiu hay tn hm trong truy cp v tr li con tr kiu void ti i tng hay NULL nu khng thnh cng. Kim tra li Hm dlerror() s gip ta kim tra li khi s dng i tng truy cp ng: const char *dlerror(void); Nu mt trong cc hm li, dlerror() tr v thng bo chi tit li v gn gi tr NULL cho phn b li. Gii phng i tng chia s bo v ti nguyn h thng c bit b nh, khi ta s dng xong module trong mt i tng chia s, th gii phng chng. Hm dlclose() s ng i tng chia s: int dlclose(void *handle); S dng giao din dl minh ho cch s dng dl,chng ta quay li th vin x l li, s dng mt chng trnh khc nh sau: /* * M ngun chng trnh 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: %s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); errfcn = dlsym(handle, "err_ret"); if((errmsg = dlerror()) != NULL) {
- 88 -

fprintf(stderr, "Didn't find err_ret(): %s\n", errmsg); exit(EXIT_FAILURE); } if((pf = fopen("foobar", "r")) == NULL) errfcn("couldn't open foobar"); dlclose(handle); return EXIT_SUCCESS; } Bin dch v d trn bng lnh: $ gcc -g -Wall dltest.c -o dltest -ldl Nh ta c th thy, chng ta khng lin kt da vo liberr hay liberr.h trong m ngun. Tt c truy cp ti liberr.so thng qua dl. Chy chng trnh bng cch sau: $ LD_LIBRARY_PATH=$(pwd) ./dltest Nu thnh cng th ta nhn c kt qu nh sau: couldnt open foobar: No such file or directory 6.3.5 Cc cng c cho th vin Cng c nm Lnh nm lit k ton b cc tn hm (symbol) c m ho trong file i tng (object) v nh phn (binary). Lnh nm s dng c php sau: nm [options] file Lnh nm lit k nhng tn hm cha trong file. Tu chn Miu t -C| -demangle Chuyn tn k t vo tn mc ngi dng cho d c. -s|-print-armap Khi s dng cc file lu tr (phn m rng l .a), in ra cc ch s ca module cha hm . -u| -undefined-only Ch a ra cc hm khng c nh ngha trong file ny, tc l cc hm c nh ngha mt file khc. - l | -line-numbers S dng thng tin g ri in ra s dng ni hm c nh ngha Cng c ar Lnh ar s dng c php sau: ar {dmpqrtx} [thnh vin] file Lnh ar to, chnh sa v trch cc file lu tr. N thng c s dng to cc th vin tnh- nhng file m cha mt hoc nhiu file i tng cha cc chng trnh con thng c s dng (subrountine) nh dng tin bin dch (precompiled format), lnh ar cng to v duy tr mt bng m tham chiu qua tn k t ti cc thnh vin m trong chng c nh ngha. Chi tit ca lnh ny c trnh by trong chng trc. Cng c idd Lnh nm lit k cc hm c nh ngha trong mt file i tng, nhng tr khi ta bit nhng g th vin nh ngha nhng hm no. Lnh idd hu ch hn nhiu. idd lit k cc th vin c chia s m mt chng trnh yu cu m chy. C php ca n l: idd [options] file Lnh idd in ra tn ca th vin chia s m file ny s dng. V d: chng trnh th client mutt cn 5 th vin chia s, nh c minh ho sau y: $ idd /usr/bin/mutt
- 89 -

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) Tm hiu lnh idconfig Lnh idconfig s dng c php sau: ldconfig [tu chn] [libs] Lnh ldconfig xc nh r cc lin kt ng (lin kt khi chy) c yu cu bi th vin c chia s nm trong cc th mc /usr/lib v /lib. Di y l cc ty chn ca lnh ny: Cc tu chn Cc miu t -p n thun ch in ra ni dung ca /etc/ld.so.cache, mt danh sch hin thi cc th vin c chia s m ld.so bit. -v Cp nht /etc/ld.so.cache , lit k s phin bn ca mi th vin, qut cc th mc v bt k lin kt m c to ra hoc cp nht. Cc tu chn ca hm idconfig Bin mi trng v file cu hnh. Chng trnh ti (loader) v trnh lin kt (linker) ld.so s dng 2 bin mi trng. Bin th nht l $LD_LIBRARY, cha danh sch cc th mc cha cc file th vin c phn cch bi du hai chm tm ra cc th vin cn thit khi chy. N ging nh bin mi trng $PATH. Bin mi trng th hai l $LD_PRELOAD, mt danh sch cc th vin c ngi dng thm vo c phn cch nhau bi khong trng (space). ld.so cng cho php s dng 2 file cu hnh m c cng mc ch vi bin mi trng c cp trn. File /etc/ld.so.conf cha mt danh sch cc th mc m chng trnh ti v trnh lin kt (loader/linker) nn tm kim cc th vin chia s bn cnh /usr/lib v /lib. /etc/ld.so.preload cha danh sch cc file th vin c phn cch bng mt khong trng cc th vin ny l th vin ngi dng to ra. CU HI V BI TP 1. Trnh by cc yu t c bn trong lp trnh shell 2. Trnh by ngha, chc nng v tc dng ca trnh bin dch gcc. 3. Thc hnh cc lnh trong lp trnh shell 4. Thc hnh cc lnh trong lp trnh C

- 90 -

THI THAM KHO 1: Cu 1: Trnh by khi nim v cu trc siu khi Cu 2: Trong th mc ngi dng /home/tuanpv c cc th mc con l vanban, bangtinh. Hy vit cc lnh ca Linux : 1. To ti th mc vanban mt th mc con c tn l hopdong. Sao chp cc tp tin c 2 k t phn tn l HD trong th mc vanban vo th mc va to 2. Lit k cc tp tin c phn tn bt u bi k t M trong th mc bangtinh ln mn hnh (cho hin cc tp tin c thuc tnh n nu c) 3. Xc lp quyn ch c cho cc tp trong th mc bangtinh. 4. Xo tt c cc tp tin 2 k t nh thuc phn tn trong th mc vanban. Cu 3: Lp chng trnh lit k tn v sao chp cc tp tin trong th mc /home/user1/vidu1 sang th mc /home/user2/vidu 2: Cu 1: Trnh by khi nim v cu trc inode Cu 2: Trong th mc ngi dng /home/minhnd c cc th mc con l musics, games. Hy vit cc lnh ca Linux : 1. Xo i cc tp tin c phn m rng l mp3 trong th mc musics; Xo th mc lines trong th mc games 2. To ra ti th mc ngi dng mt th mc con c tn temp, trong th mc ny to hai th mc con ngang cp c tn vidu1 v vidu2. 3. Lit k cc tin trnh ang chy trong h thng. 4. Nn th mc games thnh tp tin luugames.tar Cu 3: Lp chng trnh c v hin th ni dung ca 1 file khng cu trc 3: Cu 1: Trnh by tn v tc dng ca cc th mc c bit trong Linux Cu 2: Trong th mc ngi dng /home/cuongpv c cc th mc con l tailieu, tapchi. Hy vit cc lnh ca Linux : 1. Ni ni dung cc tp sach1, sach2 trong th mc tailieu thnh tp tapsach t to th mc ngi dng. 2. Lit k cc tp tin trong th mc tapchi (k c tp tin c thuc tnh n) 3. Nn cc tp tin trong th mc tailieu thnh tp luutl.zip t ti th mc ngi dng. 4. Xa cc tp tin c k t h ca phn tn trong th mc tailieu Cu 3: Cho hai vector m chiu a = (a1, a2, a3,..., am) v b = (b1, b2, b3,..., bm). Hy lp chng trnh tnh tch v hng ca a v b theo cng thc a.b = a1.b1 + a2.b2 + ... + am.bm. 4: Cu 1: Trnh by cu trc thng tin lu tr v ti khon ngi ca mt dng trong trong file /etc/passwd Cu 2: Trong th mc ngi dng /home/dungnv c cc th mc con l vanhoc v kythuat. Hy vit cc lnh ca Linux : 1. Tm tp tin c cha ni dung l Happy Birthday 2. Thit lp quyn truy cp th mc kythuat cho tt c cc ngi dng.
- 91 -

3. To mt th mc c tn l nghethuat trong th mc ngi dng, sau chp tt c cc tp c k t 01 cui phn tn trong th mc vanhoc vo th mc va to. 4. Lit k cu hnh ca my hin ti Cu 3: Cho s n, Hy lp chng trnh thc hin tnh gi tr ca hm cos(x) theo cng thc: Cos(x) = 1- x2/2! + x4/4! - x6/6! + ... (-1)nx2x/(2n)! 5: Cu 1: Trnh by cc yu t c bn trong lp trnh shell Cu 2: Trong th mc ngi dng /home/thanghv c cc th mc con l congvan, quyetdinh. Hy vit cc lnh ca Linux : 1. To ra ti th mc ngi dung mt th mc con c tn l saoluu, 2. Sao chp tt c cc tp ti th mc quyetdinh vo th mc va to 3. Thit lp quyn truy cp th mc congvan cho nhm ngi dng hanhchinh 4. Xa cc tp c hai k t u phn tn l GM trong th mc congvan Cu 3: Cho s thc a. Hy lp s thut ton thc hin tm s t nhin n nh nht sao cho 1+1/2 + 1/3 + ... + 1/n > a

- 92 -

You might also like