Professional Documents
Culture Documents
He Dieu Hanh Ma Nguon Mo
He Dieu Hanh Ma Nguon Mo
TRNG I HC HNG HI
B MN: K THUT MY TNH
KHOA: CNG NGH THNG TIN
BI GING
H IU HNH M NGUN M
TN HC PHN
: H IU HNH M NGUN M
M HC PHN
: 17308
TRNH O TO : I HC CHNH QUY
DNG CHO SV NGNH : CNG NGH THNG TIN
HI PHNG - 2010
MC LC
Chng 1. GII THIU CHUNG V LINUX ................................................................................ 6
1.1. Gii thiu chung .................................................................................................................... 6
1.1.1. Tng quan v Linux ........................................................................................................ 6
1.1.2. Vn bn quyn ............................................................................................................ 6
1.1.3. Cc thnh phn tch hp H iu hnh Linux ................................................................. 7
1.1.4. Mt s c im chnh ca Linux ................................................................................... 7
1.2. Cc thnh phn c bn ca Linux .......................................................................................... 8
1.2.1. Nhn h thng (kernel) ................................................................................................... 8
1.2.2. H v (shell) .................................................................................................................... 9
1.3. S dng lnh trong Linux ...................................................................................................... 9
1.3.1. Dng tng qut ca lnh Linux ..................................................................................... 10
1.3.2. Cc k hiu i din ...................................................................................................... 11
1.3.3. Tr gip lnh ................................................................................................................. 11
Chng 2. THAO TC VI H THNG..................................................................................... 12
2.1. Tin trnh khi ng Linux .................................................................................................. 12
2.2. Th tc ng nhp v cc lnh thot khi h thng ............................................................ 12
2.2.1. ng nhp ..................................................................................................................... 12
2.2.2. Ra khi h thng ........................................................................................................... 12
2.2.3. Khi ng li h thng .................................................................................................. 13
2.2.4. Khi ng vo ch ho ....................................................................................... 13
2.3. Mt s lin quan n h thng ............................................................................................. 15
2.3.1. Lnh thay i mt khu ................................................................................................. 15
2.3.2. Lnh xem, thit lp ngy, gi........................................................................................ 15
2.3.3. Lnh kim tra nhng ai ang s sng h thng ............................................................ 15
2.3.4. Thay i ni dung du nhc shell ................................................................................. 15
2.3.5. Lnh gi ngn ng tnh ton s hc .............................................................................. 16
Chng 3. H THNG FILE ........................................................................................................ 17
3.1 Tng quan v h thng file ................................................................................................... 17
3.1.1. Mt s khi nim........................................................................................................... 17
3.1.2. S b kin trc ni ti ca h thng file ....................................................................... 18
3.1.3. H tr nhiu h thng File ............................................................................................ 20
3.1.4. Lin kt tng trng (lnh ln) ....................................................................................... 21
3.2 Quyn truy nhp th mc v file .......................................................................................... 22
3.2.1 Quyn truy nhp ............................................................................................................. 22
3.2.2. Cc lnh c bn ............................................................................................................. 23
3.3 Thao tc vi th mc ............................................................................................................ 25
3.3.1 Mt s th mc c bit ................................................................................................. 25
3.3.2 Cc lnh c bn v th mc ........................................................................................... 26
3.4. Cc lnh lm vic vi file .................................................................................................... 28
3.4.1 Cc kiu file c trong Linux .......................................................................................... 28
3.4.2. Cc lnh to file ............................................................................................................ 29
-1-
-3-
L thuyt
30
Thc hnh/Xemina
30
T hc
0
Loi hc phn: 2
Khoa ph trch: CNTT
Tng s TC: 3
Bi tp ln
0
n mn hc
0
TN CHNG MC
Chng 1: Gii thiu Unix Linux
1.1. Gii thiu chung
1.2. Cc thnh phn c bn ca Linux
1.3. S dng lnh trong Linux
Chng 2. Thao tc vi h thng
2.1. Tin trnh khi ng Linux
2.2. Th tc ng nhp v cc lnh thot khi h thng
2.3. Mt s lin quan n h thng
Chng 3. Qun tr h thng v ngi dng
3.1 Qun l ngi dng
3.2 Qun l nhm cc vn lin quan
3.3 Qun tr h thng
Chng 4. H thng file
4.1. Tng quan v h thng file
4.2. Quyn truy nhp th mc v file
4.3. Thao tc vi th mc
4.4. Cc lnh lm vic vi file
4.5 Nn v sao lu cc file
Chng 5. Truyn thng v mng
KT
1
8
-4-
20
1
1
1
1
7
2
2
1
12
-5-
Thnh phn quan trng th hai trong nhn l h thng cc mun chng trnh (c
gi l li gi h thng) lm vic vi h thng file. Linux c hai cch thc lm vic vi cc
file: lm vic theo byte (k t) v lm vic theo khi. Mt c im ng ch l file trong
Linux c th c nhiu ngi cng truy nhp ti nn cc li gi h thng lm vic vi file
cn m bo vic file c truy nhp theo quyn v c chia x cho ngi dng.
1.2.2. H v (shell)
Ngi dng mong mun my tnh thc hin mt cng vic no th cn g lnh th
hin yu cu ca mnh h thng p ng yu cu . Shell l b dch lnh v hot ng
nh mt kt ni trung gian gia nhn vi ngi dng: Shell nhn dng lnh do ngi dng
a vo; v t dng lnh ni trn, nhn tch ra cc b phn nhn c mt hay mt s lnh
tng ng vi cc on vn bn c trong dng lnh. Mt lnh bao gm tn lnh v tham s:
t u tin l tn lnh, cc t tip theo (nu c) l cc tham s. Tip theo, shell s dng nhn
khi sinh mt tin trnh mi (khi to tin trnh) v sau , shell ch i tin trnh con ny
tin hnh, hon thin v kt thc. Khi shell sn sng tip nhn dng lnh ca ngi dng, mt
du nhc shell (cn gi l du nhc nhp lnh) xut hin trn mn hnh.
Linux c hai loi shell ph bin l: C-shell (du nhc %), Bourne-shell (du nhc $)
v mt s shell pht trin t cc shell ni trn (chng hn, TCshell - tcsh vi du nhc ngm
nh > pht trin t C-shell v GNU Bourne - bash vi du nhc bash # pht trin t Bourneshell). Du mi phn bit shell ni trn khng phi hon ton r rng do Linux cho php
ngi dng thay i li du nhc shell nh vic thay gi tr cc bin mi trng PS1 v PS2.
Trong ti liu ny, chng ta s dng k hiu "hng ro #" biu th du nhc shell.
C-shell c tn gi nh vy l do cch vit lnh v chng trnh lnh Linux ta nh ngn
ng C. Bourne-shell mang tn tc gi ca n l Steven Bourne. Mt s lnh trong C- shell
(chng hn lnh alias) khng cn c trong Bourne-shell v v vy nhn bit h thng ang
lm vic vi shell no, chng ta g lnh:
# alias
Nu mt danh sch xut hin th shell ang s dng l C-shell; ngc li, nu xut hin
thng bo "Command not found" th shell l Bourne-shell.
Lnh c chia thnh 3 loi lnh:
Lnh thng trc (c sn ca Linux). Tuyt i a s lnh c gii thiu trong
ti liu ny l lnh thng trc. Chng bao gm cc lnh c cha sn trong
shell v cc lnh thng trc khc.
File chng trnh ngn ng my: chng hn, ngi dng vit trnh trn ngn ng
C qua b dch gcc (bao gm c trnh kt ni link) to ra mt chng trnh trn
ngn ng my.
File chng trnh shell (Shell Scrip).
Khi kt thc mt dng lnh cn g phm ENTER shell phn tch v thc hin lnh.
1.3. S dng lnh trong Linux
Nh gii thiu phn trn, Linux l mt h iu hnh a ngi dng, a nhim,
c pht trin bi hng nghn chuyn gia tin hc trn ton th gii nn h thng lnh cng
ngy cng phong ph; n thi im hin nay Linux c khong hn mt nghn lnh. Tuy
nhin ch c khong vi chc lnh l thng dng nht i vi ngi dng.
Cng nh ni trn, ngi dng lm vic vi my tnh thng qua vic s dng trm
cui: ngi dng a yu cu ca mnh bng cch g "lnh" t bn phm v giao cho h iu
hnh x l.
Khi ci t Linux ln my tnh c nhn th my tnh c nhn va ng vai tr trm cui,
va ng vai tr my tnh x l.
-9-
- 10 -
- 11 -
Kernel
init
- 12 -
Cp k t iu khin
\\
\d
\h
\n
\s
\t
\u
\W
\w
ngha
Hin th du s (\)
Hin th ngy hin ti
Hin th tn my (hostname)
K hiu xung dng
Hin th tn h shell
Hin th gi hin ti
Hin th tn ngi dng
Hin th tn thc s ca th mc hin thi
Hin th tn y ca th mc hin thi
- 16 -
sbin
sbin
usr
bin
dev
lib
var
man
etc
home
User01
User02
Khi mt ngi dng ng nhp vo h thng, Linux lun chuyn ngi dng vo th
mc ring, v ti thi im th mc ring l th mc hin thi ca ngi dng. Th mc
ring ca siu ngi dng l /root, th mc ring ca ngi dng c tn l user01 l
/home/user1... Linux cho php dng lnh cd chuyn sang th mc khc (ly th mc khc
lm th mc hin thi). Hai du chm ".." c dng ch th mc ngay trn th mc hin
thi (cha ca th mc hin thi).
Linux cn cho php ghp mt h thng file trn mt thit b nh (a mm, vng a
cng cha c a vo h thng file) thnh mt th mc con trong h thng file ca h
thng bng lnh mount. Cc h thng file c ghp thuc vo cc kiu khc nhau.
3.1.2. S b kin trc ni ti ca h thng file
Trn a t, h thng file c coi l dy tun t cc khi lgic mi khi cha hoc
512B hoc 1024B hoc bi ca 512B l c nh trong mt h thng file. Trong h thng file,
cc khi d liu c a ch ha bng cch nh ch s lin tip, mi a ch c cha trong
4 byte (32 bit).
Cu trc ni ti ca h thng file bao gm 4 thnh phn k tip nhau: Boot block (dng
khi ng h thng), Siu khi (Super block), Danh sch inode v Vng d liu.
Siu khi
Siu khi cha nhiu thng tin lin quan n trng thi ca h thng file. Trong siu
khi c cc trng sau y:
Kch thc ca danh sch inode (nh kch c vng khng gian trn H thng file
qun l cc inode).
Kch thc ca h thng file.
Hai kch thc trn y tnh theo n v dung lng b nh ngoi,
Mt danh sch ch s cc khi ri (thng trc trn siu khi) trong h thng file.
Ch s cc khi ri thng trc trn siu khi c dng p ng nhu cu phn
phi mi.
Ch s ca khi ri tip theo trong danh sch cc khi ri. Ch s khi ri tip
theo dng h tr vic tm kim tip cc khi ri: bt u tm t khi c ch s
ny tr i.
Mt danh sch cc inode ri (thng trc trn siu khi) trong h thng file. Danh
sch ny cha ch s cc inode ri c dng phn phi ngay c cho mt
file mi c khi to.
Ch s inode ri tip theo trong danh sch cc inode ri. Ch s inode ri tip theo
nh v vic tm kim tip thm inode ri: bt u tm t inode c ch s ny tr
i.
Hai tham s trn y to thnh cp xc nh c danh sch cc inode ri trn h
thng file cc thao tc to file mi, xo file cp nht thng tin ny.
Cc trng kha (lock) danh sch cc khi ri v danh sch inode ri: Trong mt
s trng hp, chng hn khi h thng ang lm vic thc s vi a t cp
nht cc danh sch ny, h thng khng cho php cp nht ti hai danh sch ni
trn.
C ch dn v vic siu khi c bin i: nh k thi gian siu khi b
nh trong c cp nht li vo siu khi a t v v vy cn c thng tin v
vic siu khi b nh trong khc vi ni dung b nh ngoi: nu hai bn
khng ging nhau th cn phi bin i chng c ng nht.
C ch dn rng h thng file ch c th c (cm ghi): Trong mt s trng hp,
h thng ang cp nht thng tin t b nh ngoi th ch cho php c i vi h
thng file,
S lng tng cng cc khi ri trong h thng file,
S lng tng cng cc inode ri trong h thng file,
- 18 -
H thng file SMB: (Server Mesage Block) l mt giao thc ca Windows dng
chia s file gia cc h iu hnh Windows 95/98, Windows NT v OS/2 Lan
Manager. Vi s h tr SMB, h iu hnh Linux c th chia s cng nh truy
cp cc file nm trn cc phn vng ca mt my chy cc h iu hnh k trn.
H thng file VFAT: L h thng file m rng ca h thng FAT. H thng file
ny c s dng trong cc h iu hnh Windows 95/98.
Kiu file
Th mc (directory)
File kiu khi (block-type special file)
File kiu k t (character-type special file)
l
Lin kt tng trng (symbolic link)
p
File ng ng (pipe)
s
Socket
File bnh thng (regular file)
Chn k t tip theo trong chui l quyn truy nhp c chia ra lm 3 nhm tng ng
vi quyn truy nhp ca ngi s hu, nhm s hu v ngi dng khc.
C ba loi quyn truy nhp chnh i vi th mc/file, l: c (read -r), ghi (write
-w) v thc hin (execute -x).
- 22 -
Ch ci biu din
--r-r-x
Kiu file
Khng cho php mt quyn truy nhp no
Ch c quyn c
Quyn c v thc hin (cho chng trnh v shell script)
rwQuyn c v ghi
rwx
Cho php tt c cc quyn truy nhp (cho chng trnh)
Tuy nhin, i vi th mc th ch c ba loi k hiu ca cc quyn truy nhp l: ---,
r-x v rwx, v ni dung ca th mc l danh sch ca cc file v cc th mc con c bn
trong th mc . Quyn c mt th mc l c xem ni dung ca th mc v quyn
thc hin i vi mt th mc l quyn tm c file v th mc con c trong th mc.
3.2.2. Cc lnh c bn
3.2.2.1. Thay i quyn s hu file
C php lnh: chown [ty-chn] [ch][.nhm] <file...>
Nu ch c tham s v ch, th ngi dng ch s c quyn s hu file v nhm
s hu khng thay i.
Nu theo sau tn ngi ch l du "." v tn ca mt nhm th nhm s nhm
s hu file.
Nu ch c du "." v nhm m khng c tn ngi ch th ch c quyn s hu
nhm ca file thay i, lc ny, lnh chown c tc dng ging nh lnh chgrp
Cc ty chn:
-c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s
hu (s thng bo hin ra c th t hn trng hp -v, -verbosr).
-f, --silent, --quiet : b qua hu ht cc thng bo li.
-R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy.
-v, --verbose : hin th dng thng bo vi mi file lin quan m chown tc ng
ti (c hoc khng thay i s hu).
--help : a ra trang tr gip v thot.
3.2.2.2. Thay i quyn s hu nhm
Cc file (v ngi dng) cn thuc vo cc nhm, y l phng thc truy nhp file
thun tin cho nhiu ngi dng nhng khng phi tt c ngi dng trn h thng. Khi ng
nhp, mc nh s l thnh vin ca mt nhm c thit lp khi siu ngi dng root to ti
khon ngi dng. Cho php mt ngi dng thuc nhiu nhm khc nhau, nhng mi ln
ng nhp ch l thnh vin ca mt nhm.
C php lnh: chgrp [ty-chn] {nhm|--reference=nhmR} <file...>
Lnh ny cho php thay thuc tnh nhm s hu ca file theo tn nhm c ch ra trc
tip theo tham s nhm hoc gin tip qua thuc tnh nhm ca file c tn l nhmR.
Cc ty chn: (mt s tng t nh lnh chown):
-c, --changes : hin th dng thng bo ch vi cc file m lnh lm thay i s
hu (s thng bo hin ra c th t hn trng hp -v, -verbosr).
-f, --silent, --quiet : b qua hu ht cc thng bo li.
-R, --recursive : thc hin i quyn s hu i vi th mc v file theo quy.
-v, --verbose : hin th dng thng bo vi mi file lin quan m chgrp tc ng
ti (c hoc khng thay i s hu).
--help : hin th trang tr gip v thot
Tham s --reference=nhmR cho thy cch gin tip thay nhm ch ca file theo nhm
ch ca mt file khc (tn l nhmR) l cch thc c a chung hn. Tham s ny l xung
khc vi tham s nhm ca lnh.
- 23 -
Thao tc thay i
+ (thm quyn)
- (g b quyn)
= (xc nhn quyn)
Kiu truy cp
r=read (c)
w=write (ghi)
x=execute (thc hin)
nhng file th ngi dng phi chuyn i thnh thnh vin ca mt nhm nhng nhm
c gn vi ngi dng.
Lnh newgr cho php ngi dng chuyn sang nhm ngi dng khc gn vi mnh
vi C php lnh:
newgrp [nhm]
Trong nhm l mt tn nhm ngi dng tn ti trong h thng.
3.3 Thao tc vi th mc
3.3.1 Mt s th mc c bit
* Th mc gc /
y l th mc gc cha ng tt c cc th mc con c trong h thng.
* Th mc /root
Th mc /root c th c coi l "th mc ring" ca siu ngi dng. Th mc ny
c s dng lu tr cc file tm thi, nhn Linux v nh khi ng, cc file nh phn
quan trng (nhng file c s dng n trc khi Linux c th gn kt n phn vng
/user), cc file ng nhp quan trng, b m in cho vic in n, hay vng lu tm cho vic
nhn v gi email. N cng c s dng cho cc vng trng tm thi khi thc hin cc thao
tc quan trng, v d nh khi xy dng (build) mt gi RPM t cc file RPM ngun.
* Th mc /bin
Trong Linux, chng trnh c coi l kh thi nu n c th thc hin c. Khi mt
chng trnh c bin dch, n s c dng l file nh phn. Nh vy, chng trnh ng dng
trong Linux l mt file nh phn kh thi.Chnh v l , nhng nh pht trin Linux quyt
nh phi t chc mt th mc "binaries" lu tr cc chng trnh kh thi c trn h thng,
chnh l th mc /bin.
Ban u, th mc /bin (bin l vit tt ca t binary) l ni lu tr cc file nh phn kh
thi. Nhng theo thi gian, ngy cng c nhiu hn cc file kh thi c trong Linux, do , c
thm cc th mc nh /sbin, /usr/bin c s dng lu tr cc file .
* Th mc /dev
Mt phn khng th thiu trong bt k my tnh no l cc trnh iu khin thit b.
Khng c chng, s khng th c c bt k thng tin no trn mn hnh ca, cng khng
th nhp c thng tin, v cng khng th s dng a mm ca.
Tt c cc trnh iu khin thit b u c lu tr trong th mc /dev.
* Th mc /etc
Qun tr h thng trong Linux khng phi l n gin, chng hn nh vic qun l ti
khon ngi dng, vn bo mt, trnh iu khin thit b, cu hnh phn cng,... gim
bt phc tp, th mc /etc c thit k lu tr tt c cc thng tin hay cc file cu
hnh h thng.
* Th mc /lib
Linux c mt trung tm lu tr cc th vin hm v th tc, l th mc /lib.
* Th mc /lost+found
Mt file c khi phc sau khi c bt k mt vn hoc gp mt li v ghi a trn
h thng u c lu vo th mc ny.
* Th mc /mnt
Th mc /mnt l ni kt ni cc thit b (v d a cng, a mm...) vo h thng
file chnh nh lnh mount. Thng thng cc th mc con ca /mnt chnh l gc ca cc h
thng file c kt ni: /mnt/floppy: a mm, /mnt/hda1: vng u tin ca a cng th
nht (hda), /mnt/hdb3: vng th ba ca a cng th 2 (hdb)...
- 25 -
* Th mc /tmp
Th mc /tmp c rt nhiu chng trnh trong Linux s dng nh mt ni lu tr
cc file tm thi.
* Th mc /usr
Thng thng th th mc /usr l trung tm lu tr tt c cc lnh hng n ngi
dng (user-related commands). Tuy nhin, ngy nay tht kh xc nh trong th mc ny c
nhng th g, bi v hu ht cc file nh phn cn cho Linux u c lu tr y, trong
ng ch l th mc con /usr/src bao gm cc th mc con cha cc chng trnh ngun
ca nhn Linux.
* Th mc /home
Th mc ny cha cc th mc c nhn ca ngi dng: mi ngi dng tng ng vi
mt th mc con y, tn ngi dng c ly lm tn ca th mc con.
* Th mc /var
Th mc /var c s dng lu tr cc file cha cc thng tin lun lun thay i,
bao gm b m in, vng lu tm thi cho vic nhn v gi th (mail), cc kha tin trnh,...
* Th mc /boot
L th mc cha nhn ca h thng (Linux-*.*.), System.map (file nh x n cc
driver np cc h thng file khc), nh (image) ca h thng file dng cho initrd
(ramdisk), trnh iu khin cho cc thit b RAID (mt thit b gm mt mng cc a cng
tng tc v an ton khi ghi d liu), cc bn sao lu boot record ca cc phn vng
a khc. Th mc ny cho php khi ng v np li bt k trnh iu khin no c yu
cu c cc h thng file khc.
* Th mc /proc
y l th mc dnh cho nhn (kernel) ca h iu hnh v thc t y l mt h thng
file c lp do nhn khi to.
* Th mc /misc v th mc /opt
Cho php lu tr mi i tng vo hai th mc ny.
* Th mc /sbin
Th mc lu gi cc file h thng thng t ng chy.
3.3.2 Cc lnh c bn v th mc
* Xc nh th mc hin thi
C php lnh: pwd
Lnh ny cho bit hin ngi dng ang trong th mc no v hin ra theo dng mt
ng dn tuyt i.
* Xem thng tin v th mc
C php lnh: ls [ty-chn] [file]...
Lnh ny a ra danh sch cc file lin quan n tham s file trong lnh. Trng hp
ph bin tham s file l mt th mc, tuy nhin trong mt s trng hp khc, tham s file
xc nh nhm (khi s dng cc m t nhm *, ? v cp [ v ]); nu khng c tham s file,
mc nh danh sch cc file c trong th mc hin thi s c hin th.
Cc ty chn:
-a : lit k tt c cc file, bao gm c file n.
-l : a ra thng tin y nht v cc file v th mc.
-s : ch ra kch thc ca file, tnh theo khi (1 khi = 1204 byte).
-F : xc nh kiu file (/ = th mc, * = chng trnh kh thi).
-m : lit k cc file c ngn cch nhau bi du ",".
- 26 -
Sau khi son tho xong, g Enter v CTRL+d tr v du nhc lnh, nu khng g
Enter th phi g CTRL+d hai ln.
C th s dng lun lnh cat xem ni dung ca file va son tho:
3.4.3 Cc lnh thao tc trn file
* Sao chp file
Lnh cp c hai dng nh sau:
cp [ty-chn] <file-ngun>... <file-ch>
cp [ty-chn] --target-directory=<th-mc> <file-ngun>...
Lnh ny cho php sao file-ngun thnh file-ch hoc sao chp t nhiu file-ngun
vo mt th mc ch (tham s <file-ch> hay <th-mc>). Dng th hai l mt cch vit
khc i th t hai tham s v tr.
Cc ty chn:
-a, --archive : ging nh -dpR (t hp ba tham s -d, -p, -R, nh di y).
-b, --backup[=CONTROL] : to file lu cho mi file ch nu nh n ang tn
ti.
-d, --no-dereference : duy tr cc lin kt.
-f, --force : ghi file ch ang tn ti m khng nhc nh.
-i, --interactive : c thng bo nhc nh trc khi ghi .
-l, --link : ch to lin kt gia file-ch t file-ngun m khng sao chp.
-p, --preserve : duy tr cc thuc tnh ca file-ngun sang file-ch.
-r : cho php sao chp mt cch quy file thng thng.
-R : cho php sao chp mt cch quy th mc.
-s, --symbolic-link : to lin kt tng trng thay cho vic sao chp cc file.
-S, --suffix=<hu-t> : b qua cc hu t thng thng (hoc c ch ra).
-u, --update : ch sao chp khi file ngun mi hn file ch hoc khi file ch
cha c.
-v, --verbose : a ra thng bo v tin trnh sao chp.
--help : hin th trang tr gip v thot.
File ch c to ra c cng kch thc v cc quyn truy nhp nh file ngun, tuy
nhin file ch c thi gian to lp l thi im thc hin lnh nn cc thuc tnh thi gian s
khc.
Nu v tr ch, m t y tn file ch th ni dung file ngun s c sao chp
sang file ch. Trong trng hp ch a ra v tr file ch c t trong th mc no th tn
ca file ngun s l tn ca file ch.
Nu s dng lnh ny sao mt th mc, s c mt thng bo c a ra cho bit
ngun l mt th mc v v vy khng th dng lnh cp sao chp.
V d sao chp nhiu file cng mt lc vo mt th mc.
# cp vd vd1 newdir
Lu : i vi nhiu lnh lm vic vi file, khi g lnh c th s dng k hiu m t
nhm xc nh mt nhm file lm cho tng hiu lc ca cc lnh .
* i tn file
C php lnh: mv <tn-c> <tn-mi>
Lnh ny cho php i tn file t tn c thnh tn mi.
V d: # mv vd newfile
Trong trng hp file newfile tn ti, ni dung ca file vd s ghi ln ni dung ca
file newfile.
- 30 -
* Xa file
Lnh rm l lnh rt "nguy him" v trong Linux khng c lnh khi phc li nhng g
xa, v th hy cn trng khi s dng lnh ny.
C php lnh: rm [ty-chn] <file>...
Lnh rm cho php xa b mt file hoc nhiu file.
Cc ty chn:
-d, --directory : loi b lin kt ca th mc, k c th mc khng rng. Ch c siu
ngi dng mi c php dng ty chn ny.
-f, --force : b qua cc file (xc nh qua tham s file) khng tn ti m khng cn
nhc nh.
-i, --interactive : nhc nh trc khi xa b mt file.
-r, -R, --recursive : xa b ni dung ca th mc mt cch quy.
-v, --verbose : a ra cc thng bo v tin trnh xa file.
--help : hin th trang tr gip v thot.
Lnh rm cho php xa nhiu file cng mt lc bng cch ch ra tn ca cc file cn xa
trong dng lnh (hoc dng k kiu m t nhm).
* Lnh m t v dng trong file
C php lnh: wc [ty-chn] [file]...
Lnh hin ra s lng dng, s lng t, s lng k t c trong mi file, v mt dng
tnh tng nu c nhiu hn mt file c ch ra. Nu khng c ty chn no th mc nh a
ra c s dng, s t v s k t. Ngm nh khi khng c tn file trong lnh th s c v m
trn thit b vo chun.
Cc tu chn:
-c, --byte, --chars : a ra s k t trong file.
-l, --lines : a ra s dng trong file.
-L, --max-line-length : a ra chiu di ca dng di nht trong file.
-w, --words : a ra s t trong file.
--help : hin th trang tr gip v thot.
* Lnh loi b nhng dng khng quan trng
Trong mt s trng hp khi xem ni dung mt file, chng ta thy c mt s cc thng
tin b trng lp, v d cc dng trng hoc cc dng cha ni dung ging nhau. ng thi
lm gn v thu nh kch thc ca file, c th s dng lnh uniq lit k ra ni dung file
sau khi loi b cc dng trng lp.
C php lnh: uniq [ty-chn] [input] [output]
Lnh uniq s loi b cc dng trng lp k nhau t input (thit b vo chun) v ch gi
li mt dng duy nht trong s cc dng trng lp ri a ra output (thit b ra chun).
Cc tu chn:
-c, --count : m v hin th s ln xut hin ca cc dng trong file.
-d : hin th ln mn hnh dng b trng lp.
-u : hin th ni dung file sau khi xa b ton b cc dng b trng lp khng gi
li mt dng no.
-i : hin th ni dung file sau khi xa b cc dng trng lp v ch gi li duy nht
mt dng c ni dung b trng lp.
-D : hin th tt c cc dng trng lp trn mn hnh.
Nu s dng lnh uniq trn mt file khng c cc dng trng lp th lnh khng c tc
dng.
- 31 -
* Sp xp ni dung file
sort l lnh c cc thng tin v sp xp chng theo th t trong bng ch ci hoc theo
th t c quy nh theo cc ty chn ca lnh.
C php lnh: sort [ty-chn] [file]...
Hin th ni dung sau khi sp xp ca mt hoc nhiu file ra thit b ra chun l tc dng
ca lnh sort. Ngm nh sp xp theo th t t in ca cc dng c trong cc file (tng ch
ci theo bng ch h thng (chng hn ASCII) v k t v tr u tin trong cc dng).
Cc ty chn:
+<s1> [-<s2>] : Hai gi tr s1 v s2 xc nh "kha" sp xp ca cc dng,
thc cht ly xu con t v tr s1 ti v tr s2 ca cc dng so snh ly th t
sp xp cc dng. Nu s2 khng c th coi l ht cc dng; nu s2 nh hn s1
th b qua la chn ny. Ch , nu c s2 th phi cch s1 t nht mt du cch.
-b : b qua cc du cch ng trc trong phm vi sp xp.
-c : kim tra nu file sp xp th thi khng sp xp na.
-d : xem nh ch c cc k t [a-zA-Z0-9] trong kha sp xp, cc dng c cc k
t c bit
(du cch, ?...) c a ln u.
-f : sp xp khng phn bit ch hoa ch thng.
-n : sp xp theo kch thc ca file.
-r : chuyn i th t sp xp hin thi. V d, mun sp xp file vdsort
3.4.4 Cc lnh thao tc theo ni dung file
* Xc nh kiu file
C php lnh: file [ty-chn] [-f file] [-m <file-nh>...] <file>...
Lnh file cho php xc nh v in ra kiu thng tin cha trong file. Lnh file s ln lt
kim tra t kiu file h thng, kiu file magic (v d file m t thit b) ri n kiu file vn
bn thng thng. Nu file c kim tra tha mn mt trong ba kiu file trn th kiu file s
c in ra theo cc dng c bn sau:
text: dng file vn bn thng thng, ch cha cc m k t ASCII.
executable: dng file nh phn kh thi.
data: thng l dng file cha m nh phn v khng th in ra c.
Cc tu chn:
-b : cho php ch a ra kiu file m khng a km theo tn file.
-f tn-file : cho php hin th kiu ca cc file c tn trng vi ni dung trn mi
dng trong file tn-file. kim tra trn thit b vo chun, s dng du "-".
-z : xem kiu ca file nn.
* Xem ni dung file
phn trc, chng ta c dp lm quen vi lnh cat thng qua tc dng to file ca
lnh. Phn ny gii thiu tc dng ch yu ca lnh cat: l tc dng xem ni dung ca mt
file.
C php lnh: cat [ty-chn] <tn file>
Cc ty chn:
-A, --show-all : ging nh ty chn -vET.
-b, --number-nonblank : hin th thm s th t trn mi dng (b qua dng
trng).
-e : ging nh ty chn -vE.
-E, --show-ends : hin th du "$" ti cui mi dng.
-n, --number : hin th s th t ca mi dng (k c dng trng).
- 32 -
C hai kiu sao lu l sao lu theo kiu ton b (full backup) v sao lu theo kiu tng
dn (incremental backup). Sao lu ton b thc hin vic sao mi th trn h thng file, bao
gm tt c cc file. Sao lu tng dn ch sao lu nhng file c thay i hoc c to ra k
t t sao lu cui cng.
C php lnh: tar [ty-chn] [<file>,...] [<th-mc>,...]
Lnh (chng trnh) tar c thit k to lp mt file lu tr duy nht. Vi tar, c
th kt hp nhiu file thnh mt file duy nht c kch thc ln hn, iu ny s gip cho vic
di chuyn file hoc sao lu bng t tr nn d dng hn nhiu.
Cc ty chn:
-c, --create : to file lu tr mi.
-d, --diff, --compare : tm ra s khc nhau gia file lu tr v file h thng c
lu tr.
--delete : xa t file lu tr (khng s dng cho bng t).
-r, --append : chn thm file vo cui file lu tr.
-t, --list : lit k ni dung ca mt file lu tr.
-u, --update : ch thm vo file lu tr cc file mi hn cc file c.
-x, --extract, --get : tch cc file ra khi file lu tr.
-C, --directory tn-th-mc : thay i n th mc c tn l tn-th-mc.
--checkpoint : a ra tn th mc khi c file lu tr.
-f, --file [HOSTNAME:]file : ty chn ny xc nh tn file lu tr hoc thit b
lu tr l file (nu khng c ty chn ny, mc nh ni lu tr l /dev/rmt0).
-h, --dereference : khng hin cc file lin kt m hin cc file m chng tr ti.
-k, --keep-old-files : gi nguyn cc file lu tr ang tn ti m khng ghi
file lu tr mi ln chng.
-K, --starting-file file : bt u ti file trong file lu tr.
-l, --one-file-system : to file lu tr trn h thng file cc b.
-M, --multi-volume : ty chn ny c s dng khi dung lng ca file cn
sao lu l ln v khng cha ht trong mt n v lu tr vt l.
-N, --after-date DATE, --newer DATE : ch lu tr cc file mi hn cc file
c lu tr trong ngy DATE.
--remove-files : xa file gc sau khi sao lu chng vo trong file lu tr.
--totals : a ra tng s byte c to bi ty chn --create.
-v, --verbose : hin th danh sch cc file c x l.
3.5.2 Nn d liu
Vic sao lu rt c ch nhng ng thi n cng chim rt nhiu khng gian cn thit
sao lu. gim khng gian lu tr cn thit, c th thc hin vic nn d liu trc khi sao
lu, sau thc hin vic gii nn nhn li ni dung trc khi nn.
Trong Linux c kh nhiu cch nn d liu, ti liu ny gii thiu hai phng cch
ph bin l gzip v compress.
* Nn, gii nn v xem ni dung cc file vi lnh gzip, gunzip v zcat
C php cc lnh:
gzip [ty-chn] [ -S suffix ] [ < file> ]
gunzip [ty-chn] [ -S suffix ] [ <file> ]
zcat [ty-chn] [ <file> ]
Lnh gzip s lm gim kch thc ca file v khi s dng lnh ny, file gc s b thay
th bi file nn vi phn m rng l .gz, cc thng tin khc lin quan n file khng thay i.
Nu khng c tn file no c ch ra th thng tin t thit b vo chun s c nn v gi ra
thit b ra chun. Trong mt vi trng hp, lnh ny s b qua lin kt tng trng.
- 38 -
- 40 -
Son tho file /etc/passwd bng vipw. Lnh vipw m trnh son tho trn h thng v
hiu chnh bn sao tm ca file /etc/passwd. Vic s dng file tm v kha file s c tc dng
nh mt c ch kha ngn vic hai ngi dng cng son tho file mt lc. Lc s thm
dng thng tin mi v ngi dng cn to. Hy cn thn trong vic son tho trnh nhm ln.
Ring trng mt khu nn trng v to mt khu sau. Khi file ny c lu, vipw s kim
tra s ng nht trn file b thay i. Nu tt c mi th dng nh thch hp th c ngha l
file /etc/passwd c cp nht.
V d: thm ngi dng c tn l new, ch s ngi dng 503, ch s nhm l 100, th
mc c nhn l /home/new v shell ng nhp l shell bash:
# vipw
mail:x:8:12:mail:/var/spool/mail:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
bien:x:500:0:Nguyen Thanh Bien:/home/bien:/bin/bash
sang:x:17:100:Nguyen Minh Sang:/home/sangnm:/bin/bash
lan:x:501:0:Lan GNU:/home/lan:/bin/bash
new::503:100:them mot nguoi moi:/home/new:/bin/bash
To th mc c nhn ca ngi dng mi
# mkdir /home/new
Sao chp cc file t th mc /etc/skel/ (y l th mc lu tr cc file cn thit
cho ngi dng) vo file c nhn va to
Thay i quyn s hu v cc quyn truy nhp file /home/new vi cc lnh
chown v chmod
# chown new /home/new
# chmod go=u,go-w /home/new
Thit lp mt khu ca ngi dng:
# passwd
new passwd:
Sau khi thit lp mt khu cho ngi dng bc cui cng, ti khon ngi dng s
lm vic. Nn thit lp mt khu ngi dng bc cui cng, nu khng h c th v tnh
ng nhp trong khi ang sao chp cc file.
4.1.2.3. Thay i thuc tnh ngi dng
Trong Linux c rt nhiu lnh cho php thay i mt s cc thuc tnh ca ti khon
ngi dng nh:
chfn: thay i thng tin c nhn ca ngi dng.
chsh: thay i shell ng nhp.
passwd: thay i mt khu.
Mt s cc thuc tnh khc s phi thay i bng tay. V d, thay i tn ngi dng,
cn son tho li trc tip trn file /etc/passwd (vi lnh vipw).
Nhng c mt lnh tng qut cho php c th thay i bt k thng tin no v ti khon
ngi dng, l lnh usermod.
C php lnh: usermod [ty-chn] <tn-ng-nhp>
Lnh usermod sa i cc file ti khon h thng theo cc thuc tnh c xc nh
trn dng lnh.
Cc ty chn:
-c, comment : son tho trng thng tin v ngi dng.
-d, home_dir : to th mc ng nhp cho ngi dng.
- 43 -
- 46 -
mt tin trnh mi v thay th tin trnh mi vi chng trnh c t tn trn dng lnh.
Ni mt cch khc shell s chy chng trnh c t tn nh mt tin trnh khc. ly
thng tin v tt c cc tin trnh ang chy trn h thng ca chng ta, chng ta cn chy tin
ch c tn l ps
4.3.1.3. Cc lnh x l tin trnh
* Lnh fg v lnh bg
Trong phn trc, cch thc g phm CTRL+z tm dng mt tin trnh c gii
thiu. Linux cn ngi dng cch thc chy mt chng trnh di ch nn
(background) - s dng lnh bg - trong khi cc chng trnh khc ang chy, v chuyn
mt chng trnh vo trong ch nn - dng k hiu &.
Nu mt tin trnh hot ng m khng a ra thng tin no trn mn hnh v khng
cn nhn bt k thng tin u vo no, th c th s dng lnh bg a n vo trong ch
nn ( ch ny n s tip tc chy cho n khi kt thc). Khi chng trnh cn a thng
tin ra mn hnh hoc nhn thng tin t bn phm, h thng s t ng dng chng trnh v
thng bo cho ngi dng. Cng c th s dng ch s iu khin cng vic (job control)
lm vic vi chng trnh no mun. Khi chy mt chng trnh trong ch nn, chng
trnh c nh s th t (c bao bi du ngoc vung []), theo sau l ch s ca tin
trnh.
Sau c th s dng lnh fg + s th t ca chng trnh a chng trnh tr li
ch ni v tip tc chy.
c mt chng trnh (hoc mt lnh ng) t ng chy trong ch nn, ch cn
thm k hiu '&' vo cui lnh.
Trong mt s h thng, khi tin trnh nn kt thc th h thng s gi thng bo ti
ngi dng, nhng trn hu ht cc h thng, khi tin trnh trn nn hon thnh th h thng
s ch cho n khi ngi dng g phm Enter th mi hin th du nhc lnh mi km theo
thng bo hon thnh tin trnh (thng th mt tin trnh hon thnh sau khong 20 giy).
* Hin th cc tin trnh ang chy
Linux cung cp cho ngi dng hai cch thc nhn bit c nhng chng trnh no
ang chy trong h thng. Cch d hn, l lnh jobs s cho bit cc tin trnh no dng
hoc l c chy trong ch nn.
Cch phc tp hn l s dng lnh ps. Lnh ny cho bit thng tin y nht v cc
tin trnh ang chy trn h thng.
V d:
# ps
PID
TTY
TIME
CMD
7813
pts/0
00:00:00
bash
7908
pts/0
00:00:00
ps
#
Trong :
PID - ch s ca tin trnh,
TTY - tn thit b u cui trn tin trnh c thc hin,
TIME - thi gian chy tin trnh,
CMD - lnh khi to tin trnh
C php lnh: ps [ty-chn]
Lnh ps c mt lng qu phong ph cc ty chn c chia ra lm nhiu loi. Di
y l mt s cc ty chn hay dng.
Cc ty chn n gin:
- 48 -
- 51 -
CU HI V BI TP
1. Trnh by cu trc thng tin lu tr v ti khon ngi ca mt dng trong trong file
/etc/passwd
2. Trnh by cu trc thng tin lu tr v nhm ti khon ngi dng trong trong file
/etc/group
3. Thc hnh cc lnh lin quan n qun l nhm, qun l ti khon ngi dng.
- 52 -
a/ Mode son
Mode son lm vic trc tip vi mt th v gi ngay cho ngi khc. Mode son thc
cht l s dng lnh mail c tham s:
$mail < tn_ngi_nhn
Lnh ny cho php son v gi th cho ngi nhn c tn c ch.
Sau khi g lnh, mn hnh b xa v con tr son tho nhp nhy gc trn, tri
ngi dng g ni dung th.
kt thc son th, hy g ctrl-d, mn hnh ca mail bin mt v du mi ca shell li
xut hin.
Ch : Dng sau y c dng gi th son trong ni dung mt file no (ch
du "<" ch dn thit b vo chun l ni dung file thay v cho bn phm):
$mail tn_ngi_nhn < tn_file_ni_dung_th
Cch lm trn y hay c s dng trong gi / nhn th in t hoc lin kt truyn
thng v cho php tit kim c thi gian kt ni vo h thng, c bit chi ph phi tr khi
kt ni l ng k.
b/ Mode lnh
Nh ni s dng mode lnh ca mail qun l hp th. Vo mail theo mode lnh
khi dng lnh mail khng tham s:
$mail
Sau khi g lnh, mn hnh mail mode lnh c hin ra vi du mi ca mode lnh.
(ph bin l du chm hi "?") Ti y ngi dng s dng cc lnh ca mail qun l h
thng th ca mnh.
Cn tr gip g du chm hi (mn hnh c hai du ??): ? mn hnh hin ra dng sau:
<s>
Hin th s <s>
(du cch)
Hin th ngay pha trc
+
Hin th ngay tip theo
l cmd
thc hin lnh cmd
dq
xa th hin thi v ra khi mail
m user
gi th hin thi cho ngi dng
s tn-file
ghi th hin thi vo file c tn
r [tn-file]
tr li th hin thi (c th t file)
d <s>
xa th s
u
khi phc th hin thi
u <s>
khi phc th s
m <user>... chuyn tip th ti cc ngi dng khc
q
ra khi mail
Thc hin cc lnh theo ch dn trn y qun tr c hp th ca c nhn.
5.1.3. Lnh talk
Trong Linux cho php s dng lnh talk thay th cho lnh write.
5.2 Cu hnh Card giao tip mng
cc my c th giao tip c vi nhau trong mng theo giao thc TCP/IP, thit b
dng lm phng tin giao tip l Card giao tip mng (network card). qun l thit b
ny Linux cung cp lnh ifconfig. Lnh ny dng xem cc thng tin v cu hnh mng hin
thi ca my cng nh gn cc a ch cho cc card giao tip mng (interface). Ngoi ra ta
cng c th dng lnh ny kch hot hoc tt mt card mng.
/sbin/ifconfig <giao din> [ <a ch> ] [ arp | -arp][broadcast <a ch>]
[netmask <mt n mng> ]
- 54 -
Trong :
<giao din> : tn ca thit b giao tip mng, chng hn eth0 cho card mng u
tin, eth1 cho card mng th hai.
<a ch> : a ch mng s gn cho giao din ny.
up : tu chn ny s kch hot giao din c ch ra.
down : tu chn ny s tt giao din c ch ra.
arp | -arp : cho php hay cm giao thc ARP trn giao din ny.
broadcast <a ch> : xc nh a ch qung b cho giao din ny.
netmask <mt n mng> : xc nh mt n mng cho giao din ny.
xem cu hnh ca my hin ti ta dng lnh
# ifconfig
Mun ch xem cc thng tin v mt card mng no thi ta dng lnh:
# ifconfig eth0
Mun kch hot mt card mng ta dng lnh
# ifconfig eth0 up
Mun tt mt card mng ta dng lnh
# ifconfig eth0 down
Mun t li a ch cho mt card mng ta dng lnh:
# ifconfig eth0 203.162.9.154 netmask 255.255.255.248
Ngoi ra nu my tnh c ci giao din GNOME cng cc package qun l mng ca
GNOME th ta c th s dng lnh c giao din ho gip cho vic cu hnh cc tham s
card mng d dng hn. c cng c ny ta phi ci t package redhat-config-networkxxx.rpm trong xxx l s hiu phin bn ca chng trnh.
Trong giao din ho GNOME ta nh lnh redhat-config-network, mt hp thoi s
hin ln cho php ta thay i cc tham s cho tng card mng c ci trn my.
5.3. Cc dch v mng
5.3.1 H thng tin mng NIS
Khi s dng h thng mng ni chung, mc ch ca chng ta l lm cho mi trng
mng tr nn trong sut i vi ngi dng. Mt trong nhng im quan trng l lm cho cc
d liu quan trng nh l thng tin v ngi dng, v cc trm trong mng l ng nht trn
tt c cc trm lm vic. NIS (Network Information System) l mt ng dng cung cp cc
tin ch truy nhp c s d liu phn phi thng tin, chng hn nh d liu trong
/etc/passwd v /etc/group cho tt c cc my trm trn mng. iu ny lm cho mng tr nn
mt h thng duy nht. NIS c xy dng trn vic s dng dch v RPC (Remote
Procedure Call). N bao gm mt th vin my ch, th vin my trm v cc cng c qun
tr. Ban u NIS c gi l nhng trang vng (Yellow Pages YP). Cng vi s pht trin
ca NIS m c s xut hin khc nhau trong cc phin bn. NIS truyn thng c xy dng
trn th vin libc 4/5. NIS+ l s m rng ca NIS song vn h tr bo mt thng tin. NYS l
mt phin bn chun h tr c NIS v NIS+.
Hot ng ca NIS: NIS lu tr c s d liu v thng tin qun tr mng trong cc file
maps. Cc file ny c t trn mt NIS server trung tm, t cc NIS client c th truy
nhp n cc thng tin thng qua dch v RPC. Cc file maps thng l cc file theo nh
dng DMB, mt dng c s d liu n gin. Cc file maps c to ra t cc file vn bn
nh /etc/hosts hay /etc/passwd. Mi file vn bn ny c th c nhiu file maps khc nhau ty
thuc vo kha ca n.
V d nu kha l tn my trm th ta c file hosts.byname, nu kha l a ch IP th ta
c file hosts.byname.
- 55 -
File ch
File maps tng ng
/etc/hosts
hosts.addr Hosts.byname
/etc/networks
network.byname network.byaddr
/etc/passwd
passwd.byname passwd.byid
/etc/groups
Groups.byname group.byid
/etc/services
service.byname service.bynumber
/etc/rpc
rpc.bynumber rpc.byname
/etc/protocol
protocol.byname protocol.bynumber
/usr/lib/aliases mail.aliases
Mi mt file maps c mt tn ngn hn nh i vi ngi dng gi l cc
nickname. hin th danh sch cc nickname ta dng lnh ypcat:
#ypcat -x
Cc chng trnh my ch ca NIS thng c tn l ypserv. Trong cc mng c nh ta
ch cn mt my lm my ch NIS. Mt min (domain) NIS l mt tp hp cc my trm
c qun l bi mt my ch NIS. hin th v t tn cho mt min ta s dng lnh:
#domainname nis-domain
Tn min NIS s cho bit my ch ca min no cc ng dng s truy cp nhn
thng tin cn thit. bit c my ch no trong mng l NIS server, cc chng trnh ng
dng phi hi ypbind, mt chng trnh chy ngm c nhim v pht hin cc NIS server trn
mng. N s pht cc gi tin qung b tm cc my ch NIS trn mng hoc s dng cc
thng tin trong cc file cu hnh ngi qun tr cung cp.
5.3.2. Ci t v cu hnh cho my ch NIS
Vi NIS ta c khi nim my ch NIS chnh v my ch NIS ph, mt min ch c th
c mt my ch NIS chnh. Khi trong mng c nhiu my trm lm vic, mt my ch NIS c
th b qu ti, hoc khi c s c th ton b h thng mng s khng th hot ng c.
Cc my ch NIS ph s gip gii quyt vn ny. Vic ci t cc my ch NIS ph ch
khc my ch NIS chnh ch to ra cc file map. Chng khng c to ra bng makedbm
m c ly v t my ch chnh.
By gi ta tm hiu cch ci t my ch NIS chnh. Trc tin ta phi ci t phn
mm ypserv ln my tnh. Chng trnh s nm trong package ypserv-xxx.rpm. Ta c th ci
t bng lnh:
#rpm -ivh ypserv-xxx.rpm
#mkdir /var/yp/nis-domain
to cc file c s d liu ta s dng chng trnh makedbm. Do phi m bo
chng trnh c ci trn my, vic to lp s c tin hnh thng qua mt makefile.
Trong file ny s cha cc lnh cn thit to ra file maps. Sau khi ci t phn mm ta
dng lnh make:
#domainname nis-domain
#cd /var/yp
#make
Cc file map khng t ng cp nht mi khi ta sa thng tin qun tr. Do vy mi khi
c s thay i, ta cn thc hin li lnh make cp nht s sa i.
5.3.3. Ci t cc my trm NIS
Trc tin ta cn ci t phn mm ypbind ln my trm bng lnh:
#rpm -ivh ypbind-xxx.rpm
- 56 -
i cc thuc tnh khc nh shell Chng trnh ny c thc hin khi khi ng h thng
bng cch chy thm dch v rpc.yppasswd. V thi quen ngi dng c th g lnh passwd
khi mun thay i mt khu. Gii php y l thay i passwd bng mt lin kt n
yppasswd.
#cd /bin
#mv passwd passwd.old
#ln yppasswd passwd
5.4 H thng file trn mng
Linux c dch v chia s file trn mng my tnh. Khi ta mun c kh nng cc my
Linux c th chia s ti nguyn l cc file vi nhau, dch v NFS s cung cp kh nng ny.
Dch v ny cho php chia s file cho cc ngi dng trn mng LAN, cc file ny c kh
nng xut hin i vi cc ngi dng nh l cc file trn my ca mnh.
5.4.1 Ci t NFS
ci t dch v ny ta cn chun b mt package l nfs-utils-xxx.rpm trong xxx l
s hiu phin bn. ng nhp vi quyn root v s dng lnh:
# rpm ivh nfs-utils-xxx.rpm
Nu khng c li thng bo li th vic ci t thnh cng.
NFS s dng th tc RPC (Remote Procedure Calls) gi v nhn yu cu gia cc
my ch v my trm trn mng, do vy dch v nh x cng portmap (dch v qun l cc
yu cu RPC) phi c khi ng trc. Trn my ch NFS d nh s chia s cc file d
liu phi khi ng hai dch v nfs v portmap bng lnh:
# service nfs start
# service portmap start
NFS hot ng th ta cn phi khi ng cc dch v sau:
Portmapper: tin trnh ny khng lm vic trc tip vi NFS m tham gia qun l
cc yu cu RPC t my trm gi n.
Mountd: tin trnh ny s nh x cc file trn my ch ti cc th mc trn my
trm yu cu. N s hu b nh x ny nu c lnh umount t my trm.
Nfs: l tin trnh chnh thc hin cc nhim v ca giao thc NFS. N c nhim
v cung cp cho cc my trm cc th mc hoc file c yu cu.
Ta c th kim tra cc thng tin v cc dch v NFS bng lnh:
#rpcinfo -p
5.4.2 Khi ng v dng NFS
Vic khi ng dch v NFS cng kh n gin v c gii thiu trn bng cch
khi ng portmap v nfs.
# service nfs start
hoc
#/etc/init.d/nfs start
Vic dng (tt) dch v ny cng kh n gin, ta dng lnh sau:
#service nfs stop
hoc
#/etc/init.d/nfs stop
Ta c th t cho dch v ny c t ng khi ng khi ta khi ng my tnh bng
cch dng lnh:
#setup
- 59 -
Sau chn System services, tip ta s nhn c mt danh sch cc dch v hin
ang c trong h thng. Mun cho dch v no c t ng khi ng ta ch cn chn dch
v , y ta chn dch v c tn nfs. Chn OK v cui cng chn Quit.
5.4.3 Cu hnh NFS server v Client
Cu hnh nfs ta ch cn sa file /etc/exports, y l file cha danh sch cc th mc
c chia s cho cc my khc. N cng ng thi cha danh sch cc my trm c quyn
c truy cp v quyn truy cp ca cc my trm ny. Mt ch v nh dng ca file ny
nh sau: cc dng trng s c b qua, cc dng bt u bng du # c coi l cc dng
ch thch v s c b qua. Cc dng di qu ta c th ngt trn nhiu dng bng cch s
dng du ngt dng (\).
Cu trc ca mi dng khai bo trong file ny nh sau:
Tn th mc
Danh sch a ch cc my Danh sch a ch cc my
trm, quyn truy nhp ca trm, quyn truy nhp ca
cc my trm
cc my trm
/software/project 192.168.0.172(rw)
192.168.0.127(ro)
/software/setup
192.168.0.0/28(ro)
Trong , cc tham s c ngha nh sau: tn th mc l ng dn n th mc ta
mun chia s cho cc my khc. Danh sch a ch cc my trm, c th l a ch IP hoc tn
my (c lit k trong file /etc/hosts). Trong trng hp mun lit k danh sch cc my c
a ch gn k nhau trong mt khong no ta c th c cch vit rt gn nh sau: chng
hn ta mun lit k cc a ch ca my trm trong khong t 192.168.0.0 n cc my trm
c a ch 192.168.0.15 ta ch cn vit 192.168.0.0/28. Quyn truy nhp c vit di dng
(rw) ch quyn c v ghi, cn (ro) th cc my trm ch c quyn c trn th mc ,
(noaccess) cm cc my trm truy nhp vo cc th mc con ca th mc chia s. Ch , gia
a ch ca my v quyn truy nhp khng c du cch.
5.4.4 S dng mount
c d liu trn cc th mc c chia s ny ta c th dng cch sau: ta s dng
lnh mount, nhng trong trng hp ny ta phi cn quyn qun tr (root). C php ca lnh
s nh sau:
#mount <tn_my_ch:/tn_th_mc_chia_s> </tn_th_mc_cn_nh_x>
Lu , trc khi ra lnh ny ta phi to ra th mc cn nh x (trong trng hp n
cha tn ti).
V d, nh x th mc /software/project trn mt my ch 192.168.0.33 vo th mc
/mnt/project trn my hin ti ta dng lnh sau:
- 60 -
- 61 -
- Cc dng lnh bt u bng du # chnh l dng ch thch, b b qua khi shell thc
hin chng trnh,
- Thng thng cc b dch lnh shell l sh (/bin/sh) hoc ksh (/bin/ksh)
thc hin mt chng trnh shell ta c cc cch sau y:
$sh <<tn chng trnh>
hoc
$sh <tn chng trnh>
hoc nh i mod ca chng trnh:
$chmod
u+x <tn chng trnh>
v chy chng trnh
$<tn chng trnh>
- Phn ln cc yu t ngn ng trong lp trnh shell l tng ng vi lp trnh C.
* Cc bin trong file script
Trong shell c th k ti 3 loi bin:
- Bin mi trng (bin shell c bit, bin t kha, bin shell xc nh trc hoc bin
shell chun) c lit k nh sau (cc bin ny thng gm cc ch ci hoa):
HOME : ng dn th mc ring ca ngi dng,
MAIL: ng dn th mc cha hp th ngi dng,
PATH: th mc dng tm cc file th hin ni dung lnh,
PS1: du mi ban u ca shell (ngm nh l $),
PS2: du mi th 2 ca shell (ngm nh l >),
PWD: Th mc hin ti ngi dng ang lm,
SHELL: ng dn ca shell (/bin/sh hoc /bin/ksh)
TERM: S hiu gn cho trm cui,
USER: Tn ngi dng vo h thng,
Trong .profile th mc ring ca mi ngi dng thng c cc cu lnh dng:
<bin mi trng> = <gi tr>
- Bin ngi dng: Cc bin ny do ngi dng t tn v c cc cnh thc nhn gi tr
cc bin ngi dng t bn phm (lnh read).
Bin c t tn gm mt xu k t, quy tc t tn nh sau: k t u tin phi l
mt ch ci hoc du gch chn (_), sau tn l mt hay nhiu k t khc. to ra mt bin
ta ch cn gn bin mt gi tr no . Php gn l mt du bng (=). V d:
myname=TriThanh
Ch : khng c c du cch (space) ng trc hay ng sau du bng. Tn bin l
phn bit ch hoa ch thng. truy xut n mt bin ta dng c php sau; $tn_bin.
Chng hn ta mun in ra gi tr ca bin myname trn ta ch cn ra lnh: echo $myname.
Mt s v d v cch t tn bin:
$ no=10
# y l mt cch khai bo hp l
Nhng cch khai bo di y l khng hp l
$ no =10
# c du cch sau tn bin
$ no= 10
# c du cch sau du =
$ no = 10
# c du cch c ng trc ln ng sau du =
Ta c th khai bo mt bin nhng n c gi tr NULL nh trong nhng cch sau:
$ vech=
$ vech=""
- 63 -
M t
nh hng u vo
nh hng u ra
Bt u subshell
Kt thc subshell
K t
~
`
;
#
M t
Th mc home ca user hin ti
Thay th lnh
Chia ct lnh
Li ch gii
- 64 -
K t
M t
K t
M t
|
K hiu dn
Trch dn mnh
\
Dng hin k t c bit
Trch dn yu
&
Thi hnh lnh chy ch ngm
$
Biu thc bin
{
Bt u khi lnh
*
K t i din cho chui
}
Kt thc khi lnh
?
K t i din cho mt k t
Cc k t c bit ca bash
Du chia ct lnh, ; , cho php thc hin nhng lnh bash phc tp nh trn mt dng.
Nhng quan trng hn, n l kt thc lnh theo l thuyt POSIX.
K t ch gii, # , khin bash b qua mi k t t cho n ht dng. im khc nhau
gia cc k t trch dn mnh v trch dn yu, v , tng ng l: trch dn mnh bt bash
hiu tt c cc k t theo ngha en; trch dn yu ch bo h cho mt vi k t c bit ca
bash .
6.2. Mt s lnh lp trnh trn shell
6.2.1. S dng cc ton t bash
Cc ton t string
Cc ton t string, cng c gi l cc ton t thay th trong ti liu v bash, kim tra
gi tr ca bin l cha gn gi tr hoc khng xc nh. Bng di l danh sch cc ton
t ny cng vi miu t c th cho chc nng ca tng ton t.
Ton t
Chc nng
${var:- word}
Nu bin tn ti v xc nh th tr v gi tr ca n, nu
khng th tr v word
${var:= word}
Nu bin tn ti v xc nh th tr v gi tr ca n, nu
khng th gn bin thnh word, sau tr v gi tr ca n
${var:+ word}
Nu bin tn ti v xc nh th tr v word, cn khng
th tr v null
${var:?message}
Nu bin tn ti v xc nh th tr v gi tr ca n, cn
khng th hin th bash: $var:$message v thot ra khi
lnh hay tp lnh hin thi.
${var: offset[:length]}
Tr v mt xu con ca var bt u ti offset ca di
length. Nu length b b qua, ton b xu t offset s
c tr v.
Cc ton t string ca bash
minh ho, hy xem xt mt bin shell c tn l status c khi to vi gi tr
defined. S dng 4 ton t string u tin cho kt qu status nh sau:
$echo ${status:-undefined}
defined
$echo ${status:=undefined}
defined
$echo ${status:+undefined}
undefined
$echo ${status:?Dohhh\! undefined}
defined
By gi s dng lnh unset xo bin status, v thc hin vn cc lnh , c
output nh sau:
- 65 -
$unset status
$echo ${status:-undefined}
undefined
$echo ${status:=undefined}
undefined
$echo ${status:+undefined}
undefined
$unset status
$echo ${status:?Dohhh\! undefined}
bash:status Dohhh! Undefined
Cn thit unset status ln th hai v lnh th ba, echo ${status:+undefined}, khi to
li status thnh undefined.
Cc ton t substring c trong danh sch bng trn c bit c ch. Hy xt bin
foo c gi tr Bilbo_the_Hobbit. Biu thc ${foo:7} tr v he_Hobbit, trong khi ${foo:7:5} li
tr v he_Ho.
Cc ton t Pattern-Matching
Cc ton t pattern-matching c ch nht trong cng vic vi cc bn ghi di bin
hay cc xu c nh dng t do c nh gii bi cc k t c nh. Bin mi trng
$PATH l mt v d. Mc d n c th kh di, cc th mc ring bit c phn nh bi
du hai chm. Bng di l danh sch cc ton t Pattern-Matching ca bash v chc nng
ca chng.
Ton t
Chc nng
${var#pattern}
Xo b phn khp (match) ngn nht ca pattern trc var
v tr v phn cn li
${var##pattern}
Xo b phn khp (match) di nht ca pattern trc var v
tr v phn cn li
${var%pattern}
Xo b phn khp ngn nht ca pattern cui var v tr v
phn cn li
${var%%pattern}
Xo b phn khp di nht ca pattern cui var v tr v
phn cn li
${var/pattern/string}
Thay phn khp di nht ca pattern trong var bng string.
Ch thay phn khp u tin. Ton t ny ch c trong bash
2.0 hay ln hn.
${var//pattern/string} Thay phn khp di nht ca pattern trong var bng string.
Thay tt c cc phn khp. Ton t ny c trong bash 2.0
hoc ln hn.
Cc ton t bash Pattern-Matching
Thng thng quy tc chun ca cc ton t bash pattern-matching l thao tc vi file
v tn ng dn. V d, gi s ta c mt tn bin shell l mylife c gi tr l
/usr/src/linux/Documentation/ide.txt (ti liu v trnh iu khin a IDE ca nhn). S dng
mu /* v */ ta c th tch c tn th mc v tn file.
#!/bin/bash
############################################
myfile=/usr/src/linux/Documentation/ide.txt echo ${myfile##*/}= ${myfile##*/}
echo basename $myfile = $(basename $myfile)
echo ${myfile%/*}= ${myfile%/*}
echo dirname $myfile = $(dirname $myfile)
- 66 -
statements]
fi
u tin, ta cn phi chc chn rng mnh hiu if kim tra trng thi thot ca cu lnh
last trong condition. Nu n l 0 (true), sau statements s c thi hnh, nhng nu n
khc 0, th mnh else s c thi hnh v iu khin nhy ti dng u tin ca m fi. Cc
mnh elif (tu chn) (c th nhiu tu ) s ch thi hnh khi iu kin if l false. Tng t,
mnh else (tu chn) s ch thi hnh khi tt c else khng tha mn. Nhn chung, cc
chng trnh Linux tr v 0 nu thnh cng hay hon ton bnh thng, v khc 0 nu ngc
li, v th khng c hn ch no c.
Ch : Khng phi tt c chng trnh u tun theo cng mt chun cho gi tr tr v,
v th cn kim tra ti liu v cc chng trnh ta kim tra m thot vi iu kin if. V d
chng trnh diff, tr v 0 nu khng c g khc nhau, 1 nu c s khc bit v 2 nu c vn
no . Nu mt cu iu kin hot ng khng nh mong i th hy kim tra ti liu v
m thot .
Khng quan tm n cch m chng trnh xc nh m thot ca chng, bash ly 0 c
ngha l true hoc bnh thng cn khc 0 l false. Nu ta cn c th kim tra mt m thot
ca lnh, s dng ton t $? ngay sau khi chy lnh. $? tr v m thot ca lnh chy ngay
lc .
Phc tp hn, bash cho php ta phi hp cc m thot trong phn iu kin s dng cc
ton t && v || c gi l ton t logic AND v OR. C php y cho ton t AND nh
sau:
command1 && command2
Cu lnh command2 ch c chy khi v ch khi command1 tr v trng thi l s 0
(true).
C php cho ton t OR th nh sau:
command1 || command2
Cu lnh command2 ch c chy khi v ch khi command1 tr li mt gi tr khc 0
(false).
Ta c th kt hp li c 2 loi ton t li c mt biu thc nh sau:
command1 && comamnd2 || command3
Nu cu lnh command1 chy thnh cng th shell s chy lnh command2 v nu
command1 khng chy thnh cng th command3 c chy.
V d:
$ rm myf && echo "File is removed successfully" || echo "File is not removed"
Nu file myf c xa thnh cng (gi tr tr v ca lnh l 0) th lnh "echo File is
removed successfully" s c thc hin, nu khng th lnh "echo File is not removed" c
chy.
Gi s trc khi ta vo trong mt khi m, ta phi thay i mt th mc v copy mt
file. C mt cch thc hin iu ny l s dng cc ton t if lng nhau, nh l on m
sau:
if cd /home/kwall/data then
if cp datafile datafile.bak then
# more code here
fi
fi
Tuy nhin, bash cho php ta vit on m ny sc tch hn nhiu nh sau:
if cd /home/kwall/data && cp datafile datafile.bak then
# more code here fi
- 68 -
C hai on m u thc hin cng mt chc nng, nhng on th hai ngn hn nhiu,
gn nh v n gin. Mc d if ch kim tra cc m thot, ta c th s dng cu trc [] lnh
test kim tra cc iu kin phc tp hn. [condition] tr v gi tr biu th condition l true
hay false. test cng c tc dng tng t.
Mt v d khc v cch s dng cu trc if:
#!/bin/sh
# Script to test if..elif...else
#
if [ $1 -gt 0 ]; then echo "$1 is positive"
elif [ $1 -lt 0 ]
then
echo "$1 is negative"
elif [ $1 -eq 0 ]
then
echo "$1 is zero"
else
echo "Opps! $1 is not number, give number"
fi
S lng cc php ton iu kin ca bin hin ti khong 35, kh nhiu v hon chnh.
Ta c th kim tra cc thuc tnh file, so snh cc xu v cc biu thc s hc.
Ch : Cc khong trng trc du m ngoc v sau du ng ngoc trong [condition]
l cn phi c. y l iu kin cn thit trong c php shell ca bash.
Danh sch cc ton t test file ph bin nht:
Ton t
iu kin true
-d file
file tn ti v l mt th mc
-e file
file tn ti
-f file
file tn ti v l mt file bnh thng (khng l mt th
mc hay mt file c bit)
-r file
file cho php c
-s file
file tn ti v khc rng
-w file
file cho php ghi
-x file
file kh thi hoc nu file l mt th mc th cho php tm
kim trn file
-O file
file ca ngi dng hin ti
-G file
file thuc mt trong cc nhm ngi dng hin ti l
thnh vin
file1 -nt file2
file1 mi hn file2
file1 -ot file2
file1 c hn file2
V d chng trnh shell cho cc ton t test file trn cc th mc trong bin $PATH.
M cho chng trnh descpath.sh nh sau:
#!/bin/bash
################################
IFS=:
for dir in $PATH;
do
echo $dir
if [ -w $dir ]; then
echo -e "\tYou have write permission in $dir"
- 69 -
else
echo e \tYou dont have write permission in $dir
fi
if [ -0 $dir ]; then
echo -e "\tYou own $dir"
else
echo e \tYou dont own $dir
fi
if [ -G $dir ]; then
echo -e "\tYou are a member of $dir's group"
else
echo -e "\tYou aren't a member of $dir's group"
fi
done Chng trnh descpath.sh
Vng lp for (gii thiu trong phn di) s duyt ton b cc ng dn th mc trong
bin PATH sau kim tra cc thuc tnh ca th mc . Kt qu nh sau (kt qu c th
khc nhau trn cc my khc nhau do gi tr ca bin PATH khc nhau):
/usr/local/bin
You dont have write permission in /usr/local/bin
You dont own /usr/local/bin
You arent a member of /usr/local/bins group
/bin
You dont have write permission in /bin
You dont own /bin
You arent a member of /bins group
/usr/bin
You dont have write permission in /usr/bin
You dont own /usr/bin
You arent a member of /usr/bins group
/usr/X11R6/bin
You dont have write permission in /usr/X11R6/bin
You dont own /usr/X11R6/bin
You arent a member of /usr/X11R6/bins group
/home/kwall/bin
You have write permission in /home/kwall/bin
You own /home/kwall/bin
You are a member of /home/kwall/bins group
/home/kwall/wp/wpbin
You have write permission in /home/kwall/wp/wpbin
You own /home/kwall/wp/wpbin
You are a member of /home/kwall/wp/wpbins group
Cc biu thc trong phn iu kin cng c th kt hp vi nhau to thnh cc biu thc
phc tp hn bng cc php ton logic.
Ton t
ngha
! expression
Logical NOT
expression1 -a expression2
Logical AND
expression1 -o expression2
Logical OR
* Cc vng lp quyt nh: for
Nh thy chng trnh trn, for cho php ta chy mt on m mt s ln nht
nh. Tuy nhin cu trc for ca bash ch cho php ta lp i lp li trong danh sch cc gi tr
- 70 -
do
for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ###
do
echo -n "$i "
done
done
V d khc v cch s dng cu trc if v for nh sau:
#!/bin/sh
#Script to test for loop
#
#
if [ $# -eq 0 ]
then
echo "Error - Number missing form command line argument"
echo "Syntax : $0 number"
echo "Use to print multiplication table for given number"
exit 1 fi n=$1
for i in 1 2 3 4 5 6 7 8 9 10
do
echo "$n * $i = `expr $i \* $n`"
done
Khi ta chy chng trnh vi tham s:
$ chmod 755 mtable
$ ./mtable 7
Ta thu c kt qu nh sau:
7*1=7
7 * 2 = 14
...
7 * 10 = 70
* Cc vng lp khng xc nh: while v until
Vng lp for gii hn s ln m mt on m c thi hnh, cc cu trc while v until
ca bash cho php mt on m c thi hnh lin tc cho n khi mt iu kin no xy
ra. Ch vi ch l on m ny cn vit sao cho iu kin cui phi xy ra nu khng
s to ra mt vng lp v tn. C php ca n nh sau:
while condition do
statements
done
C php ny c ngha l khi no condition cn true, th thc hin statements cho n khi
condition tr thnh false (cho n khi mt chng trnh hay mt lnh tr v khc 0):
until condition do
statements
done
C php until c ngha l tri ngc vi while: cho n khi condition tr thnh true th
thi hnh statements (c ngha l cho n khi mt lnh hay chng trnh tr v m thot khc
0)
Cu trc while ca bash khc phc thiu st khng th t ng tng, gim con m cua
vng lp for.
- 72 -
[*)
esac
statements ;;]
expr c em i so snh vi tng pattern, nu n bng nhau th cc lnh tng ng s
c thi hnh. Du ;; l tng ng vi lnh break ca C, to ra iu khin nhy ti dng
u tin ca m esac. Khng nh t kho switch ca C, lnh case ca bash cho php ta kim
tra gi tr ca expr da vo pattern, n c th cha cc k t i din. Cch lm vic ca cu
trc case nh sau: n s khp (match) biu thc expr vi cc mu pattern1, pattern2,nu c
mt mu no khp th khi lnh tng ng vi mu s c thc thi, sau n thot ra
khi lnh case. Nu tt c cc mu u khng khp v ta c s dng mu * (trong nhnh *)),
- 73 -
ngi dng chn khng hp l, mt thng bo li s c hin th. Cu lnh read (c gii
thiu sau) cho php ngi dng nh vo la chn ca mnh v nhn Enter lp li vng lp
hay nhn Ctrl + C thot.
Ch : Nh gii thiu, cc vng lp script khng kt thuc nu ta khng nhn Ctrl+C.
Tuy nhin ta c th s dng lnh break thot ra.
6.2.3 Cc hm shell
Cc hm chc nng ca bash l mt cch m rng cc tin ch sn c trong shell, n c
cc im li sau:
Thi hnh nhanh hn do cc hm shell lun thng trc trong b nh.
Cho php vic lp trnh tr nn d dng hn v ta c th t chc chng trnh
thnh cc module.
Ta c th nh ngha cc hm shell s dng theo hai cch:
function fname
{
commands
}
Hoc l
fname()
{
commands
}
C hai dng u c chp nhn v khng c g khc gia chng. gi mt hm
nh ngha n gin l gi tn hm cng vi cc i s m n cn.
Nu so snh vi C hay Pascal, hm ca bash khng c cht ch, n khng kim tra
li v khng c phng thc tr v i s bng gi tr. Tuy nhin ging nh C v Pascal, cc
bin a phng c th khai bo cc b i vi hm, do trnh c s xung t vi bin
ton cc. thc hin iu ny ta dng t kho local nh trong on m sau:
Function foo
{
local myvar
local yourvar=1
}
Trong v d v cc bin v tr trn ta cng thy c cch s dng hm trong bash.
Cc hm shell gip m ca ta d hiu v d bo dng. S dng cc hm v cc ch
thch ta s rt nhiu cng sc khi ta phi tr li nng cp on m m ta vit t thi gian
rt lu trc .
6.2.4. Cc ton t nh hng vo ra
Ta c bit v cc ton t nh hng vo ra, > v <. Ton t nh hng ra cho
php ta gi kt qu ra ca mt lnh vo mt file. V d nh lnh sau:
$ cat $HOME/.bash_profile > out
N s to mt file tn l out trong th mc hin ti cha cc ni dung ca file
bash_profile, bng cch nh hng u ra ca cat ti file .
Tng t, ta c th cung cp u vo l mt lnh t mt file hoc l lnh s dng ton
t u vo, <. Tac th vit li lnh cat s dng ton t nh hng u vo nh sau:
$ cat < $HOME/.bash_profile > out
Kt qu ca lnh ny vn nh th nhng n cho ta hiu thm v cch s dng nh
hng u vo u ra.
- 75 -
if ls -lL |\
# Liet ke ca cac thong tin cua symbolic link
# Su dung sub-shell de tu giai phong bien
{
sum=0
# Lenh read x y de bo di dong 'total 1234..' cua lenh ls -lL
read x y ;
while read mode link user group size month day hour name do
if [ -d $name ]
then
echo $name $size \($mode\)
fi
done
}
6.3. Lp trnh C trn UNIX
6.3.1. Trnh bin dch gcc
H iu hnh UNIX lun km theo b dch ngn ng lp trnh C vi tn gi l cc (C
compiler). Trong Linux, b dch c tn l gcc (GNU C Compiler) vi ngn ng lp trnh
khng khc nhiu vi C chun. gcc cho ngi lp trnh kim tra trnh bin dch. Tin trnh
bin dch bao gm bn giai on:
Tin x l
Bin dch
Tp hp
Lin kt
Ta c th dng tin trnh sau mt trong nhng giai on kim tra kt qu bin dch
ti giai on y. gcc cng c th chp nhn ngn ng khc ca C, nh ANSI C hay C truyn
thng. Nh ni trn, gcc thch hp bin dch C++ hay Objective-C. Ta c th kim sot
lng cng nh kiu thng tin cn debug, tt nhin l c th nhng trong tin trnh nh phn
ha kt qu v ging nh hu ht cc trnh bin dch, gcc cng thc hin ti u ha m.
Trc khi bt u i su vo nghin cu gcc, ta xem mt v d sau:
#include<stdio.h>
int main (void)
{
fprintf( stdout, Hello, Linux programming world!\n);
return 0;
}
Mt chng trnh in hnh dng minh ho vic s dng gcc
bin dch v chy chng trnh ny hy g:
$ gcc hello.c o hello
$ ./hello
Hello, Linux programming world!
Dng lnh u tin ch cho gcc phi bin dch v lin kt file ngun hello.c, to ra tp
tin thc thi, bng cch ch nh s dng i s -o hello. Dng lnh th hai thc hin chng
trnh, v kt qu cho ra trn dng th 3.
C nhiu ch m ta khng nhn thy c, gcc trc khi chy hello.c thng qua b tin
x l ca cpp, m rng bt k mt macro no v chn thm vo ni dung ca nhng file
#include. Tip n, n bin dch m ngun tin x l sang m obj . Cui cng, trnh lin kt,
to ra m nh phn cho chng trnh hello.
- 78 -
Ta c th to li tng bc ny bng tay, chia thnh tng bc qua tin trnh bin dch.
ch cho gcc bit phi dng vic bin dch sau khi tin x l, ta s dng tu chn E ca
gcc:
$ gcc E hello.c o hello.cpp
Xem xt hello.cpp v ta c th thy ni dung ca stdio.h c chn vo file, cng vi
nhng m thng bo tin x l khc. Bc tip theo l bin dch hello.cpp sang m obj. S
dng tu chn c ca gcc hon thnh:
$ gcc x cpp-output -c hello.cpp o hello.o
Trong trng hp ny, ta khng cn ch nh tn ca file output bi v trnh bin dch
to mt tn file obj bng cch thay th .c bi .o. Tu chn x ch cho gcc bit bt u bin
dch bc c ch bo trong trng hp ny vi m ngun tin x l.
Lm th no gcc bit chia loi c bit ca file? N da vo ui m rng ca file
trn xc nh r phi x l file nh th no cho dng. Hu ht nhng ui m rng thng
thng v ch thch ca chng c lit k trong bng di.
Phn m rng
Kiu
M ngun ngn ng C
.c
M ngun ngn ng C++
.c, .cpp
M ngun C tin x l
.i
M ngun C++ tin x l
.ii
M ngun Hp ng
.S, .s
M i tng bin dch (obj)
.o
M th vin bin dch
.a, .so
Cc phn m rng ca tn file i vi gcc
Lin kt file i tng, v cui cng to ra m nh phn:
$ gcc hello.o o hello
Trong trng hp , ta ch mun to ra cc file obj, v nh vy th bc lin kt l khng
cn thit.
Hu ht cc chng trnh C cha nhiu file ngun th mi file ngun u phi c
bin dch sang m obj trc khi ti bc lin kt cui cng. Gi s c mt v d, ta ang lm
vic trn killerapp.c l chng trnh s dng phn m ca helper.c, nh vy bin dch
killerapp.c ta phi dng dng lnh sau:
$ gcc killerapp.c helper.c o killerapp
gcc qua ln lt cc bc tin x l - bin dch lin kt, lc ny to ra cc file obj cho
mi file ngun trc khi to ra m nh phn cho killerapp.
Mt s tu chn dng lnh ca gcc:
-o FILE : Ch nh tn file output; khng cn thit khi bin dch sang m obj.
Nu FILE khng c ch r th tn mc nh s l a.out.
-c : Bin dch khng lin kt.
-DF00=BAR : nh ngha macro tin x l t tn F00 vi mt gi tr ca BAR
trn dng lnh.
-IDIRNAME : Trc khi cha quyt nh c DIRNAME hy tm kim nhng
file include trong danh sch cc th mc( tm trong danh sch cc ng dn th
mc)
-LDIRNAME : Trc khi cha quyt nh c DIRNAME hy tm kim nhng
file th vin trong danh sch cc th mc. Vi mc nh gcc lin kt da trn
nhng th vin dng chung
-static : Lin kt da trn nhng th vin tnh
- 79 -
Target thng l mt file nh file kh thi hay file object ta mun to ra. Dependency l
mt danh sch cc file cn thit nh l u vo to ra target.
Command l cc bc cn thit (chng hn nh gi chng trnh dch) to ra target.
Di y l mt v d v mt makefile v to ra mt chng trnh kh thi c tn l
editor (s hiu dng ch a vo tin theo di, cn ni dung ca makefile khng cha s
hiu dng). Chng trnh ny c to ra bi mt s cc file ngun: editor.c, editor.h,
keyboard.h, screen.h, screen.c, keyboard.c.
1. editor : editor.o screen.o keyboard.o
2. gcc -o editor.o screen.o keyboard.o
3. editor.o : editor.c editor.h keyboard.h screen.h
4. gcc -c editor.c
- 80 -
C
Ch gii
O_APPEND
Ni thm v con tr t cui file
O_NONBLOCK Nu mt tin trnh khng th hon thnh m khng
c tr, tr v trng thi trc
O_NODELAY
Tng t O_NONBLOCK
O_SYNC
Thao tc s khng tr v cho n khi d liu c
ghi vo a hoc thit b khc
Cc gi tr c ca hm open()
open() tr v mt m t file nu khng c li xy ra. Khi c li , n tr v gi tr -1 v
t gi tr cho bin errno. Hm create() cng tng t nh open() vi cc c O_CREATE |
O_WRONLY | O_TRUNC
Hm close()
Chng ta nn ng m t file khi thao tc xong vi n. Ch c mt i s l s m
t file m li gi open() tr v. Dng ca li gi close() l:
#include <unistd.h>
int close(int fd);
Tt c cc kho (lock) do tin trnh x l trn file c gii phng, cho d chng c
t m t file khc. Nu tin trnh ng file lm cho b m lin kt bng 0 th file s b xo.
Nu y l m t file cui cng lin kt n mt file c m th bn ghi bng file m c
gii phng. Nu khng phi l mt file bnh thng th cc hiu ng khng mong mun c th
xy ra.
Hm read()
Li gi h thng read() s dng c d liu t file tng ng vi mt m t file.
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
i s u tin l m t file m c tr v t li gi open() trc . i s th hai l
mt con tr ti b m sao chp d liu v i s th ba l s byte s c c. read() tr
v s byte c c hoc -1 nu c li xy ra.
Hm write()
Li gi h thng write() s dng ghi d liu vo file tng ng vi mt m t file.
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
i s u tin l s m t file c tr v t li gi open() trc . i s th hai l
con tr ti b m ( sao chp d liu, c dung lng ln cha d liu) v i s th
ba xc nh s byte s c ghi. write() tr v s byte c hoc -1 nu c li xy ra
Hm ftruncate()
Li gi h thng ftruncate() ct file tham chiu bi m t file fd vi di c xc
nh bi tham s length
#include <unistd.h>
int ftruncate(int fd, size_t length);
Tr v gi tr 0 nu thnh cng v -1 nu c li xy ra.
Hm lseek()
Hm lseek() t v tr c v ghi hin ti trong file c tham chiu bi m t file files
ti v tr offset
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
- 82 -
{
va_list ap;
va_start(ap, fmt); err_prn(fmt,ap, logfile); va_end(ap);
return;
}
void log_quit(char *logfile, const char *fmt,... )
{
va_list ap;
va_start(ap, fmt); err_prn(fmt, ap,logfile); va_end(ap);
exit(1);
}
extern void err_prn( const char *fmt, va_list ap, char *logfile)
{
int save_err;
char buf[MAXLINELEN]; FILE *plf;
save_err = errno;
vsprintf(buf,fmt, ap);
sprintf( buf+strlen(buf), ": %s", strerror(save_err));
strcat(buf, "\n"); fflush(stdout);
if(logfile !=NULL){
if((plf=fopen(logfile, "a") ) != NULL){
fputs(buf, plf);
fclose(plf);
}else
fputs("failed to open log file \n", stderr);
}else fputs(buf, stderr);
fflush(NULL);
return;
}
to mt th vin tnh, bc u tin l dch on m ca form i tng:
$gcc H c liberr.c o liberr.o
Tip theo:
$ar rcs liberr.a liberr.o
/*
* M ngun file testerr.c
*/
#include <stdio.h>
#include <stdlib.h>
#include "liberr.h"
#define ERR_QUIT_SKIP 1
#define LOG_QUIT_SKIP 1
int main(void)
{
FILE *pf;
fputs("Testing err_ret()...\n", stdout);
if((pf = fopen("foo", "r")) == NULL)
err_ret("%s %s", "err_ret()", "failed to open foo");
fputs("Testing log_ret()...\n", stdout);
if((pf = fopen("foo", "r")) == NULL);
log_ret("errtest.log", "%s %s", "log_ret()", "failed to open foo");
#ifndef ERR_QUIT_SKIP
- 85 -
Xy dng th vin dng chung hi khc so vi th vin tnh, tin trnh xy dng th
vin dng chung c minh ho di y:
Khi bin dch file i tng, s dng ty chn -fpic ca gcc n s to ra m c
lp v tr (position independence code) t c th lin kt hay s dng bt c
ch no
Khng loi b file i tng v khng s dng cc ty chn fomit frame
pointer ca gcc, v nu khng s nh hng n tin trnh g ri (debug)
S dng tu chn -shared and soname ca gcc
S dng tu chn Wl ca gcc truyn tham s ti trnh lin kt ld.
Thc hin tin trnh lin kt da vo th vin C, s dng tu chn l ca gcc
Tr li th vin x li li , to th vin dng chung trc ht xy dng file i tng:
$ gcc -fPiC -g -c liberr.c -o liberr.o
Tip theo lin kt th vin:
$ gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc
V khng th ci t th vin ny nh th vin h thng trong /usr hay /usr/lib chng ta
cn to 2 kin kt, mt cho soname.V cho trnh lin kt khi kt ni da vo liberr, s dng
lerr:
$ ln -s liberr.so.1.0.0 liberr.so
By gi, d dng th vin dng chung mi chng ta quay li chng trnh kim tra,
chng ta cn hng trnh lin kt ti th vin no s dng v tm n u, v vy chng ta
s s dng tu chn l v L:
$ gcc -g errtest.c -o errtest -L. -lerr
Cui cng chy chong trnh, chng ta cn ch cho ld.so ni tm th vin dng
chung :
$ LD_LIBRARY_PATH=$(pwd) ./errtest
* S dng i tng dng chung theo cch ng
Mt cch s dng th vin dng chung l np chng t ng mi khi chy khng
ging nh nhng th vin lin kt v np mt cch t ng. Ta c th s dng giao din dl
(dynamic loading) v n to s linh hot cho lp trnh vin hay ngi dng.
Gi s ta ang to mt ng dng s l ho. Trong ng dng, ta biu din d liu
mt dng khng theo chun nhng li thun tin cho ta x l, v ta cn c nhu cu chuyn d
liu ra cc nh dng thng dng c (s lng cc nh dng ny c th c hng trm
loi) hoc c d liu t cc nh dng mi ny vo x l. gii quyt vn ny ta c
th s dng gii php l th vin. Nhng khi c thm mt nh dng mi th ta li phi bin
dch li chng trnh. y li l mt iu khng thch hp lm. Kh nng s dng th vin
ng s gip ta gii quyt vn va gp phi. Giao din dl cho php to ra giao din (cc
hm) c v vit chung khng ph thuc vo nh dng ca file nh. thm hoc sa cc
nh dng ca file nh ta ch cn vit thm mt module m nhn chc nng v bo cho
chng trnh ng dng bit l c thm mt module mi bng cch ch cn thay i mt file
cu hnh trong mt th mc xc nh no .
Giao din dl (cng n thun c xy dng nh mt th vin - th vin libdl) cha cc
hm ti (load), tm kim v gii phng (unload) cc i tng chia s. s dng cc hm
ny ta thm file <dlfcn.h> vo phn #include vo trong m ngun, v khi dch th lin kt n
vi th vin libdl bng cch s dng tham s v tn ldl trong dng lnh dch. dl cung cp 4
hm x l cc cng vic cn thit ti, s dng v gii phng i tng dng chung.
Truy cp i tng chia s
truy cp mt i tng chia s, dng hm dlopen() c c t nh sau:
void *dlopen(const char *filename, int flag);
- 87 -
- 90 -
- 92 -