You are on page 1of 220

MC LC BNG T VIT TT ........................................................................... 5 CHNG 1: TNG QUAN V UNIX/ LINUX .................................

6
1. Lch s pht trin ca Unix .............................................................................6 2. Lch s pht trin ca Linux ...........................................................................8 2.1 Mt s c im chnh ca Linux ..............................................................10 2.2 Cc thnh phn chnh ca h iu hnh Linux ...........................................13

CHNG 2: H THNG FILE TRONG LINUX ........................... 20


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

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


1. Qun l quyn thm nhp 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 ...........................................................52 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.18 Lin kt (link) tp tin ................................................................................66 5. Cc lnh v tin ch h thng .........................................................................67 5.1 Cc lnh ng nhp v thot khi h thng................................................67 5.2 Lnh thay i mt khNu passwd .................................................................70 5.4 Lnh date xem, thit t ngy, gi .............................................................72 5.5 Lnh xem lch cal .......................................................................................74 5.6 Xem thng tin h thng uname ..................................................................75 5.7 Thay i ni dung du nhc shell ...............................................................75 5.8 Lnh gi ngn ng tnh ton s hc ...........................................................76 5.9 Tin ch mc .................................................................................................79 5.10 S dng trnh son tho VI .......................................................................89 5.11 S dng ti liu gip man....................................................................93

CHNG 4: LP TRNH TRONG LINUX .................................... 96


1. LP TRNH SHELL ......................................................................................96 1.1 Khi nim shell ...........................................................................................96 1.2 Mt s c im ca Shell..........................................................................96 1.3 Lp trnh ng ng ...................................................................................98 1.4 Lp trnh Shell Script..................................................................................99 1.5 iu khin lung ......................................................................................109 1.6 Hm ..........................................................................................................122 1.7 Mng .........................................................................................................123 1.8 Mt s cc lnh thng dng trong lp trnh Shell ..................................130 1.8 quy......................................................................................................132 1.9 Lp trnh hi thoi ....................................................................................133 1.10 Mt s v d v Shell ..............................................................................135 2. Lp trnh C trn Linux .................................................................................149 2.1 Trnh bin dch gcc ...................................................................................149 2.2 Cng c GN U make .................................................................................152 2.3 S dng nhn file (m t file file descriptor) ........................................153 2.4 Th vin lin kt .......................................................................................159 2.5 Cc cng c cho th vin .........................................................................167 2.6 Bin mi trng v file cu hnh ..............................................................169 2.7 S dng gdb g li...............................................................................169

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


1. Qun l tin trnh ..........................................................................................171 2. Cc lnh c bn trong qun l tin trnh ....................................................173 2.1 S dng lnh ps trong qun l tin trnh ..................................................173 2.2 Hy mt tin trnh s dng lnh kill ........................................................174 2.3 Cho my ngng hot ng mt thi gian vi lnh sleep..........................176 2.4 Xem cy tin trnh vi lnh pstree............................................................176 2.5 Lnh thit t li u tin ca tin trnh nice v lnh renice ................178 2.6 Lnh fg v lnh bg ....................................................................................178 3. Qun l tr h thng ......................................................................................181 3.1 Khi ng v ng tt h thng ...............................................................181 3.2 Tm hiu v trnh np Linux .....................................................................181

3.3 Tm hiu GRUB, trnh np Linux. ...........................................................183 3.4 Qu trnh khi ng .................................................................................183 4. Qun tr ngi dng .....................................................................................184 4.1 Superuser (root) ........................................................................................184 4.2 Ti khon ngi dng...............................................................................185 4.3 Thm ngi dng vi lnh useradd ..........................................................187 4.4 Thay i thng tin ca user ......................................................................188 4.5 Hy user....................................................................................................189 4.6 To nhm ngi dng groupadd ..............................................................189 4.7 Xc nh ngi dng ang ng nhp (lnh who) ...................................190 4.8 xc nh thng tin ngi dng vi lnh id ..........................................191 5. Qun tr ti nguyn .......................................................................................192 5.1 Qun l ti nguyn vi lnh quota ...........................................................192 5.2 Lnh qun l a vi lnh du v df ...........................................................193 6 Truyn thng trong Linux ............................................................................196 6.1. Lnh t tn my .....................................................................................196 6.2. Lnh ifconfig ...........................................................................................196 6.3 Lnh write .................................................................................................197 6.4 Lnh mail ..................................................................................................198 6.5 Lnh talk ...................................................................................................200

TI LIU THAM KHO ................................................................. 202 PH LC ........................................................................................... 203


1. Gii thiu mt s phin bn h iu hnh Linux thng dng hin nay v cch ci t ........................................................................................................203 1.1 Hng dn ci t h iu hnh Redhat Linux 7.1 ..................................203 1.2 Hng dn s dng h iu hnh Ubuntu v cc phin bn ca n ........220 2. Ci t WEBMIN .........................................................................................220 3. Ci t WEBSERVER .................................................................................220 4. Ci t FILE SERVER ................................................................................220

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. N hng 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 N eumann 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 UN IX. N m 1973, Riche v Thompson vit li nhn ca h iu hnh UN IX 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 UN IX. 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 phNm thng mi. Hai dng UN IX: System V ca AT&T, N ovell v Berkeley Software Distribution (BSD) ca i hc Berkeley. + System V: Cc phin bn UN IX 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 UN IX, 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, UN IX l tn thuc s hu ca AT&T. T nm 1992, khi AT&T bn b phn Unix cho N ovell, 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. N goi ra, Institute of Electrical and Electronic Engineers (IEEE) thit lp chuNn "An Industry-Recognized Operating Systems Interface Standard based on the UN IX 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 chuNn ha UN IX vn cn rt xa kt qu cui cng. N hng y l qu trnh cn thit c li cho s pht trin ca ngnh tin hc ni chung v s sng cn ca HH UN IX ni ring.

Hnh 1.1 Cc phin bn ca Unix Cc nhm nh cung cp khc nhau v UN IX 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 UN IX-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 UN IX-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 UN IX.

Formatted: Bullets and Numbering

2. Lch s pht trin ca Linux


Linux l mt HH dng UN IX (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 chuNn 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 UN IX. N n ch rng gia cc Unix s khc nhau cng khng km g gia Unix v Linux. N m 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. N gy 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 GN U, 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. N gi 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 WindowN T. 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, N ht Bn, c v mt s cc nc chu u u cng c k hach pht trin ring Linux cho t nc ca h. Vit N am 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.

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, chuNn ha. N hng 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 UN IX 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. N h 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. N hn Linux l phn mm t do c phn phi theo Giy php s hu cng cng phn mm GN U GPL.

2.1 Mt s c im chnh ca Linux


a nn Linux ban u c xem 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 nh

10

Atari, Amiga...N goi 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 UN IX ta c th t lnh chy ch nn (background) ng thi khi c th thc hin cc lnh k. Nhiu ngi s dng N hiu ngi s dng c th s dng my tnh c ci UN IX ti mt thi im. c lp phn cng V h iu hnh UN IX 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. N gi 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

11

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 chuNn ho. Tnh tng thch Linux tng thch hu nh hon ton vi hu ht cc chuNn Unix nh IEEE POSIX.1, UN IX 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 N gay 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. N h 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. N goi 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.

12

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 GN U/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 ( N hn h iu hnh).

13

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. N hn 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. N hn (cn c gi l h li) ca Linux, l mt b cc mdun chng trnh c vai tr iu khin cc thnh phn ca my tnh, phn phi cc ti nguyn cho ngi dng (cc qu trnh ngi dng). N hn chnh l cu ni gia chng trnh ng dng vi phn cng. N gi 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.

14

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 x cho ngi dng. Cc b iu khin thit b UN IX 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 thi hnh cc nhim v qun l ring r, chuyn bit. Mt s tin ch h thng c gi ra ch mt ln khi ng v cu hnh phng tin h thng, mt s tin ch khc, theo thut ng UN IX 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.

15

Tin ch (hay lnh) c sn trong h iu hnh (di y tin ch c coi l lnh thng trc). N i 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 UN IX 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

16

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 mt nhm 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 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

17

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

18

/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: N gi s dng - lnh Linux - bin dch Shell - Kernel - My tnh (phn cng).

19

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 chuNn 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
Formatted: Bullets and Numbering

20

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. N u 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. N u 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
Formatted: Bullets and Numbering

21

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. N u 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 Nn, 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.
Formatted: Bullets and Numbering

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 UN IX u c mt Boot block (block ny c th trng).

22

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. N gi s hu thng l ngi to ra file . N hm ngi s hu file, trong UN IX System V th thng thuc v nhm ca ngi to ra file , cn trong BSD UN IX 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 UN IX 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

23

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 UN IX 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 UN IX s dng truy nhp ti cc thit b vo ra. Mi thit b vo ra trong UN IX 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. N gi 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 UN IX System V m khng c trong BSD UN IX. 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. 24

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

25

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 .

26

/-----+ !-------/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 gc / y l th mc gc cha ng tt c cc th mc con c trong h thng. Th mc /root

27

N h c gii thiu th mc /root c th c coi l "th mc ring" ca ngi qun tr h thng. Th mc ny c s dng lu tr cc file tm thi, nhn Linux v nh khi ng, cc file nh phn quan trng (nhng file c s dng n trc khi Linux c th gn kt n phn vng /user), cc file ng nhp quan trng, b m in cho vic in n, hay vng lu tm cho vic nhn v gi email. N cng c s dng cho cc vng trng tm thi khi thc hin cc thao tc quan trng, v d nh khi xy dng (build) mt gi RPM t cc file RPM ngun. Th mc /bin Trong Linux, chng trnh c coi l kh thi nu n c th thc hin c. Khi mt chng trnh c bin dch, n s c dng l file nh phn. N h vy, chng trnh ng dng trong Linux l mt file nh phn kh thi. V vy, nhng nh pht trin Linux quyt nh phi t chc mt th mc "binaries" lu tr cc chng trnh kh thi c trn h thng, chnh l th mc /bin. Ban u, th mc /bin (bin l vit tt ca t binary) l ni lu tr cc file nh phn kh thi. N hng theo thi gian, ngy cng c nhiu hn cc file kh thi c trong Linux, do , c thm cc th mc nh /sbin, /usr/bin c s dng lu tr cc file . Th mc /dev Mt phn khng th thiu trong bt k my tnh no l cc trnh iu khin thit b. Khng c chng, s khng th c c bt k thng tin no trn mn hnh ca (cc thng tin c c do trnh iu khin thit b hin th a ra). Cng khng th nhp c thng tin (nhng thng tin do trnh iu khin thit b bn phm c v chuyn ti h thng), v cng khng th s dng a mm ca (c qun l bi trnh iu khin a mm). Tt c cc trnh iu khin thit b u c lu tr trong th mc /dev. Th mc /etc Qun tr h thng trong Linux khng phi l n gin, chng hn nh vic qun l ti khon ngi dng, vn bo mt, trnh iu khin thit b, cu hnh phn cng, v.v.. gim bt phc tp, th mc /etc c thit k lu tr tt c cc thng tin hay cc file cu hnh h thng. Th mc /lib Linux c mt trung tm lu tr cc th vin hm v th tc, l th mc /lib. Th mc /lost+found Mt file c khi phc sau khi c bt k mt vn hoc gp mt li v ghi a trn h thng u c lu vo th mc ny. 28

Th mc /mnt Th mc /mnt l ni kt ni cc thit b (v d a cng, a mm...) vo h thng file chnh nh lnh mount. Thng thng cc th mc con ca /mnt chnh l gc ca cc h thng file c kt ni: /mnt/floppy: a mm, /mnt/hda1: vng u tin ca a cng th nht (hda), /mnt/hdb3: vng th ba ca a cng th 2 (hdb).. Th mc /tmp Th mc /tmp c rt nhiu chng trnh trong Linux s dng nh mt ni lu tr cc file tm thi. V d, nu ang son tho mt file, chng trnh s to ra mt file l bn sao tm thi (bn nhp) ca file v lu vo trong th mc /tmp. Vic son tho thc hin trc tip trn file tm thi ny v sau khi son tho xong, file tm thi s c ghi ln file gc. Cch thc nh vy bo m s an ton i vi file cn son tho. Th mc /usr Thng thng th th mc /usr l trung tm lu tr tt c cc lnh hng n ngi dng (user-related commands). Tuy nhin, ngy nay tht kh xc nh trong th mc ny c nhng th g, bi v hu ht cc file nh phn cn cho Linux u c lu tr y, trong ng ch l th mc con /usr/src bao gm cc th mc con cha cc chng trnh ngun ca nhn Linux. Th mc /home Th mc ny cha cc th mc c nhn ca ngi dng: mi ngi dng tng ng vi mt th mc con y, tn ngi dng c ly lm tn ca th mc con. Th mc /var Th mc /var c s dng lu tr cc file cha cc thng tin lun lun thay i, bao gm b m in, vng lu tm thi cho vic nhn v gi th (mail), cc kha tin trnh, v.v.. Th mc /boot L th mc cha nhn ca h thng (Linux-*.*.), System.map (file nh x n cc driver np cc h thng file khc), nh (image) ca h thng file dng cho initrd (ramdisk), trnh iu khin cho cc thit b RAID (mt thit b gm mt mng cc a cng tng tc v an ton khi ghi d liu), cc bn sao lu boot record ca cc phn vng a khc. Th mc ny cho php khi ng v np li bt k trnh iu khin no c yu cu c cc h thng file khc.

29

Th mc /proc y l th mc dnh cho nhn (kernel) ca h iu hnh v thc t y l mt h thng file c lp do nhn khi to. Th mc /misc v th mc /opt Cho php lu tr mi i tng vo hai th mc ny. Th mc /sbin Th mc lu gi cc file h thng thng t ng chy.

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 chuNn input. Lung d liu ra mn hnh gi l chuNn output cn lung d liu thng bo li l chuNn error. Trong Linux cc lung giao tip chuNn 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 chuNn: Vo chuNn (stdin) Ra chuNn (stdout) fd = 0. fd = 1.

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

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

30

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 chuNn. Dng lnh ls chng ta s nhn c d liu ra mn hnh, l file output chuNn. 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 chuNn. 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 chuNn v error. Khi dng chuyn tip, input chuNn c th ly d liu t file thay v bn phm, output chuNn 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 chuNn (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:


$cat < abc.txt $cat 0< abc.txt hoc

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 thm nhp 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 thm nhp (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 Mt ngi s dng c m t bng cc thng tin sau: Tn. [mt khNu (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 khNu]. 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). N h 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 1 van_a group r - : : : : : : : 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. N u 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. N gi s dng vi quyn ghi khi truy nhp vo file c th thm thng tin vo file. N u 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. N u 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. N u 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

N u ta quen vi h nh phn, hy suy ngh bng h thng nh phn. Khi , rwx s nh s nh phn 3 bit. N u 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


N hm 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. N h vy ch c ngi s hu ca th mc mi c quyn to v xa tp tin trong th mc. N goi 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. N u ch c tham s v ch, th ngi dng ch s c quyn s hu file v nhm s hu khng thay i. N u theo sau tn ngi ch l du "." v tn ca mt nhm th nhm s nhm s hu file. N u 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 - help : a ra trang tr gip v thot.
drwxr-xr-x 11 duonglk root 4000 Oct 21 2008 vidu
Formatted: Bullets and Numbering

ti (c hoc khng thay i s hu). V d, th mc vidu c thng tin v cc quyn truy nhp nh sau: N gi 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 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 - help : hin th trang tr gip v thot
Formatted: Bullets and Numbering

(s thng bo hin ra c th t hn trng hp -v, -verbosr).

(c hoc khng thay i s hu). 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 Nn. l : a ra thng tin y nht v cc file v th mc. s : ch ra kch thc ca file, tnh theo khi (1 khi = 1204 byte). F : xc nh kiu file (/ = th mc, * = chng trnh kh thi). m : lit k cc file c ngn cch nhau bi du ",". C : a ra danh sch cc file v th mc theo dng ct (hai th mc gn nhau 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 x : a ra danh sch cc file v th mc theo dng ct (hai th mc gn 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.
Formatted: Bullets and Numbering

c xp vo mt ct).

i gn y nht. c xp trn hai dng u ca hai ct k nhau).

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). N u 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 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.
Formatted: Bullets and Numbering

khng cho quyn rwxrwxrwx.

N u mun to th mc c khong cch gia cc t ta phi s dng du . N u 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 cNn 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
Formatted: Bullets and Numbering

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). V d:
# rmdir -p /test/test1/test2 rmdir: /: No such file or directory

- verbose : a ra thng bo khi xa mt th mc. - help : hin th trang tr gip v thot.

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 . N u s dng lnh mv i tn mt th mc vi mt ci tn c t cho mt file th lnh s gp li. N u 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. N u 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. N gi dng g ni dung ca file ngay ti du nhc mn hnh v g CTRL+d kt thc vic son tho. N hc 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
Formatted: Bullets and Numbering

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. N u 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 c: khng cun mn hnh, thay vo xa mn hnh v hin th ni dung file bt s: xa bt cc dng trng lin nhau trong ni dung file ch gi li mt dng. u: b qua du gch chn.

tip ni dung file. u t nh mn hnh.

+/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 N hn 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


N h 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 chuNn, vi s th t ca dng c thm vo. N u khng c file (tn file), hoc khi file l du "-", th c ni dung t thit b vo chuNn. Cc tu chn: 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 44 b, --body-numbering=STYLE: s dng kiu STYLE cho vic nh th t cc 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 f, --footer-numbering=STYLE : s dng kiu STYLE nh s cc dng trong h, --header-numbering=STYLE : s dng kiu STYLE nh s cc dng trong i, --page-increment=s : nh s th t ca dng theo cp s cng c cng sai l
Formatted: Bullets and Numbering

dng trong ni dung file. C cc kiu STYLE sau:

xc nh phm vi cho vic phn trang logic). ni dung file (mt cu c th c hai dng ...). ni dung file.

c s 0 u; rn - cn phi, khng c s 0 u; rz - cn phi v c s 0 u).

V d:

p, --no-renumber : khng thit lp li s dng ti mi trang logic. s, --number-separator=xu : thm chui xu vo sau s th t ca dng. v, --first-page=s : s dng u tin trn mi trang logic. w, --number-width=s : hin th s th t ca dng trn ct th s. - help : hin th trang tr gip v thot.

# 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. N u c nhiu hn mt file, th ln lt tn ca file v 10 dng ni dung u tin s c hin th. N u khng c tham s filename, hoc filename l du "-", th ngm nh s c t thit b vo chuNn. Cc tu chn: c, --bytes=c : hin th c (s nguyn) k t u tin trong ni dung file (c c th 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.
Formatted: Bullets and Numbering

nhn gi tr l b cho 512, k cho 1K, m cho 1 Meg)

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. N u c nhiu hn mt file, th ln lt tn ca file v 10 dng cui s c hin th. N u khng c tham s file, hoc file l du "-" th ngm nh s c t thit b vo chuNn. Cc ty chn: 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. - 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 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
Formatted: Bullets and Numbering

file: -f, --follow, v --follow=descriptor l nh nhau.

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. N u 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. 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 z : xem kiu ca file nn. 46
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

Mt s tu chn sau y:

dng trong file tn-file. kim tra trn thit b vo chuNn, s dng du "-". Ghi ch: N h rng kt qu ca lnh file khng phi lc no cng chnh xc tuyt i.

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. N u khng c ty chn no th mc nh a ra c s dng, s t v s k t. N gm nh khi khng c tn file trong lnh th s c v m trn thit b vo chuNn. 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.
Formatted: Bullets and Numbering

Khi g lnh wc m khng c mt tham s no, mc nh s son tho trc tip ni dung trn thit b vo chuNn. 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
Formatted: Bullets and Numbering

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. N u 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. N u 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
Formatted: Bullets and Numbering

nhau. diff). -

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 d: tm ra s khc bit nh (tu chn ny c th lm chm tc lm vic ca lnh - exclude-from=file: khi so snh th mc, b qua cc file v cc th mc con c 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.

tn ph hp vi mu c trong file.

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 cNn 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 f, --force : b qua cc file (xc nh qua tham s file) khng tn ti m khng cn 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.
Formatted: Bullets and Numbering

siu ngi dng mi c php dng ty chn ny. nhc nh.

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

cp [ty-chn] --target-directory=<th-mc> <file-ngun>... Lnh ny cho php sao file-ngun thnh file-ch hoc sao chp t nhiu file-ngun vo mt th mc ch (tham s <file-ch> hay <th-mc>). Dng th hai l mt cch vit khc i th t hai tham s v tr. Cc ty chn: c. v, --verbose : a ra thng bo v qu trnh sao chp. - help : hin th trang tr gip v thot. a, --archive : ging nh -dpR (t hp ba tham s -d, -p, -R, nh di y). b, --backup[=CON TROL] : 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
Formatted: Bullets and Numbering

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

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

49

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


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

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 chuNn) v ch gi li mt dng duy nht trong s cc dng trng lp ri a ra output (thit b ra chuNn). Cc tu chn: 50

dng.

c, --count : m v hin th s ln xut hin ca cc dng trong file. d : hin th ln mn hnh dng b trng lp. u : hin th ni dung file sau khi xa b ton b cc dng b trng lp khng gi i : hin th ni dung file sau khi xa b cc dng trng lp v ch gi li duy nht D : hin th tt c cc dng trng lp trn mn hnh.

Formatted: Bullets and Numbering

li mt dng no. mt dng c ni dung b trng lp. N u s dng lnh uniq trn mt file khng c cc dng trng lp th lnh khng c tc 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. 51

4.14 Sp xp ni dung file vi lnh sort


L lnh c cc thng tin v sp xp chng theo th t trong bng ch ci hoc theo th t c quy nh theo cc ty chn ca lnh. C php lnh: sort [ty-chn] [file] ... Hin th ni dung sau khi sp xp ca mt hoc nhiu file ra thit b ra chuNn l tc dng ca lnh sort. N gm 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. N u 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 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.
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

t c bit (du cch, ? ...) c a ln u.

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

52

57879 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 chuNn 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 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
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

ngm nh.

cc dng mi. N goi 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 N UM, --after-context=N UM : a ra N UM dng ni dung tip theo sau dng B N UM, --before-context=N UM : a ra N UM dng ni dung trc dng c C [N UM], --context[=N UM] : hin th N UM dng (mc nh l 2 dng) ni dung. 53
Formatted: Bullets and Numbering

c cha mu. cha mu.

a ra -

N UM : ging --context=N UM a ra cc dng ni dung trc v sau dng c b, --byte-offset : hin th a ch tng i trong file u vo trc mi dng c c, --count : m s dng tng ng cha mu trong file u vo thay cho vic d ACTION , --directories=ACTION : nu u vo l mt th mc, s dng

cha mu. Tuy nhin, grep s khng a ra dng no nhiu hn mt ln.

hin th cc dng cha mu. ACTION x l n. Mc nh, ACTION l read, tc l s c ni dung th mc nh mt file thng thng. N u ACTION l skip, th mc s b b qua. N u 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. ti. 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. N goi 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. N hng lc , lnh egrep t ra rt c ch.
Formatted: Bullets and Numbering

f file, --file=file : ly cc mu t file, mt mu trn mt dng. File trng cha 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 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 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

ng cc mu rng, v cc dng a ra cng l cc dng trng.

hp tm nhiu file.

54

egrep - expression grep - c rt nhiu cc k hiu biu din mnh hn grep. Di y l cc k hiu hay dng: K hiu c \c ^ $ . [xy] [^xy] c* c+ c? a|b (a) V egrep.
# egrep 'b+' /etc/passwd | head

ngha - 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 d:

gi s by gi mun tm cc dng c cha mt hoc nhiu hn k t b trn file passwk vi lnh

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. 55
Formatted: Bullets and Numbering

V d: file thu c ni dung nh sau:


# cat thu /dev/hda4: Linux/i386 ext2 filesystem /dev/hda5: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty thutest toithutest

v file mauloc c 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 Charles Main Charles Main AM Main Jr. 3.0 3.0 5.1 .98 .98 .94 3 3 3 34 34 13 # grep '^n' datafile

56

north

NO

Margot Weber Charles Main

4.5 3.0

.89 .98

5 3

9 34

# grep '4$' datafile northwest NW # 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 EA WE SO CT NO WE NW WE SW SO SE EA NE NO CT EA EA NE NW SW NW SW SE NE 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 .89 .97 .98 .97 .8 .95 .7 .84 .94 .89 .94 .84 .84 .94 .98 .8 .98 .8 .7 .94 3 2 4 3 3 5 2 4 4 5 3 5 5 5 5 3 3 2 34 18 17 13 5 5 4 3 .94 5 5 5 9 23 34 23 18 15 17 20 13 9 13 20 20 13 34 18 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. # 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

57

northwest northwest northeast north north northwest western southern eastern northeast central

NW NW NE NO NO NW WE SO EA NE CT

Charles Main Charles Main AM Main Jr. Margot Weber Margot Weber

3.0 3.0 5.1 4.5

.98 .98 .94 .89

3 3 3 5 5 9 3 5 4 5 15 20 3 5 .8 .95 .7 .7 .98 .97 .8 .7 .84 .94 .89 .94 2 4 4 4 3 5 2 4 5 3 5 5 13 34 13 9

34

# grep '\<north' datafile

# grep '\<north\>' datafile 4.5 .89 3.0 5.3 5.1 4.4 5.7 .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 .94 # 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 * .98 .97 34 23

13

#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 18 15 17 17 34 23 18 17 20 13 9 13

# 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


58

Cc on trn y gii thiu cch thc tm file theo ni dung vi cc lnh grep, egrep v fgrep. Linux cn cho php ngi dng s dng mt cch thc khc y nng lc, l s dng lnh find, lnh tm file theo cc thuc tnh ca file. Lnh ny c mt s khc bit so vi cc lnh khc, l cc ty chn ca lnh l mt t ch khng phi mt k t. iu kin cn i vi lnh ny l ch ra c im bt u ca vic tm kim trong h thng file v nhng quy tc cn tun theo ca vic tm kim. C php 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 follow : (ty chn ny ch p dng cho th mc) nu c ty chn ny th cc lin 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
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

tm kim c thc hin bt u ti gc cy th mc c cha file cn tm). kt tng trng c trong mt th mc lin kt s c ch ra.

i din nh du "*", "?"... 59

type kiu : tm cc file thuc kiu vi kiu nhn cc gi tr: b: c bit theo khi c: c bit theo k t d: th mc p: pipe f: file bnh thng l: lin kt tng trng s: socket

uid n: ch s ngi s hu file l n. user tn-ngi: file c s hu bi ngi dng tn-ngi. exec lnh : ty chn ny cho php kt hp lnh find vi mt lnh khc c c

Cc hnh ng: 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 ';' 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

fprint file : hin th y tn file vo trong file. N u file khng tn ti th s print : hin th y tn file trn thit b ra chuNn. ls : hin th file hin thi theo khun dng: lit k danh sch y km c s th

c to ra, nu tn ti th s b thay th ni dung.

mc, ch s ca mi file, vi kch thc file c tnh theo khi (block).

60

./temp/attach.msg

4.17 Nn v sao lu cc file 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). N goi 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 - delete : xa t file lu tr (khng s dng cho bng t). r, --append : chn thm file vo cui file lu tr. 61
Formatted: Bullets and Numbering

lu tr.

V d:

t, --list : lit k ni dung ca mt file lu tr. u, --update : ch thm vo file lu tr cc file mi hn cc file c. x, --extract, --get : tch cc file ra khi file lu tr. C, --directory tn-th-mc : thay i n th mc c tn l tn-th-mc. - checkpoint : a ra tn th mc khi c file lu tr. f, --file [HOSTN AME:]file : ty chn ny xc nh tn file lu tr hoc thit b 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 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 N , --after-date DATE, --newer DATE : ch lu tr cc file mi hn cc file c - 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.

lu tr l file (nu khng c ty chn ny, mc nh ni lu tr l /dev/rmt0).

lu tr mi ln chng.

lu l ln v khng cha ht trong mt n v lu tr vt l. lu tr trong ngy DATE.

# 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). N u 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/

62

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

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. N n, 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. N u 63

khng c tn file no c ch ra th thng tin t thit b vo chuNn s c nn v gi ra thit b ra chuNn. Trong mt vi trng hp, lnh ny s b qua lin kt tng trng. N u 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). N u tn file gm nhiu phn nh th phn di nht s b ct b. V d, tn file l gzip.msdos.exe, khi c nn s c tn l gzip.msd.exe.gz. File c nn c th c khi phc tr li dng nguyn th vi lnh gzip -d hoc gunzip. Vi lnh gzip c th gii nn mt hoc nhiu file c phn m rng l .gz, -gz, .z, -z, _z hoc .Z ... gunzip dng gii nn cc file nn bng lnh gzip, zip, compress, compress -H. Lnh zcat c s dng khi mun xem ni dung mt file nn trn thit b ra chuNn. Cc ty chn: c, --stdout --to-stdout : a ra trn thit b ra chuNn; gi nguyn file gc khng c
Formatted: Bullets and Numbering

s thay i. N u 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 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 N u 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 N u kt hp vi ty chn --name, tn file c gii nn, thi gian gii nn c lu tr trong file nn. N u kt hp vi ty chn --verbose, tng kch thc v t l nn ca tt c cc file s c hin th. N u kt hp vi ty chn --quiet, tiu v tng s dng ca cc file nn khng c hin th. 64
Formatted: Bullets and Numbering

tng ng thc s tn ti, hay d liu nn c c hoc ghi trn thit b u cui.

n, --no-name : khi nn, ty chn ny s khng lu tr tn file gc v thi gian

Formatted: Bullets and Numbering

nn, (tn file gc s lun c lu nu khi nn tn ca n b ct b). Khi gii nn, ty chn ny s khng khi phc li tn file gc cng nh thi gian thc hin vic nn. Ty chn ny c ngm nh. N , --name : ty chn ny ngc vi ty chn trn (-n), n hu ch trn h thng -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 c s gii hn v di tn file hay khi thi im nn b mt sau khi chuyn i file.

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

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


C php cc lnh nh sau: 65

compress [ty-chn] [<file>] uncompress [ty-chn] [<file>] zcat [ty-chn] [<file>] Lnh compress lm gim kch thc ca file v khi s dng lnh ny, file gc s b thay th bi file nn vi phn m rng l .Z, cc thng tin khc lin quan n file khng thay i. N u khng c tn file no c ch ra, thng tin t thit b vo chuNn s c nn v gi ra thit b ra chuNn. Lnh compress ch s dng cho cc file thng thng. Trong mt vi trng hp, n s b qua lin kt tng trng. N u 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,
Formatted: Bullets and Numbering

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 chuNn, 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 chuNn a ra d liu c gii nn trn thit b ra chuNn. 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.
Formatted: Bullets and Numbering

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 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. Lnh ls l cho php hin th s hard link n tp tin. Symbolic link c chc nng ging nh shortcut ca MS Windows. Khi ta c/ghi soft link, ta c/ghi tp tin; khi ta xa symbolic link, ta ch xa symbolic link v tp tin c gi nguyn. Link c to bi lnh ln . T chn ln s cho php to symbolic link. V d
[tnminh@pascal tnminh]$ls -l -rw------drwxr-xr-x 1 tnminh 2 tnminh pkt 517 Oct 27 12:00 mbox pkt 4096 Aug 31 17:50 security

[tnminh@pascal tnminh]$ln s mbox mybox [tnminh@pascal tnminh]$ln s security securproj

66

[tnminh@pascal tnminh]$ln l -rw------lrwxrwxrwx lrwxrwxrwx drwxr-xr-x 1 tnminh 1 tnminh 1 tnminh 2 tnminh pkt 517 Oct 27 12:00 pkt 4 Oct 27 17:57 pkt 8 Oct 27 17:57 mbox mymail -> mbox secrproj -> security

pkt 4096 Aug 31 17:50 security

[tnminh@pascal tnminh]$

Bn c c th thy kh r kt qu ca symbolic link qua th d trn. Symbolic link rt c nhiu ng dng. V d nh mt tp tin XXX ca mt chng trnh YYY nm trong th mc /var/ZZZ. N u phn mnh ca /var/ZZZ b qu y, ta c th s tn XXX qua mt th mc khc thuc phn mnh khc v to mt link th vo m chng trnh YYY vn khng h hay bit v n vn truy cp n /var/ZZZ/XXX nh thng l.

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

67

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 khNu ng nhp.
May1 login: root Password:

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

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

68

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: N u 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

Formatted: Bullets and Numbering

Formatted: Bullets and Numbering

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! 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
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

l file lu tr danh sch cc ngi dng ng nhp thnh cng vo h thng). 69

d : khng ghi thng tin ln file /var/log/wtmp. Ty chn -n c ngha tng t f : thc hin tt my ngay m khng thc hin ln lt vic dng cc dch v c i : ch thc hin dng tt c cc dch v mng trc khi tt my.

song khng tin hnh vic ng b ha. trn h thng. 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
N goi 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 quNn) 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. N i 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 khNu. 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 khNu 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 khNu. Thm ch trong trng hp h thng ch c mt ngi s dng th vic thay i mt khNu vn l rt cn thit. Mt khNu 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 khNu, trong g mt khNu l cng vic bt buc phi thc hin. Tn ngi dng c th c cng khai song mt khNu th tuyt i phi c m bo b mt. Vic ng k tn v mt khNu ca siu ngi dng c tin hnh trong qu trnh khi to h iu hnh Linux. Vic ng k tn v mt khNu 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 khNu cho ngi dng mi (c th do ngi dng ngh) v dng lnh adduser (hoc lnh useradd) ng k tn v mt khNu vi h thng. Sau , ngi dng mi nht thit cn thay i mt khNu bo m vic gi b mt c nhn tuyt i. Lnh passwd cho php thay i mt khNu ng vi tn ng nhp ngi dng. 70

C php lnh passwd: passwd [ty-chn] [tn-ngi-dng] vi cc ty chn nh sau: k : thay i mt khNu ngi dng. Lnh i hi phi xc nhn quyn bng vic g
Formatted: Bullets and Numbering

mt khNu ang dng trc khi thay i mt khNu. Cho php ngi dng thay i mt khNu ca mnh c lp vi siu ngi dng. f : t mt khNu mi cho ngi dng song khng cn tin hnh vic kim tra mt l : kha mt ti khon ngi dng. Vic kha ti khon thc cht l vic dch bn khNu ang dng. Ch siu ngi dng mi c quyn s dng tham s ny. m ha mt khNu 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 khNu ngi dng ch c tin hnh t thit b vo chuNn khng th tin hnh t ng dn (pipe). N u khng c tham s ny cho php nhp mt khNu c t thit b vo chuNn hoc t ng dn. u : m kha (tho b kha) mt ti khon (i ngu vi tham s -l). Ch siu d : xa b mt khNu ca ngi dng. Ch siu ngi dng mi c quyn s dng S : hin th thng tin ngn gn v trng thi mt khNu ca ngi dng c a ngi dng mi c quyn s dng tham s ny. tham s ny. ra. Ch siu ngi dng mi c quyn s dng tham s ny. N u 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 khNu mi ca mnh vo. Sau khi ngi dng g xong mt khNu mi, h thng cho ra thng bo:
BAD PASSWORD: it is derived from your password entry Retype new UNIX password:

ngi dng khng nh mt ln na mt khNu 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 khNu 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 khNu mi, h thng cho ra thng bo:
Passwd: all authentication tokens updated successfully.

cho bit vic thay i mt khNu thnh cng v du nhc shell li hin ra. Khi siu ngi dng g lnh: 71

# passwd -S root

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

cho bit thut ton m ha mt khNu 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 khNu 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 khNu). c bit khng nn s dng h tn, ngy sinh, s in thoi ... ca bn thn hoc ngi thn lm mt khNu v y l mt trong nhng trng hp mt khNu n gin nht. N u thng bo mt khNu qu n gin c lp i lp li mt vi ln v khng c thng bo mt khNu mi thnh cng quay v du nhc shell th nn g li lnh v chn mt mt khNu mi phc tp hn i cht. Lnh xem, thit t ngy, gi hin ti v xem lch trn h thng
Formatted: Bullets and Numbering

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
Formatted: Bullets and Numbering

"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. 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 chuNn 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. 72

0500). -

R, --rfc-822 : hin th ngy theo RFC-822 (v d: Wed, 8 N ov 2000 09:21:46 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 N ov 8 - help : hin th thng tin tr gip v thot.

14:29:12 UTC 2000). 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. 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
Formatted: Bullets and Numbering

73

# 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
Formatted: Bullets and Numbering

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

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 Mo 64 71 Tu 65 72 We 66 73 Th 60 67 74 Fr 61 68 75 Sa 62 69 76

74

77 84

78 85

79 86

80 87

81 88

82 89

83 90

5.6 Xem thng tin h thng uname


Lnh uname cho php xem thng tin h thng vi c php l: uname [ty-chn] N u 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.
Formatted: Bullets and Numbering

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 N gy sn xut: #1 Tue Mar 7 21:07:39 EST 2000 Kiu kin trc b x l: i686 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.

75

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>' N m (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 \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 l /mnt/hda1 th tn thc s ca n l /hda1) Hin th tn y ca th mc hin thi (v d /mnt/hda1) ngha

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.

5.8 Lnh gi ngn ng tnh ton s hc


76

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 chuNn, bin chuNn, 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 chuNn th vin ton hc (v d: w, --warn : khi thc hin php tnh khng tun theo chuNn POSIX (POSIX l mt s, --standard : thc hin php tnh chnh xc theo chuNn ca ngn ng POSIX bc. q, --quiet : khng hin ra li gii thiu v phn mm GN U khi dng bc.
Formatted: Bullets and Numbering

5/5=1.00000000000000000000). chuNn trong Linux) th mt cnh bo xut hin.

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 (N u 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:
(4+5)*(12-10) 18

77

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 : N gn 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).
Formatted: Bullets and Numbering

78

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 chuNn 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 chuNn 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 N C Command ca MS-DOS. N gi s dng h iu hnh MS-DOS u bit tnh nng tin ch N orton Commander (N C) 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 N C gim i: N hiu ngi dng vn thch dng N C 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 N C ca MSDOS v s dng MC trong Linux tng t nh s dng N C 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. N h 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.

79

N u 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 ~... 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. 80

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 . N u 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. N gi dng cng c th thc hin cc lnh ca cc phm chc nng bng cch nhy chut ln phm chc nng . N u 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 chuNn 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>. N u 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: Enter N u 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 file hay th 81

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 C-x t, C-x C-t C-x p, C-x C-p 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 panel chn (C-x t) hoc trn panel kia (C-x C-t) xung dng lnh 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 trc . M-p s 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 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

Cc phm thao tc trn panel: Up,Down, PgUp, PgDown, Home, End b, C-b, C-h, Backspace, Delete di chuyn ngc li mt trang mn hnh 82 s dng cc phm ny di chuyn trong mt panel

Space u, d g, G Tab, C-i Insert, C-t M-g, M-h, M-j

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. N u tu chn Show mini-status trong option c t th xu tm kim s c hin th dng trng thi.

C-s, M-s

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. N u nhn C-s ln na, vic tm kim s c tip tc

M-t C-\ + * M-o M-y M-u

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

83

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 gian s i Listing Mode ... 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 ... N etwork link ... FTP link ... Rescan C-r 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 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 M-! F4 F5 C-x c 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 84

Link Symlink edit sYimlink chOwn Advanced chown Rename/Move Mkdir Delete Quick cd select Group Unselect group reverse selecTion Exit

C-x l C-x s C-x C-s C-x o

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

F6 F7 F8 M-c M-+ M- M-* F10

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 Find file Swap panels M-? C-u hin th th mc di dng cy th mc 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 C-\ thay i th mc hin thi thc hin mt lnh trong MC v hin th kt qu trn panel chn External panelize C-x ! (v d: nu mun trn panel chn 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 85

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

cho php hiu chnh file ~/.mc/ext xc nh chng trnh s Extension file edit thc hin khi xem, son tho hay lm bt c iu g trn cc file c tn m rng 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 ... Save setup 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 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 N cEdit ca N orton Commander. hiu chnh mt s file vn bn, hy di chuyn thanh 86

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. N u 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 N ew Save Save as ... Insert file ... About .. Quit F10 C-o C-n F2 F12 F15 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 dung file hin thi 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

87

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

88

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 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. N u 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 IN PUT MODE khi ta ang trong ch nhp vn bn. Khi 89

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> i <text> <ESC> A <text> <ESC> I <text> <ESC> Chn dng o <text> <ESC> O <text> <ESC> CTRL V trc chng. Chn mt dng vo trc dng cha cursor. Chn mt dng vo sau dng cha cursor. Chn k t vo sau cursor. Chn k t vo trc cursor. Chn k t vo cui dng. Chn k t vo u dng.

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

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

: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 Nn (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 xa n cui dng xo t cha cursor xo 3 t xa khi ht dy string

Xa dng vn bn dd hoc d<CR> 3dd d$ hoc D dw 3dw hoc d3w d/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$ thay mt t bng text. T c thay th tnh t cursor n k t $. thay 2 t. thay th cui dng 92 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

c/string

thay th n ht string

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

93

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)

Ta dng php iu khin ln, xung xem trang man. N u 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 Tn ch ngha

user command cc lnh thng thng ca h iu hnh system call subroutines devices cc hm th vin kernel ca h thng cc hm th vin lp trnh cc hm truy xut file v x l thit b 94

5 6 7 8

File format games Miscell sys. admin

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. N u chng ta khng xc nh session th session mc nhin l 1 .

95

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 UN IX 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 UN IX (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): N gi 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 chuNn v li. 96

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 GN U. 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 GN U 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. 97

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.

98

c bit hn n to xut chuNn ca 1 lnh thnh nhp chuNn 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 UN IX 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 chuNn ca n n xut chuNn ca n, trong trng hp ny gi xut ca sort n nhp ca lp. Th hai tee ly ch 1 bn sao ca nhp chuNn vo tn tp tin baocaostt.

1.4 Lp trnh Shell Script


N gn 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

Ch thch trong Shell


99

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. N hng 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 N u 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 chuNn) c lit k nh sau (cc bin ny thng gm cc ch ci hoa): HOME : ng dn th mc ring ca ngi dng, MAIL: ng dn th mc cha hp th ngi dng, PATH: th mc dng tm cc file th hin ni dung lnh, PS1: du mi ban u ca shell (ngm nh l $), PS2: du mi th 2 ca shell (ngm nh l >), 100

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 N ULL nh trong nhng cch sau:


$ vech= $ vech=""

N u ta ra lnh in gi tr ca bin ny th ta s thu c mt gi tr N ULL 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

101

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. V d : 102

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

Trong v d trn khi xut hin dng thng bo N hap vao ten cua ban , ngi dng nhp vo tn v d nh N guyen Hung Dung th kt qu hin th l Ten vua nhap la N guyen 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

Du chia ct lnh ; cho php thc hin nhng lnh bash phc tp nh trn mt dng. N hng quan trng hn, n l kt thc lnh theo l thuyt POSIX. 103

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} tr v word. N u 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. N u bin tn ti v xc nh th tr v word, cn khng th tr v null. N u 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. N u 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 N u bin tn ti v xc nh th tr v gi tr ca n, nu khng th

By gi s dng lnh unset xo bin status, v thc hin vn cc lnh , c output nh sau:
$unset status $echo ${status:-undefined} undefined $echo ${status:=undefined}

104

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} 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. Thay tt c cc phn khp. Ton t ny c trong bash 2.0 hoc ln hn. Thng thng quy tc chuNn 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 Chc nng Xo b phn khp (match) ngn nht ca pattern trc var v tr

105

/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 -n str -z str iu kin thc str1 bng str2 str1 khc str2 str c di ln hn 0 (khc null) str c di bng 0 (null)

106

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 file1 - ot file2 Cc ton t logic Php kim tra ! expr Kt qu ng nu expr khng ng 107 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 file1 c hn file2

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 (AN D) kt ni cc lnh. Php v (AND)
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

108

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

N u 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" N u 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 until Thi hnh mt hoc nhiu cu lnh cho n khi mt iu kin no tr
Formatted: Bullets and Numbering

hoc false. thnh true hoc false. - case Thi hnh mt hoc nhiu cu lnh ph thuc vo gi tr ca bin. - select Thi hnh mt hoc nhiu cu lnh da trn mt khong tu chn ca ngi dng.

Biu thc iu kin if


C php: if then else fi
if condition then

109

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. N u 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. N hn 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 chuNn 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 . N u 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. N u 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 AN D v OR. C php y cho ton t AN D nh sau:
command1 && command2

Cu lnh command2 ch c chy khi v ch khi command1 tr v trng thi l s 0 (true). C php cho ton t OR th nh sau:
command1 || command2

110

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

N u 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" N u 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 # if [ $1 -gt 0 ]; then echo "$1 is positive" elif [ $1 -lt 0 ]

111

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: N hp 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: N hp vo im cho bit xp loi.


echo echo read if Xep loai Nhap vao diem diem test $diem -ge 8 ; then echo " Loai Gioi"

112

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

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. C php y ca case nh sau:
case expr in pattern1 ) pattern2 ) statements ;; statements ;;

113

[*) esac statements ;;] # gi tr mc nh

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. N u 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 if [ $dir ]; then cnt=$(ls Al $dir | wc -l) echo $cnt files in $dir else

114

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.

N u 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). N u 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 : N h 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. V d: Trong v d ny s to menu la chn v cho php ngi dng chn chc nng thc hin. N u 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

115

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

Vng lp For
N h 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

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

116

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 ### do echo -n "$i " done ### Outer for loop ###

V d khc v cch s dng cu trc if v for nh sau:


#!/bin/sh #Script to test for loop# # if [ $# -eq 0 ]

117

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 chown user8 /users/user8/$i fi done

Vng lp While v until


Vng lp for gii hn s ln m mt on m c thi hnh, cc cu trc while v until ca bash cho php mt on m c thi hnh lin tc cho n khi mt iu kin no xy ra.

118

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

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:
#!/bin/sh declare idx=1 while [ $idx != 150] do cp somefile idx=$idx+1 done somefile.$idx -i idx

119

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 done

Lnh 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: N hn s n t i s dng lnh, tnh tng S =1+2+ ..+n 120

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 EN D


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

121

echo $i rm $i done

Cc lnh khc
Lnh 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

N u mun dch sang tri hai 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. }

N u so snh vi C hay Pascal, hm ca bash khng c cht ch, n khng kim tra li v khng c phng thc tr v i s bng gi tr. Tuy nhin ging nh C v Pascal, cc bin a phng c th khai bo cc b i vi hm, do trnh c s xung t vi bin ton cc. thc hin iu ny ta dng t kho local nh trong on m sau:
function { local local } myvar yourvar=1 foo

122

Trong v d v cc bin v tr trn ta cng thy c cch s dng hm trong bash. Cc hm shell gip m ca ta d hiu v d bo dng. S dng cc hm v cc ch thch ta s rt nhiu cng sc khi ta phi tr li nng cp on m m ta vit t thi gian rt lu trc . V d:
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 }

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 ) 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: 123

$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() { # 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

124

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

125

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, #+ i.e., prevents a runaway stack. Data=${stack[$SP]} let "SP += 1" return } status_report(){ # Find out what's happening echo "-------------------------- # Bump stack pointer. # Pop item off stack. # Empty out data item. # Bump stack pointer. # Push item on stack. # Nothing to push?

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

126

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

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

#!/bin/bash # Simulating a twodimensional array. # A twodimensional array stores rows sequentially. Rows=5 Columns=5 declare a alpha # char alpha [Rows] [Columns]; # Unnecessary declaration. 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" ] do let "index = $row * $Rows + $column" echo n "${alpha[index]} " # alpha[$row][$column] let "column += 1" done let "row += 1" echo

128

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

129

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

130

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 chuNn (bn phm). C php ca lnh ny nh sau:


Command << label Input Label

C php ny ni ln rng command c cc input cho n khi n gp label. 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.
Formatted: Bullets and Numbering

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
131

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 hi ra l mn hnh m gn kt qu tng ng cho cc bin t ng. Mt cch t ng cc t trong kt qu thc hin lnh s gn tng ng cho cc bin t ng (t $1 tr i). Xem xt mt v d sau y (chng trnh thu2.arg) c ni dung:
#!/bin/sh # Hien thoi diem chay chuong trinh nay set `date` echo "Thoi gian: $4 $5" echo "Thu: $1" echo "Ngay $3 thang $2 nam $6"

Sau khi i mode ca File chng trnh ny v chy, chng ta nhn c:


Thoi gian: 7:20:15 EST Thu: Tue Ngay 20 thang Oct nam 1998 Nh vy, $# = 6 $* = Tue Oct 20 7:20:15 EST 1998 $1 = Tue $5 = EST $2=Oct $6 = 1998 $3 = 20 $4 = 7:20:15

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 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 #$0 tn shell_script chnh l dir_tree

132

/usr/adm/sa is a directory /usr/bin is a directory

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

133

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)
$ 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) 134

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

1.10 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 x y"

135

echo " print sum" exit 1 fi

Where x and y are two nos for which I will

echo "Sum of $1 and $2 is `expr $1 + $2`"

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 # 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"

136

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

137

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

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

138

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 if [ $temp = $1 ] then echo Tim thay $1 tai dong $textline break fi index=$(($index + 1)) done done }<$2 exit 0 # Do dai tu can tim

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


139

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 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 test $n -ne 2

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

140

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 ] 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 " I will find reverse of given number"

141

echo " exit 1 fi n=$1 rev=0 sd=0

For eg. $0 123, I will print 321"

while [ $n -gt 0 ] do sd=`expr $n % 10` rev=`expr $rev \* 10 n=`expr $n / 10` done echo "Reverse number is $rev" + $sd`

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`

142

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

143

mc echo "Midnight commander, Press a key . . ." read else echo "Error: Midnight commander not installed, Press a key . . ." read fi return } # 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 -d show dir"; -m start midnight commander shell"; -e {editor}, start {editor} of your choice";

144

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;; 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 # # # # | | Escape code Hello World" | | Message

145

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" 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 # bold effect # blink effect # back to noraml # Red color # Green color # See remaing on screen

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" # row 0 and column 69 is used to show clock # put clock on screen #restore current screen postion & attributs #save current screen postion & attributes

146

# #Delay fro 1 second # sleep 1 done ^D

Chy chng trnh


#sh ms &

Shell script to convert upercase filename to lowercase in current


M ngun chng trnh (up2low)
#!/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/

147

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

148

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 fi rm -f /tmp/info.tmp.01.$$$

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


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 (GN U C Compiler) vi ngn ng lp trnh khng khc nhiu vi C chuNn. N i 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 AN SI C hay C truyn thng. N h 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. 149

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:
$ gcc E hello.c o hello.cpp

Xem xt hello.cpp v ta c th thy ni dung ca stdio.h c chn vo file, cng vi nhng m thng bo tin x l khc. Bc tip theo l bin dch hello.cpp sang m obj. S dng tu chn c ca gcc hon thnh:
$ gcc x cpp-output -c hello.cpp o hello.o

Trong trng hp ny, ta khng cn ch nh tn ca file output bi v trnh bin dch to mt tn file obj bng cch thay th .c bi .o. Tu chn x ch cho gcc bit bt u bin dch bc c ch bo trong trng hp ny vi m ngun tin x l. Lm th no gcc bit chia loi c bit ca file? N da vo ui m rng ca file trn xc nh r phi x l file nh th no cho dng. Hu ht nhng ui m rng thng thng v ch thch ca chng c lit k trong bng di. Phn m rng .c .c, .cpp .i Kiu M ngun ngn ng C M ngun ngn ng C++ M ngun C tin x l 150

.ii .S, .s .o .a, .so

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:
o FILE Ch nh tn file output; khng cn thit khi bin dch sang m obj. N u 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.
IDIRN AME Trc khi cha quyt nh c DIRN AME hy tm kim nhng file

include trong danh sch cc th mc( tm trong danh sch cc ng dn th mc)


LDIRN AME Trc khi cha quyt nh c DIRN AME 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 chuNn g ri thng tin m nh phn

ggdb Bao gm tt c thng tin m nh phn m ch c chng trnh g ri GN U- gdb

mi c th hiu c 151

O Ti u ho m bin dch ON Ch nh mt mc ti u ho m N , 0<=N <=3. AN SI H tr chuNn AN SI/ISO ca C, loi b nhng m rng ca GN U m xung t vi

chuNn (tu chn ny khng bo m m theo AN SI).


pedantic

Cho ra tt c nhng cnh bo quy nh bi chuNn

pedantic-erors Thng bo ra tt c cc li quy nh bi chuNn AN SI/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 : N u 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

N u 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 $ 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 GN U make c a ra. GN U 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.
Formatted: Bullets and Numbering

152

Mt danh sch cc cu lnh thc thi trn cc thnh phn ph thuc.

Khi c gi, GN U make s tm cc file c tn l GN Umakefile, 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 8. gcc -c 9. clean: 10. rm *.o editor.o screen.o keyboard.o editor.c screen.c keyboard.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

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 UN IX 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 153

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 chuNn. Cc ng (pipe) cng tng t cc file chuNn. 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 chuNn: stdin, stderr v stdout; ba dng thng kt ni vi my ca ngi s dng v c th c chuyn tip (redirect). Mt s li gi h thng s dng m t file. Hu ht cc li gi tr v gi tr -1 khi c li xy ra v bin errno ghi m li. M li c ghi trong trang chnh tu theo tng li gi h thng. Hm perror() c s dng hin th ni dung thng bo li da trn m li.

Hm open()
Li gi open() s dng m mt file. Khun mu ca hm v gii thch tham s v c ca n c cho di y:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);

i s pathname l mt xu ch ra ng dn n file s c m. Thng s th ba xc nh ch ca file Unix (cc bit c php) c s dng khi to mt file v nn c s dng khi to mt file. Tham s flags nhn mt trong cc gi tr O_RDON LY, O_WRON LY hoc O_RDWR C O_RDON LY O_WRON LY O_RDWR O_CREAT O_EXCL O_N OCTTY O_TRUN C O_APPEN D O_N ON BLOCK O_N ODELAY O_SYN C 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 N i thm v con tr t cui file N u mt qu trnh khng th hon thnh m khng c tr, tr v trng thi trc Tng t O_N ON BLOCK Thao tc s khng tr v cho n khi d liu c ghi vo a hoc thit b 154 Ch gii

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_WRON LY | O_TRUN C

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. N u qu trnh ng file lm cho b m lin kt bng 0 th file s b xo. N u y l m t file cui cng lin kt n mt file c m th bn ghi bng file m c gii phng. N u khng phi l mt file bnh thng th cc hiu ng khng mong mun c th xy ra.

Hm read()
Li gi h thng read() s dng c d liu t file tng ng vi mt m t file.
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);

i s u tin l m t file m c tr v t li gi open() trc . i s th hai l mt con tr ti b m sao chp d liu v i s th ba l s byte s c c. read() tr v s byte c c hoc -1 nu c li xy ra.

Hm write()
Li gi h thng write() s dng ghi d liu vo file tng ng vi mt m t file.
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);

i s u tin l s m t file c tr v t li gi open() trc . i s th hai l con tr ti b m ( sao chp d liu, c dung lng ln cha d liu) v i s th ba xc nh s byte s c ghi. write() tr v s byte c hoc -1 nu c li xy ra.

Hm ftruncate()
Li gi h thng ftruncate() ct file tham chiu bi m t file fd vi di c xc nh bi tham s length.
#include <unistd.h> int ftruncate(int fd, size_t length);

155

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_EN D). 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 { 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. 156

#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. N gi 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> #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);

157

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

158

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


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.

159

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

160

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]; 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: 161

$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); 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. 162

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). N h vy, soname th vin C l libc.5. Th vin libc6 c soname l libc.so.6, s thay i phin bn chnh l s thay i ng k th vin. Phin bn ph v patch level thay i khi li c sa nhng soname khng thay i v bn mi c s thay khc bit ng k so vi bn c. Cc chng trnh ng dng lin kt da vo soname. Tin ch idconfig to mt biu tng lin kt t th vin chuNn 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 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 Khng m rng cu trc d liu s dng trong cc mng

Formatted: Bullets and Numbering

duy tr tnh tng thch ca th vin, cn m bo cc yu cu:



Formatted: Bullets and Numbering

c khi to trong th vin

163

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
Formatted: Bullets and Numbering

Tip theo lin kt th vin:


$ gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc

V khng th ci t th vin ny nh th vin h thng trong /usr hay /usr/lib chng ta cn to 2 kin kt, mt cho soname: V cho trnh lin kt khi kt ni da vo liberr, s dng lerr:
$ ln -s liberr.so.1.0.0 liberr.so

By gi, d dng th vin dng chung mi chng ta quay li chng trnh kim tra, chng ta cn hng trnh lin kt ti th vin no s dng v tm n u, v vy chng ta s s dng tu chn l v L:
$ gcc -g errtest.c -o errtest -L. -lerr

Cui cng chy chong trnh, chng ta cn ch cho ld.so ni tm th vin dng chung :
$ LD_LIBRARY_PATH=$(pwd) ./errtest

S dng i tng dng chung theo cch ng


Mt cch s dng th vin dng chung l np chng t ng mi khi chy khng ging nh nhng th vin lin kt v np mt cch t ng. Ta c th s dng giao din dl (dynamic loading) v n to s linh hot cho lp trnh vin hay ngi dng. Gi s ta ang to mt ng dng s l ho. Trong ng dng, ta biu din d liu mt dng khng theo chuNn 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. N hng 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 164

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 N ULL. N u l N ULL dlopen() m chng trnh ang chy, l chng trnh ca bn, nu filename l ng dn dlopen() m file , nu l tn rt gn dlopen() s tm trong v tr sau tm file:
$LD_ELF_LiBRARY_PATH, $LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, v /lib.

C c th l RTLD_LAZY, c ngha l cc k hiu (symbol) hay tn hm t i tng truy cp s c tm mi khi chng c gi, hoc c c th l RTLD_N OW, 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 N ULL 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 N ULL 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); 165

N u mt trong cc hm li, dlerror() tr v thng bo chi tit li v gn gi tr N ULL cho phn b li. Gii phng i tng chia s bo v ti nguyn h thng c bit b nh, khi ta s dng xong module trong mt i tng chia s, th gii phng chng. Hm dlclose() s ng i tng chia s: int dlclose(void *handle); S dng giao din dl minh ho cch s dng dl,chng ta quay li th vin x l li, s dng mt chng trnh khc nh sau:
/* * M ngun chng trnh dltest.c * Dynamically load liberr.so and call err_ret() */ #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main(void) { void *handle; void (*errfcn)(); const char *errmsg; FILE *pf; handle = dlopen("liberr.so", RTLD_NOW); if(handle == NULL) { fprintf(stderr, "Failed to load liberr.so: %s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); errfcn = dlsym(handle, "err_ret"); if((errmsg = dlerror()) != NULL) { 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; }

166

Bin dch v d trn bng lnh


$ gcc -g -Wall dltest.c -o dltest -ldl

N h 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

N u 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 -s|-print-armap -u| -undefined-only - l | -line-numbers Miu t Chuyn tn k t vo tn mc ngi dng cho d c. 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__ 08048b47 __i686.get_pc_thunk.bx 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__ T

167

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 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] r[ab][f][u] archive t x[o] - display contents of archive - extract file(s) from the archive command specific modifiers: - 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 replace existing or insert new file(s) into the

168

[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: elf32-i386 a.out-i386-linux efi-app-ia32 elf64x86-64 elf64-little elf64-big elf32-little elf32-big srec symbolsrec tekhex binary ihex trad-core

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 N p file thc thi s c g li M t

169

kill list next

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

Thc thi chng trnh c g li. Kt thc gdb.

watch Cho php ta xem gi tr bin s ca chng trnh mi khi gi tr thay i. break 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.

170

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


Trong Linux, bt c chng trnh no ang chy u c coi l mt 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 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 T Z 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) (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 171 ngha (uninterruptible sleep) trng thi ny tin trnh b treo v khng th chy li n

W < N L

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 S biu din cc trng thi v vic chuyn trng thi trong UN IX c trnh by trong

hnh di y (S hiu trng thi qu trnh xem trong hnh v).


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

172

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.

2. Cc lnh c bn trong qun l tin trnh


2.1 S dng lnh ps trong qun l tin trnh
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. 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 r : ch hin th tin trnh ang c chy. 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 p : hin th cc tin trnh theo ch s ca tin trnh. s : hin th cc tin trnh thuc v mt phin lm vic. 173

Formatted: Bullets and Numbering

trnh ca nhng ngi dng khc.

Chn theo danh sch:


dng khi ng tin trnh).


t : hin th cc tin trnh thuc mt trm cui. u : hin th cc tin trnh theo tn v ch s ca ngi dng hiu qu. f : hin th thng tin v tin trnh vi cc trng sau UID - ch s ngi dng, PID

Thit t nh dng c a ra ca cc tin trnh:

- ch s tin trnh, PPID - ch s tin trnh khi to ra tin trnh, C - , STIME - thi gian khi to tin trnh, TTY - tn thit b u cui trn tin trnh c chy, TIME - thi gian thc hin tin trnh, CMD - lnh khi to tin trnh

l : hin th y cc thng tin v tin trnh vi cc trng F, S, UID, PID, PPID, o xu-chn : hin th cc thng tin v tin trnh theo dng do ngi dng t chn
% 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

C, PRI, N I, ADDR, SZ, WCHAN , TTY, TIME, CMD

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

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

2.2 Hy mt tin trnh s dng lnh 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. N u khng ch ra mt tn hiu no th ngm nh l tn hiu TERM s c gi. Mt s ty chn: 174

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 2 9 15 Tn SIGHUP SIGIN T SIGKILL ngha (hang up) y l tn hiu c gi n tt c cc tin trnh ang chy trc khi logout khi h thng (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.
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

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

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 2285 pts/2 00:00:00 less 2289 pts/2 00:00:00 man 2291 pts/2 00:00:00 sh 2292 pts/2 00:00:00 gunzip 2293 pts/2 00:00:00 less # kill 2277 PID TTY TIME CMD 2240 pts/2 00:00:00 bash 2276 pts/2 00:00:00 man 2280 pts/2 00:00:00 sh 2281 pts/2 00:00:00 sh 2285 pts/2 00:00:00 less 2289 pts/2 00:00:00 man 2291 pts/2 00:00:00 sh 2292 pts/2 00:00:00 gunzip 2293 pts/2 00:00:00 less

175

2.3 Cho my ngng hot ng mt thi gian vi lnh sleep


N u 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]
N UMBER: 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

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. N u 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. N u 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 176

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 |-gnome-name-serv |-gnome-smproxy |-gnomepager_appl |-gpm |-identd---identd---3*[identd] |-inetd |-kflushd |-klogd |-kpiod |-kswapd |-kupdate |-lockd---rpciod |-login---bash---mc-+-bash-+-cat | | |-passwd | | `-pstree | `-cons.saver |-lpd |-mdrecoveryd |-5*[mingetty] |-panel |-portmap |-rpc.statd |-sendmail |-syslogd `-xfs

177

2.5 Lnh thit t li u tin ca tin trnh nice v lnh renice


N goi 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. N u 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

Formatted: Bullets and Numbering

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

Formatted: Bullets and Numbering

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.

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

178

../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 &. N u mt tin trnh hot ng m khng a ra thng tin no trn mn hnh v khng cn nhn bt k thng tin u vo no, th c th s dng lnh bg a n vo trong ch nn ( ch ny n s tip tc chy cho n khi kt thc). Khi chng trnh cn a thng tin ra mn hnh hoc nhn thng tin t bn phm, h thng s t ng dng chng trnh v thng bo cho ngi dng. Cng c th s dng ch s iu khin cng vic (job control) lm vic vi chng trnh no mun. Khi chy mt chng trnh trong ch nn, chng trnh c nh s th t (c bao bi du ngoc vung []), theo sau l ch s ca 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.

179

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). N u 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 chuNn 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 chuNn. V d, lnh:
# vi & [6] 920 #

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

180

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.

3. Qun l tr h thng
3.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 N TLDR cho Windows N T/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 N TLDR lu trong c:\boot.ini

3.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: 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 181

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. N p 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 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. 182

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.

3.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: N h 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.

3.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 tp tin /etc/inittab chn default runlevel, khi to cc deamon, cui cng yu cu ngi dng logon

183

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.

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

4.1 Superuser (root)


Cc h thng my ch u c account qun tr, v nh N T c account administrator, N ovell 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 cNn 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 -

184

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.

4.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 khNu (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

185

Mi user c lu trong mt dng gm 7 ct: Ct 1 : tn ngi s dng. Ct 2 : m lin quan n passwd cho Unix chuNn 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. N gi 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 1- 99 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 khNu ring s dng ti khon ngi dng ca mnh. Mi ngi u c quyn i mt khNu ca chnh mnh. N gi qun tr th c th i mt khNu ca nhng ngi khc. Unix/Linux truyn thng lu cc thng tin lin quan ti mt khNu 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 khNu ?yu?, do , hu ht cc phin bn Unix mi u lu mt khNu trong mt tp tin khc /etc/shadow v ch c root c quyn c tp tin ny. 186

Ch : Theo cch xy dng m ha mt khNu, ch c 2 cch ph mt khNu l vt cn (brute force) v on. Phng php vt cn, theo tnh ton cht ch, l khng th thc hin ni v i hi thi gian tnh ton qu ln, cn on th ch tm ra nhng mt khNu 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.

4.3 Thm ngi dng vi lnh useradd


N gi 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] N u 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 khNu ca ngi dng ht hiu lc khi ti khon b hy b. N u =0 th hy b ti khon ngi dng ngay sau khi mt khNu ht hiu lc, =-1 th ngc li (mc nh l -1).

187

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

4.4 Thay i thng tin ca user


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 thay i thng tin c nhn ti khon ngi dng. d, home_dir thay i th mc c nhn ti khon ngi dng. e, expire_date f, inactive_days g, initial_group thay i thi im ht hn ti khon ngi dng (YYYY-MM-DD). thit t s ngy ht hiu lc ca mt khNu trc khi ti khon ty chn ny thay i tn hoc s khi to ng nhp nhm ngi

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 s, shell thay i mt khNu ng nhp ca ti khon ngi dng. thay i shell ng nhp. 188

u, uid

thay i ch s ngi dng.

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

4.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. N gi 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 . N goi ra cng c th xa b ti khon ca mt ngi dng bng cch hiu chnh li file /etc/passwd.

4.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 : N i dung ca mt dng: tn-nhm : password-ca-nhm: nh-danh-nhm:cc-userthuc-nhm Chng ta c th thm trc tip vo file /etc/group hoc dng lnh groupadd:
#groupadd tn-nhm

Thm user vo group

189

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.

4.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: V d:
# who root tty1 Nov 15 03:54 lan pts/0 Nov 15 06:07 #

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 chuNn. q, --count : hin th tn cc ngi dng ng nhp v s ngi dng ng nhp.

Formatted: Bullets and Numbering

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. N goi who, c th s dng thm lnh users xc nh c nhng ngi ng nhp trn h thng.
# users lan root #

190

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.

4.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:
# 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) #

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.

Formatted: Bullets and Numbering

4.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 . 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. N u ch ra ngi dng trong lnh th ch hin ra cc qu trnh lin quan n ngi dng .
# w

191

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

5. Qun tr ti nguyn
5.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. Gii hn cng: khng cho php vt qu dung lng a cho php. N u user c tnh lu nhng thng tin vo th nhng thng tin trc c th b xa v Ny 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
N gi 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. N hng tp tin ny ta chng ta s to ra. N hng 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

192

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.

Lnh quota
C php ca lnh: quota [ty chn] [user] [group] N hng 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.

5.2 Lnh qun l a vi lnh du v df 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 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. 193

D, --dereference-args 2G... ).

lin kt n nu chng nm trn cc th mc khc.

h, --human-readable hin th kch thc cc file km theo n v tnh (v d: 1K, 234M, k, --kilobytes hin th kch thc tnh theo kilobytes. L, --dereference l, --count-links m, --megabytes S, --separate-dirs s 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.

x, --one-file system b qua cc th mc trn cc h thng file khc. - help hin th trang tr gip v thot. 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 .

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

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. N u 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 thit lp li ln ca khi l c byte. k, --kilobytes hin th dung lng tnh theo kilobytes. 194

l, --local

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.

m, --megabytes T, --print-type - help

t, --type=kiu gii hn danh sch cc file h thng thuc kiu. a ra trang tr gip v thot.

ch ra c dung lng a cn trng trong Linux khng phi l iu d lm. N gi 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. N u 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. 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 18% Use% Mounted on 67% / /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 / 195

6 Truyn thng trong Linux


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

N goi 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

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

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 RX bytes:2578998337 (2459.5 Mb) lo Link encap:Local Loopback inet addr:127.0.0.1 UP LOOPBACK RUNNING Mask:255.0.0.0 MTU:16436 Metric:1 TX bytes:1471928637 (1403.7 Mb)

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)

196

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

6.3 Lnh write


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

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

197

N u 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. N gi 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)

6.4 Lnh mail


Lnh mail cho php gi th in t gia cc ngi dng, song hot ng theo ch off-line (gin tip). Khi dng lnh write truyn thng cho nhau th i hi hai ngi gi v nhn ng thi ang lm vic v cng chp nhn cuc trao i . Cch thc s dng mail l khc hn: mt trong hai ngi gi hoc nhn c th khng ng nhp vo h thng. m bo cch thc truyn thng gin tip (cn gi l off-line) nh vy, h thng to ra cho mi ngi dng mt hp th ring. Khi mt ngi dng lnh mail gi th n mt ngi khc th th c t ng cho vo hp th ca ngi nhn v ngi nhn sau cng dng lnh mail xem trong hp th c th mi hay khng. Khng nhng th mail cn cho php s dng trn mng internet (a ch mail thng di dng tn-login@my.mng.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.

198

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 UN IX 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. 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 chuNn l ni dung file thay v cho bn phm):
$mail tn_ngi_nhn < tn_file_ni_dung_th

V d
$ mail user2 < thu1

N i 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
N h ni s dng mode lnh ca mail qun l hp th. Vo mail theo mode lnh khi dng lnh mail khng tham s:
$mail

199

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> q [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 ra khi mail
Formatted: Bullets and Numbering Formatted: Bullets and Numbering

m <user> ... chuyn tip th ti cc ngi dng khc Thc hin cc lnh theo ch dn trn y qun tr c hp th ca c nhn.

6.5 Lnh talk


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

200

201

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 N i; 2004.

202

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.

203

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. N u ta chn cc tu chn khc nh Server System, Workstation. Chn Upgrade Existing Installation s cho php ta nng cp h iu hnh Linux. 204

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

Tip n chn Disk Druid 205

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 EN TER to partition mi, ca s Edit N ew Partition xut hin

206

Trc tin, ta to Linux N ative, 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

N hn Add to tip Swap partition:

207

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

N hn tip OK tin hnh format.

208

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

N hn tip OK.

209

N hn OK format bt u.

Sau t tn cho my

Thit lp cu hnh cho Firewall, chn N o firewall , nhn OK

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

Lu : N hng 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

211

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

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

N hn OK nu khng c thay i.

212

Sau khi to xong nhn OK.

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

213

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

214

N hn OK ci t

Qu trnh ci t bt u

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

215

216

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

217

Sau thit lp cc thng s khc na l hon tt

218

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

219

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

220

221

You might also like