You are on page 1of 229

KHOA CNG NGH THNG TIN B MN MNG & TT ---------------------------

Bi ging

H IU HNH UNIX - LINUX

(lu hnh ni b) THI NGUYN 2009

BNG T VIT TT 6 CHNG 1: TNG QUAN V UNIX/ LINUX 7


1. Lch s pht trin ca Unix 7 2. Lch s pht trin ca Linux 9
2.1 Mt s c im chnh ca Linux 11 2.2 Cc thnh phn chnh ca h iu hnh Linux 14

CHNG 2: H THNG FILE TRONG LINUX 21


1. Cc kiu file c trong Linux 21 2. Quy c tn file trong Linux 22 3. Cu trc h thng file ca Linux 23 4. Cu trc cy th mc ca h thng file trong Linux 27 5. Cc file chun vo /ra trn Linux 29

CHNG 3: THAO TC TRN H THNG FILE CA UNIX 32


1. Qun l quyn truy cp h thng file 32 2. Nhm lnh qun l quyn thm nhp file 35
2.1 Lnh chmod 35 2.2 Lnh chown 37 2.3 Lnh chgrp 37

3. Cc lnh thao tc trn th mc 39


3.1 Thay i th mc lm vic hin thi vi lnh cd 39 3.2 Xem ni dung th mc vi lnh ls 39 3.3 To th mc vi lnh mkdir 40 3.4 Xa th mc vi lnh rmdir 40 3.5 Xem ng dn th mc hin thi vi lnh pwd 41 3.6 Lnh i tn th mc vi lnh mv 41

4. Cc lnh thao tc trn file 41


4.1 To file vi lnh touch 41 4.2 To file vi lnh cat 41 4.3 Xem ni dung cc file ln vi lnh more 42 4.4 Thm s th t ca cc dng trong file vi lnh nl 44 4.5 Xem ni dung file vi lnh head 45 4.6 Xem ni dung file vi lnh tail 45 4.7 S dng lnh file xc nh kiu file 46 4.8 Lnh wc dng m s k t, s t, hay s dng trong mt file 47 4.9 So snh ni dung hai file s dng lnh diff 47 4.10 Xa file vi lnh rm 48 4.11 Sao chp tp tin vi lnh cp 48 4.12 i tn file vi lnh mv 50 4.13 Lnh uniq loi b nhng dng khng quan trng trong file 50 4.14 Sp xp ni dung file vi lnh sort 51 4.15 Tm theo ni dung file bng lnh grep 53 4.16 Tm theo cc c tnh ca file vi lnh find 58 4.17 Nn v sao lu cc file 61 4.17.1 Sao lu cc file (lnh tar) 61 4.17.2 Nn d liu vi gzip 63 4.17.3 Nn, gii nn v xem file vi cc lnh compress, uncompress, zcat 65 4.18 Lin kt (link) tp tin 66

4.19 Xem thuc tnh v mt file 67

4.20 Lnh ct file split 67


4.21 Lnh mount v unmount 67 4.21.1 Lnh mount 67 4.21.1 Lnh umount 68

5. Cc lnh v tin ch h thng 68


5.1 Cc lnh ng nhp v thot khi h thng 68 5.2 Lnh thay i mt khu passwd 71 5.4 Lnh date xem, thit t ngy, gi 73 5.5 Lnh xem lch cal 75 5.6 Xem thng tin h thng uname 76 5.7 Thay i ni dung du nhc shell 77 5.8 Lnh gi ngn ng tnh ton s hc 79 5.9 Tin ch mc 81 5.10 S dng trnh son tho VI 91 5.11 S dng ti liu gip man 96 5.11 S dng h tr apropos 97

CHNG 4: LP TRNH TRONG LINUX 98


1. LP TRNH SHELL 98
1.1 Khi nim shell 98 1.2 Mt s c im ca Shell 98 1.3 Lp trnh ng ng 100 1.4 Lp trnh Shell Script 101 1.5 iu khin lung 111 1.5.1 Biu thc iu kin if 112 1.5.2 Biu thc lnh r nhnh case 115 1.5.3 Vng lp For 118 1.5.4 Vng lp While 121 1.5.5 Vng lp until 121 1.5.6 Thot vng lp: break, continue, exit 123 1.5.7 Dch chuyn tham s shift 124 1.6 Hm 124 1.7 Mng 126 1.8 quy 133 1.9 Lp trnh hi thoi 134 1.10 Mt s cc lnh thng dng trong lp trnh Shell 137 1.11 Mt s v d v Shell 139 1.12 Shell con 153

2. Lp trnh C trn Linux 153


2.1 Trnh bin dch gcc 153 2.2 Cng c GNU make 157 2.3 S dng nhn file (m t file file descriptor) 158 2.4 Th vin lin kt 163 2.5 Cc cng c cho th vin 171 2.6 Bin mi trng v file cu hnh 174 2.7 S dng gdb g li 174

CHNG 5: QUN L TI NGUYN V TRUYN THNG TRONG LINUX 175


1. Qun l tin trnh 175

2. Cc lnh c bn trong qun l tin trnh 177


2.1 S dng lnh ps trong qun l tin trnh 177 2.2 Hy mt tin trnh s dng lnh kill 179 2.3 Cho my ngng hot ng mt thi gian vi lnh sleep 180 2.4 Xem cy tin trnh vi lnh pstree 181 2.5 Lnh thit lp u tin ca tin trnh 182 2.5.1 Lnh nice 182 2.5.2 Lnh renice 182 2.6 Lnh lsof lit k cc files c m bi cc tin trnh khc 182 2.7 Lnh fg v lnh bg 182

3. Qun tr h thng 185


3.1 Khi ng v ng tt h thng 185 3.2 Tm hiu v trnh np Linux 185 3.3 Tm hiu GRUB, trnh np Linux. 187 3.4 Qu trnh khi ng 187

4. Qun tr ngi dng 188


4.1 Superuser (root) 188 4.2 Ti khon ngi dng 189 4.3 Thm ngi dng vi lnh useradd 191 4.4 Lnh usermod thay i thng tin ca ngi dng 192 4.5 Hy user 193 4.6 To nhm ngi dng groupadd 193 4.7 Xc nh ngi dng ang ng nhp (lnh who) 194 4.8 xc nh thng tin ngi dng vi lnh id 195

4.10 Hin th danh sch ng nhp s dng lnh last 196 4.11 Lnh which hin th ng dn y ca chng trnh 196 5. Qun tr ti nguyn 196
5.1 Qun l ti nguyn vi lnh quota 196 5.2 Lnh qun l lu tr 198 5.2.1 Xem dung lng a s dng vi lnh du 198 5.2.2 Kim tra dung lng a trng vi lnh df 199 5.2.3 Lnh free hin th tnh trng s dng b nh 200

6 Truyn thng trong Linux 201


6.1. Lnh t tn my 203 6.2. Lnh ifconfig 203 6.3 Lnh netstat 204 6.4 Lnh write 205 6.5 Lnh mail 206 6.6 Lnh talk 209

TI LIU THAM KHO 210 PH LC 211


1. Gii thiu mt s phin bn h iu hnh Linux thng dng hin nay v cch ci t 211
1.1 Hng dn ci t h iu hnh Redhat Linux 7.1 211 1.2 Hng dn s dng h iu hnh Ubuntu v cc phin bn ca n 228

2. Ci t WEBMIN 228 3. Ci t WEBSERVER 228 4. Ci t FILE SERVER 228

BNG T VIT TT
H iu hnh Multiplexed Information and Computing Service Berkley Software Distribution Midnight Commander HH Multics BSD mc

CHNG 1: TNG QUAN V UNIX/ LINUX


1. Lch s pht trin ca Unix
Gia nm 1960, AT&T Bell Laboratories v mt s trung tm khc tham gia vo mt c gng to ra mt h iu hnh mi c t tn l Multics. n nm 1969, chng trnh Multics b bi b v l mt d n qu nhiu tham vng. Thm tr nhiu yu cu i vi Multics thi n nay vn cha c c trn cc Unix mi nht. Nhng Ken Thompson, Dennis Ritchie, v mt s ng nghip ca Bell Labs khng b cuc.

Thay v xy dng mt HH lm nhiu vic mt lc, h quyt nh pht trin mt HH n gin ch lm tt mt vic l chy chng trnh (run program). HH s c rt nhiu cc cng c (tool) nh, n gin, gn nh (compact) v ch lm tt mt cng vic. Bng cch kt hp nhiu cng c li vi nhau, h s c mt chng trnh thc hin mt cng vic phc tp. cng l cch thc ngi lp trnh vit ra chng trnh. Peter Neumann t tn Unix cho HH n gin ny tip tc pht trin theo m hnh ban u v t ra mt h thng tp tin m sau ny c pht trin thnh h thng tp tin ca UNIX. Nm 1973, Riche v Thompson vit li nhn ca h iu hnh UNIX trn ngn ng C, v h iu hnh tr nn d dng ci t ti cc loi my tnh khc nhau; tnh cht nh th c gi l tnh kh chuyn ca UNIX. Trc , khong

nm 1971, h iu hnh c th hin trn ngn ng B (m da trn ngn ng B, Ritche pht trin thnh ngn ng C). Khong nm 1977 bn quyn ca Unix c gii phng v HH Unix tr thnh mt sn phm thng mi. Hai dng UNIX: System V ca AT&T, Novell v Berkeley Software Distribution (BSD) ca i hc Berkeley. + System V: Cc phin bn UNIX cui cng do AT&T xut bn l System III v mt vi pht hnh (releases) ca System V. Hai bn pht hnh gn y ca System V l Release 3 (SVR3.2) v Release 4.2 (SVR4.2). Phin bn SYR 4.2 l ph bin nht cho t my PC cho ti my tnh ln. + BSD: T 1970 Computer Science Research Group ca University of California ti Berkeley (UCB) xut bn nhiu phin bn UNIX, c bit n di tn Berkeley Software Distribution, hay BSD. Ci bin ca PDP11 c gi l 1BSD v 2BSD. Tr gip cho cc my tnh ca Digital Equipment Corporation VAX c a vo trong 3BSD. Pht trin ca VAX c tip tc vi 4.0BSD, 4.1BSD, 4.2BSD, v 4.3BSD Trc 1992, UNIX l tn thuc s hu ca AT&T. T nm 1992, khi AT&T bn b phn Unix cho Novell, tn Unix thuc s hu ca X/Open foundation. Tt c cc h iu hnh tha mn mt s yu cu u c th gi l Unix. Ngoi ra, Institute of Electrical and Electronic Engineers (IEEE) thit lp chun "An Industry-Recognized Operating Systems Interface Standard based on the UNIX Operating System." Kt qu cho ra i POSIX.1 (cho giao din C) v POSIX.2 (cho h thng lnh trn Unix) Tm li, vn chun ha UNIX vn cn rt xa kt qu cui cng. Nhng y l qu trnh cn thit c li cho s pht trin ca ngnh tin hc ni chung v s sng cn ca HH UNIX ni ring.

Hnh 1.1 Cc phin bn ca Unix Cc nhm nh cung cp khc nhau v UNIX ang hot ng trong thi gian hin nay c k n nh sau: + Unix International (vit tt l UI). UI l mt t chc gm cc nh cung cp thc hin vic chuyn nhng h thng UNIX-5 v cung cp bn AT&T theo cc nhu cu v thng bo pht hnh mi, chng hn nh iu chnh bn quyn. Giao din ha ngi dng l Open Look. + Open Software Foundation (OSF). OSF c h tr bi IBM, DEC, HP ... theo hng pht trin mt phin bn ca Unix nhm tranh ua vi h thng UNIX-5 phin bn 4. Phin bn ny c tn l OSF/1 vi giao din ha ngi dng c gi l MOTIF. + Free SoftWare Foundation (FSF): mt cng ng do Richard Stallman khi xng nm 1984 ch trng pht hnh cc phn mm s dng t do, trn c s mt h iu hnh thuc loi UNIX.

2. Lch s pht trin ca Linux


Linux l mt HH dng UNIX (Unix-like Operating System) chy trn my PC vi b iu khin trung tm (CPU) Intel 80386 hoc cc th h sau , hay cc b vi x l trung tm tng thch nh AMD, Cyrix. Linux ngy nay cn c th chy trn cc my Macintosh hoc SUN Sparc. Linux tha mn chun POSIX.1. Linux c vit li ton b t con s khng, tc l khng s dng mt dng lnh no ca Unix, trnh vn bn quyn ca Unix, tuy nhin hot ng ca

Linux hon ton da trn nguyn tc ca h iu hnh Unix. V vy nu mt ngi nm c Linux, th s nm c UNIX. Nn ch rng gia cc Unix s khc nhau cng khng km g gia Unix v Linux. Nm 1991 Linus Torvalds - sinh vin ca i hc tng hp Helsinki, Phn lan, bt u xem xt Minix, mt phin bn ca Unix, lm ra vi mc ch nghin cu cch to ra mt h iu hnh Unix chy trn my PC vi b vi x l Intel 80386. Ngy 25/8/1991, Linus cho ra version 0.01 v thng bo trn comp.os.minix ca Internet v chng trnh ca mnh. 1/1992, Linus cho ra version 0.12 vi shell v C compiler, Linus t tn HH ca mnh l Linux. 1994, phin bn chnh thc 1.0 c pht hnh. Qu trnh pht trin ca Linux c tng tc bi s gip ca chng trnh GNU, l chng trnh pht trin cc Unix c kh nng chy trn nhiu platform. n hm nay, cui 2001, phin bn mi nht ca Linux kernel l 2.4.2-2, c kh nng iu khin cc my a b vi x l v rt nhiu cc tnh nng khc. Hin nay, Linux l mt h iu hnh ging Unix y v c lp. N c th chy X-Window, TCP/IP, Emacs, Web, th in t v cc phn mm khc. Hu ht cc phn mm min ph v thng mi u c chuyn ln Linux. Rt nhiu cc nh pht trin phn mm bt u chuyn sang vit trn Linux. Ngi ta thc hin cc php o benchmarks trn Linux v thy rng chng thc hin nhanh hn khi thc hin trn cc my trm ca Sun Microystem v Compaq, thm ch nhiu khi cn nhanh hn c trn Windows 98 v WindowNT. Tht kh c th hnh dung c h iu hnh Unix t hon ny pht trin nhanh th no! By gi, sau khi tri qua 1 thi gian rt di pht trin v hon thin bi cng ng th gii, Linux cng ngy cng tr nn mnh m, n nh v tin cy cao, v c chn s dng trong cc c quan chnh ph. Cc nc nh Trung Quc, Nht Bn, c v mt s cc nc chu u u cng c k hach pht trin ring Linux cho t nc ca h. Vit Nam trong nhng nm gn y c nhiu nhm nghin cu v pht trin Linux s dng ting Vit l ngn ng chnh. Trong gio trnh ny Linux c s dng nh mt v d cho vic tm hiu k hn v h iu hnh Unix.

10

Vn phn phi v giy php Linux V l thuyt, mi ngi c th khi to mt h thng Linux bng cch tip cn 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 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.

2.1 Mt s c im chnh ca Linux


a nn Linux ban u c xefdm l bn sao ca Unix v vn hnh trn cc my tnh c nhn c trang b b x l 386, 486 hoc cc b x l cp cao hn. Mc d ban u n c pht trin cho cc cu trc x86 nhng hin nay n c th vn hnh trn cc nn khc nhau nh Alpha, Sparc, Dec, Sun, Power PC v mt s nn 68000

11

nh Atari, Amiga...Ngoi ra Linux cn chy trn mt s my MIPS v cc my tnh c nhn mnh. a chng trnh Mt thi im mt ngi s dng c th thc hin ng thi nhiu tc v. Vi h iu hnh n chng trnh nh MS-DOS mt lnh thc hin s chim ton b thi gian CPU x l, ta ch c th thc hin lnh k khi lnh trc c thc hin xong. Cn trong h iu hnh UNIX ta c th t lnh chy ch nn (background) ng thi khi c th thc hin cc lnh k. Nhiu ngi s dng Nhiu ngi s dng c th s dng my tnh c ci UNIX ti mt thi im. c lp phn cng V h iu hnh UNIX c vit bng ngn ng cp cao cho nn n rt d ci t trn cc cu hnh phn cng khc. Hn na vi cch t chc cc thit b l cc tp tin c bit nn vic thm vo hay loi b cc thit b rt d dng. Dng chung thit b V Unix l mi trng nhiu ngi s dng do cc thit b ngoi vi nh my in,v.v... c th c dng chung bi nhiu ngi s dng. Tnh n nh Linux c tnh n nh cao, y l mt trong nhng u im ca Linux so vi cc h iu hnh khc. Tnh n nh y c ngha l n t b li khi s dng so vi hu ht cc h iu hnh khc. Ngi s dng Linux s khng phi lo lng n chuyn my tnh ca mnh b hin tng treo cng khi ang s dng na. Thng thng l do ta bt buc phi khi ng li h thng l do mt in, nng cp phn cng hoc phn mm. Tnh bo mt Khi lm vic trn Linux ngi dng c th an tm hn v tnh bo mt ca h iu hnh. Linux l h iu hnh a nhim, a ngi dng, iu ny c ngha l c th c nhiu ngi dng vo phin lm vic ca mnh trn cng mt my ti cng mt thi im. Linux cung cp cc mc bo mt khc nhau cho ngi s

12

dng. Mi ngi s dng ch lm vic trn mt khng gian ti nguyn ring, ch c ngi qun tr h thng mi c quyn thay i trong my. Tnh hon chnh Bn thn Linux km theo cc trnh tin ch cn thit. Tt c cc trnh tin ch m ta mong i u c sn hoc mt dng tng ng rt ging. Trn Linux, cc trnh bin dch nh C, C++, , u c chun ho. Tnh tng thch Linux tng thch hu nh hon ton vi hu ht cc chun Unix nh IEEE POSIX.1, UNIX System V v BSD Unix. Trn Linux ta cng c th tm thy cc trnh gi lp DOS v Windows cho php ta chy cc ng dng quen thuc trn DOS v Windows. Linux cng h tr hu ht cc phn cng PC nh ni pha trn. H iu hnh 32-bit y Ngay t u Linux l h iu hnh 32 bit y . iu c ngha l ta khng cn phi lo v gii hn b nh, cc trnh iu khin EMM hay cc b nh m rng, khi s dng Linux. 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. 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 D cu hnh Ta khng cn phi bn tm v gii hn 640K v tin hnh ti u ho b nh mi ln ci t mt trnh iu khin mi. Linux cho ta ton quyn iu khin v cch lm vic ca h thng. Nh vy, qua phn gii thiu ban u ny ta c th thy rng Linux l mt h Unix mnh. N c th c ng dng d dng. Ngoi ra, vic s dng cng cng rng ri ang lm Linux pht trin nhanh. Cc quy trnh thit lp cho php ci t trc tip h thng lm n tr nn ngy cng ph bin i vi nhng ngi s dng.

13

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. Chnh v l hnh thnh mt s nh cung cp Linux trn th gii. Bng di y l tn ca mt s nh cung cp Linux c ting nht v a ch website ca h. ng ch nht l Red Hat Linux (ti M) v Red Flag Linux (ti Trung Quc). Red Hat c coi l lu i v tin cy, cn Red Flag l mt cng ty Linux ca Trung quc, c quan h vi cng ng Linux Vit nam v chng ta c th hc hi mt cch trc tip kinh nghim cho qu trnh a Linux vo Vit nam. Tn cng ty Caldera OpenLinux Corel Linux Debian GNU/Linux Linux Mandrake Red Hat Linux Red Flag Linux Slackware Linux SuSE Linux TurboLinux a ch website www.caldera.com www.corel.com www.debian.com www.mandrake.com www.redhat.com www.redflag-linux.com www.slackware.com www.suse.com www.turbolinux.com www.ubuntu.com

2.2 Cc thnh phn chnh ca h iu hnh Linux


Kernel ( Nhn h iu hnh).

14

Cc b iu khin thit b. Lnh v tin ch. Shell. Windows & Graphic User Interface.

Hnh1.2 Cc thnh phn chnh ca HH Unix Kernel L thnh phn ch yu hay tri tim ca h iu hnh. N nm nhim v iu khin giao dch gia chng trnh ngi s dng vi cc thit b phn cng, xp lch cc tin trnh c th thc hin a nhim, v nhiu tc v khc ca h thng, v mt tp cc trnh n nm trong b nh, mi tin trnh u gi chng. 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 qu trnh. Cc m un chng trnh trong nhn c c quyn trong h thng, bao gm c quyn thng trc b nh trong. Nhn (cn c gi l h li) ca Linux, l mt b cc m un chng trnh c vai tr iu khin cc thnh phn ca my tnh, phn phi cc ti nguyn cho ngi dng (cc qu 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.

15

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 qu trnh hin thi cng tn ti. i vi Linux, s lng qu trnh c th ln ti con s hng nghn. Vi s lng qu 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. 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 s cho ngi dng. Cc b iu khin thit b UNIX th hin cc thit b vt l nh cc tp tin c bit. Mt tp tin c bit s c mt im vo trong th mc v c mt tn tp tin. Do Unix cho php ngi s dng nh ngha tn thit b. Cc thit b c chia lm hai loi: k t v khi. Thit b k t c v ghi dng cc k t (v d cc thit b u cui). Thit b khi c v ghi d liu trong cc khi c kch thc c nh (v d a). Thit b c th i tn nh i tn tp tin. Th mc cha cc b iu khin thit b l /dev. Lnh v tin ch Tin ch h thng l cc chng trnh thc thi cc nhim v qun l chuyn bit. Mt s tin ch h thng c gi ra ch mt ln khi ng v cu hnh 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.

16

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. Cc lnh v tin ch ca Unix rt a dng. Mt lnh UNIX c dng: $lnh [cc chn la] [cc i s] lnh thng l ch nh. Unix phn bit ch ln, nh. V d: $ls -c /dev Ta c th chia lnh thnh cc nhm sau: Cc lnh khi to: exit logout id logname man newgrp psswd set tty uname who Trnh bo mn hnh: echo setcolor Desktop: bc cal date mail mesg spell tnh biu thc s hc my tnh c nhn hin th v t ngy gi - nhn th tn in t cm/cho php hin th thng bo trn mn hnh(bi write/hello) kim tra li chnh t hin th dng k t hay bin t mu nn v ch ca mn hnh thot khi h thng (Bourne-Shell) thot khi h thng C-Shell ch danh ca ngi s dng tn ngi s dng login gip chuyn ngi s dng sang mt nhm mi thay i password ca ngi s dng xc nh cc bin mi trng t cc thng s terminal tn ca h thng (host) cho bit nhng ai ang thm nhp h thng

17

vi write/hello Th mc: cd copy mkdir rmdir pwd Tp tin: cas/more cp find grep ls, l, lf, lc mv sort wc Qun l tin trnh: kill ps sleep Kim sot ch quyn: chgrp chmod chown Kim sot in: cancel lp

son tho vn bn cho php gi dng thng bo n nhng ngi s dng trong h thng. i th mc sao chp 2 th mc to th mc loi b th mc trnh by th mc hin hnh trnh by ni dung tp tin sao chp mt hay nhiu tp tin tm v tr ca tp tin tm v tr ca chui k t trong tp tin trnh by tn v thuc tnh ca cc tp tin trong th mc chuyn/ i tn mt tp tin sp th t ni dung tp tin m s t trong tp tin hy b mt qu trnh trnh by tnh trng ca cc qu trnh ngng hot ng mt thi gian chuyn ch quyn tp tin, th mc t mt nhm sang mt nhm khc thay i quyn s hu ca tp tin hay th mc thay i ngi s hu tp tin hay th mc ngng in in ti liu ra my in

18

lpstat

trng thi ca hng ch in

Shell
L b x l lnh ca ngi s dng hay n n gin ch l mt chng trnh cho php h thng hiu cc lnh ca ngi dng. Chc nng chnh ca Shell l: X l tng tc: Khi Shell c s dng mt cch tng tc, h thng i ngi dng g vo mt lnh ti du nhc lnh. Lnh c th bao gm cc k hiu c bit cho php ta vit tt cc tn file hoc ti nh hng ngun vo v ngun ra. Mi trng Lp trnh: Cc shell cung cp mt b cc lnh c bit (c sn), cho php ta to ra cc chng trnh c tn Shell Script. Cc Shell Script rt hu ch khi s dng cho vic thc thi mt chui cc lnh ring bit ging nh thc thi cc file BATCH trong MS-Dos. Cc script cng c th thc thi cc lnh lp li nhiu ln (trong vng lp) hoc c iu kin ( if-else) ging nh trong nhiu ngn ng lp trnh cao cp khc. Hin nay ngi ta s dng ba loi shell, ty theo loi m c c php khc nhau: Bourne-Shell : l shell c bn nht, nhanh, hiu qu, nhng t lnh. C-Shell: l shell s dng c php ging nh C v n thun tin hn cho ngi s dng tng tc Bourne-Shell, n ging nh Bourne-Shell nhng cung cp thm cc cu trc iu khin, history, b danh. Korn-Shell: Kt hp c Bourne-Shell v C-Shell. Mi ngi dng khi ng nhp h thng th thng c mt chng trnh mc nh khi ng cng, c th nhn bit dng Shell ta ang s dng l g thng qua file /etc/passwd. Tn chng trnh /bin/sh /bin/rsh /bin/jsh /bin/ksh /usr/dt/bin/dtksh Shell ca ta l Bourne - Shell Bourne Shell Bourne Shell Korn-Shell Korn-Shell Desktop, mt phin bn ch dng cho Solaris

19

/bin/rksh /bin/csh

Korn-Shell C Shell

Windows & Graphic User Interface: Giao tip ho v ca s l mt kh nng rt mnh ca h iu hnh Linux, n cho php h iu hnh giao tip thn thin hn vi ngi s dng.

Hnh 1.3 Giao din Gnome ca Linux Tm li: ng v pha ngi s dng ta c th hnh dung h iu hnh Linux nh sau: Ngi s dng - lnh Linux - bin dch Shell - Kernel - My tnh (phn cng).

20

CHNG 2: H THNG FILE TRONG LINUX


1. Cc kiu file c trong Linux
C rt nhiu file khc nhau trong Linux, 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 hay thc thi (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, 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 ... 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

21

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 MS-Windows98. 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).

2. Quy c tn file trong Linux


Mt i tng in hnh trong cc h iu hnh l file. 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. File c th l mt vn bn (trng hp c bit l chng trnh ngun trn C, PASCAL, shell script ...), mt chng trnh ngn ng my, mt tp hp d liu ... H iu hnh qun l file theo tn gi ca file (tn file) v mt s thuc tnh lin quan n file. Trc khi gii thiu mt s ni dung lin quan n tn file v tn th mc, chng ta gii thiu s b v khi nim th mc. 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, hay ni theo mt cch khc, th mc cha cc file. Cc th mc cng c h iu hnh qun l v vy, 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. 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. Tn th mc/file trong Linux c th c nhiu hn mt du chm, v d: This_is.a.VERY_long.filename. Nu trong tn file c du chm "." th xu con ca tn file t du chm cui cng c gi l phn m rng ca tn file (hoc file). V d, tn file trn y c phn m rng l .filename. Chng ta nn lu rng, khng phi k t no cng c ngha. Nu c hai file ch khc nhau k t cui cng, th i vi Linux, l hai file c th trng tn. Bi l, Linux ch ly 32 hay 64 k t u tin trong tn file m thi (ty theo phin

22

bn Linux), phn tn file cn li dnh cho ch ca file, Linux theo di thng tin, nhng thng khng xem cc k t ng sau k t th 33 hay 65 l quan trng i vi n. Xin nhc li lu v phn bit ch hoa v ch thng i vi tn th mc/file, v d hai file FILENAME.tar.gz v filename.tar.gz l hai file khc nhau. 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 . V d, to th mc c tn l My document chng hn, hy nh dng lnh sau: # mkdir "My document" Mt s k t sau khng c s dng trong tn th mc/file: !, *, $, &, # ... Khi s dng chng trnh mc, 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. Bi chnh t cch thc s dng th mc, h thng file c t chc lgic theo dng hnh cy: H thng file c xut pht t mt th mc gc (c 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.

3. Cu trc h thng file ca Linux


H thng file ca linux gm bn thnh phn chnh l Boot block (dng khi ng h thng), Siu khi (Super block), Danh sch inode v Vng d liu.

Boot Block Block 0

Super Block

I-nodes

Data Blocks

Thng khng c s dng v thng cha m np HH (boot the computer). N cha mt on chng trnh s c c vo my khi khi ng h iu hnh Mc d Boot block ch cn thit khi khi ng my nhng tng t vi Boot record ca DOS, tt c cc h thng file UNIX u c mt Boot block (block ny c th trng).

23

Block 1: L Super Block (siu khi), trnh by trng thi ca h thng File (s lng I-node, s Disk Block, im bt u ca danh danh sch ca khi a trng (free disk blocks)). L mt dng bn ghi m t tnh trng ca h thng file. N gm cc thng tin sau: Kch thc h thng file. S khi cn trng trong h thng file. Danh sch khi trng trong h thng file. Ch s ca khi tip theo trong danh sch khi trng. Kch thc ca danh sch inode. S inode cn trng trong h thng file. Danh sch inode cn trng trong h thng file. Ch s inode tip theo trong danh sch inode trng trong h thng file. Trng kho ca danh sch khi v inode trng. C bo hiu super block b thay i. Tng ng bng FAT trong MS-DOS, trnh by bn trong ca mt File c cho bi mt I-node, cha ng cc thng tin m t v lu tr file trn a v mt s thng tin khc nh: ngi ch s hu, quyn truy nhp, thi gian truy nhp file. Mi I-node di 64 byte v miu t chnh xc mt file. Inode l mt bng cha cc thng tin chi tit v mt file. Mi file u c gn vi mt inode qua s hiu inode. Khi file c s dng bi mt tin trnh no th inode s c c vo b nh v qun l bi kernel. Mi inode bao gm cc thng tin sau: Quyn s hu file: Quyn s hu c chia lm hai phn l ngi s hu file v nhm ngi s hu. Ngi s hu thng l ngi to ra file . Nhm ngi s hu file, trong UNIX System V th thng thuc v nhm ca ngi to ra file , cn trong BSD UNIX th file thuc v nhm s hu th mc m file c to ra. Quyn s hu ca ngi s dng v ca nhm i vi mi file c th thay i c (v d lnh chown, chgrp ca shell). Quyn s hu ny cng vi quyn truy nhp ca file s quyt dnh xem ai c th truy nhp ti tp tin v c th truy nhp nh th no. Loi file: Khi nim file ca UNIX c khc so vi file trong DOS, ta c th k ti mt s loi file sau. Kiu file thng: l cc file vn bn , cc file nh phn, file d liu hay l cc file chng trnh...

I-nodes

24

Th mc con: L nhng file to ra cu trc phn cp cho h thng file gm danh sch cc file trong n v c th cha c cc th mc khc. N c mt vai tr quan trng trong vic bin i tn file thnh s hiu inode. Th mc l mt file m ton b d liu l chui cc phn t (entry), mi phn t cha mt s hiu inode v tn file tng ng trong th mc. i vi h UNIX System V ch cho php tn file ti a di 14 k t cn i vi cc h khc chiu di ny c th ln hn. Do th mc l cc file c bit nn tuy cc file c th c d liu trong th mc nh i vi cc file thng nhng kernel ginh quyn ghi th mc m bo tnh chnh xc ca cu trc. Kiu file c bit: y l c ch m UNIX s dng truy nhp ti cc thit b vo ra. Mi thit b vo ra trong UNIX u c coi nh l mt file trong h thng file. Ta c th truy nhp ti thit b vt l thng qua vic truy nhp cc file ny. Ngi ta chia kiu ny lm hai loi da trn cch truy nhp ti chng, l kiu k t (character, v d nh file ng vi cng ni tip) v kiu khi (block, v d nh file ng vi a). Kiu file mc ni(symbolic link): y l file cha ng dn ti mt file khc. C ch ny cho php ta truy nhp ti mt tp tin bng nhiu tn khc nhau. Thc cht ca n l nh ngha mt file vi mt tn khc. Kiu FIFO: l mt hng i (queue) theo kiu first-in-first-out hay cn c gi l named pipe. FIFO c dng trao i d liu gia cc tin trnh. Loi file ny ch c trong h UNIX System V m khng c trong BSD UNIX. Kiu socket: l mt c ch to ra cc u cui (endpoint) cho php cc tin trnh lin h vi nhau. Khi nim socket s c cp ti trong phn sau. Quyn truy nhp file: H thng bo v file theo 3 lp ngi s dng l ch s hu, nhm s hu v cc ngi s dng khc. Mi lp ngi s dng u c 3 quyn c, ghi, v thc hin. Cc quyn ny c thit lp tch bit nhau. Do th mc l mt kiu file c bit nn quyn truy nhp ti th mc c thay i. Quyn c cho php tin trnh c c th mc, quyn ghi cho php to ra hoc xo b cc phn t ca th mc (thng qua lnh creat, mknod, link hay unlink), quyn thc hin cho php tin trnh tm kim tn file trong th mc. Thi gian: Lu tr thi gian m file b thay i gn nht, thi gian file c truy cp gn nht v thi gian inode b thay i gn nht. S file lin kt: Th hin s file c trong cu trc cy th mc. 25

Bng a ch cc khi d liu: Mc d ngi s dng x l file nh mt chui lin tip cc byte nhng trong kernel lu tr d liu trn nhng khi khng lin tip. inode phi xc nh cc khi cha d liu ca file. Bng ny c m ho kh phc tp c th cha mt s lng a ch thay i nhng kch thc bng li khng thay i.

Kch thc file: Lu gi chnh xc kch thc thc ca file.

Ch : Inode hon ton khng lu gi tn file v khng th xc nh ng dn ti file thng qua inode. Khi inode c c vo b nh, mt s trng c thm vo lm cho inode trong b nh ( in-core inode ) khc vi inode trn a. Trng trng thi inode bo hiu: Inode b kho. C mt tin trnh ang i cho n khi inode c m kho. In-core inode khc vi inode trn a do b thay i. File trong b nh thay i so vi file trn a. File ny l mt im kt nt vi mt h thng file khc (mount point). S hiu thit b logic ca h thng file cha file ny. S hiu inode. Con tr ti in-core inode khc. S m : Ghi nhn s file ang c m.

Ghi ch: Danh sch inode ng ngay sau super block. Ngi qun tr h thng s quyt nh kch thc ca danh sch ny khi thit lp cu hnh h thng. Kernel ca h iu hnh tham chiu ti vng ny bng cch nh ch s cho danh sch. Trong danh sch inode tn ti mt inode l inode gc ca h thng file (tng t th mc gc trong h iu hnh DOS). Inode ny l im u tin ca cu trc th mc trong h thng file v lm cho h thng file c th truy nhp bnh thng sau khi thc hin lnh "mount". Khi d liu (data block) Tt c cc file v th mc c lu tr ti y. H thng file trong Unix l mt cu trc phn cp c bo mt cao. File c th c t chc lu tr theo mt vng lin tc hay nhiu vng lin tc. Bt u t sau danh sch inode cho ti khi cui cng ca h thng file. Phn ny ch cha d liu v thng tin qun tr h thng. Mt khi d liu ch c cp pht cho mt v ch mt file duy nht trong h thng file.

26

Hnh 2.1 Inodes

4. Cu trc cy th mc ca h thng file trong Linux


i vi h iu hnh linux, khng c khi nim cc a khc nhau. Sau qu trnh khi ng, ton b cc th mc v tp tin c gn (mount) ln v to thnh mt h thng tp tin thng nht, bt u t gc /. Hnh di l cy th mc ca a s cc Linux. Vi cy th mc trn ta khng th no bit c s lng a cng, cc phn mnh (partition) ca mi a v s tng ng gia cc phn mnh v th mc nh th no. Chng ta c th chia a cng thnh nhiu phn mnh (partition). Mi partition l mt h thng tp tin c lp. Sau , cc h thng tp tin ny c gn (mount) vo h thng tp tin thng nht ca ton h thng. Chng ta hon ton c th gn thm mt a cng mi, format ri mount vo h thng tp tin di tn mt th mc no ti mt im (mount point) no .

27

/-----+ !-------/bin !-------/sbin !-------/usr------/usr/bin ! ! ! !------/usr/sbin !------/usr/local !------/usr/doc

!-------/dev !-------/etc !-------/lib !-------/var-------/var/adm !-------/var/log !-------/var/spool

i vi cc chng trnh chy trn Linux, khng h c khi nim mt th mc nm a no hay partition no. Hnh sau y cho thy s tng quan gia v tr vt l trn a v v tr logic trong cy tp tin.
!-----------------------------------! ! ! ! ! ! ! ! /usr/home /squid /usr / ! ! ! ! ! ! ! ! ! ! < == > | | /usr | /usr/home !-----------------------------------! / | ----------| | /squid

!------------------!

!-----------------------------------! !-----------------------------------!

Th mc /usr/home l th mc con ca /usr trong cy th mc, nhng trn a vt l, y l hai phn mnh (partition) cnh nhau. Mt s th mc quan trng trong Unix/Linux
Th mc / /home Chc nng Bt u cu trc file, gi l th mc gc (root) Cha th mc gc (home) ca ngi dng

28

/bin /usr /usr/bin /usr/sbin /usr/lib /usr/doc /usr/man /sbin /dev /etc

lu ch tt c cc cu lnh chun v cc chng trnh tin ch cha cc file, cu lnh c h thng s dng, th mc ny c chia thnh cc th mc con khc Cha cc cu lnh hng ngi dng v cc chng trnh tin ch Cha cc cu lnh qun tr h thng Cha th vin cho cc ngn ng lp trnh Cha ti liu ca linux Cha cc file ch dn cho cc cu lnh (man) Cha cc file h thng khi ng h thng Cha giao din cho cc thit b nh u cui v my in Cha file cu hnh h thng v cc file h thng khc

5. Cc file chun vo /ra trn Linux


Khi chy chng trnh Linux, n giao tip vi chng ta qua vic hin th thng tin ra mn hnh. Thng tin hin th mn hnh c th l d liu ca chng trnh hay li pht sinh khi c li xy ra. Chng ta giao tip vi chng trnh qua cc k t g vo bn phm. Lung d liu vo t bn phm gi l chun input. Lung d liu ra mn hnh gi l chun output cn lung d liu thng bo li l chun error. Trong Linux cc lung giao tip chun c xem nh cc file d liu v c nh s theo th t, khi cho mt file chy, Shell t ng m 3 file vo/ra chun: Vo chun (stdin) Ra chun (stdout) fd = 0. fd = 1.

Li chun(stderror) fd = 2. Cc s fd ny c gi l file descriptor.

29

Hnh 2.2 Cc chun vo ra V d v cc file ra vo chun: S dng chng trnh cat son tho, chng ta g
$ cat <enter> du lieu vao tu ban phim <enter> dong du lieu thu hai

kt thc lung d liu vo chng ta g <Ctrl + d>. Tt c cc d liu chng ta a vo t bn phm c xem l file input chun. Dng lnh ls chng ta s nhn c d liu ra mn hnh, l file output chun. Mt thng bo li xut hin mn hnh khi chng ta g lnh sai hoc truy xut vo cc tp tin hay th mc khng c quyn chnh l file error chun. V d nh chng ta g lnh listn th s xut hin li invalid command.

Chuyn tip (redirection)


Chuyn tip l hnh thc thay i lung d liu ca cc input, output chun v error. Khi dng chuyn tip, input chun c th ly d liu t file thay v bn phm, output chun hoc error c th chuyn vo tp tin hay ra my in. C 3 loi chuyn hng : Input redirection. Output redirection. Error redirection. Input direction Theo qui c th cc lnh ly d liu t input chun (bn phm). lnh ly d liu t file chng ta dng k hiu < :
$lnh < input

Ta c th hnh dung < ch hng d liu. V d: 30

$cat < abc.txt $cat

hoc

0< abc.txt

Output redirection D liu ra ca cc lnh thng thng c hin th trn mn hnh. d liu ra c a vo file chng ta dng du >
$lnh > tn_file

V d Lit k ni dung th mc v chuyn vo file : $ls l > tm.txt thm vo d liu c sn trn file, chng ta dng du >> thay cho du >
$lnh >> tn_file hoc $cat a.txt >> sum.txt

31

CHNG 3: THAO TC TRN H THNG FILE CA UNIX


1. Qun l quyn truy cp h thng file
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 cp. Cho php thay i cc quyn thm nhp v quyn s hu file v th mc nhm cung cp thm nhp nhiu hn hay t hn. Ngi s dng (ngi dng) Mt ngi s dng c m t bng cc thng tin sau: Tn. [mt khu (nu c]. s nhn dng (uid : user identify number). s ca nhm (gid : group identify number). [ch thch]. th mc tip nhn (HOME directory). [tn chng trnh cho chy lc bt u tn lm vic]. Cc thng tin trn c cha trong 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: duonglk:x:500:0:Le Khanh Duong:/home/duonglk:/bin/bash anhth:x:17:100:Tran Hong Anh:/home/anhth:/bin/bash

Nhm ngi dng Mt nhm ngi s dng l tp hp ca mt s ngi s dng c th dng chung cc file ca nhau. Mt nhm ngi s dng c m t bng cc thng tin sau: tn ca nhm. [mt khu]. s ca nhm (gid : group identify number). [danh sch nhng ngi khch (guest)]. Cc thng tin trn c cha trong file /etc/group. Do Unix l mt h iu hnh a ngi dng v a nhim, nhiu ngi cng c th s dng mt my Unix v mt ngi c th cho chy nhiu chng trnh khc nhau. C hai vn ln c t ra: quyn s hu cc d liu trn a v phn chia ti nguyn h thng nh CPU, RAM ... gia cc tin trnh. Chng ta s bn v s hu cc tp tin v cc quyn truy xut tp tin. 32

Tt c cc tp tin v th mc ca Linux u c ngi s hu v quyn truy nhp. Ta c th i cc tnh cht ny cho php nhiu hay t quyn truy nhp hn i vi mt tp tin hay th mc. Quyn ca tp tin cn cho php xc nh tp tin c l mt chng trnh (application) hay khng (khc vi MSDOS v MSWindows xc nh tnh cht ny qua phn m rng ca tn tp tin). Thuc tnh thm nhp file bao gm cc thuc tnh: c (R), Ghi (W), thc thi (X). Nh vy, mt file c 9 thuc tnh thm nhp ngoi ra c thm thuc tnh ch nh n l file hay th mc.
1 2 3 4 5 6 7 8 9 10

kiu file quyn thm nhp ca USER quyn thm nhp ca GROUP quyn thm nhp ca OTHER

2, 3, 4 : 5, 6, 7 : 8, 9, 10:

C mt s kiu file trong Linux. K t u tin m t kiu file v quyn thm nhp s cho bit file thuc kiu no (ch ci c gi l ch ci biu din).

Ch ci biu din d b c l p s -

Kiu file
Th mc (directory) File kiu khi (block-type special file) File kiu k t (character-type special file) Lin kt tng trng (symbolic link) File ng ng (pipe) Socket File bnh thng (regular file)

Trong mi nhm quyn thm nhp c 3 thuc tnh: (R) c c, (W) c ghi, (X) c thc thi, (-) rng.
- r w -r--r--1 van_a group 166 Oct 4 08:02 thu.txt r w r r - 1 van_a group : : : : : : : ch rng y l File USER c quyn c ghi GROUP c quyn c OTHER c quyn c s lin kt tn ngi s hu tn nhm s dng

33

166 Oct 4 08: 02 Thu.txt

: : :

di file thi gian to file tn file

hiu c chnh xc quyn thm nhp c ngha nh th no i vi h thng my tnh, phi nh rng Linux xem mi th u l file. Nu ci t mt ng dng, n cng s c xem nh mi chng trnh khc, tr mt iu: h thng nhn bit rng mt ng dng l mt chng trnh kh thi, tc l n c th chy c. Mt bc th gi cho m l mt dng file vn bn bnh thng, nhng nu thng bo cho h thng bit l mt chng trnh kh thi, h thng s c chy chng trnh (v tt nhin l li). Quyn c: cho php ngi dng c th xem ni dung ca file vi rt nhiu chng trnh khc nhau, nhng h s khng th thay i, sa cha hoc xa bt k thng tin no trong . Tuy nhin, h c th sao chp file thnh file ca h v sa cha file bn sao. Quyn ghi: l quyn thm nhp tip theo. Ngi s dng vi quyn ghi khi truy nhp vo file c th thm thng tin vo file. Nu c quyn ghi v quyn c i vi mt file, c th son tho li file - quyn c cho php xem ni dung, v quyn ghi cho php thay i ni dung file. Nu ch c quyn ghi, s thm c thng tin vo file, nhng li khng th xem c ni dung ca file. Quyn thc hin hay thc thi: quyn ny cho php ngi dng c th chy c file, nu l mt chng trnh kh thi. Quyn thc hin c lp vi cc quyn truy nhp khc, v th hon ton c th c mt chng trnh vi quyn c v quyn thc hin, nhng khng c quyn ghi. Cng c trng hp mt chng trnh ch c quyn thc hin, c ngha l ngi dng c th chy ng dng, nhng h khng th xem c cch n lm vic hay sao chp n. Quyn thm nhp --r-r-x rwrwx ngha Khng cho php mt quyn truy nhp no Ch c quyn c Quyn c v thc hin (cho chng trnh v shell script) Quyn c v ghi Cho php tt c cc quyn truy nhp (cho chng trnh)

Song song vi cch k hiu miu t bng k t nh trn, quyn thm nhp tp tin cn c th cho di dng ch s h 8. i vi file thu.txt trn c quyn l 644.

34

iu quan trng l phi hiu cch k hiu bng s v n lin quan n vic thay i cc quyn sau ny. Cc s c th nhn tt c cc gi tr t 0 n 7. S u tin miu t quyn ca USER, s th hai cho GROUP v s th ba cho OTHER. Mi s l tng ca cc quyn theo quy tc sau : read permission (QUYN C) Write permission (QUYN GHI) Execute permission (QUYN THC THI) 4 2 1

V vy, mt tp tin vi quyn 751 c ngha l USER c quyn read, write, v execute bng 4+2+1=7, GROUP c quyn read v execute bng 4+1=5, v OTHER c quyn execute bng 1. Nu ta xem k, ta s thy mi s t 0 n 7 u tng ng vi mt t hp duy nht cc quyn thm nhp tp tin. Quyn Ch c Ch ghi Ch thc hin Khng c quyn no Ch s h 8 4 2 1 0 Quyn Ch c v ghi Ch c v thc hin Ch ghi v thc hin c, ghi v thc hin Ch s h 8 6 5 3 7

Nu ta quen vi h nh phn, hy suy ngh bng h thng nh phn. Khi , rwx s nh s nh phn 3 bit. Nu quyn c cho, s nh phn tng ng s bng 1, ngc li, n s bng 0. V d r-x s l s nh phn 101, v theo h thp phn s l 4+0+1, hay 5. --x s tng ng 001, hay 0+0+1 = 1

2. Nhm lnh qun l quyn thm nhp file


Nhm lnh chown, chgrp v chmod c s dng rt ph bin, cho php thay quyn thm nhp ca tp tin hay th mc. Ch c ch s hu v superuser mi c quyn thc hin cc lnh ny.

2.1 Lnh chmod


Cho php thay i quyn thm nhp cc file v th mc. C th chy lnh theo 2 cch: Theo thng s tuyt i
chmod mode tn_file

trong thng s mode l mt s c s 8 (octal) 35

r w x 1 1 1 7

r - x 1 0 1 5

r - 1 0 0 4

$chmod 754 tn_file

Cch thay i tuyt i ny c mt s u im v n l cch nh quyn tuyt i, kt qu cui cng khng ph thuc vo quyn thm nhp trc ca tp tin. ng thi, d ni thay quyn tp tin thnh by-nm-nm th d hn l thay quyn tp tin thnh c-vit-thc hin, c-thc hin, c-thc hin Dng cc k hiu tng trng Ta cng c th thay i quyn truy nhp mt cch tng i v d nh. ch ra nhm quyn no cn thay i, ta c th s dng u (user), g (group), o (other), hay a (all). Tip theo l du + thm quyn v bt quyn. Cui cng l bn thn cc quyn vit tt bi r,w,x. V d nh b sung quyn thc hin cho group v other, ta nhp vo dng lnh:
chmod who : who [operation] [right] filename u c ngha user g group o other a all operation: + thm quyn - bt quyn = gn gi tr khc right: r reading w writing x execution s t suid hoc guid

V d: $ chmod go+x tenfile y l cch thay i tng i v kt qu cui cng ph thuc vo quyn c trc m lnh ny khng lin quan n. Trn quan im bo mt h thng, cch thay i tuyt i dn n t sai st hn. Thay i quyn thm nhp ca mt th mc cng c thc hin ging nh i vi mt tp tin. Ch l nu ta khng c quyn thc hin (execute) i vi mt th mc, ta khng th thay i th mc cd vo th mc . Mi ngi s dng c quyn vit vo th mc u c quyn xa tp tin trong th mc , khng ph thuc vo quyn ca ngi i vi tp tin.

36

V vy, a s cc th mc c quyn drwxr-xr-x. Nh vy ch c ngi s hu ca th mc mi c quyn to v xa tp tin trong th mc. Ngoi ra, th mc cn c mt quyn c bit, l cho php mi ngi u c quyn to tp tin trong th mc, mi ngi u c quyn thay i ni dung tp tin trong th mc, nhng ch c ngi to ra mi c quyn xa tp tin. l sticky bit (bt nh km) cho th mc. Th mc /tmp thng c sticky bit bt ln
drwxrwxrw 7 root root 16384 Oct 21 15:33 tmp

2.2 Lnh chown


thay i quyn s hu i vi mt file, hy s dng lnh chown vi c php nh sau:
chown [ty chn] [ch][.nhm] <file ...>

Lnh ny cho php thay ch s hu 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 (lnh chgrp c trnh by di y). Cc ty chn ca 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 chown tc ng ti (c hoc khng thay i s hu). - - help : a ra trang tr gip v thot. V d, th mc vidu c thng tin v cc quyn truy nhp nh sau:
drwxr-xr-x 11 duonglk root 4000 Oct 21 2008 vidu

Ngi s hu hin ti th mc vidu l ngi dng duonglk. ngi dng anhth l ch s hu th mc trn, hy g lnh: # chown anhth vidu Khi chuyn quyn s hu file cho mt ngi khc, ngi ch c mt quyn s hu file .

2.3 Lnh chgrp


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 37

nhp, mc nh s l thnh vin ca mt nhm c thit lp khi 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. thay i quyn s hu nhm i vi mt hoc nhiu file, hy s dng lnh chgrp vi c php nh sau:
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 ca lnh l (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. V d: Cho php thay i nhm s hu.
$echo Hello > file1 $chmod 700 file1 $ls -l file1 -rwx------ 1 user1 stagiair 6 Apr 5 14:06 file1 $cat file1 Hello $chgrp animator file1 $ls -l file1 -rwx------ 1 user1 animator 6 Apr 5 14:06 file1 $chown user2 file1 $ls -l file1 -rwx------ 1 user2 animator 6 Apr 5 14:06 file1 $cat file1 cat: cannot open file1

38

3. Cc lnh thao tc trn th mc


3.1 Thay i th mc lm vic hin thi vi lnh cd
C php lnh: cd Chuyn n th mc /usr/include : $cd /usr/include Chuyn tr li th mc home: $cd Chuyn n th mc cha: $cd..

3.2 Xem ni dung th mc vi lnh ls


S dng lnh ls v mt s cc ty chn ca n l c th bit c mi thng tin v mt 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 ca lnh: - 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 = 1024 byte). - F : xc nh kiu file (/ = th mc, * = chng trnh kh thi). - m : lit k cc file c ngn cch nhau bi du ",". - 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: 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:
id* sed* sh@ seq* sha256sum* sha1sum* shred* sln* shuf* stat* sort* sulogin@ stty* sum* install* sha384sum*

39

ipmask*

setterm*

sha224sum* sha512sum*

sleep*

split*

su*

sync*

3.3 To th mc vi lnh mkdir


Lnh mkdir to mt th mc, c php: 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. - - verbose : hin th cc thng bo cho mi th mc c to. - - help : a ra trang tr gip v thot. Nu mun to th mc c khong cch gia cc t ta phi s dng du . Nu mun to th mc My Documents ta s dng lnh: mkdir My Documents V d: nu mun to th mc test trong th mc home, hy g lnh sau: mkdir /home/test

3.4 Xa th mc vi lnh rmdir


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 suy ngh cn thn trc khi quyt nh xa mt th mc. Cc ty chn ca lnh: - - 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 rmdir: /: No such file or directory

40

Dng lnh trn s ln lt xa ba th mc test2, test1, test v hin th thng bo trn mn hnh kt qu ca lnh.

3.5 Xem ng dn th mc hin thi vi lnh pwd


C php lnh: ng dn tuyt i. V d: g lnh pwd ti du nhc lnh sau khi ngi dng duonglk va ng nhp th mn hnh hin th nh sau:
# pwd /home/duonglk

pwd

Lnh ny cho bit hin ngi dng ang trong th mc no v hin ra theo dng mt

3.6 Lnh i tn th mc vi lnh mv


C php lnh: mv <tn-c> <tn-mi> Lnh ny cho php i tn mt th mc t tn-c thnh tn-mi. V d: # mv Tongket thongke s i tn th mc Tongket thnh thongke . 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.

4. Cc lnh thao tc trn file


4.1 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. V d: dng lnh touch to file newfile: # touch newfile

4.2 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, 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 > filename 41

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: to file newfile trong th mc /home/vd bng lnh cat.
# cat > /home/vd/newfile This is a example of cat command ^D

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. Khi s dng lnh ny, nu file cha tn ti th s to file mi, nu file tn ti th s xa file c v to file mi. C th s dng lun lnh cat xem ni dung ca file va son tho:
# cat /home/vd/newfile This is a example of cat command

thm ni dung vo phn cui ca file c sn dng lnh: cat >> filename. tng hp hai tp tin thnh mt ta s dng c php lnh sau: $cat file1 file2 > file3

4.3 Xem ni dung cc file ln vi lnh more


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 theo tng trang mn hnh, l lnh more. C php lnh: more [-ty chn] [-s] [+/xumu] [+dng-s] [file ...] Cc ty 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. 42

- 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. V d:
# more -d vdmore total 1424 drwxr-xr-x 6 root root 4096 Oct 31 2000 AfterStep-1.8.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 AnotherLevel drwxr-xr-x 2 root root 4096 Oct 31 2000 ElectricFence drwxr-xr-x 2 root root 4096 Oct 31 2000 GXedit-1.23 drwxr-xr-x 3 root root 4096 Oct 31 2000 HTML drwxr-xr-x 3 root root 4096 Oct 31 2000 ImageMagick drwxr-xr-x 6 root root 4096 Oct 31 2000 LDP drwxr-xr-x 3 root root 4096 Oct 31 2000 ORBit-0.5.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 SVGATextMode drwxr-xr-x 2 root root 4096 Oct 31 2000 SysVinit-2.78 drwxr-xr-x 2 root root 4096 Oct 31 2000 WindowMaker --More--(9%) [ Press space to continue, "q" to quit .]

i vi lnh more, c th s dng mt s cc phm tt thc hin mt s cc thao tc n gin trong khi ang thc hin lnh. Bng di y lit k cc phm tt : Phm tt [Space] n [Enter] h d hoc CTRL+D q hoc CTRL+Q s Chc nng Nhn phm space hin th mn hnh tip theo Hin th n dng tip theo Hin th dng tip theo Hin th danh sch cc phm tt Cun mn hnh (mc nh l 11 dng) Thot khi lnh more B qua n dng (mc nh l 1) 43

f b hoc CTRL+B = :n :p v CTRL+L :f .

B qua k mn hnh tip theo (mc nh l 1) Tr li k mn hnh trc (mc nh l 1) Hin th s dng hin thi xem k file tip theo Tr li k file trc Chy chng trnh son tho vi ti dng hin thi V li mn hnh Hin th tn file hin thi v s dng Lp li lnh trc

4.4 Thm s th t ca cc dng trong file vi lnh nl


Nh bit lnh cat vi tham s -n s nh s th t ca cc dng trong file, tuy nhin Linux cn cho php dng lnh nl thc hin cng vic nh vy. 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: - a : nh s tt c cc dng k c dng trng; - t : ch nh s cc dng khng trng; - 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. 44

- 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. - - help : hin th trang tr gip v thot. V d:
# cat > hello noi dung trong file hello noi dung trong file hello ^D # nl --body-numbering=a --number-format=rz hello 000001 noi dung trong file hello 000002 noi dung trong file hello

Lnh trong v d trn cho thm s th t ca cc cu trong file hello theo dng: nh s th t tt c cc dng, k c dng trng, cc s th t c cn phi v c s 0 u (lu rng c dng trong file c hin ra thnh hai dng trn giy).

4.5 Xem ni dung file vi lnh head


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] [filename]... 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 filename, hoc filename 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.

4.6 Xem ni dung file vi lnh tail


Lnh th hai cho php xem qua ni dung ca file l lnh tail. C php lnh: tail [ty-chn] [file]... 45

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 qu 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.

4.7 S dng lnh file xc nh kiu file


C php lnh file: 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. Mt s tu chn sau y: - 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. Ghi ch: Nh rng kt qu ca lnh file khng phi lc no cng chnh xc tuyt i. 46

4.8 Lnh wc dng m s k t, s t, hay s dng trong mt 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. Khi g lnh wc m khng c mt tham s no, mc nh s son tho trc tip ni dung trn thit b vo chun. Dng CTRL+d kt thc vic son tho, kt qu s hin th ln mn hnh. Bng cch kt hp lnh wc vi mt s lnh khc, c th c nhiu cch bit c nhng thng tin cn thit. Kt hp vi lnh ls xc nh s file c trong mt th mc: # ls | wc -l Kt hp vi lnh cat bit s ti khon c nhn c trn my ca ngi dng:
# cat /etc/passwd | wc -l

4.9 So snh ni dung hai file s dng lnh diff


Vic tm ra s khc nhau gia hai file i khi l rt cn thit. Linux c mt lnh c tc dng nh vy, l lnh diff . C php: 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. 47

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

4.10 Xa file vi lnh rm


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. Lnh rm cho php xa b mt file hoc nhiu file. C php lnh: rm [ty-chn] <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 qu 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). Dng lnh # rm bak/*.h xa mi file vi tn c hai k hiu cui cng l ".h" trong th mc con bak.

4.11 Sao chp tp tin vi lnh cp


Lnh cp c hai dng nh sau: cp [ty-chn] <file-ngun> ... <file-ch> cp [ty-chn] --target-directory=<th-mc> <file-ngun>...

48

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 qu 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. V d:
# cp /home/ftp/vd /home/test/vd1

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.
# cp /home/ftp/vd /home/test/

Trong v d ny, tn file ch s l vd ngha l to mt file mi /home/test/vd. 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.
# cp . newdir cp: .: omitting directory

V d: v vic lnh cp cho php sao nhiu file cng mt lc vo mt th mc.


# cp vd vd1 newdir

49

# pwd /newdir # ls -l total 8 -rw-r--r-- 1 root ftp 15 Nov 14 11:00 vd -rw-r--r-- 1 root ftp 12 Nov 14 11:00 vd1

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 . V d, lnh: # cp * bak thc hin vic sao chp mi file c trong th mc hin thi sang th mc con ca n c tn l bak. Dng lnh: # cp /usr/src/linux-2.2.14/include/linux/*.h bak cho php sao chp mi file vi tn c hai k hiu cui cng l ".h" sang th mc con bak. Chnh v l do ni trn, d trong nhiu lnh tuy khng ni n vic s dng k hiu m t nhm file nhng chng ta c th p dng chng nu iu khng tri vi suy lun thng thng. Do nhng tnh hung nh th l qu phong ph cho nn khng th gii thiu ht trong ti liu. Chng ta ch mt gii php l mi khi s dng mt lnh no , nn th nghim cch thc hiu qu ny.

4.12 i tn file vi lnh mv


C php lnh i tn file: mv <tn-c> <tn-mi> Lnh ny cho php i tn file t tn c thnh tn mi. V d:
# mv vd newfile

Lnh ny s i tn file vd thnh newfile. Trong trng hp file newfile tn ti, ni dung ca file vd s ghi ln ni dung ca file newfile

4.13 Lnh uniq loi b nhng dng khng quan trng trong file
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. 50

- 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. V d: ngi dng s dng lnh cat xem ni dung file vduniq
# cat vduniq Gnome c hai phng php thot ra ngoi. Gnome c hai phng php thot ra ngoi. thot bng cch s dng menu chnh, hy m menu chnh, chn mc Logout y menu. Chn YES/ NO kt thc phin lm vic vi Gnome. Chn YES/ NO kt thc phin lm vic vi Gnome. Nu mun thot bng cch s dng nt Logout trn Panel, trc ht phi thm nt ny vo Panel. Chn YES/ NO kt thc phin lm vic vi Gnome.

Trong file vduniq c hai dng b trng lp v k nhau l dng th 1 v 2.


Gnome c hai phng php thot ra ngoi. Gnome c hai phng php thot ra ngoi.

v dng th 5 v 6
Chn YES/ NO kt thc phin lm vic vi Gnome. Chn YES/ NO kt thc phin lm vic vi Gnome.

Dng lnh uniq loi b dng trng lp:


# uniq vduniq Gnome c hai phng php thot ra ngoi. thot bng cch s dng menu chnh, hy m menu chnh, chn mc Logout y menu. Chn YES/ NO kt thc phin lm vic vi Gnome. Nu mun thot bng cch s dng nt Logout trn Panel, trc ht phi thm nt ny vo Panel. Chn YES/ NO kt thc phin lm vic vi Gnome.

Dng cui cng trong file vduniq c ni dung trng vi dng th 5, nhng sau lnh uniq, n khng b xa v khng k vi dng c ni dung trng lp.

4.14 Sp xp ni dung file vi lnh sort


51

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
# cat vdsort trc ht phi thm nt ny vo Panel. 21434 bn xc nhn l c thc s mun thot hay khng. menu chnh, chn mc Logout y menu. Bn c th s dng mc Logout t menu chnh Gnome c hai phng php thot ra ngoi. hoc nt Logout trn Panel chnh thot ra ngoi. Khi mt hp thoi Logout s xut hin yu cu 57879 La chn YES hoc NO kt thc phin lm vic vi Gnome. N khng cung cp chc nng hot ng no khc ngoi chc nng ny. N khng cung cp chc nng hot ng no khc ngoi chc nng ny. Nu mun thot bng cch s dng nt Logout trn Panel, # sort -f vdsort 21434 57879

52

Bn c th s dng mc Logout t menu chnh bn xc nhn l c thc s mun thot hay khng. Gnome c hai phng php thot ra ngoi. hoc nt Logout trn Panel chnh thot ra ngoi. Khi mt hp thoi Logout s xut hin yu cu La chn YES hoc NO kt thc phin lm vic vi Gnome. menu chnh, chn mc Logout y menu. Nu mun thot bng cch s dng nt Logout trn Panel, N khng cung cp chc nng hot ng no khc ngoi chc nng ny. N khng cung cp chc nng hot ng no khc ngoi chc nng ny.

trc ht phi thm nt ny vo Panel.

C th kt hp lnh sort vi cc lnh khc, v d: # ls -s | sort n Lnh ny cho th t sp xp ca cc file theo kch thc trong th mc hin thi

4.15 Tm theo ni dung file bng lnh grep


Lnh grep cng nh lnh ls l hai lnh rt quan trng trong Linux. Lnh ny c hai tc dng c bn, tc dng th nht l lc u ra ca mt lnh khc. C php l: <lnh> | grep <mu lc> tc dng th hai, l tm dng cha mu nh trong file c ch ra. C php lnh grep: 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. - C [NUM], --context[=NUM] : hin th NUM dng (mc nh l 2 dng) ni dung.

53

- 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. Cng c th s dng cc k hiu biu din thng thng (regular - expression) trong mu lc a ra c nhiu cch tm kim file khc nhau. Ngoi cc ty chn khc nhau, lnh grep cn c hai dng na trn Linux. Hai dng l egrep - s dng vi cc mu lc phc tp, v fgrep - s dng tm nhiu mu lc cng mt lc. Thnh thong mt biu thc n gin khng th xc nh c i tng cn tm, v d, nh ang cn tm cc dng c mt hoc hai mu lc. Nhng lc , lnh egrep t ra rt c ch. egrep - expression grep - c rt nhiu cc k hiu biu din mnh hn grep. Di y l cc k hiu hay dng: K hiu ngha

54

c \c ^ $ . [xy] [^xy] c* c+ c? a|b (a)

- thay th cho k t c - hin th c nh l mt k t bnh thng nu c l mt k t iu khin - bt u mt dng - kt thc dng - thay cho mt k t n - chn mt k t trong tp hp cc k t c a ra - chn mt k t khng thuc tp hp cc k t c a ra - thay cho mt mu c hoc khng cha k t c - thay cho mt mu c cha mt hoc nhiu hn k t c - thay cho mt mu khng c hoc ch c cha duy nht mt k t c - hoc l a hoc l b - a mt biu thc

V d: gi s by gi mun tm cc dng c cha mt hoc nhiu hn k t b trn file passwk vi lnh egrep.
# egrep 'b+' /etc/passwd | head

cho ra cc dng kt qu sau:


root : x : 0 : 0 : root : /root : /bin/bash bin : x : 1 : 1 : bin : /bin : daemon : x : 2 : 2 : daemon : /sbin : sync : x : 5 : 0 : sync : /sbin : /bin/sync shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdown halt : x : 7 : 0 : halt : /sbin : /sbin/halt gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data : nobody : x : 99 : 99 : Nobody : / : xfs : x : 43 : 43 : X Font Server : /etc/X11/fs : /bin/false named : x : 25 : 25 : Named : /var/named : /bin/false

Bt k lc no mun tm cc dng c cha nhiu hn mt mu lc, egrep l lnh tt nht s dng. C nhng lc cn phi tm nhiu mu lc trong mt lc. V d, c mt file cha rt nhiu mu lc v mun s dng mt lnh trong Linux tm cc dng c cha cc mu . Lnh fgrep s lm c iu ny. V d: file thu c ni dung nh sau:
# cat thu /dev/hda4: Linux/i386 ext2 filesystem

55

/dev/hda5: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty thutest toithutest

v file mauloc c ni dung l:


# cat mauloc empty test

By gi mun s dng ni dung file mauloc lm mu lc tm cc cu trong file thu, hy g lnh:


# fgrep -i -f mauloc thu /dev/hda9: empty /dev/hda10: empty thutest toithutest

Mt s v d s dng lnh grep Vi file data file c ni dung sau: # cat datafile
northwest western southwest southern southeast eastern northeast north central NW Charles Main WE Sharon Gray SW Lewis Dalsass SO Suan Chin SE Patricia Hemenway EA TB Savage NE AM Main Jr NO Margot Weber CT Ann Stephens 3.0 5.3 2.7 5.1 4.0 4.4 5.1 4.5 5.7 .98 .97 .8 .95 .7 .84 .94 .89 .94 3 5 2 4 4 5 3 5 5 34 23 18 15 17 20 13 9 13

# grep NW datafile northwest NW northwest NW northeast NE north NO Charles Main Charles Main AM Main Jr. Margot Weber Charles Main 3.0 3.0 5.1 4.5 3.0 .98 .98 .94 .89 .98 3 3 3 5 3 34 34 13 9 34 # grep '^n' datafile

# grep '4$' datafile northwest NW

56

# grep TB Savage datafile grep: Savage: No such file or directory datafile: eastern eastern western southern central north western northwest western southwest southern southeast eastern northeast north central eastern eastern northeast northwest southwest northwest southwest southeast northeast northwest northwest EA WE SO CT NO WE NW WE SW SO SE EA NE NO CT EA EA NE NW SW NW SW SE NE NW NW EA TB Savage 4.4 4.4 5.3 5.1 5.1 .84 .84 .97 .95 .94 5.7 4.5 5.3 3.0 5.3 2.7 5.1 4.4 5.1 4.5 5.7 4.4 4.4 5.1 3.0 2.7 3.0 2.7 5.1 *\1' datafile 3.0 3.0 .98 .98 3 3 34 34 .89 .97 .98 .97 .8 .95 .7 .84 .94 .89 .94 .84 .84 .94 .98 .8 .98 .8 .7 .94 3 2 4 3 5 5 5 5 3 3 2 34 18 17 13 3 5 2 4 4 5 3 9 13 20 20 13 34 18 5 5 4 3 .94 5 5 5 9 23 34 23 18 15 17 20 13 5 20 23 15 13 13 20 # grep 'TB Savage' datafile TB Savage Sharon Gray Suan Chin AM Main Jr. Ann Stephens Margot Weber Sharon Gray Charles Main Sharon Gray Lewis Dalsass Suan Chin TB Savage AM Main Jr. Margot Weber Ann Stephens TB Savage TB Savage AM Main Jr. Charles Main Lewis Dalsass Charles Main Lewis Dalsass AM Main Jr. Charles Main Charles Main # grep '5\..' datafile

northeast NE

# grep '\.5' datafile # grep '^[we]' datafile # grep '[^0-9]' datafile

Patricia Hemenway 4.0

# grep '[A-Z][A-Z] [A-Z]' datafile

# grep 'ss* ' datafile

# grep '[a-z]\{9\}' datafile

Patricia Hemenway 4.0

# grep '\(3\)\.[0-9].*\1 # grep '\<north' datafile

57

northeast north north northwest western southern eastern northeast central

NE NO NO NW WE SO EA NE CT

AM Main Jr. Margot Weber Margot Weber

5.1 4.5 4.5

.94 .89 .89 3.0 5.3 5 .98 .97

3 5 9 3 5 4 5 .94 5 .8 .95 .7 .7 .98 .97 .8 .7 .84 .94 .89 .94 4 4 4 3 5 2 4 5 3 5 5 2 3

13 9

# grep '\<north\>' datafile # grep '\<[a-z].*n\>' datafile Charles Main Sharon Gray Suan Chin TB Savage AM Main Jr. Ann Stephens Lewis Dalsass Suan Chin Patricia Hemenway Patricia Hemenway Charles Main Sharon Gray Lewis Dalsass Patricia Hemenway TB Savage AM Main Jr. Margot Weber Ann Stephens * 5.7 5.1 4.4 34 23 15 20 13 13 18 15 17 17 34 23 18 17 20 13 9 13

.95 .84 5.1 .94 2.7 5.1 4.0 4.0 3.0 5.3 2.7 4.0 4.4 5.1 4.5 5.7

#grep n '^south' datafile 3:southwest SW 4:southern SO 5:southeast SE southeast northwest western southwest southeast eastern northeast north central datafile datebook # grep north lewis # grep -i "$LOGNAME" datafile southwest SW Lewis Dalsass 2.7 .8 2 18 w 'north' datafile NO Margot Weber 4.5 .89 5 9 SE NW WE SW SE EA NE NO CT

# grep i 'pat' datafile # grep v 'Suan Chin' datafile

# grep l 'SE'

(tm file cha xu SE)

# echo $LOGNAME

4.16 Tm theo cc c tnh ca file vi lnh find


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 58

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 ca lnh find: 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. 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: - daystart : o thi gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). - 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). - 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. - help, --help : hin th kt qu ca lnh find v thot. cc test - amin n : tm file c truy nhp n pht trc. - atime n : tm file c truy nhp n*24 gi trc. - cmin n : trng thi ca file c thay i n pht trc y. - ctime n : trng thi ca file c thay i n*24 gi trc y. - empty : file rng v hoc l th mc hoc l file bnh thng. - fstype kiu : file thuc h thng file vi kiu. - gid n : ch s nhm ca file l n. - group nhm : file thuc quyn s hu ca nhm. - links n : file c n lin kt. - mmin n : d liu ca file c sa ln cui vo n pht trc y. - mtime n : d liu ca file c sa vo n*24 gi trc y. - name mu : tm kim file c tn l mu. Trong tn file c th cha c cc k t i din nh du "*", "?"... - type kiu : tm cc file thuc kiu vi kiu nhn cc gi tr: b: c bit theo khi c: c bit theo k t 59

d: th mc p: pipe f: file bnh thng l: lin kt tng trng s: socket - uid n: ch s ngi s hu file l n. - user tn-ngi: file c s hu bi ngi dng tn-ngi. Cc hnh ng: - 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 th cho tn file tng ng, v du '\' ti cui dng lnh, (phi c khong trng gia {} v '\'). Kt thc lnh l du ';' - fprint file : hin th y tn file vo trong file. Nu file khng tn ti th s c to ra, nu tn ti th s b thay th ni dung. - print : hin th y tn file trn thit b ra chun. - 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). V d:
# find -name 'what*' ./usr/bin/whatis ./usr/bin/whatnow ./usr/doc/AfterStep-1.8.0/TODO/1.0to1.5/whatsnew ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-devinfo/what.html ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-devinfo/whatis.html # find . -type f -exec grep -l -i mapping {} \ ; ./OWL/WordMap/msw-to-txt.c ./.elm/aliases.text ./Mail/mark ./News/usenet.alt ./bin/my.new.cmd: Permission denied ./src/fixit.c ./temp/attach.msg

60

4.17 Nn v sao lu cc file 4.17.1 Sao lu cc file (lnh tar)


D liu rt c gi tr, s mt nhiu thi gian v cng sc nu phi to li, thm ch c lc cng khng th no to li c. V vy, Linux a ra cc cch thc ngi dng bo v d liu ca mnh. C bn nguyn nhn c bn khin d liu c th b mt: li phn cng, li phn mm, li do con ngi hoc do thin tai. Sao lu l cch bo v d liu mt cch kinh t nht. Bng cch sao lu d liu, s khng c vn g xy ra nu d liu trn h thng b mt. 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. 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. Vic sao lu ton b c th c thc hin d dng vi lnh tar . C php: 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. Lnh tar c cc la 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. 61

- 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. V d:
# tar --create --file /dev/ftape /usr/src tar: Removing leading / from absolute path names in the archive

Lnh trn to mt file sao lu ca th mc /usr/src trong th mc /dev/ftape, (dng thng bo trn cho bit rng tar s chuyn c du / vo trong file sao lu). Nu vic sao lu khng th thc hin gn vo trong mt bng t, lc hy s dng ty chn -M:
# tar -cMf /dev/fd0H1440 /usr/src tar: Removing leading / from absolute path names in the archive Prepare volume #2 for /dev/fd0H1440 and hit return:

Ch rng phi nh dng a mm trc khi thc hin vic sao lu, c th s dng mt thit b u cui khc thc hin vic nh dng a khi tar yu cu mt a mm mi. Sau khi thc hin vic sao lu, c th kim tra kt qu ca cng vic bng ty chn - - compare:
# tar --compare --verbose -f /dev/ftape usr/src/ usr/src/Linux usr/src/Linux-1.2.10-includes/ ...

s dng kiu sao lu tng dn, hy s dng ty chn -N:


# tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src -verbose

62

tar: Removing leading / from absolute path names in the archive usr/src/ usr/src/Linux-1.2.10-includes/ usr/src/Linux-1.2.10-includes/include/ usr/src/Linux-1.2.10-includes/include/Linux/ usr/src/Linux-1.2.10-includes/include/Linux/modules/ usr/src/Linux-1.2.10-includes/include/asm-generic/ usr/src/Linux-1.2.10-includes/include/asm-i386/ usr/src/Linux-1.2.10-includes/include/asm-mips/ usr/src/Linux-1.2.10-includes/include/asm-alpha/ usr/src/Linux-1.2.10-includes/include/asm-m68k/ usr/src/Linux-1.2.10-includes/include/asm-sparc/ usr/src/patch-1.2.11.gz

Lu rng, tar khng th thng bo c khi cc thng tin trong inode ca mt file b thay i, v d nh thay i quyn truy nhp ca file, hay thay i tn file chng hn. bit c nhng thng tin thay i s cn dng n lnh find v so snh vi trng thi hin thi ca file h thng vi danh sch cc file c sao lu t trc.

4.17.2 Nn d liu vi gzip


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 ny nh sau: 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. 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

63

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: compressed size: kch thc ca file nn uncompressed size: kch thc ca file c gii nn ratio: t l nn (0.0% nu khng bit) uncompressed_name: tn ca file c gii nn Nu kt hp vi ty chn --verbose, cc thng tin sau s c hin th: method: phng thc nn crc: CRC 32-bit cho d liu c gii nn 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. 64

- 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 #, nu -# l -1 hoc --fast th s dng phng thc nn nhanh nht (less compression), nu l -9 hoc -best th s dng phng thc nn chm nht (best compression). Ngm nh mc nn l 6 (y l phng thc nn theo tc nn cao). V d:
# ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1 # gzip /home/test/vd1 # ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1.gz # zcat /home/test/vd1 PID TTY TIME CMD 973 pts/0 00:00:00 bash 996 pts/0 00:00:00 man 1008 pts/0 00:00:00 sh 1010 pts/0 00:00:00 less 1142 pts/0 00:00:00 cat 1152 pts/0 00:00:00 cat 1181 pts/0 00:00:00 man 1183 pts/0 00:00:00 sh 1185 pts/0 00:00:00 less

4.17.3 Nn, gii nn v xem file vi cc lnh compress, uncompress, zcat


C php cc lnh nh sau: compress [ty-chn] [<file>] uncompress [ty-chn] [<file>] zcat [ty-chn] [<file>] 65

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.

4.18 Lin kt (link) tp tin


Trong Linux c 2 hnh thc lin kt hon ton khc nhau, l hard link v soft link (hay symbolic link). Hard link Hard link l mt lin kt trong cng mt h thng file vi 2 im i-node cng tr n mt ni dung vt l, cho php to mt tn mi cho tp tin, cc tn ny c vai tr hon ton nh nhau v tp tin ch b hon ton xa b khi hard link cui cng ca n b xa. Mt vn l quyn truy nhp file v s hu file l nh th no. Nu Bill l ngi ch file v l ngi duy nht c quyn ghi file, th file lin kt c th c t quyn truy nhp bi Bill. Xo mt file lin kt khng xo mt file vy l tng ng, n ch b xo khi khng cn mt lin kt no na. Lnh ls l cho php hin th s hard link n tp tin. V d, ta to mt lin kt ca file /usr/bill/testfile bng lnh sau ln:
# ln /usr/bill/testfile /usr/tim/testfile

Symbolic link Symbolic link l mt kiu khc ca lin kt m khng dng n i-node cho lin kt, c chc nng ging nh shortcut ca MS Windows, khi xa symbolic link ta ch xa symbolic link 66

v tp tin c gi nguyn. Ta s dng cc lin kt ny khi to cc chng trnh iu khin thit b ngoi vi nh modem /dev/modem hay /dev/cual, ta to mt lin kt biu tng ca n.
$ ls $ ln $ ls -i -s -i bigfile bigfile bigfile anotherfile anotherfile 8358 anotherfile 6253 bigfile

6253 bigfile

Nh ta thy, cc i-node ca cc file l khc nhau. Khi lit k file cc lin kt biu tng c lit k bng hnh mi tn.
lrwxrwxrwx 1 root root 6 Sep 16:35 anotherfile->bigfile

Quyn ca file lin kt biu tng lun c t l lrwxrwxrwx. Quyn truy nhp file lin kt biu tng c xc nh bi quyn truy nhp v s hu ca file m n lin kt n.

4.19 Xem thuc tnh v mt file


Lnh stat cho php xem tt c cc thuc tnh v mt file no : C php lnh: stat filename

4.20 Lnh ct file split


Lnh ny gip chng ta chia nh mt tp tin ra theo kch thc nh sn. v d n gin khi bn c mt b film c ui *.mpg di 1GB, c th dng lnh ny chia nh file film ra thnh 2 phn mi phn khong 500MB nh sau:
$split -b 500m phim.mpg phim

n s chia file phim thanh 2 file l (phimaa v phimab) mi file c dung lng l 500MB, ty chn -b xc nh dung lng tp tin to ra (c tnh theo byete), sau -b l mt s v mt ch ci: k (kch thc tnh theo KB) hoc m (tnh theo MB). Nu khng a ra thng tin ny th mc nh n s l 1MB. Mun ghp file ta s dng lnh sau:
$cat phim* > phim.mpg

4.21 Lnh mount v unmount 4.21.1 Lnh mount


C php: mount a [-t fstype] [-o option] device directory 67

Lnh mount c s dng gn cc thit b vi h thng, cc ty chn thng thng thng c trong file /etc/fstab. V d: /dev/hda6 /intranet ext2 defaults 1 2, nu dng trn c tm thy trong /etc/fstab, c th gn h thng file c lu trong phn vng /dev/hda6 nh sau:
# mount /intranet

Cng mt h thng file, cu lnh sau y l tng ng:


# mount t ext2 /dev/hda6 /intranet

Ty chn -t c s dng xc nh kiu file h thng. gn tt c cc h thng file c trong /etc/fstab s dng ty chn -a, v d:
# mount a t ext2

thng thng ngi s dng ty chn -o l ro (ch c) hoc rw (c ghi), v d:


# mount t ext2 o ro /dev/hda6 /secured

4.21.1 Lnh umount


C php : umount a [-t fstype] Lnh umount ngc li vi lnh mount. V d:
#umount /cdrom

5. Cc lnh v tin ch h thng


5.1 Cc lnh ng nhp v thot khi h thng ng nhp
Sau khi h thng Linux (ly Red Hat 6.2 lm v d) khi ng xong, trn mn hnh xut hin nhng dng sau:
Ret Hat Linux release 6.2 (Zoot) Kernel 2.2.14-5.0 on an i686 May1 login:

Chng ta c th thay i cc dng hin th nh trnh by trn y bng cch sa i file /etc/rc.d/rc.local nh sau: Thay on chng trnh sau:
echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue

thnh
echo "" > /etc/issue

68

echo "Thng bo mun hin th" >> /etc/issue

V d: sa thnh:
echo "" > /etc/issue echo "This is my computer" >> /etc/issue

th trn mn hnh ng nhp s c dng sau:


This is my computer hostname login:

Dng th nht v dng th hai cho bit loi phin bn Linux, phin bn ca nhn v kin trc phn cng c trn my, dng th ba l du nhc ng nhp ngi dng thc hin vic ng nhp. Ch l cc dng trn y c th thay i cht t ty thuc vo phin bn Linux. Ti du nhc ng nhp, hy nhp tn ngi dng (cn gi l tn ng nhp): y l tn k hiu cung cp cho Linux nhm nhn din mt ngi dng c th. Tn ng nhp ng vi mi ngi dng trn h thng l duy nht, km theo mt mt khu ng nhp.
May1 login: root Password:

Khi nhp xong tn ng nhp, h thng s hin ra thng bo hi mt khu v di chuyn con tr xung dng tip theo ngi dng nhp mt khu. Mt khu khi c nhp s khng hin th trn mn hnh v chnh iu gip trnh khi s "nhm ng" ca ngi khc. Nu nhp sai tn ng nhp hoc mt khu, h thng s a ra mt thng bo li:
May1 login: root Password: Login incorrect My1 login:

Nu ng nhp thnh cng, ngi dng s nhn thy mt s thng tin v h thng, mt vi tin tc cho ngi dng... Lc , du nhc shell xut hin ngi dng bt u phin lm vic ca mnh.
May1 login: root Password: Last login: Fri Oct 27 14:16:09 on tty2 Root[may1 /root]#

Dy k t trong dng cui cng chnh l du nhc shell. Trong du nhc ny, root l tn ngi dng ng nhp, may1 l tn my v /root tn th mc hin thi (v y l ngi dng root). Khi du nhc shell xut hin trn mn hnh th iu c ngha l h iu hnh sn sng tip nhn mt yu cu mi ca ngi dng.

69

Du nhc shell c th khc vi trnh by trn y, nhng c th hiu n l chui k t bt u mt dng c cha tr chut v lun xut hin mi khi h iu hnh hon thnh mt cng vic no .

Thoi khi h thng


kt thc phin lm vic ngi dng cn thc hin th tc 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. Cch n gin nht m bo thot khi h thng ng n l nhn t hp phm CTRL+ALT+DEL. Khi , trn mn hnh s hin th mt s thng bo ca h thng v cui cng l thng bo thot trc khi tt my. Cn ch l: Nu ang lm vic trong mi trng X Window System, hy nhn t hp phm CTRL+ALT+BACKSPACE trc ri sau hy nhn CTRL+ALT+DEL. Hoc s 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 ca lnh ny nh sau: - 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. Trong ty chn ny khng th a ra tham s thi gian nhng c th a ra thng bo gii thch trn dng lnh gi cho tt c cc ngi dng. - t s-giy : qui nh init(8) ch khong thi gian s-giy tm dng gia qu trnh gi cnh bo v tn hiu kill, trc khi chuyn sang mt mc chy khc. v hai tham s v tr cn li: time : t thi im shutdown. Tham s time c hai dng. Dng tuyt i l gg:pp (gg: gi trong ngy, pp: pht) th h thng s shutdown khi ng h my trng vi gi tr tham s. Dng tng i l +<s> l hn sau thi khong <s> pht s shutdown; coi shutdown lp tc tng ng vi +0. cnh-bo : thng bo gi n tt c ngi dng trn h thng. Khi lnh thc hin tt c cc my ngi dng u nhn c cnh bo. V d: khi ngi dng g lnh: shutdown +1 Sau mot phut nua he thong se shutdown!

70

trn mn hnh ca tt c ngi dng xut hin thng bo "Sau mot phut nua he thong se shutdown! " v sau mt pht th h thng shutdown thc s. Cch th ba l s dng lnh halt vi c php nh sau: halt [ty-chn] Lnh ny tt hn my. Cc tu chn ca lnh halt: - w : khng thc s tt my nhng vn ghi cc thng tin ln file /var/log/wtmp (y l file lu tr danh sch cc ngi dng ng nhp thnh cng vo h thng). - d : khng ghi thng tin ln file /var/log/wtmp. Ty chn -n c ngha tng t 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. Chng ta cn nh rng, nu thot khi h thng khng ng cch th dn n hu qu l mt s file hay ton b h thng file c th b h hng. C th s dng lnh exit tr v du nhc ng nhp hoc kt thc phin lm vic bng lnh logout.

Khi ng li h thng
Ngoi vic thot khi h thng nh cc cch thc trn y (n t hp ba phm Ctrl+Alt+Del, dng lnh shutdown hoc lnh halt), khi cn thit (chng hn, gp phi tnh hung mt trnh ng dng chy qun) c th khi ng li h thng nh lnh reboot. C php lnh reboot: 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 nh sau l -w, -d, -n, -f, -i c ngha tng t nh trong lnh halt.

5.2 Lnh thay i mt khu passwd


Mt khu l vn rt quan trng trong cc h thng a ngi dng v m bo tnh bo mt ti a, cn thit phi ch ti vic thay i mt khu. Thm ch trong trng hp h thng ch c mt ngi s dng th vic thay i mt khu vn l rt cn thit. Mt khu l mt xu k t i km vi tn ngi dng m bo cho php mt ngi vo lm vic trong h thng vi quyn hn c quy nh. Trong qu trnh ng nhp, ngi dng phi g ng tn v mt khu, trong g mt khu l cng vic bt buc phi thc hin. Tn ngi dng c th c cng khai song mt khu th tuyt i phi c m bo b mt. 71

Vic ng k tn v mt khu ca siu ngi dng c tin hnh trong qu trnh khi to h iu hnh Linux. Vic ng k tn v mt khu ca mt ngi dng thng thng c tin hnh khi mt ngi dng mi ng k tham gia s dng h thng. Thng thng siu ngi dng cung cp tn v mt khu cho ngi dng mi (c th do ngi dng ngh) v dng lnh adduser (hoc lnh useradd) ng k tn v mt khu vi h thng. Sau , ngi dng mi nht thit cn thay i mt khu bo m vic gi b mt c nhn tuyt i. Lnh passwd cho php thay i mt khu ng vi tn ng nhp ngi dng. C php lnh passwd: passwd [ty-chn] [tn-ngi-dng] vi cc ty chn nh sau: - k : thay i mt khu ngi dng. Lnh i hi phi xc nhn quyn bng vic g mt khu ang dng trc khi thay i mt khu. Cho php ngi dng thay i mt khu ca mnh c lp vi siu ngi dng. - f : t mt khu mi cho ngi dng song khng cn tin hnh vic kim tra mt khu ang dng. Ch siu ngi dng mi c quyn s dng tham s ny. - l : kha mt ti khon ngi dng. Vic kha ti khon thc cht l vic dch bn m ha mt khu thnh mt xu k t v ngha bt u bi k hiu "!". Ch siu ngi dng mi c quyn s dng tham s ny. - 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 (tho b kha) mt ti khon (i ngu vi tham s -l). Ch siu ngi dng mi c quyn s dng tham s ny. - d : xa b mt khu ca ngi dng. Ch siu ngi dng mi c quyn s dng tham s ny. - S : hin th thng tin ngn gn v trng thi mt khu ca ngi dng c a ra. Ch siu ngi dng mi c quyn s dng tham s ny. Nu tn-ngi-dng khng c trong lnh th ngm nh l chnh ngi dng g lnh ny. V d khi ngi dng user1 g lnh: # passwd user1 h thng thng bo:
Changing password for user user1 New UNIX password:

ngi dng nhp mt khu mi ca mnh vo. Sau khi ngi dng g xong mt khu mi, h thng cho ra thng bo:
BAD PASSWORD: it is derived from your password entry Retype new UNIX password:

72

ngi dng khng nh mt ln na mt khu va g dng trn (nh phi g li ng ht nh ln trc). Khng nn qu phn vn v thng bo dng pha trn v hu ht khi g mt khu mi lun gp nhng thng bo kiu i loi nh vy, chng hn nh:
BAD PASSWORD: it is too simplistic/systematic

V sau khi chng ta khng nh li mt khu mi, h thng cho ra thng bo:
Passwd: all authentication tokens updated successfully.

cho bit vic thay i mt khu thnh cng v du nhc shell li hin ra. Khi siu ngi dng g lnh:
# passwd -S root

s hin ra thng bo
Changing password for user root Password set, MD5 encryption

cho bit thut ton m ha mt khu m Linux s dng l mt thut ton hm bm c tn l MD5. Ch : C mt li khuyn i vi ngi dng l nn chn mt khu khng qu n gin qu (nhm trnh ngi khc d d tm ra) hoc khng qu phc tp (trnh kh khn cho chnh ngi dng khi phi ghi nh v g mt khu). c bit khng nn s dng h tn, ngy sinh, s in thoi ... ca bn thn hoc ngi thn lm mt khu v y l mt trong nhng trng hp mt khu n gin nht. Nu thng bo mt khu qu n gin c lp i lp li mt vi ln v khng c thng bo mt khu mi thnh cng quay v du nhc shell th nn g li lnh v chn mt mt khu mi phc tp hn i cht. Lnh xem, thit t ngy, gi hin ti v xem lch trn h thng

5.4 Lnh date xem, thit t ngy, gi


Lnh date cho php c th xem hoc thit t li ngy gi trn h thng. C php ca lnh gm hai dng, dng xem thng tin v ngy, gi v dng thit t li ngy gi cho h thng: date [ty-chn] [+nh-dng] date [ty-chn] [MMDDhhmm[ [CC[YY] ]-ss]] Cc ty-chn nh sau: - d, --date=xu-vn-bn : hin th thi gian di dng xu-vn-bn, m khng ly "thi gian hin ti ca h thng nh theo ngm nh; xu-vn-bn c t trong hai du nhy n hoc hai du nhy kp. 73

- f, --file=file-vn-bn : ging nh mt tham s --date nhng ng vi nhiu ngy cn xem: mi dng ca file-vn-bn c vai tr nh mt xu-vn-bn trong trng hp tham s -date. - I, --iso-8601[=m-t] : hin th ngy gi theo chun ISO-8601 (v d: 2000-11-8). - I tng ng vi tham s --iso-8601='date'. Vi --iso-8601: nu m-t l 'date' (hoc khng c) th hin th ngy, nu m-t l 'hours' hin th ngy+gi, nu m-t l 'minutes': ngy+gi+pht; nu m-t l 'seconds': ngy + gi + pht + giy. - r, --reference= file : hin th thi gian sa i file ln gn y nht. - R, --rfc-822 : hin th ngy theo RFC-822 (v d: Wed, 8 Nov 2000 09:21:46 -0500). - s, --set=xu-vn-bn : thit t li thi gian theo kiu xu-vn-bn. - u, --utc, --universal : hin th hoc thit t thi gian theo UTC (v d: Wed Nov 8 14:29:12 UTC 2000). - - help : hin th thng tin tr gip v thot. Trong dng lnh date cho xem thng tin ngy, gi th tham s nh-dng iu khin cch hin th thng tin kt qu. nh-dng l dy c t mt n nhiu cp gm hai k t, trong mi cp k t u tin l % cn k t th hai m t nh dng. Do s lng nh dng l rt nhiu v vy chng ta ch xem xt mt s nh dng in hnh ( xem y cc nh dng, s dng lnh man date). Di y l mt s nh dng in hnh: %% : Hin ra chnh k t %. %a : Hin ra thng tin tn ngy trong tun vit tt theo ngn ng bn a. %A : Hin ra thng tin tn ngy trong tun vit y theo ngn ng bn a. %b : Hin ra thng tin tn thng vit tt theo ngn ng bn a. %B : Hin ra thng tin tn thng vit y theo ngn ng bn a. Trong dng lnh date cho php thit t li ngy gi cho h thng th tham s [MMDDhhmm[ [CC[YY] [.ss]] m t ngy, gi mi cn thit t, trong : MM: hai s ch thng, DD: hai s ch ngy trong thng, hh: hai s ch gi trong ngy, mm: hai s ch pht, CC: hai s ch th k, YY: hai s ch nm trong th k.

74

Cc dng ngay di y trnh by mt s v d s dng lnh date, mi v d c cho tng ng vi mt cp hai dng, trong dng trn m t lnh c g cn dng di l thng bo ca Linux.
# date Wed Jan 3 23:58:50 ICT 2001 # date -d='01/01/2000' Sat Jan 1 00:00:00 ICT 2000 # date -iso-8601='seconds' 2000-12-01T00:36:41-0500 # date -d='01/01/2001' Mon Jan 1 00:00:00 ICT 2001 # date 010323502001.50 Wed Jan 3 23:50:50 ICT 2001 # date +%a%A Wed Wednesday # date +%a%A%b%B Wed Wednesday Jan January # date +%D%%%j 01/05/01%005

5.5 Lnh xem lch cal


Lnh cal cho php xem lch trn h thng. C php nh sau: cal [ty-chn] [<thng> [<nm>]] nu khng c tham s, lch ca thng hin thi s c hin th. Cc ty chn l: - m : chn ngy Th hai l ngy u tin trong tun (mc nh l ngy Ch nht). - j : hin th s ngy trong thng di dng s ngy trong nm (v d: ngy 1/11/2000 s c hin th di dng l ngy th 306 trong nm 2000, s ngy bt u c tnh t ngy 1/1). - y : hin th lch ca nm hin thi. V d: # cal 1 2001
January 2001 Su 7 14 21 28 sMo 1 8 15 22 29 Tu 2 9 16 23 30 We 3 10 17 24 31 Th 4 11 18 25 Fr 5 12 19 26 Sa 6 13 20 27

75

Khi nhp dng lnh trn, trn mn hnh s hin th lch ca thng 1 nm 2001, mc nh chn ngy ch nht l ngy bt u ca tun. Di y l v d hin th s ngy trong thng 3 di dng s ngy trong nm 2001.
# cal -j 3 2001 March 2001 Su 63 70 77 84 Mo 64 71 78 85 Tu 65 72 79 86 We 66 73 80 87 Th 60 67 74 81 88 Fr 61 68 75 82 89 Sa 62 69 76 83 90

S dng lnh calendar hin th mt s s kin ni bt trn th gii trong ngy hin ti v ngy k tip: C php: calendar <ty chn> Xem cc s kin trong ngy 02 v 03 thng 09 :
#calendar -t 02.09

5.6 Xem thng tin h thng uname


Lnh uname cho php xem thng tin h thng vi c php l: uname [ty-chn] Nu khng c tu chn th hin tn h iu hnh. Cc ty chn l: - a, --all : hin tt c cc thng tin. - m, --machine : kiu kin trc ca b x l (i386, i486, i586, i686...). - n, --nodename : hin tn ca my. - r, --release : hin nhn ca h iu hnh. - s, --sysname : hin tn h iu hnh. - p, --processor : hin kiu b x l ca my ch. V d: # uname -a th mn hnh s hin ra nh sau:
Linux linuxsrv.linuxvn.net 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown

Thng tin hin ra c tt c 6 trng l: Tn h iu hnh: Linux Tn my: linuxsrv.linuxvn.net Tn nhn ca h iu hnh: 2.2.14-5.0 Ngy sn xut: #1 Tue Mar 7 21:07:39 EST 2000 Kiu kin trc b x l: i686 76

Kiu b x l ca my ch: unknown V d : nu g lnh: # uname -spr th mn hnh s hin ra nh sau:


Linux 2.2.14-5.0 unknown

l tn h iu hnh, tn nhn v kiu b x l ca my ch.

5.7 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 trn y (PS1=') 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. Bng di y gii thiu mt s cp k t iu khin c th c s dng khi mun thay i du nhc lnh: Cp k t iu khin \! \# \$ \\ \d \h \n \s \t \u \W Hin th th t ca lnh trong lch s Hin th th t ca lnh Hin th du -la ($). i vi siu ngi dng (super user), th hin th du s hiu (#) 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 (v d th mc hin thi 77 ngha

l /mnt/hda1 th tn thc s ca n l /hda1) \w Hin th tn y ca th mc hin thi (v d /mnt/hda1)

V d: hin thi du nhc shell c dng: root[may1 /hda1]# Sau khi g lnh: root@may1 /hda1]# PS1='[\h@\u \w : \d]\$' th du nhc shell c thay i l: [may1@root /mnt/hda1 : Fri Oct 27 ]# ngoi vic i th t gia tn ngi dng v my cn cho chng ta bit thm v ngy h thng qun l v tn y ca th mc hin thi. Linux cung cp cch thc hon ton tng t nh i vi bin PS1 thay i gi tr bin h thng PS2 tng ng vi du nhc cp hai.

78

5.8 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: bc [ty-chn] [file...] vi cc tu chn sau y: - l, --mathlib: thc hin php tnh theo chun th vin ton hc (v d: 5/5=1.00000000000000000000). - w, --warn : khi thc hin php tnh khng tun theo chun POSIX (POSIX l mt chun trong Linux) th mt cnh bo xut hin. - s, --standard : thc hin php tnh chnh xc theo chun ca ngn ng POSIX bc. - q, --quiet : khng hin ra li gii thiu v phn mm GNU khi dng bc. Tham s file l tn file cha chng trnh vit trn ngn ng bc, khi lnh bc thc hin s t ng chy cc file chng trnh ny (Nu c nhiu tham s th c ngha s chy nhiu chng trnh lin tip nhau). V d: T du nhc lnh g: # bc s xut hin du nhc, sau ta g biu thc vo: 79

(4+5)*(12-10) 18 1000000000000*1000000000000 1000000000000000000000000

n nh s ch s thp phn dng lnh scale = n


scale=3 1/6 .166

V d: Lp trnh trong bc:


define giaithua(n) { if (n<=1) return (1); else return (gt(n-1)*n); } gt(5) 120

chuyn sang cc c s khc nhau dng lnh ibase v obase ibase=c s obase=c s
ibase=16 FF 255 obase=2 FF 11111111 ibase obase

nh dng c s u vo nh dng c s u ra

ibase v obase ngm nh l c s 10.

kt thc bc g CTRL + D. Ch : Ngn ng lp trnh tnh ton bc l mt ngn ng rt mnh c ni dung ht sc phong ph cho nn trong khun kh ca ti liu ny khng th m t ht cc ni dung ca ngn ng c. Chng ta cn s dng lnh man bc nhn c thng tin y v lnh bc v ngn ng tnh ton bc. y trnh by s b mt s yu t c bn nht ca ngn ng (bt l vit tt ca biu thc, b l vit tt ca bin). 80

Cc php tnh: - bt: ly i; ++ b, --b, b ++, b --: php ton tng, gim b; cc php ton hai ngi cng +, tr -, nhn *, chia /, ly phn d %, ly tha nguyn bc ^; gn =; gn sau khi thao tc <thao tc>=; cc php ton so snh <, <=, >, >=, bng ==, khc != ... Php so snh cho 1 nu ng, cho 0 nu sai. Bn bin chun l scale s lng ch s phn thp phn, last gi tr tnh ton cui cng; ibase c s h m i vi input v obase l c s h m vi output (ngm nh hai bin ny c gi tr 10). Cc hm chun sin s (bt); cosin c (bt); arctg a (bt); lgarit t nhin l (bt); m c s t nhin e (bt); hm Bessel bc nguyn n ca bt l j (n, bt).

5.9 Tin ch mc
Tin ch mc trong Linux cng ging nh NC Command ca MS-DOS. Ngi s dng h iu hnh MS-DOS u bit tnh nng tin ch Norton Commander (NC) rt mnh trong qun l, iu khin cc thao tc v file, th mc, a cng nh l mi trng trc quan trong ch vn bn (text). D trong h iu hnh Windows sau ny c s h tr ca tin ch Explorer nhng khng v th m vai tr ca NC gim i: Nhiu ngi dng vn thch dng NC trong cc thao tc vi file v th mc. Linux cng c mt tin ch mang tn Midnight Commander (vit tt l MC) c chc nng v giao din gn ging vi NC ca MSDOS v s dng MC trong Linux tng t nh s dng NC trong MS-DOS.

Khi ng MC
Lnh khi ng MC: # mc [Ty-chn] C mt s tu chn khi dng tin ch ny theo mt s dng thng dng sau: -a -b -c -d -P Khng s dng cc k t ho v cc ng thng khung. Khi ng trong ch mn hnh en trng. Khi ng trong ch mn hnh mu. Khng h tr chut. Vi tham s ny, Midnight Commander s t ng chuyn th mc hin hnh ti th mc ang lm vic. Nh vy, sau khi kt thc, th mc hin hnh s l th mc cui cng thao tc. -v file -V S dng chc nng View ca MC xem ni dung ca file c ch ra. Cho bit phin bn chng trnh ang s dng.

81

Nu ch ra ng dn (path), ng dn u tin l th mc c hin th trong panel chn (selected panel), ng dn th hai c hin th panel cn li.

Giao din ca MC

Giao din ca MC c chia ra lm bn phn. Phn ln mn hnh l khng gian hin th ca hai panel. Panel l mt khung ca s hin th cc file th mc cng cc thuc tnh ca n hoc mt s ni dung khc. Theo mc nh, dng th hai t di ln s l dng lnh cn dng di cng hin th cc phm chc nng. Dng u tin trn nh mn hnh l thc n ngang (menu bar) ca MC. Thanh thc n ny c th khng xut hin nhng nu kch hot bng c hai chut ti dng u tin hoc nhn phm <F9> th n s hin ra v c kch hot. Midnight Commander cho php hin th cng mt lc c hai panel. Mt trong hai panel l panel hin hnh (panel chn). Thanh sng chn nm trn panel hin hnh. Hu ht cc thao tc u din ra trn Panel ny. Mt s cc thao tc khc v file nh Rename hay Copy s mc nh s dng th mc Panel cn li lm th mc ch. Tuy nhin ta vn c th sa c th mc ny trc khi thao tc v cc thao tc ny u tin bao gi cng yu cu nhp ng dn. Trn panel s hin th hu ht cc file v th mc con ca th mc hin hnh. Midnight Commander c c ch hin th cc kiu file khc nhau bng cc k hiu v mu sc khc nhau, v d nh cc file biu tng lin kt s c k hiu @ u, cc file thit b s c mu tm, cc file ng ng c mu en, cc th mc c k hiu / u, cc th mc lin kt c k hiu ~...

82

Cho php thi hnh mt lnh h thng t MC bng cch g chng ln mn hnh. Tt c nhng g c g vo u c hin th dng lnh pha di tr mt s k t iu khin v khi nhn Enter, Midnight Commander s thi hnh lnh g vo.

Dng chut trong MC


Midnight Commander s h tr chut trong trng hp khng gi vi tham s -d. Khi kch chut vo mt file trn Panel, file s c chn, c ngha l thanh sng chn s nm ti v tr file v panel cha file s tr thnh panel hin hnh. Cn nu kch chut phi vo mt file, file s c nh du hoc xo du tu thuc vo trng thi kch trc . Nu kch i chut ti mt file, file s c thi hnh nu l file thi hnh c (executable program) hoc nu c mt chng trnh c trng cho ring phn m rng th chng trnh c trng ny s c thc hin. Ngi dng cng c th thc hin cc lnh ca cc phm chc nng bng cch nhy chut ln phm chc nng . Nu kch chut ti dng u tin trn khung panel, ton b panel s b ko ln. Tng t kch chut ti dng cui cng trn khung panel, ton b panel s b ko xung. C th b qua cc thao tc chut ca MC v s dng cc thao tc chut chun bng cch gi phm <Shift>

Cc thao tc bn phm
Mt s thao tc ca Midnight Commander cho php s dng nhanh bng cch g cc phm tt (hot key). tng thch vi mt s h thng khc, trong cc bng di y v Midnight Commander, vit tt phm CTRL l C, phm ALT l M (Meta), phm SHIFT l S. Cc k hiu t hp phm c dng nh sau: C-<chr> C<chr1><char2> M-<chr> C ngha l gi phm CTRL trong khi g phm <char>. V d C -f c ngha l gi CTRL v nhn <f>. C ngha l gi phm CTRL trong khi g phm <char1> sau nh tt c ra v g phm <char2>. C ngha l gi phm ALT trong khi g phm <char>. Nu khng c hiu lc th c th thc hin bng cch g phm <Esc> nh ra ri g phm <char>. S-<chr> C ngha l gi phm SHIFT trong khi g phm <char>.

Sau y l chc nng mt s phm thng dng. Cc phm thc hin lnh: 83

Nu c dng lnh, lnh s c thi hnh. Cn nu khng th s tu vo v tr ca thanh sng trn panel hin hnh l Enter file hay th mc m hoc vic chuyn i th mc hoc thi hnh file hay thi hnh mt chng trnh tng ng s din ra. C-l M-Enter hay C-Enter M-Tab Cp nht li cc thng tin trn Panel. Cc phm thao tc trn dng lnh: chp tn file v tr thanh sng chn xung dng lnh hon thnh tn file, lnh, bin, tn ngi dng hoc tn my gip sao cc file c nh du (mc nh l file hin thi) trn C-x t, C-x C-t panel chn (C-x t) hoc trn panel kia (C-x C-t) xung dng lnh C-x p, C-x C-p a tn ng dn hin thi trn panel chn (C-x p) hoc trn panel kia (C-x C-p) xung dng lnh s dng hin li trn dng lnh cc lnh c gi M-p, M-n C-a C-e C-b, Left C-f, Right M-f M-b C-h, Space C-d, Delete C-@ C-k M-C-h, M-Backspace trc . M-p s hin li dng lnh c thi hnh gn nht, M-n hin li lnh c gi trc lnh a du nhc tr v u dng a du nhc tr v cui dng a du nhc tr di chuyn sang tri mt k t a du nhc tr di chuyn sang phi mt k t a du nhc tr n t tip theo a du nhc tr ngc li mt t xo k t trc xo k t ti v tr du nhc tr nh du ct xo cc k t t v tr du nhc tr n cui dng xo ngc li mt t

84

Cc phm thao tc trn panel: Up,Down, PgUp, PgDown, Home, End b, C-b, C-h, Backspace, Delete Space u, d g, G Tab, C-i Insert, C-t M-g, M-h, M-j di chuyn ngc li mt trang mn hnh di chuyn tip mt trang mn hnh di chuyn ln/ xung 1/2 trang mn hnh di chuyn n im u hoc cui ca mt mn hnh hon i panel hin hnh. Thanh sng chn s chuyn t panel c sang panel hin hnh chn nh du mt file hoc th mc ln lt chn file u tin, file gia v file cui trn panel hin th tm kim file trong th mc. Khi kch hot ch ny, nhng k t g vo s c thm vo xu tm kim thay v hin th trn dng lnh. Nu tu chn Show ministatus trong option c t th xu tm kim s c C-s, M-s hin th dng trng thi. Khi g cc k t, thanh sng chn s di chuyn n file u tin c nhng k t u ging nhng k t g vo. S dng phm Backspace hoc Del hiu chnh sai st. Nu nhn C-s ln na, vic tm kim s c tip tc M-t C-\ + chuyn i kiu hin th thng tin v file hoc th mc thay i th mc hin thi s dng du cng la chn nh du mt nhm file. C th s dng cc k t i din nh *, ?... biu din cc file s chn s dng du tr xo nh du mt nhm file. C th s dng cc k t di din nh *, ? biu din cc file s xo s dng cc phm ny di chuyn trong mt panel

85

* M-o M-y M-u

s dng du * nh du hoc xo nh du tt c cc file trong panel mt panel s hin th ni dung th mc hin thi hoc th mc cha ca th mc hin thi ca panel kia di chuyn n th mc lc trc c s dng di chuyn n th mc tip theo c s dng

Thc n thanh ngang (menu bar)


Thc n thanh ngang trong Midnight Commander c hin th dng u tin trn mn hnh. Mi khi nhn <F9> hoc kch chut ti dng du tin trn mn hnh thc n ngang s c kch hot. Thc n ngang ca MC c nm mc Left, File, Command, Option v Right. Thc n Left v Right gip ta thit lp cng nh thay i kiu hin th ca hai panel left v right. Cc thc n mc con ca chng gm: thc n ny c dng khi mun thit lp kiu hin th ca cc file. C bn kiu hin th: Full - hin th thng tin v tn , kch thc, v thi Listing Mode ... gian s i ca file; Brief - ch hin th tn ca file; Long - hin th thng tin y v file (tng t lnh ls -l); User - hin th cc thng tin do t chn v file; Quick view Info Tree Sort order... Filter ... Network link ... FTP link ... C-x q C-x i xem nhanh ni dung ca mt file xem cc thng tin v mt th mc hoc file hin th di dng cy th mc thc hin sp xp ni dung hin th theo tn, theo tn m rng, thi gian sa cha, thi gian truy nhp, thi gian thay i, kch thc, inode thc hin vic lc file theo tn thc hin lin kt n mt my tnh thc hin vic ly cc file trn cc my t xa 86

Rescan

C-r

qut li

Thc n File cha mt danh sch cc lnh m c th thi hnh trn cc file c nh du hoc file ti v tr thanh chn. Cc thc n mc con: User menu View View file ... Filtered view Edit Copy cHmod Link Symlink edit sYimlink chOwn Advanced chown Rename/Move Mkdir Delete Quick cd select Group Unselect group reverse selecTion Exit F6 F7 F8 M-c M-+ M- M-* F10 M-! F4 F5 C-x c C-x l C-x s C-x C-s C-x o F2 F3 thc n dnh cho ngi dng xem ni dung ca file hin thi m v xem ni dung ca mt file bt k thc hin mt lnh lc vi tham s l tn file v hin th ni dung ca file son tho file hin thi vi trnh son tho mc nh trn h thng thc hin copy thay i quyn truy nhp i vi mt th mc hay mt file to mt lin kt cng n file hin thi to mt lin kt tng trng n file hin thi hiu chnh li mt lin kt tng trng thay i quyn s hu i vi th mc hay file thay i quyn s hu cng nh quyn truy nhp ca file hay th mc thc hin vic i tn hay di chuyn i vi mt file to mt th mc xo mt hoc nhiu file chuyn nhanh n mt th mc thc hin vic chn mt nhm cc file ngc vi lnh trn chn cc file trong th mc hin thi thot khi MC

Thc n Command cng cha mt danh sch cc lnh. Directory tree hin th th mc di dng cy th mc 87

Find file Swap panels

M-? C-u

tm mt file thc hin tro i ni dung gia hai panel hin th a ra lnh shell c thc hin ln cui (ch s dng trn xterm, trn console SCO v Linux) thc hin so snh th mc hin ti trn panel chn vi cc th mc khc a ra danh sch cc lnh thc hin thay i th mc hin thi thc hin mt lnh trong MC v hin th kt qu trn panel chn (v d: nu mun trn panel chn

Switch panels on/of C-o Compare directories Command history Directory hotlist C-\ C-x d

External panelize

C-x !

hin th tt c cc file lin kt trong th mc hin thi, hy chn mc thc n ny v nhp lnh find . -type l -print s thy kt qu tht tuyt vi)

Show directory size Command history Directory hotlist Background C-\ C-x j

hin th kch thc ca th mc hin th danh sch cc lnh thc hin chuyn nhanh n mt th mc thc hin mt s lnh lin quan n cc qu trnh nn cho php hiu chnh file ~/.mc/ext xc nh chng trnh s thc hin khi xem, son tho hay lm bt c iu g trn cc file c tn m rng

Extension file edit

Thc n Options cho php thit lp, hu b mt s tu chn c lin quan n hot ng ca chng trnh MC. Configuration ... thit lp cc tu chn cu hnh cho MC Lay-out ... Confirmation ... Display bits ... Learn keys ... Virtual FS ... xc lp cch hin th ca MC trn mn hnh thit lp cc hp thoi xc nhn khi thc hin mt thao tc no thit lp cch hin th ca cc k t xc nh cc phm khng c kch hot thit lp h thng file o 88

Save setup

ghi mi s thit lp c thay i

Cc phm chc nng


Cc phm chc nng ca Midnight Commander c hin th ti dng cui cng ca mn hnh. C th thc hin cc chc nng bng cch kch chut ln nhn ca cc chc nng tng ng hoc nhn trn bn phm chc nng . F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 hin th trang tr gip a ra thc n ngi dng xem ni dung mt file son tho ni dung mt file thc hin sao chp file thc hin di chuyn hoc i tn file to th mc mi xo th mc hoc file a tr son tho ln thanh thc n nm ngang thot khi MC

B son tho ca Midnight Commander


Midnight Commander cung cp mt b son tho kh tin dng trong vic son tho cc vn bn ASCII. B son tho ny c giao din v thao tc kh ging vi tin ch Edit ca DOS hay NcEdit ca Norton Commander. hiu chnh mt s file vn bn, hy di chuyn thanh sng chn n v tr file ri nhn F4, ni dung ca file s hin ra trong vng son tho. Sau khi hiu chnh xong, nhn F2 ghi li. B son tho ny c mt thc n ngang cung cp cc chc nng y nh mt b son tho thng thng. Nu tng l ngi dng DOS v mi dng Linux th nn dng b son tho ny hiu chnh v son tho vn bn thay v b son tho Vim. Sau y l bng lit k cc phm chc nng cng nh cc mc thc n trong b son tho ny: Thc n File cc thao tc lin quan n file. Open/load New Save Save as ... C-o C-n F2 F12 m hoc np mt file to mt file mi ghi ni dung file c son tho to mt file khc tn nhng c ni dung trng vi ni 89

dung file hin thi Insert file ... About .. Quit F10 F15 chn ni dung mt file vo file hin thi sao on vn bn c nh du n mt file khc thng tin v b son tho thot khi b son tho Copy to file ... C-f

Thc n Edit: cc thao tc lin quan n vic son tho ni dung file. Toggle Mark Mark Columns Copy Move Delete Undo Beginning End F3 S-F3 F5 F6 F8 C-u C-PgUp C-PgDn thc hin nh du mt on vn bn nh du theo ct chuyn i gia hai ch chn/ thc hin sao chp file thc hin di chuyn file xo file tr v trng thi trc khi thc hin mt s thay i di chuyn n u mn hnh di chuyn n cui mn hnh

Toggle Ins/overw Ins

Thc n Sear/Repl: cc thao tc lin quan n vic tm kim v thay th Search .. Search again Replace ... F7 F17 F4 thc hin tm kim mt xu vn bn tm kim tip tm v thay th xu vn bn

Thc n Command: cc lnh c th c thc hin trong khi son tho. Goto line ... Insert Literal ... Refresh screen Insert Date/time Format paragraph M-p Sort M-t M-l C-q C-l di chuyn tr son tho n mt dng chn vo trc du nhc tr mt k t lm ti li mn hnh chn ngy gi hin ti vo v tr du nhc tr nh dng li on vn bn thc hin sp xp

Thc n Options: cc tu chn c th thit lp cho b son tho. General ... thit lp cc tu chn cho b son tho Save mode ... ghi li mi s thit lp c thay i 90

Cc phm chc nng F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 hin th trang tr gip ghi ni dung file thc hin vic nh du on vn bn tm v thay th xu vn bn thc hin vic sao chp di chuyn file tm kim xu vn bn xo on vn bn c nh du hin th thanh thc n ngang thot khi b son tho

5.10 S dng trnh son tho VI


VI l chng trnh son tho vn bn theo trang mn hnh: Mn hnh c xem nh mt ca s m trn file. C kh nng di chuyn cursor ti bt k ni no trn mn hnh. Ca s c th di chuyn t do trn file.

hin th ng, VI cn bit kiu terminal ang dng. Ta c th nh ngha c kiu terminal bng cch gn ga tr cho bin mi trng TERM: $TERM=tws2103; export TERM

91

Phn ln cc phm c dng c lp hoc kt hp vi phm SHIFT v CTRL to cc lnh ca VI. Khi mt lnh b g sai, vi bo hiu bng nhy mn hnh, ku beep hoc thng bo li. Chng trnh VI c xy dng t chng trnh son tho dng ex. Cc lnh ca ex c th c gi khi c du : dng cui mn hnh. Ta c th gi vi vi tn file vn bn: $ vi tn_file Ca s son tho s c m ti u file. Nu file cha tn ti, n s c to bi lnh ghi. Dng cui cng trn mn hnh c dng cho nhng vic sau: vo cc lnh. thng k. bo li. i vi nhng ngi mi dng vi, c th dng version khc ca vi: $vedit tn_file version ny ca vi s hin thng bo INPUT MODE khi ta ang trong ch nhp vn bn. Khi ta ch mun xem ni dung ca mt file, dng: $view tn_file version ny ca vi m file ch c, cho php ta xem c ni dung m trnh c nguy c file b thay i. Chuyn ch lm vic: T ch son tho sang ch lnh dng phm ESC Mun ra khi vi v ghi file c th dng mt trong cc cch sau:
ZZ :w :wq :x sau :q hoc hoc hoc

Ra khi VI v khng ghi file:


:q (nu khng c sa i) hoc :q!

Khi ang trong VI, mun lm vic vi SHELL, ta c th lm nh sau: chy mt lnh ca SHELL
:!lnh

hoc gi SHELL, sau chy cc lnh ta mun, khi kt thc n CTRL-D tr li VI:
:!sh $lnh $CTRL-D

Chn vn bn
Chn k t trn mt dng a <text> <ESC> Chn k t vo sau cursor. 92

i <text> <ESC> A <text> <ESC> I <text> <ESC> Chn dng o <text> <ESC> O <text> <ESC> CTRL V trc chng.

Chn k t vo trc cursor. Chn k t vo cui dng. Chn k t vo u dng. Chn mt dng vo trc dng cha cursor. Chn mt dng vo sau dng cha cursor.

Ghi ch: nhn ESC kt thc ch xem, mun chn cc k t khng in c ta phi g:

Di chuyn cursor trong file


Theo k t Sang tri: dng phm mi tn tri hoc h hoc backspace. Xung dng: dng phm mi tn xung hoc j hoc linefeed Sang phi: dng phm mi tn phi hoc i hoc escape. Ln dng: dng phm mi tn ln hoc k. Theo dng ^ $ Enter u dng trn 0(null) v u dng vt l (dng bt u bng du cch hoc tab) Theo mn hnh H M L v u mn hnh (Home) v gia mn hnh (Middle) v cui mn hnh (Last) v u dng cui dng u dng tip

Theo t (word) w W v u t tip bB u t hin ti e E cui t hin ti Theo cu (sentence) ( v u cu ) v cui cu du kt thc mt cu l cc du ., ! hoc ? Theo on vn (paragraph) 93

{ v u on vn } cui on vn on vn kt thc bng mt dng trng. Theo ca s (window) z z^D ^U ^F ^B dng hin ti gia ca s. dng hin ti cui ca s. xung na ca s ln na ca s xung mt ca s (-2 dng) ln mt ca s (2 dng) z<Enter> dng hin ti u ca s.

Ghi ch: ^ l k hiu ca phm CTRL Theo s th t dng hin th s th t ca cc dng son tho: :set nu Xo b hin th trn :set nonu :n <Enter> hoc nG chuyn cursor n dng th n :$ hoc G :se list Tm dy k t / ? /string ?string // ?? k hiu chiu tm xui. k hiu chiu tm ngc. chuyn cursor ti dng cha dy k t theo chiu xui. chuyn cursor ti dng cha dy k t theo chiu ngc. lp li tm xui. lp li tm ngc. n dng cui vn bn hin th cc k t n (hidden)

Xa vn bn
Xa k t x 3x X xa k t ti v tr cursor xa 3 k t xa k t trc v tr cursor xa dng cha cursor xa 3 dng bt u t dng cha cursor 94

Xa dng vn bn dd hoc d<CR> 3dd

d$ hoc D dw 3dw hoc d3w d/string

xa n cui dng xo t cha cursor xo 3 t xa khi ht dy string

Thay th vn bn
Thay th k t rc R<text><ESC> Thay th dng S<text><ESC> Thay th t cw<text><ESC> c2w<text><ESC> C hoc c$ c/string thay mt t bng text. T c thay th tnh t cursor n k t $. thay 2 t. thay th cui dng thay th n ht string xa dng hin ti v thay n bng text thay th k t hin ti bng k t c (???) thay th s k t bng dy text

Xa lnh
u U ^G xa tc dng ca lnh cui cng xo tt c thay i lm trn dng hin ti. Hin th tn, trng thi, s dng, v tr ,cursor v phn trm vn bn tnh t v tr cursor n cui vn bn.

Xem trng thi vn bn ang son tho

Sao chp, di chuyn vn bn


Di chuyn vn bn Mi ln thc hin mt lnh xa (x hoc d), vi u ghi li phn vn bn b xa vo vng m ring cho n ln xa sau. Lnh p v P cho php ly li vn bn t vng m . Trc khi thc hin lnh ny, cursor phi c t vo v tr cng kiu vi phn vn bn c trong vng m: k t. t. dng. cui dng (end of line). p sao phn vn bn xo ln cui cng vo sau i tng trong cng kiu. P sao phn vn bn xo ln cui vo trc i tng cng kiu. 95

Sao chp vn bn Lnh y (yank) cho php sao phn vn bn ta mun vo vng m. Mun sao phn vn bn t vng m ra, ta phi chuyn cursor vo ni cn sao, sau dng p hoc P. Y3w Y hoc yy 5yy :5,8t25 sao 3 t vo vng m. sao dng hin ti vo vng m. sao 5 dng vo vng m. sao cc dng t 5 n 8 ti sau dng 25

Mt cch khc sao chp dng

5.11 S dng ti liu gip man


Trong DOS bit c php hay ngha ca mt lnh chng ta hay dng gip ca lnh bng cch nh tham s /? vo pha sau lnh, cn Window c b Help cho php ta tm kim cc thng tin lin quan n mt vn no . Linux th cung cp cho ta mt h thng th vin gip cho php ta tm cc thng tin theo t kha ta nhp vo. D khng c giao din bng Window, nhng cc ti liu gip ny rt c ch i vi ngi s dng c bit khi s dng cc lnh. Chng ta s bit cc lnh trong Linux s dng rt nhiu ty chn m chng ta khng th nh ht c. Man s gip chng ta. Chng ta s dng man theo c php: $man t-kha [Enter] t-kha l t m chng ta cn tm kim thng tin v n. V d: Tm kim cc thng tin v lnh ls
$man ls LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List sort. -a, --all do not hide entries starting with . -A, --almost-all do not list implied . and .. -b, --escape print octal escapes for nongraphic characters --block-size=SIZE : information about the FILEs (the current directory by default). Sort entries alphabetically if none of cftuSUX nor -FSF LS(1)

96

Ta dng php iu khin ln, xung xem trang man. Nu mun xem tng trang dng phm space. Thot khi man s dng lnh: : q Man phn d liu mnh lu tr thnh nhng on (session) khc nhau vi cc ch khc nhau l: Session 1 2 3 4 5 6 7 8 Tn ch ngha

user command cc lnh thng thng ca h iu hnh system call subroutines devices File format games Miscell sys. admin cc hm th vin kernel ca h thng cc hm th vin lp trnh cc hm truy xut file v x l thit b cc hm nh dng file cc hm lin quan n tr chi cc hm khc cc hm qun tr h thng

Xc nh c th thng tin ca mt ch no chng ta dng: $man session t-kha V d : # man 3 printf Xem cc thng tin v hm prinf dng trong lp trnh. Nu chng ta khng xc nh session th session mc nhin l 1 .

5.11 S dng h tr apropos


i khi mun thc hin mt tc v no , nhng khng bit phi dng lnh no. C nhiu cch c th tm c, mt trong s l dng lnh apropos. Lnh ny s tm trong man page chui k t miu t ngn gn v lnh cn tm. C php: apropos keyword V d mun tm lnh lin quan n t kha account:
# apropos account

97

CHNG 4: LP TRNH TRONG LINUX


1. LP TRNH SHELL
1.1 Khi nim shell
Shell l chng trnh lun c thc thi khi chng ta ng nhp h thng. N l chng trnh cho php chng ta tng tc vi h thng. Hin ti c nhiu shell c sn trong h thng. Shell l chng trnh nm gia ngi s dng v kernel, thng thng n l mt b bin dch dng lnh t ngi s dng cc thit b cui (cng c th t file) v thc hin chng. Khng nhng th, trong UNIX shell cn l mt ngn ng lp trnh thc s vi y cc c php cn thit nh cu lnh iu kin, vng lp, cc chng trnh con, th tc... Shell cung cp cho ngi dng mt tp lnh ngi dng thao tc vi h thng. Khi ngi dng thc hin lnh shell, shell s dch chng thnh cc li gi h thng v chuyn cho kernel h iu hnh x l. Shell cng l mt phn trong cc ng dng m kernel qun l. Kernel chu trch nhim cp pht ti nguyn duy tr cc tin trnh shell. Linux l h thng a ngi dng, khi mi ngi dng ng nhp h thng, h s nhn c mt bn copy ca shell thao tc vi h thng. Unix shell bao gm b bin dch lnh v ngn ng lp trnh. C ba loi shell: Bourne shell ca Steven Bourne n gin v hiu qu. N l mc nh trong a s cc h UNIX (hoc c th gi bi sh). C shell ca Bill Joy trng i hc Berkeley ging nh Bourne shell nhng b sung thm cc c im nh b danh, history vvv. N c th gi bi csh. Korn shell ca David F. Korn kt hp Bourne shell v C shell nhng b sung thm cc c im ring. N c th gi bi ksh.

1.2 Mt s c im ca Shell
X l tng tc (Interative processing): Ngi dng tng tc vi shell di dng i thoi trc quan. Chy nn: Cc chng trnh trn shell c thi gian thc thi lu v chim t ti nguyn c th cho php chy nn bn di trong khi ngi dng c th thc hin cc cng vic khc. iu ny tng hiu qu s dng h thng. Chuyn hng (Redirection): C th linh hot chuyn i cc d liu ra vo chun v li. 98

ng dn (pipe): Cho php thc hin nhiu lnh lin tip trong d liu ra ca lnh ny c s dng nh d liu vo ca lnh kia. Tp tin lnh (shell script): To cc tp tin cha cc lnh lm vic theo trnh t. Cp quyn v thc thi tp tin ny. Bin shell: shell h tr s dng cc bin lu tr cc thng tin iu khin hot ng. S dng li cc lnh thc hin (history command): y l tnh nng rt c ch cho ngi dng. thc hin li cc lnh mnh thc hin trc , thay v phi g li, ngi dng c th li. Cu trc lnh nh ngn ng lp trnh: Shell cho php s dng lnh nh ngn ng lp trnh, bi n c th kt hp x l cc tc v phc tp. T ng hon tt tn file, hoc lnh: Chng ta c th g phn u ca lnh hoc tp tin sau dng <Tab> hon tt phn cn li. B danh cho lnh (command alias): Ta c th dng mt tn mi cho mt lnh. Sau s dng tn ny thay th lnh : $alias dir=ls l lc ny ta s dng lnh dir dng nh ls l

Cc Shell trong Linux


Tn Shell sh ( Bourne) Lch s ra i Shell nguyn thy trong Unix

Csh, tcsh v zsh Shell s dng cu trc lnh lnh ca ngn ng C lm ngn ng script. Shell ny c to bi Bill Joy, y l Shell thng dng th 2 sau bash Bash Bash(Bourne Again Shell) l Shell s dng chnh trong Linux, ra i t d n GNU. Bash c u im l m ngun m, c th download t a ch http://www.gnu.org Rc L Shell m rng ca C Shell vi nhiu tng thch vi ngn ng C, ra i t d n GNU Shell Linux mc nh l bash, nm ti /bin/bash Tt c h iu hnh Linux u c Shell Bash. Mun bit mnh ang dng Shell no s dng lnh sau: echo $Shell

Du nhc shell (du nhc i lnh)


# % $ > khi ta l root (superuser), bt k shell no. du nhc khi chy C shell. du nhc khi chy Bourne shell hoc Korn shell. du nhc khi chy tcsh shell. 99

Trc du nhc shell ta c th t mt chui k t th hin tn ring, tn my tnh, tn th mc hoc a ch mng.

Cc siu k t (wildcards)
L nhng k t c ngha c bit i vi shell : ? , *, [ ], -, ! Du ? : thay th cho 1 k t bt k.
$ls fi?e file fine fire

Du * : thay th cho 0 hoc nhiu k t bt k.


$ls abc*xyz abcxyz abcdefxyz abcdefghigjk0123456789xyz

Thay i shell lm vic


Thay i vnh vin: dng lnh passwd
$passwd s Changing login shell for mang on Linux Old shell: /bin/sh New shell: /bin/bash

Thay i tm thi (chuyn tm thi qua shell khc ) :


$bash [nam@localhost nam]$ exit ( hoc ^D, tc Ctrl-D )

1.3 Lp trnh ng ng
Pipe cn gi l ng ng, l cch truyn d liu s dng kt hp 2 chuyn tip. Pipe s dng kt xut ca mt chng trnh v lm nhp liu cho mt chng trnh khc. c im ng ng ca Unix ni kt mt lnh vi lnh khc. ng ni cho php u ra ca mt lnh l u vo ca lnh khc. ng ni n thun l mt b m ca kernel. Cc tin trnh c th chia s d liu thay cho vic s dng file tm.

100

c bit hn n to xut chun ca 1 lnh thnh nhp chun ca 1 lnh khc. K hiu | thit lp ng ng V d: # wc baocao* | sort n u ra ca wc (trong trng hp ny l tng s t v k t ca cc tp tin c tn bt u l baocao) v gi n n lnh sort sp th t s. Kt qu cui cng l cc tng s t sp theo th t tng dn hin th trn mn hnh. ng ng c th kt hp vi i hng: wc baocao* | sort -n > rep-count kt qu s a ra tp tin rep-count. Vi lnh: $ls l | more kt qu ca lnh ls khng xut ra mn hnh m chuyn cho lnh more x l nh d liu u vo

Lnh tee
Hot ng chuyn tip v ng ng l c im ca h iu hnh Linux. Tuy nhin ta cng c th s dng 1 lnh ca UNIX lm vic ny. l lnh tee, n s gim bt cc kt qu gin tip ca chui ng ng: sort baocao | tee baocaostt | lp u tin lnh tee gi nhp chun ca n n xut chun ca n, trong trng hp ny gi xut ca sort n nhp ca lp. Th hai tee ly ch 1 bn sao ca nhp chun vo tn tp tin baocaostt.

1.4 Lp trnh Shell Script


Ngn ng Shell l dng ngn ng Script, khng c uyn chuyn hay phc tp nh cc ngn ng lp trnh chuyn nghip C, java,...Chng trnh Shell c son tho di dng vn bn (text) v khng c bin dch thnh file binary nh cc ngn ng khc. Khi chy chng trnh Shell, Shell s bin dch v thc thi. Trong Linux chng ta gp rt nhiu cc chng trnh Shell x l nhng cng vic rt hu hiu. L nh qun tr cn phi nm vng c php ngn ng Shell khng ch vit nhng on chng trnh m t ra cng hiu c cc script c sn iu khin h thng ca mnh. Cc thnh phn chnh ca Shell: Bin: kiu chui, tham s v bin mi trng. iu kin: kim tra lun l. Cc lnh iu khin: if, for, while, until, case. Hm. Cc lnh ni tr ca Shell. Cc php ton s hc

101

Ch thch trong Shell


Dng ch thch s dng trong cc m ngun chng trnh dng gii thch ngha cc lnh hoc cha nng ca mt bin hay mt on chng trnh. Nhng dng ny khng c bin dch i vi cc ngn ng lp trnh, v n khng c thc thi i vi chng trnh shell. Bt u mt dng ch thch l du # .
# Dng ch thch ghi y

V d: Mt on chng trnh s dng dng ch thch.


# Kim tra c tn ti tham s u tin if fi test $1 z ; then echo "Khong co tham so" # kt thc if

Trng hp c bit ch th #! khng dng gii thch m l y chnh l dng lnh gi shell thng dch cc lnh trong tp tin ny. Ta thng thy dng u tin trong cc chng trnh shell l #! /bin/bash. iu ny c ngha l ta s dng shell bash thng dch lnh. Shell chng ta chy c th xem l shell ph v chng c th thc thi cc lnh m khng lm bin i cc bin mi trng ca shell chnh. C php chung ca ch th ny l: #!shell-thc-thi Nu chng ta khng khai bo th shell mc nhin trong Linux l bash. Cc h Unix khc th shell mc nhin l sh. Ch th #! Cn dng chy cc chng trnh khc trc khi thc thi cc lnh tip theo.

S dng bin
Bin dng trong chng trnh shell khng cn phi khai bo trc nh cc ngn ng C, Pascal ... N s t ng khai bo khi ngi dng ln u s dng. D liu bin lu tr c hiu di dng chui d n c th cha s. Trong trng hp mun s dng gi tr bin nh l s th phi c cc php bin i m chng ta hc pha sau. Mt vn m ta phi lu l shell phn bit ch hoa v ch thng. V d hai bin tong v Tong l khc nhau. 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 $), 102

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=duonglk 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.
$myname. $myname.

Ta c th khai bo mt bin nhng n c gi tr NULL nh trong nhng cch sau:


$ vech= $ vech=""

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. K hiu bin $1, $2, $3 $0 $* $# $$ ngha Gi tr cc bin tham s th nht, th 2.. tng ng vi cc tham s t tri sang phi trong dng tham s. Tn tp tin lnh gi (tn ca shell script) Danh sch tham s y Tng s tham s. S tin trnh (ID) m chng trnh ang hot ng 103

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. 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. Nhp gi tr cho bin t bn phm C php lnh : read tn-bin gp lnh ny chng trnh s i ngi dng nhp gi tr vo, khi d liu xong th n Enter. Gi tr s c gn vo bin tn-bin. 104

V d :
echo "Nhap vao ten cua ban" read ten echo "Ten vua nhap la $ten"

Trong v d trn khi xut hin dng thng bo Nhap vao ten cua ban , ngi dng nhp vo tn v d nh Nguyen Hung Dung th kt qu hin th l Ten vua nhap la Nguyen Hung Dung . Du {} phi c s dng vi tn bin theo sau bi ch hay s m khng phi l mt phn ca tn bin.
$ filename=chapt $ echo ${filename}0 chapt0

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 hiu dn Dng hin k t c bit Thi hnh lnh chy ch ngm Bt u khi lnh Kt thc khi lnh Th mc home ca ngi dng hin ti Thay th lnh Chia ct lnh Li ch gii Trch dn mnh Trch dn yu Biu thc bin K t i din cho chui K t i din cho mt k t

105

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.

Lnh kim tra gi tr ng sai ca biu thc


Lnh test hoc [ ] dng kim tra gi tr ng sai ca biu thc. 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 ${var:- word} ${var:= word} ${var:+ word} ${var:?message} khng th tr v 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. Nu bin tn ti v xc nh th tr v word, cn khng th tr v null. 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. 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

Chc nng Nu bin tn ti v xc nh th tr v gi tr ca n, nu

By gi s dng lnh unset xo bin status, v thc hin vn cc lnh , c output nh sau: 106

$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 ${var#pattern} ${var##pattern} ${var%pattern} ${var%%pattern} ${var/pattern/string} tr v phn cn li Xo b phn khp (match) di nht ca pattern trc var v tr v phn cn li Xo b phn khp ngn nht ca pattern cui var v tr v phn cn li Xo b phn khp di nht ca pattern cui var v tr v phn cn li 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. 107 Chc nng Xo b phn khp (match) ngn nht ca pattern trc var v

Thay tt c cc phn khp. Ton t ny c trong bash 2.0 hoc ln hn. 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)

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: Kim tra str1 = str2 str1 != str2 iu kin thc str1 bng str2 str1 khc str2 108

-n str -z str

str c di ln hn 0 (khc null) str c di bng 0 (null)

So snh s hc Php so snh Kt qu

bieuthuc1 eq biethuc2 ng nu bieuthuc1 bng bieuthuc2 bieuthuc1 ne biethuc2 ng nu bieuthuc1 khng bng bieuthuc2 bieuthuc1 gt biethuc2 ng nu bieuthuc1 ln hn bieuthuc2 bieuthuc1 ge biethuc2 ng nu bieuthuc1 ln hn hoc bng bieuthuc2 bieuthuc1 lt biethuc2 ng nu bieuthuc1 nh hn bieuthuc2 bieuthuc1 le biethuc2 ng nu bieuthuc1 nh hn hoc bng bieuthuc2 Cc ton t kim tra file Php kim tra -d file -e file -f file -g file -s file -u file -r file -w file -x file -O file -z file -G file file1 - nt file2 Kt qu file tn ti v l mt th mc. ng nu file tn ti. ng nu file l tp tin bnh thng (khng l mt th mc hay mt file c bit). ng nu file c xc lp set-group-id trn file ng nu file c kch thc khc rng ( >0) ng nu file c xc lp set-user-id ng nu file cho php c ng nu file c php ghi ng nu file cho php thc thi ng nu file hin thi thuc s hu ca ngi dng hin thi. ng nu file c kch thc l 0. file thuc mt trong cc nhm ngi dng hin ti l thnh vin. file1 mi hn file2 109

file1 - ot file2 Cc ton t logic

file1 c hn file2

Php kim tra ! expr

Kt qu ng nu expr khng ng

expr1 -a expr2 ng nu expr1 v expr2 ng expr1 -o expr2 ng nu expr1 ng hoc expr2 ng.

Biu thc tnh ton expr hoc let cho vic tnh ton
Biu thc expr s dng cho vic tnh ton, cc gi tr trong biu thc c hiu l s nguyn thay v l chui. N cng dng i chui thnh s. Biu thc expr c bao bc bi 2 du ` ( Khng phi du nhy n, l du phm bn tri phm s 1-!, hay l phm nm di phm ESC ). Trong biu thc tnh ton cc ton t v ton hng cch nhau bng khong trng. Cc php ton v php so snh expr cho php | & > < >= <= != V d:
$ let "a = 1 + 1" $ echo $a 2 $ a=expr $a + 1 $ echo $a 3

hoc v ln hn nh hn

= + \*

bng nhau cng tr nhn chia chia ly phn d

ln hn hoc bng / nh hn hoc bng % khc nhau

Kt ni lnh, khi lnh v ly gi tr ca lnh


Shell cho php s dng php hoc (OR) v php v (AND) kt ni cc lnh. Php v (AND) 110

lnh _1

&&

lnh_2 && lnh_3

Cc lnh thc hin t tri sang phi cho n khi mt lnh c kt qu li. Kt qu cui cng ca dy lnh ny l ng (true) nu tt c cc lnh u ng, ngc li l sai. Php hoc (OR)
lnh _1 || lnh_2 || lnh_3

Cc lnh thc hin t tri sang phi cho n khi mt lnh c kt qu ng. Kt qu cui cng ca dy lnh ny l ng (true) nu c t nht mt lnh l ng, ngc li l sai.
test -d demo && echo "demo is a directory" test -d demo | | echo "demo is not a directory" (test -d demo && ls -l demo) | | echo "demo not ok"

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. Khi lnh Khi chng ta cn thc thi nhiu lnh lin tip nhau, c th dng khi lnh. Khi lnh nm gia 2 du { }. Ly gi tr ca mt lnh. Khi vit chng trnh nhiu khi ly kt qu ca lnh ny lm i s hay gi tr x l ca lnh kia. Ta c th lm c iu ny bng cch s dng c php $(command). Khi dng $(command), kt qu ca vic thc hin lnh command c tr v.

1.5 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. 111

- select Thi hnh mt hoc nhiu cu lnh da trn mt khong tu chn ca ngi dng.

1.5.1 Biu thc iu kin if


C php: if then else fi
if condition then statements [elif [else statements] fi condition statements]

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: u tin, ta cn phi chc chn rng mnh hiu if kim tra trng thi thot ca cu lnh 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

112

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 then if then # more code here fi fi cp datafile datafile.bak cd /home/kwall/data

Tuy nhin, bash cho php ta vit on m ny ngn gn hn nhiu nh sau:


if cd /home/kwall/data && cp datafile datafile.bak then # more code here fi

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

113

# 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

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. V d 1:
if test -f file1 then echo "file exists" else echo "file does not exist" fi

V d 2: Nhp vo im ca mn hc, cho bit kt qu.


echo chuong trinh ket qua mon hoc echo Nhap vao diem read diem if else echo "Hong" fi [ $diem ge 5 ] ; then echo "Dat"

V d 3:
if test -f file1; then echo "file exists" elif test -d file1; then echo "file is a directory" fi

trong trng hp ny fi dng chung. V d 4: Nhp vo im cho bit xp loi.


echo Xep loai

114

echo read if

Nhap vao diem diem test $diem -ge 8 ; then echo " Loai Gioi"

elif test elif test echo else echo fi

$diem ge

7 ; then

echo "Loai Kha" $diem ge 5 ; then "Loai TB" "Loai Yeu"

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" 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 # Ket thuc vong lap for

1.5.2 Biu thc lnh r nhnh case


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. 115

C php y ca case nh sau:


case expr in pattern1 ) pattern2 ) [*) esac statements ;;] # gi tr mc nh statements ;; 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 *)), 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 (K Shell) v cc shell bash (B Shell). 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 do statements that manipulate $value done value [in list]

Di y l mt v d v cch s dng lnh select: Chng trnh to cc menu bng select.


#!/bin/bash # menu.sh Createing simple menus with select ####################################### IFS=: PS3=choice? # clear the screen clear select dir in $PATH do

116

if [ $dir ]; then cnt=$(ls Al $dir | wc -l) echo $cnt files in $dir else echo Dohhh! No such choice! fi # kt thc if echo e \nPress ENTER to continue, CTRL C to quit read clear done

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 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 thc nu ta khng nhn Ctrl+C. Tuy nhin ta c th s dng lnh break thot ra. Dng case khi chng ta s dng gi tr ca mt biu thc r cc nhnh khc nhau.

117

V d: Trong v d ny s to menu la chn v cho php ngi dng chn chc nng thc hin. Nu bin chn l 1 th lit k th mc hin hnh, 2 th cho bit ng dn th mc hin hnh, cc s khc l khng hp l.
clear echo echo " Menu " echo " 1. Lit k th mc hin hnh" echo " 2. Cho bit ng dn th mc hin hnh" read chon case $chon in 1 2 * esac ) ls -l ) pwd ;; ) echo "Khng hp l";; ;;

1.5.3 Vng lp 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 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 statements using $value done

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

118

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 done ^D $ sh for2 Welcome 0 times Welcome 1 times Welcome 2 times Welcome 3 times Welcome 4 times Welcome 5 times echo "Welcome $i times"

Tip theo l mt v d v vng for lng nhau:


#!/bin/bash for (( i = 1; i <= 5; i++ )) do for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ### ### Outer for loop ###

119

do echo -n "$i " 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 fi n=$1 for i in 1 2 3 4 5 6 7 8 9 10 do echo "$n * $i = `expr $i \* $n`" done 1

Khi ta chy chng trnh vi tham s:


$ sh mtable 7

Ta thu c kt qu nh sau:
7 * 1 = 7 7 * 2 = 14 ... .. 7 * 10 = 70

Cho php thc hin mt chui lnh nh nhau vi mi mt gi tr trong danh sch cho. S cc vng lp bng s cc gi tr trong danh sch. V d: Shell_script copy sao chp cc file trong danh sch i vo danh mc /users/user8 v i nhm thnh nhm student, i ngi s hu thnh user8.
$cat copy for i do if [-f $i]; then cp $i /users/user8 chgrp student /users/user8/$i

120

chown user8 /users/user8/$i fi done

1.5.4 Vng lp While


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). Hai lnh thng dng trong vng lp while:
true hoc : sleep[n] cho gi tr true(0) i n giy

shell_script disp_time hin th s liu ngy thng theo khong thi gian 30 giy.
$cat disp_time while true hoc s dng while : do date sleep 30 done

1.5.5 Vng lp until


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).
until condition do statements done

Cu trc while ca bash khc phc thiu st khng th t ng tng, gim con m cua vng lp for. V d, ta mun copy 150 bn ca mt file, th vng lp while l mt la chn gii quyt bi ton ny. Di y l chng trnh: 121

#!/bin/sh declare idx=1 while [ $idx != 150] do cp somefile idx=$idx+1 done somefile.$idx -i idx

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

V d: Chng trnh s lp cho n khi n<=10


echo Nhap vao so n read n until [ $n lt 10 ] do echo " n ln hn 10" n=expr $n 1

122

done

1.5.6 Thot vng lp: break, continue, exit


Lnh break Cho php ta thot ra khi vng lp m khng cn kim tra iu kin lp. Lnh exit Lm chng trnh thot ra v tr v du nhc lnh $. V d 1: Nhn s n t i s dng lnh, tnh tng S =1+2+ ..+n
echo "chuong trinh tinh tong" if [-z $1 ]; then echo "tong exit 0 fi s=0 i=1 while true do s=`expr $i + $s` i=`expr $i + 1` if fi done echo $s [i gt n ]; then break; <n>"

V d 2: Shell_script stock ghi cc dng k t vo t bn phm ln file lines cho ti khi ta g t END
$cat stock while true do echo Enter your line: read answer if test $answer = END ; then break else echo $answer >> lines fi done

Ch : break[n] cho php ra khi n mc ca cc vng lp lng. Lnh continue: cho php b qua cc lnh cn li, quay v u vng lp. 123

V d 3: shell_script supprim xo tt c cc file c trong danh sch i, tr file save v source:


$cat supprim set -x for i do if test "$i" = "save" -o "$i" = "source" then continue fi echo $i rm $i done

1.5.7 Dch chuyn tham s shift


Chuyn gi tr hin thi c lu trong dy cc tham s sang tri mt v tr, nu thm tham s i cng lnh shift th s dch chuyn sang tri ngn y v tr . V d:
$1 = -r $2 = file1 $3 = file2 $shift

Kt qu l:
$1 = file1 $2 = file2

Nu mun dch sang tri 2 v tr th s dng lnh.


shift 2

1.6 Hm
Cng nh cc ngn ng lp trnh khc, Shell cho php s dng hm. Hm l mt on chng trnh con nm trong script chnh. N c th c gi li nhiu ln trong script chnh. 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.

nh ngha hm:
tn-hm() { cc-lnh-ca-hm. }

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 124

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 { local local } myvar yourvar=1 foo

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 sa li. 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 . V d1:
chao() { echo hello }

Gi hm v truyn tham s cho hm. gi hm thc hin ta s dng tn hm hoc c thm tham s i km (ch tn hm phi khc vi tn ca cc lnh unix tn ti). Shell thc hin cc lnh trong { } khi hm c gi.
tn-hm tn-hm thamso-1 thamso-2

S dng tham s trong hm cng nh trong script chnh. Hm c th truy xut tp hp bin ca shell hin hnh.
lietke() { /bin/ls -C }

Bin cc b
Mt bin c khai bo l cc b ( khai bo vi t kha local ) n ch c ngha trong phm vi khi lnh. Trong mt hm, bin cc b ch hot ng trong phm vi hm.

V d 2:
#!/bin/bash func (){ local loc_var=23 # Declared local. echo echo "\"loc_var\" in function = $loc_var" global_var=999 # Not declared local. echo "\"global_var\" in function = $global_var" }

125

func # Now, see if local 'a' exists outside function. echo echo "\"loc_var\" outside function = $loc_var" # "loc_var" outside function = # Nope, $loc_var not visible globally. echo "\"global_var\" outside function = $global_var" # "global_var" outside function = 999 # $global_var is visible globally. echo exit 0

Ch : Trc khi hm c gi, tt c cc bin c khai bo trong hm s b coi l n i vi nhng thao tc ln n ngoi phm vi hm, iu ny khng c ngha l cc bin l bin cc b. Xt v d 3 sau s r hn. V d 3:
#!/bin/bash func (){ global_var=37 } # END OF FUNCTION echo "global_var = $global_var" # global_var = # Function "func" has not yet been called, # so $global_var is not visible here. func echo "global_var = $global_var" # global_var = 37 # Has been set by function call. # Visible only within the function block #+ before the function has been called.

1.7 Mng
Khi nim mng trong ngn ng lp trnh Shell Script cng ging nh trong cc ngn ng lp trnh khc Pascal, C, C++, Java, php, asp Mng c khi to theo cu trc sau: declare a array_name. Trong lp trnh Shell ta cn ch l khng c khi nim c nh kch thc ca mng, truy xut cc thnh phn ca mng ta c th s dng nhng cch truy xut thng dng: x[0], x[1], x[2]
declare -a nums=(45 33 100 65) declare -ar names (array is readonly) names=( Tom Dick Harry) states=( ME [3]=CA CT )

126

x[0]=55 n[4]=100

ty chn r ch ra rng y l mng ch c. ly gi tr ca mt thnh phn ca mng ta s dng c php sau: ${arrayname[index]} V d:
$declare -a lop $lop=(abc defg ijklm pqwst) $echo ${#lop} $echo ${#lop[0]} $echo ${#lop[1]} $echo ${#lop[*]} $echo ${#lop[@]} # 3 # 3 # 4 # 4 # 4

$echo ${lop[*]} # abc defg ijklm pqwst $echo ${lop[@]} # abc defg ijklm pqwst

Copy mt mng:
array2=( "${array1[@]}" ) array2="${array1[@]}

Thm mt thnh phn cho mng:


array=( "${array[@]}" "new element" ) array[${#array[*]}]="new element"

Mt s v d v s dng mng trong lp trnh shell


The Bubble Sort [1]
#!/bin/bash #bubble.sh: Bubble sort, of sorts. #Recall the algorithm for a bubble sort. In this particular version... # With each successive pass through the array to be sorted, #+ compare two adjacent elements, and swap them if out of order. # At the end of the first pass, the "heaviest" element has sunk to bottom. # At the end of the second pass, the next "heaviest" one has sunk next to bottom. # And so forth. # This means that each successive pass needs to traverse less of the array. # You will therefore notice a speeding up in the printing of the later passes. exchange()

127

{ # Swaps two members of the array. local temp=${Countries[$1]} # Temporary storage #+ for element getting swapped out. Countries[$1]=${Countries[$2]} Countries[$2]=$temp return } declare a Countries # Declare array, #+ optional here since it's initialized below. # Is it permissable to split an array variable over multiple lines #+ using an escape (\)? # Yes. Countries=(Netherlands Ukraine Zaire Turkey Russia Yemen Syria Brazil Argentina Nicaragua Japan Mexico Venezuela Greece England Israel Peru Canada Oman Denmark Wales France Kenya Xanadu Qatar Liechtenstein Hungary) # "Xanadu" is the mythical place where, according to Coleridge, #+ Kubla Khan did a pleasure dome decree. clear # Clear the screen to start with. echo "0: ${Countries[*]}" # List entire array at pass 0. number_of_elements=${#Countries[@]} let "comparisons = $number_of_elements 1" count=1 # Pass number. while [ "$comparisons" gt 0 ] # Beginning of outer loop do index=0 # Reset index to start of array after each pass. while [ "$index" lt "$comparisons" ] # Beginning of inner loop do if [ ${Countries[$index]} \> ${Countries[`expr $index + 1`]} ] # If out of order... # Recalling that \> is ASCII comparison operator #+ within single brackets. # if [[ ${Countries[$index]} > ${Countries[`expr $index + 1`]} ]] #+ also works. then exchange $index `expr $index + 1` # Swap. fi # end if let "index += 1" done # End of inner loop

128

let "comparisons = 1" #Since "heaviest" element bubbles to bottom, #+ we need do one less comparison each pass. echo echo "$count: ${Countries[@]}" # Print resultant array at end of each pass. echo let "count += 1" # Increment pass count. done # End of outer loop # All done. exit 0 ^D

Push- down Stack [1]


#!/bin/bash #stack.sh: push-down stack simulation #Similar to the CPU stack, a push-down stack stores data items #sequentially, but releases them in reverse order,LIFO BP=100 SP=$BP Data= # Base Pointer of stack array. # Begin at element 100. # Stack Pointer. # Initialize it to "base"(bottom) of stack # Contents of stack location. # Must use local variable, #because of limitation on function return range declare -a stack push() { if [ -z "$1" ] then return fi let "SP -= 1" stack[$SP]=$1 return } pop() { Data= then return fi # This also keeps SP from getting past 100, # Pop item off stack. # Empty out data item. # Bump stack pointer. # Push item on stack. # Nothing to push?

if [ "$SP" -eq "$BP" ] # Stack empty?

129

#+ i.e., prevents a runaway stack. Data=${stack[$SP]} let "SP += 1" return } status_report(){ # Find out what's happening echo "-------------------------- echo "REPORT echo "Stack Pointer = $SP echo "Just popped \""$Data"\"off the stack echo "---------------------------- echo } # the main(). Now, for exect this function echo pop status_report echo push garbage pop status_report value1=23; value2=skidoo; value3=FINAL; pop status_report pop status_report pop status_report # 23 # Last-in, first-out! # skidoo # Garbage in, garbage out push $value1 push $value2 push $value3 # FINAL # See if you can pop anything off empty stack # Bump stack pointer.

# Notice how the stack pointer decrements with each push, #+ and increments with each pop. echo # ======================================================= # Exercises: # # 1) Modify the "push()" function to permit pushing # + multiple element on the stack with a single function call. # 2) Modify the "pop()" function to permit popping # + multiple element from the stack with a single function call.

130

# 3) Using this script as a jumpingoff point, # + write a stackbased 4function calculator. exit 0 ^D

M phng mng hai chiu trong Shell Script


M ngun chng trnh m phng mng 2 chiu (di_arr)
#!/bin/bash # Simulating a twodimensional array. # A twodimensional array stores rows sequentially. Rows=5 Columns=5 declare a alpha load_alpha() { local rc=0 local index for i in A B C D E F G H I J K L M N O P Q R S T U V W X Y do local row=`expr $rc / $Columns` local column=`expr $rc % $Rows` let "index = $row * $Rows + $column" alpha[$index]=$i # alpha[$row][$column] let "rc += 1" done # Simpler would be #declare a alpha=( A B C D E F G H I J K L M N O P Q R S T U V W X Y) # but this somehow lacks the "flavor" of a twodimensional array. } print_alpha() { local row=0 local index echo while [ "$row" lt "$Rows" ] # Print out in "row major" order do # columns vary # while row (outer loop) remains the same. local column=0 while [ "$column" lt "$Columns" ] # char alpha [Rows] [Columns]; # Unnecessary declaration.

131

do let "index = $row * $Rows + $column" echo n "${alpha[index]} " # alpha[$row][$column] let "column += 1" done let "row += 1" echo done # The simpler equivalent is # echo ${alpha[*]} | xargs n $Columns echo } filter () # Filter out negative array indices. { echo n " " # Provides the tilt. if [[ "$1" ge 0 && "$1" lt "$Rows" && "$2" ge 0 && "$2" lt "$Columns" ]] then let "index = $1 * $Rows + $2" # Now, print it rotated. echo n " ${alpha[index]}" # alpha[$row][$column] fi } rotate () # Rotate the array 45 degrees { # ("balance" it on its lower lefthand corner). local row local column for (( row = Rows; row > Rows; row )) # Step through the array backwards. do for (( column = 0; column < Columns; column++ )) do if [ "$row" ge 0 ] then let "t1 = $column $row" let "t2 = $column" else let "t1 = $column" let "t2 = $column + $row" fi

132

filter $t1 $t2 # Filter out negative array indices. done echo; echo done # Array rotation inspired by examples (pp. 143146) in # "Advanced C Programming on the IBM PC", by Herbert Mayer # (see bibliography). } ## load_alpha # Load the array. print_alpha # Print it out. rotate # Rotate it 45 degrees counterclockwise. ## # This is a rather contrived, not to mention kludgy simulation.

Chy chng trnh

1.8 quy
Tt c cc shell_script u c tnh quy (recursivity). V d: shell_script dir_tree hin th cy th mc bt u t th mc l i ca n.
$cat dir_tree if test -d $1 then echo $1 is a directory for j in $1/* do $0 $j done #$0 tn shell_script chnh l dir_tree

133

fi $dir_tree /usr /usr is a directory /usr/adm is a directory /usr/adm/acct is a directory /usr/adm/acct/fiscal is a directory /usr/adm/acct/nite is a directory /usr/adm/sa is a directory /usr/bin is a directory

V d: shell_script s dng hm c quy


Cat > dequy # goi ham moi khi nhap vao ky tu 2 ham_dequy() { echo " nhap vao ky tu "
read a case $a in 1) echo "nhap 1";; 2) ham_dequy ;; 3) exit ;; Esac } # ket thuc ham ham_dequy ^D # goi ham

1.9 Lp trnh hi thoi


C php chung ca cc hi thoi hay c s dng:
dialog --title {title} --backtitle {backtitle} {Box options} where Box options can be any one of following --yesno --msgbox --infobox --inputbox --textbox --menu {text} {text} {text} {text} {file} {height} {width} {height} {width} {height} {width} {height} {width} [{init}] {height} {width}

{text}

{height} {width} {menu} {height} {tag1} {item1}...

Infobox
M ngun chng trnh ( dia1)
$ cat > dia1 dialog --title "Linux Dialog Utility Infobox" --backtitle "Linux Shell Script Tutorial" --infobox "This is dialog box called infobox, which is used \

134

to

show

some

information

on

screen,

Thanks

to

Savio

Lam

and\

Stuart Herbert to give us this utility. Press any key. . . " 7 50 ; read

Chy chng trnh


$ sh dia1

y s 7 v 50 l chiu cao v chiu rng ca hp thoi.

Message box (msgbox)


M ngun chng trnh (dia2)
$cat > dia2 dialog --title "Linux Dialog Utility Msgbox" --backtitle "Linux Shell\ Script Tutorial" --msgbox "This is dialog box called msgbox, which is\ used to show some information on screen which has also Ok button,\ Thanks to Savio Lam and Stuart Herbert to give us this utility. Press any key. . . " 9 50

Chy chng trnh


$ sh dia2

Yesno box
M ngun chng trnh (dia3) 135

$ cat > dia3 dialog --title "Alert : Delete File" --backtitle "Linux Shell Script \ Tutorial" --yesno "\nDo you want to delete\ '/usr/letters/jobapplication'file" 7 60 sel=$? case $sel in 0) echo "User select to delete file";; 1) echo "User select not to delete file";; 255) echo "Canceled by user by pressing [ESC] key";; esac

Chy chng trnh


$ sh dia3

Input Box (inputbox)


M ngun chng trnh (dia4)
dialog --title "Inputbox - To take input from you" --backtitle "Linux Shell Script Tutorial" --inputbox "Enter your name please" 8 60

2>/tmp/input.$$ sel=$? na=`cat /tmp/input.$$` case $sel in 0) echo "Hello $na" ;; 1) echo "Cancel is Press" ;; 255) echo "[ESCAPE] key pressed" ;; esac rm -f /tmp/input.$$

Chy chng trnh


$ sh dia4

136

1.10 Mt s cc lnh thng dng trong lp trnh Shell 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. 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

137

Label

C php ny ni ln rng command c cc input cho n khi n gp label. Di y l v d v cch s dng cu trc ny:
#!/bin/bash #################################### USER=anonymous PASS=kwall@xmission.com ftp open cd ls close END -i -n << END ftp.caldera.com /pub

user $USER $PASS

Hin dng vn bn
Lnh echo hin ra dng vn bn c ghi ngay trong dng lnh c c php: echo [ty chn] [xu k t] vi cc ty chn nh sau: - 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.

Lnh set
gn kt qu a ra t lnh shell ra cc bin t ng, ta dng lnh set. Dng lnh set: set `<lnh>` Sau lnh ny, kt qu thc hin lnh khng hin ra 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

138

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 $5 = EST $2=Oct $6 = 1998 $3 = 20 $4 = 7:20:15

1.11 Mt s v d v Shell Chng trnh tnh tng 2 s


M ngun chng trnh (tong1.sh)
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ # Q1.Script to sum to nos if [ $# -ne 2 ] then echo "Usage - $0 echo " print sum" exit 1 fi echo "Sum of $1 and $2 is `expr $1 + $2`" x y" Where x and y are two nos for which I will

Chng trnh in ra k qu nh 5,4,3,2,1


M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ # Q3

139

# Algo: # 1) START: set value of i to 5 (since we want to start from 5, # if you want to start from other value put that value) # 2) Start While Loop # 3) Chechk, Is value of i is zero, If yes goto step 5 else # # i=5 while test $i != 0 do echo "$i" i=`expr $i - 1` done continue with next step goto step 3 # 4) print i, decement i by 1 (i.e. i=i-1 to goto zero) and # 5) END

Chng trnh tnh tng: 1-> n


M ngun chng trnh (tong.sh)
#!/bin/sh echo Chuong trinh tinh tong 1- $1 index=0 tong=0 while [ $index -lt $1 ] do index=$(($index + 1)) tong=$(($tong + $index)) done echo "Tong 1-$1= $tong" exit 0

Chy chng trnh


# sh tong 100

Chng trnh tnh giai tha M ngun chng trnh (giaithua.sh)


#!/bin/sh echo Chuong trinh tinh $1! index=0 gt=1 while [ $index -lt $1 ] do

140

index=$(($index + 1)) gt=$(($gt * $index)) done echo "$1!= $gt" exit 0

Chy chng trnh


# sh giaithua 5

Chng trnh m s dng ca mt file


M ngun chng trnh (demdong.sh)
#!/bin/sh echo Chuong trinh dem so dong cua tap tin $1 { n=0 while read line do n=$(($n + 1)) done echo So dong cua tap tin $1 la : $n } < $1 exit 0

Chy chng trnh


# sh demdong vidu.txt

Chng trnh m s t trong mt file


M ngun chng trnh (demtu.sh)
#!/bin/sh echo Chuong trinh dem so tu cua tap tin $1 { n=0 while read line do for wd in $line do n=$(($n + 1)) done done echo Tong so tu cua tap tin $1 la : $n }<$1 exit 0

141

Chy chng trnh


# sh demtu vidu.txt

Chng trnh tm dng di nht trong tp tin


M ngun chng trnh (dongmax.sh)
#!/bin/sh echo Chuong trinh tim dong dai nhat trong tap tin $1 { n=0 max=0 dong= while read line do n=`expr length $line` if [ $n -gt $max ] then dong=$line max=$n fi done echo Dong trong tap tin $1 co do dai max = $max la : $dong }<$1 exit 0

Chy chng trnh


# sh dongmax vidu.txt

Chng trnh tm mt xu trong mt tp tin


M ngun chng trnh (timxau.sh)
#!/bin/sh echo Chuong trinh tim xau $1 trong tap tin $2 { wordlen=`expr length $1` while read textline do textlen=`expr length $textline` # Do dai cua dong vua doc end=$(($textlen - wordlen + 1)) index=1 while [ $index -le $end ] do temp=`expr substr $textline $index $wordlen # Do dai tu can tim

142

if [ $temp = $1 ] then echo Tim thay $1 tai dong $textline break fi index=$(($index + 1)) done done }<$2 exit 0

Chy chng trnh


# sh timxau abc vidu.txt

Chng trnh kim tra s nguyn t


M ngun chng trnh (nguyento.sh)
$ cat > n=$1 for (( i=2; i< n; i++ )) do temp=`expr $n % $i` if test $temp eq 0; then echo khng nguyn t exit fi done echo la nguyn t nt.sh

Chy chng trnh


# sh nguyento 5

Chng trnh tnh c chung ln nht ca hai s


M ngun chng trnh (ucln.sh)
if then echo truyn tham s fi g=0 x=$1 y=$2 if test $x lt 0 then test $n -ne 2

143

x=`expr 0 -$x ` fi if [ $y lt 0 ] then $y=`expr 0 -$y` while [ $x gt 0 ] do g=$x x=`expr $y % $x` y=$g done echo ucln l :$g

Chy chng trnh


# sh ucln 4 8

Chng trnh tm s ln nht trong 3 tham s truyn vo


M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ # Q2. Script to find out bigest number # Algo: # # # # # # # # 1) START: Take three nos as n1,n2,n3. 2) Is n1 is greater than n2 and n3, if yes print n1 is bigest no goto step 5, otherwise goto next step 3) Is n2 is greater than n1 and n3, if yes print n2 is bigest no goto step 5, otherwise goto next step 4) Is n3 is greater than n1 and n2, if yes print n3 is bigest no goto step 5, otherwise goto next step 5) END if [ $# -ne 3 ] then echo "$0: number1 number2 number3 are not given" >&2 exit 1 fi n1=$1 n2=$2 n3=$3 if [ $n1 -gt $n2 ] && [ $n1 -gt $n3 ]

144

then echo "$n1 is Bigest number" elif [ $n2 -gt $n1 ] && [ $n2 -gt $n3 ] then echo "$n2 is Bigest number" elif [ $n3 -gt $n1 ] && [ $n3 -gt $n2 ] then echo "$n3 is Bigest number" elif [ $1 -eq $2 ] && [ $1 -eq $3 ] && [ $2 -eq $3 ] then echo "All the three numbers are equal" else echo "I can not figure out which number is biger" fi

Chng trnh in ra s theo dng ngc li, nu 123 th in ra 321


M ngun chng trnh (daonguoc.sh)
# Algo: # 1) Input number n # 2) Set rev=0, sd=0 # 3) Find single digit in sd as n % 10 it will give (left most digit) # 4) Construct revrse no as rev * 10 + sd # 5) Decrment n by 1 # 6) Is n is greater than zero, if yes goto step 3, otherwise next step # 7) Print rev if [ $# -ne 1 ] then echo "Usage: $0 number" echo " echo " exit 1 fi n=$1 rev=0 sd=0 while [ $n -gt 0 ] do sd=`expr $n % 10` rev=`expr $rev \* 10 + $sd` I will find reverse of given number" For eg. $0 123, I will print 321"

145

n=`expr $n / 10` done echo "Reverse number is $rev"

Chy chng trnh


# sh daonguoc.sh 1234

Chng trnh in ra tng ca cc ch s, v d 123 kt qu l 1+2+3 = 6


M ngun chng trnh (tongso.sh)
Algo: #1) Input number n #2) Set sum=0, sd=0 #3) Find single digit in sd as n % 10 it will give (left most digit) #4) Construct sum no as sum=sum+sd #5) Decrment n by 1 #6) Is n is greater than zero, if yes goto step 3, otherwise next step #7) Print sum # if [ $# -ne 1 ] then echo "Usage: $0 number" echo " I will find sum of all digit for given number" echo " For eg. $0 123, I will print 6 as sum of all digit (1+2+3)" exit 1 fi n=$1 sum=0 sd=0 while [ $n -gt 0 ] do sd=`expr $n % 10` sum=`expr $sum + $sd` n=`expr $n / 10` done echo "Sum of digit for numner is $sum"

Chng trnh tnh tng ca hai s thc a=5.66, b=8.67, c=a+b M ngun chng trnh tong.sh
a=5.66 b=8.67 c=`echo $a + $b | bc` # u ra ca php tnh tng s c bc tnh

146

echo "$a + $b = $c"

Chy chng trnh


# sh tong.sh

Chng trnh s dng getopts


M ngun chng trnh (ham.sh)
# -c clear # -d dir # -m mc # -e vi { editor } # Function to clear the screen cls() { clear echo "Clear screen, press a key . . ." read return } # Function to show files in current directory show_ls() { ls echo "list files, press a key . . ." read return } # Function to start mc start_mc() { if which mc > /dev/null ; then mc echo "Midnight commander, Press a key . . ." read else echo "Error: Midnight commander not installed, Press a key . . ." read fi return }

147

# Function to start editor start_ed() { ced=$1 if which $ced > /dev/null ; then $ced echo "$ced, Press a key . . ." read else echo "Error: $ced is not installed or no such editor exist, Press a key . . ." read fi return } # Function to print help print_help_uu() { echo "Usage: $0 -c -d -m -v {editor name}"; echo "Where -c clear the screen"; echo " echo " echo " return } # Main procedure start here # Check for sufficent args if [ $# -eq 0 ] ; then print_help_uu exit 1 fi # Now parse command line arguments while getopts cdme: opt do case "$opt" in c) cls;; d) show_ls;; m) start_mc;; e) thised="$OPTARG"; start_ed $thised ;; \?) print_help_uu; exit 1;; -d show dir"; -m start midnight commander shell"; -e {editor}, start {editor} of your choice";

148

esac done

Chy chng trnh


# sh ham.sh

Chng trnh in ra date, time, username, v th mc hin thi


M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ echo "Hello, $LOGNAME" echo "Current date is `date`" echo "User is `who i am`" echo "Current direcotry `pwd`"

Vit Shell script in ra "Hello World" ( in Bold, Blink effect, and in different colors like red, brown)
M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ # echo command with escape sequance to give differnt effects # Syntax: echo -e "escape-code your message, var1, var2 etc" # For eg. echo -e "\033[1m # # # # clear echo -e "\033[1m Hello World" echo -e "\033[5m Blink" echo -e "\033[0m Hello World" echo -e "\033[31m Hello World" echo -e "\033[32m Hello World" echo -e "\033[33m Hello World" echo -e "\033[34m Hello World" echo -e "\033[35m Hello World" # bold effect # blink effect # back to noraml # Red color # Green color # See remaing on screen | | Escape code Hello World" | | Message

149

echo -e "\033[36m Hello World" echo -e -n "\033[0m " echo -e "\033[41m Hello World" echo -e "\033[42m Hello World" echo -e "\033[43m Hello World" echo -e "\033[44m Hello World" echo -e "\033[45m Hello World" echo -e "\033[46m Hello World" echo -e "\033[0m Hello World" # back to noraml # back to noraml

Vi ra Shell Script th hin ng h s


M ngun chng trnh (ms)
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ echo echo "Digital Clock for Linux" echo "To stop this clock use command kill pid, see above for pid" echo "Press a key to continue. . ." while : do ti=`date +"%r"` echo -e -n "\033[7s" # # Show the clock # tput cup 0 69 echo -n $ti echo -e -n "\033[8u" # #Delay fro 1 second # sleep 1 done ^D # row 0 and column 69 is used to show clock # put clock on screen #restore current screen postion & attributs #save current screen postion & attributes

Chy chng trnh


#sh ms &

Shell script to convert upercase filename to lowercase in current


M ngun chng trnh (up2low) 150

#!/bin/bash # up2low : script to convert upercase filename to lowercase in current # working dir # Author : Vivek G. Gite <vivek@nixcraft.com> #Copy this file to your bin directory i.e. $HOME/bin as cp rename.awk # $HOME/bin AWK_SCRIPT="rename.awk" # change your location here awkspath=$HOME/bin/$AWK_SCRIPT ls -1 > /tmp/file1.$$ tr "[A-Z]" "[a-z]" < /tmp/file1.$$ > /tmp/file2.$$ paste /tmp/file1.$$ /tmp/file2.$$ > /tmp/tmpdb.$$ rm -f /tmp/file1.$$ rm -f /tmp/file2.$$ # Make sure awk script exist if [ -f $awkspath ]; then awk -f $awkspath /tmp/tmpdb.$$ else echo -e "\n$0: Fatal error - $awkspath not found" echo -e "\nMake sure \$awkspath is set correctly in $0 script\n" fi rm -f /tmp/tmpdb.$$

Chng trnh xem cc thng tin h thng


M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ nouser=`who | wc -l`
echo -e "User name: $USER (Login name: $LOGNAME)" >> /tmp/info.tmp.01.$$$ echo -e "Current Shell: $SHELL" >> /tmp/info.tmp.01.$$$ echo -e "Home Directory: $HOME" >> /tmp/info.tmp.01.$$$ echo -e "Your O/s Type: $OSTYPE" >> /tmp/info.tmp.01.$$$ echo -e "PATH: $PATH" >> /tmp/info.tmp.01.$$$ echo -e "Current directory: `pwd`" >> /tmp/info.tmp.01.$$$ echo -e "Currently Logged: $nouser user(s)" >> /tmp/info.tmp.01.$$$

if [ -f /etc/redhat-release ] then echo -e "OS: `cat /etc/redhat-release`" >> /tmp/info.tmp.01.$$$

151

fi if [ -f /etc/shells ] then echo -e "Available Shells: " >> /tmp/info.tmp.01.$$$ echo -e "`cat /etc/shells`" fi if [ -f /etc/sysconfig/mouse ] then echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer Mouse Information: " >> /tmp/info.tmp.01.$$$ echo -e "------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "`cat /etc/sysconfig/mouse`" >> /tmp/info.tmp.01.$$$ fi echo -e "--------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer CPU Information:" >> /tmp/info.tmp.01.$$$ echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/cpuinfo >> /tmp/info.tmp.01.$$$ echo -e "-----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer Memory Information:" >> /tmp/info.tmp.01.$$$ echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/meminfo >> /tmp/info.tmp.01.$$$ if [ -d /proc/ide/hda ] then
echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Hard disk information:" >> /tmp/info.tmp.01.$$$ echo -e "-----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Model: `cat /proc/ide/hda/model` " >> /tmp/info.tmp.01.$$$ echo -e "Driver: `cat /proc/ide/hda/driver` " >> /tmp/info.tmp.01.$$$ echo -e "Cache size: `cat /proc/ide/hda/cache` " >> /tmp/info.tmp.01.$$$

>> /tmp/info.tmp.01.$$$

fi echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "File System (Mount):" >> /tmp/info.tmp.01.$$$ echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/mounts >> /tmp/info.tmp.01.$$$ if which dialog > /dev/null then
dialog Ver.1.0" --backtitle --title "Linux "Press Software Up/Down Diagnostics Keys to (LSD) Shell Script move" --textbox

/tmp/info.tmp.01.$$$ 21 70

else cat /tmp/info.tmp.01.$$$ |more

152

fi rm -f /tmp/info.tmp.01.$$$

1.12 Shell con


Mt Shell Script c th chy mt tin trnh con, tin trnh ny gi l shell con. Cc lnh trong mt Shell Script cng c th coi l mt shell con ca n ( command1; command2; command3; ...), bin trong mt shell con khng c s dng khi ra khi phm vi ca shell con , n c coi l bin cc b ca shell con.
V d1: Phm vi ca bin trong shell con
#!/bin/bash # subshell.sh echo outer_variable=Outer ( inner_variable=Inner echo "From subshell, \"inner_variable\" = $inner_variable" echo "From subshell, \"outer\" = $outer_variable" ) echo if [ -z "$inner_variable" ] then echo "inner_variable undefined in main body of shell" else echo "inner_variable defined in main body of shell" fi echo "From main body of shell, \"inner_variable\" = $inner_variable" # $inner_variable will show as uninitialized because # variables defined in a subshell are "local variables". echo exit 0

2. Lp trnh C trn Linux


Linux cung cp nhiu cng c h tr pht trin cc ng dng da trn ngn ng C v C++, ni dung chnh ca chng ny l m t cc cng c h tr bin dch, g li cc ng dng C trn nn tng Linux.
Trnh bin dch gcc. S dng gdb g li.

2.1 Trnh bin dch gcc


153

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. Ni dung chi tit v cc ngn ng lp trnh c trn Linux thuc phm vi ca cc ti liu khc. gcc cho ngi lp trnh kim tra trnh bin dch. Qu trnh bin dch bao gm bn giai on:
Tin x l. Bin dch. Tp hp. Lin kt.

Ta c th dng qu 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 qu 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;

bin dch v chy chng trnh ny hy g:


1 2 3 $ $ 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. 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: 154

gcc

hello.c

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 .c .c, .cpp .i .ii .S, .s .o .a, .so Kiu M ngun ngn ng C M ngun ngn ng C++ M ngun C tin x l M ngun C++ tin x l M ngun Hp ng M i tng bin dch (obj) M th vin bin dch

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: 155

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 lF00 g

Lin kt da trn libF00

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.

Ch : Nu khng c ty chn o th kt qu s to ra mt file thc thi c tn l a.out.


$gcc thu.c

Kt qu s to ra file a.out, hin th kt qu s dng lnh sau :


$./ a.out

Nu c thm ty chn o kt qu s to ra file thc thi vi tn do ngi dng to ra.


$ gcc o thu thu.c

156

$ sh thu

2.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 qu 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 4. gcc -c 6. gcc -c editor.o screen.o keyboard.o editor.c screen.c 3. editor.o : editor.c editor.h keyboard.h screen.h 5. screen.o : screen.c screen.h 7. keyboard.o : keyboard.c keyboard.h

157

8. gcc -c 9. clean: 10. rm *.o

keyboard.c

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).

2.3 S dng nhn file (m t file file descriptor)


Trong Linux, lm vic vi file ta s dng nhn 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 nhn file 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

158

dng khi to mt file. Tham s flags nhn mt trong cc gi tr O_RDONLY, O_WRONLY hoc O_RDWR C O_RDONLY O_WRONLY O_RDWR O_CREAT O_EXCL O_NOCTTY O_TRUNC O_APPEND O_NONBLOCK O_NODELAY O_SYNC M file c M file ghi M file c v ghi To file nu cha tn ti file Tht bi nu file c Khng iu khin tty nu tty m v tin trnh khng iu khin tty Ct file nu n tn ti Ni thm v con tr t cui file Nu mt qu trnh khng th hon thnh m khng c tr, tr v trng thi trc Tng t O_NONBLOCK Thao tc s khng tr v cho n khi d liu c ghi vo a hoc thit b khc 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 Ch gii

Hm close()
Chng ta nn ng nhn 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 qu 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);

159

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);

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 nhn 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 {

160

dev_t int_t mode_t nlink_t uid_t gid_t dev_t off_t unsigned long unsigned long time_t time_t time_t };

st_dev; st_ino; st_mode; st_nlink; st_uid; st_gid; st_rdev; st_size;

/ * thit b */ /* inode */ /* ch bo v */ /* s lng cc lin kt cng /* s hiu ca ngi ch */ /* s hiu nhm ca ngi ch*/ /* kiu thit b */ /* kch thc bytes */ /* kch thc khi*/ */

st_blksize; st_atime; st_mtime; st_ctime;

st_blocks; /* S lng cc khi s dng*/ /* thi gian truy cp cui cng*/ /* thi gian cp nht cui cng */ /* thi gian thay i cui cng */

Hm fchown()
Li gi h thng fchown() cho php ta thay 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 nhn 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 nhn 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);

Mt v d v cch s dng cc hm thao tc vi file


/* filedes_io.c */ #include <sys/types.h> #include <sys/stat.h> #include <sys/file.h> #include <fcntl.h>

161

#include <unistd.h> #include <assert.h> #include <errno.h> #include <string.h> #include <stdio.h> /*for print */ char sample1[] = "This is sample data 1\n"; char sample2[] = "This is sample data 2\n"; char data[16]; main() { int fd; int rc; struct stat statbuf; printf("Creating file\n"); fd = open("junk.out", O_WRONLY | O_CREAT| O_TRUNC, 0666); assert(fd>=0); rc = write(fd, sample1, strlen(sample1) ); assert(fd>=0); rc = write(fd, sample1, strlen(sample1)); assert(rc == strlen(sample1)); close(fd); printf("Appending to file\n"); fd = open("junk.out", O_WRONLY| O_APPEND); assert(fd>=0); printf("locking file\n"); rc = flock(fd, LOCK_EX); assert(rc == 0); printf("sleeping for 10 seconds\n"); sleep(10); printf("writing data\n"); rc = write(fd, sample2, strlen(sample2)); assert(rc == strlen(sample2)); printf("unlocking file\n"); rc = flock(fd, LOCK_UN); assert(rc == 0); close(fd); printf("Reading file \n"); fd = open("junk.out", O_RDONLY); assert(fd >=0); while (1)

162

{ rc = read(fd, data, sizeof (data)); if(rc > 0) { data[rc]=0; printf(" Data read(rc = %d): <%s>\n", rc, data); } else if(rc == 0) { printf(" End of file read \n"); break; } else { perror("read error"); break; } } close(fd); printf(" Fiddling with inode\n"); fd = open (" junk.out", O_RDONLY); assert (fd >= 0); printf (" changing file mode\n"); rc = fchmod ( fd, 0600); assert(rc == 0); if(getuid () == 0 ) { printf("changing file owner \n "); rc = fchown(fd, 99, 99); assert(rc == 0); } else { printf("not changing file owner\n"); } fstat(fd, &statbuf); printf(" file mode = o% (octal) \n", statbuf.st_mode); printf("Owner uid = %d \n", statbuf.st_uid); printf(" Owner gid = %d \n", statbuf.st_uid); close(fd); }

2.4 Th vin lin kt


163

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 (dynamic library - ging nh DLL trn MS Windows). Th vin tnh c lin kt c nh vo trong chng trnh trong qu 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 qu 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 qu 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 file liberr.h */ #ifndef #define _LIBERR_H _LIBERR_H

#include <stdarg.h> /* in ra mt thng bo li ti vic gi 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 /* in ra mt thng *fmt , ); 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>

164

#include <stdlib.h> #include <stdio.h> #include "liberr.h" #define MAXLINELEN 500 void err_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); return; } void err_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); exit(1); } void log_ret(char *logfile, const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt,ap, logfile); va_end(ap); return; } 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];

165

FILE *plf; save_err = errno; vsprintf(buf,fmt, ap); sprintf( buf+strlen(buf), 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; } ": %s", strerror(save_err));

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 fputs("Testing err_quit()...\n", stdout);

166

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", foo"); #endif /* LOG_QUIT_SKIP */ return EXIT_SUCCESS; } "%s %s", "log_quit()", "failed to open

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.

167

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

Xy dng th vin dng chung hi khc so vi th vin tnh, qu 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 qu 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 qu trnh lin kt da vo th vin C, s dng tu chn l ca gcc Tr li th vin x l 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

168

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 x 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);

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 169

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) {

170

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) { 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 tac 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

2.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. Bng di lit k cc tu chn ca lnh nm: Tu chn -C| -demangle Miu t Chuyn tn k t vo tn mc ngi dng cho d c. 171

-s|-print-armap -u| -undefined-only - l | -line-numbers

Khi s dng cc file lu tr (phn m rng l .a), in ra cc ch s ca module cha hm . Ch a ra cc hm khng c nh ngha trong file ny, tc l cc hm c nh ngha mt file khc. S dng thng tin g ri in ra s dng ni hm c nh ngha.

V d: xem cc hm c m ha trong file nh phn a.out (file nh phn sau khi dch filedes_io.c)
bt Desktop # nm a.out 08049da4 d _DYNAMIC 08049e70 d_GLOBAL_OFFSET_TABLE_ 08048be4 R _IO_stdin_used w _Jv_RegisterClasses 08049d94 d __CTOR_END__ 08049d90 d __CTOR_LIST__ 08049d9c d __DTOR_END__ 08049d98 d __DTOR_LIST__ 08048d8c r __FRAME_END__ 08049da0 d __JCR_END__ 08049da0 d __JCR_LIST__ 08048be8 r __PRETTY_FUNCTION__.2764 U__assert_fail@@GLIBC_2.0 08049ef8 A __bss_start 08049ebc D __data_start 08048b90 t __do_global_ctors_aux 080485f0 t __do_global_dtors_aux 08049ec0 D __dso_handle 08048b50 T __fstat U __fxstat@@GLIBC_2.0 w __gmon_start__ 08048b47 T __i686.get_pc_thunk.bx 08049d90 d __init_array_end 08049d90 d __init_array_start 08048ad0 T __libc_csu_fini 08048ae0 T __libc_csu_init U__libc_start_main@@GLIBC_2.0 08049ef8 A _edata 08049f0c A _end 08048bc4 T _fini 08048be0 R _fp_hw 08048470 T _init 080485a0 T _start 080485c4 t call_gmon_start U close@@GLIBC_2.0 08049ef8 b completed.5745 08049efc B data 08049ebc W data_start U fchmod@@GLIBC_2.0 U fchown@@GLIBC_2.0 U flock@@GLIBC_2.0 08048620 t frame_dummy 08048b50 W fstat U getuid@@GLIBC_2.0 08048644 T main U open@@GLIBC_2.0 08049ec4 d p.5743 U perror@@GLIBC_2.0 U printf@@GLIBC_2.0 U puts@@GLIBC_2.0 U read@@GLIBC_2.0 08049ec8 D sample1 08049edf D sample2 U sleep@@GLIBC_2.0 U write@@GLIBC_2.0

Cng c ar
Lnh ar s dng c php sau: ar {dmpqrtx} [thnh vin] file 172

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.
bt Desktop # ar a.out ar: illegal option -- . Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [membername] [count] archive-file file... ar -M [<mri-script] commands: d m[ab] p q[f] archive t x[o] modifiers: [a] - put file(s) after [member-name] [b] - put file(s) before [member-name] (same as [i]) [N] - use instance [count] of name [f] - truncate inserted file names [P] - use full path names when matching [o] - preserve original dates [u] -only replace files that are newer than current archive contents eneric modifiers: [c] - do not warn if the library had to be created [s] - create an archive index (cf. ranlib) [S] - do not build a symbol table [v] - be verbose [V] - display the version number @<file> - read options from <file> emulation options: No emulation specific options ar: supported targets: elf64-little elf32-i386 elf64-big a.out-i386-linux elf32-little efi-app-ia32 srec elf64-x86-64 elf32-big - display contents of archive extract file(s) from the archive command specific - delete file(s) from the archive - move file(s) in the archive - print file(s) found in the archive - quick append file(s) to the archive

r[ab][f][u] - replace existing or insert new file(s) into the

symbolsrec tekhex binary ihex trad-core

173

2.6 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.

2.7 S dng gdb g li


S dng gdb g li khi bin dch file ngun c, c php: # gdb fileName Bng cc lnh c bn ca gdb:
Lnh file kill list next Np file thc thi s c g li Kt thc chng trnh ang c g li. Lit k cc on ca m ngun c s dng to file thc thi. Tin ln mt dng trong m ngun ti hm hin thi, khng dng chuyn n nhng hm khc. step Tin ln mt dng trong m ngun ti hm hin thi, c th dng chuyn n nhng hm khc. run quit watch break Thc thi chng trnh c g li. Kt thc gdb. Cho php ta xem gi tr bin s ca chng trnh mi khi gi tr thay i. Thit lp mt im ngt trong m; cho php chng trnh ngng lm vic g mi khi gp im ngt ny. make Cho php thc thi li chng trnh m khng cn thot khi gdb hoc s dng ca s khc. shell Cho php thc thi lnh Shell m khng cn ngng gdb. M t

174

CHNG 5: QUN L TI NGUYN V TRUYN THNG TRONG LINUX


Trong chng ny phm vi tm hiu ti nguyn gm 3 ni dung l: Tin trnh, a cng, ngi dng hay nhm ngi dng.

1. Qun l tin trnh


1.1 Khi nim
Linux l h iu hnh a ngi dng, a tin trnh, bt c chng trnh no ang chy u c coi l mt tin trnh. Tin trnh (process) l mt chng trnh n chy trn khng gian a ch o ca n. Cn phn bit tin trnh vi lnh, mt dng lnh shell c th sinh ra nhiu tin trnh. C th c nhiu tin trnh cng chy mt lc. V d dng lnh ls -l | sort | more s khi to ba tin trnh: ls, sort v more

Hnh 5.1Cu trc ca mt tin trnh trong Unix C 3 loi tin trnh chnh trn Linux : Tin trnh vi i thoi (Interactive processes): l tin trnh khi ng v qun l bi shell, k c tin trnh forthground hoc background. Tin trnh batch (Batch processes): Tin trnh khng gn lin n bn iu khin (terminal) v c nm trong hng i ln lt thc hin.

175

Tin trnh n trn b nh (Daemon processes): L cc tin trnh chy di nn (background). Cc tin trnh ny thng c khi ng t u. a s cc chng trnh server cho cc dch v chy theo phng thc ny. y l cc chng trnh sau khi c gi ln b nh, i th ng cc yu cu chng trnh khch (client) tr li sau cc cng xc nh (cng l khi nim gn lin vi giao thc TCP/IP BSD socket. Chng ta s gii thch r trong phn TCP/IP). Hu ht cc dch v trn Internet nh mail, Web, Domain Name Service chy theo nguyn tc ny. Cc chng trnh c gi l cc chng trnh daemon v tn ca n thng kt thc bng k t d nh named, inetd K t d cui c pht m ri ra nh trong ting vit. V d named c pht m l nm . Tin trnh c th tri qua nhiu trng thi khc nhau v ti mt thi im mt tin trnh

ri vo mt trong cc trng thi . Bng di y gii thiu cc trng thi c bn ca tin trnh trong Linux.
K hiu D R S bng mt tn hiu. (runnable) trng thi sn sng thc hin, tc l tin trnh c th thc hin c nhng ch n lt thc hin v mt tin trnh khc ang c CPU. (sleeping) trng thi tm dng, tc l tin trnh tm dng khng hot ng (20 giy hoc t hn) T Z W < N L (traced or stopped) trng thi dng, tin trnh c th b treo bi mt tin trnh ngoi (zombie process) tin trnh kt thc thc hin, nhng n vn c tham chiu trong h thng khng c cc trang thng tr tin trnh c mc u tin cao hn tin trnh c mc u tin thp hn c cc trang kha bn trong b nh ngha (uninterruptible sleep) trng thi ny tin trnh b treo v khng th chy li n

S biu din cc trng thi v vic chuyn trng thi trong UNIX c trnh by trong hnh di y (S hiu trng thi qu trnh xem trong hnh v).

176

Thc hin mc ngi dng (1)

Hon thin (9)

Thc hin mc nhn (2)

Sn sng sang mc ngi dng (7)

Ch i thiu ti nguyn (4)

Sn sng thc hin (3) i b nh thc hin (5)

Ch i b nh ngoi (6)

Qu trnh pht sinh (8)

Hnh 5.2 S trng thi cc tin trnh Khi qu trnh c pht sinh n trng thi (8), ty thuc vo tnh trng b nh qu trnh c phn phi b nh trong (3) hay b nh ngoi (5). Trng thi (3) th hin qu trnh sn sng thc hin, cc thnh phn ca n b nh trong ch i CPU thc hin. Vic thc hin tip theo ty thuc vo trng thi trc ca n. Nu ln u pht sinh, n cn i ti thc hin mc nhn hon thin cng vic li gi fork s t trng thi (3) sang trng thi (1), trong trng hp khc, t trng thi (3) n i ti trng thi ch di CPU mc ngi dng (7). Trong trng thi thc hin mc ngi dng (1), qu trnh i ti trng thi (2) khi gp li gi h thng hoc hin tng ngt xy ra. T trng thi (1) ti trng thi (7) khi ht lng t thi gian. Trng thi (4) l trng thi ch i trong b nh cn trng thi (6) th hin vic ch i trong b nh ngoi. Cung chuyn t trng thi (2) vo ngay trng thi (2) xy ra khi qu trnh trng thi thc hin mc nhn, nhn h thng gi cc hm x l ngt tng ng.

1.2. Cc lnh c bn trong qun l tin trnh 1.2.1 S dng lnh ps


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 qu trnh no dng hoc l c chy trong ch nn. 177

Cch phc tp hn l s dng lnh ps. Lnh ny cho bit thng tin y nht v cc qu trnh ang chy trn h thng. V d:
# ps PID TTY TIME CMD 00:00:00 bash 00:00:00 ps 7813 pts/0 7908 pts/0 #

(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: 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:
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

Thit t nh 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

178

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 %mem %G %P %U %c %p %x %y % CPU c s dng cho tin trnh % b nh c s dng chy tin trnh tn nhm ngi dng ch s ca tin trnh cha khi ng ra tin trnh con nh danh ngi dng lnh to ra tin trnh ch s ca tin trnh thi gian chy tin trnh thit b u cui trn tin trnh c thc hin

V d: mun xem cc thng tin nh tn ngi dng, tn nhm, ch s tin trnh, ch s tin trnh khi to ra tin trnh, tn thit b u cui, thi gian chy tin trnh, lnh khi to tin trnh, hy g lnh:
# ps -o '%U %G %p %P %y %x %c' USER GROUP PID PPID TTY TIME COMMAND root root 1929 1927 pts/1 00:00:00 bash root root 2279 1929 pts/1 00:00:00 ps

Nu mun xem ngi dng X no ang s dng nhng tin trnh no ta c th s dng lnh sau: ps -u X

1.2.2 Lnh hy tin trnh kill


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. Mt s ty chn:
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: S 1 Tn SIGHUP ngha (hang up) y l tn hiu c gi n tt c cc tin trnh ang chy trc khi logout khi h thng 179

2 9 15

SIGINT SIGKILL

(interrupt) y l tn hiu c gi khi nhn CTRL+c (kill) tn hiu ny s dng tin trnh ngay lp tc php chng trnh xa cc file tm.

SIGTERM tn hiu ny yu cu dng tin trnh ngay lp tc, nhng cho

p lnh kill s ch a ra ch s ca tin trnh m khng gi mt tn hiu no. 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) V d:


# ps PID TTY TIME CMD 2240 pts/2 00:00:00 bash 2276 pts/2 00:00:00 man 2277 pts/2 00:00:00 more 2280 pts/2 00:00:00 sh 2281 pts/2 00:00:00 sh # kill 2277 PID TTY TIME CMD 2240 pts/2 00:00:00 bash 2276 pts/2 00:00:00 man 2280 pts/2 00:00:00 sh 2281 pts/2 00:00:00 sh

1.2.3 Lnh sleep 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: sleep [tu-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

180

1.2.4 Xem cy tin trnh vi lnh pstree


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 tin 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]

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 V d:
# pstree init-+-apmd |-atd |-automount |-crond |-enlightenment |-gdm-+-X | `-gdm---gnome-session |-gen_util_applet |-gmc

181

1.2.5 Lnh thit lp u tin ca tin trnh


Lnh nice 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 - help : hin th trang tr gip v thot

Lnh renice 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

V d:
# renice +1 987 -u daemon root -p 32

lnh trn s thay i mc u tin ca tin trnh c ch s l 987 v 32, v tt c cc tin trnh do ngi dng daemon v root s hu.

1.2.6 Lnh lsof lit k cc files c m bi cc tin trnh khc


Lit k cc files, sockets, pipes ang m, ang c s dng bi cc tin trnh khc, nu mun bit tt c cc tin trnh ang s dng shell bash s dng lnh nh sau:
# lsof /bin/bash
COMMAND PID bash USER FD TYPE REG DEVICE 252,0 SIZE 729040 NODE 170156 NAME /bin/bash 1838 khanhduong txt

1.2.7 Lnh fg v lnh bg


Linux cho php ngi dng s dng t hp phm CTRL+z dng mt qu trnh v khi ng li qu trnh bng cch g lnh fg. Lnh fg (foreground) tham chiu n cc chng trnh m mn hnh cng nh bn phm ang lm vic vi chng. V d, ngi dng ang xem trang man ca lnh sort, nhn xung cui thy c ty chn -b, mun th ty chn ny ng thi vn mun xem trang man. Thay cho vic nh q 182

thot v sau chy li lnh man, cho php ngi dng g CTRL+z tm dng lnh man v g lnh th ty chn -b. Sau khi th xong, hy g fg tip tc xem trang man ca lnh sort. Kt qu ca qu trnh trn hin th nh sau:
# man sort | more SORT(1) FSF SORT(1) NAME sort - sort lines of text Files SYNOPSIS ../src/sort [OPTION] ... [Files]... DESCRIPTION Write sorted concatenation of all FILE(s) to standard out-put. +POS1 [-POS2] start a key at POS1,end it *before* POS2 obsoles-cent)field numbers and character offsets are num-bered starting with zero(contrast with the -k option) -b ignore leading blanks in sort fields or keys --More-(CTRL+z) [1]+ Stopped man sort | more # ls -s | sort -b | head -4 1 Archives/ 1 InfoWorld/ 1 Mail/ 1 News/ 1 OWL/ # fg man sort | more --More--

Trong phn trc, cch thc g phm CTRL+z tm dng mt qu 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 183

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 qu 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 qu 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 qu trnh (thng th mt tin trnh hon thnh sau khong 20 giy). Nu c chuyn mt chng trnh vo ch nn mc d n c cc thng tin cn xut hoc nhp t cc thit b vo ra chun th h thng s a ra thng bo li di dng sau:
Stopped (tty input/output) tn chng trnh.

V d, lnh sau y thc hin vic tm kim file thu1 trong ch nn:
# find -name thu1 & [5] 918

trong ch ny, s th t ca chng trnh l [5], ch s qu trnh tng ng vi lnh find l 918. V g Enter khi qu trnh cha thc hin xong nn trn mn hnh ch hin th s th t ca chng trnh v ch s qu trnh, nu ch khong 30 hoc 40 giy sau ri g Enter ln na, mn hnh hin th thng bo hon thnh chng trnh nh sau:
# [5] Done # find -name thu1

Gi s chng trnh cha hon thnh v mun chuyn n ln ch ni, hy g lnh sau:
# fg 5 find -name thu1 ./thu1

chng trnh hon thnh v hin th thng bo rng file thu1 nm th mc gc. Thng thng s a ra mt thng bo li nu ngi dng c chuyn mt chng trnh vo ch nn khi m chng trnh cn phi xut hoc nhp thng tin t thit b vo ra chun. V d, lnh:
# vi & [6] 920

184

nhn Enter
# [6] + Stopped (tty output) vi #

Lnh trn chy chng trnh vi trong ch nn, tuy nhin lnh gp phi li v y l chng trnh i hi hin th cc thng tin ra mn hnh (output). Dng thng bo li Stopped (tty intput) vi cng xy ra khi chng trnh vi cn nhn thng tin.

2. Qun tr h thng
2.1 Khi ng v ng tt h thng
Khi mt my PC bt u khi ng, b vi x l s tm n cui vng b nh h thng ca BIOS v thc hin cc ch th . BIOS s kim tra h thng, tm v kim tra cc thit b, v tm kim a cha trnh khi ng. Thng thng, BIOS s kim tra a mm, hoc CDROM xem c th khi ng t chng c khng, ri n a cng. Th t ca vic kim tra cc a ph thuc vo cc ci t trong BIOS. Khi kim tra a cng, BIOS s tm n MBR v np vo vng nh hot ng chuyn quyn iu khin cho n. MBR cha cc ch dn cho bit cch np trnh qun l khi ng GRUB/LILO cho Linux hay NTLDR cho Windows NT/2000. MBR sau khi np trnh qun l khi ng, s chuyn quyn iu khin cho trnh qun l khi ng. Trnh qun l khi ng s cho hin trn mn hnh mt danh sch cc ty chn ngi dng x l xem nn khi ng h iu hnh no. Cc ch dn cho vic np h iu hnh thch hp c ghi r trong cc tp tin cu hnh tng ng vi cc trnh qun l khi ng. LILO lu cu hnh trong tp tin /etc/lilo.conf GRUB lu trong tp tin /boot/grub/grub.conf NTLDR lu trong c:\boot.ini

2.2 Tm hiu v trnh np Linux


LILO l mt boot manager nm trn gi chung vi cc bn pht hnh Red Hat, v l boot manager mc nh cho Red Hat 7.1 tr v trc. Thit lp cu hnh LILO: 185

LILO c thng tin cha trong tp tin cu hnh /etc/lilo.conf bit xem h thng my ta c nhng h iu hnh no, v cc thng tin khi ng nm u. LILO c lp cu hnh khi ng mt on thng tin trong tp tin /etc/lilo.conf cho tng h iu hnh. Sau y l v d v tp tin /etc/lilo.conf
Boot=/dev/hda Map=/boot/map Install=/boot/boot.b Prompt Timeout=50 Message=/boot/message Lba32 Default=linux Image=/boot/vmlinuz-2.4.0-0.43.6 Label=linux Initrd=/boot/initrd-2.4.0-0.43.6.img Read-only Root=/dev/hda5 Other=/dev/hda1 Label=dos

on th nht: Cho bit LILO cn xem xt vo MBR (boot=/dev/hda1) Kim tra tp tin map N cn cho bit LILO c th ci t mt tp tin c bit (/boot/boot.b) nh l mt sector khi ng mi Thi gian ch trc khi np h iu hnh mc nh (default=xxx) c khai bo thng qua dng timeout=50 (5 giy) ? thi gian tnh bng 1/10 ca giy. Np thng tin trong qu trnh khi ng t tp tin /boot/message Dng LBA32 cho bit cu hnh ca a cng: cho bit a cng ca ta h tr LBA32, thng thng dng ny c gi tr linear (ta khng nn i li dng ny nu ta khng hiu r a cng ca ta, ta c th tm hiu a cng ca ta c h tr LBA32 hay khng bng cch xem trong BIOS) on th hai: Cung cp thng tin khi ng cho h iu hnh linux Dng image bo cho LILO bit v tr ca kernel Linux 186

Dng label hin din c 2 on cho bit tn ca h iu hnh no s xut hin ti trnh n khi ng ca LILO. Dng root xc nh v tr root file system ca Linux on th ba: Dng other cho bit partition ca mt h iu hnh na ang hda1 ca a cng.

2.3 Tm hiu GRUB, trnh np Linux


nh ngha: GRUB cng ch l mt trnh qun l khi ng tng t LILO. Tp tin cu hnh GRUB: Nh trn, ta thy thng thng s c 3 on c bn. on th nht: m t cc ch th tng qut nh : H iu hnh mc nh (default) Thi gian ch i ngi dng nhp d liu trc khi thc hin lnh mc nh (timeout=10), tnh bng giy. Ta cng c th chn mu hin th trnh n (color green/black light-gray/blue) on th hai: cho bit cc thng s khi ng h Linux: Tiu trn trnh n l Red Hat Linux (title) H iu hnh ny s khi ng t partition u tin ca a th nht ? root (hda0,0: a th nht, partition th nht). V cn phi mount partition ny trc. Tp tin vmlinuz ang c cha trong th mc root v filesystem root ang nm trn partition th nm ca a cng th nht (/dev/hdc5) Dng lnh boot nhc phi np ngay h iu hnh c khai bo trn. on th ba: cho bit cc thng s v h iu hnh th hai ang c ci t trong h thng. Tiu l Windows H iu hnh ang chim partition th nht ca a th hai (hda1,0). C iu vi lnh rootnoverify, GRUB khng cn ch kim tra xem partition ny c c mount hay khng. Cu lnh chainloader + 1 s dng +1 lm tn tp tin cn khi ng nh mt mc xch trong tin trnh: +1 c ngha l sector th nht ca partition ang xt ta c th dng lnh man grub.conf tm hiu thm v tp tin cu hnh ny.

2.4 Qu trnh khi ng


Sau khi ta bt my, my s np boot loader (lilo or grub), boot loader np file boot image khi to h iu hnh, sau h iu hnh kim tra cc thit b phn cng, h iu hnh bt u kim tra partition, mount cc file system cn thit cho h thng, tip theo n c 187

tp tin /etc/inittab chn default runlevel, khi to cc deamon, cui cng yu cu ngi dng logon vo trc khi s dng h thng, sau khi log on bng username v password, h thng s chy chng trnh shell (hoc chy X Windows) giao tip vi ngi dng.

3. Qun tr ngi dng


Trong mi trng nhiu ngi cng lm vic trn h thng, cng s dng, chia s cc ti nguyn nh b nh, a cng, my in v cc thit b khc. Chnh sch qun l ngi dng tt s l cha kha cho hot ng hiu qu ca h thng.

3.1 Superuser (root)


Cc h thng my ch u c account qun tr, v nh NT c account administrator, Novell c admin. y l account c quyn cao nht, dng cho ngi qun tr qun l, gim st h thng. Trong qu trnh ci t Linux chng ta khi to ngi s dng root cho h thng. y l superuser, tc l ngi s dng c bit c quyn khng gii hn. S dng quyn root chng ta thy rt thoi mi v chng ta c th lm c thao tc m khng phi lo lng g n xt quyn thm nhp ny hay khc. Tuy nhin, khi h thng b s c do mt li lm no , chng ta mi thy s nguy him khi lm vic nh root. Do vy chng ta ch s dng account ny vo cc mc ch cu hnh, bo tr h thng ch khng nn s dng vo mc ch hng ngy. Ta cn to cc ti khon (account) cho ngi s dng thng sm nht c th c (u tin l cho bn thn ta). Vi nhng server quan trng v c nhiu dch v khc nhau, thm ch ta c th to ra cc superuser thch hp cho tng dch v trnh dng root cho cc cng tc ny. V d nh superuser cho cng tc backup ch cn chc nng c (read-only) m khng cn chc nng ghi. Account root Ti khon ny c quyn hn rt ln nn n l mc tiu m cc k xu mun chim ot. Chng ta s dng n phi cn thn, khng s dng ba bi trn qua telnet hay kt ni t xa m khng c cng c kt ni an ton. Trong Linux, chng ta c th to cc user c tn khc c quyn ca root, bng cch to user c UserID bng 0. Cn phn bit ta ang login nh root hay ngi s dng thng thng qua du nhc ca shell.
login: natan Password: Last login: Wed Mar 13 19:00:42 2002 from 172.29.8.3 [natan@NetGroup natan]$ su -

188

Password: [root@NetGroup /root]#

Dng th t vi du $ cho thy ta ang kt ni nh mt ngi s dng thng (tnminh). Dng cui cng vi du # cho thy ta ang thc hin cc lnh vi root. # su user_name ( trong ubuntu s dng lnh #sudo su user_name) Cho php ta thay i login di mt user khc (user_name) m khng phi logout ri login li.

3.2 Ti khon ngi dng


Mi ngi mun ng nhp v s dng h thng Linux u cn c 1 account. Vic to ra v qun l account ngi dng l vn quan trng m ngi qun tr phi thc hin. Tr account root, cc account khc do ngi qun tr to ra. Mi ti khon ngi dng phi c mt tn s dng (username), mt mt khu (password) ring ngi qun tr d dng qun l hot ng ca ngi dng cng nh tng cng tnh an ton cho h thng. Tp tin /etc/passwd l tp tin cha cc thng tin v ti khon ngi dng ca h thng. Tp tin /etc/passwd Tp tin /etc/passwd ng vai tr sng cn i vi mt h thng Unix/Linux. Mi ngi u c th c c tp tin ny nhng ch c root mi c quyn thay i n. Tp tin /etc/passwd c lu di dng text nh i a s cc tp tin cu hnh ca Unix/Linux.
[natan@NetGroup natan]$ more /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: ftp:x:14:50:FTP User:/var/ftp: nobody:x:99:99:Nobody:/: nscd:x:28:28:NSCD Daemon:/:/bin/false mailnull:x:47:47::/var/spool/mqueue:/dev/null rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/bin/false xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false nthung:x:525:526:nguyen tien hung:/home/nthung:/bin/bash natan:x:526:527::/home/natan:/bin/bash

Mi user c lu trong mt dng gm 7 ct: Ct 1 : tn ngi s dng. 189

Ct 2 : m lin quan n passwd cho Unix chun v ?x? i vi Linux. Linux lu m ny trong mt tp tin khc /etc/shadow m ch c root mi c quyn c. Ct 3:4 : user ID:group ID. Ct 5 : tn y ca ngi s dng. Mt s phn mm ph password s dng d liu ca ct ny th on password. Ct 6 : th mc c nhn. Ct 7 : chng trnh s chy u tin sau khi login (thng l shell) cho user. Tp tin m u bi superuser root. Ch l tt c nhng user c user ID = 0 u l root. Tip theo l cc user h thng. y l cc user khng c tht v khng th login vo h thng. Cui cng l cc user bnh thng. Tn ngi dng v nh danh ngi dng (Username v User ID) Tn ngi dng l chui k t xc nh duy nht mt ngi dng. Ngi dng tn ny khi ng nhp cng nh truy xut ti nguyn. Trong linux tn phn bit ch hoa, thng. Thng thng tn ngi dng thng s dng ch thng. qun l ngi dng linux s dng khi nim nh danh ngi dng (user ID). Mi ngi dng mang mt con s nh danh cho mnh. Linux s dng s nh danh kim sot hot ng ca ngi dng. Theo qui nh chung cc ngi dng c nh danh l 0 l ngi dng qun tr (root). Cc s nh danh t 199 s dng cho cc ti khon h thng, nh danh ca ngi dng bnh thng s dng gi tr bt u t 100. Mt khu (Password) Mi ngi dng phi c mt mt khu ring s dng ti khon ngi dng ca mnh. Mi ngi u c quyn i mt khu ca chnh mnh. Ngi qun tr th c th i mt khu ca nhng ngi khc. Unix/Linux truyn thng lu cc thng tin lin quan ti mt khu ng nhp (login) trong /etc/passwd. Tuy nhin, do y l tp tin phi c c bi tt c mi ngi do mt s yu cu cho hot ng bnh thng ca h thng (nh chuyn User ID thnh tn khi hin th trong lnh ls chng hn) v nhn chung cc user t mt khu ?yu?, do , hu ht cc phin bn Unix mi u lu mt khu trong mt tp tin khc /etc/shadow v ch c root c quyn c tp tin ny. Ch : Theo cch xy dng m ha mt khu, ch c 2 cch ph mt khu l vt cn (brute force) v on. Phng php vt cn, theo tnh ton cht ch, l khng th thc hin ni v 190

i hi thi gian tnh ton qu ln, cn on th ch tm ra nhng mt khu ngn, hoc ?yu?, v d nh nhng t tm thy trong t in nh god, darling ? Group ID nh danh ca nhm m user ny l mt thnh vin ca nhm. Comment Dng ch thch v user ny. Home Directory Khi ngi dng login vo h thng c t lm vic ti th mc c nhn ca mnh. Thng th mi ngi c mt th mc c nhn ring, ngi dng c ton quyn trn n, n dng cha d liu c nhn v cc thng tin h thng cho hot ng ca ngi dng nh bin mi trng, script khi ng, profile khi s dng X window ? Th mc mc nhin s dng cho cc th mc c nhn ca ngi dng bnh thng l /home; cho root l /root. Tuy nhin chng ta cng c th t vo v tr khc.

3.3 Thm ngi dng vi lnh useradd


Ngi qun tr h thng s dng lnh useradd (trong mt s phin bn l adduser) 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 nh sau: 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).

191

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.

3.4 Lnh usermod thay i thng tin ca ngi dng


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 ca lnh: c, comment d, home_dir thay i thng tin c nhn ti khon ngi dng. thay i th mc c nhn ti khon ngi dng. thit t s ngy ht hiu lc ca mt khu trc khi ti khon ty chn ny thay i tn hoc s khi to ng nhp nhm ngi

e, expire_date thay i thi im ht hn ti khon ngi dng (YYYY-MM-DD). f, inactive_days g, initial_group ngi dng ht hn s dng. 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 thay i 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. l, login_name thay i tn ng nhp ca ngi dng. Trong mt s trng hp, tn th mc c nhn ca ngi dng c th s thay i tham chiu n tn ng nhp mi. p, passwd thay i mt khu ng nhp ca ti khon ngi dng. 192

s, shell u, uid

thay i shell ng nhp. thay i ch s ngi dng.

Ch : 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 tin 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

thay i UID ca mt ngi dng s dng c php lnh sau: C php: usermod u UID username

3.5 Hy user
Lnh hay c dng xa b mt ti khon ngi dng l lnh userdel. C php: 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: r cc file tn ti trong th mc c nhn ca ngi dng cng nh cc file nm trong cc th mc khc c lin quan n ngi dng s 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 tin 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.

3.6 To nhm ngi dng groupadd


Vic to nhm xut pht t vic gom cc ngi dng c chung mt s quyn hn trn ti nguyn. Mi nhm c mt tn v mt nh danh nhm, Mt nhm c th cha nhiu ngi dng v ngi dng c th thuc nhiu nhm. Tuy nhin ti mt im mt ngi ch thuc mt nhm m thi. Thng tin ca nhm lu ti tp tin /etc/group. Mi dng nh ngha mt nhm, cc trng trn dng cch nhau bng du : Ni dung ca mt dng: tn-nhm : password-ca-nhm: nh-danh-nhm:cc-userthuc-nhm 193

Chng ta c th thm trc tip vo file /etc/group hoc dng lnh groupadd:
#groupadd tn-nhm

Thm user vo group Chng ta c th sa t tp tin /etc/group, cc tn ngi dng cch nhau bng du ;. Mt cch khc l cho tng uset vo nhm bng lnh: # usermod ?g tn-nhm tn-user hay sa tp tin /etc/passwd cho tng user, trong thay li nh danh nhm trong dng khai bo ngi dng. Hy group Xa trong tp tin /etc/group hay dng lnh : #groupdel tn-nhm Sa i cc thuc tnh ca mt nhm ngi dng Trong mt s trng hp cn phi thay i mt s thng tin v nhm ngi dng bng lnh groupmod vi c php nh sau: #roupmod [ty-chn] <tn-nhm> Thng tin v cc nhm xc nh qua tham s tn-nhm c iu chnh. Cc ty chn ca lnh: g, gid thay i gi tr ch s ca nhm ngi dng. n, group_name thay i tn nhm ngi dng. Lit k cc nhm m mt ngi dng l thnh vin C php: groups UserName

3.7 Xc nh ngi dng ang ng nhp (lnh who)


Lnh who l mt lnh n gin, cho bit c hin ti c nhng ai ang ng nhp trn h thng vi c php nh sau: #who [ty-chn] Cc tu chn l: 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. 194

Ngoi who, c th s dng thm lnh users xc nh c nhng ngi ng nhp trn h thng.
# users lan root #

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. S dng lnh: # whoami hoc # who am i
# whoami lan # who am i may9!lan pts/0 Nov 15 06:07

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.

3.8 xc nh thng tin ngi dng vi lnh id


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 l: 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.
# id uid=506(lan) gid=503(lan) groups=503(lan) # id -g 503 # id -u 506 # id root uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon), 3(sys),4(adm),6(disk),10(wheel) #

3.9 Xc nh cc tin trnh ang c tin hnh (lnh w)


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 . 195

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 .
# w root tty2 - 2:14pm 13:03 9.30s 9.10s /usr/bin/mc -P lan pts/1 192.168.2.213 3:20pm 0.00s 0.69s 0.10s w root pts/2 :0 3:33pm 9:32 0.41s 0.29s /usr/bin/mc P

3.10 Hin th danh sch ng nhp s dng lnh last


Hin th danh sch nhng ngi logged in cui cng. Lnh ny tm kim trong file /var/log/wtmp v hin th tt c cc user logged in t lc file ny c to. Mi ln h thng reboot, ct user s hin th vi tn "reboot" hoc down. C php : last <number> , number l s dng gn y nht.

3.11 Lnh which hin th ng dn y ca chng trnh


Cu trc: which -[option] [--] programname [...]

4. Qun tr ti nguyn
4.1 Qun l ti nguyn vi lnh quota
Mt cng c tt nht qun l ti nguyn a l quota. Quota c dng hin th vic s dng v gii hn a ca ngi dng. Khi c gi, quota s qut tp tin /etc/fstab v kim tra nhng file system trong tp tin ny. Thng thng, quota dng gii hn dung lng a cng m ta cp cho ngi dng.

Gii hn v cng v mm
gip cho vic gii hn c hiu qu, quota chia lm 2 loi gii hn gii hn cng v gii hn mm.

196

Gii hn cng: khng cho php vt qu dung lng a cho php. Nu user c tnh lu nhng thng tin vo th nhng thng tin trc c th b xa v y ln dn. Vic gii hn ny tht mnh m nhng cn thit i vi mt s user. Gii hn mm: cho php user vt qu dung lng cho php, nhng s nhn mt li cnh bo trc. Mt kin hay, ta cu hnh gii hn mm nh hn gii hn cng, v cu hnh khi user vt qu dung lng cho php h thng s gi mt li cnh bo trc khi cho php user lu d liu.

Khi no s dng quota?


Khng phi ta dng quoata cho tt c nhng filesystem. Ch c nhng filesystem no cn thit chng ta mi dng quota. V khi , chng ta vo file /etc/fstab cu hnh nh sau:
/dev/hda3 /usr rw,usrquota,grpquota 1 3

Thit lp quota
Ngi qun tr h thng s thit lp quota cho user trong file c tn quota.user nm trong filesystem m chng ta mun cu hnh quota. Tng t, chng ta cng s thit lp quota cho nhm trong file quota.group. Nhng tp tin ny ta chng ta s to ra. Nhng lnh sau y hng dn ta cch thit lp quota cho filesystem /usr.
cd /usr touch aquota.user chmod 600 aquota.user touch aquota.group chmod 600 aquota.group

Ta s dng lnh edquota thit lp quota. Lnh ny ch c dng bi user root. Vi lnh ny chng ta c th gii hn dung lng cho mt hay nhiu user hoc group cng lc. V d nh sau:
edquota hv1 hv2

Ta c th iu khin lnh quota mt cch hiu qu vi nhng ty chn sau: g chnh sa quota ca group p sao chp quota ca mt user cho mt user khc u chnh sa quota cho user (mc nh ca lnh) t chnh sa thi gian ca gii hn mm. Sau khi thit lp quota, ta phi bt quota ln bng lnh: # quotaon /dev/hda3 bt quota kim tra tt c nhng file system dng lnh: # quotaon ?a Lnh quotaoff c tnh nng ngc li, tt quota trn filesystem. 197

Lnh quota
C php ca lnh: quota [ty chn] [user] [group] Nhng ty chn ca lnh quota. g hin th quota ca group m user ny l mt thnh vin q ch hin th nhng filesystem c quota u hin th quota ca user

Lnh quotacheck
Ta c th s dng lnh quotacheck ti bt c lc no kim tra vic s dng a hin hnh.

4.2 Lnh qun l lu tr 4.2.1 Xem dung lng a s dng vi lnh du


Linux cho php ngi dng xem thng tin v dung lng a c s dng bng lnh du, mc nh n s hin th ti th mc hin hnh v ch hin th s block trn file system vi c php : # du [ty-chn]... [file]... Lnh du lit k kch thc (tnh theo kilobytes) ca mi file thuc vo h thng file c cha file c ch trong lnh. Cc tu chn l: a b, --bytes c, --total lit k kch thc ca tt c cc file c trong h thng file lu tr file. hin th kch thc theo byte. hin th c tng dung lng c s dng trong h thng file. lin kt n nu chng nm trn cc th mc khc. hin th kch thc cc file km theo n v tnh (v d: hin th kch thc tnh theo kilobytes. tnh c kch thc ca cc file c lin kt ti. tnh kch thc cc file nhiu ln nu c lin kt cng. tnh kch thc theo megabytes. khng hin th kch thc ca th mc con. a ra kch thc ca h thng file c lu tr file. hin th trang tr gip v thot. 198

D, --dereference-args h, --human-readable 1K, 234M, 2G... ). k, --kilobytes L, --dereference l, --count-links m, --megabytes S, --separate-dirs s - help

x, --one-file system b qua cc th mc trn cc h thng file khc.

Ch : lnh du khng cho php c nhiu ty chn trn cng mt dng lnh. V d: lnh sau cho bit kch c ca cc file trong th mc /usr/doc/test:
# du /usr/doc/test 28 24 16 12 144 44 160 56 532 ./TODO/1.0_to_1.5 ./TODO/lib++ ./TODO/unreleased ./TODO/unstable ./TODO ./code ./languages ./licences .

Nhn vo mn hnh c th bit c kch thc ca file./TODO/1.0_to_1.5 l 28 KB, file./TODO/lib++ l 24 KB,..., v kch thc ca th mc hin thi l 532 KB. Mun bit tng s dung lng ca bt k th mc no ta c th s dng lnh sau: du sh

4.2.2 Kim tra dung lng a trng vi lnh df


C php lnh: # df [ty-chn]... [file]... Lnh ny hin th dung lng a cn trng trn h thng file cha file. Nu khng c tham s file th lnh ny hin th dung lng a cn trng trn tt c cc h thng file c kt ni. Cc ty chn: a, --all bao gm c cc file h thng c dung lng l 0 block. - block-size k, --kilobytes l, --local m, --megabytes T, --print-type - help thit lp li ln ca khi l c byte. hin th dung lng tnh theo kilobytes. gii hn danh sch cc file cc b trong h thng. hin th dung lng tnh theo megabytes. hin th cc kiu ca file h thng. a ra trang tr gip v thot.

t, --type=kiu gii hn danh sch cc file h thng thuc kiu.

ch ra c dung lng a cn trng trong Linux khng phi l iu d lm. Ngi dng c th s dng lnh df lm c iu ny, tuy nhin kt qu ca lnh ny ch cho bit dung lng a c s dng v dung lng a cn trng ca tng h thng file. Nu mun bit tng dung lng a cn trng l bao nhiu, s phi cng dn dung lng a cn trng ca tng h thng file. 199

V d, lnh: # df /mnt/floppy s cho kt qu nh sau trn mn hnh (dng u tin l tn ct):


Filesystem /dev/hda2 none none /dev/fd0 1k-blocks Used 2174808 0 0 1423 1378228 0 0 0 249 Available 686104 0 0 0 1174 Use% Mounted on 67% 18% / /proc /dev/pts /misc /mnt/floppy

automount(pid411)0

c th xc nh c, a mm c s dng 18%, nh vy l cn 82% (tc l cn 1174 KB) dung lng a cha c s dng. Ct Filesystem cha tn ca thit b a, ct 1k-blocks cha dung lng ca thit b. Ct Used cha dung lng a c s dng. Ct Available cha dung lng a cn trng, Ct Use% cha % dung lng a s dng Ct Mounted on cha im kt gn ca thit b. Cch nhanh nht bit c dung lng a cn trng bao nhiu l phi xc nh c tn ca mt th mc bt k c trong a , s dng lnh df vi tham s file l tn ca th mc. Sau c ni dung ct Available trn mn hnh hin th bit dung lng a cn trng. Chng hn, trn a cng ang s dng c th mc /etc, khi g lnh:
# df /etc

kt qu hin th ln mn hnh nh sau cho bit a cn c 466252 khi ri : Filesystem /dev/hda1 1k-blocks 1984240 Used 1417192 Available 466252 Use% 75% Mounted on /

4.2.3 Lnh free hin th tnh trng s dng b nh


Lnh ny hin th tng lng b nh cn trng, ang dng, cng nh b nh swap trn h thng (thng s dng free -m xem lng RAM v swap ang c s dng). C php: free [-b | -k | -m] [-o] [-s delay ] [-t] [-V] trong b: tnh theo bytes k: tnh theo kilobytes m: tnh theo megabytes

200

5. Dch v mng trong Linux


Linux/Unix c hai cch t chc cc dch v mng: hoc l khi ng ngay t u chng trnh server di dng daemon, hoc l cng tc khi ng chng trnh dch v theo yu cu (khi c yu cu kt ni) vi s tr gip ca mt tin trnh daemon khc l inetd Trong trng hp u, ta cn cho mi dch v t nht mt daemon v ti nguyn ca h thng b s dng ngay c khi khng c yu cu kt ni. Cn trong trng hp sau ta cn mt daemon cho tt c cc dch v. Ti nguyn h thng ch thc s b chim dng khi c yu cu kt ni. V vy, chng trnh server dng daemon thng trc c dng cho cc dch v c yu cu kt ni thng xuyn nh DNS, mail, Web. Qua inetd dnh cho cc dch v nh ftp, telnet, secure shell Chng trnh inetd, cn gi l super-server, c s dng khi ng cc daemon phc v cc dch v mng, inetd i cc ni mng sau mt s cng c quy nh bi tp tion cu hnh /etc/inetd.conf. RedHat Linux 7.1 s dng tp tin /etc/xinetd.conf v cc tp tin trong th mc /etc/xinet.d. Khi c yu cu kt ni, inetd s gi chng trnh server tng ng thit lp cc kt ni v phc v khch hng. Thng thng, inetd c khi ng ngay t u bi cc script dng cho khi ng my. inetd s c file cu hnh /etc/inetd.conf khi c gi ln b nh. Sau y l mt vi dng ca tp tin /etc/inetd.conf
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args> # Echo, discard, daytime, and chargen are used primarily for testing. # To re-read this file after changes, just do a 'killall -HUP inetd' #time #time # # These are standard services. # ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a stream dgram tcp udp nowait wait root root internal internal

201

telnet

stream

tcp

nowait

root

/usr/sbin/tcpd

in.telnetd

Bn cnh tp tin cu hnh /etc/inetd.conf, tp tin /etc/services cng c inetd s dng bit cc cng (port) ca cc chng trnh server. V d mt on ca tp tin /etc/services
ftp-data ftp fsp ssh ssh telnet # 24 - private smtp time time rlp nameserver whois re-mail-ck re-mail-ck domain domain 25/tcp 37/tcp 37/udp 39/udp 42/tcp 43/tcp 50/tcp 50/udp 53/tcp 53/udp mail timserver timserver resource name nicname # Remote Mail Checking Protocol # Remote Mail Checking Protocol nameserver nameserver # name-domain server # resource location # IEN 116 # 26 - unassigned 20/tcp 21/tcp 21/udp 22/tcp 22/udp 23/tcp fspd # SSH Remote Login Protocol # SSH Remote Login Protocol

Hai tp tin /etc/inetd.conf v /etc/services quan h mt thit vi nhau. Ct u tin bao gm tn cc dch v mng v cn phi ging nhau. Mt dch v mun c hot ng nh inetd phi khai bo cng m n i khch hng thng qua /etc/services v dng lnh khi ng n trong /etc/inetd.conf. Mun tt mt dch v, ta ch cn t du ch thch # trc dng miu t dch v v khi , inetd s khng bit v khng gi dch v na. Nh cc bn c nhn thy ni dung ca ct <server_path> <args> cho cc dch v l /usr/sbin/tcpd in.telnetd. Chng trnh tcpd c inetd gi ln trc lm mt s cng tc kim tra v ghi log trc khi chng trnh dch v thc c gi ln. C th l tcpd s s dng Ct <flags> cho bit chng trnh inetd c phi i (wait) hay khng (nowait) kt ni kt thc trc khi tip mt kt ni khc. V d trn vi telnet cho thy nhiu chng trnh khch c th c phc v mt lc qua cng mt cng telnet 23. Tt nhin chng trnh server telnet cng phi c thit k thch hp vi kiu lm vic a khch hng ny.

202

Ct <user> quy nh quyn ca tin trnh khi n c chy trn b nh. Trong trng hp c nghi ng v tnh bo mt ca mt dch v, ta c th gim quyn ca n bng cch thay i ni dung ca ct ny. Qua v d trn ta thy dch v ftp s c inetd gi ln thng qua dng lnh /usr/sbin/tcpd in.ftpd -l a khi c mt chng trnh khch hng dng giao thc TCP gi qua cng 21.

5.1. Lnh t tn my
Lnh #Hostname name, nu ta mun t tn y (full domain name).
Hostname name.domainname

Thng tin v tn my nm trong tp tin /etc/hosts bao gm cc thng tin sau:


a ch ip tn my may12

Ngoi ra ta cn xem file m t thng tin v ng mng /etc/networks


loopback 127.0.0.0 merlin-net 147.154.12.0 BNR 47.0.0.0

5.2. Lnh ifconfig


Khi s dng lnh ifconfig kt qu thu c l:
eth0 Link encap:Ethernet HWaddr 00:02:55:07:63:07 Mask:255.255.255.224 MTU:1500 Metric:1 inet addr:203.113.130.201 Bcast:203.113.130.223 UP BROADCAST RUNNING MULTICAST

RX packets:3912830 errors:84463 dropped:0 overruns:0 frame:0 TX packets:2402090 errors:0 dropped:0 overruns:0 carrier:0 collisions:84463 txqueuelen:100 RX bytes:2767096664 (2638.9 Mb) Mb) Interrupt:29 eth1 Link encap:Ethernet inet addr:10.10.0.10 HWaddr 00:05:1C:98:05:B1 Bcast:10.10.255.255 MTU:1500 Mask:255.255.0.0 Metric:1 TX bytes:1265930467 (1207.2

UP BROADCAST RUNNING MULTICAST

RX packets:15389731 errors:0 dropped:0 overruns:0 frame:0 TX packets:7768909 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100

203

RX bytes:2578998337 (2459.5 Mb) Mb) lo Link encap:Local Loopback inet addr:127.0.0.1 UP LOOPBACK RUNNING Mask:255.0.0.0 MTU:16436

TX bytes:1471928637 (1403.7

Metric:1

RX packets:45868 errors:0 dropped:0 overruns:0 frame:0 TX packets:45868 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5338927 (5.0 Mb) TX bytes:5338927 (5.0 Mb)

Trong trng hp ny ta thy my hin ti c 2 card mng v c gn cc a ch tng ng nh trn. 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 172.16.9.15 netmask 255.255.0.0

5.3 Lnh netstat


a thng tin v cc kt ni mng, bng routing, cc interface. C php: netstat <ty chn>
netstat [-a] [-n] [-v] netstat [-g | -m | -p | -s | -f address_family ] [-n] [-P protocol] netstat [ -i ] [ -I interface ] [ interval ] netstat -r [-a] [-n] [-v ] netstat -M [-n] [-s ] netstat -D [ -I interface ]

-a

Show the state of all sockets and all routing table entries; normally, sockets used by server processes are not shown and only interface, host, network, and default routes are shown.

-n

Show network addresses as numbers. netstat normally displays addresses as symbols. This option may be used with any of the display formats.

-v

Verbose. Show additional information for the sockets and the routing table.

204

-g -m -p -i -r -M

Show the multicast group memberships for all interfaces. Show the STREAMS statistics. Show the address resolution (ARP) tables. Show the state of the interfaces that are used for TCP/IP traffic. Show the routing tables. Show the multicast routing tables. When used with the -s option, show multicast routing statistics instead.

-d

Show the state of all interfaces that are under Dynamic Host Configuration Protocol (DHCP) control.

-D -P protocol

Show the status of DHCP configured interfaces. Limit display of statistics or state of all sockets to those applicable to protocol.

Lit k cc tin trnh no ang s dng cng 22 s dng lnh sau:


# netstat -anp |grep 22

hoc lnh lit k c bao nhiu tin trnh ang s dng cng 80 nh sau:
# netstat -an |grep :80 | wc -l

hoc lnh in ra bng nh tuyn


# netstat -r

5.4 Lnh write


Lnh write c dng trao i gia nhng ngi hin ang cng lm vic trong h thng.

205

Thng thng, mt ngi dng mun lin h vi ngi dng khc, cn s dng lnh who: $who hin thng tin nh sau:
user1 tty17 user2 tty43 user4 tty52 Oct 15 10:20 Oct 15 8:25 Oct 15 12:20

trong c tn ngi dng, s hiu terminal, ngy gi vo h thng. Sau s dng lnh write chuyn thng bo cho nhau.
$write <tn ngi dng> [<tn trm cui>]

cn gi thng bo n ngi dng user1 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.5 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 .

206

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.lnh-vc.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.

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> V d, $mail user2

Lnh ny cho php son v gi th cho ngi nhn c tn c ch.

207

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

V d
$ mail user2 < thu1

Ni dung th t File thu1 c gi cho ngi nhn user2, du mi ca shell li hin ra. 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.

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> (du cch) + l cmd dq m user s tn-file r u u <s> [tn-file] d <s> Hin th s <s> Hin th ngay pha trc Hin th ngay tip theo thc hin lnh cmd xa th hin thi v ra khi mail gi th hin thi cho ngi dng ghi th hin thi vo file c tn tr li th hin thi (c th t file) xa th s khi phc th hin thi khi phc th s 208

m <user> ... chuyn tip th ti cc ngi dng khc

ra khi mail

Thc hin cc lnh theo ch dn trn y qun tr c hp th ca c nhn.

5.6 Lnh talk


Trong Linux cho php s dng lnh talk thay th cho lnh write.

209

TI LIU THAM KHO


[1] Mendel Cooper; Advanced Bash Script Guide Shell; 16 June 2002. [2] Ellie Quigley; UNIX Shells by Example Fourth Edition, Prentice Hall PTR, September 24, 2004. [3] Steve D. Pate; UNIX Filesystems: Evolution, Design, and Implementation(VERITAS Series); 2003. [4] Kirk Bauer, Automating UNIX and Linux Administration; 2003. [5] Kurt Wall, Mark Watson, and Mark Whitis; Linux Programming;1999. [6] Roderick W. Smith;Advanced Linux Networking; Addison Wesley; June 11, 2002. [7] Gio trnh h iu hnh Unix; i hc Cng ngh - i hc Quc gia H Ni; 2004.

210

PH LC
1. Gii thiu mt s phin bn h iu hnh Linux thng dng hin nay v cch ci t
1.1 Hng dn ci t h iu hnh Redhat Linux 7.1
Ta ci Linux t CDROM. Redhat phin bn 7.1 gm c 5 a. Ta ch cn 2 a Disk 1 va Dick 2 l v ci trn my hon ton mi, cha c ci h iu hnh no. Gi s my mi c mt cng cha nh dng. Thit lp CMOS my khi ng t CDROM. Cho a CDROM Linux 1 vo khi ng. Khi khi ng xong, mn hnh hin ln nh sau :

T y, cho php ta ci t theo nhiu loi giao din, ta g vo text ci trong ch text. Mn hnh tip theo nh sau:

Sau hp thoi chn ngn ng hin ln cho ta chn ngn ng no tu . y ta chn English.

211

Tip theo chn us

Chng trnh hin ln bng thng bo Red Hat Linux: Welcome to Red Hat Linux, nhn OK b qua.

Khi hp thoi Installation Type xut hin, chn Custom System, trong trng hp ny n s cho ta chn ci cc phn mm theo ca ta. Nu ta chn cc tu chn khc nh Server 212

System, Workstation. Chn Upgrade Existing Installation s cho php ta nng cp h iu hnh Linux.

Do a cng mi hon ton cha nh dng nn xut hin thng bo sau. Ta chn Initilize

Khi gp bng Automatic Partitioning, chn Manual partition v OK

213

Tip n chn Disk Druid

Chng trnh nh dng a ca Linux m ra.Theo vt sng ta thy c 1 a cng gn IDE1 (sda), dung lng l 4094 MB

a vt sng n nt Add, nhn ENTER to partition mi, ca s Edit New Partition xut hin

214

Trc tin, ta to Linux Native, y ta chn tm 1000 MB, nhn TAB chuyn qua li v thit lp thng s. Thm du / vo mc Mount Point.

Sau ta s thy partition 1 to xong

Nhn Add to tip Swap partition:

215

Nhn OK kt thc, CT s hi c mun lu li c thay i khng. Chn Yes

Nhn tip OK tin hnh format.

216

Nhn OK to boot LILO. Trong cc phin bn sau ny cng c thm mt chng trnh GRUB c vai tr tng t nh LILO nhng c giao din ho.

Mc nh dng Master Boot Record khi ng Linux, nhn OK.

Nhn tip OK.

217

Nhn OK format bt u.

Sau t tn cho my

Thit lp cu hnh cho Firewall, chn No firewall , nhn OK

Tip theo , thit lp cc cu hnh v phn cng. 218

Lu : Nhng minh ho di y l c thit lp theo cu hnh phn cng my hin ti. cc my khc c th khc. Chn loi chut:

Chn ngn ng lm vic

Xc nh mi gi lm vic, chn Asia/Saigon

219

Thit lp mt khu cho ti khon ngi qun tr h thng (root)

Mt khu ca root phi c t nht l 6 k t

Nhn OK nu khng c thay i.

220

Sau khi to xong nhn OK.

Sau chn cc gi ci t (ty ), cc phn m ta thy cn thit.

221

Nhn OK khi chn xong. Chn loi card mn hnh thch hp.

222

Nhn OK ci t

Qu trnh ci t bt u

Trong qu trnh ci, chng trnh yu cu a a 2 vo

223

224

Tip theo chng trnh s hi c mun to a boot hay khng,

225

Sau thit lp cc thng s khc na l hon tt

226

Sau khi khi ng my, chng ta thy biu tng sau:

227

1.2 Hng dn s dng h iu hnh Ubuntu v cc phin bn ca n

2. Ci t WEBMIN 3. Ci t WEBSERVER 4. Ci t FILE SERVER

228

229

You might also like