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