Professional Documents
Culture Documents
Bi ging
4.10 Hin th danh sch ng nhp s dng lnh last 196 4.11 Lnh which hin th ng dn y ca chng trnh 196 5. Qun tr ti nguyn 196
5.1 Qun l ti nguyn vi lnh quota 196 5.2 Lnh qun l lu tr 198 5.2.1 Xem dung lng a s dng vi lnh du 198 5.2.2 Kim tra dung lng a trng vi lnh df 199 5.2.3 Lnh free hin th tnh trng s dng b nh 200
BNG T VIT TT
H iu hnh Multiplexed Information and Computing Service Berkley Software Distribution Midnight Commander HH Multics BSD mc
Thay v xy dng mt HH lm nhiu vic mt lc, h quyt nh pht trin mt HH n gin ch lm tt mt vic l chy chng trnh (run program). HH s c rt nhiu cc cng c (tool) nh, n gin, gn nh (compact) v ch lm tt mt cng vic. Bng cch kt hp nhiu cng c li vi nhau, h s c mt chng trnh thc hin mt cng vic phc tp. cng l cch thc ngi lp trnh vit ra chng trnh. Peter Neumann t tn Unix cho HH n gin ny tip tc pht trin theo m hnh ban u v t ra mt h thng tp tin m sau ny c pht trin thnh h thng tp tin ca UNIX. Nm 1973, Riche v Thompson vit li nhn ca h iu hnh UNIX trn ngn ng C, v h iu hnh tr nn d dng ci t ti cc loi my tnh khc nhau; tnh cht nh th c gi l tnh kh chuyn ca UNIX. Trc , khong
nm 1971, h iu hnh c th hin trn ngn ng B (m da trn ngn ng B, Ritche pht trin thnh ngn ng C). Khong nm 1977 bn quyn ca Unix c gii phng v HH Unix tr thnh mt sn phm thng mi. Hai dng UNIX: System V ca AT&T, Novell v Berkeley Software Distribution (BSD) ca i hc Berkeley. + System V: Cc phin bn UNIX cui cng do AT&T xut bn l System III v mt vi pht hnh (releases) ca System V. Hai bn pht hnh gn y ca System V l Release 3 (SVR3.2) v Release 4.2 (SVR4.2). Phin bn SYR 4.2 l ph bin nht cho t my PC cho ti my tnh ln. + BSD: T 1970 Computer Science Research Group ca University of California ti Berkeley (UCB) xut bn nhiu phin bn UNIX, c bit n di tn Berkeley Software Distribution, hay BSD. Ci bin ca PDP11 c gi l 1BSD v 2BSD. Tr gip cho cc my tnh ca Digital Equipment Corporation VAX c a vo trong 3BSD. Pht trin ca VAX c tip tc vi 4.0BSD, 4.1BSD, 4.2BSD, v 4.3BSD Trc 1992, UNIX l tn thuc s hu ca AT&T. T nm 1992, khi AT&T bn b phn Unix cho Novell, tn Unix thuc s hu ca X/Open foundation. Tt c cc h iu hnh tha mn mt s yu cu u c th gi l Unix. Ngoi ra, Institute of Electrical and Electronic Engineers (IEEE) thit lp chun "An Industry-Recognized Operating Systems Interface Standard based on the UNIX Operating System." Kt qu cho ra i POSIX.1 (cho giao din C) v POSIX.2 (cho h thng lnh trn Unix) Tm li, vn chun ha UNIX vn cn rt xa kt qu cui cng. Nhng y l qu trnh cn thit c li cho s pht trin ca ngnh tin hc ni chung v s sng cn ca HH UNIX ni ring.
Hnh 1.1 Cc phin bn ca Unix Cc nhm nh cung cp khc nhau v UNIX ang hot ng trong thi gian hin nay c k n nh sau: + Unix International (vit tt l UI). UI l mt t chc gm cc nh cung cp thc hin vic chuyn nhng h thng UNIX-5 v cung cp bn AT&T theo cc nhu cu v thng bo pht hnh mi, chng hn nh iu chnh bn quyn. Giao din ha ngi dng l Open Look. + Open Software Foundation (OSF). OSF c h tr bi IBM, DEC, HP ... theo hng pht trin mt phin bn ca Unix nhm tranh ua vi h thng UNIX-5 phin bn 4. Phin bn ny c tn l OSF/1 vi giao din ha ngi dng c gi l MOTIF. + Free SoftWare Foundation (FSF): mt cng ng do Richard Stallman khi xng nm 1984 ch trng pht hnh cc phn mm s dng t do, trn c s mt h iu hnh thuc loi UNIX.
Linux hon ton da trn nguyn tc ca h iu hnh Unix. V vy nu mt ngi nm c Linux, th s nm c UNIX. Nn ch rng gia cc Unix s khc nhau cng khng km g gia Unix v Linux. Nm 1991 Linus Torvalds - sinh vin ca i hc tng hp Helsinki, Phn lan, bt u xem xt Minix, mt phin bn ca Unix, lm ra vi mc ch nghin cu cch to ra mt h iu hnh Unix chy trn my PC vi b vi x l Intel 80386. Ngy 25/8/1991, Linus cho ra version 0.01 v thng bo trn comp.os.minix ca Internet v chng trnh ca mnh. 1/1992, Linus cho ra version 0.12 vi shell v C compiler, Linus t tn HH ca mnh l Linux. 1994, phin bn chnh thc 1.0 c pht hnh. Qu trnh pht trin ca Linux c tng tc bi s gip ca chng trnh GNU, l chng trnh pht trin cc Unix c kh nng chy trn nhiu platform. n hm nay, cui 2001, phin bn mi nht ca Linux kernel l 2.4.2-2, c kh nng iu khin cc my a b vi x l v rt nhiu cc tnh nng khc. Hin nay, Linux l mt h iu hnh ging Unix y v c lp. N c th chy X-Window, TCP/IP, Emacs, Web, th in t v cc phn mm khc. Hu ht cc phn mm min ph v thng mi u c chuyn ln Linux. Rt nhiu cc nh pht trin phn mm bt u chuyn sang vit trn Linux. Ngi ta thc hin cc php o benchmarks trn Linux v thy rng chng thc hin nhanh hn khi thc hin trn cc my trm ca Sun Microystem v Compaq, thm ch nhiu khi cn nhanh hn c trn Windows 98 v WindowNT. Tht kh c th hnh dung c h iu hnh Unix t hon ny pht trin nhanh th no! By gi, sau khi tri qua 1 thi gian rt di pht trin v hon thin bi cng ng th gii, Linux cng ngy cng tr nn mnh m, n nh v tin cy cao, v c chn s dng trong cc c quan chnh ph. Cc nc nh Trung Quc, Nht Bn, c v mt s cc nc chu u u cng c k hach pht trin ring Linux cho t nc ca h. Vit Nam trong nhng nm gn y c nhiu nhm nghin cu v pht trin Linux s dng ting Vit l ngn ng chnh. Trong gio trnh ny Linux c s dng nh mt v d cho vic tm hiu k hn v h iu hnh Unix.
10
Vn phn phi v giy php Linux V l thuyt, mi ngi c th khi to mt h thng Linux bng cch tip cn bn mi nht cc thnh phn cn thit t cc site ftp v bin dch chng. Trong thi k u tin, ngi dng Linux phi tin hnh ton b cc thao tc ny v v vy cng vic l kh vt v. Tuy nhin, do c s tham gia ng o ca cc c nhn v nhm pht trin Linux, tin hnh thc hin nhiu gii php nhm lm cho cng vic khi to h thng vt v. Mt trong nhng gii php in hnh nht l cung cp tp cc gi chng trnh tin dch, chun ha. Nhng tp hp nh vy hay nhng bn phn phi l ln hn nhiu so vi h thng Linux c s. Chng thng bao gm cc tin ch b sung cho khi to h thng, cc th vin qun l, cng nh nhiu gi c tin dch, sn sng khi to ca nhiu b cng c UNIX dng chung, chng hn nh phc v tin, trnh duyt web, cng c x l, son tho vn bn v thm ch cc tr chi. Cch thc phn phi ban u rt n gin song ngy cng c nng cp v hon thin bng phng tin qun l gi tin tin. Cc bn phn phi ngy nay bao gm cc c s d liu tin ha gi, cho php cc gi d dng c khi to, nng cp v loi b. Nh phn phi u tin thc hin theo phng chm ny l Slakware, v chnh h l nhng chuyn bin mnh m trong cng ng Linux i vi cng vic qun l gi khi to Linux. Tin ch qun l gi RPM (RedHat Package Manager) ca cng ty RedHat l mt trong nhng phng tin in hnh. Nhn Linux l phn mm t do c phn phi theo Giy php s hu cng cng phn mm GNU GPL.
11
nh Atari, Amiga...Ngoi ra Linux cn chy trn mt s my MIPS v cc my tnh c nhn mnh. a chng trnh Mt thi im mt ngi s dng c th thc hin ng thi nhiu tc v. Vi h iu hnh n chng trnh nh MS-DOS mt lnh thc hin s chim ton b thi gian CPU x l, ta ch c th thc hin lnh k khi lnh trc c thc hin xong. Cn trong h iu hnh UNIX ta c th t lnh chy ch nn (background) ng thi khi c th thc hin cc lnh k. Nhiu ngi s dng Nhiu ngi s dng c th s dng my tnh c ci UNIX ti mt thi im. c lp phn cng V h iu hnh UNIX c vit bng ngn ng cp cao cho nn n rt d ci t trn cc cu hnh phn cng khc. Hn na vi cch t chc cc thit b l cc tp tin c bit nn vic thm vo hay loi b cc thit b rt d dng. Dng chung thit b V Unix l mi trng nhiu ngi s dng do cc thit b ngoi vi nh my in,v.v... c th c dng chung bi nhiu ngi s dng. Tnh n nh Linux c tnh n nh cao, y l mt trong nhng u im ca Linux so vi cc h iu hnh khc. Tnh n nh y c ngha l n t b li khi s dng so vi hu ht cc h iu hnh khc. Ngi s dng Linux s khng phi lo lng n chuyn my tnh ca mnh b hin tng treo cng khi ang s dng na. Thng thng l do ta bt buc phi khi ng li h thng l do mt in, nng cp phn cng hoc phn mm. Tnh bo mt Khi lm vic trn Linux ngi dng c th an tm hn v tnh bo mt ca h iu hnh. Linux l h iu hnh a nhim, a ngi dng, iu ny c ngha l c th c nhiu ngi dng vo phin lm vic ca mnh trn cng mt my ti cng mt thi im. Linux cung cp cc mc bo mt khc nhau cho ngi s
12
dng. Mi ngi s dng ch lm vic trn mt khng gian ti nguyn ring, ch c ngi qun tr h thng mi c quyn thay i trong my. Tnh hon chnh Bn thn Linux km theo cc trnh tin ch cn thit. Tt c cc trnh tin ch m ta mong i u c sn hoc mt dng tng ng rt ging. Trn Linux, cc trnh bin dch nh C, C++, , u c chun ho. Tnh tng thch Linux tng thch hu nh hon ton vi hu ht cc chun Unix nh IEEE POSIX.1, UNIX System V v BSD Unix. Trn Linux ta cng c th tm thy cc trnh gi lp DOS v Windows cho php ta chy cc ng dng quen thuc trn DOS v Windows. Linux cng h tr hu ht cc phn cng PC nh ni pha trn. H iu hnh 32-bit y Ngay t u Linux l h iu hnh 32 bit y . iu c ngha l ta khng cn phi lo v gii hn b nh, cc trnh iu khin EMM hay cc b nh m rng, khi s dng Linux. Linux h tr tt cho tnh ton song song v my tnh cm (PC-cluster) l mt hng nghin cu trin khai ng dng nhiu trin vng hin nay. Linux c giao din ho (GUI): Tha hng t h thng X-Window. Linux h tr nhiu giao thc mng, bt ngun v pht trin t dng BSD. Thm vo , Linux cn h tr tnh ton thi gian thc D cu hnh Ta khng cn phi bn tm v gii hn 640K v tin hnh ti u ho b nh mi ln ci t mt trnh iu khin mi. Linux cho ta ton quyn iu khin v cch lm vic ca h thng. Nh vy, qua phn gii thiu ban u ny ta c th thy rng Linux l mt h Unix mnh. N c th c ng dng d dng. Ngoi ra, vic s dng cng cng rng ri ang lm Linux pht trin nhanh. Cc quy trnh thit lp cho php ci t trc tip h thng lm n tr nn ngy cng ph bin i vi nhng ngi s dng.
13
Tuy nhin cng tn ti mt s kh khn lm cho Linux cha thc s tr thnh mt h iu hnh ph dng, di y l mt s kh khn in hnh: + Tuy c cng c h tr ci t, tuy nhin, vic ci t Linux cn tng i phc tp v kh khn. Kh nng tng thch ca Linux vi mt s loi thit b phn cng cn thp do cha c cc trnh iu khin cho nhiu thit b, + Phn mm ng dng chy trn nn Linux tuy phong ph song so vi mt s h iu hnh khc, c bit l khi so snh vi MS Windows, th vn cn c khong cch. Vi s h tr ca nhiu cng ty tin hc hng u th gii (IBM, SUN, HP ...) v s tham gia pht trin ca hng vn chuyn gia trn ton th gii thuc cng ng Linux, cc kh khn ca Linux chc chn s nhanh chng c khc phc. Chnh v l hnh thnh mt s nh cung cp Linux trn th gii. Bng di y l tn ca mt s nh cung cp Linux c ting nht v a ch website ca h. ng ch nht l Red Hat Linux (ti M) v Red Flag Linux (ti Trung Quc). Red Hat c coi l lu i v tin cy, cn Red Flag l mt cng ty Linux ca Trung quc, c quan h vi cng ng Linux Vit nam v chng ta c th hc hi mt cch trc tip kinh nghim cho qu trnh a Linux vo Vit nam. Tn cng ty Caldera OpenLinux Corel Linux Debian GNU/Linux Linux Mandrake Red Hat Linux Red Flag Linux Slackware Linux SuSE Linux TurboLinux a ch website www.caldera.com www.corel.com www.debian.com www.mandrake.com www.redhat.com www.redflag-linux.com www.slackware.com www.suse.com www.turbolinux.com www.ubuntu.com
14
Cc b iu khin thit b. Lnh v tin ch. Shell. Windows & Graphic User Interface.
Hnh1.2 Cc thnh phn chnh ca HH Unix Kernel L thnh phn ch yu hay tri tim ca h iu hnh. N nm nhim v iu khin giao dch gia chng trnh ngi s dng vi cc thit b phn cng, xp lch cc tin trnh c th thc hin a nhim, v nhiu tc v khc ca h thng, v mt tp cc trnh n nm trong b nh, mi tin trnh u gi chng. Nhn h iu hnh chu trch nhim duy tr cc i tng tru tng quan trng ca h iu hnh, bao gm b nh o v qu trnh. Cc m un chng trnh trong nhn c c quyn trong h thng, bao gm c quyn thng trc b nh trong. Nhn (cn c gi l h li) ca Linux, l mt b cc m un chng trnh c vai tr iu khin cc thnh phn ca my tnh, phn phi cc ti nguyn cho ngi dng (cc qu trnh ngi dng). Nhn chnh l cu ni gia chng trnh ng dng vi phn cng. Ngi dng s dng bn phm g ni dung yu cu ca mnh v yu cu c nhn gi ti shell, Shell phn tch lnh v gi cc chng trnh tng ng vi lnh thc hin.
15
Mt trong nhng chc nng quan trng nht ca nhn l gii quyt bi ton lp lch, tc l h thng cn phn chia CPU cho nhiu qu trnh hin thi cng tn ti. i vi Linux, s lng qu trnh c th ln ti con s hng nghn. Vi s lng qu trnh ng thi nhiu nh vy, cc thut ton lp lch cn phi hiu qu: Linux thng lp lch theo ch Round Robin (RR) thc hin vic lun chuyn CPU theo lng t thi gian. Thnh phn quan trng th hai trong nhn l h thng cc mun chng trnh (c gi l li gi h thng) lm vic vi h thng file. Linux c hai cch thc lm vic vi cc file: lm vic theo byte (k t) v lm vic theo khi. Mt c im ng ch l file trong Linux c th c nhiu ngi cng truy nhp ti nn cc li gi h thng lm vic vi file cn m bo vic file c truy nhp theo quyn v c chia s cho ngi dng. Cc b iu khin thit b UNIX th hin cc thit b vt l nh cc tp tin c bit. Mt tp tin c bit s c mt im vo trong th mc v c mt tn tp tin. Do Unix cho php ngi s dng nh ngha tn thit b. Cc thit b c chia lm hai loi: k t v khi. Thit b k t c v ghi dng cc k t (v d cc thit b u cui). Thit b khi c v ghi d liu trong cc khi c kch thc c nh (v d a). Thit b c th i tn nh i tn tp tin. Th mc cha cc b iu khin thit b l /dev. Lnh v tin ch Tin ch h thng l cc chng trnh thc thi cc nhim v qun l chuyn bit. Mt s tin ch h thng c gi ra ch mt ln khi ng v cu hnh h thng, mt s tin ch khc, theo thut ng UNIX c gi l trnh chy ngm (daemon), c th chy mt cch thng xuyn (thng theo chu k), iu khin cc bi ton nh hng ng cc kt ni mng mi n, tip nhn yu cu logon, hoc cp nht cc file log.
16
Tin ch (hay lnh) c sn trong h iu hnh (di y tin ch c coi l lnh thng trc). Ni dung chnh yu ca ti liu ny gii thiu chi tit v mt s lnh thng dng nht ca Linux. Cc lnh v tin ch ca Unix rt a dng. Mt lnh UNIX c dng: $lnh [cc chn la] [cc i s] lnh thng l ch nh. Unix phn bit ch ln, nh. V d: $ls -c /dev Ta c th chia lnh thnh cc nhm sau: Cc lnh khi to: exit logout id logname man newgrp psswd set tty uname who Trnh bo mn hnh: echo setcolor Desktop: bc cal date mail mesg spell tnh biu thc s hc my tnh c nhn hin th v t ngy gi - nhn th tn in t cm/cho php hin th thng bo trn mn hnh(bi write/hello) kim tra li chnh t hin th dng k t hay bin t mu nn v ch ca mn hnh thot khi h thng (Bourne-Shell) thot khi h thng C-Shell ch danh ca ngi s dng tn ngi s dng login gip chuyn ngi s dng sang mt nhm mi thay i password ca ngi s dng xc nh cc bin mi trng t cc thng s terminal tn ca h thng (host) cho bit nhng ai ang thm nhp h thng
17
vi write/hello Th mc: cd copy mkdir rmdir pwd Tp tin: cas/more cp find grep ls, l, lf, lc mv sort wc Qun l tin trnh: kill ps sleep Kim sot ch quyn: chgrp chmod chown Kim sot in: cancel lp
son tho vn bn cho php gi dng thng bo n nhng ngi s dng trong h thng. i th mc sao chp 2 th mc to th mc loi b th mc trnh by th mc hin hnh trnh by ni dung tp tin sao chp mt hay nhiu tp tin tm v tr ca tp tin tm v tr ca chui k t trong tp tin trnh by tn v thuc tnh ca cc tp tin trong th mc chuyn/ i tn mt tp tin sp th t ni dung tp tin m s t trong tp tin hy b mt qu trnh trnh by tnh trng ca cc qu trnh ngng hot ng mt thi gian chuyn ch quyn tp tin, th mc t mt nhm sang mt nhm khc thay i quyn s hu ca tp tin hay th mc thay i ngi s hu tp tin hay th mc ngng in in ti liu ra my in
18
lpstat
Shell
L b x l lnh ca ngi s dng hay n n gin ch l mt chng trnh cho php h thng hiu cc lnh ca ngi dng. Chc nng chnh ca Shell l: X l tng tc: Khi Shell c s dng mt cch tng tc, h thng i ngi dng g vo mt lnh ti du nhc lnh. Lnh c th bao gm cc k hiu c bit cho php ta vit tt cc tn file hoc ti nh hng ngun vo v ngun ra. Mi trng Lp trnh: Cc shell cung cp mt b cc lnh c bit (c sn), cho php ta to ra cc chng trnh c tn Shell Script. Cc Shell Script rt hu ch khi s dng cho vic thc thi mt chui cc lnh ring bit ging nh thc thi cc file BATCH trong MS-Dos. Cc script cng c th thc thi cc lnh lp li nhiu ln (trong vng lp) hoc c iu kin ( if-else) ging nh trong nhiu ngn ng lp trnh cao cp khc. Hin nay ngi ta s dng ba loi shell, ty theo loi m c c php khc nhau: Bourne-Shell : l shell c bn nht, nhanh, hiu qu, nhng t lnh. C-Shell: l shell s dng c php ging nh C v n thun tin hn cho ngi s dng tng tc Bourne-Shell, n ging nh Bourne-Shell nhng cung cp thm cc cu trc iu khin, history, b danh. Korn-Shell: Kt hp c Bourne-Shell v C-Shell. Mi ngi dng khi ng nhp h thng th thng c mt chng trnh mc nh khi ng cng, c th nhn bit dng Shell ta ang s dng l g thng qua file /etc/passwd. Tn chng trnh /bin/sh /bin/rsh /bin/jsh /bin/ksh /usr/dt/bin/dtksh Shell ca ta l Bourne - Shell Bourne Shell Bourne Shell Korn-Shell Korn-Shell Desktop, mt phin bn ch dng cho Solaris
19
/bin/rksh /bin/csh
Korn-Shell C Shell
Windows & Graphic User Interface: Giao tip ho v ca s l mt kh nng rt mnh ca h iu hnh Linux, n cho php h iu hnh giao tip thn thin hn vi ngi s dng.
Hnh 1.3 Giao din Gnome ca Linux Tm li: ng v pha ngi s dng ta c th hnh dung h iu hnh Linux nh sau: Ngi s dng - lnh Linux - bin dch Shell - Kernel - My tnh (phn cng).
20
21
nhanh ti file thay v ti v tr nguyn thy ca n. Hn na, ngi ta c th gn vo cc thng tin ph tr lm cho file ny c tnh nng tri hn so vi tnh nng nguyn thy ca n. Ta thy loi file ny ging nh khi nim shortcut trong MS-Windows98. Khng ging mt s h iu hnh khc (nh MS-DOS chng hn), Linux qun l thi gian ca tp tin qua cc thng s thi gian truy nhp (accesed time), thi gian kin to (created time) v thi gian sa i (modified time).
22
bn Linux), phn tn file cn li dnh cho ch ca file, Linux theo di thng tin, nhng thng khng xem cc k t ng sau k t th 33 hay 65 l quan trng i vi n. Xin nhc li lu v phn bit ch hoa v ch thng i vi tn th mc/file, v d hai file FILENAME.tar.gz v filename.tar.gz l hai file khc nhau. Nu trong tn th mc/file c cha khong trng, s phi t tn th mc/file vo trong cp du nhy kp s dng th mc/file . V d, to th mc c tn l My document chng hn, hy nh dng lnh sau: # mkdir "My document" Mt s k t sau khng c s dng trong tn th mc/file: !, *, $, &, # ... Khi s dng chng trnh mc, vic hin th tn file s b sung mt k t theo ngha: du "*" cho file kh thi trong Linux, du "~" cho file sao lu, du "." cho file n, du "@" cho file lin kt... Tp hp tt c cc file c trong h iu hnh c gi l h thng file l mt h thng thng nht. Bi chnh t cch thc s dng th mc, h thng file c t chc lgic theo dng hnh cy: H thng file c xut pht t mt th mc gc (c k hiu l "/") v cho php to ra th mc con trong mt th mc bt k. Thng thng, khi khi to Linux c ngay h thng file ca n.
Super Block
I-nodes
Data Blocks
Thng khng c s dng v thng cha m np HH (boot the computer). N cha mt on chng trnh s c c vo my khi khi ng h iu hnh Mc d Boot block ch cn thit khi khi ng my nhng tng t vi Boot record ca DOS, tt c cc h thng file UNIX u c mt Boot block (block ny c th trng).
23
Block 1: L Super Block (siu khi), trnh by trng thi ca h thng File (s lng I-node, s Disk Block, im bt u ca danh danh sch ca khi a trng (free disk blocks)). L mt dng bn ghi m t tnh trng ca h thng file. N gm cc thng tin sau: Kch thc h thng file. S khi cn trng trong h thng file. Danh sch khi trng trong h thng file. Ch s ca khi tip theo trong danh sch khi trng. Kch thc ca danh sch inode. S inode cn trng trong h thng file. Danh sch inode cn trng trong h thng file. Ch s inode tip theo trong danh sch inode trng trong h thng file. Trng kho ca danh sch khi v inode trng. C bo hiu super block b thay i. Tng ng bng FAT trong MS-DOS, trnh by bn trong ca mt File c cho bi mt I-node, cha ng cc thng tin m t v lu tr file trn a v mt s thng tin khc nh: ngi ch s hu, quyn truy nhp, thi gian truy nhp file. Mi I-node di 64 byte v miu t chnh xc mt file. Inode l mt bng cha cc thng tin chi tit v mt file. Mi file u c gn vi mt inode qua s hiu inode. Khi file c s dng bi mt tin trnh no th inode s c c vo b nh v qun l bi kernel. Mi inode bao gm cc thng tin sau: Quyn s hu file: Quyn s hu c chia lm hai phn l ngi s hu file v nhm ngi s hu. Ngi s hu thng l ngi to ra file . Nhm ngi s hu file, trong UNIX System V th thng thuc v nhm ca ngi to ra file , cn trong BSD UNIX th file thuc v nhm s hu th mc m file c to ra. Quyn s hu ca ngi s dng v ca nhm i vi mi file c th thay i c (v d lnh chown, chgrp ca shell). Quyn s hu ny cng vi quyn truy nhp ca file s quyt dnh xem ai c th truy nhp ti tp tin v c th truy nhp nh th no. Loi file: Khi nim file ca UNIX c khc so vi file trong DOS, ta c th k ti mt s loi file sau. Kiu file thng: l cc file vn bn , cc file nh phn, file d liu hay l cc file chng trnh...
I-nodes
24
Th mc con: L nhng file to ra cu trc phn cp cho h thng file gm danh sch cc file trong n v c th cha c cc th mc khc. N c mt vai tr quan trng trong vic bin i tn file thnh s hiu inode. Th mc l mt file m ton b d liu l chui cc phn t (entry), mi phn t cha mt s hiu inode v tn file tng ng trong th mc. i vi h UNIX System V ch cho php tn file ti a di 14 k t cn i vi cc h khc chiu di ny c th ln hn. Do th mc l cc file c bit nn tuy cc file c th c d liu trong th mc nh i vi cc file thng nhng kernel ginh quyn ghi th mc m bo tnh chnh xc ca cu trc. Kiu file c bit: y l c ch m UNIX s dng truy nhp ti cc thit b vo ra. Mi thit b vo ra trong UNIX u c coi nh l mt file trong h thng file. Ta c th truy nhp ti thit b vt l thng qua vic truy nhp cc file ny. Ngi ta chia kiu ny lm hai loi da trn cch truy nhp ti chng, l kiu k t (character, v d nh file ng vi cng ni tip) v kiu khi (block, v d nh file ng vi a). Kiu file mc ni(symbolic link): y l file cha ng dn ti mt file khc. C ch ny cho php ta truy nhp ti mt tp tin bng nhiu tn khc nhau. Thc cht ca n l nh ngha mt file vi mt tn khc. Kiu FIFO: l mt hng i (queue) theo kiu first-in-first-out hay cn c gi l named pipe. FIFO c dng trao i d liu gia cc tin trnh. Loi file ny ch c trong h UNIX System V m khng c trong BSD UNIX. Kiu socket: l mt c ch to ra cc u cui (endpoint) cho php cc tin trnh lin h vi nhau. Khi nim socket s c cp ti trong phn sau. Quyn truy nhp file: H thng bo v file theo 3 lp ngi s dng l ch s hu, nhm s hu v cc ngi s dng khc. Mi lp ngi s dng u c 3 quyn c, ghi, v thc hin. Cc quyn ny c thit lp tch bit nhau. Do th mc l mt kiu file c bit nn quyn truy nhp ti th mc c thay i. Quyn c cho php tin trnh c c th mc, quyn ghi cho php to ra hoc xo b cc phn t ca th mc (thng qua lnh creat, mknod, link hay unlink), quyn thc hin cho php tin trnh tm kim tn file trong th mc. Thi gian: Lu tr thi gian m file b thay i gn nht, thi gian file c truy cp gn nht v thi gian inode b thay i gn nht. S file lin kt: Th hin s file c trong cu trc cy th mc. 25
Bng a ch cc khi d liu: Mc d ngi s dng x l file nh mt chui lin tip cc byte nhng trong kernel lu tr d liu trn nhng khi khng lin tip. inode phi xc nh cc khi cha d liu ca file. Bng ny c m ho kh phc tp c th cha mt s lng a ch thay i nhng kch thc bng li khng thay i.
Ch : Inode hon ton khng lu gi tn file v khng th xc nh ng dn ti file thng qua inode. Khi inode c c vo b nh, mt s trng c thm vo lm cho inode trong b nh ( in-core inode ) khc vi inode trn a. Trng trng thi inode bo hiu: Inode b kho. C mt tin trnh ang i cho n khi inode c m kho. In-core inode khc vi inode trn a do b thay i. File trong b nh thay i so vi file trn a. File ny l mt im kt nt vi mt h thng file khc (mount point). S hiu thit b logic ca h thng file cha file ny. S hiu inode. Con tr ti in-core inode khc. S m : Ghi nhn s file ang c m.
Ghi ch: Danh sch inode ng ngay sau super block. Ngi qun tr h thng s quyt nh kch thc ca danh sch ny khi thit lp cu hnh h thng. Kernel ca h iu hnh tham chiu ti vng ny bng cch nh ch s cho danh sch. Trong danh sch inode tn ti mt inode l inode gc ca h thng file (tng t th mc gc trong h iu hnh DOS). Inode ny l im u tin ca cu trc th mc trong h thng file v lm cho h thng file c th truy nhp bnh thng sau khi thc hin lnh "mount". Khi d liu (data block) Tt c cc file v th mc c lu tr ti y. H thng file trong Unix l mt cu trc phn cp c bo mt cao. File c th c t chc lu tr theo mt vng lin tc hay nhiu vng lin tc. Bt u t sau danh sch inode cho ti khi cui cng ca h thng file. Phn ny ch cha d liu v thng tin qun tr h thng. Mt khi d liu ch c cp pht cho mt v ch mt file duy nht trong h thng file.
26
27
i vi cc chng trnh chy trn Linux, khng h c khi nim mt th mc nm a no hay partition no. Hnh sau y cho thy s tng quan gia v tr vt l trn a v v tr logic trong cy tp tin.
!-----------------------------------! ! ! ! ! ! ! ! /usr/home /squid /usr / ! ! ! ! ! ! ! ! ! ! < == > | | /usr | /usr/home !-----------------------------------! / | ----------| | /squid
!------------------!
!-----------------------------------! !-----------------------------------!
Th mc /usr/home l th mc con ca /usr trong cy th mc, nhng trn a vt l, y l hai phn mnh (partition) cnh nhau. Mt s th mc quan trng trong Unix/Linux
Th mc / /home Chc nng Bt u cu trc file, gi l th mc gc (root) Cha th mc gc (home) ca ngi dng
28
/bin /usr /usr/bin /usr/sbin /usr/lib /usr/doc /usr/man /sbin /dev /etc
lu ch tt c cc cu lnh chun v cc chng trnh tin ch cha cc file, cu lnh c h thng s dng, th mc ny c chia thnh cc th mc con khc Cha cc cu lnh hng ngi dng v cc chng trnh tin ch Cha cc cu lnh qun tr h thng Cha th vin cho cc ngn ng lp trnh Cha ti liu ca linux Cha cc file ch dn cho cc cu lnh (man) Cha cc file h thng khi ng h thng Cha giao din cho cc thit b nh u cui v my in Cha file cu hnh h thng v cc file h thng khc
29
Hnh 2.2 Cc chun vo ra V d v cc file ra vo chun: S dng chng trnh cat son tho, chng ta g
$ cat <enter> du lieu vao tu ban phim <enter> dong du lieu thu hai
kt thc lung d liu vo chng ta g <Ctrl + d>. Tt c cc d liu chng ta a vo t bn phm c xem l file input chun. Dng lnh ls chng ta s nhn c d liu ra mn hnh, l file output chun. Mt thng bo li xut hin mn hnh khi chng ta g lnh sai hoc truy xut vo cc tp tin hay th mc khng c quyn chnh l file error chun. V d nh chng ta g lnh listn th s xut hin li invalid command.
hoc
0< abc.txt
Output redirection D liu ra ca cc lnh thng thng c hin th trn mn hnh. d liu ra c a vo file chng ta dng du >
$lnh > tn_file
V d Lit k ni dung th mc v chuyn vo file : $ls l > tm.txt thm vo d liu c sn trn file, chng ta dng du >> thay cho du >
$lnh >> tn_file hoc $cat a.txt >> sum.txt
31
Nhm ngi dng Mt nhm ngi s dng l tp hp ca mt s ngi s dng c th dng chung cc file ca nhau. Mt nhm ngi s dng c m t bng cc thng tin sau: tn ca nhm. [mt khu]. s ca nhm (gid : group identify number). [danh sch nhng ngi khch (guest)]. Cc thng tin trn c cha trong file /etc/group. Do Unix l mt h iu hnh a ngi dng v a nhim, nhiu ngi cng c th s dng mt my Unix v mt ngi c th cho chy nhiu chng trnh khc nhau. C hai vn ln c t ra: quyn s hu cc d liu trn a v phn chia ti nguyn h thng nh CPU, RAM ... gia cc tin trnh. Chng ta s bn v s hu cc tp tin v cc quyn truy xut tp tin. 32
Tt c cc tp tin v th mc ca Linux u c ngi s hu v quyn truy nhp. Ta c th i cc tnh cht ny cho php nhiu hay t quyn truy nhp hn i vi mt tp tin hay th mc. Quyn ca tp tin cn cho php xc nh tp tin c l mt chng trnh (application) hay khng (khc vi MSDOS v MSWindows xc nh tnh cht ny qua phn m rng ca tn tp tin). Thuc tnh thm nhp file bao gm cc thuc tnh: c (R), Ghi (W), thc thi (X). Nh vy, mt file c 9 thuc tnh thm nhp ngoi ra c thm thuc tnh ch nh n l file hay th mc.
1 2 3 4 5 6 7 8 9 10
kiu file quyn thm nhp ca USER quyn thm nhp ca GROUP quyn thm nhp ca OTHER
2, 3, 4 : 5, 6, 7 : 8, 9, 10:
C mt s kiu file trong Linux. K t u tin m t kiu file v quyn thm nhp s cho bit file thuc kiu no (ch ci c gi l ch ci biu din).
Ch ci biu din d b c l p s -
Kiu file
Th mc (directory) File kiu khi (block-type special file) File kiu k t (character-type special file) Lin kt tng trng (symbolic link) File ng ng (pipe) Socket File bnh thng (regular file)
Trong mi nhm quyn thm nhp c 3 thuc tnh: (R) c c, (W) c ghi, (X) c thc thi, (-) rng.
- r w -r--r--1 van_a group 166 Oct 4 08:02 thu.txt r w r r - 1 van_a group : : : : : : : ch rng y l File USER c quyn c ghi GROUP c quyn c OTHER c quyn c s lin kt tn ngi s hu tn nhm s dng
33
: : :
hiu c chnh xc quyn thm nhp c ngha nh th no i vi h thng my tnh, phi nh rng Linux xem mi th u l file. Nu ci t mt ng dng, n cng s c xem nh mi chng trnh khc, tr mt iu: h thng nhn bit rng mt ng dng l mt chng trnh kh thi, tc l n c th chy c. Mt bc th gi cho m l mt dng file vn bn bnh thng, nhng nu thng bo cho h thng bit l mt chng trnh kh thi, h thng s c chy chng trnh (v tt nhin l li). Quyn c: cho php ngi dng c th xem ni dung ca file vi rt nhiu chng trnh khc nhau, nhng h s khng th thay i, sa cha hoc xa bt k thng tin no trong . Tuy nhin, h c th sao chp file thnh file ca h v sa cha file bn sao. Quyn ghi: l quyn thm nhp tip theo. Ngi s dng vi quyn ghi khi truy nhp vo file c th thm thng tin vo file. Nu c quyn ghi v quyn c i vi mt file, c th son tho li file - quyn c cho php xem ni dung, v quyn ghi cho php thay i ni dung file. Nu ch c quyn ghi, s thm c thng tin vo file, nhng li khng th xem c ni dung ca file. Quyn thc hin hay thc thi: quyn ny cho php ngi dng c th chy c file, nu l mt chng trnh kh thi. Quyn thc hin c lp vi cc quyn truy nhp khc, v th hon ton c th c mt chng trnh vi quyn c v quyn thc hin, nhng khng c quyn ghi. Cng c trng hp mt chng trnh ch c quyn thc hin, c ngha l ngi dng c th chy ng dng, nhng h khng th xem c cch n lm vic hay sao chp n. Quyn thm nhp --r-r-x rwrwx ngha Khng cho php mt quyn truy nhp no Ch c quyn c Quyn c v thc hin (cho chng trnh v shell script) Quyn c v ghi Cho php tt c cc quyn truy nhp (cho chng trnh)
Song song vi cch k hiu miu t bng k t nh trn, quyn thm nhp tp tin cn c th cho di dng ch s h 8. i vi file thu.txt trn c quyn l 644.
34
iu quan trng l phi hiu cch k hiu bng s v n lin quan n vic thay i cc quyn sau ny. Cc s c th nhn tt c cc gi tr t 0 n 7. S u tin miu t quyn ca USER, s th hai cho GROUP v s th ba cho OTHER. Mi s l tng ca cc quyn theo quy tc sau : read permission (QUYN C) Write permission (QUYN GHI) Execute permission (QUYN THC THI) 4 2 1
V vy, mt tp tin vi quyn 751 c ngha l USER c quyn read, write, v execute bng 4+2+1=7, GROUP c quyn read v execute bng 4+1=5, v OTHER c quyn execute bng 1. Nu ta xem k, ta s thy mi s t 0 n 7 u tng ng vi mt t hp duy nht cc quyn thm nhp tp tin. Quyn Ch c Ch ghi Ch thc hin Khng c quyn no Ch s h 8 4 2 1 0 Quyn Ch c v ghi Ch c v thc hin Ch ghi v thc hin c, ghi v thc hin Ch s h 8 6 5 3 7
Nu ta quen vi h nh phn, hy suy ngh bng h thng nh phn. Khi , rwx s nh s nh phn 3 bit. Nu quyn c cho, s nh phn tng ng s bng 1, ngc li, n s bng 0. V d r-x s l s nh phn 101, v theo h thp phn s l 4+0+1, hay 5. --x s tng ng 001, hay 0+0+1 = 1
r w x 1 1 1 7
r - x 1 0 1 5
r - 1 0 0 4
Cch thay i tuyt i ny c mt s u im v n l cch nh quyn tuyt i, kt qu cui cng khng ph thuc vo quyn thm nhp trc ca tp tin. ng thi, d ni thay quyn tp tin thnh by-nm-nm th d hn l thay quyn tp tin thnh c-vit-thc hin, c-thc hin, c-thc hin Dng cc k hiu tng trng Ta cng c th thay i quyn truy nhp mt cch tng i v d nh. ch ra nhm quyn no cn thay i, ta c th s dng u (user), g (group), o (other), hay a (all). Tip theo l du + thm quyn v bt quyn. Cui cng l bn thn cc quyn vit tt bi r,w,x. V d nh b sung quyn thc hin cho group v other, ta nhp vo dng lnh:
chmod who : who [operation] [right] filename u c ngha user g group o other a all operation: + thm quyn - bt quyn = gn gi tr khc right: r reading w writing x execution s t suid hoc guid
V d: $ chmod go+x tenfile y l cch thay i tng i v kt qu cui cng ph thuc vo quyn c trc m lnh ny khng lin quan n. Trn quan im bo mt h thng, cch thay i tuyt i dn n t sai st hn. Thay i quyn thm nhp ca mt th mc cng c thc hin ging nh i vi mt tp tin. Ch l nu ta khng c quyn thc hin (execute) i vi mt th mc, ta khng th thay i th mc cd vo th mc . Mi ngi s dng c quyn vit vo th mc u c quyn xa tp tin trong th mc , khng ph thuc vo quyn ca ngi i vi tp tin.
36
V vy, a s cc th mc c quyn drwxr-xr-x. Nh vy ch c ngi s hu ca th mc mi c quyn to v xa tp tin trong th mc. Ngoi ra, th mc cn c mt quyn c bit, l cho php mi ngi u c quyn to tp tin trong th mc, mi ngi u c quyn thay i ni dung tp tin trong th mc, nhng ch c ngi to ra mi c quyn xa tp tin. l sticky bit (bt nh km) cho th mc. Th mc /tmp thng c sticky bit bt ln
drwxrwxrw 7 root root 16384 Oct 21 15:33 tmp
Lnh ny cho php thay ch s hu file. Nu ch c tham s v ch, th ngi dng ch s c quyn s hu file v nhm s hu khng thay i. Nu theo sau tn ngi ch l du "." v tn ca mt nhm th nhm s nhm s hu file. Nu ch c du "." v nhm m khng c tn ngi ch th ch c quyn s hu nhm ca file thay i, lc ny, lnh chown c tc dng ging nh lnh chgrp (lnh chgrp c trnh by di y). Cc ty chn ca lnh chown: - c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s hu (s thng bo hin ra c th t hn trng hp -v, -verbosr). - f, --silent, --quiet : b qua hu ht cc thng bo li. - R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy. - v, --verbose : hin th dng thng bo vi mi file lin quan m chown tc ng ti (c hoc khng thay i s hu). - - help : a ra trang tr gip v thot. V d, th mc vidu c thng tin v cc quyn truy nhp nh sau:
drwxr-xr-x 11 duonglk root 4000 Oct 21 2008 vidu
Ngi s hu hin ti th mc vidu l ngi dng duonglk. ngi dng anhth l ch s hu th mc trn, hy g lnh: # chown anhth vidu Khi chuyn quyn s hu file cho mt ngi khc, ngi ch c mt quyn s hu file .
nhp, mc nh s l thnh vin ca mt nhm c thit lp khi ngi dng root to ti khon ngi dng. Cho php mt ngi dng thuc nhiu nhm khc nhau, nhng mi ln ng nhp ch l thnh vin ca mt nhm. thay i quyn s hu nhm i vi mt hoc nhiu file, hy s dng lnh chgrp vi c php nh sau:
chgrp [ty-chn] {nhm|--reference=nhmR} <file...>
Lnh ny cho php thay thuc tnh nhm s hu ca file theo tn nhm c ch ra trc tip theo tham s nhm hoc gin tip qua thuc tnh nhm ca file c tn l nhmR. Cc ty chn ca lnh l (mt s tng t nh lnh chown): - c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s hu (s thng bo hin ra c th t hn trng hp -v, -verbosr). - f, --silent, --quiet : b qua hu ht cc thng bo li. - R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy. - v, --verbose : hin th dng thng bo vi mi file lin quan m chgrp tc ng ti (c hoc khng thay i s hu). - - help : hin th trang tr gip v thot Tham s --reference=nhmR cho thy cch gin tip thay nhm ch ca file theo nhm ch ca mt file khc (tn l nhmR) l cch thc c a chung hn. V d: Cho php thay i nhm s hu.
$echo Hello > file1 $chmod 700 file1 $ls -l file1 -rwx------ 1 user1 stagiair 6 Apr 5 14:06 file1 $cat file1 Hello $chgrp animator file1 $ls -l file1 -rwx------ 1 user1 animator 6 Apr 5 14:06 file1 $chown user2 file1 $ls -l file1 -rwx------ 1 user2 animator 6 Apr 5 14:06 file1 $cat file1 cat: cannot open file1
38
39
ipmask*
setterm*
sha224sum* sha512sum*
sleep*
split*
su*
sync*
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.
pwd
Lnh ny cho bit hin ngi dng ang trong th mc no v hin ra theo dng mt
Theo ngm nh, lnh ny cho php ly thng tin u vo t bn phm ri xut ra mn hnh. Son tho ni dung ca mt file bng lnh cat tc l i hng u ra ca lnh t mn hnh vo mt file. Ngi dng g ni dung ca file ngay ti du nhc mn hnh v g CTRL+d kt thc vic son tho. Nhc im ca cch to file ny l n khng cho php sa li, v d nu mun sa mt li chnh t trn mt dng, ch c cch l xa n v tr ca li v g li ni dung va b xa. V d: to file newfile trong th mc /home/vd bng lnh cat.
# cat > /home/vd/newfile This is a example of cat command ^D
Sau khi son tho xong, g Enter v CTRL+d tr v du nhc lnh, nu khng g Enter th phi g CTRL+d hai ln. Khi s dng lnh ny, nu file cha tn ti th s to file mi, nu file tn ti th s xa file c v to file mi. C th s dng lun lnh cat xem ni dung ca file va son tho:
# cat /home/vd/newfile This is a example of cat command
thm ni dung vo phn cui ca file c sn dng lnh: cat >> filename. tng hp hai tp tin thnh mt ta s dng c php lnh sau: $cat file1 file2 > file3
- p: khng cun mn hnh, thay vo l xa nhng g c trn mn hnh v hin th tip ni dung file. - c: khng cun mn hnh, thay vo xa mn hnh v hin th ni dung file bt u t nh mn hnh. - s: xa bt cc dng trng lin nhau trong ni dung file ch gi li mt dng. - u: b qua du gch chn. +/xumu : ty chn +/xumu ch ra mt chui s c tm kim trc khi hin th mi file. +dng-s : bt u hin th t dng th dng-s. V d:
# more -d vdmore total 1424 drwxr-xr-x 6 root root 4096 Oct 31 2000 AfterStep-1.8.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 AnotherLevel drwxr-xr-x 2 root root 4096 Oct 31 2000 ElectricFence drwxr-xr-x 2 root root 4096 Oct 31 2000 GXedit-1.23 drwxr-xr-x 3 root root 4096 Oct 31 2000 HTML drwxr-xr-x 3 root root 4096 Oct 31 2000 ImageMagick drwxr-xr-x 6 root root 4096 Oct 31 2000 LDP drwxr-xr-x 3 root root 4096 Oct 31 2000 ORBit-0.5.0 drwxr-xr-x 2 root root 4096 Oct 31 2000 SVGATextMode drwxr-xr-x 2 root root 4096 Oct 31 2000 SysVinit-2.78 drwxr-xr-x 2 root root 4096 Oct 31 2000 WindowMaker --More--(9%) [ Press space to continue, "q" to quit .]
i vi lnh more, c th s dng mt s cc phm tt thc hin mt s cc thao tc n gin trong khi ang thc hin lnh. Bng di y lit k cc phm tt : Phm tt [Space] n [Enter] h d hoc CTRL+D q hoc CTRL+Q s Chc nng Nhn phm space hin th mn hnh tip theo Hin th n dng tip theo Hin th dng tip theo Hin th danh sch cc phm tt Cun mn hnh (mc nh l 11 dng) Thot khi lnh more B qua n dng (mc nh l 1) 43
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
- s, --number-separator=xu : thm chui xu vo sau s th t ca dng. - v, --first-page=s : s dng u tin trn mi trang logic. - w, --number-width=s : hin th s th t ca dng trn ct th s. - - help : hin th trang tr gip v thot. V d:
# cat > hello noi dung trong file hello noi dung trong file hello ^D # nl --body-numbering=a --number-format=rz hello 000001 noi dung trong file hello 000002 noi dung trong file hello
Lnh trong v d trn cho thm s th t ca cc cu trong file hello theo dng: nh s th t tt c cc dng, k c dng trng, cc s th t c cn phi v c s 0 u (lu rng c dng trong file c hin ra thnh hai dng trn giy).
Lnh tail ngm nh a ra mn hnh 10 dng cui trong ni dung ca cc file. Nu c nhiu hn mt file, th ln lt tn ca file v 10 dng cui s c hin th. Nu khng c tham s file, hoc file l du "-" th ngm nh s c t thit b vo chun. Cc ty chn: - - retry : c gng m mt file kh truy nhp khi bt u thc hin lnh tail. - c, --bytes=n : hin th n (s) k t sau cng. - f, --follow[={name | descritptor}] : sau khi hin ni dung file s hin thng tin v file: -f, --follow, v --follow=descriptor l nh nhau. - n, --lines=n : hin th n (s) dng cui cng ca file thay cho 10 dng ngm nh. - - max-unchanged-stats=n : hin th ti liu v file (ngm nh n l 5). - - max-consecutive-size-changes=n : hin th ti liu v file (ngm nh n l 200). - - pid=PID : kt hp vi ty chn -f, chm dt sau khi qu trnh c ch s = PID li. - q, --quiet, --silent : khng a ra tn file dng u trong ni dung c hin th. - s, --sleep-interval=k : kt hp vi ty chn -f, dng k giy gia cc hot ng. - v, --verbose : lun hin th tn ca file. - - help : hin th trang tr gip v thot.
- b: b qua s thay i v s lng ca k t trng. - B: b qua mi s thay i m ch chn hoc xo cc dng trng. - - brief: ch thng bo khi c s khc nhau m khng a ra chi tit ni dung khc nhau. - d: tm ra s khc bit nh (tu chn ny c th lm chm tc lm vic ca lnh diff). - - exclude-from=file: khi so snh th mc, b qua cc file v cc th mc con c tn ph hp vi mu c trong file. - i: so snh khng bit ch hoa ch thng. - r: thc hin so snh qui trn th mc. - s: thng bo khi hai file l ging nhau. - y: hin th hai file cnh nhau d phn bit s khc nhau.
48
Lnh ny cho php sao file-ngun thnh file-ch hoc sao chp t nhiu file-ngun vo mt th mc ch (tham s <file-ch> hay <th-mc>). Dng th hai l mt cch vit khc i th t hai tham s v tr. Cc ty chn: - a, --archive : ging nh -dpR (t hp ba tham s -d, -p, -R, nh di y). - b, --backup[=CONTROL] : to file lu cho mi file ch nu nh n ang tn ti. - d, --no-dereference : duy tr cc lin kt. - f, --force : ghi file ch ang tn ti m khng nhc nh. - i, --interactive : c thng bo nhc nh trc khi ghi . - l, --link : ch to lin kt gia file-ch t file-ngun m khng sao chp. - p, --preserve : duy tr cc thuc tnh ca file-ngun sang file-ch. - r : cho php sao chp mt cch quy file thng thng. - R : cho php sao chp mt cch quy th mc. - s, --symbolic-link : to lin kt tng trng thay cho vic sao chp cc file. - S, --suffix=<hu-t> : b qua cc hu t thng thng (hoc c ch ra). - u, --update : ch sao chp khi file ngun mi hn file ch hoc khi file ch cha c. - v, --verbose : a ra thng bo v qu trnh sao chp. - - help : hin th trang tr gip v thot. File ch c to ra c cng kch thc v cc quyn truy nhp nh file ngun, tuy nhin file ch c thi gian to lp l thi im thc hin lnh nn cc thuc tnh thi gian s khc. V d:
# cp /home/ftp/vd /home/test/vd1
Nu v tr ch, m t y tn file ch th ni dung file ngun s c sao chp sang file ch. Trong trng hp ch a ra v tr file ch c t trong th mc no th tn ca file ngun s l tn ca file ch.
# cp /home/ftp/vd /home/test/
Trong v d ny, tn file ch s l vd ngha l to mt file mi /home/test/vd. Nu s dng lnh ny sao mt th mc, s c mt thng bo c a ra cho bit ngun l mt th mc v v vy khng th dng lnh cp sao chp.
# cp . newdir cp: .: omitting directory
49
# pwd /newdir # ls -l total 8 -rw-r--r-- 1 root ftp 15 Nov 14 11:00 vd -rw-r--r-- 1 root ftp 12 Nov 14 11:00 vd1
i vi nhiu lnh lm vic vi file, khi g lnh c th s dng k hiu m t nhm xc nh mt nhm file lm cho tng hiu lc ca cc lnh . V d, lnh: # cp * bak thc hin vic sao chp mi file c trong th mc hin thi sang th mc con ca n c tn l bak. Dng lnh: # cp /usr/src/linux-2.2.14/include/linux/*.h bak cho php sao chp mi file vi tn c hai k hiu cui cng l ".h" sang th mc con bak. Chnh v l do ni trn, d trong nhiu lnh tuy khng ni n vic s dng k hiu m t nhm file nhng chng ta c th p dng chng nu iu khng tri vi suy lun thng thng. Do nhng tnh hung nh th l qu phong ph cho nn khng th gii thiu ht trong ti liu. Chng ta ch mt gii php l mi khi s dng mt lnh no , nn th nghim cch thc hiu qu ny.
Lnh ny s i tn file vd thnh newfile. Trong trng hp file newfile tn ti, ni dung ca file vd s ghi ln ni dung ca file newfile
4.13 Lnh uniq loi b nhng dng khng quan trng trong file
Trong mt s trng hp khi xem ni dung mt file, chng ta thy c mt s cc thng tin b trng lp, v d cc dng trng hoc cc dng cha ni dung ging nhau. ng thi lm gn v thu nh kch thc ca file, c th s dng lnh uniq lit k ra ni dung file sau khi loi b cc dng trng lp. C php lnh: uniq [ty-chn] [input] [output] Lnh uniq s loi b cc dng trng lp k nhau t input (thit b vo chun) v ch gi li mt dng duy nht trong s cc dng trng lp ri a ra output (thit b ra chun). Cc tu chn: - c, --count : m v hin th s ln xut hin ca cc dng trong file. - d : hin th ln mn hnh dng b trng lp. 50
- u : hin th ni dung file sau khi xa b ton b cc dng b trng lp khng gi li mt dng no. - i : hin th ni dung file sau khi xa b cc dng trng lp v ch gi li duy nht mt dng c ni dung b trng lp. - D : hin th tt c cc dng trng lp trn mn hnh. Nu s dng lnh uniq trn mt file khng c cc dng trng lp th lnh khng c tc dng. V d: ngi dng s dng lnh cat xem ni dung file vduniq
# cat vduniq Gnome c hai phng php thot ra ngoi. Gnome c hai phng php thot ra ngoi. thot bng cch s dng menu chnh, hy m menu chnh, chn mc Logout y menu. Chn YES/ NO kt thc phin lm vic vi Gnome. Chn YES/ NO kt thc phin lm vic vi Gnome. Nu mun thot bng cch s dng nt Logout trn Panel, trc ht phi thm nt ny vo Panel. Chn YES/ NO kt thc phin lm vic vi Gnome.
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 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.
L lnh c cc thng tin v sp xp chng theo th t trong bng ch ci hoc theo th t c quy nh theo cc ty chn ca lnh. C php lnh: sort [ty-chn] [file] ... Hin th ni dung sau khi sp xp ca mt hoc nhiu file ra thit b ra chun l tc dng ca lnh sort. Ngm nh sp xp theo th t t in ca cc dng c trong cc file (tng ch ci theo bng ch h thng (chng hn ASCII) v k t v tr u tin trong cc dng). Cc ty chn: +<s1> [-<s2>] : Hai gi tr s1 v s2 xc nh "kha" sp xp ca cc dng, thc cht ly xu con t v tr s1 ti v tr s2 ca cc dng so snh ly th t sp xp cc dng. Nu s2 khng c th coi l ht cc dng; nu s2 nh hn s1 th b qua la chn ny. Ch , nu c s2 th phi cch s1 t nht mt du cch. - b : b qua cc du cch ng trc trong phm vi sp xp. - c : kim tra nu file sp xp th thi khng sp xp na. - d : xem nh ch c cc k t [a-zA-Z0-9] trong kha sp xp, cc dng c cc k t c bit (du cch, ? ...) c a ln u. - f : sp xp khng phn bit ch hoa ch thng. - n : sp xp theo kch thc ca file. - r : chuyn i th t sp xp hin thi. V d: mun sp xp file vdsort
# cat vdsort trc ht phi thm nt ny vo Panel. 21434 bn xc nhn l c thc s mun thot hay khng. menu chnh, chn mc Logout y menu. Bn c th s dng mc Logout t menu chnh Gnome c hai phng php thot ra ngoi. hoc nt Logout trn Panel chnh thot ra ngoi. Khi mt hp thoi Logout s xut hin yu cu 57879 La chn YES hoc NO kt thc phin lm vic vi Gnome. N khng cung cp chc nng hot ng no khc ngoi chc nng ny. N khng cung cp chc nng hot ng no khc ngoi chc nng ny. Nu mun thot bng cch s dng nt Logout trn Panel, # sort -f vdsort 21434 57879
52
Bn c th s dng mc Logout t menu chnh bn xc nhn l c thc s mun thot hay khng. Gnome c hai phng php thot ra ngoi. hoc nt Logout trn Panel chnh thot ra ngoi. Khi mt hp thoi Logout s xut hin yu cu La chn YES hoc NO kt thc phin lm vic vi Gnome. menu chnh, chn mc Logout y menu. Nu mun thot bng cch s dng nt Logout trn Panel, N khng cung cp chc nng hot ng no khc ngoi chc nng ny. N khng cung cp chc nng hot ng no khc ngoi chc nng ny.
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
53
- NUM : ging --context=NUM a ra cc dng ni dung trc v sau dng c cha mu. Tuy nhin, grep s khng a ra dng no nhiu hn mt ln. - b, --byte-offset : hin th a ch tng i trong file u vo trc mi dng c a ra - c, --count : m s dng tng ng cha mu trong file u vo thay cho vic hin th cc dng cha mu. - d ACTION, --directories=ACTION : nu u vo l mt th mc, s dng ACTION x l n. Mc nh, ACTION l read, tc l s c ni dung th mc nh mt file thng thng. Nu ACTION l skip, th mc s b b qua. Nu ACTION l recurse, grep s c ni dung ca tt c cc file bn trong th mc ( quy); ty chn ny tng ng vi ty chn -r. - f file, --file=file : ly cc mu t file, mt mu trn mt dng. File trng cha ng cc mu rng, v cc dng a ra cng l cc dng trng. - H, --with-file : a ra tn file trn mi dng cha mu tng ng. - h, --no-filename : khng hin th tn file km theo dng cha mu trong trng hp tm nhiu file. - i : hin th cc dng cha mu khng phn bit ch hoa ch thng. - l : a ra tn cc file trng vi mu lc. - n, --line-number : thm s th t ca dng cha mu trong file. - r, --recursive : c tt c cc file c trong th mc ( quy). - s, --no-messages : b qua cc thng bo li file khng c c hoc khng tn ti. - v, --invert-match : hin th cc dng khng cha mu. - w, --word-regexp : ch hin th nhng dng c cha mu lc l mt t trn vn. - x, --line-regexp : ch hin th nhng dng m ni dung trng hon ton vi mu lc. Cng c th s dng cc k hiu biu din thng thng (regular - expression) trong mu lc a ra c nhiu cch tm kim file khc nhau. Ngoi cc ty chn khc nhau, lnh grep cn c hai dng na trn Linux. Hai dng l egrep - s dng vi cc mu lc phc tp, v fgrep - s dng tm nhiu mu lc cng mt lc. Thnh thong mt biu thc n gin khng th xc nh c i tng cn tm, v d, nh ang cn tm cc dng c mt hoc hai mu lc. Nhng lc , lnh egrep t ra rt c ch. egrep - expression grep - c rt nhiu cc k hiu biu din mnh hn grep. Di y l cc k hiu hay dng: K hiu ngha
54
- thay th cho k t c - hin th c nh l mt k t bnh thng nu c l mt k t iu khin - bt u mt dng - kt thc dng - thay cho mt k t n - chn mt k t trong tp hp cc k t c a ra - chn mt k t khng thuc tp hp cc k t c a ra - thay cho mt mu c hoc khng cha k t c - thay cho mt mu c cha mt hoc nhiu hn k t c - thay cho mt mu khng c hoc ch c cha duy nht mt k t c - hoc l a hoc l b - a mt biu thc
V d: gi s by gi mun tm cc dng c cha mt hoc nhiu hn k t b trn file passwk vi lnh egrep.
# egrep 'b+' /etc/passwd | head
Bt k lc no mun tm cc dng c cha nhiu hn mt mu lc, egrep l lnh tt nht s dng. C nhng lc cn phi tm nhiu mu lc trong mt lc. V d, c mt file cha rt nhiu mu lc v mun s dng mt lnh trong Linux tm cc dng c cha cc mu . Lnh fgrep s lm c iu ny. V d: file thu c ni dung nh sau:
# cat thu /dev/hda4: Linux/i386 ext2 filesystem
55
/dev/hda5: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty thutest toithutest
Mt s v d s dng lnh grep Vi file data file c ni dung sau: # cat datafile
northwest western southwest southern southeast eastern northeast north central NW Charles Main WE Sharon Gray SW Lewis Dalsass SO Suan Chin SE Patricia Hemenway EA TB Savage NE AM Main Jr NO Margot Weber CT Ann Stephens 3.0 5.3 2.7 5.1 4.0 4.4 5.1 4.5 5.7 .98 .97 .8 .95 .7 .84 .94 .89 .94 3 5 2 4 4 5 3 5 5 34 23 18 15 17 20 13 9 13
# grep NW datafile northwest NW northwest NW northeast NE north NO Charles Main Charles Main AM Main Jr. Margot Weber Charles Main 3.0 3.0 5.1 4.5 3.0 .98 .98 .94 .89 .98 3 3 3 5 3 34 34 13 9 34 # grep '^n' datafile
56
# grep TB Savage datafile grep: Savage: No such file or directory datafile: eastern eastern western southern central north western northwest western southwest southern southeast eastern northeast north central eastern eastern northeast northwest southwest northwest southwest southeast northeast northwest northwest EA WE SO CT NO WE NW WE SW SO SE EA NE NO CT EA EA NE NW SW NW SW SE NE NW NW EA TB Savage 4.4 4.4 5.3 5.1 5.1 .84 .84 .97 .95 .94 5.7 4.5 5.3 3.0 5.3 2.7 5.1 4.4 5.1 4.5 5.7 4.4 4.4 5.1 3.0 2.7 3.0 2.7 5.1 *\1' datafile 3.0 3.0 .98 .98 3 3 34 34 .89 .97 .98 .97 .8 .95 .7 .84 .94 .89 .94 .84 .84 .94 .98 .8 .98 .8 .7 .94 3 2 4 3 5 5 5 5 3 3 2 34 18 17 13 3 5 2 4 4 5 3 9 13 20 20 13 34 18 5 5 4 3 .94 5 5 5 9 23 34 23 18 15 17 20 13 5 20 23 15 13 13 20 # grep 'TB Savage' datafile TB Savage Sharon Gray Suan Chin AM Main Jr. Ann Stephens Margot Weber Sharon Gray Charles Main Sharon Gray Lewis Dalsass Suan Chin TB Savage AM Main Jr. Margot Weber Ann Stephens TB Savage TB Savage AM Main Jr. Charles Main Lewis Dalsass Charles Main Lewis Dalsass AM Main Jr. Charles Main Charles Main # grep '5\..' datafile
northeast NE
57
NE NO NO NW WE SO EA NE CT
13 9
# grep '\<north\>' datafile # grep '\<[a-z].*n\>' datafile Charles Main Sharon Gray Suan Chin TB Savage AM Main Jr. Ann Stephens Lewis Dalsass Suan Chin Patricia Hemenway Patricia Hemenway Charles Main Sharon Gray Lewis Dalsass Patricia Hemenway TB Savage AM Main Jr. Margot Weber Ann Stephens * 5.7 5.1 4.4 34 23 15 20 13 13 18 15 17 17 34 23 18 17 20 13 9 13
.95 .84 5.1 .94 2.7 5.1 4.0 4.0 3.0 5.3 2.7 4.0 4.4 5.1 4.5 5.7
#grep n '^south' datafile 3:southwest SW 4:southern SO 5:southeast SE southeast northwest western southwest southeast eastern northeast north central datafile datebook # grep north lewis # grep -i "$LOGNAME" datafile southwest SW Lewis Dalsass 2.7 .8 2 18 w 'north' datafile NO Margot Weber 4.5 .89 5 9 SE NW WE SW SE EA NE NO CT
# grep l 'SE'
# echo $LOGNAME
cc lnh khc, l cc ty chn ca lnh l mt t ch khng phi mt k t. iu kin cn i vi lnh ny l ch ra c im bt u ca vic tm kim trong h thng file v nhng quy tc cn tun theo ca vic tm kim. C php ca lnh find: find [ng-dn] [biu-thc] Lnh find thc hin vic tm kim file trn cy th mc theo biu thc c a ra. Mc nh ng dn l th mc hin thi, biu thc l -print. Cc ton t: (EXPR); ! EXPR hoc -not EXPR; EXPR1 -a EXPR2 hoc EXPR1 -and EXPR2; EXPR1 -o EXPR2 hoc EXPR1 -or EXPR2; v EXPR1, EXPR2 Cc ty chn lnh: tt c cc ty chn ny lun tr v gi tr true v c t u biu thc: - daystart : o thi gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime). - depth : thc hin tm kim t ni dung bn trong th mc trc (mc nh vic tm kim c thc hin bt u ti gc cy th mc c cha file cn tm). - follow : (ty chn ny ch p dng cho th mc) nu c ty chn ny th cc lin kt tng trng c trong mt th mc lin kt s c ch ra. - help, --help : hin th kt qu ca lnh find v thot. cc test - amin n : tm file c truy nhp n pht trc. - atime n : tm file c truy nhp n*24 gi trc. - cmin n : trng thi ca file c thay i n pht trc y. - ctime n : trng thi ca file c thay i n*24 gi trc y. - empty : file rng v hoc l th mc hoc l file bnh thng. - fstype kiu : file thuc h thng file vi kiu. - gid n : ch s nhm ca file l n. - group nhm : file thuc quyn s hu ca nhm. - links n : file c n lin kt. - mmin n : d liu ca file c sa ln cui vo n pht trc y. - mtime n : d liu ca file c sa vo n*24 gi trc y. - name mu : tm kim file c tn l mu. Trong tn file c th cha c cc k t i din nh du "*", "?"... - type kiu : tm cc file thuc kiu vi kiu nhn cc gi tr: b: c bit theo khi c: c bit theo k t 59
d: th mc p: pipe f: file bnh thng l: lin kt tng trng s: socket - uid n: ch s ngi s hu file l n. - user tn-ngi: file c s hu bi ngi dng tn-ngi. Cc hnh ng: - exec lnh : ty chn ny cho php kt hp lnh find vi mt lnh khc c c thng tin nhiu hn v cc th mc c cha file cn tm. Ty chn exec phi s dng du {} n s thay th cho tn file tng ng, v du '\' ti cui dng lnh, (phi c khong trng gia {} v '\'). Kt thc lnh l du ';' - fprint file : hin th y tn file vo trong file. Nu file khng tn ti th s c to ra, nu tn ti th s b thay th ni dung. - print : hin th y tn file trn thit b ra chun. - ls : hin th file hin thi theo khun dng: lit k danh sch y km c s th mc, ch s ca mi file, vi kch thc file c tnh theo khi (block). V d:
# find -name 'what*' ./usr/bin/whatis ./usr/bin/whatnow ./usr/doc/AfterStep-1.8.0/TODO/1.0to1.5/whatsnew ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-devinfo/what.html ./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-dev-info/gnome-devinfo/whatis.html # find . -type f -exec grep -l -i mapping {} \ ; ./OWL/WordMap/msw-to-txt.c ./.elm/aliases.text ./Mail/mark ./News/usenet.alt ./bin/my.new.cmd: Permission denied ./src/fixit.c ./temp/attach.msg
60
- f, --file [HOSTNAME:]file : ty chn ny xc nh tn file lu tr hoc thit b lu tr l file (nu khng c ty chn ny, mc nh ni lu tr l /dev/rmt0). - h, --dereference : khng hin cc file lin kt m hin cc file m chng tr ti. - k, --keep-old-files : gi nguyn cc file lu tr ang tn ti m khng ghi file lu tr mi ln chng. - K, --starting-file file : bt u ti file trong file lu tr. - l, --one-file-system : to file lu tr trn h thng file cc b. - M, --multi-volume : ty chn ny c s dng khi dung lng ca file cn sao lu l ln v khng cha ht trong mt n v lu tr vt l. - N, --after-date DATE, --newer DATE : ch lu tr cc file mi hn cc file c lu tr trong ngy DATE. - - remove-files : xa file gc sau khi sao lu chng vo trong file lu tr. - - totals : a ra tng s byte c to bi ty chn --create. - v, --verbose : hin th danh sch cc file c x l. V d:
# tar --create --file /dev/ftape /usr/src tar: Removing leading / from absolute path names in the archive
Lnh trn to mt file sao lu ca th mc /usr/src trong th mc /dev/ftape, (dng thng bo trn cho bit rng tar s chuyn c du / vo trong file sao lu). Nu vic sao lu khng th thc hin gn vo trong mt bng t, lc hy s dng ty chn -M:
# tar -cMf /dev/fd0H1440 /usr/src tar: Removing leading / from absolute path names in the archive Prepare volume #2 for /dev/fd0H1440 and hit return:
Ch rng phi nh dng a mm trc khi thc hin vic sao lu, c th s dng mt thit b u cui khc thc hin vic nh dng a khi tar yu cu mt a mm mi. Sau khi thc hin vic sao lu, c th kim tra kt qu ca cng vic bng ty chn - - compare:
# tar --compare --verbose -f /dev/ftape usr/src/ usr/src/Linux usr/src/Linux-1.2.10-includes/ ...
62
tar: Removing leading / from absolute path names in the archive usr/src/ usr/src/Linux-1.2.10-includes/ usr/src/Linux-1.2.10-includes/include/ usr/src/Linux-1.2.10-includes/include/Linux/ usr/src/Linux-1.2.10-includes/include/Linux/modules/ usr/src/Linux-1.2.10-includes/include/asm-generic/ usr/src/Linux-1.2.10-includes/include/asm-i386/ usr/src/Linux-1.2.10-includes/include/asm-mips/ usr/src/Linux-1.2.10-includes/include/asm-alpha/ usr/src/Linux-1.2.10-includes/include/asm-m68k/ usr/src/Linux-1.2.10-includes/include/asm-sparc/ usr/src/patch-1.2.11.gz
Lu rng, tar khng th thng bo c khi cc thng tin trong inode ca mt file b thay i, v d nh thay i quyn truy nhp ca file, hay thay i tn file chng hn. bit c nhng thng tin thay i s cn dng n lnh find v so snh vi trng thi hin thi ca file h thng vi danh sch cc file c sao lu t trc.
63
phn nh th phn di nht s b ct b. V d, tn file l gzip.msdos.exe, khi c nn s c tn l gzip.msd.exe.gz. File c nn c th c khi phc tr li dng nguyn th vi lnh gzip -d hoc gunzip. Vi lnh gzip c th gii nn mt hoc nhiu file c phn m rng l .gz, -gz, .z, -z, _z hoc .Z ... gunzip dng gii nn cc file nn bng lnh gzip, zip, compress, compress -H. Lnh zcat c s dng khi mun xem ni dung mt file nn trn thit b ra chun. Cc ty chn: - c, --stdout --to-stdout : a ra trn thit b ra chun; gi nguyn file gc khng c s thay i. Nu c nhiu hn mt file u vo, u ra s tun t l cc file c nn mt cch c lp. - d, --decompress --uncompress : gii nn. - f, --force : thc hin nn hoc gii nn thm ch file c nhiu lin kt hoc file tng ng thc s tn ti, hay d liu nn c c hoc ghi trn thit b u cui. - h, --help : hin th mn hnh tr gip v thot. - l, --list : hin th nhng thng tin sau i vi mt file c nn: compressed size: kch thc ca file nn uncompressed size: kch thc ca file c gii nn ratio: t l nn (0.0% nu khng bit) uncompressed_name: tn ca file c gii nn Nu kt hp vi ty chn --verbose, cc thng tin sau s c hin th: method: phng thc nn crc: CRC 32-bit cho d liu c gii nn date & time: thi gian cc file c gii nn Nu kt hp vi ty chn --name, tn file c gii nn, thi gian gii nn c lu tr trong file nn. Nu kt hp vi ty chn --verbose, tng kch thc v t l nn ca tt c cc file s c hin th. Nu kt hp vi ty chn --quiet, tiu v tng s dng ca cc file nn khng c hin th. - n, --no-name : khi nn, ty chn ny s khng lu tr tn file gc v thi gian nn, (tn file gc s lun c lu nu khi nn tn ca n b ct b). Khi gii nn, ty chn ny s khng khi phc li tn file gc cng nh thi gian thc hin vic nn. Ty chn ny c ngm nh. 64
- N, --name : ty chn ny ngc vi ty chn trn (-n), n hu ch trn h thng c s gii hn v di tn file hay khi thi im nn b mt sau khi chuyn i file. - -q, --quiet : b qua mi cnh bo. - r, --recursive : nn th mc. - S .suf, --suffix .suf : s dng phn m rng .suf thay cho .gz. Bt k phn m rng no cng c th c a ra, nhng cc phn m rng khc .z v .gz s b ngn chn trnh s ln xn khi cc file c chuyn n h thng khc. - t, --test : ty chn ny c s dng kim tra tnh ton vn ca file c nn - v, --verbose : hin th phn trm thu gn i vi mi file c nn hoc gii nn - #, --fast, --best : iu chnh tc ca vic nn bng cch s dng du #, nu -# l -1 hoc --fast th s dng phng thc nn nhanh nht (less compression), nu l -9 hoc -best th s dng phng thc nn chm nht (best compression). Ngm nh mc nn l 6 (y l phng thc nn theo tc nn cao). V d:
# ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1 # gzip /home/test/vd1 # ls /home/test Desktop data dictionary newt-0.50.8 rpm save vd1.gz # zcat /home/test/vd1 PID TTY TIME CMD 973 pts/0 00:00:00 bash 996 pts/0 00:00:00 man 1008 pts/0 00:00:00 sh 1010 pts/0 00:00:00 less 1142 pts/0 00:00:00 cat 1152 pts/0 00:00:00 cat 1181 pts/0 00:00:00 man 1183 pts/0 00:00:00 sh 1185 pts/0 00:00:00 less
Lnh compress lm gim kch thc ca file v khi s dng lnh ny, file gc s b thay th bi file nn vi phn m rng l .Z, cc thng tin khc lin quan n file khng thay i. Nu khng c tn file no c ch ra, thng tin t thit b vo chun s c nn v gi ra thit b ra chun. Lnh compress ch s dng cho cc file thng thng. Trong mt vi trng hp, n s b qua lin kt tng trng. Nu mt file c nhiu lin kt cng, compress b qua vic nn file tr khi c ty chn -f. Cc ty chn: - f : nu ty chn ny khng c a ra v compress chy trong ch nn trc, ngi dng s c nhc khi cc file thc s tn ti v c th b ghi . Cc file c nn c th c khi phc li nh vic s dng lnh uncompress. - c : ty chn ny s thc hin vic nn hoc gii nn ri a ra thit b ra chun, khng c file no b thay i. Lnh zcat tng ng vi uncompress -c. zcat thc hin vic gii nn hoc l cc file c lit k trong dng lnh hoc t thit b vo chun a ra d liu c gii nn trn thit b ra chun. - r : nu ty chn ny c a ra, compress s thc hin vic nn cc th mc. - v : hin th t l gim kch thc cho mi file c nn.
Symbolic link Symbolic link l mt kiu khc ca lin kt m khng dng n i-node cho lin kt, c chc nng ging nh shortcut ca MS Windows, khi xa symbolic link ta ch xa symbolic link 66
v tp tin c gi nguyn. Ta s dng cc lin kt ny khi to cc chng trnh iu khin thit b ngoi vi nh modem /dev/modem hay /dev/cual, ta to mt lin kt biu tng ca n.
$ ls $ ln $ ls -i -s -i bigfile bigfile bigfile anotherfile anotherfile 8358 anotherfile 6253 bigfile
6253 bigfile
Nh ta thy, cc i-node ca cc file l khc nhau. Khi lit k file cc lin kt biu tng c lit k bng hnh mi tn.
lrwxrwxrwx 1 root root 6 Sep 16:35 anotherfile->bigfile
Quyn ca file lin kt biu tng lun c t l lrwxrwxrwx. Quyn truy nhp file lin kt biu tng c xc nh bi quyn truy nhp v s hu ca file m n lin kt n.
n s chia file phim thanh 2 file l (phimaa v phimab) mi file c dung lng l 500MB, ty chn -b xc nh dung lng tp tin to ra (c tnh theo byete), sau -b l mt s v mt ch ci: k (kch thc tnh theo KB) hoc m (tnh theo MB). Nu khng a ra thng tin ny th mc nh n s l 1MB. Mun ghp file ta s dng lnh sau:
$cat phim* > phim.mpg
Lnh mount c s dng gn cc thit b vi h thng, cc ty chn thng thng thng c trong file /etc/fstab. V d: /dev/hda6 /intranet ext2 defaults 1 2, nu dng trn c tm thy trong /etc/fstab, c th gn h thng file c lu trong phn vng /dev/hda6 nh sau:
# mount /intranet
Ty chn -t c s dng xc nh kiu file h thng. gn tt c cc h thng file c trong /etc/fstab s dng ty chn -a, v d:
# mount a t ext2
Chng ta c th thay i cc dng hin th nh trnh by trn y bng cch sa i file /etc/rc.d/rc.local nh sau: Thay on chng trnh sau:
echo "" > /etc/issue echo "$R" >> /etc/issue echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue cp -f /etc/issue /etc/issue.net echo >> /etc/issue
thnh
echo "" > /etc/issue
68
V d: sa thnh:
echo "" > /etc/issue echo "This is my computer" >> /etc/issue
Dng th nht v dng th hai cho bit loi phin bn Linux, phin bn ca nhn v kin trc phn cng c trn my, dng th ba l du nhc ng nhp ngi dng thc hin vic ng nhp. Ch l cc dng trn y c th thay i cht t ty thuc vo phin bn Linux. Ti du nhc ng nhp, hy nhp tn ngi dng (cn gi l tn ng nhp): y l tn k hiu cung cp cho Linux nhm nhn din mt ngi dng c th. Tn ng nhp ng vi mi ngi dng trn h thng l duy nht, km theo mt mt khu ng nhp.
May1 login: root Password:
Khi nhp xong tn ng nhp, h thng s hin ra thng bo hi mt khu v di chuyn con tr xung dng tip theo ngi dng nhp mt khu. Mt khu khi c nhp s khng hin th trn mn hnh v chnh iu gip trnh khi s "nhm ng" ca ngi khc. Nu nhp sai tn ng nhp hoc mt khu, h thng s a ra mt thng bo li:
May1 login: root Password: Login incorrect My1 login:
Nu ng nhp thnh cng, ngi dng s nhn thy mt s thng tin v h thng, mt vi tin tc cho ngi dng... Lc , du nhc shell xut hin ngi dng bt u phin lm vic ca mnh.
May1 login: root Password: Last login: Fri Oct 27 14:16:09 on tty2 Root[may1 /root]#
Dy k t trong dng cui cng chnh l du nhc shell. Trong du nhc ny, root l tn ngi dng ng nhp, may1 l tn my v /root tn th mc hin thi (v y l ngi dng root). Khi du nhc shell xut hin trn mn hnh th iu c ngha l h iu hnh sn sng tip nhn mt yu cu mi ca ngi dng.
69
Du nhc shell c th khc vi trnh by trn y, nhng c th hiu n l chui k t bt u mt dng c cha tr chut v lun xut hin mi khi h iu hnh hon thnh mt cng vic no .
70
trn mn hnh ca tt c ngi dng xut hin thng bo "Sau mot phut nua he thong se shutdown! " v sau mt pht th h thng shutdown thc s. Cch th ba l s dng lnh halt vi c php nh sau: halt [ty-chn] Lnh ny tt hn my. Cc tu chn ca lnh halt: - w : khng thc s tt my nhng vn ghi cc thng tin ln file /var/log/wtmp (y l file lu tr danh sch cc ngi dng ng nhp thnh cng vo h thng). - d : khng ghi thng tin ln file /var/log/wtmp. Ty chn -n c ngha tng t song khng tin hnh vic ng b ha. - f : thc hin tt my ngay m khng thc hin ln lt vic dng cc dch v c trn h thng. - i : ch thc hin dng tt c cc dch v mng trc khi tt my. Chng ta cn nh rng, nu thot khi h thng khng ng cch th dn n hu qu l mt s file hay ton b h thng file c th b h hng. C th s dng lnh exit tr v du nhc ng nhp hoc kt thc phin lm vic bng lnh logout.
Khi ng li h thng
Ngoi vic thot khi h thng nh cc cch thc trn y (n t hp ba phm Ctrl+Alt+Del, dng lnh shutdown hoc lnh halt), khi cn thit (chng hn, gp phi tnh hung mt trnh ng dng chy qun) c th khi ng li h thng nh lnh reboot. C php lnh reboot: reboot [ty-chn] Lnh ny cho php khi ng li h thng. Ni chung th ch siu ngi dng mi c php s dng lnh reboot, tuy nhin, nu h thng ch c duy nht mt ngi dng ang lm vic th lnh reboot vn c thc hin song h thng i hi vic xc nhn mt khu. Cc ty chn ca lnh reboot nh sau l -w, -d, -n, -f, -i c ngha tng t nh trong lnh halt.
Vic ng k tn v mt khu ca siu ngi dng c tin hnh trong qu trnh khi to h iu hnh Linux. Vic ng k tn v mt khu ca mt ngi dng thng thng c tin hnh khi mt ngi dng mi ng k tham gia s dng h thng. Thng thng siu ngi dng cung cp tn v mt khu cho ngi dng mi (c th do ngi dng ngh) v dng lnh adduser (hoc lnh useradd) ng k tn v mt khu vi h thng. Sau , ngi dng mi nht thit cn thay i mt khu bo m vic gi b mt c nhn tuyt i. Lnh passwd cho php thay i mt khu ng vi tn ng nhp ngi dng. C php lnh passwd: passwd [ty-chn] [tn-ngi-dng] vi cc ty chn nh sau: - k : thay i mt khu ngi dng. Lnh i hi phi xc nhn quyn bng vic g mt khu ang dng trc khi thay i mt khu. Cho php ngi dng thay i mt khu ca mnh c lp vi siu ngi dng. - f : t mt khu mi cho ngi dng song khng cn tin hnh vic kim tra mt khu ang dng. Ch siu ngi dng mi c quyn s dng tham s ny. - l : kha mt ti khon ngi dng. Vic kha ti khon thc cht l vic dch bn m ha mt khu thnh mt xu k t v ngha bt u bi k hiu "!". Ch siu ngi dng mi c quyn s dng tham s ny. - stdin : vic nhp mt khu ngi dng ch c tin hnh t thit b vo chun khng th tin hnh t ng dn (pipe). Nu khng c tham s ny cho php nhp mt khu c t thit b vo chun hoc t ng dn. - u : m kha (tho b kha) mt ti khon (i ngu vi tham s -l). Ch siu ngi dng mi c quyn s dng tham s ny. - d : xa b mt khu ca ngi dng. Ch siu ngi dng mi c quyn s dng tham s ny. - S : hin th thng tin ngn gn v trng thi mt khu ca ngi dng c a ra. Ch siu ngi dng mi c quyn s dng tham s ny. Nu tn-ngi-dng khng c trong lnh th ngm nh l chnh ngi dng g lnh ny. V d khi ngi dng user1 g lnh: # passwd user1 h thng thng bo:
Changing password for user user1 New UNIX password:
ngi dng nhp mt khu mi ca mnh vo. Sau khi ngi dng g xong mt khu mi, h thng cho ra thng bo:
BAD PASSWORD: it is derived from your password entry Retype new UNIX password:
72
ngi dng khng nh mt ln na mt khu va g dng trn (nh phi g li ng ht nh ln trc). Khng nn qu phn vn v thng bo dng pha trn v hu ht khi g mt khu mi lun gp nhng thng bo kiu i loi nh vy, chng hn nh:
BAD PASSWORD: it is too simplistic/systematic
V sau khi chng ta khng nh li mt khu mi, h thng cho ra thng bo:
Passwd: all authentication tokens updated successfully.
cho bit vic thay i mt khu thnh cng v du nhc shell li hin ra. Khi siu ngi dng g lnh:
# passwd -S root
s hin ra thng bo
Changing password for user root Password set, MD5 encryption
cho bit thut ton m ha mt khu m Linux s dng l mt thut ton hm bm c tn l MD5. Ch : C mt li khuyn i vi ngi dng l nn chn mt khu khng qu n gin qu (nhm trnh ngi khc d d tm ra) hoc khng qu phc tp (trnh kh khn cho chnh ngi dng khi phi ghi nh v g mt khu). c bit khng nn s dng h tn, ngy sinh, s in thoi ... ca bn thn hoc ngi thn lm mt khu v y l mt trong nhng trng hp mt khu n gin nht. Nu thng bo mt khu qu n gin c lp i lp li mt vi ln v khng c thng bo mt khu mi thnh cng quay v du nhc shell th nn g li lnh v chn mt mt khu mi phc tp hn i cht. Lnh xem, thit t ngy, gi hin ti v xem lch trn h thng
- f, --file=file-vn-bn : ging nh mt tham s --date nhng ng vi nhiu ngy cn xem: mi dng ca file-vn-bn c vai tr nh mt xu-vn-bn trong trng hp tham s -date. - I, --iso-8601[=m-t] : hin th ngy gi theo chun ISO-8601 (v d: 2000-11-8). - I tng ng vi tham s --iso-8601='date'. Vi --iso-8601: nu m-t l 'date' (hoc khng c) th hin th ngy, nu m-t l 'hours' hin th ngy+gi, nu m-t l 'minutes': ngy+gi+pht; nu m-t l 'seconds': ngy + gi + pht + giy. - r, --reference= file : hin th thi gian sa i file ln gn y nht. - R, --rfc-822 : hin th ngy theo RFC-822 (v d: Wed, 8 Nov 2000 09:21:46 -0500). - s, --set=xu-vn-bn : thit t li thi gian theo kiu xu-vn-bn. - u, --utc, --universal : hin th hoc thit t thi gian theo UTC (v d: Wed Nov 8 14:29:12 UTC 2000). - - help : hin th thng tin tr gip v thot. Trong dng lnh date cho xem thng tin ngy, gi th tham s nh-dng iu khin cch hin th thng tin kt qu. nh-dng l dy c t mt n nhiu cp gm hai k t, trong mi cp k t u tin l % cn k t th hai m t nh dng. Do s lng nh dng l rt nhiu v vy chng ta ch xem xt mt s nh dng in hnh ( xem y cc nh dng, s dng lnh man date). Di y l mt s nh dng in hnh: %% : Hin ra chnh k t %. %a : Hin ra thng tin tn ngy trong tun vit tt theo ngn ng bn a. %A : Hin ra thng tin tn ngy trong tun vit y theo ngn ng bn a. %b : Hin ra thng tin tn thng vit tt theo ngn ng bn a. %B : Hin ra thng tin tn thng vit y theo ngn ng bn a. Trong dng lnh date cho php thit t li ngy gi cho h thng th tham s [MMDDhhmm[ [CC[YY] [.ss]] m t ngy, gi mi cn thit t, trong : MM: hai s ch thng, DD: hai s ch ngy trong thng, hh: hai s ch gi trong ngy, mm: hai s ch pht, CC: hai s ch th k, YY: hai s ch nm trong th k.
74
Cc dng ngay di y trnh by mt s v d s dng lnh date, mi v d c cho tng ng vi mt cp hai dng, trong dng trn m t lnh c g cn dng di l thng bo ca Linux.
# date Wed Jan 3 23:58:50 ICT 2001 # date -d='01/01/2000' Sat Jan 1 00:00:00 ICT 2000 # date -iso-8601='seconds' 2000-12-01T00:36:41-0500 # date -d='01/01/2001' Mon Jan 1 00:00:00 ICT 2001 # date 010323502001.50 Wed Jan 3 23:50:50 ICT 2001 # date +%a%A Wed Wednesday # date +%a%A%b%B Wed Wednesday Jan January # date +%D%%%j 01/05/01%005
75
Khi nhp dng lnh trn, trn mn hnh s hin th lch ca thng 1 nm 2001, mc nh chn ngy ch nht l ngy bt u ca tun. Di y l v d hin th s ngy trong thng 3 di dng s ngy trong nm 2001.
# cal -j 3 2001 March 2001 Su 63 70 77 84 Mo 64 71 78 85 Tu 65 72 79 86 We 66 73 80 87 Th 60 67 74 81 88 Fr 61 68 75 82 89 Sa 62 69 76 83 90
S dng lnh calendar hin th mt s s kin ni bt trn th gii trong ngy hin ti v ngy k tip: C php: calendar <ty chn> Xem cc s kin trong ngy 02 v 03 thng 09 :
#calendar -t 02.09
Thng tin hin ra c tt c 6 trng l: Tn h iu hnh: Linux Tn my: linuxsrv.linuxvn.net Tn nhn ca h iu hnh: 2.2.14-5.0 Ngy sn xut: #1 Tue Mar 7 21:07:39 EST 2000 Kiu kin trc b x l: i686 76
V d: hin thi du nhc shell c dng: root[may1 /hda1]# Sau khi g lnh: root@may1 /hda1]# PS1='[\h@\u \w : \d]\$' th du nhc shell c thay i l: [may1@root /mnt/hda1 : Fri Oct 27 ]# ngoi vic i th t gia tn ngi dng v my cn cho chng ta bit thm v ngy h thng qun l v tn y ca th mc hin thi. Linux cung cp cch thc hon ton tng t nh i vi bin PS1 thay i gi tr bin h thng PS2 tng ng vi du nhc cp hai.
78
Trong ngn ng lp trnh c cung cp (tm thi gi l ngn ng bc), tn ti rt nhiu cng c h tr tnh ton v lp trnh tnh ton: kiu php ton s hc phong ph, php ton so snh, mt s hm chun, bin chun, cu trc iu khin, cch thc nh ngha hm, cch thc thay i chnh xc, t li ch thch ... Ch cn s dng mt phn nh tc ng ca lnh bc, chng ta c mt "my tnh s bm tay" hiu qu. C php lnh bc: bc [ty-chn] [file...] vi cc tu chn sau y: - l, --mathlib: thc hin php tnh theo chun th vin ton hc (v d: 5/5=1.00000000000000000000). - w, --warn : khi thc hin php tnh khng tun theo chun POSIX (POSIX l mt chun trong Linux) th mt cnh bo xut hin. - s, --standard : thc hin php tnh chnh xc theo chun ca ngn ng POSIX bc. - q, --quiet : khng hin ra li gii thiu v phn mm GNU khi dng bc. Tham s file l tn file cha chng trnh vit trn ngn ng bc, khi lnh bc thc hin s t ng chy cc file chng trnh ny (Nu c nhiu tham s th c ngha s chy nhiu chng trnh lin tip nhau). V d: T du nhc lnh g: # bc s xut hin du nhc, sau ta g biu thc vo: 79
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
kt thc bc g CTRL + D. Ch : Ngn ng lp trnh tnh ton bc l mt ngn ng rt mnh c ni dung ht sc phong ph cho nn trong khun kh ca ti liu ny khng th m t ht cc ni dung ca ngn ng c. Chng ta cn s dng lnh man bc nhn c thng tin y v lnh bc v ngn ng tnh ton bc. y trnh by s b mt s yu t c bn nht ca ngn ng (bt l vit tt ca biu thc, b l vit tt ca bin). 80
Cc php tnh: - bt: ly i; ++ b, --b, b ++, b --: php ton tng, gim b; cc php ton hai ngi cng +, tr -, nhn *, chia /, ly phn d %, ly tha nguyn bc ^; gn =; gn sau khi thao tc <thao tc>=; cc php ton so snh <, <=, >, >=, bng ==, khc != ... Php so snh cho 1 nu ng, cho 0 nu sai. Bn bin chun l scale s lng ch s phn thp phn, last gi tr tnh ton cui cng; ibase c s h m i vi input v obase l c s h m vi output (ngm nh hai bin ny c gi tr 10). Cc hm chun sin s (bt); cosin c (bt); arctg a (bt); lgarit t nhin l (bt); m c s t nhin e (bt); hm Bessel bc nguyn n ca bt l j (n, bt).
5.9 Tin ch mc
Tin ch mc trong Linux cng ging nh NC Command ca MS-DOS. Ngi s dng h iu hnh MS-DOS u bit tnh nng tin ch Norton Commander (NC) rt mnh trong qun l, iu khin cc thao tc v file, th mc, a cng nh l mi trng trc quan trong ch vn bn (text). D trong h iu hnh Windows sau ny c s h tr ca tin ch Explorer nhng khng v th m vai tr ca NC gim i: Nhiu ngi dng vn thch dng NC trong cc thao tc vi file v th mc. Linux cng c mt tin ch mang tn Midnight Commander (vit tt l MC) c chc nng v giao din gn ging vi NC ca MSDOS v s dng MC trong Linux tng t nh s dng NC trong MS-DOS.
Khi ng MC
Lnh khi ng MC: # mc [Ty-chn] C mt s tu chn khi dng tin ch ny theo mt s dng thng dng sau: -a -b -c -d -P Khng s dng cc k t ho v cc ng thng khung. Khi ng trong ch mn hnh en trng. Khi ng trong ch mn hnh mu. Khng h tr chut. Vi tham s ny, Midnight Commander s t ng chuyn th mc hin hnh ti th mc ang lm vic. Nh vy, sau khi kt thc, th mc hin hnh s l th mc cui cng thao tc. -v file -V S dng chc nng View ca MC xem ni dung ca file c ch ra. Cho bit phin bn chng trnh ang s dng.
81
Nu ch ra ng dn (path), ng dn u tin l th mc c hin th trong panel chn (selected panel), ng dn th hai c hin th panel cn li.
Giao din ca MC
Giao din ca MC c chia ra lm bn phn. Phn ln mn hnh l khng gian hin th ca hai panel. Panel l mt khung ca s hin th cc file th mc cng cc thuc tnh ca n hoc mt s ni dung khc. Theo mc nh, dng th hai t di ln s l dng lnh cn dng di cng hin th cc phm chc nng. Dng u tin trn nh mn hnh l thc n ngang (menu bar) ca MC. Thanh thc n ny c th khng xut hin nhng nu kch hot bng c hai chut ti dng u tin hoc nhn phm <F9> th n s hin ra v c kch hot. Midnight Commander cho php hin th cng mt lc c hai panel. Mt trong hai panel l panel hin hnh (panel chn). Thanh sng chn nm trn panel hin hnh. Hu ht cc thao tc u din ra trn Panel ny. Mt s cc thao tc khc v file nh Rename hay Copy s mc nh s dng th mc Panel cn li lm th mc ch. Tuy nhin ta vn c th sa c th mc ny trc khi thao tc v cc thao tc ny u tin bao gi cng yu cu nhp ng dn. Trn panel s hin th hu ht cc file v th mc con ca th mc hin hnh. Midnight Commander c c ch hin th cc kiu file khc nhau bng cc k hiu v mu sc khc nhau, v d nh cc file biu tng lin kt s c k hiu @ u, cc file thit b s c mu tm, cc file ng ng c mu en, cc th mc c k hiu / u, cc th mc lin kt c k hiu ~...
82
Cho php thi hnh mt lnh h thng t MC bng cch g chng ln mn hnh. Tt c nhng g c g vo u c hin th dng lnh pha di tr mt s k t iu khin v khi nhn Enter, Midnight Commander s thi hnh lnh g vo.
Cc thao tc bn phm
Mt s thao tc ca Midnight Commander cho php s dng nhanh bng cch g cc phm tt (hot key). tng thch vi mt s h thng khc, trong cc bng di y v Midnight Commander, vit tt phm CTRL l C, phm ALT l M (Meta), phm SHIFT l S. Cc k hiu t hp phm c dng nh sau: C-<chr> C<chr1><char2> M-<chr> C ngha l gi phm CTRL trong khi g phm <char>. V d C -f c ngha l gi CTRL v nhn <f>. C ngha l gi phm CTRL trong khi g phm <char1> sau nh tt c ra v g phm <char2>. C ngha l gi phm ALT trong khi g phm <char>. Nu khng c hiu lc th c th thc hin bng cch g phm <Esc> nh ra ri g phm <char>. S-<chr> C ngha l gi phm SHIFT trong khi g phm <char>.
Sau y l chc nng mt s phm thng dng. Cc phm thc hin lnh: 83
Nu c dng lnh, lnh s c thi hnh. Cn nu khng th s tu vo v tr ca thanh sng trn panel hin hnh l Enter file hay th mc m hoc vic chuyn i th mc hoc thi hnh file hay thi hnh mt chng trnh tng ng s din ra. C-l M-Enter hay C-Enter M-Tab Cp nht li cc thng tin trn Panel. Cc phm thao tc trn dng lnh: chp tn file v tr thanh sng chn xung dng lnh hon thnh tn file, lnh, bin, tn ngi dng hoc tn my gip sao cc file c nh du (mc nh l file hin thi) trn C-x t, C-x C-t panel chn (C-x t) hoc trn panel kia (C-x C-t) xung dng lnh C-x p, C-x C-p a tn ng dn hin thi trn panel chn (C-x p) hoc trn panel kia (C-x C-p) xung dng lnh s dng hin li trn dng lnh cc lnh c gi M-p, M-n C-a C-e C-b, Left C-f, Right M-f M-b C-h, Space C-d, Delete C-@ C-k M-C-h, M-Backspace trc . M-p s hin li dng lnh c thi hnh gn nht, M-n hin li lnh c gi trc lnh a du nhc tr v u dng a du nhc tr v cui dng a du nhc tr di chuyn sang tri mt k t a du nhc tr di chuyn sang phi mt k t a du nhc tr n t tip theo a du nhc tr ngc li mt t xo k t trc xo k t ti v tr du nhc tr nh du ct xo cc k t t v tr du nhc tr n cui dng xo ngc li mt t
84
Cc phm thao tc trn panel: Up,Down, PgUp, PgDown, Home, End b, C-b, C-h, Backspace, Delete Space u, d g, G Tab, C-i Insert, C-t M-g, M-h, M-j di chuyn ngc li mt trang mn hnh di chuyn tip mt trang mn hnh di chuyn ln/ xung 1/2 trang mn hnh di chuyn n im u hoc cui ca mt mn hnh hon i panel hin hnh. Thanh sng chn s chuyn t panel c sang panel hin hnh chn nh du mt file hoc th mc ln lt chn file u tin, file gia v file cui trn panel hin th tm kim file trong th mc. Khi kch hot ch ny, nhng k t g vo s c thm vo xu tm kim thay v hin th trn dng lnh. Nu tu chn Show ministatus trong option c t th xu tm kim s c C-s, M-s hin th dng trng thi. Khi g cc k t, thanh sng chn s di chuyn n file u tin c nhng k t u ging nhng k t g vo. S dng phm Backspace hoc Del hiu chnh sai st. Nu nhn C-s ln na, vic tm kim s c tip tc M-t C-\ + chuyn i kiu hin th thng tin v file hoc th mc thay i th mc hin thi s dng du cng la chn nh du mt nhm file. C th s dng cc k t i din nh *, ?... biu din cc file s chn s dng du tr xo nh du mt nhm file. C th s dng cc k t di din nh *, ? biu din cc file s xo s dng cc phm ny di chuyn trong mt panel
85
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
Rescan
C-r
qut li
Thc n File cha mt danh sch cc lnh m c th thi hnh trn cc file c nh du hoc file ti v tr thanh chn. Cc thc n mc con: User menu View View file ... Filtered view Edit Copy cHmod Link Symlink edit sYimlink chOwn Advanced chown Rename/Move Mkdir Delete Quick cd select Group Unselect group reverse selecTion Exit F6 F7 F8 M-c M-+ M- M-* F10 M-! F4 F5 C-x c C-x l C-x s C-x C-s C-x o F2 F3 thc n dnh cho ngi dng xem ni dung ca file hin thi m v xem ni dung ca mt file bt k thc hin mt lnh lc vi tham s l tn file v hin th ni dung ca file son tho file hin thi vi trnh son tho mc nh trn h thng thc hin copy thay i quyn truy nhp i vi mt th mc hay mt file to mt lin kt cng n file hin thi to mt lin kt tng trng n file hin thi hiu chnh li mt lin kt tng trng thay i quyn s hu i vi th mc hay file thay i quyn s hu cng nh quyn truy nhp ca file hay th mc thc hin vic i tn hay di chuyn i vi mt file to mt th mc xo mt hoc nhiu file chuyn nhanh n mt th mc thc hin vic chn mt nhm cc file ngc vi lnh trn chn cc file trong th mc hin thi thot khi MC
Thc n Command cng cha mt danh sch cc lnh. Directory tree hin th th mc di dng cy th mc 87
M-? C-u
tm mt file thc hin tro i ni dung gia hai panel hin th a ra lnh shell c thc hin ln cui (ch s dng trn xterm, trn console SCO v Linux) thc hin so snh th mc hin ti trn panel chn vi cc th mc khc a ra danh sch cc lnh thc hin thay i th mc hin thi thc hin mt lnh trong MC v hin th kt qu trn panel chn (v d: nu mun trn panel chn
Switch panels on/of C-o Compare directories Command history Directory hotlist C-\ C-x d
External panelize
C-x !
hin th tt c cc file lin kt trong th mc hin thi, hy chn mc thc n ny v nhp lnh find . -type l -print s thy kt qu tht tuyt vi)
Show directory size Command history Directory hotlist Background C-\ C-x j
hin th kch thc ca th mc hin th danh sch cc lnh thc hin chuyn nhanh n mt th mc thc hin mt s lnh lin quan n cc qu trnh nn cho php hiu chnh file ~/.mc/ext xc nh chng trnh s thc hin khi xem, son tho hay lm bt c iu g trn cc file c tn m rng
Thc n Options cho php thit lp, hu b mt s tu chn c lin quan n hot ng ca chng trnh MC. Configuration ... thit lp cc tu chn cu hnh cho MC Lay-out ... Confirmation ... Display bits ... Learn keys ... Virtual FS ... xc lp cch hin th ca MC trn mn hnh thit lp cc hp thoi xc nhn khi thc hin mt thao tc no thit lp cch hin th ca cc k t xc nh cc phm khng c kch hot thit lp h thng file o 88
Save setup
dung file hin thi Insert file ... About .. Quit F10 F15 chn ni dung mt file vo file hin thi sao on vn bn c nh du n mt file khc thng tin v b son tho thot khi b son tho Copy to file ... C-f
Thc n Edit: cc thao tc lin quan n vic son tho ni dung file. Toggle Mark Mark Columns Copy Move Delete Undo Beginning End F3 S-F3 F5 F6 F8 C-u C-PgUp C-PgDn thc hin nh du mt on vn bn nh du theo ct chuyn i gia hai ch chn/ thc hin sao chp file thc hin di chuyn file xo file tr v trng thi trc khi thc hin mt s thay i di chuyn n u mn hnh di chuyn n cui mn hnh
Thc n Sear/Repl: cc thao tc lin quan n vic tm kim v thay th Search .. Search again Replace ... F7 F17 F4 thc hin tm kim mt xu vn bn tm kim tip tm v thay th xu vn bn
Thc n Command: cc lnh c th c thc hin trong khi son tho. Goto line ... Insert Literal ... Refresh screen Insert Date/time Format paragraph M-p Sort M-t M-l C-q C-l di chuyn tr son tho n mt dng chn vo trc du nhc tr mt k t lm ti li mn hnh chn ngy gi hin ti vo v tr du nhc tr nh dng li on vn bn thc hin sp xp
Thc n Options: cc tu chn c th thit lp cho b son tho. General ... thit lp cc tu chn cho b son tho Save mode ... ghi li mi s thit lp c thay i 90
Cc phm chc nng F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 hin th trang tr gip ghi ni dung file thc hin vic nh du on vn bn tm v thay th xu vn bn thc hin vic sao chp di chuyn file tm kim xu vn bn xo on vn bn c nh du hin th thanh thc n ngang thot khi b son tho
hin th ng, VI cn bit kiu terminal ang dng. Ta c th nh ngha c kiu terminal bng cch gn ga tr cho bin mi trng TERM: $TERM=tws2103; export TERM
91
Phn ln cc phm c dng c lp hoc kt hp vi phm SHIFT v CTRL to cc lnh ca VI. Khi mt lnh b g sai, vi bo hiu bng nhy mn hnh, ku beep hoc thng bo li. Chng trnh VI c xy dng t chng trnh son tho dng ex. Cc lnh ca ex c th c gi khi c du : dng cui mn hnh. Ta c th gi vi vi tn file vn bn: $ vi tn_file Ca s son tho s c m ti u file. Nu file cha tn ti, n s c to bi lnh ghi. Dng cui cng trn mn hnh c dng cho nhng vic sau: vo cc lnh. thng k. bo li. i vi nhng ngi mi dng vi, c th dng version khc ca vi: $vedit tn_file version ny ca vi s hin thng bo INPUT MODE khi ta ang trong ch nhp vn bn. Khi ta ch mun xem ni dung ca mt file, dng: $view tn_file version ny ca vi m file ch c, cho php ta xem c ni dung m trnh c nguy c file b thay i. Chuyn ch lm vic: T ch son tho sang ch lnh dng phm ESC Mun ra khi vi v ghi file c th dng mt trong cc cch sau:
ZZ :w :wq :x sau :q hoc hoc hoc
Khi ang trong VI, mun lm vic vi SHELL, ta c th lm nh sau: chy mt lnh ca SHELL
:!lnh
hoc gi SHELL, sau chy cc lnh ta mun, khi kt thc n CTRL-D tr li VI:
:!sh $lnh $CTRL-D
Chn vn bn
Chn k t trn mt dng a <text> <ESC> Chn k t vo sau cursor. 92
i <text> <ESC> A <text> <ESC> I <text> <ESC> Chn dng o <text> <ESC> O <text> <ESC> CTRL V trc chng.
Chn k t vo trc cursor. Chn k t vo cui dng. Chn k t vo u dng. Chn mt dng vo trc dng cha cursor. Chn mt dng vo sau dng cha cursor.
Ghi ch: nhn ESC kt thc ch xem, mun chn cc k t khng in c ta phi g:
Theo t (word) w W v u t tip bB u t hin ti e E cui t hin ti Theo cu (sentence) ( v u cu ) v cui cu du kt thc mt cu l cc du ., ! hoc ? Theo on vn (paragraph) 93
{ v u on vn } cui on vn on vn kt thc bng mt dng trng. Theo ca s (window) z z^D ^U ^F ^B dng hin ti gia ca s. dng hin ti cui ca s. xung na ca s ln na ca s xung mt ca s (-2 dng) ln mt ca s (2 dng) z<Enter> dng hin ti u ca s.
Ghi ch: ^ l k hiu ca phm CTRL Theo s th t dng hin th s th t ca cc dng son tho: :set nu Xo b hin th trn :set nonu :n <Enter> hoc nG chuyn cursor n dng th n :$ hoc G :se list Tm dy k t / ? /string ?string // ?? k hiu chiu tm xui. k hiu chiu tm ngc. chuyn cursor ti dng cha dy k t theo chiu xui. chuyn cursor ti dng cha dy k t theo chiu ngc. lp li tm xui. lp li tm ngc. n dng cui vn bn hin th cc k t n (hidden)
Xa vn bn
Xa k t x 3x X xa k t ti v tr cursor xa 3 k t xa k t trc v tr cursor xa dng cha cursor xa 3 dng bt u t dng cha cursor 94
Thay th vn bn
Thay th k t rc R<text><ESC> Thay th dng S<text><ESC> Thay th t cw<text><ESC> c2w<text><ESC> C hoc c$ c/string thay mt t bng text. T c thay th tnh t cursor n k t $. thay 2 t. thay th cui dng thay th n ht string xa dng hin ti v thay n bng text thay th k t hin ti bng k t c (???) thay th s k t bng dy text
Xa lnh
u U ^G xa tc dng ca lnh cui cng xo tt c thay i lm trn dng hin ti. Hin th tn, trng thi, s dng, v tr ,cursor v phn trm vn bn tnh t v tr cursor n cui vn bn.
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
96
Ta dng php iu khin ln, xung xem trang man. Nu mun xem tng trang dng phm space. Thot khi man s dng lnh: : q Man phn d liu mnh lu tr thnh nhng on (session) khc nhau vi cc ch khc nhau l: Session 1 2 3 4 5 6 7 8 Tn ch ngha
user command cc lnh thng thng ca h iu hnh system call subroutines devices File format games Miscell sys. admin cc hm th vin kernel ca h thng cc hm th vin lp trnh cc hm truy xut file v x l thit b cc hm nh dng file cc hm lin quan n tr chi cc hm khc cc hm qun tr h thng
Xc nh c th thng tin ca mt ch no chng ta dng: $man session t-kha V d : # man 3 printf Xem cc thng tin v hm prinf dng trong lp trnh. Nu chng ta khng xc nh session th session mc nhin l 1 .
97
1.2 Mt s c im ca Shell
X l tng tc (Interative processing): Ngi dng tng tc vi shell di dng i thoi trc quan. Chy nn: Cc chng trnh trn shell c thi gian thc thi lu v chim t ti nguyn c th cho php chy nn bn di trong khi ngi dng c th thc hin cc cng vic khc. iu ny tng hiu qu s dng h thng. Chuyn hng (Redirection): C th linh hot chuyn i cc d liu ra vo chun v li. 98
ng dn (pipe): Cho php thc hin nhiu lnh lin tip trong d liu ra ca lnh ny c s dng nh d liu vo ca lnh kia. Tp tin lnh (shell script): To cc tp tin cha cc lnh lm vic theo trnh t. Cp quyn v thc thi tp tin ny. Bin shell: shell h tr s dng cc bin lu tr cc thng tin iu khin hot ng. S dng li cc lnh thc hin (history command): y l tnh nng rt c ch cho ngi dng. thc hin li cc lnh mnh thc hin trc , thay v phi g li, ngi dng c th li. Cu trc lnh nh ngn ng lp trnh: Shell cho php s dng lnh nh ngn ng lp trnh, bi n c th kt hp x l cc tc v phc tp. T ng hon tt tn file, hoc lnh: Chng ta c th g phn u ca lnh hoc tp tin sau dng <Tab> hon tt phn cn li. B danh cho lnh (command alias): Ta c th dng mt tn mi cho mt lnh. Sau s dng tn ny thay th lnh : $alias dir=ls l lc ny ta s dng lnh dir dng nh ls l
Csh, tcsh v zsh Shell s dng cu trc lnh lnh ca ngn ng C lm ngn ng script. Shell ny c to bi Bill Joy, y l Shell thng dng th 2 sau bash Bash Bash(Bourne Again Shell) l Shell s dng chnh trong Linux, ra i t d n GNU. Bash c u im l m ngun m, c th download t a ch http://www.gnu.org Rc L Shell m rng ca C Shell vi nhiu tng thch vi ngn ng C, ra i t d n GNU Shell Linux mc nh l bash, nm ti /bin/bash Tt c h iu hnh Linux u c Shell Bash. Mun bit mnh ang dng Shell no s dng lnh sau: echo $Shell
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
1.3 Lp trnh ng ng
Pipe cn gi l ng ng, l cch truyn d liu s dng kt hp 2 chuyn tip. Pipe s dng kt xut ca mt chng trnh v lm nhp liu cho mt chng trnh khc. c im ng ng ca Unix ni kt mt lnh vi lnh khc. ng ni cho php u ra ca mt lnh l u vo ca lnh khc. ng ni n thun l mt b m ca kernel. Cc tin trnh c th chia s d liu thay cho vic s dng file tm.
100
c bit hn n to xut chun ca 1 lnh thnh nhp chun ca 1 lnh khc. K hiu | thit lp ng ng V d: # wc baocao* | sort n u ra ca wc (trong trng hp ny l tng s t v k t ca cc tp tin c tn bt u l baocao) v gi n n lnh sort sp th t s. Kt qu cui cng l cc tng s t sp theo th t tng dn hin th trn mn hnh. ng ng c th kt hp vi i hng: wc baocao* | sort -n > rep-count kt qu s a ra tp tin rep-count. Vi lnh: $ls l | more kt qu ca lnh ls khng xut ra mn hnh m chuyn cho lnh more x l nh d liu u vo
Lnh tee
Hot ng chuyn tip v ng ng l c im ca h iu hnh Linux. Tuy nhin ta cng c th s dng 1 lnh ca UNIX lm vic ny. l lnh tee, n s gim bt cc kt qu gin tip ca chui ng ng: sort baocao | tee baocaostt | lp u tin lnh tee gi nhp chun ca n n xut chun ca n, trong trng hp ny gi xut ca sort n nhp ca lp. Th hai tee ly ch 1 bn sao ca nhp chun vo tn tp tin baocaostt.
101
Trng hp c bit ch th #! khng dng gii thch m l y chnh l dng lnh gi shell thng dch cc lnh trong tp tin ny. Ta thng thy dng u tin trong cc chng trnh shell l #! /bin/bash. iu ny c ngha l ta s dng shell bash thng dch lnh. Shell chng ta chy c th xem l shell ph v chng c th thc thi cc lnh m khng lm bin i cc bin mi trng ca shell chnh. C php chung ca ch th ny l: #!shell-thc-thi Nu chng ta khng khai bo th shell mc nhin trong Linux l bash. Cc h Unix khc th shell mc nhin l sh. Ch th #! Cn dng chy cc chng trnh khc trc khi thc thi cc lnh tip theo.
S dng bin
Bin dng trong chng trnh shell khng cn phi khai bo trc nh cc ngn ng C, Pascal ... N s t ng khai bo khi ngi dng ln u s dng. D liu bin lu tr c hiu di dng chui d n c th cha s. Trong trng hp mun s dng gi tr bin nh l s th phi c cc php bin i m chng ta hc pha sau. Mt vn m ta phi lu l shell phn bit ch hoa v ch thng. V d hai bin tong v Tong l khc nhau. Trong shell c th k ti 3 loi bin: Bin mi trng: (bin shell c bit, bin t kha, bin shell xc nh trc hoc bin shell chun) c lit k nh sau (cc bin ny thng gm cc ch ci hoa): HOME : ng dn th mc ring ca ngi dng, MAIL: ng dn th mc cha hp th ngi dng, PATH: th mc dng tm cc file th hin ni dung lnh, PS1: du mi ban u ca shell (ngm nh l $), 102
PS2: du mi th 2 ca shell (ngm nh l >), PWD: Th mc hin ti ngi dng ang lm, SHELL: ng dn ca shell (/bin/sh hoc /bin/ksh) TERM: S hiu gn cho trm cui, USER: Tn ngi dng vo h thng, Trong .profile th mc ring ca mi ngi dng thng c cc cu lnh dng: <bin mi trng> = <gi tr> Bin ngi dng Cc bin ny do ngi dng t tn v c cc cnh thc nhn gi tr cc bin ngi dng t bn phm (lnh read). Bin c t tn gm mt xu k t, quy tc t tn nh sau: k t u tin phi l mt ch ci hoc du gch chn (_), sau tn l mt hay nhiu k t khc. to ra mt bin ta ch cn gn bin mt gi tr no . Php gn l mt du bng (=). V d: myname=duonglk Ch : khng c c du cch (space) ng trc hay ng sau du bng. Tn bin l phn bit ch hoa ch thng. truy xut n mt bin ta dng c php sau; $tn_bin. Chng hn ta mun in ra gi tr ca bin myname trn ta ch cn ra lnh: echo $myname.
$myname. $myname.
Nu ta ra lnh in gi tr ca bin ny th ta s thu c mt gi tr NULL ra mn hnh (mt dng trng). Bin t ng (hay bin-ch c, tham s v tr) L cc bin do shell c sn; tn cc bin ny cho trc. C 10 bin t ng: $0, $1, $2, ..., $9. K hiu bin $1, $2, $3 $0 $* $# $$ ngha Gi tr cc bin tham s th nht, th 2.. tng ng vi cc tham s t tri sang phi trong dng tham s. Tn tp tin lnh gi (tn ca shell script) Danh sch tham s y Tng s tham s. S tin trnh (ID) m chng trnh ang hot ng 103
Tham bin $0 cha tn ca lnh, cc tham bin thc bt u bng $1 (nu tham s c v tr ln hn 9, ta phi s dng c php ${} v d, ${10} thu c cc gi tr ca chng). Shell bash c ba tham bin v tr c bit, $#, $@, v $#. $# l s lng tham bin v tr (khng tnh $0). $* l mt danh sch tt c cc tham bin v tr loi tr $0, c nh dng nh l mt xu n vi mi tham bin c phn cch bi k t $IFS. $@ tr v tt c cc tham bin v tr c a ra di dng N xu c bao trong du ngoc kp. S khc nhau gia $* v $@ l g v ti sao li c s phn bit? S khc nhau cho php ta x l cc i s dng lnh bng hai cch. Cch th nht, $*, do n l mt xu n, nn c th c biu din linh hot hn khng cn yu cu nhiu m shell. $@ cho php ta x l mi i s ring bit bi v gi tr ca chng l N i s c lp. Mt v d khc v bin v tr gip ta phn bit c s khc nhau gia bin $* v $@:
#!/bin/bash #testparm.sh function cntparm { echo e inside cntparm $# parms: $* } cntparm $* cntparm $@ echo e outside cntparm $* parms\n echo e outside cntparm $# parms\n
Trong dng th nht v th 2 ta thy kt qu c s khc nhau, dng th nht bin $* tr v tham bin v tr di dng mt xu n, v th cntparm bo co mt tham bin n. Dng th hai gi cntparm, tr v i s dng lnh ca l 3 xu c lp, v th cntparm bo co ba tham bin. Nhp gi tr cho bin t bn phm C php lnh : read tn-bin gp lnh ny chng trnh s i ngi dng nhp gi tr vo, khi d liu xong th n Enter. Gi tr s c gn vo bin tn-bin. 104
V d :
echo "Nhap vao ten cua ban" read ten echo "Ten vua nhap la $ten"
Trong v d trn khi xut hin dng thng bo Nhap vao ten cua ban , ngi dng nhp vo tn v d nh Nguyen Hung Dung th kt qu hin th l Ten vua nhap la Nguyen Hung Dung . Du {} phi c s dng vi tn bin theo sau bi ch hay s m khng phi l mt phn ca tn bin.
$ filename=chapt $ echo ${filename}0 chapt0
105
Du chia ct lnh ; cho php thc hin nhng lnh bash phc tp nh trn mt dng. Nhng quan trng hn, n l kt thc lnh theo l thuyt POSIX.
By gi s dng lnh unset xo bin status, v thc hin vn cc lnh , c output nh sau: 106
$unset status $echo ${status:-undefined} undefined $echo ${status:=undefined} undefined $echo ${status:+undefined} undefined $unset status $echo ${status:?Dohhh\! undefined} bash:status Dohhh! Undefined
Cn thit unset status ln th hai v lnh th ba, echo ${status:+undefined}, khi to li status thnh undefined. Cc ton t substring c trong danh sch bng trn c bit c ch. Hy xt bin foo c gi tr Bilbo_the_Hobbit. Biu thc ${foo:7} tr v he_Hobbit, trong khi ${foo:7:5} li tr v he_Ho. Cc ton t Pattern-Matching Cc ton t pattern-matching c ch nht trong cng vic vi cc bn ghi di bin hay cc xu c nh dng t do c nh gii bi cc k t c nh. Bin mi trng $PATH l mt v d. Mc d n c th kh di, cc th mc ring bit c phn nh bi du hai chm. Bng di l danh sch cc ton t pattern-Matching ca bash v chc nng ca chng. Ton t ${var#pattern} ${var##pattern} ${var%pattern} ${var%%pattern} ${var/pattern/string} tr v phn cn li Xo b phn khp (match) di nht ca pattern trc var v tr v phn cn li Xo b phn khp ngn nht ca pattern cui var v tr v phn cn li Xo b phn khp di nht ca pattern cui var v tr v phn cn li Thay phn khp di nht ca pattern trong var bng string. Ch thay phn khp u tin. Ton t ny ch c trong bash 2.0 hay ln hn. ${var//pattern/string} Thay phn khp di nht ca pattern trong var bng string. 107 Chc nng Xo b phn khp (match) ngn nht ca pattern trc var v
Thay tt c cc phn khp. Ton t ny c trong bash 2.0 hoc ln hn. Thng thng quy tc chun ca cc ton t bash pattern-matching l thao tc vi file v tn ng dn. V d, gi s ta c mt tn bin shell l mylife c gi tr l /usr/src/linux/Documentation/ide.txt (ti liu v trnh iu khin a IDE ca nhn). S dng mu /* v */ ta c th tch c tn th mc v tn file.
#!/bin/bash ############################################ myfile=/usr/src/linux/Documentation/ide.txt echo ${myfile##*/}= ${myfile##*/} echo basename $myfile = $(basename $myfile) echo ${myfile%/*}= ${myfile%/*} echo dirname $myfile = $(dirname $myfile)
Lnh th 2 xo xu matching */ di nht trong tn file v tr v tn file. Lnh th 4 lm khp tt c mi th sau /, bt u t cui bin, b tn file v tr v ng dn ca file. Kt qu ca tp lnh ny l:
$ ./pattern.sh ${myfile##*/}= ide.txt basename $myfile = ide.txt ${myfile%/*}= /usr/src/linux/Documentation dirname $myfile=/usr/src/linux/Documentation
minh ho v cc ton t pattern-matching v thay th, lnh thay th mi du hai chm trong bin mi trng $PATH bng mt dng mi, kt qu hin th ng dn rt d c (v d ny s sai nu ta khng c bash phin bn 2.0 hoc mi hn):
$ echo e ${PATH//:/\\n} /usr/local/bin /bin /usr/bin /usr/X11R6/bin /home/kwall/bin /home/wall/wp/wpbin
Cc ton t so snh chui: Kim tra str1 = str2 str1 != str2 iu kin thc str1 bng str2 str1 khc str2 108
-n str -z str
bieuthuc1 eq biethuc2 ng nu bieuthuc1 bng bieuthuc2 bieuthuc1 ne biethuc2 ng nu bieuthuc1 khng bng bieuthuc2 bieuthuc1 gt biethuc2 ng nu bieuthuc1 ln hn bieuthuc2 bieuthuc1 ge biethuc2 ng nu bieuthuc1 ln hn hoc bng bieuthuc2 bieuthuc1 lt biethuc2 ng nu bieuthuc1 nh hn bieuthuc2 bieuthuc1 le biethuc2 ng nu bieuthuc1 nh hn hoc bng bieuthuc2 Cc ton t kim tra file Php kim tra -d file -e file -f file -g file -s file -u file -r file -w file -x file -O file -z file -G file file1 - nt file2 Kt qu file tn ti v l mt th mc. ng nu file tn ti. ng nu file l tp tin bnh thng (khng l mt th mc hay mt file c bit). ng nu file c xc lp set-group-id trn file ng nu file c kch thc khc rng ( >0) ng nu file c xc lp set-user-id ng nu file cho php c ng nu file c php ghi ng nu file cho php thc thi ng nu file hin thi thuc s hu ca ngi dng hin thi. ng nu file c kch thc l 0. file thuc mt trong cc nhm ngi dng hin ti l thnh vin. file1 mi hn file2 109
file1 c hn file2
Kt qu ng nu expr khng ng
expr1 -a expr2 ng nu expr1 v expr2 ng expr1 -o expr2 ng nu expr1 ng hoc expr2 ng.
Biu thc tnh ton expr hoc let cho vic tnh ton
Biu thc expr s dng cho vic tnh ton, cc gi tr trong biu thc c hiu l s nguyn thay v l chui. N cng dng i chui thnh s. Biu thc expr c bao bc bi 2 du ` ( Khng phi du nhy n, l du phm bn tri phm s 1-!, hay l phm nm di phm ESC ). Trong biu thc tnh ton cc ton t v ton hng cch nhau bng khong trng. Cc php ton v php so snh expr cho php | & > < >= <= != V d:
$ let "a = 1 + 1" $ echo $a 2 $ a=expr $a + 1 $ echo $a 3
hoc v ln hn nh hn
= + \*
lnh _1
&&
Cc lnh thc hin t tri sang phi cho n khi mt lnh c kt qu li. Kt qu cui cng ca dy lnh ny l ng (true) nu tt c cc lnh u ng, ngc li l sai. Php hoc (OR)
lnh _1 || lnh_2 || lnh_3
Cc lnh thc hin t tri sang phi cho n khi mt lnh c kt qu ng. Kt qu cui cng ca dy lnh ny l ng (true) nu c t nht mt lnh l ng, ngc li l sai.
test -d demo && echo "demo is a directory" test -d demo | | echo "demo is not a directory" (test -d demo && ls -l demo) | | echo "demo not ok"
Nu cu lnh command1 chy thnh cng th shell s chy lnh command2 v nu command1 khng chy thnh cng th command3 c chy. V d $ rm myf && echo "File is removed successfully" || echo "File is not removed" Nu file myf c xa thnh cng (gi tr tr v ca lnh l 0) th lnh "echo File is removed successfully" s c thc hin, nu khng th lnh "echo File is not removed" c chy. Khi lnh Khi chng ta cn thc thi nhiu lnh lin tip nhau, c th dng khi lnh. Khi lnh nm gia 2 du { }. Ly gi tr ca mt lnh. Khi vit chng trnh nhiu khi ly kt qu ca lnh ny lm i s hay gi tr x l ca lnh kia. Ta c th lm c iu ny bng cch s dng c php $(command). Khi dng $(command), kt qu ca vic thc hin lnh command c tr v.
- select Thi hnh mt hoc nhiu cu lnh da trn mt khong tu chn ca ngi dng.
Bash cung cp s thc hin c iu kin lnh no s dng cu lnh if, cu lnh if ca bash y chc nng nh ca C. C php ca n c khi qut nh sau: u tin, ta cn phi chc chn rng mnh hiu if kim tra trng thi thot ca cu lnh trong condition. Nu n l 0 (true), sau statements s c thi hnh, nhng nu n khc 0, th mnh else s c thi hnh v iu khin nhy ti dng u tin ca m fi. Cc mnh elif (tu chn) (c th nhiu tu ) s ch thi hnh khi iu kin if l false. Tng t, mnh else (tu chn) s ch thi hnh khi tt c else khng tha mn. Nhn chung, cc chng trnh Linux tr v 0 nu thnh cng hay hon ton bnh thng, v khc 0 nu ngc li, v th khng c hn ch no c. Ch : Khng phi tt c chng trnh u tun theo cng mt chun cho gi tr tr v, v th cn kim tra ti liu v cc chng trnh ta kim tra m thot vi iu kin if. V d chng trnh diff, tr v 0 nu khng c g khc nhau, 1 nu c s khc bit v 2 nu c vn no . Nu mt cu iu kin hot ng khng nh mong i th hy kim tra ti liu v m thot . Khng quan tm n cch m chng trnh xc nh m thot ca chng, bash ly 0 c ngha l true hoc bnh thng cn khc 0 l false. Nu ta cn c th kim tra mt m thot ca lnh, s dng ton t $? ngay sau khi chy lnh. $? tr v m thot ca lnh chy ngay lc . Phc tp hn, bash cho php ta phi hp cc m thot trong phn iu kin s dng cc ton t && v || c gi l ton t logic AND v OR. C php y cho ton t AND nh sau:
command1 && command2
112
Cu lnh command2 ch c chy khi v ch khi command1 tr v trng thi l s 0 (true). C php cho ton t OR th nh sau:
command1 || command2
Cu lnh command2 ch c chy khi v ch khi command1 tr li mt gi tr khc 0 (false). Ta c th kt hp li c 2 loi ton t li c mt biu thc nh sau:
command1 && comamnd2 || command3
Nu cu lnh command1 chy thnh cng th shell s chy lnh command2 v nu command1 khng chy thnh cng th command3 c chy. V d:$ rm myf && echo "File is removed successfully" || echo "File is not removed" Nu file myf c xa thnh cng (gi tr tr v ca lnh l 0) th lnh "echo File is removed successfully" s c thc hin, nu khng th lnh "echo File is not removed" c chy. Gi s trc khi ta vo trong mt khi m, ta phi thay i mt th mc v copy mt file. C mt cch thc hin iu ny l s dng cc ton t if lng nhau, nh l on m sau:
if then if then # more code here fi fi cp datafile datafile.bak cd /home/kwall/data
C hai on m u thc hin cng mt chc nng, nhng on th hai ngn hn nhiu, gn nh v n gin. Mc d if ch kim tra cc m thot, ta c th s dng cu trc [] lnh test kim tra cc iu kin phc tp hn. [condition] tr v gi tr biu th condition l true hay false. test cng c tc dng tng t. Mt v d khc v cch s dng cu trc if:
#!/bin/sh # Script to test if..elif...else
113
# if [ $1 -gt 0 ]; then echo "$1 is positive" elif [ $1 -lt 0 ] then echo "$1 is negative" elif [ $1 -eq 0 ] then echo "$1 is zero" else echo "Opps! $1 is not number, give number" fi
Ta c th kim tra cc thuc tnh file, so snh cc xu v cc biu thc s hc. Ch : Cc khong trng trc du m ngoc v sau du ng ngoc trong [condition] l cn phi c. y l iu kin cn thit trong c php shell ca bash. V d 1:
if test -f file1 then echo "file exists" else echo "file does not exist" fi
V d 3:
if test -f file1; then echo "file exists" elif test -d file1; then echo "file is a directory" fi
114
echo read if
Nhap vao diem diem test $diem -ge 8 ; then echo " Loai Gioi"
$diem ge
7 ; then
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
expr c em i so snh vi tng pattern, nu n bng nhau th cc lnh tng ng s c thi hnh. Du ;; l tng ng vi lnh break ca C, to ra iu khin nhy ti dng u tin ca m esac. Khng nh t kho switch ca C, lnh case ca bash cho php ta kim tra gi tr ca expr da vo pattern, n c th cha cc k t i din. Cch lm vic ca cu trc case nh sau: n s khp (match) biu thc expr vi cc mu pattern1, pattern2,nu c mt mu no khp th khi lnh tng ng vi mu s c thc thi, sau n thot ra khi lnh case. Nu tt c cc mu u khng khp v ta c s dng mu * (trong nhnh *)), ta thy y l mu c th khp vi bt k gi tr no (k t i din l *), nn cc lnh trong nhnh ny s c thc hin. Cu trc iu khin select (khng c trong cc phin bn bash nh hn 1.14) ch ring c trong Korn (K Shell) v cc shell bash (B Shell). Thm vo , n khng c s tng t nh trong cc ngn ng lp trnh quy c. select cho php ta d dng trong vic xy dng cc menu n gin v p ng cc chn la ca ngi dng. C php ca n nh sau:
select do statements that manipulate $value done value [in list]
116
if [ $dir ]; then cnt=$(ls Al $dir | wc -l) echo $cnt files in $dir else echo Dohhh! No such choice! fi # kt thc if echo e \nPress ENTER to continue, CTRL C to quit read clear done
Lnh u tin t k t IFS l : (k t phn cch), v th select c th phn tch hon chnh bin mi trng $PATH. Sau n thay i li nhc default khi select bng bin PS3. Sau khi xo sch mn hnh, n bc vo mt vng lp, a ra mt danh sch cc th mc nm trong $PATH v nhc ngi dng chn la nh l minh ho trong hnh di.
Nu ngi dng chn hp l, lnh ls c thc hin kt qu c gi cho lnh m t wc m s file trong th mc v hin th kt qu c bao nhiu file trong th mc . Do ls c th s dng m khng cn i s, script u tin cn chc chn l $dir khc null (nu n l null, ls s hot ng trn th mc hin hnh nu ngi dng chn 1 menu khng hp l). Nu ngi dng chn khng hp l, mt thng bo li s c hin th. Cu lnh read (c gii thiu sau) cho php ngi dng nh vo la chn ca mnh v nhn Enter lp li vng lp hay nhn Ctrl + C thot. Ch : Nh gii thiu, cc vng lp script khng kt thc nu ta khng nhn Ctrl+C. Tuy nhin ta c th s dng lnh break thot ra. Dng case khi chng ta s dng gi tr ca mt biu thc r cc nhnh khc nhau.
117
V d: Trong v d ny s to menu la chn v cho php ngi dng chn chc nng thc hin. Nu bin chn l 1 th lit k th mc hin hnh, 2 th cho bit ng dn th mc hin hnh, cc s khc l khng hp l.
clear echo echo " Menu " echo " 1. Lit k th mc hin hnh" echo " 2. Cho bit ng dn th mc hin hnh" read chon case $chon in 1 2 * esac ) ls -l ) pwd ;; ) echo "Khng hp l";; ;;
list l mt danh sch cc gi tr, v d nh l tn file. Gi tr l mt thnh vin danh sch n v statements l cc lnh s dng value. Mt c php khc ca lnh for c dng nh sau:
for (( expr1; expr2; expr3 )) do ..... ... repeat all statements between do and done until expr2 is TRUE done
118
Linux khng c tin ch i tn hay copy cc nhm ca file. Trong MS-DOS nu ta c 17 file c phn m rng a*.doc, ta c th s dng lnh COPY copy *.doc thnh file *.txt. Lnh DOS nh sau: C:\ cp doc\*.doc doc\*.txt s dng vng lp for ca bash b p nhng thiu st ny. on m di y c th c chuyn thnh chng trnh shell thc hin ng nh nhng g ta mun:
for docfile in doc/*.doc do cp $docfile ${docfile%.doc}.txt done
S dng mt trong cc ton t pattern-matching ca bash, on m ny lm vic copy cc file c phn m rng l *.doc bng cch thay th .doc cui ca tn file bng .txt. Mt v d khc v vng for n gin nh sau:
#!/bin/bash for i in 1 2 3 4 5 do echo "Welcome $i times" done
Ta cng c mt cu trc v for nh sau, chng trnh ny cng c cng chc nng nh chng trnh trn nhng ta ch n s khc bit v c php ca lnh for.
#!/bin/bash for (( i = 0 ; i <= 5; i++ )) do done ^D $ sh for2 Welcome 0 times Welcome 1 times Welcome 2 times Welcome 3 times Welcome 4 times Welcome 5 times echo "Welcome $i times"
119
Ta thu c kt qu nh sau:
7 * 1 = 7 7 * 2 = 14 ... .. 7 * 10 = 70
Cho php thc hin mt chui lnh nh nhau vi mi mt gi tr trong danh sch cho. S cc vng lp bng s cc gi tr trong danh sch. V d: Shell_script copy sao chp cc file trong danh sch i vo danh mc /users/user8 v i nhm thnh nhm student, i ngi s hu thnh user8.
$cat copy for i do if [-f $i]; then cp $i /users/user8 chgrp student /users/user8/$i
120
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
Cu trc while ca bash khc phc thiu st khng th t ng tng, gim con m cua vng lp for. V d, ta mun copy 150 bn ca mt file, th vng lp while l mt la chn gii quyt bi ton ny. Di y l chng trnh: 121
#!/bin/sh declare idx=1 while [ $idx != 150] do cp somefile idx=$idx+1 done somefile.$idx -i idx
Chng trnh ny gii thiu cch s dng tnh ton s nguyn ca bash. Cu lnh declare khi to mt bin, idx, nh ngha l mt s nguyn. Mi ln lp idx tng ln, n s c kim tra thot khi vng lp. Vng lp until tuy cng c kh nng ging while nhng khng c dng nhiu v rt kh vit v chy chm. Mt v d na v cch s dng vng lp while c minh ha trong chng trnh in bn nhn ca mt s:
#!/bin/sh #Script to test while statement if [ $# -eq 0 ] then echo "Error - Number missing form command line argument" echo "Syntax : $0 number" echo " Use to print multiplication table for given number" exit 1 fi n=$1 i=1 while [ $i -le 10 ] do echo "$n * $i = `expr $i \* $n`" i=`expr $i + 1` done
122
done
V d 2: Shell_script stock ghi cc dng k t vo t bn phm ln file lines cho ti khi ta g t END
$cat stock while true do echo Enter your line: read answer if test $answer = END ; then break else echo $answer >> lines fi done
Ch : break[n] cho php ra khi n mc ca cc vng lp lng. Lnh continue: cho php b qua cc lnh cn li, quay v u vng lp. 123
Kt qu l:
$1 = file1 $2 = file2
1.6 Hm
Cng nh cc ngn ng lp trnh khc, Shell cho php s dng hm. Hm l mt on chng trnh con nm trong script chnh. N c th c gi li nhiu ln trong script chnh. Hm chc nng ca bash l mt cch m rng cc tin ch sn c trong shell, n c cc im li sau: Thi hnh nhanh hn do cc hm shell lun thng trc trong b nh. Cho php vic lp trnh tr nn d dng hn v ta c th t chc chng trnh thnh cc module.
nh ngha hm:
tn-hm() { cc-lnh-ca-hm. }
Nu so snh vi C hay Pascal, hm ca bash khng c cht ch, n khng kim tra li v khng c phng thc tr v i s bng gi tr. Tuy nhin ging nh C v Pascal, cc bin 124
a phng c th khai bo cc b i vi hm, do trnh c s xung t vi bin ton cc. thc hin iu ny ta dng t kho local nh trong on m sau:
function { local local } myvar yourvar=1 foo
Trong v d v cc bin v tr trn ta cng thy c cch s dng hm trong bash. Cc hm shell gip m ca ta d hiu v d sa li. S dng cc hm v cc ch thch ta s rt nhiu cng sc khi ta phi tr li nng cp on m m ta vit t thi gian rt lu trc . V d1:
chao() { echo hello }
Gi hm v truyn tham s cho hm. gi hm thc hin ta s dng tn hm hoc c thm tham s i km (ch tn hm phi khc vi tn ca cc lnh unix tn ti). Shell thc hin cc lnh trong { } khi hm c gi.
tn-hm tn-hm thamso-1 thamso-2
S dng tham s trong hm cng nh trong script chnh. Hm c th truy xut tp hp bin ca shell hin hnh.
lietke() { /bin/ls -C }
Bin cc b
Mt bin c khai bo l cc b ( khai bo vi t kha local ) n ch c ngha trong phm vi khi lnh. Trong mt hm, bin cc b ch hot ng trong phm vi hm.
V d 2:
#!/bin/bash func (){ local loc_var=23 # Declared local. echo echo "\"loc_var\" in function = $loc_var" global_var=999 # Not declared local. echo "\"global_var\" in function = $global_var" }
125
func # Now, see if local 'a' exists outside function. echo echo "\"loc_var\" outside function = $loc_var" # "loc_var" outside function = # Nope, $loc_var not visible globally. echo "\"global_var\" outside function = $global_var" # "global_var" outside function = 999 # $global_var is visible globally. echo exit 0
Ch : Trc khi hm c gi, tt c cc bin c khai bo trong hm s b coi l n i vi nhng thao tc ln n ngoi phm vi hm, iu ny khng c ngha l cc bin l bin cc b. Xt v d 3 sau s r hn. V d 3:
#!/bin/bash func (){ global_var=37 } # END OF FUNCTION echo "global_var = $global_var" # global_var = # Function "func" has not yet been called, # so $global_var is not visible here. func echo "global_var = $global_var" # global_var = 37 # Has been set by function call. # Visible only within the function block #+ before the function has been called.
1.7 Mng
Khi nim mng trong ngn ng lp trnh Shell Script cng ging nh trong cc ngn ng lp trnh khc Pascal, C, C++, Java, php, asp Mng c khi to theo cu trc sau: declare a array_name. Trong lp trnh Shell ta cn ch l khng c khi nim c nh kch thc ca mng, truy xut cc thnh phn ca mng ta c th s dng nhng cch truy xut thng dng: x[0], x[1], x[2]
declare -a nums=(45 33 100 65) declare -ar names (array is readonly) names=( Tom Dick Harry) states=( ME [3]=CA CT )
126
x[0]=55 n[4]=100
ty chn r ch ra rng y l mng ch c. ly gi tr ca mt thnh phn ca mng ta s dng c php sau: ${arrayname[index]} V d:
$declare -a lop $lop=(abc defg ijklm pqwst) $echo ${#lop} $echo ${#lop[0]} $echo ${#lop[1]} $echo ${#lop[*]} $echo ${#lop[@]} # 3 # 3 # 4 # 4 # 4
$echo ${lop[*]} # abc defg ijklm pqwst $echo ${lop[@]} # abc defg ijklm pqwst
Copy mt mng:
array2=( "${array1[@]}" ) array2="${array1[@]}
127
{ # Swaps two members of the array. local temp=${Countries[$1]} # Temporary storage #+ for element getting swapped out. Countries[$1]=${Countries[$2]} Countries[$2]=$temp return } declare a Countries # Declare array, #+ optional here since it's initialized below. # Is it permissable to split an array variable over multiple lines #+ using an escape (\)? # Yes. Countries=(Netherlands Ukraine Zaire Turkey Russia Yemen Syria Brazil Argentina Nicaragua Japan Mexico Venezuela Greece England Israel Peru Canada Oman Denmark Wales France Kenya Xanadu Qatar Liechtenstein Hungary) # "Xanadu" is the mythical place where, according to Coleridge, #+ Kubla Khan did a pleasure dome decree. clear # Clear the screen to start with. echo "0: ${Countries[*]}" # List entire array at pass 0. number_of_elements=${#Countries[@]} let "comparisons = $number_of_elements 1" count=1 # Pass number. while [ "$comparisons" gt 0 ] # Beginning of outer loop do index=0 # Reset index to start of array after each pass. while [ "$index" lt "$comparisons" ] # Beginning of inner loop do if [ ${Countries[$index]} \> ${Countries[`expr $index + 1`]} ] # If out of order... # Recalling that \> is ASCII comparison operator #+ within single brackets. # if [[ ${Countries[$index]} > ${Countries[`expr $index + 1`]} ]] #+ also works. then exchange $index `expr $index + 1` # Swap. fi # end if let "index += 1" done # End of inner loop
128
let "comparisons = 1" #Since "heaviest" element bubbles to bottom, #+ we need do one less comparison each pass. echo echo "$count: ${Countries[@]}" # Print resultant array at end of each pass. echo let "count += 1" # Increment pass count. done # End of outer loop # All done. exit 0 ^D
129
#+ i.e., prevents a runaway stack. Data=${stack[$SP]} let "SP += 1" return } status_report(){ # Find out what's happening echo "-------------------------- echo "REPORT echo "Stack Pointer = $SP echo "Just popped \""$Data"\"off the stack echo "---------------------------- echo } # the main(). Now, for exect this function echo pop status_report echo push garbage pop status_report value1=23; value2=skidoo; value3=FINAL; pop status_report pop status_report pop status_report # 23 # Last-in, first-out! # skidoo # Garbage in, garbage out push $value1 push $value2 push $value3 # FINAL # See if you can pop anything off empty stack # Bump stack pointer.
# Notice how the stack pointer decrements with each push, #+ and increments with each pop. echo # ======================================================= # Exercises: # # 1) Modify the "push()" function to permit pushing # + multiple element on the stack with a single function call. # 2) Modify the "pop()" function to permit popping # + multiple element from the stack with a single function call.
130
# 3) Using this script as a jumpingoff point, # + write a stackbased 4function calculator. exit 0 ^D
131
do let "index = $row * $Rows + $column" echo n "${alpha[index]} " # alpha[$row][$column] let "column += 1" done let "row += 1" echo done # The simpler equivalent is # echo ${alpha[*]} | xargs n $Columns echo } filter () # Filter out negative array indices. { echo n " " # Provides the tilt. if [[ "$1" ge 0 && "$1" lt "$Rows" && "$2" ge 0 && "$2" lt "$Columns" ]] then let "index = $1 * $Rows + $2" # Now, print it rotated. echo n " ${alpha[index]}" # alpha[$row][$column] fi } rotate () # Rotate the array 45 degrees { # ("balance" it on its lower lefthand corner). local row local column for (( row = Rows; row > Rows; row )) # Step through the array backwards. do for (( column = 0; column < Columns; column++ )) do if [ "$row" ge 0 ] then let "t1 = $column $row" let "t2 = $column" else let "t1 = $column" let "t2 = $column + $row" fi
132
filter $t1 $t2 # Filter out negative array indices. done echo; echo done # Array rotation inspired by examples (pp. 143146) in # "Advanced C Programming on the IBM PC", by Herbert Mayer # (see bibliography). } ## load_alpha # Load the array. print_alpha # Print it out. rotate # Rotate it 45 degrees counterclockwise. ## # This is a rather contrived, not to mention kludgy simulation.
1.8 quy
Tt c cc shell_script u c tnh quy (recursivity). V d: shell_script dir_tree hin th cy th mc bt u t th mc l i ca n.
$cat dir_tree if test -d $1 then echo $1 is a directory for j in $1/* do $0 $j done #$0 tn shell_script chnh l dir_tree
133
fi $dir_tree /usr /usr is a directory /usr/adm is a directory /usr/adm/acct is a directory /usr/adm/acct/fiscal is a directory /usr/adm/acct/nite is a directory /usr/adm/sa is a directory /usr/bin is a directory
{text}
Infobox
M ngun chng trnh ( dia1)
$ cat > dia1 dialog --title "Linux Dialog Utility Infobox" --backtitle "Linux Shell Script Tutorial" --infobox "This is dialog box called infobox, which is used \
134
to
show
some
information
on
screen,
Thanks
to
Savio
Lam
and\
Stuart Herbert to give us this utility. Press any key. . . " 7 50 ; read
Yesno box
M ngun chng trnh (dia3) 135
$ cat > dia3 dialog --title "Alert : Delete File" --backtitle "Linux Shell Script \ Tutorial" --yesno "\nDo you want to delete\ '/usr/letters/jobapplication'file" 7 60 sel=$? case $sel in 0) echo "User select to delete file";; 1) echo "User select not to delete file";; 255) echo "Canceled by user by pressing [ESC] key";; esac
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.$$
136
Kt qu ca lnh ny vn nh th nhng n cho ta hiu thm v cch s dng nh hng u vo u ra. Ton t nh hng u ra, >, s ghi ln bt c file no ang tn ti. i khi iu ny l khng mong mun, v th bash cung cp ton t ni thm d liu, >>, cho php ni thm d liu vo cui file. Hay xem lnh thm b danh cdlpu vo cui ca file .bashrc ca ti:
$echo alias cdlpu=cd $HOME/kwall/projects/lpu >> $HOME/.bashrc
137
Label
C php ny ni ln rng command c cc input cho n khi n gp label. Di y l v d v cch s dng cu trc ny:
#!/bin/bash #################################### USER=anonymous PASS=kwall@xmission.com ftp open cd ls close END -i -n << END ftp.caldera.com /pub
Hin dng vn bn
Lnh echo hin ra dng vn bn c ghi ngay trong dng lnh c c php: echo [ty chn] [xu k t] vi cc ty chn nh sau: - n : hin xu k t v du nhc trn cng mt dng. - e : bt kh nng thng dch c cc k t iu khin. - E : tt kh nng thng dch c cc k t iu khin. - - help : hin h tr v thot. Mt s bn Linux khng h tr tham s ny. V d, dng lnh echo vi tham s -e
# echo -e th dng lnh echo \n
Lnh set
gn kt qu a ra t lnh shell ra cc bin t ng, ta dng lnh set. Dng lnh set: set `<lnh>` Sau lnh ny, kt qu thc hin lnh khng hin ra mn hnh m gn kt qu tng ng cho cc bin t ng. Mt cch t ng cc t trong kt qu thc hin lnh s gn tng ng cho cc bin t ng (t $1 tr i). Xem xt mt v d sau y (chng trnh thu2.arg) c ni dung:
#!/bin/sh # Hien thoi diem chay chuong trinh nay
138
set `date` echo "Thoi gian: $4 $5" echo "Thu: $1" echo "Ngay $3 thang $2 nam $6"
139
# Algo: # 1) START: set value of i to 5 (since we want to start from 5, # if you want to start from other value put that value) # 2) Start While Loop # 3) Chechk, Is value of i is zero, If yes goto step 5 else # # i=5 while test $i != 0 do echo "$i" i=`expr $i - 1` done continue with next step goto step 3 # 4) print i, decement i by 1 (i.e. i=i-1 to goto zero) and # 5) END
140
141
142
if [ $temp = $1 ] then echo Tim thay $1 tai dong $textline break fi index=$(($index + 1)) done done }<$2 exit 0
143
x=`expr 0 -$x ` fi if [ $y lt 0 ] then $y=`expr 0 -$y` while [ $x gt 0 ] do g=$x x=`expr $y % $x` y=$g done echo ucln l :$g
144
then echo "$n1 is Bigest number" elif [ $n2 -gt $n1 ] && [ $n2 -gt $n3 ] then echo "$n2 is Bigest number" elif [ $n3 -gt $n1 ] && [ $n3 -gt $n2 ] then echo "$n3 is Bigest number" elif [ $1 -eq $2 ] && [ $1 -eq $3 ] && [ $2 -eq $3 ] then echo "All the three numbers are equal" else echo "I can not figure out which number is biger" fi
145
Chng trnh tnh tng ca hai s thc a=5.66, b=8.67, c=a+b M ngun chng trnh tong.sh
a=5.66 b=8.67 c=`echo $a + $b | bc` # u ra ca php tnh tng s c bc tnh
146
147
# Function to start editor start_ed() { ced=$1 if which $ced > /dev/null ; then $ced echo "$ced, Press a key . . ." read else echo "Error: $ced is not installed or no such editor exist, Press a key . . ." read fi return } # Function to print help print_help_uu() { echo "Usage: $0 -c -d -m -v {editor name}"; echo "Where -c clear the screen"; echo " echo " echo " return } # Main procedure start here # Check for sufficent args if [ $# -eq 0 ] ; then print_help_uu exit 1 fi # Now parse command line arguments while getopts cdme: opt do case "$opt" in c) cls;; d) show_ls;; m) start_mc;; e) thised="$OPTARG"; start_ed $thised ;; \?) print_help_uu; exit 1;; -d show dir"; -m start midnight commander shell"; -e {editor}, start {editor} of your choice";
148
esac done
Vit Shell script in ra "Hello World" ( in Bold, Blink effect, and in different colors like red, brown)
M ngun chng trnh
#!/bin/bash # Linux Shell Scripting Tutorial 1.05r3, Summer-2002 # Written by Vivek G. Gite <vivek@nixcraft.com> # Latest version can be found at http://www.nixcraft.com/ # echo command with escape sequance to give differnt effects # Syntax: echo -e "escape-code your message, var1, var2 etc" # For eg. echo -e "\033[1m # # # # clear echo -e "\033[1m Hello World" echo -e "\033[5m Blink" echo -e "\033[0m Hello World" echo -e "\033[31m Hello World" echo -e "\033[32m Hello World" echo -e "\033[33m Hello World" echo -e "\033[34m Hello World" echo -e "\033[35m Hello World" # bold effect # blink effect # back to noraml # Red color # Green color # See remaing on screen | | Escape code Hello World" | | Message
149
echo -e "\033[36m Hello World" echo -e -n "\033[0m " echo -e "\033[41m Hello World" echo -e "\033[42m Hello World" echo -e "\033[43m Hello World" echo -e "\033[44m Hello World" echo -e "\033[45m Hello World" echo -e "\033[46m Hello World" echo -e "\033[0m Hello World" # back to noraml # back to noraml
#!/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.$$
151
fi if [ -f /etc/shells ] then echo -e "Available Shells: " >> /tmp/info.tmp.01.$$$ echo -e "`cat /etc/shells`" fi if [ -f /etc/sysconfig/mouse ] then echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer Mouse Information: " >> /tmp/info.tmp.01.$$$ echo -e "------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "`cat /etc/sysconfig/mouse`" >> /tmp/info.tmp.01.$$$ fi echo -e "--------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer CPU Information:" >> /tmp/info.tmp.01.$$$ echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/cpuinfo >> /tmp/info.tmp.01.$$$ echo -e "-----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Computer Memory Information:" >> /tmp/info.tmp.01.$$$ echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/meminfo >> /tmp/info.tmp.01.$$$ if [ -d /proc/ide/hda ] then
echo -e "----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Hard disk information:" >> /tmp/info.tmp.01.$$$ echo -e "-----------------------------" >> /tmp/info.tmp.01.$$$ echo -e "Model: `cat /proc/ide/hda/model` " >> /tmp/info.tmp.01.$$$ echo -e "Driver: `cat /proc/ide/hda/driver` " >> /tmp/info.tmp.01.$$$ echo -e "Cache size: `cat /proc/ide/hda/cache` " >> /tmp/info.tmp.01.$$$
>> /tmp/info.tmp.01.$$$
fi echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ echo -e "File System (Mount):" >> /tmp/info.tmp.01.$$$ echo -e "-------------------------------" >> /tmp/info.tmp.01.$$$ cat /proc/mounts >> /tmp/info.tmp.01.$$$ if which dialog > /dev/null then
dialog Ver.1.0" --backtitle --title "Linux "Press Software Up/Down Diagnostics Keys to (LSD) Shell Script move" --textbox
/tmp/info.tmp.01.$$$ 21 70
152
fi rm -f /tmp/info.tmp.01.$$$
H iu hnh Unix lun km theo b dch ngn ng lp trnh C vi tn gi l cc (C compiler). Trong Linux, b dch c tn l gcc (GNU C Compiler) vi ngn ng lp trnh khng khc nhiu vi C chun. Ni dung chi tit v cc ngn ng lp trnh c trn Linux thuc phm vi ca cc ti liu khc. gcc cho ngi lp trnh kim tra trnh bin dch. Qu trnh bin dch bao gm bn giai on:
Tin x l. Bin dch. Tp hp. Lin kt.
Ta c th dng qu trnh sau mt trong nhng giai on kim tra kt qu bin dch ti giai on y. gcc cng c th chp nhn ngn ng khc ca C, nh ANSI C hay C truyn thng. Nh ni trn, gcc thch hp bin dch C++ hay Objective-C. Ta c th kim sot lng cng nh kiu thng tin cn debug, tt nhin l c th nhng trong qu trnh nh phn ha kt qu v ging nh hu ht cc trnh bin dch, gcc cng thc hin ti u ha m. Trc khi bt u i su vo nghin cu gcc, ta xem mt v d sau:
#include<stdio.h> int main (void) { fprintf( stdout, Hello, Linux programming world!\n); return } 0;
Dng lnh u tin ch cho gcc phi bin dch v lin kt file ngun hello.c, to ra tp tin thc thi, bng cch ch nh s dng i s -o hello. Dng lnh th hai thc hin chng trnh, v kt qu cho ra trn dng th 3. C nhiu ch m ta khng nhn thy c, gcc trc khi chy hello.c thng qua b tin x l ca cpp, m rng bt k mt macro no v chn thm vo ni dung ca nhng file #include. Tip n, n bin dch m ngun tin x l sang m obj . Cui cng, trnh lin kt, to ra m nh phn cho chng trnh hello. Ta c th to li tng bc ny bng tay, chia thnh tng bc qua tin trnh bin dch. ch cho gcc bit phi dng vic bin dch sau khi tin x l, ta s dng tu chn E ca gcc: 154
gcc
hello.c
hello.cpp
Xem xt hello.cpp v ta c th thy ni dung ca stdio.h c chn vo file, cng vi nhng m thng bo tin x l khc. Bc tip theo l bin dch hello.cpp sang m obj. S dng tu chn c ca gcc hon thnh:
$ gcc x cpp-output -c hello.cpp o hello.o
Trong trng hp ny, ta khng cn ch nh tn ca file output bi v trnh bin dch to mt tn file obj bng cch thay th .c bi .o. Tu chn x ch cho gcc bit bt u bin dch bc c ch bo trong trng hp ny vi m ngun tin x l. Lm th no gcc bit chia loi c bit ca file? N da vo ui m rng ca file trn xc nh r phi x l file nh th no cho dng. Hu ht nhng ui m rng thng thng v ch thch ca chng c lit k trong bng di. Phn m rng .c .c, .cpp .i .ii .S, .s .o .a, .so Kiu M ngun ngn ng C M ngun ngn ng C++ M ngun C tin x l M ngun C++ tin x l M ngun Hp ng M i tng bin dch (obj) M th vin bin dch
Cc phn m rng ca tn file i vi gcc. Lin kt file i tng, v cui cng to ra m nh phn:
$ gcc hello.o o hello
Trong trng hp , ta ch mun to ra cc file obj, v nh vy th bc lin kt l khng cn thit. Hu ht cc chng trnh C cha nhiu file ngun th mi file ngun u phi c bin dch sang m obj trc khi ti bc lin kt cui cng. Gi s c mt v d, ta ang lm vic trn killerapp.c l chng trnh s dng phn m ca helper.c, nh vy bin dch killerapp.c ta phi dng dng lnh sau:
$ gcc killerapp.c helper.c o killerapp
gcc qua ln lt cc bc tin x l - bin dch lin kt, lc ny to ra cc file obj cho mi file ngun trc khi to ra m nh phn cho killerapp. Mt s tu chn dng lnh ca gcc: 155
o FILE Ch nh tn file output; khng cn thit khi bin dch sang m obj. Nu FILE
khng c ch r th tn mc nh s l a.out.
c Bin dch khng lin kt. DF00=BAR nh ngha macro tin x l t tn F00 vi mt gi tr ca BAR trn dng
lnh.
IDIRNAME Trc khi cha quyt nh c DIRNAME hy tm kim nhng file
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
mi c th hiu c
O Ti u ho m bin dch ON Ch nh mt mc ti u ho m N, 0<=N<=3. ANSI H tr chun ANSI/ISO ca C, loi b nhng m rng ca GNU m xung t vi
pedantic-erors Thng bo ra tt c cc li quy nh bi chun ANSI/ISO ca C. traditional H tr cho c php ngn ng C ca Kernighan v Ritchie (ging nh c php
156
$ sh thu
Khi c gi, GNU make s tm cc file c tn l GNUmakefile, makefile hay Makefile. Cc lut s c c php nh sau:
target: dependency1, dependency2, . command command
Target thng l mt file nh file kh thi hay file object ta mun to ra. Dependency l mt danh sch cc file cn thit nh l u vo to ra target. Command l cc bc cn thit (chng hn nh gi chng trnh dch) to ra target. Di y l mt v d v mt makefile v to ra mt chng trnh kh thi c tn l editor (s hiu dng ch a vo tin theo di, cn ni dung ca makefile khng cha s hiu dng). Chng trnh ny c to ra bi mt s cc file ngun: editor.c, editor.h, keyboard.h, screen.h, screen.c, keyboard.c.
1. editor : editor.o screen.o keyboard.o 2. gcc -o 4. gcc -c 6. gcc -c editor.o screen.o keyboard.o editor.c screen.c 3. editor.o : editor.c editor.h keyboard.h screen.h 5. screen.o : screen.c screen.h 7. keyboard.o : keyboard.c keyboard.h
157
keyboard.c
bin dch chng trnh ny ta ch cn ra lnh make trong th mc cha file ny. Trong makefile ny cha tt c 5 lut, lut u tin c ch l editor c gi l ch ngm nh. y chnh l file m make s phi to ra, editor c 3 dependencies editor.o, screen.o, keyboard.o. Tt c cc file ny phi tn ti th mi to ra c ch trn. Dng th 2 l lnh m make s gi thc hin to ra ch trn. Cc dng tip theo l cc ch v cc lnh tng ng to ra cc file i tng (object).
Hm open()
Li gi open() s dng m mt file. Khun mu ca hm v gii thch tham s v c ca n c cho di y:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);
i s pathname l mt xu ch ra ng dn n file s c m. Thng s th ba xc nh ch ca file Unix (cc bit c php) c s dng khi to mt file v nn c s
158
dng khi to mt file. Tham s flags nhn mt trong cc gi tr O_RDONLY, O_WRONLY hoc O_RDWR C O_RDONLY O_WRONLY O_RDWR O_CREAT O_EXCL O_NOCTTY O_TRUNC O_APPEND O_NONBLOCK O_NODELAY O_SYNC M file c M file ghi M file c v ghi To file nu cha tn ti file Tht bi nu file c Khng iu khin tty nu tty m v tin trnh khng iu khin tty Ct file nu n tn ti Ni thm v con tr t cui file Nu mt qu trnh khng th hon thnh m khng c tr, tr v trng thi trc Tng t O_NONBLOCK Thao tc s khng tr v cho n khi d liu c ghi vo a hoc thit b khc open() tr v mt m t file nu khng c li xy ra. Khi c li , n tr v gi tr -1 v t gi tr cho bin errno. Hm create() cng tng t nh open() vi cc c O_CREATE | O_WRONLY | O_TRUNC Ch gii
Hm close()
Chng ta nn ng nhn file khi thao tc xong vi n. Ch c mt i s l s m t file m li gi open() tr v. Dng ca li gi close() l:
#include <unistd.h> int close(int fd);
Tt c cc kho (lock) do tin trnh x l trn file c gii phng, cho d chng c t m t file khc. Nu qu trnh ng file lm cho b m lin kt bng 0 th file s b xo. Nu y l m t file cui cng lin kt n mt file c m th bn ghi bng file m c gii phng. Nu khng phi l mt file bnh thng th cc hiu ng khng mong mun c th xy ra.
Hm read()
Li gi h thng read() s dng c d liu t file tng ng vi mt m t file.
#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);
159
i s u tin l m t file m c tr v t li gi open() trc . i s th hai l mt con tr ti b m sao chp d liu v i s th ba l s byte s c c. read() tr v s byte c c hoc -1 nu c li xy ra.
Hm write()
Li gi h thng write() s dng ghi d liu vo file tng ng vi mt m t file.
#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count);
i s u tin l s m t file c tr v t li gi open() trc . i s th hai l con tr ti b m ( sao chp d liu, c dung lng ln cha d liu) v i s th ba xc nh s byte s c ghi. write() tr v s byte c hoc -1 nu c li xy ra.
Hm ftruncate()
Li gi h thng ftruncate() ct file tham chiu bi m t file fd vi di c xc nh bi tham s length.
#include <unistd.h> int ftruncate(int fd, size_t length);
Hm lseek()
Hm lseek() t v tr c v ghi hin ti trong file c tham chiu bi m t file files ti v tr offset:
#include <sys/types.h> #include <unistd.h> off_t lseek(int fildes, off_t offset, int whence);
Ph thuc vo gi tr ca whence, gi tr ca offset l v tr bt u (SEEK_SET), v tr hin ti (SEEK_CUR), hoc cui file (SEEK_END). Gi tr tr v l kt qu ca offset: bt u file, hoc mt gi tr ca off_t , gi tr -1 nu c li.
Hm fstat()
Hm fstat() a ra thng tin v file thng qua vic nhn cc file, ni kt qu ca struct stat c ch ra con tr ch n buf(). Kt qu tr v gi tr 0 nu thnh cng v nhn gi tr -1 nu sai ( kim tra li).
#include <sys/stat.h> #include <unistd.h> int fstat(int filedes, struct stat *buf);
160
dev_t int_t mode_t nlink_t uid_t gid_t dev_t off_t unsigned long unsigned long time_t time_t time_t };
/ * 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_blocks; /* S lng cc khi s dng*/ /* thi gian truy cp cui cng*/ /* thi gian cp nht cui cng */ /* thi gian thay i cui cng */
Hm fchown()
Li gi h thng fchown() cho php ta thay i ngi ch v nhm ngi ch kt hp vi vic m file.
#include <sys/types.h> #include <unistd.h> int fchown(int fd, uid_t owner, gid_t group);
Tham s u tin l nhn file, tham s th hai l s nh danh ca ngi ch, v tham s th ba l s nh danh ca nhm ngi ch. Ngi dng hoc nhm ngi dng s c php s dng khi gi tr -1 thay i. Gi tr tr v l 0 nu thnh cng v 1 nu gp li (kim tra bin errno). Thng thng ngi dng c th thay i nhm cc file thuc v h. Ch root mi c quyn thay i ngi ch s hu ca nhiu nhm.
Hm fchdir( )
Li gi hm fchdir() thay i th mc bng cch m file c nhn bi bin fd. Gi tr tr v l 0 nu thnh cng v 1 nu c li (kim tra bin errno).
#include <unistd.h> int fchdir(int fd);
161
#include <unistd.h> #include <assert.h> #include <errno.h> #include <string.h> #include <stdio.h> /*for print */ char sample1[] = "This is sample data 1\n"; char sample2[] = "This is sample data 2\n"; char data[16]; main() { int fd; int rc; struct stat statbuf; printf("Creating file\n"); fd = open("junk.out", O_WRONLY | O_CREAT| O_TRUNC, 0666); assert(fd>=0); rc = write(fd, sample1, strlen(sample1) ); assert(fd>=0); rc = write(fd, sample1, strlen(sample1)); assert(rc == strlen(sample1)); close(fd); printf("Appending to file\n"); fd = open("junk.out", O_WRONLY| O_APPEND); assert(fd>=0); printf("locking file\n"); rc = flock(fd, LOCK_EX); assert(rc == 0); printf("sleeping for 10 seconds\n"); sleep(10); printf("writing data\n"); rc = write(fd, sample2, strlen(sample2)); assert(rc == strlen(sample2)); printf("unlocking file\n"); rc = flock(fd, LOCK_UN); assert(rc == 0); close(fd); printf("Reading file \n"); fd = open("junk.out", O_RDONLY); assert(fd >=0); while (1)
162
{ rc = read(fd, data, sizeof (data)); if(rc > 0) { data[rc]=0; printf(" Data read(rc = %d): <%s>\n", rc, data); } else if(rc == 0) { printf(" End of file read \n"); break; } else { perror("read error"); break; } } close(fd); printf(" Fiddling with inode\n"); fd = open (" junk.out", O_RDONLY); assert (fd >= 0); printf (" changing file mode\n"); rc = fchmod ( fd, 0600); assert(rc == 0); if(getuid () == 0 ) { printf("changing file owner \n "); rc = fchown(fd, 99, 99); assert(rc == 0); } else { printf("not changing file owner\n"); } fstat(fd, &statbuf); printf(" file mode = o% (octal) \n", statbuf.st_mode); printf("Owner uid = %d \n", statbuf.st_uid); printf(" Owner gid = %d \n", statbuf.st_uid); close(fd); }
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.
#include <stdarg.h> /* in ra mt thng bo li ti vic gi stderr v return hm gi */ void err_quit(const char *fmt, ); /* in ra mt thng ip li cho logfile v tr v hm gi */ void log_ret(char *logfile, const char *fmt, ); /* in ra mt thng ip li cho logfile v thot */ void log_quit( char *logfile, const char /* in ra mt thng *fmt , ); bo li v tr li hm gi */
void err_prn(const char *fmt, va_list ap, char *logfile); #endif //_LIBERR_H /* M ngun file liberr.c*/ #include <errno.h> #include <stdarg.h>
164
#include <stdlib.h> #include <stdio.h> #include "liberr.h" #define MAXLINELEN 500 void err_ret(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); return; } void err_quit(const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap, NULL); va_end(ap); exit(1); } void log_ret(char *logfile, const char *fmt, ...) { va_list ap; va_start(ap, fmt); err_prn(fmt,ap, logfile); va_end(ap); return; } void log_quit(char *logfile, const char *fmt,... ) { va_list ap; va_start(ap, fmt); err_prn(fmt, ap,logfile); va_end(ap); exit(1); } extern void err_prn( const char *fmt, va_list ap, char *logfile) { int save_err; char buf[MAXLINELEN];
165
FILE *plf; save_err = errno; vsprintf(buf,fmt, ap); sprintf( buf+strlen(buf), strcat(buf, "\n"); fflush(stdout); if(logfile !=NULL){ if((plf=fopen(logfile, "a") ) != NULL){ fputs(buf, plf); fclose(plf); }else fputs("failed to open log file \n", stderr); }else fputs(buf, stderr); fflush(NULL); return; } ": %s", strerror(save_err));
tip theo:
$ar rcs liberr.a liberr.o
/* M ngun file testerr.c*/ #include <stdio.h> #include <stdlib.h> #include "liberr.h" #define ERR_QUIT_SKIP 1 #define LOG_QUIT_SKIP 1 int main(void) { FILE *pf; fputs("Testing err_ret()...\n", stdout); if((pf = fopen("foo", "r")) == NULL) err_ret("%s %s", "err_ret()", "failed to open foo"); fputs("Testing log_ret()...\n", stdout); if((pf = fopen("foo", "r")) == NULL); log_ret("errtest.log", "%s %s", "log_ret()", "failed to open foo"); #ifndef ERR_QUIT_SKIP fputs("Testing err_quit()...\n", stdout);
166
if((pf = fopen("foo", "r")) == NULL) err_ret("%s %s", "err_quit()", "failed to open foo"); #endif /* ERR_QUIT_SKIP */ #ifndef LOG_QUIT_SKIP fputs("Testing log_quit()...\n", stdout); if((pf = fopen("foo", "r")) == NULL) log_ret("errtest.log", foo"); #endif /* LOG_QUIT_SKIP */ return EXIT_SUCCESS; } "%s %s", "log_quit()", "failed to open
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.
167
Cc chng trnh ng dng lin kt da vo soname. Tin ch idconfig to mt biu tng lin kt t th vin chun libc.so.5.4.46 ti soname libc.5 v lu tr thng tin ny trong /etc/ld.so.cache. Trong lc chy, ld.so c phn lu tr, tm soname thch hp v np th vin hin tai vo b nh, kt ni hm ng dng gi ti i tng thch hp trong th vin. Cc phin bn th vin khc nhau nu:
Cc giao din hm u ra thay i. Cc giao din hm mi c thm. Chc nng hot ng thay i so vi c t ban u Cu trc d liu u ra thay i Cu trc d liu u ra c thm
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
V khng th ci t th vin ny nh th vin h thng trong /usr hay /usr/lib chng ta cn to 2 kin kt, mt cho soname: V cho trnh lin kt khi kt ni da vo liberr, s dng lerr:
$ ln -s liberr.so.1.0.0 liberr.so
168
By gi, d dng th vin dng chung mi chng ta quay li chng trnh kim tra, chng ta cn hng trnh lin kt ti th vin no s dng v tm n u, v vy chng ta s s dng tu chn l v L:
$ gcc -g errtest.c -o errtest -L. -lerr
Cui cng chy chong trnh, chng ta cn ch cho ld.so ni tm th vin dng chung :
$ LD_LIBRARY_PATH=$(pwd) ./errtest
dlopen() truy cp i tng chia s bng filename v bng c. Filename c th l ng dn y , tn file rt gn hay NULL. Nu l NULL dlopen() m chng trnh ang chy, l 169
chng trnh ca bn, nu filename l ng dn dlopen() m file , nu l tn rt gn dlopen() s tm trong v tr sau tm file:
$LD_ELF_LiBRARY_PATH, $LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, v /lib.
C c th l RTLD_LAZY, c ngha l cc k hiu (symbol) hay tn hm t i tng truy cp s c tm mi khi chng c gi, hoc c c th l RTLD_NOW, c ngha tt c k hiu t i tng truy cp s c tm trc khi hm dlopen() tr v. dlopen() tr iu khin ti i tng truy nhp nu n tm thy t filename hay tr v gi tr NULL nu khng tm thy. S dng i tng chia s Trc khi c th s dng m ngun trong th vin ta phi bit ang tm ci g v tm u. Hm dlsym() s gip iu :
void *dlsym(void *handle, char *symbol);
dlsym() tm k hiu hay tn hm trong truy cp v tr li con tr kiu void ti i tng hay NULL nu khng thnh cng. Kim tra li Hm dlerror() s gip ta kim tra li khi s dng i tng truy cp ng: const char *dlerror(void); Nu mt trong cc hm li, dlerror() tr v thng bo chi tit li v gn gi tr NULL cho phn b li. Gii phng i tng chia s bo v ti nguyn h thng c bit b nh, khi ta s dng xong module trong mt i tng chia s, th gii phng chng. Hm dlclose() s ng i tng chia s: int dlclose(void *handle); S dng giao din dl minh ho cch s dng dl,chng ta quay li th vin x l li, s dng mt chng trnh khc nh sau:
/* * M ngun chng trnh dltest.c * Dynamically load liberr.so and call err_ret() */ #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> int main(void) {
170
void *handle; void (*errfcn)(); const char *errmsg; FILE *pf; handle = dlopen("liberr.so", RTLD_NOW); if(handle == NULL) { fprintf(stderr, "Failed to load liberr.so: %s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); errfcn = dlsym(handle, "err_ret"); if((errmsg = dlerror()) != NULL) { fprintf(stderr, "Didn't find err_ret(): %s\n", errmsg); exit(EXIT_FAILURE); } if((pf = fopen("foobar", "r")) == NULL) errfcn("couldn't open foobar"); dlclose(handle); return EXIT_SUCCESS; }
Nh tac th thy, chng ta khng lin kt da vo liberr hay liberr.h trong m ngun. Tt c truy cp ti liberr.so thng qua dl. Chy chng trnh bng cch sau:
$ LD_LIBRARY_PATH=$(pwd) ./dltest
Khi s dng cc file lu tr (phn m rng l .a), in ra cc ch s ca module cha hm . Ch a ra cc hm khng c nh ngha trong file ny, tc l cc hm c nh ngha mt file khc. S dng thng tin g ri in ra s dng ni hm c nh ngha.
V d: xem cc hm c m ha trong file nh phn a.out (file nh phn sau khi dch filedes_io.c)
bt Desktop # nm a.out 08049da4 d _DYNAMIC 08049e70 d_GLOBAL_OFFSET_TABLE_ 08048be4 R _IO_stdin_used w _Jv_RegisterClasses 08049d94 d __CTOR_END__ 08049d90 d __CTOR_LIST__ 08049d9c d __DTOR_END__ 08049d98 d __DTOR_LIST__ 08048d8c r __FRAME_END__ 08049da0 d __JCR_END__ 08049da0 d __JCR_LIST__ 08048be8 r __PRETTY_FUNCTION__.2764 U__assert_fail@@GLIBC_2.0 08049ef8 A __bss_start 08049ebc D __data_start 08048b90 t __do_global_ctors_aux 080485f0 t __do_global_dtors_aux 08049ec0 D __dso_handle 08048b50 T __fstat U __fxstat@@GLIBC_2.0 w __gmon_start__ 08048b47 T __i686.get_pc_thunk.bx 08049d90 d __init_array_end 08049d90 d __init_array_start 08048ad0 T __libc_csu_fini 08048ae0 T __libc_csu_init U__libc_start_main@@GLIBC_2.0 08049ef8 A _edata 08049f0c A _end 08048bc4 T _fini 08048be0 R _fp_hw 08048470 T _init 080485a0 T _start 080485c4 t call_gmon_start U close@@GLIBC_2.0 08049ef8 b completed.5745 08049efc B data 08049ebc W data_start U fchmod@@GLIBC_2.0 U fchown@@GLIBC_2.0 U flock@@GLIBC_2.0 08048620 t frame_dummy 08048b50 W fstat U getuid@@GLIBC_2.0 08048644 T main U open@@GLIBC_2.0 08049ec4 d p.5743 U perror@@GLIBC_2.0 U printf@@GLIBC_2.0 U puts@@GLIBC_2.0 U read@@GLIBC_2.0 08049ec8 D sample1 08049edf D sample2 U sleep@@GLIBC_2.0 U write@@GLIBC_2.0
Cng c ar
Lnh ar s dng c php sau: ar {dmpqrtx} [thnh vin] file 172
Lnh ar to, chnh sa v trch cc file lu tr. N thng c s dng to cc th vin tnh- nhng file m cha mt hoc nhiu file i tng cha cc chng trnh con thng c s dng (subrountine) nh dng tin bin dch (precompiled format), lnh ar cng to v duy tr mt bng m tham chiu qua tn k t ti cc thnh vin m trong chng c nh ngha.
bt Desktop # ar a.out ar: illegal option -- . Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [membername] [count] archive-file file... ar -M [<mri-script] commands: d m[ab] p q[f] archive t x[o] modifiers: [a] - put file(s) after [member-name] [b] - put file(s) before [member-name] (same as [i]) [N] - use instance [count] of name [f] - truncate inserted file names [P] - use full path names when matching [o] - preserve original dates [u] -only replace files that are newer than current archive contents eneric modifiers: [c] - do not warn if the library had to be created [s] - create an archive index (cf. ranlib) [S] - do not build a symbol table [v] - be verbose [V] - display the version number @<file> - read options from <file> emulation options: No emulation specific options ar: supported targets: elf64-little elf32-i386 elf64-big a.out-i386-linux elf32-little efi-app-ia32 srec elf64-x86-64 elf32-big - display contents of archive extract file(s) from the archive command specific - delete file(s) from the archive - move file(s) in the archive - print file(s) found in the archive - quick append file(s) to the archive
173
174
Hnh 5.1Cu trc ca mt tin trnh trong Unix C 3 loi tin trnh chnh trn Linux : Tin trnh vi i thoi (Interactive processes): l tin trnh khi ng v qun l bi shell, k c tin trnh forthground hoc background. Tin trnh batch (Batch processes): Tin trnh khng gn lin n bn iu khin (terminal) v c nm trong hng i ln lt thc hin.
175
Tin trnh n trn b nh (Daemon processes): L cc tin trnh chy di nn (background). Cc tin trnh ny thng c khi ng t u. a s cc chng trnh server cho cc dch v chy theo phng thc ny. y l cc chng trnh sau khi c gi ln b nh, i th ng cc yu cu chng trnh khch (client) tr li sau cc cng xc nh (cng l khi nim gn lin vi giao thc TCP/IP BSD socket. Chng ta s gii thch r trong phn TCP/IP). Hu ht cc dch v trn Internet nh mail, Web, Domain Name Service chy theo nguyn tc ny. Cc chng trnh c gi l cc chng trnh daemon v tn ca n thng kt thc bng k t d nh named, inetd K t d cui c pht m ri ra nh trong ting vit. V d named c pht m l nm . Tin trnh c th tri qua nhiu trng thi khc nhau v ti mt thi im mt tin trnh
ri vo mt trong cc trng thi . Bng di y gii thiu cc trng thi c bn ca tin trnh trong Linux.
K hiu D R S bng mt tn hiu. (runnable) trng thi sn sng thc hin, tc l tin trnh c th thc hin c nhng ch n lt thc hin v mt tin trnh khc ang c CPU. (sleeping) trng thi tm dng, tc l tin trnh tm dng khng hot ng (20 giy hoc t hn) T Z W < N L (traced or stopped) trng thi dng, tin trnh c th b treo bi mt tin trnh ngoi (zombie process) tin trnh kt thc thc hin, nhng n vn c tham chiu trong h thng khng c cc trang thng tr tin trnh c mc u tin cao hn tin trnh c mc u tin thp hn c cc trang kha bn trong b nh ngha (uninterruptible sleep) trng thi ny tin trnh b treo v khng th chy li n
S biu din cc trng thi v vic chuyn trng thi trong UNIX c trnh by trong hnh di y (S hiu trng thi qu trnh xem trong hnh v).
176
Ch i b nh ngoi (6)
Hnh 5.2 S trng thi cc tin trnh Khi qu trnh c pht sinh n trng thi (8), ty thuc vo tnh trng b nh qu trnh c phn phi b nh trong (3) hay b nh ngoi (5). Trng thi (3) th hin qu trnh sn sng thc hin, cc thnh phn ca n b nh trong ch i CPU thc hin. Vic thc hin tip theo ty thuc vo trng thi trc ca n. Nu ln u pht sinh, n cn i ti thc hin mc nhn hon thin cng vic li gi fork s t trng thi (3) sang trng thi (1), trong trng hp khc, t trng thi (3) n i ti trng thi ch di CPU mc ngi dng (7). Trong trng thi thc hin mc ngi dng (1), qu trnh i ti trng thi (2) khi gp li gi h thng hoc hin tng ngt xy ra. T trng thi (1) ti trng thi (7) khi ht lng t thi gian. Trng thi (4) l trng thi ch i trong b nh cn trng thi (6) th hin vic ch i trong b nh ngoi. Cung chuyn t trng thi (2) vo ngay trng thi (2) xy ra khi qu trnh trng thi thc hin mc nhn, nhn h thng gi cc hm x l ngt tng ng.
Cch phc tp hn l s dng lnh ps. Lnh ny cho bit thng tin y nht v cc qu trnh ang chy trn h thng. V d:
# ps PID TTY TIME CMD 00:00:00 bash 00:00:00 ps 7813 pts/0 7908 pts/0 #
(PID - ch s ca tin trnh, TTY - tn thit b u cui trn tin trnh c thc hin, TIME - thi gian chy tin trnh, CMD - lnh khi to tin trnh). C php lnh ps: ps [ty-chn] Lnh ps c mt lng qu phong ph cc ty chn c chia ra lm nhiu loi. Di y l mt s cc ty chn hay dng. Cc ty chn n gin:
A, -e : chn hin th tt c cc tin trnh. T : chn hin th cc tin trnh trn trm cui ang chy. a : chn hin th tt c cc tin trnh trn mt trm cui, bao gm c cc tin trnh
ch s tin trnh, PPID - ch s tin trnh khi to ra tin trnh, C - , STIME - thi gian khi to tin trnh, TTY - tn thit b u cui trn tin trnh c chy, TIME thi gian thc hin tin trnh, CMD - lnh khi to tin trnh
178
V d: mun xem cc thng tin nh tn ngi dng, tn nhm, ch s tin trnh, ch s tin trnh khi to ra tin trnh, tn thit b u cui, thi gian chy tin trnh, lnh khi to tin trnh, hy g lnh:
# ps -o '%U %G %p %P %y %x %c' USER GROUP PID PPID TTY TIME COMMAND root root 1929 1927 pts/1 00:00:00 bash root root 2279 1929 pts/1 00:00:00 ps
Nu mun xem ngi dng X no ang s dng nhng tin trnh no ta c th s dng lnh sau: ps -u X
mt s tn hiu hay dng: S 1 Tn SIGHUP ngha (hang up) y l tn hiu c gi n tt c cc tin trnh ang chy trc khi logout khi h thng 179
2 9 15
SIGINT SIGKILL
(interrupt) y l tn hiu c gi khi nhn CTRL+c (kill) tn hiu ny s dng tin trnh ngay lp tc php chng trnh xa cc file tm.
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
Cc ty chn:
-help
180
thnh
init ---4*[getty]
c th
h hin th tin trnh hin thi v "t tin" ca n vi mu sng trng H ging nh ty chn -h, nhng tin trnh con ca tin trnh hin thi khng c mu
sng trng
l hin th dng di. n sp xp cc tin trnh cng mt t tin theo ch s tin trnh thay cho sp xp theo
tn V d:
# pstree init-+-apmd |-atd |-automount |-crond |-enlightenment |-gdm-+-X | `-gdm---gnome-session |-gen_util_applet |-gmc
181
Lnh renice thay i u tin ca mt tin trnh ang chy, hy s dng lnh renice. C php lnh: renice <-u-tin> [ty-chn] Lnh renice s thay i mc u tin ca mt hoc nhiu tin trnh ang chy.
g : thay i quyn u tin theo nhm ngi dng p : thay i quyn u tin theo ch s ca tin trnh u : thay i quyn u tin theo tn ngi dng
V d:
# renice +1 987 -u daemon root -p 32
lnh trn s thay i mc u tin ca tin trnh c ch s l 987 v 32, v tt c cc tin trnh do ngi dng daemon v root s hu.
thot v sau chy li lnh man, cho php ngi dng g CTRL+z tm dng lnh man v g lnh th ty chn -b. Sau khi th xong, hy g fg tip tc xem trang man ca lnh sort. Kt qu ca qu trnh trn hin th nh sau:
# man sort | more SORT(1) FSF SORT(1) NAME sort - sort lines of text Files SYNOPSIS ../src/sort [OPTION] ... [Files]... DESCRIPTION Write sorted concatenation of all FILE(s) to standard out-put. +POS1 [-POS2] start a key at POS1,end it *before* POS2 obsoles-cent)field numbers and character offsets are num-bered starting with zero(contrast with the -k option) -b ignore leading blanks in sort fields or keys --More-(CTRL+z) [1]+ Stopped man sort | more # ls -s | sort -b | head -4 1 Archives/ 1 InfoWorld/ 1 Mail/ 1 News/ 1 OWL/ # fg man sort | more --More--
Trong phn trc, cch thc g phm CTRL+z tm dng mt qu trnh c gii thiu. Linux cn ngi dng cch thc chy mt chng trnh di ch nn (background) - s dng lnh bg - trong khi cc chng trnh khc ang chy, v chuyn mt chng trnh vo trong ch nn - dng k hiu &. Nu mt tin trnh hot ng m khng a ra thng tin no trn mn hnh v khng cn nhn bt k thng tin u vo no, th c th s dng lnh bg a n vo trong ch nn ( ch ny n s tip tc chy cho n khi kt thc). Khi chng trnh cn a thng tin ra mn hnh hoc nhn thng tin t bn phm, h thng s t ng dng chng trnh v thng bo cho ngi dng. Cng c th s dng ch 183
s iu khin cng vic (job control) lm vic vi chng trnh no mun. Khi chy mt chng trnh trong ch nn, chng trnh c nh s th t (c bao bi du ngoc vung [ ]), theo sau l ch s ca qu trnh. Sau c th s dng lnh fg + s th t ca chng trnh a chng trnh tr li ch ni v tip tc chy. c mt chng trnh (hoc mt lnh ng) t ng chy trong ch nn, ch cn thm k hiu '&' vo cui lnh. Trong mt s h thng, khi tin trnh nn kt thc th h thng s gi thng bo ti ngi dng, nhng trn hu ht cc h thng, khi qu trnh trn nn hon thnh th h thng s ch cho n khi ngi dng g phm Enter th mi hin th du nhc lnh mi km theo thng bo hon thnh qu trnh (thng th mt tin trnh hon thnh sau khong 20 giy). Nu c chuyn mt chng trnh vo ch nn mc d n c cc thng tin cn xut hoc nhp t cc thit b vo ra chun th h thng s a ra thng bo li di dng sau:
Stopped (tty input/output) tn chng trnh.
V d, lnh sau y thc hin vic tm kim file thu1 trong ch nn:
# find -name thu1 & [5] 918
trong ch ny, s th t ca chng trnh l [5], ch s qu trnh tng ng vi lnh find l 918. V g Enter khi qu trnh cha thc hin xong nn trn mn hnh ch hin th s th t ca chng trnh v ch s qu trnh, nu ch khong 30 hoc 40 giy sau ri g Enter ln na, mn hnh hin th thng bo hon thnh chng trnh nh sau:
# [5] Done # find -name thu1
Gi s chng trnh cha hon thnh v mun chuyn n ln ch ni, hy g lnh sau:
# fg 5 find -name thu1 ./thu1
chng trnh hon thnh v hin th thng bo rng file thu1 nm th mc gc. Thng thng s a ra mt thng bo li nu ngi dng c chuyn mt chng trnh vo ch nn khi m chng trnh cn phi xut hoc nhp thng tin t thit b vo ra chun. V d, lnh:
# vi & [6] 920
184
nhn Enter
# [6] + Stopped (tty output) vi #
Lnh trn chy chng trnh vi trong ch nn, tuy nhin lnh gp phi li v y l chng trnh i hi hin th cc thng tin ra mn hnh (output). Dng thng bo li Stopped (tty intput) vi cng xy ra khi chng trnh vi cn nhn thng tin.
2. Qun tr h thng
2.1 Khi ng v ng tt h thng
Khi mt my PC bt u khi ng, b vi x l s tm n cui vng b nh h thng ca BIOS v thc hin cc ch th . BIOS s kim tra h thng, tm v kim tra cc thit b, v tm kim a cha trnh khi ng. Thng thng, BIOS s kim tra a mm, hoc CDROM xem c th khi ng t chng c khng, ri n a cng. Th t ca vic kim tra cc a ph thuc vo cc ci t trong BIOS. Khi kim tra a cng, BIOS s tm n MBR v np vo vng nh hot ng chuyn quyn iu khin cho n. MBR cha cc ch dn cho bit cch np trnh qun l khi ng GRUB/LILO cho Linux hay NTLDR cho Windows NT/2000. MBR sau khi np trnh qun l khi ng, s chuyn quyn iu khin cho trnh qun l khi ng. Trnh qun l khi ng s cho hin trn mn hnh mt danh sch cc ty chn ngi dng x l xem nn khi ng h iu hnh no. Cc ch dn cho vic np h iu hnh thch hp c ghi r trong cc tp tin cu hnh tng ng vi cc trnh qun l khi ng. LILO lu cu hnh trong tp tin /etc/lilo.conf GRUB lu trong tp tin /boot/grub/grub.conf NTLDR lu trong c:\boot.ini
LILO c thng tin cha trong tp tin cu hnh /etc/lilo.conf bit xem h thng my ta c nhng h iu hnh no, v cc thng tin khi ng nm u. LILO c lp cu hnh khi ng mt on thng tin trong tp tin /etc/lilo.conf cho tng h iu hnh. Sau y l v d v tp tin /etc/lilo.conf
Boot=/dev/hda Map=/boot/map Install=/boot/boot.b Prompt Timeout=50 Message=/boot/message Lba32 Default=linux Image=/boot/vmlinuz-2.4.0-0.43.6 Label=linux Initrd=/boot/initrd-2.4.0-0.43.6.img Read-only Root=/dev/hda5 Other=/dev/hda1 Label=dos
on th nht: Cho bit LILO cn xem xt vo MBR (boot=/dev/hda1) Kim tra tp tin map N cn cho bit LILO c th ci t mt tp tin c bit (/boot/boot.b) nh l mt sector khi ng mi Thi gian ch trc khi np h iu hnh mc nh (default=xxx) c khai bo thng qua dng timeout=50 (5 giy) ? thi gian tnh bng 1/10 ca giy. Np thng tin trong qu trnh khi ng t tp tin /boot/message Dng LBA32 cho bit cu hnh ca a cng: cho bit a cng ca ta h tr LBA32, thng thng dng ny c gi tr linear (ta khng nn i li dng ny nu ta khng hiu r a cng ca ta, ta c th tm hiu a cng ca ta c h tr LBA32 hay khng bng cch xem trong BIOS) on th hai: Cung cp thng tin khi ng cho h iu hnh linux Dng image bo cho LILO bit v tr ca kernel Linux 186
Dng label hin din c 2 on cho bit tn ca h iu hnh no s xut hin ti trnh n khi ng ca LILO. Dng root xc nh v tr root file system ca Linux on th ba: Dng other cho bit partition ca mt h iu hnh na ang hda1 ca a cng.
tp tin /etc/inittab chn default runlevel, khi to cc deamon, cui cng yu cu ngi dng logon vo trc khi s dng h thng, sau khi log on bng username v password, h thng s chy chng trnh shell (hoc chy X Windows) giao tip vi ngi dng.
188
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.
Ct 2 : m lin quan n passwd cho Unix chun v ?x? i vi Linux. Linux lu m ny trong mt tp tin khc /etc/shadow m ch c root mi c quyn c. Ct 3:4 : user ID:group ID. Ct 5 : tn y ca ngi s dng. Mt s phn mm ph password s dng d liu ca ct ny th on password. Ct 6 : th mc c nhn. Ct 7 : chng trnh s chy u tin sau khi login (thng l shell) cho user. Tp tin m u bi superuser root. Ch l tt c nhng user c user ID = 0 u l root. Tip theo l cc user h thng. y l cc user khng c tht v khng th login vo h thng. Cui cng l cc user bnh thng. Tn ngi dng v nh danh ngi dng (Username v User ID) Tn ngi dng l chui k t xc nh duy nht mt ngi dng. Ngi dng tn ny khi ng nhp cng nh truy xut ti nguyn. Trong linux tn phn bit ch hoa, thng. Thng thng tn ngi dng thng s dng ch thng. qun l ngi dng linux s dng khi nim nh danh ngi dng (user ID). Mi ngi dng mang mt con s nh danh cho mnh. Linux s dng s nh danh kim sot hot ng ca ngi dng. Theo qui nh chung cc ngi dng c nh danh l 0 l ngi dng qun tr (root). Cc s nh danh t 199 s dng cho cc ti khon h thng, nh danh ca ngi dng bnh thng s dng gi tr bt u t 100. Mt khu (Password) Mi ngi dng phi c mt mt khu ring s dng ti khon ngi dng ca mnh. Mi ngi u c quyn i mt khu ca chnh mnh. Ngi qun tr th c th i mt khu ca nhng ngi khc. Unix/Linux truyn thng lu cc thng tin lin quan ti mt khu ng nhp (login) trong /etc/passwd. Tuy nhin, do y l tp tin phi c c bi tt c mi ngi do mt s yu cu cho hot ng bnh thng ca h thng (nh chuyn User ID thnh tn khi hin th trong lnh ls chng hn) v nhn chung cc user t mt khu ?yu?, do , hu ht cc phin bn Unix mi u lu mt khu trong mt tp tin khc /etc/shadow v ch c root c quyn c tp tin ny. Ch : Theo cch xy dng m ha mt khu, ch c 2 cch ph mt khu l vt cn (brute force) v on. Phng php vt cn, theo tnh ton cht ch, l khng th thc hin ni v 190
i hi thi gian tnh ton qu ln, cn on th ch tm ra nhng mt khu ngn, hoc ?yu?, v d nh nhng t tm thy trong t in nh god, darling ? Group ID nh danh ca nhm m user ny l mt thnh vin ca nhm. Comment Dng ch thch v user ny. Home Directory Khi ngi dng login vo h thng c t lm vic ti th mc c nhn ca mnh. Thng th mi ngi c mt th mc c nhn ring, ngi dng c ton quyn trn n, n dng cha d liu c nhn v cc thng tin h thng cho hot ng ca ngi dng nh bin mi trng, script khi ng, profile khi s dng X window ? Th mc mc nhin s dng cho cc th mc c nhn ca ngi dng bnh thng l /home; cho root l /root. Tuy nhin chng ta cng c th t vo v tr khc.
191
g, initial_group ty chn ny xc nh tn hoc s khi to ng nhp nhm ngi dng. Tn nhm phi tn ti, v s ca nhm phi tham chiu n mt nhm tn ti. S nhm ngm nh l 1. G, group danh sch cc nhm ph m ngi dng cng l thnh vin thuc cc nhm . Mi nhm s c ngn cch vi nhm khc bi du ',', mc nh ngi dng s thuc vo nhm khi to. m vi ty chn ny, th mc c nhn ca ngi dng s c to nu n cha tn ti. M khng to th mc ngi dng. n ngm nh khi thm ngi dng, mt nhm cng tn vi ngi dng s c to. Ty chn ny s loi b s ngm nh trn. p, passwd to mt khu ng nhp cho ngi dng. s, shell thit lp shell ng nhp cho ngi dng. u, uid thit t ch s ngi dng, gi tr ny phi l duy nht.
e, expire_date thay i thi im ht hn ti khon ngi dng (YYYY-MM-DD). f, inactive_days g, initial_group ngi dng ht hn s dng. dng. Tn nhm phi tn ti, v s ca nhm phi tham chiu n mt nhm tn ti. S nhm ngm nh l 1. G, group thay i danh sch cc nhm ph m ngi dng cng l thnh vin thuc cc nhm . Mi nhm s c ngn cch vi nhm khc bi du ',' mc nh ngi dng s thuc vo nhm khi to. l, login_name thay i tn ng nhp ca ngi dng. Trong mt s trng hp, tn th mc c nhn ca ngi dng c th s thay i tham chiu n tn ng nhp mi. p, passwd thay i mt khu ng nhp ca ti khon ngi dng. 192
s, shell u, uid
Ch : Lnh usermod khng cho php thay i tn ca ngi dng ang ng nhp. Phi m bo rng ngi dng khng thc hin bt k tin trnh no trong khi lnh usermod ang thc hin thay i cc thuc tnh ca ngi dng . V d : mun thay i tn ngi dng new thnh tn mi l newuser, hy g lnh sau:
# usermod -l new newuser
thay i UID ca mt ngi dng s dng c php lnh sau: C php: usermod u UID username
3.5 Hy user
Lnh hay c dng xa b mt ti khon ngi dng l lnh userdel. C php: userdel [-r] <tn-ngi-dng> Lnh ny s thay i ni dung ca cc file ti khon h thng bng cch xa b cc thng tin v ngi dng c a ra trn dng lnh. Ngi dng ny phi thc s tn ti. Tu chn -r c ngha: r cc file tn ti trong th mc c nhn ca ngi dng cng nh cc file nm trong cc th mc khc c lin quan n ngi dng s b xa b cng lc vi th mc ngi dng. Lnh userdel s khng cho php xa b ngi dng khi h ang ng nhp vo h thng. Phi hy b mi tin trnh c lin quan n ngi dng trc khi xo b ngi dng . Ngoi ra cng c th xa b ti khon ca mt ngi dng bng cch hiu chnh li file /etc/passwd.
Chng ta c th thm trc tip vo file /etc/group hoc dng lnh groupadd:
#groupadd tn-nhm
Thm user vo group Chng ta c th sa t tp tin /etc/group, cc tn ngi dng cch nhau bng du ;. Mt cch khc l cho tng uset vo nhm bng lnh: # usermod ?g tn-nhm tn-user hay sa tp tin /etc/passwd cho tng user, trong thay li nh danh nhm trong dng khai bo ngi dng. Hy group Xa trong tp tin /etc/group hay dng lnh : #groupdel tn-nhm Sa i cc thuc tnh ca mt nhm ngi dng Trong mt s trng hp cn phi thay i mt s thng tin v nhm ngi dng bng lnh groupmod vi c php nh sau: #roupmod [ty-chn] <tn-nhm> Thng tin v cc nhm xc nh qua tham s tn-nhm c iu chnh. Cc ty chn ca lnh: g, gid thay i gi tr ch s ca nhm ngi dng. n, group_name thay i tn nhm ngi dng. Lit k cc nhm m mt ngi dng l thnh vin C php: groups UserName
Lnh who hin th ba ct thng tin cho tng ngi dng trn h thng. Ct u l tn ca ngi dng, ct th hai l tn thit b u cui m ngi dng ang s dng, ct th ba hin th ngy gi ngi dng ng nhp. 194
Ngoi who, c th s dng thm lnh users xc nh c nhng ngi ng nhp trn h thng.
# users lan root #
Trong trng hp ngi dng khng nh ni tn ng nhp trong mt phin lm vic (iu ny nghe c v nh hi v l nhng l tnh hung i lc gp phi), hy s dng lnh whoami v who am i. S dng lnh: # whoami hoc # who am i
# whoami lan # who am i may9!lan pts/0 Nov 15 06:07
Lnh who am i s hin kt qu y hn vi tn my ng nhp, tn ngi dng ang ng nhp, tn thit b v ngy gi ng nhp.
C php lnh: #w [ngi-dng] Lnh w a ra thng tin v ngi dng hin thi trn h thng v qu trnh h ang thc hin. Nu ch ra ngi dng trong lnh th ch hin ra cc qu trnh lin quan n ngi dng .
# w root tty2 - 2:14pm 13:03 9.30s 9.10s /usr/bin/mc -P lan pts/1 192.168.2.213 3:20pm 0.00s 0.69s 0.10s w root pts/2 :0 3:33pm 9:32 0.41s 0.29s /usr/bin/mc P
4. Qun tr ti nguyn
4.1 Qun l ti nguyn vi lnh quota
Mt cng c tt nht qun l ti nguyn a l quota. Quota c dng hin th vic s dng v gii hn a ca ngi dng. Khi c gi, quota s qut tp tin /etc/fstab v kim tra nhng file system trong tp tin ny. Thng thng, quota dng gii hn dung lng a cng m ta cp cho ngi dng.
Gii hn v cng v mm
gip cho vic gii hn c hiu qu, quota chia lm 2 loi gii hn gii hn cng v gii hn mm.
196
Gii hn cng: khng cho php vt qu dung lng a cho php. Nu user c tnh lu nhng thng tin vo th nhng thng tin trc c th b xa v y ln dn. Vic gii hn ny tht mnh m nhng cn thit i vi mt s user. Gii hn mm: cho php user vt qu dung lng cho php, nhng s nhn mt li cnh bo trc. Mt kin hay, ta cu hnh gii hn mm nh hn gii hn cng, v cu hnh khi user vt qu dung lng cho php h thng s gi mt li cnh bo trc khi cho php user lu d liu.
Thit lp quota
Ngi qun tr h thng s thit lp quota cho user trong file c tn quota.user nm trong filesystem m chng ta mun cu hnh quota. Tng t, chng ta cng s thit lp quota cho nhm trong file quota.group. Nhng tp tin ny ta chng ta s to ra. Nhng lnh sau y hng dn ta cch thit lp quota cho filesystem /usr.
cd /usr touch aquota.user chmod 600 aquota.user touch aquota.group chmod 600 aquota.group
Ta s dng lnh edquota thit lp quota. Lnh ny ch c dng bi user root. Vi lnh ny chng ta c th gii hn dung lng cho mt hay nhiu user hoc group cng lc. V d nh sau:
edquota hv1 hv2
Ta c th iu khin lnh quota mt cch hiu qu vi nhng ty chn sau: g chnh sa quota ca group p sao chp quota ca mt user cho mt user khc u chnh sa quota cho user (mc nh ca lnh) t chnh sa thi gian ca gii hn mm. Sau khi thit lp quota, ta phi bt quota ln bng lnh: # quotaon /dev/hda3 bt quota kim tra tt c nhng file system dng lnh: # quotaon ?a Lnh quotaoff c tnh nng ngc li, tt quota trn filesystem. 197
Lnh quota
C php ca lnh: quota [ty chn] [user] [group] Nhng ty chn ca lnh quota. g hin th quota ca group m user ny l mt thnh vin q ch hin th nhng filesystem c quota u hin th quota ca user
Lnh quotacheck
Ta c th s dng lnh quotacheck ti bt c lc no kim tra vic s dng a hin hnh.
D, --dereference-args h, --human-readable 1K, 234M, 2G... ). k, --kilobytes L, --dereference l, --count-links m, --megabytes S, --separate-dirs s - help
Ch : lnh du khng cho php c nhiu ty chn trn cng mt dng lnh. V d: lnh sau cho bit kch c ca cc file trong th mc /usr/doc/test:
# du /usr/doc/test 28 24 16 12 144 44 160 56 532 ./TODO/1.0_to_1.5 ./TODO/lib++ ./TODO/unreleased ./TODO/unstable ./TODO ./code ./languages ./licences .
Nhn vo mn hnh c th bit c kch thc ca file./TODO/1.0_to_1.5 l 28 KB, file./TODO/lib++ l 24 KB,..., v kch thc ca th mc hin thi l 532 KB. Mun bit tng s dung lng ca bt k th mc no ta c th s dng lnh sau: du sh
ch ra c dung lng a cn trng trong Linux khng phi l iu d lm. Ngi dng c th s dng lnh df lm c iu ny, tuy nhin kt qu ca lnh ny ch cho bit dung lng a c s dng v dung lng a cn trng ca tng h thng file. Nu mun bit tng dung lng a cn trng l bao nhiu, s phi cng dn dung lng a cn trng ca tng h thng file. 199
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 /
200
201
telnet
stream
tcp
nowait
root
/usr/sbin/tcpd
in.telnetd
Bn cnh tp tin cu hnh /etc/inetd.conf, tp tin /etc/services cng c inetd s dng bit cc cng (port) ca cc chng trnh server. V d mt on ca tp tin /etc/services
ftp-data ftp fsp ssh ssh telnet # 24 - private smtp time time rlp nameserver whois re-mail-ck re-mail-ck domain domain 25/tcp 37/tcp 37/udp 39/udp 42/tcp 43/tcp 50/tcp 50/udp 53/tcp 53/udp mail timserver timserver resource name nicname # Remote Mail Checking Protocol # Remote Mail Checking Protocol nameserver nameserver # name-domain server # resource location # IEN 116 # 26 - unassigned 20/tcp 21/tcp 21/udp 22/tcp 22/udp 23/tcp fspd # SSH Remote Login Protocol # SSH Remote Login Protocol
Hai tp tin /etc/inetd.conf v /etc/services quan h mt thit vi nhau. Ct u tin bao gm tn cc dch v mng v cn phi ging nhau. Mt dch v mun c hot ng nh inetd phi khai bo cng m n i khch hng thng qua /etc/services v dng lnh khi ng n trong /etc/inetd.conf. Mun tt mt dch v, ta ch cn t du ch thch # trc dng miu t dch v v khi , inetd s khng bit v khng gi dch v na. Nh cc bn c nhn thy ni dung ca ct <server_path> <args> cho cc dch v l /usr/sbin/tcpd in.telnetd. Chng trnh tcpd c inetd gi ln trc lm mt s cng tc kim tra v ghi log trc khi chng trnh dch v thc c gi ln. C th l tcpd s s dng Ct <flags> cho bit chng trnh inetd c phi i (wait) hay khng (nowait) kt ni kt thc trc khi tip mt kt ni khc. V d trn vi telnet cho thy nhiu chng trnh khch c th c phc v mt lc qua cng mt cng telnet 23. Tt nhin chng trnh server telnet cng phi c thit k thch hp vi kiu lm vic a khch hng ny.
202
Ct <user> quy nh quyn ca tin trnh khi n c chy trn b nh. Trong trng hp c nghi ng v tnh bo mt ca mt dch v, ta c th gim quyn ca n bng cch thay i ni dung ca ct ny. Qua v d trn ta thy dch v ftp s c inetd gi ln thng qua dng lnh /usr/sbin/tcpd in.ftpd -l a khi c mt chng trnh khch hng dng giao thc TCP gi qua cng 21.
5.1. Lnh t tn my
Lnh #Hostname name, nu ta mun t tn y (full domain name).
Hostname name.domainname
RX packets:3912830 errors:84463 dropped:0 overruns:0 frame:0 TX packets:2402090 errors:0 dropped:0 overruns:0 carrier:0 collisions:84463 txqueuelen:100 RX bytes:2767096664 (2638.9 Mb) Mb) Interrupt:29 eth1 Link encap:Ethernet inet addr:10.10.0.10 HWaddr 00:05:1C:98:05:B1 Bcast:10.10.255.255 MTU:1500 Mask:255.255.0.0 Metric:1 TX bytes:1265930467 (1207.2
RX packets:15389731 errors:0 dropped:0 overruns:0 frame:0 TX packets:7768909 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100
203
RX bytes:2578998337 (2459.5 Mb) Mb) lo Link encap:Local Loopback inet addr:127.0.0.1 UP LOOPBACK RUNNING Mask:255.0.0.0 MTU:16436
TX bytes:1471928637 (1403.7
Metric:1
RX packets:45868 errors:0 dropped:0 overruns:0 frame:0 TX packets:45868 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5338927 (5.0 Mb) TX bytes:5338927 (5.0 Mb)
Trong trng hp ny ta thy my hin ti c 2 card mng v c gn cc a ch tng ng nh trn. Mun ch xem cc thng tin v mt card mng no thi ta dng lnh:
# ifconfig eth0
-a
Show the state of all sockets and all routing table entries; normally, sockets used by server processes are not shown and only interface, host, network, and default routes are shown.
-n
Show network addresses as numbers. netstat normally displays addresses as symbols. This option may be used with any of the display formats.
-v
Verbose. Show additional information for the sockets and the routing table.
204
-g -m -p -i -r -M
Show the multicast group memberships for all interfaces. Show the STREAMS statistics. Show the address resolution (ARP) tables. Show the state of the interfaces that are used for TCP/IP traffic. Show the routing tables. Show the multicast routing tables. When used with the -s option, show multicast routing statistics instead.
-d
Show the state of all interfaces that are under Dynamic Host Configuration Protocol (DHCP) control.
-D -P protocol
Show the status of DHCP configured interfaces. Limit display of statistics or state of all sockets to those applicable to protocol.
hoc lnh lit k c bao nhiu tin trnh ang s dng cng 80 nh sau:
# netstat -an |grep :80 | wc -l
205
Thng thng, mt ngi dng mun lin h vi ngi dng khc, cn s dng lnh who: $who hin thng tin nh sau:
user1 tty17 user2 tty43 user4 tty52 Oct 15 10:20 Oct 15 8:25 Oct 15 12:20
trong c tn ngi dng, s hiu terminal, ngy gi vo h thng. Sau s dng lnh write chuyn thng bo cho nhau.
$write <tn ngi dng> [<tn trm cui>]
cn gi thng bo n ngi dng user1 c tn user2 s g: $write user2 tty43 Nu ngi dng user2 hin khng lm vic th trn mn hnh ngi dng user1 s hin ra: "user2 is not logged in" v hin li du mi shell. Nu ngi dng user2 ang lm vic, my ngi dng user2 s pht ra ting chung v trn mn hnh hin ra:
Message from user1 on tty17 at <gi, pht>
Cng lc , ti my ca user1 mn hnh trng hin nhng thng tin gi ti ngi dng user2. Ngi gi g thng bo ca mnh theo quy tc: Kt thc mt dng bng cm -o, Kt thc dng cui cng (ht thng bo) bng cm -oo. kt thc kt ni vi ngi dng user2, ngi dng user1 g ctrl-d. t chi mi vic nhn thng bo t ngi khc, s dng lnh khng nhn thng bo:
$mesg n (n - no)
Mt ngi khc gi thng bo n ngi ny s nhn c vic truy nhp khng cho php permission denied. tip tc cho php ngi khc gi thng bo n, s dng lnh:
$mesg y (y - yes)
206
Cch thc s dng mail l khc hn: mt trong hai ngi gi hoc nhn c th khng ng nhp vo h thng. m bo cch thc truyn thng gin tip (cn gi l off-line) nh vy, h thng to ra cho mi ngi dng mt hp th ring. Khi mt ngi dng lnh mail gi th n mt ngi khc th th c t ng cho vo hp th ca ngi nhn v ngi nhn sau cng dng lnh mail xem trong hp th c th mi hay khng. Khng nhng th mail cn cho php s dng trn mng internet (a ch mail thng di dng tn-login@my.mng.lnh-vc.quc-gia).
Lnh mail ch yu cu ngi gi (hoc ngi nhn) login trong h thng. Vic nhn v gi th c tin hnh t mt ngi dng. Th gi i cho ngi dng khc, c lu ti hp th ca h thng. Ti thi im login h thng, ngi dng c th thy c c th mi khi trn mn hnh xut hin dng thng bo "you have mail". Lnh mail trong UNIX gm 2 chc nng: gi th v qun l th. Tng ng, c hai ch lm vic vi lnh mail: mode lnh (command mode) qun tr th v mode son (compose mode) cho php to th.
Mode son
Mode son lm vic trc tip vi mt th v gi ngay cho ngi khc. Mode son thc cht l s dng lnh mail c tham s:
$mail tn_ngi_nhn> V d, $mail user2
207
Sau khi g lnh, mn hnh b xa v con tr son tho nhp nhy gc trn, tri ngi dng g ni dung th. kt thc son th, hy g ctrl-d, mn hnh ca mail bin mt v du mi ca shell li xut hin. Ch : Dng sau y c dng gi th son trong ni dung mt file no (ch du "<" ch dn thit b vo chun l ni dung file thay v cho bn phm):
$mail tn_ngi_nhn < tn_file_ni_dung_th
V d
$ mail user2 < thu1
Ni dung th t File thu1 c gi cho ngi nhn user2, du mi ca shell li hin ra. Cch lm trn y hay c s dng trong gi / nhn th in t hoc lin kt truyn thng v cho php tit kim c thi gian kt ni vo h thng, c bit chi ph phi tr khi kt ni l ng k.
Mode lnh
Nh ni s dng mode lnh ca mail qun l hp th. Vo mail theo mode lnh khi dng lnh mail khng tham s:
$mail
Sau khi g lnh, mn hnh mail mode lnh c hin ra vi du mi ca mode lnh. (ph bin l du chm hi "?") Ti y ngi dng s dng cc lnh ca mail qun l h thng th ca mnh. Cn tr gip g du chm hi (mn hnh c hai du ??): ? mn hnh hin ra dng sau: <s> (du cch) + l cmd dq m user s tn-file r u u <s> [tn-file] d <s> Hin th s <s> Hin th ngay pha trc Hin th ngay tip theo thc hin lnh cmd xa th hin thi v ra khi mail gi th hin thi cho ngi dng ghi th hin thi vo file c tn tr li th hin thi (c th t file) xa th s khi phc th hin thi khi phc th s 208
ra khi mail
209
210
PH LC
1. Gii thiu mt s phin bn h iu hnh Linux thng dng hin nay v cch ci t
1.1 Hng dn ci t h iu hnh Redhat Linux 7.1
Ta ci Linux t CDROM. Redhat phin bn 7.1 gm c 5 a. Ta ch cn 2 a Disk 1 va Dick 2 l v ci trn my hon ton mi, cha c ci h iu hnh no. Gi s my mi c mt cng cha nh dng. Thit lp CMOS my khi ng t CDROM. Cho a CDROM Linux 1 vo khi ng. Khi khi ng xong, mn hnh hin ln nh sau :
T y, cho php ta ci t theo nhiu loi giao din, ta g vo text ci trong ch text. Mn hnh tip theo nh sau:
Sau hp thoi chn ngn ng hin ln cho ta chn ngn ng no tu . y ta chn English.
211
Chng trnh hin ln bng thng bo Red Hat Linux: Welcome to Red Hat Linux, nhn OK b qua.
Khi hp thoi Installation Type xut hin, chn Custom System, trong trng hp ny n s cho ta chn ci cc phn mm theo ca ta. Nu ta chn cc tu chn khc nh Server 212
System, Workstation. Chn Upgrade Existing Installation s cho php ta nng cp h iu hnh Linux.
Do a cng mi hon ton cha nh dng nn xut hin thng bo sau. Ta chn Initilize
213
Chng trnh nh dng a ca Linux m ra.Theo vt sng ta thy c 1 a cng gn IDE1 (sda), dung lng l 4094 MB
a vt sng n nt Add, nhn ENTER to partition mi, ca s Edit New Partition xut hin
214
Trc tin, ta to Linux Native, y ta chn tm 1000 MB, nhn TAB chuyn qua li v thit lp thng s. Thm du / vo mc Mount Point.
215
216
Nhn OK to boot LILO. Trong cc phin bn sau ny cng c thm mt chng trnh GRUB c vai tr tng t nh LILO nhng c giao din ho.
217
Nhn OK format bt u.
Sau t tn cho my
Lu : Nhng minh ho di y l c thit lp theo cu hnh phn cng my hin ti. cc my khc c th khc. Chn loi chut:
219
220
221
Nhn OK khi chn xong. Chn loi card mn hnh thch hp.
222
Nhn OK ci t
Qu trnh ci t bt u
223
224
225
226
227
228
229