Hệ điều hành linux và unix
www.nhipsongcongnghe.net
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
=====================================
HÀ QUANG THY
NGUYN TRÍ THÀNH
Giáo trình:
H IU HÀNH UNIX - LINUX
Dành cho sinh viên ngành Công ngh thông tin,
in t - Vin thông, Toán tin ng dng
HÀ NI - 2004 2
MC LC
LI GII THIU ..................................................................................................... 9
CHƠNG 1. GII THIU CHUNG V LINUX...................................................... 10
1.1. Gii thiu v UNIX và Linux...................................................................................... 10
1.1.1. Xut x, quá trình tin hóa và mt s c trưng c
a h iu hành UNIX ......... 10
1.1.2. Gi
i thiu sơ b v Linux................................................................................... 13
1.2. Sơ b v các thành phn ca Linux ........................................................................... 17
1.2.1. Sơ b v nhân ..................................................................................................... 18
1.2.2. Sơ b v shell ..................................................................................................... 18
1.3. Gii thiu v s
dng lnh trong Linux..................................................................... 20
1.3.1. Các quy ư
c khi vit lnh................................................................................... 22
1.3.3. Làm ơn gin thao tác gõ lnh ........................................................................... 25
1.3.4. Tip ni dòng lnh.............................................................................................. 29
1.4. Trang Man ................................................................................................................... 29
CHƠNG 2. THAO TÁC VI H THNG ........................................................... 32
2.1. Quá trình khi
ng Linux......................................................................................... 32
2.2. Thtc
ng nhp và các lnh thoát khi h thng ................................................ 33
2.2.1. ng nhp........................................................................................................... 33
2.2.2. Ra khi h thng................................................................................................. 36
2.2.3. Khi ng li h thng ....................................................................................... 38
2.2.4. Khi ng vào ch ho............................................................................. 38
2.3. Lnh thay
i mt khu .............................................................................................. 42
2.4. Lnh xem, thit
t ngày, gi hin ti và xem lch trên h thng ........................... 45
2.4.1 Lnh xem, thit t ngày, gi .............................................................................. 45
2.4.2. Lnh xem lch .................................................................................................... 47
2.5. Xem thông tin h thng .............................................................................................. 48
2.6. Thay
i ni dung du nhc shell .............................................................................. 49
2.7. Lnh gi ngôn ng tính toán s hc .......................................................................... 50
CHƠNG 3. H THNG FILE ............................................................................. 53
3.1 Tng quan v h thng file........................................................................................... 53
3.1.1. Mt s khái nim................................................................................................ 53
3.1.2. Sơ b kin trúc ni ti c
a h thng file............................................................. 57
3.1.3. Mt s thut toán làm vic v
i inode ................................................................. 63
3.1.4. H tr nhiu h thng File.................................................................................. 66
3.1.5. Liên kt tưng trưng (lnh ln) ............................................................................ 71 3
3.2 Quyn truy nhp thư mc và file ................................................................................ 72
3.2.1 Quyn truy nhp .................................................................................................. 72
3.2.2. Các lnh cơ bn .................................................................................................. 75
3.3 Thao tác vi thư mc.................................................................................................... 80
3.3.1 Mt s thư mc c bit ...................................................................................... 80
3.3.2 Các lnh cơ bn v thư mc ................................................................................ 83
3.4. Các lnh làm vic vi file ............................................................................................ 87
3.4.1 Các kiu file có trong Linux ................................................................................ 87
3.4.2. Các lnh to file.................................................................................................. 88
3.4.3 Các lnh thao tác trên file.................................................................................... 90
3.4.4 Các lnh thao tác theo ni dung file .................................................................... 98
3.4.5 Các lnh tìm file ................................................................................................ 106
3.5 Nén và sao lưu các file ................................................................................................ 115
3.5.1 Sao lưu các file (lnh tar) .................................................................................. 115
3.5.2 Nén d liu ....................................................................................................... 118
CHƠNG 4. QU
N TR QUÁ TRÌNH................................................................. 122
4.1 Quá trình trong UNIX................................................................................................ 122
4.1.1. Sơ b v quá trình............................................................................................. 122
4.1.2. Sơ b cu trúc iu khin c
a UNIX................................................................ 123
4.1.3. Các h thng con trong nhân ............................................................................ 125
4.1.4. Sơ b v iu khin quá trình ........................................................................... 129
4.1.5. Trng thái và chuyn dch trng thái ................................................................ 130
4.1.6. S ngưng hot ng và hot ng tr li c
a quá trình.................................... 132
4.1.7. Sơ b v lnh i v
i quá trình ........................................................................ 132
4.2. Các lnh cơ bn.......................................................................................................... 133
4.2.1. Lnh fg và lnh bg ............................................................................................ 133
4.2.2. Hin th các quá trình ang chy v
i lnh ps ................................................... 135
4.2.3. H
y quá trình v
i lnh kill ............................................................................... 137
4.2.4. Cho máy ngng hot ng mt thi gian v
i lnh sleep.................................. 139
4.2.5. Xem cây quá trình v
i lnh pstree.................................................................... 139
4.2.6. Lnh thit t li ưu tiên c
a quá trình nice và lnh renice......................... 141
CHƠNG 5. QU
N LÝ TÀI KHO
N NGI DÙNG......................................... 142
5.1 Tài khon ngưi dùng ................................................................................................ 142
5.2 Các lnh cơ bn qun lý ngưi dùng ........................................................................ 142
5.2.1 File /etc/passwd ................................................................................................ 143
5.2.2 Thêm ngưi dùng v
i lnh useradd................................................................... 143
5.2.3 Thay i thuc tính ngưi dùng ........................................................................ 146
5.2.4 Xóa b mt ngưi dùng (lnh userdel).............................................................. 147 4
5.3 Các lnh cơ bn liên quan
n nhóm ngưi dùng ................................................... 148
5.3.1 Nhóm ngưi dùng và file /etc/group ................................................................. 148
5.3.2 Thêm nhóm ngưi dùng .................................................................................... 149
5.3.3 S!a i các thuc tính c
a mt nhóm ngưi dùng (lnh groupmod) ................ 149
5.3.4 Xóa mt nhóm ngưi dùng (lnh groupdel) ...................................................... 150
5.4 Các lnh cơ bn khác có liên quan
n ngưi dùng ................................................ 150
5.4.1 ng nhp v
i tư cách mt ngưi dùng khác khi dùng lnh su ....................... 150
5.4.2 Xác nh ngưi dùng ang ng nhp (lnh who) ............................................ 151
5.4.3 Xác nh các quá trình ang ưc tin hành (lnh w) ....................................... 153
CHƠNG 6. TRUYN THÔNG VÀ MNG UNIX-LINUX................................... 154
6.1. Lnh truyn thông ..................................................................................................... 154
6.1.1. Lnh write......................................................................................................... 154
6.1.2. Lnh mail.......................................................................................................... 155
6.1.3. Lnh talk ........................................................................................................... 156
6.2 Cu hình Card giao tip mng .................................................................................. 156
6.3. Các dch v mng ...................................................................................................... 159
6.3.1 H thông tin mng NIS...................................................................................... 159
6.4 H thng file trên mng ............................................................................................. 164
6.4.1 Cài t NFS ....................................................................................................... 165
6.4.2 Khi ng và dng NFS.................................................................................... 166
6.4.3 Cu hình NFS server và Client.......................................................................... 167
6.4.4 S! dng mount................................................................................................... 167
6.4.5 Unmount............................................................................................................ 168
6.4.6 Mount t ng qua tp cu hình........................................................................ 168
CHƠNG 7. L
P TRÌNH SHELL VÀ L
P TRÌNH C TRÊN LINUX ................... 170
7.1. Cách thc pipes và các yu t cơ bn lp trình trên shell ..................................... 170
7.1.1. Cách thc pipes ................................................................................................ 170
7.1.2. Các yu t cơ bn lp trình trong shell ........................................................ 171
7.2. Mt s lnh lp trình trên shell ................................................................................ 175
7.2.1. S! dng các toán t! bash .................................................................................. 175
7.2.2. iu khin lung .............................................................................................. 179
7.2.3 Các toán t! nh hư
ng vào ra........................................................................... 193
7.2.4. Hin dòng vn bn............................................................................................ 194
7.2.5. Lnh read c d liu cho bin ngưi dùng ..................................................... 194
7.2.6. Lnh set ............................................................................................................ 195
7.2.7. Tính toán trên các bin ..................................................................................... 196
7.2.8. Chương trình ví d............................................................................................ 196 5
7.3. Lp trình C trên UNIX ............................................................................................. 197
7.3.1. Trình biên dch gcc........................................................................................... 197
7.3.2. Công c GNU make ......................................................................................... 201
7.3.3. Làm vic v
i file............................................................................................... 203
7.3.4. Thư vin liên kt............................................................................................... 211
7.3.5 Các công c cho thư vin ................................................................................. 220
TÀI LIU THAM KH
O ...................................................................................... 223
CHÚ THÍCH MT STHU
T NG ................................................................... 224
PH LC A. QUÁ TRÌNH CÀI T REDHAT-LINUX ........................................ 227
AA. Cài
t phiên bn RedHat 6.2 ................................................................................. 228
AA.1. To "a mm khi ng ................................................................................... 228
AA.2. Phân vùng li #"a DOS/Windows hin thi.................................................. 228
AA.3. Các bư
c cài t (bn RedHat 6.2 và khi ng t CD-ROM)....................... 229
AA.4. Các hn ch v ph$n cng i v
i Linux ........................................................ 239
PH LC B. TRÌNH SON TH
O VIM .............................................................. 242
B.1 Khi
ng vim............................................................................................................ 244
B.1.1 M chương trình son tho vim........................................................................ 244
B.1.2. Tính nng m nhiu c!a s .............................................................................. 245
B.1.3. Ghi và thoát trong vim ..................................................................................... 246
B.2. Di chuy n tr son tho trong Vim ......................................................................... 247
B.2.1. Di chuyn trong vn bn .................................................................................. 247
B.2.2. Di chuyn theo các i tưng vn bn............................................................. 248
B.2.3. Cun màn hình................................................................................................. 248
B.3. Các thao tác trong vn bn ...................................................................................... 249
B.3.1. Các lnh %&'n vn bn trong vim..................................................................... 249
B.3.2. Các lnh xoá vn bn trong vim ...................................................................... 250
B.3.3. Các lnh khôi phc vn bn trong vim ............................................................ 250
6.3.4. Các lnh thay th vn bn trong vim ................................................................ 250
B.3.5. Sao chép và di chuyn vn bn trong vim ....................................................... 252
B.3.6. Tìm kim và thay th vn bn trong vim......................................................... 253
B.3.7. ánh du trong vim ......................................................................................... 254
B.3.8. Các phím s! dng trong ch %&'n............................................................... 255
B.3.9. Mt s lnh trong ch o............................................................................. 256
B.3.10. Các lnh lp ................................................................................................... 256
B.4. Các lnh khác ............................................................................................................ 257
B.4.1. Cách thc hin các lnh bên trong Vim........................................................... 257
B.4.2. Các lnh liên quan n file............................................................................... 257 6
PH LC C. MIDNIGHT COMMANDER ............................................................ 259
C.1. Gii thiu v Midnight Commander (MC) ............................................................ 259
C.2. Khi
ng MC .......................................................................................................... 259
C.3. Giao din ca MC ..................................................................................................... 259
C.4. Dùng chut trong MC .............................................................................................. 260
C.5. Các thao tác bàn phím.............................................................................................. 261
C.6. Th!c
ơn thanh ngang (menu bar) ......................................................................... 263
C.7. Các phím chc nng ................................................................................................. 266
C.8. B son tho ca Midnight Commander................................................................ 267
PH LC D. SAMBA.......................................................................................... 270
D.1 Cài
t Samba ............................................................................................................ 270
D.2 Các thành phn ca Samba ...................................................................................... 271
D.3 File cu hình Samba .................................................................................................. 272
D.4 Các phn
c bit ca file cu hình Samba............................................................. 275
D.5 Qun lý ngưi dùng trong Samba............................................................................ 282
D.6 Cách s
dng Samba t" các máy trm.................................................................... 284
D.6.1 Cách s! dng t các máy trm là Linux ........................................................... 284
D.6.2 Cách s! dng t các máy trm là Windows ..................................................... 2877
LI GII THIU
Trong hơn mưi nm tr li ây h iu hành Linux ã8
CHƠNG 1. GII THIU CHUNG V LINUX
1.1. Gii thiu v UNIX và Linux
1.1.1. Xut x, quá trình tin hóa và mt s
c trưng ca h
iu hành UNIX
Nm 1965, Vin công ngh Massachusetts (MIT: Massachusetts Institute of
Technology) và Phòng thí nghim Bell c
a hãng AT&T thc hin d án xây dng mt h
iu hành có tên g(i là Multics (MULTiplexed Information and Computing Service) v
mc tiêu: to lp ưc mt h iu hành ph
trên vùng lãnh th # rng (hot ng trên tp
các máy tính ưc kt ni), a ngưi dùng, có nng lc cao v tính toán và lưu tr. D án
nói trên thành công mc ht sc khiêm tn và ngưi ta ã bit n mt s khim
khuyt khó kh)c phc c
a Multics.
Nm1969, Ken Thompson, mt chuyên viên ti phòng thí nghim Bell, ngưi ã tham
gia d án Multics, cùng Dennics Richie vit li h iu hành a-bài toán trên máy PDP-7
v
i tên là UNICS (UNiplexed Information and Computing Service) t mt câu g(i ùa c
a
mt ng nghip. Trong h iu hành UNICS, mt s khi tho $u tiên v H thng file
ã ưc Ken Thompson và Dennis Ritchie thc hin. n nm 1970 h iu hành ưc vit
trên assembler cho máy PDP-11/20 và mang tên là UNIX.
Nm 1973, Riche và Thompson vit li nhân c
a h iu hành UNIX trên ngôn ng C,
và h iu hành ã tr nên d*#dàng cài t t
i các loi máy tính khác nhau; tính cht như
th ưc g(i là tính kh chuyn (portable) c
a UNIX. Trư
c ó, khong nm 1971, h iu
hành ưc th hin trên ngôn ng B (mà da trên ngôn ng B, Ritche ã phát trin thành
ngôn ng C).
Hãng AT&T ph # bin chương trình ngun UNIX t
i các trưng i h(c, các công ty
thương mi và chính ph
v
i giá không áng k.
Nm 1982, h thng UNIX-3 là bn UNIX thương mi $u tiên c
a AT&T.
Nm 1983, AT&T gi
i thiu H thng UNIX-4 phiên bn th nht trong ó ã có trình
son tho vi, thư vin qun lý màn hình ưc phát trin t i h(c T ng hp California,
Berkley.
Giai on 1985-1987, UNIX-5 phiên bn 2 và 3 tương ng ưc ưa ra vào các nm
1985 và 1987. Trong giai on này, có khong 100000 bn UNIX ã ưc ph #bin trên th
i, cài t t máy vi tính n các h thng l
n.
$u thp +,#1990. UNIX-5 phiên bn 4 ưc ưa ra như là mt chu-n c
a UNIX. ây
là s kt hp c
a các bn sau:
AT&T UNIX-5 phiên bn 3,
Berkley Software Distribution (BSD),
XENIX c
a MicroSoft
SUN OS
Có th tìm thy các ni dung liên quan t
i mt s phiên bn m
i c
a UNIX ti a ch.
website http://problem.rice.edu/.
Các nhóm nhà cung cp khác nhau v UNIX ang hot ng trong thi gian hin nay
ưc k n như sau:
Unix International (vit t)t là UI). UI là mt t #chc gm các nhà cung cp
thc hin vic chuyn nhưng h thng UNIX-5 và cung cp bn AT&T theo các 9
nhu c$u và thông báo phát hành m
i, ch/ng hn như iu ch.nh bn quyn. Giao
din #h(a ngưi dùng là Open Look.
Open Software Foundation (OSF). OSF ưc h tr bi IBM, DEC, HP ...
theo hư
ng phát trin mt phiên bn c
a Unix nh0m tranh ua v
i h thng UNIX-5
phiên bn 4. Phiên bn này có tên là OSF/1 v
i giao din #h(a ngưi dùng ưc
g(i là MOTIF.
Free SoftWare Foundation (FSF): mt cng ng do Richard Stallman khi
xư
ng nm 1984 ch
trương phát hành các ph$n mm s! dng t do, trên cơ s mt
h iu hành thuc loi UNIX.
Bng sau ây lit kê mt s cài t UNIX khá ph #bin (thưng thy có ch X cui
tên g(i c
a H iu hành):
Tên h Nhà cung cp Nn phát trin
AIX International Business Machines AT&T System V
A/UX Apple Computer AT&T System V
Dynix Sequent BSD (Berkeley SoftWare Distribution)
HP-UX Hewlett-Packard BSD
Irix Silicon Graphics AT&T System V
Linux Free SoftWare Foundation
NextStep Next BSD
OSF/1 Digital Equipment Corporation BSD
SCO UNIX Santa Cruz Operation AT&T System V
Solaris Sun Microsystems AT&T System V
SunOS Sun Microsystems BSD UNIX
Ultrix Digital Equipment Corporation BSD UNIX
Unicos Cray AT&T System V
UnixWare Novell AT&T System V
XENIX MicroSoft AT&T System III-MS
Dư
i ây lit kê mt s c trưng c
a h iu hành UNIX:
H iu hành ưc vit trên ngôn ng bc cao; bi vy, rt d*#(c, d*#hiu,
d*#thay i cài t trên loi máy m
i (tính d*#mang chuyn, như ã nói),
Có giao din ngưi dùng ơn gin
nng lc cung cp các dch v mà
ngưi dùng mong mun (so sánh v
i các h iu hành có t trư
c ó thì giao din
c
a UNIX là mt tin b vưt bc),
Tha mãn nguyên t)c xây dng các chương trình phc tp t nhng chương
trình ơn gin hơn: trư
c ht có các môun cơ bn nht c
a nhân sau ó phát trin
có toàn b h iu hành,
S! dng duy nht mt h thng File có cu trúc cho phép d*#dàng bo qun
và s! dng hiu qu, 1
0
S! dng ph #bin mt dng ơn gin trình bày ni ti c
a File như mt dòng
các byte cho phép d*#dàng khi vit các chương trình ng dng truy nhp, thao tác
v
i các d liu trong File,
Có kt ni ơn gin v
i thit b ngoi vi: các file thit b ã ưc t s1n
trong H thng File to ra mt kt ni ơn gin gia chương trình ngưi dùng v
các thit b ngoi vi,
Là h iu hành a ngưi dùng, a quá trình, trong ó mi ngưi dùng có
th thc hin các quá trình c
a mình mt cách c lp.
M(i thao tác vào - ra c
a h iu hành ưc thc hin trên h thng File:
mi thit b vào ra tương ng v
i mt file. Chương trình ngưi dùng làm vic v
file ó mà không c$n quan tâm c th tên file ó ưc t cho thit b nào trong h
thng.
Che khut cu trúc máy i v
i ngưi dùng, m bo tính c lp tương i
c
a chương trình i v
i d liu và ph$n cng, to iu kin thun li hơn cho
ngưi lp trình khi vit các chương trình chy UNIX v
i các iu kin ph$n cng
hoàn toàn khác bit nhau.
1.1.2. Gii thiu sơ b v Linux
Linus Tovalds (mt sinh viên Ph$n lan) ưa ra nhân (phiên bn $u tiên) cho h iu hành
Linux vào tháng 8 nm 1991 trên cơ s ci tin mt phiên bn UNIX có tên Minix do Giáo
sư Andrew S. Tanenbaum xây dng và ph bin. Nhân Linux tuy nh song là t óng gói.
Kt hp v
i các thành ph$n trong h thng GNU, h iu hành Linux ã ưc hình thành.
Và c2ng t thi im ó, theo tư tưng GNU, hàng nghìn, hàng vn chuyên gia trên toàn
th gi
i (nhng ngưi này hình thành nên cng ng Linux) ã tham gia vào quá trình phát
trin Linux và vì vy Linux ngày càng áp ng nhu c$u c
a ngưi dùng.
Dư
i ây là mt s mc thi gian quan tr(ng trong quá trình hình thành và phát trin h
iu hành Linux.
Sau ba nm nhân Linux ra i, n ngày 14-3-1994, h iu hành Linux phiên bn
1.0 ưc ph bin. Thành công l
n nht c
a Linux 1.0 là nó ã h tr giao thc mng
TCP/IP chu-n UNIX, sánh v
i giao thc socket BSD- tương thích cho lp trình mng.
Trình iu khin thit b ã ưc b sung chy IP trên mt mng Ethernet hoc trên
tuyn ơn hoc qua modem. H thng file trong Linux 1.0 ã vưt xa h thng file c
a
Minix thông thưng, ngoài ra ã h tr iu khin SCSI truy nhp "a tc cao. iu
khin b nh
o ã ưc m rng h tr iu khin trang cho các file swap và ánh x
b nh
c
a file c quyn (ch. có mt ánh x b nh
ch. (c ưc thi hành trong Linux
1.0).
Vào tháng 3-1995, nhân 1.2 ưc ph bin. iu áng k c
a Linux 1.2 so v
Linux 1.0 ch nó h tr mt phm vi rng và phong phú ph$n cng, bao gm c kin
trúc tuyn ph$n cng PCI m
i. Nhân Linux 1.2 là nhân kt thúc dòng nhân Linux ch. h
tr PC.
Mt iu c$n lưu ý v các ánh ch. s các dòng nhân (h iu hành) Linux. H thng
ch. s ưc chia thành mt s mc, ch/ng hn hai mc như 2.4 hoc ba mc như 2.2.5.
Trong cách ánh ch. s như vy, quy ư
c r0ng v
i các ch. s t mc th hai tr i, nu
là s ch1n thì dòng nhân ó ã khá n nh và tương i hoàn thin, còn nu là s l3 thì
dòng nhân ó v4n ang ưc phát trin tip. 1
1
Tháng 6-1996, nhân Linux 2.0 ưc ph bin. Có hai c trưng n i bt c
a Linux
2.0 là h tr kin trúc phc hp, bao gm c c ng Alpha 64-bit $y
, và h tr kin
trúc a b x! lý. Phân phi nhân Linux 2.0 c2ng thi hành ưc trên b x! lý Motorola
68000 và kin trúc SPARC c
a SUN. Các thi hành c
a Linux da trên vi nhân GNU
Mach c2ng chy trên PC và PowerMac.
T
i nm 2000, nhân Linux 2.4 ưc ph bin. Mt trong c im ưc quan tâm
c
a nhân này là nó h tr mã ký t Unicode 32 bít, rt thun li cho vic xây dng các
gii pháp toàn din và trit i v
i vn ngôn ng t nhiên trên phm vi toàn th
i.
Vn
phân phi và giy phép Linux
V lý thuyt, m(i ngưi có th khi to mt h thng Linux b0ng cách tip nhn bn m
nht các thành ph$n c$n thit t các site ftp và biên dch chúng. Trong thi k5 $u tiên,
ngưi dùng Linux phi tin hành toàn b các thao tác này và vì vy công vic là khá vt v.
Tuy nhiên, do có s tham gia ông o c
a các cá nhân và nhóm phát trin Linux, ã tin
hành thc hin nhiu gii pháp nh0m làm cho công vic khi to h thng 6 vt v. Mt
trong nhng gii pháp in hình nht là cung cp tp các gói chương trình ã tin dch,
chu-n hóa.
Nhng tp hp như vy hay nhng bn phân phi là l
n hơn nhiu so v
i h thng Linux
cơ s. Chúng thưng bao gm các tin ích b sung cho khi to h thng, các thư vin
qun lý, c2ng như nhiu gói ã ưc tin dch, s1n sàng khi to c
a nhiu b công c
UNIX dùng chung, ch/ng hn như phc v tin, trình duyt web, công c x! lý, son tho
vn bn và thm chí các trò chơi.
Cách thc phân phi ban $u rt ơn gin song ngày càng ưc nâng cp và hoàn thin
b0ng phương tin qun lý gói tiên tin. Các bn phân phi ngày nay bao gm các cơ s d
liu tin hóa gói, cho phép các gói d* dàng ưc khi to, nâng cp và loi b.
Nhà phân phi $u tiên thc hin theo phương châm này là Slakware, và chính h( là nhng
chuyn bin mnh m7 trong cng ng Linux i v
i công vic qun lý gói khi to Linux.
Tin ích qun lý gói RPM (RedHat Package Manager) c
a công ty RedHat là mt trong
nhng phương tin in hình.
Nhân Linux là ph$n mm t do ưc phân phi theo Giy phép s hu công cng ph$n
mm GNU GPL.
Các thành phn tích h#p H
iu hành Linux
Linux s! dng rt nhiu thành ph$n t D án ph$n mm t do GNU, t h iu hành BSD
c
a i h(c Berkeley và t h thng X-Window c
a MIT.
Thư vin h thng chính c
a Linux ưc b)t ngun t D án GNU, sau ó ưc rt nhiu
ngưi trong cng ng Linux phát trin tip, nhng phát trin tip theo như vy ch
yu
liên quan t
i vic gii quyt các vn như thiu v)ng a ch. (li trang), thiu hiu qu và
g6 ri. Mt s thành ph$n khác c
a D án GNU, ch/ng hn như trình biên dch GNU C
(gcc), vn là cht lưng cao nên ưc s! dng nguyên xy trong Linux.
Các tool qun lý mng ưc b)t ngun t mã 4.3BSD song sau ó ã ưc cng ng
Linux phát trin, ch/ng hn như thư vin toán h(c ng x! lý du chm ng Intel và các
trình iu khin thit b ph$n cng âm thanh PC. Các tool qun lý mng này sau ó li
ưc b sung vào h thng BSD. 1
2
H thng Linux ưc duy trì g$n như bi mt mng lư
i không cht ch7 các nhà phát trin
ph$n mm cng tác v
i nhau qua Internet, mng lư
i này gm các nhóm nh và cá nhân
chu trách nhim duy trì tính toàn v8n c
a tng thành ph$n. Mt lưng nh các site phân
cp ftp Internat công cng ã óng vai trò nhà kho theo chu-n de facto cha các thành
ph$n này. Tài liu Chu-n phân cp h thng file (File System Hierarchy Standard) ưc
cng ng Linux duy trì nh0m gi tính tương thích xuyên qua s khác bit rt l
n gia các
thành ph$n h thng.
Mt s
c
i m chính ca Linux
Dư
i ây trình bày mt s c im chính c
a c
a h iu hành Linux hin ti:
Linux tương thích v
i nhiu h iu hành như DOS, MicroSoft Windows ...:
Cho phép cài t Linux cùng v
i các h iu hành khác trên cùng mt cng. Linux
có th truy nhp n các file c
a các h iu hành cùng mt "a. Linux cho phép chy
mô phng các chương trình thuc các h iu hành khác.
Do gi ưc chu-n c
a UNIX nên s chuyn i gia Linux và các h UNIX khác
là d* dàng.
Linux là mt h iu hành UNIX tiêu biu v
i các c trưng là a ngưi dùng, a
chương trình và a x! lý.
Linux có giao din ho (GUI) tha hưng t h thng X-Window. Linux h tr
nhiu giao thc mng, b)t ngun và phát trin t dòng BSD. Thêm vào ó, Linux còn h
tr tính toán thi gian thc.
Linux khá mnh và chy rt nhanh ngay c khi nhiu quá trình hoc nhiu c!a s .
Linux ưc cài t trên nhiu ch
ng loi máy tính khác nhau như PC, Mini và vic
cài t khá thun li. Tuy nhiên, hin nay chưa xut hin Linux trên máy tính l
(mainframe).
Linux ngày càng ưc h tr bi các ph$n mm ng dng b sung như son tho,
qun lý mng, qun tr cơ s d liu, bng tính ...
Linux h tr tt cho tính toán song song và máy tính cm (PC-cluster) là mt hư
nghiên cu trin khai ng dng nhiu trin v(ng hin nay.
Là mt h iu hành v
i mã ngun m, ưc phát trin qua cng ng ngun m
(bao gm c Free Software Foundation) nên Linux phát trin nhanh. Linux là mt trong
mt s ít các h iu hành ưc quan tâm nhiu nht trên th gi
i hin nay.
Linux là mt h iu hành h tr a ngôn ng mt cách toàn din nht. Do Linux
cho phép h tr các b mã chu-n t 16 bit tr lên (trong ó có các b mã ISO10646,
Unicode) cho nên vic bn a hóa trên Linux là trit nht trong các h iu hành.
Tuy nhiên c2ng tn ti mt s khó khn làm cho Linux chưa thc s tr thành mt h iu
hành ph dng, dư
i ây là mt s khó khn in hình:
Tuy ã có công c h tr cài t, tuy nhiên, vic cài t Linux còn tương i phc
tp và khó khn. Kh nng tương thích c
a Linux v
i mt s loi thit b ph$n cng còn
thp do chưa có các trình iu khin cho nhiu thit b, 1
3
Ph$n mm ng dng chy trên nn Linux tuy ã phong phú song so v
i mt s h
iu hành khác, c bit là khi so sánh v
i MS Windows, thì v4n còn có khong cách.
V
i s h tr c
a nhiu công ty tin h(c hàng $u th gi
i (IBM, SUN, HP ...) và s tham
gia phát trin c
a hàng vn chuyên gia trên toàn th gi
i thuc cng ng Linux, các khó
khn c
a Linux ch)c ch)n s7 nhanh chóng ưc kh)c phc.
Chính vì l7 ó ã hình thành mt s nhà cung cp Linux trên th gi
i. Bng dư
i ây là
tên c
a mt s nhà cung cp Linux có ting nht và a ch. website c
a h(.
áng chú ý nht là Red Hat Linux (ti M9) và Red Flag Linux (ti Trung Quc). Red
Hat ưc coi là lâu i và tin cy, còn Red Flag là mt công ty Linux c
a Trung quc, có
quan h v
i cng ng Linux Vit nam và chúng ta có th h(c hi mt cách trc tip kinh
nghim cho quá trình ưa Linux vào Vit nam.
Tên công ty a ch website
Caldera OpenLinux www.caldera.com
Corel Linux www.corel.com
Debian GNU/Linux www.debian.com
Linux Mandrake www.mandrake.com
Red Hat Linux www.redhat.com
Red Flag Linux www.redflag-linux.com
Slackware Linux www.slackware.com
SuSE Linux www.suse.com
TurboLinux www.turbolinux.com
1.2. Sơ b v các thành phn ca Linux
H thng Linux, ưc thi hành như mt h iu hành UNIX truyn thng, gm shell và ba
thành ph$n (ã dng mã chương trình) sau ây:
- Nhân h iu hành chu trách nhim duy trì các i tưng tru tưng quan tr(ng c
a h
iu hành, bao gm b nh
o và quá trình. Các mô un chương trình trong nhân ưc
c quyn trong h thng, bao gm c quyn thưng trc b nh
trong.
- Thư vin h thng xác nh mt tp chu-n các hàm các ng dng tương tác v
nhân, và thi hành nhiu chc nng c
a h thng nhưng không c$n có các c quyn c
a
mô un thuc nhân. Mt h thng con in hình ưc thi hành da trên thư viên h
thng là h thng file Linux.
- Tin ích h thng là các chương trình thi hành các nhim v qun lý riêng r7, chuyên
bit. Mt s tin ích h thng ưc g(i ra ch. mt l$n khi ng và cu hình phương
tin h thng, mt s tin ích khác, theo thut ng UNIX ưc g(i là trình chy ng$m
(daemon), có th chy mt cách thưng xuyên (thưng theo chu k5), iu khin các bài
toán như hưng ng các kt ni mng m
i n, tip nhn yêu c$u logon, hoc cp nht
các file log.
Tin ích (hay lnh) có s1n trong h iu hành (dư
i ây tin ích ưc coi là lnh thưng
trc). Ni dung chính yu c
a tài liu này gi
i thiu chi tit v mt s lnh thông dng nht
c
a Linux. H thng file s7 ưc gi
i thiu trong chương 3. Trong các chương sau có
cp t
i nhiu ni dung liên quan n nhân và shell, song dư
i ây là mt s nét sơ b v
chúng. 1
4
1.2.1. Sơ b v nhân
Nhân (còn ưc g(i là h lõi) c
a Linux, là mt b các môdun chương trình có vai trò
iu khin các thành ph$n c
a máy tính, phân phi các tài nguyên cho ngưi dùng (các quá
trình ngưi dùng). Nhân chính là c$u ni gia chương trình ng dng v
i ph$n cng.
Ngưi dùng s! dng bàn phím gõ ni dung yêu c$u c
a mình và yêu c$u ó ưc nhân g!i
i shell: Shell phân tích lnh và g(i các chương trình tương ng v
i lnh thc hin.
Mt trong nhng chc nng quan tr(ng nht c
a nhân là gii quyt bài toán lp lch, tc
là h thng c$n phân chia CPU cho nhiu quá trình hin thi cùng tn ti. i v
i Linux, s
lưng quá trình có th lên t
i con s hàng nghìn. V
i s lưng quá trình ng thi nhiu
như vy, các thut toán lp lch c$n phi
hiu qu: Linux thưng lp lch theo ch
Round Robin (RR) thc hin vic luân chuyn CPU theo lưng t! thi gian.
Thành ph$n quan tr(ng th hai trong nhân là h thng các môun chương trình (ưc
g(i là li g(i h thng) làm vic v
i h thng file. Linux có hai cách thc làm vic v
i các
file: làm vic theo byte (kí t) và làm vic theo khi. Mt c im áng chú ý là file trong
Linux có th ưc nhiu ngưi cùng truy nhp t
i nên các li g(i h thng làm vic v
i file
c$n m bo vic file ưc truy nhp theo quyn và ưc chia x3 cho ngưi dùng.
1.2.2. Sơ b v shell
Mt s ni dung chi tit v shell (còn ưc g(i là h v) trong Linux ưc trình bày
trong chương "Lp trình trên shell". Nhng ni dung trình bày dư
i ây cung cp mt cách
nhìn sơ b v shell và vai trò c
a nó trong hot ng chung c
a h iu hành.
Ngưi dùng mong mun máy tính thc hin mt công vic nào ó thì c$n gõ lnh th
hin yêu c$u c
a mình h thng áp ng yêu c$u ó. Shell là b dch lnh và hot ng
như mt kt ni trung gian gia nhân v
i ngưi dùng: Shell nhn dòng lnh do ngưi dùng
ưa vào; và t dòng lnh nói trên, nhân tách ra các b phn nhn ưc mt hay mt s
lnh tương ng v
i các on vn bn có trong dòng lnh. Mt lnh bao gm tên lnh và
tham s: t $u tiên là tên lnh, các t tip theo (nu có) là các tham s. Tip theo, shell s!
dng nhân khi sinh mt quá trình m
i (khi to quá trình) và sau ó, shell ch i quá
trình con này tin hành, hoàn thin và kt thúc. Khi shell s1n sàng tip nhn dòng lnh c
a
ngưi dùng, mt du nh)c shell (còn g(i là du nh)c nhp lnh) xut hin trên màn hình.
Linux có hai loi shell ph #bin là: C-shell (du nh)c %), Bourne-shell (du nh)c $) và
mt s shell phát trin t các shell nói trên (ch/ng hn, TCshell - tcsh v
i du nh)c ng$m
nh > phát trin t C-shell và GNU Bourne - bash v
i du nh)c bash # phát trin t
Bourne-shell). Du mi phân bit shell nói trên không phi hoàn toàn rõ ràng do Linux cho
phép ngưi dùng thay i li du nh)c shell nh vic thay giá tr các bin môi trưng PS1
và PS2. Trong tài liu này, chúng ta s! dng kí hiu "hàng rào #" biu th du nh)c
shell.
C-shell có tên g(i như vy là do cách vit lnh và chương trình lnh Linux ta như
ngôn ng C. Bourne-shell mang tên tác gi c
a nó là Steven Bourne. Mt s lnh trong Cshell (ch/ng hn lnh alias) không còn có trong Bourne-shell và vì vy nhn bit h
thng ang làm vic v
i shell nào, chúng ta gõ lnh:
# alias
Nu mt danh sách xut hin thì shell ang s! dng là C-shell; ngưc li, nu xut hin
thông báo "Command not found" thì shell ó là Bourne-shell.
Lnh ưc chia thành 3 loi lnh: 1
5
Lnh thưng trc (có s1n c
a Linux). Tuyt i a s lnh ưc gi
i thiu
trong tài liu này là lnh thưng trc. Chúng bao gm các lnh ưc cha s1n trong
shell và các lnh thưng trc khác.
File chương trình ngôn ng máy: ch/ng hn, ngưi dùng vit trình trên ngôn
ng C qua b dch gcc (bao gm c trình kt ni link) to ra mt chương trình
trên ngôn ng máy.
File chương trình shell (Shell Scrip).
Khi kt thúc mt dòng lnh c$n gõ phím ENTER shell phân tích và thc hin lnh.
1.3. Gii thiu v s
dng lnh trong Linux
Như ã gi
i thiu ph$n trên, Linux là mt h iu hành a ngưi dùng, a nhim,
ưc phát trin bi hàng nghìn chuyên gia Tin h(c trên toàn th gi
i nên h thng lnh
c2ng ngày càng phong phú; n thi im hin nay Linux có khong hơn mt nghìn lnh.
Tuy nhiên ch. có khong vài chc lnh là thông dng nht i v
i ngưi dùng. Tài liu
này c2ng hn ch gi
i thiu khong vài chc lnh ó. Chúng ta ng e ngi v s lưng
lnh ưc gi
i thiu ch. chim mt ph$n nh trong tp hp lnh bi vì ây là nhng lnh
thông dng nht và chúng cung cp mt phm vi ng dng rng l
n,
tha mãn yêu c$u
c
a chúng ta.
C2ng như ã nói trên, ngưi dùng làm vic v
i máy tính thông qua vic s! dng trm
cui: ngưi dùng ưa yêu c$u c
a mình b0ng cách gõ "lnh" t bàn phím và giao cho h
iu hành x! lý.
Khi cài t Linux lên máy tính cá nhân thì máy tính cá nhân va óng vai trò trm cui,
va óng vai trò máy tính x! lý.
Dng t ng quát c
a lnh Linux có th ưc vit như sau:
# <Tên lnh> [<các tham s>] ¿
trong ó:
Tên lnh là mt dãy ký t, không có du cách, biu th cho mt lnh c
a
Linux hay mt chương trình. Ngưi dùng c$n h iu hành áp ng yêu c$u gì c
a
mình thì phi ch(n úng tên lnh. Tên lnh là b)t buc phi có khi gõ lnh.
Các tham s có th có hoc không có, ưc vit theo quy nh c
a lnh mà
chúng ta s! dng, nh0m cung cp thông tin v các i tưng mà lnh tác ng t
i. Ý
ngh"a c
a các du [, <, >, ] ưc gii thích ph$n quy t)c vit lnh.
Các tham s ưc phân ra thành hai loi: tham s khóa (sau ây thưng dùng là "tùy ch(n")
và tham s v trí. Tham s v trí thưng là tên file, thư mc và thưng là các i tưng chu
s tác ng c
a lnh. Khi gõ lnh, tham s v trí ưc thay b0ng nhng i tưng mà ngưi
dùng c$n hư
ng tác ng t
i. Tham s khóa chính là nhng tham s iu khin hot ng
c
a lnh theo các trưng hp riêng. Trong Linux, tham s khóa thưng b)t $u bi du tr
"-" hoc hai du tr liên tip "--". Khi gõ lnh, c2ng ging như tên lnh, tham s khóa phi
ưc vit chính xác như trình bày trong mô t lnh. Mt lnh có th có mt s hoc rt
nhiu tham s khóa. Ph thuc vào yêu c$u c th c
a mình, ngưi dùng có th ch(n mt
hoc mt s các tham s khóa khi gõ lnh. Trong mô t lnh, thưng xut hin thut ng
tùy-chn. Tùy ch(n lnh (thc cht là tham s khóa) cho phép iu ch.nh hot ng c
a
lnh trong Linux, làm cho lnh có tính ph #dng cao. Tu5 ch(n lnh cho phép lnh có th
áp ng ý mun c
a ngưi dùng i v
i h$u ht (tuy không phi lúc nào c2ng vy) các tình
hung t ra cho thao tác ng v
i lnh. 1
6
Ký hiu "↵" biu th vic gõ phím ht dòng <Enter>. kt thúc mt yêu
c$u, ngưi dùng nht thit phi gõ phím "↵".
Ví d, khi ngưi dùng gõ lnh xem thông tin v các file:
# ls -l g↵↵↵¿
trong lnh này:
ls là tên lnh thc hin vic ưa danh sách các tên file/ thư mc con trong
mt thư mc,
-l là tham s khóa, cho bit yêu c$u xem $y
thông tin v các i tưng
hin ra. Chú ý, trong tham s khóa ch cái (ch "l") phi i ngay sau du tr "-".
Tương ng v
i lnh ls còn có các tham s khóa -a, -L, ... và chúng c2ng là các tùy
ch(n lnh. Trong mt s tham s khóa có nhiu ch cái thay cho mt du "-" là hai
du "--" $u tham s. Ví d, như trưng hp tham s --file c
a lnh date.
g* là tham s v trí ch. rõ ngưi dùng c$n xem thông tin v các file có tên
g(i b)t $u là ch cái "g".
Trong tài liu này, quy ư
c r0ng khi vit mt lnh (trong mô t lnh và gõ lnh) thì
không c$n phi vit du "↵" cui dòng lnh ó, song luôn ghi nh
r0ng phím ENTER
("↵") là b)t buc khi gõ lnh.
Lu ý:
Linux (và UNIX nói chung) ưc xây dng trên ngôn ng lp trình C, vì vy
khi gõ lnh phi phân bit ch thưng v
i ch hoa. Ngoi tr mt s ngoi l, trong
Linux chúng ta thy ph #bin là:
Các tên lnh là ch thưng,
Mt s tham s có th là ch thưng hoc ch hoa (ví d, trong lnh date
v thi gian h thng thì hai tham s -r và -R có ý ngh"a hoàn toàn khác
nhau). Tên các bin môi trưng c2ng thưng dùng ch hoa.
Trong tài liu này, ti nhng dòng vn bn di*n gii, s! dng cách vit tên
lnh, các tham s khóa b0ng kiu ch không chân, m như date, -R, -r ...
Linux phân bit siêu ngưi dùng (ting Anh là superuser hoc root, còn
ưc g(i là ngi qu
n tr hay ngi dùng ti cao hoc siêu ngi dùng) v
ngưi dùng thông thưng. Trong tp hp lnh c
a Linux, có mt s lnh mà ch. siêu
ngưi dùng m
i ưc phép s! dng còn ngưi dùng thông thưng thì không ưc
phép (ví d như lnh adduser thc hin vic b #sung thêm ngưi dùng). Mt khác
trong mt s lnh, v
i mt s tham s khóa thì ch. siêu ngưi dùng ưc phép dùng,
còn v
i mt s tham s khác thì m(i ngưi dùng u ưc phép (ví d như lnh
passwd thay i mt kh-u ngưi dùng).
Mt dòng lnh có th có nhiu hơn mt lnh, trong ó lnh sau ưc ngn
cách bi v
i lnh i ngay trư
c b0ng du ";" hoc du "|". Ví d v mt s dòng lnh
dng này:
# ls -l; date
# head Filetext | sort >temp
Sau khi ngưi dùng gõ xong dòng lnh, shell tip nhn dòng lnh này và
phân tích ni dung vn bn c
a lnh. Nu lnh ưc gõ úng thì nó ưc thc hin;
ngưc li, trong trưng hp có sai sót khi gõ lnh thì shell thông báo v sai sót và 1
7
du nh)c shell li hin ra ch lnh tip theo c
a ngưi dùng. V ph #bin, nu
như sau khi ngưi dùng gõ lnh, không thy thông báo sai sót hin ra thì có ngh"a
lnh ã ưc thc hin mt cách bình thưng.
Trư
c khi i vào ni dung chi tit các lnh thông dng, chúng ta xem xét v mt s quy
nh dùng trong mô t lnh ưc trình bày trong tài liu này.
1.3.1. Các quy ưc khi vit lnh
Trong tài liu này, các lnh ưc trình bày theo mt b quy t)c cú pháp nht quán. B
quy t)c này cho phép phân bit trong mi lnh các thành ph$n nào là b)t buc phi có, các
thành ph$n nào có th có hoc không ... Dư
i ây là ni dung c
a các quy t)c trong b quy
t)c ó.
Tên lnh là b)t buc, phi là t $u tiên trong bt k5 lnh nào, phi ưc gõ
úng như khi mô t lnh.
Tên khái nim ưc n0m trong cp du ngoc quan h (< và >) biu th cho
mt l
p i tưng và là tham s b)t buc phi có. Khi gõ lnh thì tên khái nim (có
th ưc coi là "tham s hình thc") phi ưc thay th b0ng mt t (thưng là tên
file, tên thư mc ... và có th ưc coi là "tham s thc s") ch. i tưng liên
quan n thao tác c
a lnh.
Ví d, mô t cú pháp c
a lnh more xem ni dung file là
# more <file>
thì t more là tên lnh, còn <file> là tham s trong ó file là tên khái nim và là tham s
b)t buc phi có. Lnh này có tác ng là hin lên màn hình theo cách thc cun ni dung
c
a file v
i tên ã ch. trong lnh.
xem ni dung file có tên là temp, ngưi dùng gõ lnh:
# more temp
Như vy, tên lnh more ưc gõ úng như mô t cú pháp (c ni dung và v trí) còn
"file" ã ưc thay th b0ng t "temp" là tên file mà ngưi dùng mun xem ni dung.
Các b phn n0m gia cp du ngoc vuông [ và ] là có th gõ hoc không
gõ c2ng ưc.
Ví d, cú pháp c
a lnh halt là
# halt [tùy-chn]
V
i các tùy ch(n là -w, -n, -d, -f, -i mã mi tùy ch(n cho mt cách thc hot ng
khác nhau c
a lnh halt. Lnh halt có tác ng chính là làm ngng hot ng c
a h iu
hành, tuy nhiên khi ngưi dùng mun có mt cách hot ng nào ó c
a lnh này thì s7
ch(n mt (hoc mt s) tu5 ch(n lnh tương ng. Mt s cách gõ lnh halt c
a ngưi dùng
như sau ây là úng cú pháp:
# halt
# halt -w
# halt -n
# halt -f
Các giá tr có trong cp | và | trong ó các b phn cách nhau b0ng du s #
ng "|" cho bit c$n ch(n mt và ch. mt trong các giá tr n0m gia hai du ngoc
ó. 1
8
Ví d, khi gi
i thiu v tùy ch(n lnh c
a lnh tail xem ph$n cui ni dung c
a file,
chúng ta thy:
-f, --follow[={tên | c t}]
Như vy, sau tham s khóa --follow, nu xut hin thêm du b0ng "="
thì phi có hoc tên hoc c t
. ây là trưng hp các ch(n la "loi tr nhau".
Du ba chm ... th hin vic lp li thành ph$n cú pháp i ngay trư
c du
này, vic lp li ó có th t không n nhiu l$n (không k chính thành ph$n cú
pháp ó). Cách thc này thưng ưc dùng v
i các tham s như tên file.
Ví d, mô t lnh chown như sau:
chown [tùy-chn] <ch>[,[nhóm]]<file>...
Như vy trong lnh chown có th không có hoc có mt s tùy ch(n lnh và có t mt
n nhiu tên file.
Các b phn trong mô t lnh, nu không n0m trong các cp du [ ], <>, { }
thì khi gõ lnh thc s phi gõ y úng như khi mô t (chú ý, quy t)c vit tên lnh là
mt trưng hp riêng c
a quy t)c này).
Vic kt hp các du ngoc v
i nhau cho phép to ra cách thc s! dng quy
t)c t #hp các tham s trong lnh. Ví d, lnh more bình thưng có cú pháp là:
# more <file>
có ngh"a là thay <file> b0ng tên file c$n xem ni dung, nu kt hp thêm du ngoc vuông [
và ], tc là có dng sau (chính là dng t ng quát c
a lnh more):
# more [<file>]
thì <file> nói chung phi có trong lnh more, tuy nhiên trong mt s trưng hp có th b
qua tham s file.
Lu ý:
i v
i nhiu lnh, cho phép ngưi dùng gõ tham s khóa k
t hp tương
ng v
i tùy_ch
n trong mô t lnh. Tham s khóa kt hp ưc vit theo cách -
<xâu-kí-t>, trong ó xâu-kí-t gm các ch cái trong tham s khóa. Ví d,
trong mô t lnh in lch cal:
cal [tùy-chn] [tháng [nm] ]
có ba tham s khóa là -m, -j, -y. Khi gõ lnh có th gõ mt t #hp nào ó t ba
tham s khóa này ưc tình hung s! dng lnh theo ý mun. Ch/ng hn,
nu gõ lnh
cal -mj 3
thì lnh cal thc hin theo iu khin c
a hai tham s khóa -m (ch(n Th Hai
là ngày $u tu$n, thay vì cho ng$m nh là Ch
Nht) và -j (hin th ngày trong
tháng dư
i dng s ngày trong nm k t $u nm). Vì vy, khi vit [tùy-ch(n]
trong mô t lnh biu th c vic s! dng tng tùy ch(n, nhiu tùy ch(n hoc kt
hp các tu5 ch(n.
Trong mt s lnh, có hai tham s khóa cùng tương ng v
i mt tình hung
thc hin lnh, trong ó mt tham s gm mt kí t còn tham s kia li là mt t.
Tham s dài mt t là tham s chu-n c
a lnh, còn tham s mt kí t là cách vit
ng)n g(n. Tham s chu-n dùng ưc trong m(i Linux và khi gõ phi có
kí t
trong t. 1
9
Ví d, khi mô t lnh date có tùy ch(n:
-d, --date=STRING
như vy hai tham s -d và --date=STRING có cùng ý ngh"a.
Ngoài nhng quy ư
c trên ây, ngưi dùng ng quên mt quy nh cơ bn là c$n phân
bit ch hoa v
i ch thưng khi gõ lnh.
1.3.3. Làm
ơn gin thao tác gõ lnh
Vic s! dng bàn phím nhp lnh tuy không phi là mt công vic nng n, song
Linux còn cho phép ngưi dùng s! dng mt s cách thc thun tin hơn khi gõ lnh.
Mt s trong nhng cách thc ó là:
S! dng vic khôi phc dòng lnh,
S! dng các phím c bit,
S! dng các kí hiu thay th và phím <Tab>,
S! dng thay th alias,
S! dng chương trình lnh.
Cách thc s! dng chương trình lnh (shell script) s7 ưc gi
i thiu chi tit trong các
chương sau. Dư
i ây, chúng ta xem xét cách thc s! dng vic khôi phc dòng lnh, phím
c bit và kí hiu thay th.
Cơ ch khôi phc dòng lnh
Linux cung cp mt cách thc c bit là kh nng khôi phc lnh. Ti du nh)c shell:
Ngưi dùng s! dng các phím m2i tên lên/xung (↑/↓) trên bàn phím nhn li các dòng
lnh ã ưc ưa vào trư
c ây ti du nh)c shell, ch(n mt trong các dòng lnh ó và biên
tp li ni dung dòng lnh theo úng yêu c$u m
i c
a mình.
Ví d, ngưi dùng va gõ xong dòng lnh:
# ls -l tenfile*
sau ó mun gõ lnh ls -l tentaptin thì ti du nh)c c
a shell, ngưi dùng s! dng các
phím di chuyn lên (↑) hoc xung (↓) nhn ưc:
# ls -l tenfile*
dùng các phím t)t di chuyn, xoá kí t (xem ph$n sau) có ưc:
# ls -l ten
và gõ tip các kí t "taptin" nhn ưc:
# ls -l tentaptin
chính là kt qu mong mun.
Trong trưng hp s lưng kí t thay th là rt ít so v
i s lưng kí t c
a toàn dòng
lnh thì hiu qu c
a cách thc này rt cao.
Lu ý:
Vic nhn liên tip các phím di chuyn lên (↑) hoc xung (↓) cho phép
ngưi dùng nhn ưc các dòng lnh ã gõ t trư
c mà không ch. dòng lnh m
ưc gõ. Cách thc này tương t v
i cách thc s! dng tin ích DOSKEY trong h
iu hành MS-DOS. 2
0
Mt s phím
c bit khi gõ lnh
Khi ngưi dùng gõ lnh có th x-y ra mt s tình hung như sau:
Dòng lnh ang gõ có ch sai sót, không úng theo yêu c$u c
a ngưi dùng
vì vy c$n phi s!a li ôi chút ni dung trên dòng lnh ó. Trong trưng hp ó
c$n s! dng các phím c bit (còn g(i là phím vit t)t hay phím t)t) di chuyn,
xoá b, b #sung vào ni dung dòng lnh.
Sau khi s! dng cách thc khôi phc dòng lnh, chúng ta nhn ưc dòng
lnh tương t v
i lnh c$n gõ và sau ó s! dng các phím t)t hoàn thin lnh.
Dư
i ây gi
i thiu các phím t)t và ý ngh"a c
a vic s! dng chúng:
• Nhn phím → di chuyn con tr sang bên phi mt v trí
• Nhn phím ← di chuyn con tr sang bên trái mt v trí
• Nhn phím <ESC-BACKSPACE> xoá mt t bên trái con tr
• Nhn phím <ESC-D> xoá mt t bên phi con tr
• Nhn phím <ESC-F> di chuyn con tr sang bên phi mt t
• Nhn phím <ESC-B> di chuyn con tr sang bên trái mt t
• Nhn phím <CTRL-A> di chuyn con tr v $u dòng lnh
• Nhn phím <CTRL-E> di chuyn con tr v cui dòng
• Nhn phím <CTRL-U> xóa dòng lnh
Có th dùng phím <ALT> thay cho phím <ESC>.
Các kí hiu mô t nhóm file và phím <Tab>
Khi gõ lnh thc s nhiu trư
ng hp ngư
i dùng mong mun mt tham s trong lnh
không ch xác nh mt file mà li liên quan n mt nhóm các file mà tên g
i ca các file
trong nhóm có chung mt tính cht nào ó. Trong nhng trư
ng hp như vy, ngư
i dùng
cn s dng các kí hiu mô t nhóm file (wildcards), chúng ta g
i là kí hiu mô t nhóm
(còn ưc g
i là kí hiu thay th). Ngư
i ta s dng các kí t *, ? và cp hai du [ và ]
mô t nhóm file. Các kí t này mang ý ngha như sau khi vit vào tham s tên file thc s:
• "*" : là ký t mô t nhóm gm m(i xâu kí t (thay th m(i xâu). Mô t này
cho mt nhóm l
n nht trong ba mô t.
• "?" : mô t nhóm gm m(i xâu v
i dài không quá 1 (thay th mt kí t).
Nhóm này là tp con c
a nhóm $u tiên (theo kí t "*").
• [xâu-kí-t] : mô t nhóm gm m(i xâu có dài 1 là mi kí t thuc xâu nói
trên. Mô t này cho mt nhóm có lc lưng bé nht trong ba mô t. Nhóm này là tp
con c
a nhóm th hai (theo kí t "?"). Khi gõ lnh phi gõ c hai du [ và ]. Mt
dng khác c
a mô t nhóm này là [<kí_t_1>-<kí_t_2>] ngh"a là gia cp du
ngoc có ba kí t trong ó kí t gia là du ni (du -) thì cách vit này tương
ương v
i vic lit kê m(i kí t t <kí_t_1> n <kí_t_2>. Ch/ng hn, cách vit
[a-d] tương ương v
i cách vit [abcd].
Ví d, gi s! khi mun làm vic v
i tt c các file trong mt thư mc nào ó, ngưi
dùng gõ * thay th tham s file thì xác nh ưc các tên file sau (chúng ta vit bn tên file
trên mt dòng): 2
1
info-dir initlog.conf inittab lynx.cfg
mail.rc mailcap minicom.users motd
mtab mtools.conf services shadow
shadow- shells smb.conf sysctl.conf
syslog.conf temp termcap up2date.conf
temp termcap
Nu ngưi dùng gõ s* ( ch. các tên có ch cái $u là s) thay th tham s file thì xác
nh ưc các tên file sau:
shadow shadow- shells sysctl.conf
syslog.conf
Nu ngưi dùng gõ [si]* ( ch. các tên có ch cái $u là s hoc i, chú ý dùng c hai kí
t [ và ]) thay th tham s file thì xác nh các tên file sau:
info-dir initlog.conf inittab services
shadow shadow- shells smb.conf
sysctl.conf syslog.conf
Lu ý:
Như vy, Linux (và UNIX nói chung) không ch. s! dng hai kí t mô t
nhóm * và ? mà còn có cách thc s! dng cp kí t [ và ].
C$n phân bit cp du [ và ] ưc s! dng khi ngưi dùng gõ lnh có ý
ngh"a hoàn toàn khác v
i ý ngh"a c
a chúng khi ưc s! dng trong mô t lnh.
Hơn th na, Linux còn cung cp cho ngưi dùng cách thc s! dng phím <TAB>
hoàn thành nt tên file (tên thư mc) trong lnh. Ví d, khi chúng ta gõ dòng lnh
# ls /u<TAB>local<TAB>b<TAB>
thì nó c2ng tương ương như gõ dòng lnh (và ây chính là ni dung xut hin ti du nh)c
shell):
# ls /usr/local/bin
v
i iu kin trong thư mc /usr ch. có thư mc local ưc b)t $u bi ch "l" và trong thư
mc local c2ng ch. có thư mc bin ưc b)t $u bi ch "b".
Trong trưng hp nu như mt kí t chưa
xác nh, ngưi dùng c$n gõ thêm kí t tip
theo trong tên file (tên thư mc) và nhn phím <TAB> hoàn thành dòng lnh.
1.3.4. Tip ni dòng lnh
Như ã lưu ý trên ây, mt dòng lnh có th gm mt hoc mt s lnh, mt khác tham
s c
a lnh có th là rt dài không th trong khuôn kh #c
a mt dòng vn bn ưc. Khi gõ
lnh, nu dòng lnh quá dài, Linux cho phép ng)t dòng lnh xung dòng dư
i b0ng cách
thêm kí t báo hiu chuyn dòng "\" ti cui dòng; trong trưng hp ó, kí t "\" phi là ký
t cui cùng thuc dòng lnh trư
c.
Ví d,
# cd vsd\
thumuc
thì dòng th hai là ph$n tip theo c
a dòng th nht và kt hp c hai dòng này thc cht là
mt dòng lnh Linux. 2
2
1.4. Trang Man
Chúng ta có th nói r0ng Linux là mt h iu hành rt phc tp v
i hàng nghìn lnh và
mi lnh li có th có t
i vài hoc vài chc tình hung s! dng do chúng cho phép có nhiu
tùy ch(n lnh. thuc ht ưc ni dung tt c các lnh c
a Linux là mt iu ht sc
khó khn, có th nói là không th. Linux cho phép ngưi dùng s! dng cách thc g(i trang
Man có ưc các thông tin $y
i thiu ni dung các lnh. Dư
i ây là mt s ni
dung v cách thc s! dng trang Man.
"Man" là t vit t)t c
a "manual", ưc coi là tài liu trc tuyn trong Linux ã lưu tr
toàn b các lnh có s1n v
i các thông tin tham kho khá $y
cho phép ngưi dùng có th
m ra nhn ưc tr giúp.
m trang Man c
a mt lnh, chúng ta s! dng lnh man c
a Linux và gõ:
# man <tên-lnh>
Ni dung c
a trang Man tuy không phi là quá khó hiu, song hiu ht ưc nó c2ng
òi hi không ít thi gian. Tuy vy, nu quên ni dung mt lnh nào ó thì cách tt nht là
hãy s! dng trang Man.
Cu trúc chung c
a mt trang Man như sau:
COMMAND(1) Linux Programmer's Manual COMMAND(1)
NAME
tên lnh - khái quát tác dng c
a lnh
SYNOPSIS
cú pháp c
a lnh
DESCRIPTION
mô t c th hơn v tác dng c
a lnh
OPTIONS
lit kê các tùy ch(n lnh và tác dng c
a chúng
FILES
lit kê các file mà lnh s! dng hoc tham chiu n
SEE ALSO
lit kê các lnh, các tài liu, ..., có liên quan n lnh
REPORTING BUGS
a ch. liên h nu gp li khi s! dng lnh
AUTHOR
tên tác gi c
a lnh
Ngưi dùng thm chí không nh
chính xác tên lnh. Linux còn có mt cách thc h tr
ngưi dùng có th nhanh chóng tìm ưc lnh c$n s! dng trong trưng hp ch. nh
nhng
ch cái $u c
a tên lnh, ó là cách thc s! dng phím TAB. Trong cách thc này, ngưi
dùng ch. c$n nh
mt s ch cái $u tiên c
a tên lnh.
Có th trình bày cách thc ó theo cú pháp sau ây:
# <dãy-ch
-cái><TAB><TAB>
Trong ó dãy-ch-cái có t mt n mt vài ch cái thuc ph$n $u c
a tên lnh. Chú ý
r0ng, các ch cái và hai phím <TAB> phi ưc gõ liên tip nhau.
Kt hp cách thc này v
i cách thc s! dng lnh man (v
i s phong phú v tùy ch(n
c
a lnh man) nhn ưc mt cách thc khá tuyt vi tr giúp ngưi dùng. 2
3
Ví d, mun s! dng lnh history nhưng li không nh
chính xác tên lnh ưc vit ra
như th nào mà ch. nh
nó ưc b)t $u bi ch h, hãy gõ ch h ó ti du nh)c shell và
nhn phím TAB hai l$n, s7 thy mt danh sách các lnh có ch cái $u tiên là h ưc hin
ra trên màn hình:
# h<TAB><TAB>
h2ph hboot help hexdump history
hostname htdigest h2xs hcc helpme hf77
hltest hoststat htpasswd halt hcp
helptool hinotes host hpcdtoppm hash
head hexbin hipstopgm hostid hpftodit
Như vy, tt c các lnh có tên b)t $u v
i ch h ưc hin th trên màn hình và cho
phép ngưi dùng có th xác nh ưc lnh c$n quan tâm.
Trưng hp tn ti mt s lưng l
n các lnh có cùng ch cái $u tiên mà ngưi dùng
ã gõ, thay vì hin ht m(i tên lnh, h iu hành cho ra mt thông báo hi ngưi dùng có
mun xem toàn b các lnh ó hay không. Ngưi dùng áp ng thông báo ó tu5 theo ý
mun c
a mình.
Ví d, khi ngưi dùng gõ ni dung như sau:
# p<TAB><TAB>
thì h thng áp li là:
There are 289 possibilities. Do you really wish to see them all? (y or n)
Ngưi dùng gõ phím "y" nu mun xem, hoc gõ "n" nu b qua.
Ngưi dùng có th gõ nhiu hơn mt ch cái $u tên lnh và iu ó cho phép gim
t s tên lnh mà h thng tìm ưc và hin th. Ch/ng hn, khi bit hai ch cái $u là
"pw" và ngưi dùng gõ:
# pw<TAB><TAB>
thì h thng s7 hin ra danh sách các tên lnh b)t $u bi "pw":
pwck pwconv pwd pwdb_chkpwd pwunconv
Trong trưng hp này, ngưi dùng s7 nhn bit ưc tên lnh ang c$n tìm thun tin
hơn. 2
4
CHƠNG 2. THAO TÁC VI H THNG
2.1. Quá trình khi
ng Linux
Trong ph$n này, chúng ta xem xét sơ b quá trình khi ng h iu hành Linux.
Mt trong nhng cách thc khi ng Linux ph #bin nht là cách thc do chương trình
LILO (LInux LOader) thc hin. Chương trình LILO ưc np lên "a c
a máy tính khi cài
t h iu hành Linux. LILO ưc np vào Master Boot Record c
a "a cng hoc vào
Boot Sector ti phân vùng khi ng (trên "a cng hoc "a mm). Gi s! máy tính c
a
chúng ta ã cài t Linux và s! dng LILO khi ng h iu hành. LILO thích hp v
vic trên máy tính ưc cài t mt s h iu hành khác nhau và theo ó, LILO còn cho
phép ngưi dùng ch(n la h iu hành khi ng.
Giai on khi ng Linux tùy thuc vào cu hình LILO ã ưc la ch(n trong quá
trình cài t Linux. Trong tình hung ơn gin nht, Linux ưc khi ng t "a cng hay
"a mm khi ng.
Quá trình khi ng Linux có th ưc mô t theo sơ #sau:
T
heo
sơ #này, LILO ưc ti vào máy thc hin mà vic $u tiên là ưa nhân vào b nh
trong và sau ó ti chương trình init thc hin vic khi ng Linux.
Nu cài t nhiu phiên bn Linux hay cài Linux cùng các h iu hành khác (trong các
trưng hp như th, mi phiên bn Linux hoc h iu hành khác ưc gán nhãn - label
phân bit), thì thông báo sau ây ưc LILO ưa ra:
LILO boot:
cho phép nhp xâu là nhãn c
a mt trong nhng h iu hành hin có trên máy khi
ng nó. Ti thi im ó, ngưi dùng c$n gõ nhãn c
a h iu hành c$n khi ng vào, ví
d, gõ
LILO boot: linux
nu ch(n khi ng làm vic trong Linux, hoc gõ
LILO boot: dos
nu ch(n khi ng làm vic trong MS-DOS, Windows.
Lu ý:
Nu chúng ta không nh
ưc nhãn c
a h iu hành có trong máy ch(n,
hãy gõ phím <TAB> ưc LILO cho bit nhãn c
a các h iu hành.
LILO boot: <TAB>
s7 hin ra danh sách các nhãn (ví d như): linux dos ...
và hin li thông báo nói trên ta gõ nhãn c
a h iu hành.
LILO c2ng cho phép t ch ch(n ng$m nh h iu hành khi ng
mà theo ó nu chúng ta không có tác ng gì sau thông báo ch(n h iu hành thì
LILO s7 t ng ch(n h iu hành ng$m nh ra khi ng. Nu chúng ta
không can thip vào các file tương ng c
a trình LILO thì h iu hành Linux là h
iu hành ng$m nh.
Gi s! Linux ã ưc ch(n khi ng. Khi init thc hin, chúng ta s7 thy mt chui
(khong vài chc) dòng thông báo cho bit h thng ph$n cng ưc Linux nhn din và
LILO
Nhân init 2
5
thit lp cu hình cùng v
i tt c trình iu khin ph$n mm ưc np khi khi ng. Quá
trình init là quá trình khi th
y, là cha c
a m(i quá trình. Ti thi im khi ng h thng
init thc hin vai trò $u tiên c
a mình là chy chương trình shell trong file /etc/inittab và
các dòng thông báo trên ây chính là kt qu c
a vic chy chương trình shell ó. Sau khi
chương trình shell trên ưc thc hin xong, b)t $u quá trình ngưi dùng ng nhp
(login) vào h thng.
2.2. Thtc
ng nhp và các lnh thoát khi h thng
2.2.1. $ng nhp
Sau khi h thng Linux (ly Red Hat 6.2 làm ví d) khi ng xong, trên màn hình xut
hin nhng dòng sau:
Ret Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i686
May1 login:
Dòng th nht và dòng th hai cho bit loi phiên bn Linux, phiên bn c
a nhân và
kin trúc ph$n cng có trên máy, dòng th ba là du nh)c ng nhp ngưi dùng thc
hin vic ng nhp. Chú ý là các dòng trên ây có th thay i chút ít tùy thuc vào phiên
bn Linux.
Ti du nh)c ng nhp, hãy nhp tên ngưi dùng (còn g(i là tên ng nhp): ây là tên
kí hiu ã cung cp cho Linux nh0m nhn din mt ngưi dùng c th. Tên ng nhp ng
v
i mi ngưi dùng trên h thng là duy nht, +'m theo mt mt kh-u ng nhp.
May1 login: root
Password:
ng ta !"th"thay #i các $%ng hin &"như &'(nh )*y trên ây b+ng cách sa
#i file /etc/rc.d/rc.local như sau:
Thay ,n chương &'(nh
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
&*nh
echo "" > /etc/issue
echo "Thông báo mun hin &" >> /etc/issue
./"$"sa &*nh:
echo "" > /etc/issue
echo "This is my computer" >> /etc/issue
&("trên 0*n (nh 1ng nhp 23" !"$ng sau:
This is my computer
hostname login: 2
6
Khi nhp xong tên ng nhp, h thng s7 hin ra thông báo hi mt kh-u và di chuyn
con tr xung dòng tip theo ngưi dùng nhp mt kh-u. Mt kh-u khi ưc nhp s7
không hin th trên màn hình và chính iu ó giúp tránh khi s "nhòm ngó" c
a ngưi
khác.
Nu nhp sai tên ng nhp hoc mt kh-u, h thng s7 ưa ra mt thông báo li:
May1 login: root
Password:
Login incorrect
Máy1 login:
Nu ng nhp thành công, ngưi dùng s7 nhìn thy mt s thông tin v h thng, mt
vài tin tc cho ngưi dùng... Lúc ó, du nh)c shell xut hin ngưi dùng b)t $u phiên
làm vic c
a mình.
May1 login: root
Password:
Last login: Fri Oct 27 14:16:09 on tty2
Root[may1 /root]#
Dãy kí t trong dòng cui cùng chính là du nhc shell. Trong du nh)c này, root là
tên ngưi dùng ng nhp, may1 là tên máy và /root tên thư mc hin thi (vì ây là ngưi
dùng root). Khi du nh)c shell xut hin trên màn hình thì iu ó có ngh"a là h iu hành
ã s1n sàng tip nhn mt yêu c$u m
i c
a ngưi dùng.
Du nh)c shell có th khác v
i trình bày trên ây (Mc 2.7 cung cp cách thay i du
nh)c shell), nhưng có th hiu nó là chui kí t b)t $u mt dòng có cha tr chut và luôn
xut hin mi khi h iu hành hoàn thành mt công vic nào ó.
2.2.2. Ra khi h thng
kt thúc phiên làm vic ngưi dùng c$n thc hin th
tc ra khi h thng. Có rt
nhiu cách cho phép thoát khi h thng, ây chúng ta xem xét mt s cách thông dng
nht.
Cách ơn gin nht m bo thoát khi h thng úng )n là nhn t #hp
phím CTRL+ALT+DEL. Khi ó, trên màn hình s7 hin th mt s thông báo c
a h
thng và cui cùng là thông báo thoát trư
c khi t)t máy. C$n chú ý là: Nu ang làm
vic trong môi trưng X Window System, hãy nhn t # hp phím
CTRL+ALT+BACKSPACE trư
c ri sau ó hãy nhn CTRL+ALT+DEL.
Cách th hai là s! dng lnh shutdown v
i cú pháp như sau:
shutdown [tùy-chn] <time> [cnh-báo]
Lnh này cho phép dng tt c các dch v ang chy trên h thng.
Các tùy-ch(n c
a lnh này như sau:
-k : không thc s shutdown mà ch. cnh báo.
-r : khi ng li ngay sau khi shutdown.
-h : t)t máy thc s sau khi shutdown.
-f : khi ng li nhanh và b qua vic kim tra "a. 2
7
-F : khi ng li và thc hin vic kim tra "a.
-c : b qua không chy lnh shutdown. Trong tùy ch(n này không th ưa ra tham s thi gian
nhưng có th ưa ra thông báo gii thích trên dòng lnh g!i cho tt c các ngưi dùng.
-t s-giây : qui nh init(8) ch khong thi gian s-giây tm dng gia quá trình g!i cnh
báo và tín hiu kill, trư
c khi chuyn sang mt mc chy khác.
và hai tham s v trí còn li:
time : t thi im shutdown. Tham s time có hai dng. Dng tuyt i là gg:pp (gg: gi
trong ngày, pp: phút) thì h thng s7 shutdown khi ng h#máy trùng v
i giá tr tham s. Dng
tương i là +<s> là &8n sau thi khong <s> phút s7 shutdown; coi shutdown lp tc tương
ương v
i +0.
cnh-báo : thông báo g!i n tt c ngưi dùng trên h thng. Khi lnh thc hin tt c các
máy ngưi dùng u nhn ưc cnh báo.
Ví d, khi ngưi dùng gõ lnh:
shutdown +1 Sau mot phut nua he thong se shutdown!
trên màn hình c
a tt c ngưi dùng xut hin thông báo "Sau mot phut nua he thong se
shutdown! " và sau mt phút thì h thng shutdown thc s.
Cách th ba là s! dng lnh halt v
i cú pháp như sau:
halt [tùy-chn]
Lnh này t)t h/n máy.
Các tu5 ch(n c
a lnh halt:
-w : không thc s t)t máy nhưng v4n ghi các thông tin lên file /var/log/wtmp (ây là file lưu
tr danh sách các ngưi dùng ng nhp thành công vào h thng).
-d : không ghi thông tin lên file /var/log/wtmp. Tùy ch(n -n có ý ngh"a tương t song không
tin hành vic ng b hóa.
-f : thc hin t)t máy ngay mà không thc hin l$n lưt vic dng các dch v có trên h thng.
-i : ch. thc hin dng tt c các dch v mng trư
c khi t)t máy.
Chúng ta c$n nh
r0ng, nu thoát khi h thng không úng cách thì d4n n hu qu là
mt s file hay toàn b h thng file có th b hư hng.
Lu ý:
Có th s! dng lnh exit tr v du nh)c ng nhp hoc kt thúc phiên
làm vic b0ng lnh logout.
2.2.3. Khi
ng li h thng
Ngoài vic thoát khi h thng nh các cách thc trên ây (n t # hp ba phím
Ctrl+Alt+Del, dùng lnh shutdown hoc lnh halt), khi c$n thit (ch/ng hn, gp phi
tình hung mt trình ng dng chy qu-n) có th khi ng li h thng nh lnh reboot.
Cú pháp lnh reboot:
reboot [tùy-chn]
Lnh này cho phép khi ng li h thng. Nói chung thì ch. siêu ngưi dùng m
i ưc
phép s! dng lnh reboot, tuy nhiên, nu h thng ch. có duy nht mt ngưi dùng ang 2
8
làm vic thì lnh reboot v4n ưc thc hin song h thng òi hi vic xác nhn mt
kh-u.
Các tùy ch(n c
a lnh reboot như sau là -w, -d, -n, -f, -i có ý ngh"a tương t như trong
lnh halt.
2.2.4. Khi
ng vào ch
%&ho
Linux cho phép nhiu ch khi ng, nhng ch này ưc lit kê trong file
/etc/inittab. Dư
i ây là ni dung c
a file này:
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquelsdrinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this) - ây là ch
dng hot ng ca h thng
# 1 - Single user mode - ây là ch
ơn ngi dùng, ta có th ng nhp vào ch
này trong trng hp mun khc phc mt s s c.
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) - ây là ch
a ngi dùng, giao din text, không h tr k
t ni mng.
# 3 - Full multiuser mode – Ch
a ngi dùng, giao din text
# 4 – unused – Không s dng ch
này
# 5 - X11 - ây là ch
a ngi dùng, giao din ho
# 6 - reboot (Do NOT set initdefault to this) – Ch khi ng li máy tính
#
id:3:initdefault: - ây là ch
ngm nh h thng s s dng kh!i ng
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#ca::ctrlaltdel:/bin/echo "You can't do that"
# When our UPS tells us power has failed, assume we have a few minutes 2
9
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
#3:2345:respawn:/sbin/mingetty tty3
#4:2345:respawn:/sbin/mingetty tty4
#5:2345:respawn:/sbin/mingetty tty5
#6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm –nodaemon
Trong ó ch khi ng s 3 là ch khi ng vào ch Text, và ch 5 là
kh ng vào ch #ho. Như vy cho máy tính khi ng vào ch #ho ta s!a
li dòng cu hình
id:3:initdefault:
thành
id:5:initdefault:
Trong Linux có mt s loi giao din #ho do mt s t #chc vit ra. Hai t #chc n i
ting là GNOME (http://www.gnome.org) và KDE (http://www.kde.org) ã vit ra các giao
din #ho mang tên trùng v
i t #chc ó là GNOME và KDE.
C2ng tu5 vào vic ưc cài giao din GNOME hay KDE mà khi khi ng vào ch
#ho, máy tính có các giao din tương ng. Trên hình trên là giao din GNOME mà khi
khi ng vào ch #ho. Mt khác, các giao din này liên tc ưc phát trin, do ó 3
0
mi phiên bn s7 có s khác nhau. Trong giao din ng nhp #h(a, h thng hin th hp
thoi cho phép ngưi dùng nhp vào tên tài khon; sau khi ngưi dùng nhp tên tài khon
c
a mình, h thng hi tip mt kh-u. Nu c tên tài khon và mt kh-u u chính xác thì
ngưi dùng ưc phép vào h thng và mt giao din làm vic m
i s7 hin ra như hình
dư
i.
2.3. Lnh thay
i mt khu
Mt kh-u là vn rt quan tr(ng trong các h thng a ngưi dùng và m bo tính
bo mt ti a, c$n thit phi chú ý t
i vic thay i mt kh-u. Thm chí trong trưng hp
h thng ch. có mt ngưi s! dng thì vic thay i mt kh-u v4n là rt c$n thit.
Mt kh-u là mt xâu kí t i +'m v
i tên ngưi dùng m bo cho phép mt ngưi vào
làm vic trong h thng v
i quyn hn ã ưc quy nh. Trong quá trình ng nhp, ngưi
dùng phi gõ úng tên và mt kh-u, trong ó gõ mt kh-u là công vic b)t buc phi thc
hin. Tên ngưi dùng có th ưc cô ng khai song mt kh-u thì tuyt i phi ưc m
bo bí mt.
· Vic ng ký tên và mt kh-u c
a siêu ngưi dùng ưc tin hành trong quá trình khi
to h iu hành Linux.
· Vic ng ký tên và mt kh-u c
a mt ngưi dùng thông thưng ưc tin hành khi
mt ngưi dùng m
i ng ký tham gia s! dng h thng. Thông thưng siêu ngưi
dùng cung cp tên và mt kh-u cho ngưi dùng m
i (có th do ngưi dùng ngh)
và dùng lnh adduser (hoc lnh useradd) ng ký tên và mt kh-u ó v
i h3
1
thng. Sau ó, ngưi dùng m
i nht thit c$n thay i mt kh-u bo m vic gi
bí mt cá nhân tuyt i.
Lnh passwd cho phép thay i mt kh-u ng v
i tên ng nhp ngưi dùng. Cú pháp
lnh passwd:
passwd [tùy-chn] [tên-ngưi-dùng]
v
i các tùy ch(n như sau:
-k : thay i mt kh-u ngưi dùng. Lnh òi hi phi xác nhn quyn b0ng vic gõ mt kh-u
ang dùng trư
c khi thay i mt kh-u. Cho phép ngưi dùng thay i mt kh-u c
a mình c
lp v
i siêu ngưi dùng.
-f : t mt kh-u m
i cho ngưi dùng song không c$n tin hành vic kim tra mt kh-u ang
dùng. Ch. siêu ngưi dùng m
i có quyn s! dng tham s này.
-l : khóa mt tài khon ngưi dùng. Vic khóa tài khon thc cht là vic dch bn mã hóa mt
kh-u thành mt xâu ký t vô ngh"a b)t $u bi kí hiu "!". Ch. siêu ngưi dùng m
i có quyn
s! dng tham s này.
-stdin : vic nhp mt kh-u ngưi dùng ch. ưc tin hành t thit b vào chu-n không th tin
hành t ưng d4n (pipe). Nu không có tham s này cho phép nhp mt kh-u c t thit b vào
chu-n hoc t ưng d4n.
-u : m khóa (tháo b khóa) mt tài khon (i ng4u v
i tham s -l). Ch. siêu ngưi dùng m
có quyn s! dng tham s này.
-d : xóa b mt kh-u c
a ngưi dùng. Ch. siêu ngưi dùng m
i có quyn s! dng tham s này.
-S : hin th thông tin ng)n g(n v trng thái mt kh-u c
a ngưi dùng ưc ưa ra. Ch. siêu
ngưi dùng m
i có quyn s! dng tham s này.
Nu tên-ngưi-dùng không có trong lnh thì ng$m nh là chính ngưi dùng ã gõ lnh
này.
Ví d khi ngưi dùng user1 gõ lnh:
# passwd user1
h thng thông báo:
Changing password for user user1
New UNIX password:
ngưi dùng nhp mt kh-u m
i c
a mình vào. Sau khi ngưi dùng gõ xong mt kh-u
i, h thng cho ra thông báo:
BAD PASSWORD: it is derived from your password entry
Retype new UNIX password:
ngưi dùng kh/ng nh mt l$n na mt kh-u va gõ dòng trên (nh
phi gõ li úng ht
như l$n trư
c). Ch
nên quá phân vân vì thông báo dòng phía trên vì h$u ht khi gõ mt
kh-u m
i luôn gp nhng thông báo kiu i loi như vy, ch/ng hn như:
BAD PASSWORD: it is too simplistic/systematic
Và sau khi chúng ta kh/ng nh li mt kh-u m
i, h thng cho ra thông báo:
Passwd: all authentication tokens updated successfully.
cho bit vic thay i mt kh-u thành công và du nh)c shell li hin ra.
Khi siêu ngưi dùng gõ lnh: 3
2
# passwd -S root
s7 hin ra thông báo
Changing password for user root
Password set, MD5 encryption
cho bit thut toán mã hóa mt kh-u mà Linux s! dng là mt thut toán hàm bm có tên là
MD5.
Lu ý:
Có mt li khuyên i v
i ngưi dùng là nên ch(n mt kh-u không quá ơn
gin quá (nh0m tránh ngưi khác d*#dò tìm ra) hoc không quá phc tp (tránh khó
khn cho chính ngưi dùng khi phi ghi nh
và gõ mt kh-u). c bit không nên s!
dng h( tên, ngày sinh, s in thoi ... c
a bn thân hoc ngưi thân làm mt kh-u
vì ây là mt trong nhng trưng hp mt kh-u ơn gin nht.
Nu thông báo mt kh-u quá ơn gin ưc lp i lp li mt vài l$n và
không có thông báo mt kh-u m
i thành công ã quay v du nh)c shell thì nên gõ
li lnh và ch(n mt mt kh-u m
i phc tp hơn ôi chút.
2.4. Lnh xem, thit
t ngày, gi hin ti và xem lch trên h thng
2.4.1 Lnh xem, thit
t ngày, gi
Lnh date cho phép có th xem hoc thit t li ngày gi trên h thng.
Cú pháp c
a lnh gm hai dng, dng xem thông tin v ngày, gi:
date [tùy-chn] [+
nh-dng]
và dng thit t li ngày gi cho h thng:
date [tùy-chn] [MMDDhhmm[ [CC[YY] ]-ss]]
Các tùy-ch(n như sau:
-d, --date=xâu-vn-bn : hin th thi gian dư
i dng xâu-vn-b
n, mà không ly "thi
gian hin ti c
a h thng” như theo ng$m nh; xâu-vn-b
n ưc t trong hai du nháy ơn
hoc hai du nháy kép.
-f, --file=file-vn-bn : ging như mt tham s --date nhưng ng v
i nhiu ngày c$n xem:
mi dòng c
a file-vn-bn có vai trò như mt xâu-vn-bn trong trưng hp tham s --date.
-I, --iso-8601[=mô-t] : hin th ngày gi theo chu-n ISO-8601 (ví d: 2000-11-8).
-I tương ương v
i tham s --iso-8601='date'
V
i --iso-8601: nu mô-t
là 'date' (hoc không có) thì hin th ngày, nu mô-t
là
'hours' hin th ngày+gi, nu mô-t
là 'minutes': ngày+gi+phút; nu mô-t
là
'seconds': ngày + gi + phút + giây.
-r, --reference= file : hin th thi gian s!a i file l$n g$n ây nht.
-R, --rfc-822 : hin th ngày theo RFC-822 (ví d: Wed, 8 Nov 2000 09:21:46 -0500).
-s, --set=xâu-vn-bn : thit t li thi gian theo kiu xâu-vn-bn.
-u, --utc, --universal : hin th hoc thit t thi gian theo UTC (ví d: Wed Nov 8 14:29:12
UTC 2000).
--help : hin th thông tin tr giúp và thoát. 3
3
Trong dng lnh date cho xem thông tin ngày, gi thì tham s nh-dng iu khin
cách hin th thông tin kt qu. nh-dng là dãy có t mt n nhiu cp gm hai kí t,
trong mi cp kí t $u tiên là % còn kí t th hai mô t nh dng.
Do s lưng nh dng là rt nhiu vì vy chúng ta ch. xem xét mt s nh dng in
hình ( xem $y
các nh dng, s! dng lnh man date).
Dư
i ây là mt s nh dng in hình:
%% : Hin ra chính kí t %.
%a : Hin ra thông tin tên ngày trong tu$n vit t)t theo ngôn ng bn a.
%A : Hin ra thông tin tên ngày trong tu$n vit $y
theo ngôn ng bn a.
%b : Hin ra thông tin tên tháng vit t)t theo ngôn ng bn a.
%B : Hin ra thông tin tên tháng vit $y
theo ngôn ng bn a.
Trong dng lnh date cho phép thit t li ngày gi cho h thng thì tham s
[MMDDhhmm[ [CC[YY] [.ss]] mô t ngày, gi m
i c$n thit t, trong ó:
MM: hai s ch. tháng,
DD: hai s ch. ngày trong tháng,
hh: hai s ch. gi trong ngày,
mm: hai s ch. phút,
CC: hai s ch. th k.,
YY: hai s ch. nm trong th k..
Các dòng ngay dư
i ây trình bày mt s ví d s! dng lnh date, mi ví d ưc cho
tương ng v
i mt cp hai dòng, trong ó dòng trên mô t lnh ưc gõ còn dòng dư
i là
thông báo c
a Linux.
# date
Wed Jan 3 23:58:50 ICT 2001
# date -d='01/01/2000'
Sat Jan 1 00:00:00 ICT 2000
# date -iso-8601='seconds'
2000-12-01T00:36:41-0500
# date -d='01/01/2001'
Mon Jan 1 00:00:00 ICT 2001
# date 010323502001.50
Wed Jan 3 23:50:50 ICT 2001
# date +%a%A
Wed Wednesday
# date +%a%A%b%B
Wed Wednesday Jan January
# date +%D%%%j
01/05/01%005
2.4.2. Lnh xem lch
Lnh cal cho phép xem lch trên h thng v
i cú pháp như sau:
cal [tùy-chn] [<tháng> [<nm>]] 3
4
nu không có tham s, lch c
a tháng hin thi s7 ưc hin th.
Các tu5-ch(n là:
-m : ch(n ngày Th hai là ngày $u tiên trong tu$n (mc nh là ngày Ch
nht).
-j : hin th s ngày trong tháng dư
i dng s ngày trong nm (ví d: ngày 1/11/2000 s7 ưc
hin th dư
i dng là ngày th 306 trong nm 2000, s ngày b)t $u ưc tính t ngày 1/1).
-y : hin th lch c
a nm hin thi.
Ví d:
# cal 1 2001
January 2001
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Khi nhp dòng lnh trên, trên màn hình s7 hin th lch c
a tháng 1 nm 2001, mc nh
ch(n ngày ch
nht là ngày b)t $u c
a tu$n. Dư
i ây là ví d hin th s ngày trong tháng
3 dư
i dng s ngày trong nm 2001.
# cal -j 3 2001
March 2001
Su Mo Tu We Th Fr Sa
60 61 62
63 64 65 66 67 68 69
70 71 72 73 74 75 76
77 78 79 80 81 82 83
84 85 86 87 88 89 90
2.5. Xem thông tin h thng
Lnh uname cho phép xem thông tin h thng v
i cú pháp là:
uname [tùy-chn]
Nu không có tu5 ch(n thì hin tên h iu hành.
Lnh có các tùy ch(n là:
-a, --all : hin tt c các thông tin.
-m, --machine : kiu kin trúc c
a b x! lý (i386, i486, i586, i686...).
-n, --nodename : hin tên c
a máy.
-r, --release : hin nhân c
a h iu hành.
-s, --sysname : hin tên h iu hành.
-p, --processor : hin kiu b x! lý c
a máy ch
.
Ví d, nu gõ lnh
# uname -a 3
5
thì màn hình s7 hin ra như sau:
Linux linuxsrv.linuxvn.net 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown
#
Thông tin hin ra có tt c 6 trưng là:
Tên h iu hành: Linux
Tên máy: linuxsrv.linuxvn.net
Tên nhân c
a h iu hành: 2.2.14-5.0
Ngày sn xut: #1 Tue Mar 7 21:07:39 EST 2000
Kiu kin trúc b x! lý: i686
Kiu b x! lý c
a máy ch
: unknown
Ví d nu gõ lnh:
# uname -spr
thì màn hình s7 hin ra như sau:
Linux 2.2.14-5.0 unknown
là tên h iu hành, tên nhân và kiu b x! lý c
a máy ch
.
Lu ý:
Chúng ta làm rõ thêm ni dung lưu ý trong mc 1.3.1 v tham s khóa kt
hp: Trong ví d trên ây khi vit tham s -spr là yêu c$u thc hin lnh usame
v
i ngh"a kt hp tình hung theo c ba tham s khóa -s, -p, -r. Chú ý r0ng, không
th vit -s -p -r thay cho -spr ưc. Như ã lưu ý mc 1.3.1 trong nhiu lnh c
a
Linux cho phép vit kt hp các tham s khóa theo cách thc như trên mi*n là các
tham s ó không xung kh)c v
i nhau.
2.6. Thay
i ni dung du nhc shell
Trong Linux có hai loi du nh)c: du nh)c cp mt (du nh)c shell) xut hin khi nhp
lnh và du nh)c cp hai (du nh)c nhp liu) xut hin khi lnh c$n có d liu ưc nhp
t bàn phím và tương ng v
i hai bin nh)c tên là PS1 và PS2.
PS1 là bin h thng tương ng v
i du nh)c cp 1: Giá tr c
a PS1 chính là ni dung hin
th c
a du nh)c shell. nhn bit thông tin h thng hin ti, mt nhu c$u t ra là c$n
thay i giá tr c
a các bin h thng PS1 và PS2.
Linux cho phép thay i giá tr c
a bin h thng PS1 b0ng lnh gán tr m
i cho nó. Lnh
này có dng:
# PS1='<dãy kí t>'
Nm (5) kí t $u tiên c
a lnh gán trên ây (PS1=') phi ưc vit liên tip nhau. Dãy
kí t n0m gia cp hai du nháy ơn (có th s! dng cp hai du kép ") và không ưc
phép cha du nháy. Dãy kí t này bao gm các cp kí t iu khin và các kí t khác, cho
phép có th có du cách. Cp kí t iu khin gm hai kí t, kí t $u tiên là du s #xuôi "\"
còn kí t th hai nhn mt trong các trưng hp lit kê trong bng dư
i ây. Bng dư
i ây
i thiu mt s cp ký t iu khin có th ưc s! dng khi mun thay i du nh)c
lnh:
Cp ký t i"u khin Ý ngh#a 3
6
\! Hin th th t c
a lnh trong lch s!
\# Hin th th t c
a lnh
\$ Hin th du ô-la ($). i v
i siêu ngưi dùng
(super user), thì hin th du s hiu (#)
\\ Hin th du s #(\)
\d Hin th ngày hin ti
\h Hin th tên máy (hostname)
Ký hiu xung dòng
\s Hin th tên h shell
\t Hin th gi hin ti
\u Hin th tên ngưi dùng
\W Hin th tên thc s c
a thư mc hin thi (ví d thư
mc hin thi là /mnt/hda1 thì tên thc s c
a nó là
/hda1)
\w Hin th tên $y
c
a thư mc hin thi (ví d
/mnt/hda1)
Ví d, hin thi du nh)c shell có dng:
root[may1 /hda1]#
Sau khi gõ lnh
root@may1 /hda1]# PS1='[\h@\u \w : \d]\$'
thì du nh)c shell ưc thay i là:
[may1@root /mnt/hda1 : Fri Oct 27 ]#
ngoài vic i th t gia tên ngưi dùng và máy còn cho chúng ta bit thêm v ngày h
thng qun lý và tên $y
c
a thư mc hin thi.
Linux cung cp cách thc hoàn toàn tương t như i v
i bin PS1 thay i giá tr bin
h thng PS2 tương ng v
i du nh)c cp hai.
2.7. Lnh gi ngôn ng tính toán s hc
Linux cung cp mt ngôn ng tính toán v
i chính xác tùy ý thông qua lnh bc. Khi
yêu c$u lnh này, ngưi dùng ưc cung cp mt ngôn ng tính toán (và cho phép lp trình
tính toán có dng ngôn ng lp trình C) hot ng theo thông dch. Trong ngôn ng lp
trình ưc cung cp (tm thi g(i là ngôn ng bc), tn ti rt nhiu công c h tr tính toán
và lp trình tính toán: kiu phép toán s h(c phong phú, phép toán so sánh, mt s hàm
chu-n, bin chu-n, cu trúc iu khin, cách thc nh ngh"a hàm, cách thc thay i
chính xác, t li chú thích ... Ch. c$n s! dng mt ph$n nh tác ng c
a lnh bc, chúng
ta ã có mt "máy tính s bm tay" hiu qu.
Cú pháp lnh bc:
bc [tùy-chn] [file...]
v
i các tu5 ch(n sau ây:
-l, --mathlib : thc hin phép tính theo chu-n thư vin toán h(c (ví d:
5/5=1.00000000000000000000).
-w, --warn : khi thc hin phép tính không tuân theo chu-n POSIX (POSIX là mt chu-n
trong Linux) thì mt cnh báo xut hin. 3
7
-s, --standard : thc hin phép tính chính xác theo chu-n c
a ngôn ng POSIX bc.
-q, --quiet : không hin ra li gi
i thiu v ph$n mm GNU khi dùng bc.
Tham s file là tên file cha chương trình vit trên ngôn ng bc, khi lnh bc thc hin
s7 t ng chy các file chương trình này (Nu có nhiu tham s thì có ngh"a s7 chy nhiu
chương trình liên tip nhau).
Dư
i ây là mt ví d s! dng lnh bc dng ơn gin nht.
Khi gõ lnh ti du nh)c:
# bc -l
màn hình xut hin li gi
i thiu v GNU khi dùng bc và ngôn ng bc ưc kích hot
phc v ngưi dùng.
bc 1.05
Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
5^3
125
12+12+78*7-62/4
554.50000000000000000000
a=4
a^a
256
a*78
312
b=45
a*b
180
a/b
.08888888888888888888
a%b
.00000000000000000040
ở ây * là phép nhân, ^ là phép tính lu9 tha, / là phép chia ly thương, % là chia ly ph$n
dư.
Lu ý:
Ngôn ng lp trình tính toán bc là mt ngôn ng rt mnh có ni dung ht
sc phong phú cho nên trong khuôn kh #c
a tài liu này không th mô t ht các ni
dung c
a ngôn ng ó ưc. Chúng ta c$n s! dng lnh man bc nhn ưc
thông tin $y
v lnh bc và ngôn ng tính toán bc.
Ở ây trình bày sơ b mt s yu t cơ bn nht c
a ngôn ng ó (bt là vit
t)t c
a biu thc, b là vit t)t c
a bin):
Các phép tính: - bt: ly i; ++ b, --b, b ++, b --: phép toán tng, gim b; các
phép toán hai ngôi cng +, tr -, nhân *, chia /, ly ph$n dư %, l2y tha nguyên 3
8
bc ^; gán =; gán sau khi thao tác <thao tác>=; các phép toán so sánh <, <=, >,
>=, b0ng ==, khác != ...
Phép so sánh cho 1 nu úng, cho 0 nu sai.
Bn bin chu-n là scale s lưng ch s ph$n thp phân; last giá tr tính toán
cui cùng; ibase cơ s h m i v
i input và obase là cơ s h m v
i output
(ng$m nh hai bin này có giá tr 10).
Các hàm chu-n sin s (bt); cosin c (bt); arctg a (bt); lôgarit t nhiên l (bt); m2 cơ
s t nhiên e (bt); hàm Bessel bc nguyên n c
a bt là j (n, bt).3
9
CHƠNG 3. H THNG FILE
3.1 Tng quan v h thng file
3.1.1. Mt s khái nim
Ngưi dùng ã tng làm vic v
i h iu hành DOS/Windows thì rt quen bit v
i các
khái nim: file (tp tin), thư mc, thư mc hin thi ... m bo tính h thng và thun
tin cho ngưi dùng chưa tng làm vic thành tho v
i mt h iu hành nào khác, chương
này v4n gi
i thiu v các khái nim này mt cách sơ b.
Mt i tưng in hình trong các h iu hành ó là file. File là mt tp hp d liu có
t #chc ưc h iu hành qun lý theo yêu c$u c
a ngưi dùng. Cách t #chc d liu trong
file thuc v ch
c
a nó là ngưi ã to ra file. File có th là mt vn bn (trưng hp c
bit là chương trình ngun trên C, PASCAL, shell script ...), mt chương trình ngôn ng
máy, mt tp hp d liu ... H iu hành t #chc vic lưu tr ni dung file trên các thit b
nh
lâu dài (ch/ng hn "a t) và m bo các thao tác lên file. Chính vì có h iu hành
m bo các chc nng liên quan n file nên ngưi dùng không c$n bit file c
a mình lưu
vùng nào trên "a t, b0ng cách nào (c/ghi lên các vùng c
a "a t mà v4n thc hin
ưc yêu c$u tìm kim, x! lý lên các file.
H iu hành qun lý file theo tên g(i c
a file (tên file) và mt s thuc tính liên quan
n file. Trư
c khi gi
i thiu mt s ni dung liên quan n tên file và tên thư mc, chúng
ta gi
i thiu sơ b v khái nim thư mc.
làm vic ưc v
i các file, h iu hành không ch. qun lý ni dung file mà còn
phi qun lý các thông tin liên quan n các file. Thư mc (directory) là i tưng ưc
dùng cha thông tin v các file, hay nói theo mt cách khác, thư mc cha các file. Các
thư mc c2ng ưc h iu hành qun lý trên vt d4n ngoài và vì vy, theo ngh"a này, thư
mc c2ng ưc coi là file song trong mt s trưng hp phân bit v
i "file" thư mc,
chúng ta dùng thut ng file thông thng. Khác v
i file thông thưng, h iu hành li
quan tâm n ni dung c
a thư mc.
Mt s ni dung sau ây liên quan n tên file (bao gm c tên thư mc):
Tên file trong Linux có th dài t
i 256 ký t, bao gm các ch cái, ch s, du
gch ni, gch chân, du chm. Tên thư mc/file trong Linux có th có nhiu hơn mt
du chm, ví d: This_is.a.VERY_long.filename. Nu trong tên file có du chm
"." thì xâu con c
a tên file t du chm cui cùng ưc g(i là ph$n m rng c
a tên
file (hoc file). Ví d, tên file trên ây có ph$n m rng là .filename. Chú ý r0ng khái
nim ph$n m rng ây không mang ý ngh"a như mt s h iu hành khác (ch/ng
hn như MS-DOS).
Lu ý:
Chúng ta nên lưu ý r0ng, không phi ký t nào c2ng có ngh"a. Nu có hai
file ch. khác nhau ký t cui cùng, thì i v
i Linux, ó là hai file có th trùng tên.
Bi l7, Linux ch. ly 32 hay 64 ký t $u tiên trong tên file mà thôi (tùy theo phiên
bn Linux), ph$n tên file còn li dành cho ch
c
a file, Linux theo dõi thông tin,
nhưng thưng không xem các ký t ng sau ký t th 33 hay 65 là quan tr(ng i
v
i nó.
Xin nh)c li lưu ý v phân bit ch hoa và ch thưng i v
i tên thư mc/file,
ví d hai file FILENAME.tar.gz và filename.tar.gz là hai file khác nhau. 4
0
Nu trong tên thư mc/file có cha khong trng, s7 phi t tên thư mc/file
vào trong cp du nháy kép s! dng thư mc/file ó. Ví d, to thư mc có tên là
“My document” ch/ng hn, hãy ánh dòng lnh sau:
# mkdir "My document"
Mt s ký t sau không ưc s! dng trong tên thư mc/file: !, *, $, &, # ...
Khi s! dng chương trình mc (Midnight Commander), vic hin th tên file s7
b #sung mt kí t theo ngh"a: du "*" cho file kh thi trong Linux, du "~" cho file sao
lưu, du "." cho file -n, du "@" cho file liên kt...
Tp hp tt c các file có trong h iu hành ưc g(i là h thng file là mt h thng
thng nht. Bi chính t cách thc s! dng thư mc, h thng file ưc t #chc lôgic theo
dng hình cây: H thng file ưc xut phát t mt thư mc gc (ưc kí hiu là "/") và
cho phép to ra thư mc con trong mt thư mc bt k5. Thông thưng, khi khi to Linux
ã có ngay h thng file c
a nó. Hình 3.1. cho minh h(a mt ph$n trong cây lôgic c
a h
thng file.
ch. mt file hay mt thư mc, chúng ta c$n ưa ra mt ưng d4n, ví d ưng
d4n xác nh file Xclients trong hình 3.1. chúng ta vit như sau:
/etc/X11/xinit/Xclients
ưng d4n này cho bit Xclients n0m trong xinit, xinit n0m trong X11, X11
n0m trong etc và etc n0m trong gc /.
root bin etc usr home dev
peng office52 sh date who X11 src bin user1 user2 tty00 tty01
xinit
Xclients Xmodmap
4(nh 3.1. Mt phn cu &'c lôgic $ng cây a h"thng File 4
1
Tên file thưng là tham s thc s khi gõ lnh và công vic gõ lnh tr nên rt nng n
i v
i ngưi dùng nu như trong lnh phi gõ mt ưng d4n dài theo dng trên (ưc
bit v
i tên g(i là ng d$n tuyt i). Vì vy, Linux (c2ng như nhiu h iu hành khác)
s! dng khái nim th mc hin thi c
a mi ngưi dùng làm vic trong h thng. Thư
mc hin thi là mt thư mc trong h thng file mà hin thi "ngưi dùng ang ó".
Qua thư mc hin thi, Linux cho phép ngưi dùng ch. mt file trong lnh ng)n g(n
hơn nhiu. Ví d, nu thư mc hin thi là thư mc xinit thì ch. file ã nói, ngưi dùng
ch. c$n vit Xclients hoc ./Xclients trong ó kí hiu "." ch. thư mc hin thi.
ưng d4n ưc xác nh qua thư mc hin thi ưc g(i là ng d$n tơng i.
Khi mt ngưi dùng ng nhp vào h thng, Linux luôn chuyn ngưi dùng vào thư
mc riêng, và ti thi im ó thư mc riêng là thư mc hin thi c
a ngưi dùng. Thư
mc riêng c
a siêu ngưi dùng là /root, thư mc riêng c
a ngưi dùng có tên là user1 là
/home/user1 ... Linux cho phép dùng lnh cd chuyn sang thư mc khác (ly thư
mc khác làm thư mc hin thi). Hai du chm ".." ưc dùng ch. thư mc ngay trên
thư mc hin thi (cha c
a thư mc hin thi).
Linux còn cho phép ghép mt h thng file trên mt thit b nh
("a mm, vùng "a
cng chưa ưc ưa vào h thng file) thành mt thư mc con trong h thng file c
a h
thng b0ng lnh mount. Các h thng file ưc ghép thuc vào các kiu khác nhau.
Hai mc tip theo (3.1.2 và 3.1.3.) gi
i thiu nhng ni dung sâu hơn v h thng file
Linux.
3.1.2. Sơ b kin trúc ni ti ca h thng file
Trên "a t, h thng file ưc coi là dãy tu$n t các khi lôgic mi khi cha hoc
512B hoc 1024B hoc bi c
a 512B là c nh trong mt h thng file. Trong h thng
file, các khi d liu ưc a ch. hóa b0ng cách ánh ch. s liên tip, mi a ch. ưc
cha trong 4 byte (32 bit).
Cu trúc ni ti c
a h thng file bao gm 4 thành ph$n k tip nhau: Boot block (dùng
khi ng h thng), Siêu khi (Super block), Danh sách inode và Vùng d liu.
Dư
i ây, chúng ta xem xét sơ lưc ni dung các thành ph$n cu trúc ni ti mt h
thng file.
Siêu khi
Siêu khi cha nhiu thông tin liên quan n trng thái c
a h thng file. Trong siêu
khi có các trưng sau ây:
Kích thư
c c
a danh sách inode (khái nim inode s7 ưc gii thích trong
mc sau): nh kích c6#vùng không gian trên H thng file qun lý các inode.
Kích thư
c c
a h thng file.
Hai kích thư
c trên ây tính theo ơn v dung lưng b nh
ngoài,
Mt danh sách ch. s các khi ri (thưng trc trên siêu khi) trong h
thng file. 4
2
Ch. s các khi ri thưng trc trên siêu khi ưc dùng áp ng nhu c$u phân phi
i. Chú ý r0ng, danh sách ch. s các khi ri có trên siêu khi ch. là mt b phn c
a tp
tt c các khi ri có trên h thng file.
Ch. s c
a khi ri tip theo trong danh sách các khi ri.
Ch. s khi ri tip theo dùng h tr vic tìm kim tip các khi ri: b)t $u tìm t
khi có ch. s này tr i. iu ó có ngh"a là m(i khi có ch. s không l
n hơn ch. s này
hoc có trong danh sách các khi ri thưng trc hoc ã ưc cp phát cho mt file nào
ó.
Nhiu thao tác to file m
i, xoá file, thay i ni dung file v.v. cp nht các thông tin này.
Mt danh sách các inode ri (thưng trc trên siêu khi) trong h thng file.
Danh sách này cha ch. s các inode ri ưc dùng phân phi ngay ưc cho mt
file m
i ưc khi to. Thông thưng, danh sách này ch. cha mt b phn các inode ri
trên h thng file.
Ch. s inode ri tip theo trong danh sách các inode ri.
Ch. s inode ri tip theo nh v vic tìm kim tip thêm inode ri: b)t $u tìm t
inode có ch. s này tr i. iu ó có ngh"a là m(i inode có ch. s không l
n hơn ch. s
này hoc có trong danh sách các inode ri thưng trc hoc ã ưc tương ng v
i mt file
nào ó.
Hai tham s trên ây to thành cp xác nh ưc danh sách các inode ri trên h thng
file các thao tác to file m
i, xoá file cp nht thông tin này.
Các trưng khóa (lock) danh sách các khi ri và danh sách inode ri: Trong
mt s trưng hp, ch/ng hn khi h thng ang làm vic thc s v
i "a t cp
nht các danh sách này, h thng không cho phép cp nht t
i hai danh sách nói
trên.
C ch. d4n v vic siêu khi ã ưc bin i: nh k5 thi gian siêu khi
b nh
trong ưc cp nht li vào siêu khi "a t và vì vy c$n có thông tin v
vic siêu khi b nh
trong khác v
i ni dung b nh
ngoài: nu hai bn không
ging nhau thì c$n phi bin i chúng ưc ng nht.
C ch. d4n r0ng h thng file ch. có th (c (cm ghi): Trong mt s trưng
hp, h thng ang cp nht thông tin t b nh
ngoài thì ch. cho phép (c i v
h thng file,
S lưng t ng cng các khi ri trong h thng file,
S lưng t ng cng các inode ri trong h thng file,
Thông tin v thit b,
Kích thư
c khi (ơn v phân phi d liu) c
a h thng file. Hin ti kích
thư
c ph #bin c
a khi là 1KB.
Trong thi gian máy hot ng, theo tng giai on, nhân s7 ưa siêu khi lên "a nu
nó ã ưc bin i phù hp v
i d liu trên h thng file.
Mt trong khái nim ct lõi xut hin trong h thng file ó là inode. Các i tưng liên
quan n khái nim này s7 ưc trình bày trong các mc tip theo. 4
3
Inode
Mi khi mt quá trình khi to mt file m
i, nhân h thng s7 gán cho nó mt inode
chưa s! dng. hiu rõ hơn v inode, chúng ta xem xét sơ lưc mi quan h liên quan
gia file d liu và vic lưu tr trên vt d4n ngoài i v
i Linux.
Ni dung c
a file ưc cha trong vùng d liu c
a h thng file và ưc phân chia các
khi d liu (cha ni dung file) và hình nh phân b ni dung file có trong mt inode
tương ng. Liên kt n tp hp các khi d liu này là mt inode, ch. thông qua inode m
có th làm vic v
i d liu ti các khi d liu: Inode cha dng thông tin v tp hp các
khi d liu ni dung file. Có th quan nim r0ng, t #hp gm inode và tp các khi d liu
như vy là mt file vt lý: inode có thông tin v file vt lý, trong ó có a ch. c
a các khi
nh
cha ni dung c
a file vt lý. Thut ng inode là s kt hp c
a hai t index v
i node
và ưc s! dng ph dng trong Linux.
Các inode ưc phân bit nhau theo ch. s c
a inode: ó chính là s th t c
a inode
trong danh sách inode trên h thng file. Thông thưng, h thng dùng 2 bytes lưu tr
ch. s c
a inode. V
i cách lưu tr ch. s như th, không có nhiu hơn 65535 inode trong
mt h thng file.
Như vy, mt file ch. có mt inode song mt file li có mt hoc mt s tên file. Ngưi
dùng tác ng thông qua tên file và tên file li tham chiu n inode (tên file và ch. s
inode là hai trưng c
a mt ph$n t! c
a mt thư mc). Mt inode có th tương ng v
i mt
hoc nhiu tên file, mi tương ng như vy ưc g(i là mt liên kt. Inode ưc lưu tr ti
vùng danh sách các inode.
Trong quá trình làm vic, Linux dùng mt vùng b nh
, ưc g(i là bng inode (trong
mt s trưng hp, nó còn ưc g(i tưng minh là bng sao in-core inode) v
i chc nng
tương ng v
i vùng danh sách các inode có trong h thng file, h tr cho quá trình truy
nhp d liu trong h thng file. Ni dung c
a mt in-core inode không ch. cha các thông
tin trong inode tương ng mà còn ưc b #sung các thông tin m
i giúp cho quá trình x! lý
inode.
Chúng ta xem xét cu trúc ni ti c
a mt inode thy ưc s trình bày ni ti c
a
mt file. Inode bao gm các trưng thông tin sau ây:
Kiu file. Trong Linux phân loi các kiu file: file thông thưng (regular),
thư mc, c t kí t, c t khi và ng d4n FIFO (pipes). Linux quy nh trưng
kiu file có giá tr 0 tương ng ó là inode chưa ưc s! dng.
Quyn truy nhp file. Trong Linux, file là mt tài nguyên chung c
a h
thng vì vy quyn truy nhp file ưc c bit quan tâm tránh nhng trưng hp
truy nhp không hp l. i v
i mt inode, có 3 mc quyn truy nhp liên quan n
các i tưng:
mc ch
c
a file (i tưng này ưc ký hiu là u: t ch user),
mc nhóm ngưi dùng c
a ch
nhân c
a file (i tưng này ưc ký hiu
là g: t ch group),
mc ngưi dùng khác (i tưng này ưc ký hiu là a: t ch all).
Quyn truy nhp là (c, ghi, thc hin hoc mt t #hp nào ó t nhóm gm 3 quyn
trên. Chú ý r0ng, quyn thc hin i v
i mt thư mc tương ng v
i vic cho phép tìm
mt tên file có trong thư mc ó.
S lưng liên kt i v
i inode: ây chính là s lưng các tên file trên các
thư mc ưc liên kt v
i inode này, 4
4
nh danh ch
nhân c
a inode,
nh danh nhóm ch
nhân: xác nh tên nhóm ngưi dùng mà ch
file là
mt thành viên c
a nhóm này,
dài c
a file tính theo byte,
Thi gian truy nhp file:
thi gian file ưc s!a i mun nht,
thi gian file ưc truy nhp mun nht,
thi gian file ưc khi to,
• Bng a ch. cha các a ch. khi nh
cha ni dung file. Bng này có 13 ph$n
t! a ch., trong ó có 10 ph$n t! trc tip, 1 ph$n t! gián tip bc 1, 1 ph$n t!
gián tip bc 2 và mt ph$n t! gián tip bc 3 (chi tit có trong ph$n sau).
Ni dung c
a file thay i khi có thao tác ghi lên nó; ni dung c
a mt inode thay i
khi ni dung c
a file thay i hoc thay i ch
hoc thay i quyn hoc thay i s liên
kt.
Ví d v ni dung mt inode như sau:
type regular
perms rwxr-xr-x
links 2
owner 41CT
group 41CNTT
size 5703 bytes
accessed Sep 14 1999 7:30 AM
modified Sep 10 1999 1:30 PM
inode Aug 1 1995 10:15 AM
Các ph$n t! a ch. d liu
Bn sao in-core inode còn b #sung thêm trưng trng thái c
a in-core inode.
• Trưng trng thái c
a in-core inode có các thông tin sau:
inode ã b khoá,
mt quá trình ang ch i khi inode tháo khóa,
in-core inode khác v
i inode do s thay i d liu trong inode,
in-core inode khác v
i inode do s thay i d liu trong file,
s lưng các tên file ni v
i file ang ưc m,
s hiu thit b lôgic c
a h thng file cha file nói trên
ch. s inode: dùng liên kt v
i inode trên "a,
các móc ni t
i các in-core inode khác. Trong b nh
trong, các in-core
inode ưc liên kt theo mt hàng bm và mt danh sách t do. Trong
danh sách hàng bm các in-core inode hòa hp theo s hiu thit b lôgic
và s hiu inode.
Trong quá trình h thng làm vic, ny sinh khái nim inode tích cc nu như có mt
quá trình ang làm vic v
i inode ó (như m file).
Mt inode thuc vào danh sách các inode ri khi không có file vt lý nào tương ng v
inode ó. 4
5
Bng cha
a ch' khi d liu ca File trong UNIX
Bng cha a ch. khi d liu c
a file gm 13 ph$n t! v
i 10 ph$n t! trc tip và 3
ph$n t! gián tip: Mi ph$n t! có dài 4 bytes, cha mt s hiu c
a mt khi nh
trên
"a. Mi ph$n t! trc tip tr t
i 1 khi d liu thc s cha ni dung file. Ph$n t! gián tip
bc 1 (single indirect) tr t
i 1 khi nh
ngoài. Khác v
i ph$n t! trc tip, khi nh
ngoài
này không dùng cha d liu c
a file mà li cha danh sách ch. s các khi nh
ngoài
và chính các khi nh
ngoài này m
i thc s cha ni dung file. Như vy, nu khi có
dài 1KB và mt ch. s khi ngoài có dài 4 bytes thì a ch. gián tip cho phép nh v
không gian trên "a lưu tr d liu c
a file t
i 256KB (Không gian b nh
ngoài trong
vùng d liu phi dùng t
i là 257KB). Tương t i v
i các ph$n t! gián tip mc cao hơn.
Cơ ch qun lý a ch. file như trên cho thy có s phân bit gia file nh v
i file l
n.
File nh có dài bé hơn và theo cách t #chc như trên, phương pháp truy nhp s7 cho
phép tc nhanh hơn, ơn gin hơn do ch. phi làm vic v
i các ph$n t! trc tip. Khi x!
lý, thut toán (c File tin hành theo các cách khác nhau i v
i các ph$n t! trc tip và
gián tip.
Cơ ch t #chc lưu tr ni dung Fle như ã trình bày cho phép dài file có th lên t
(224+216
+ 28+10) khi.
Vùng d% liu bao gm các khi d liu, mi khi d liu ưc ánh ch. s phân
bit. Khi trên vùng d liu ưc dùng cha ni dung các file, ni dung các thư mc và
ni dung các khi nh v a ch. c
a các file. Chú ý r0ng, ch. s c
a khi d liu ưc
cha trong 32 bit và thông tin này xác nh dung lưng l
n nht c
a h thng file.
3.1.3. Mt s thut toán làm vic vi inode
H thng li gi h thng file
Khi làm vic v
i file thưng thông qua li g(i h thng. Mt s li g(i h thng thưng
gp như m file open, óng file close, (c ni dung file read, ghi ni dung file write v.v.
Bng dư
i ây thng kê các li g(i h thng làm vic v
i h thng file và phân loi
theo chc nng c
a mi li g(i h thng (mt li g(i có th ưc nh)c t
i mt s l$n):
Thi im
s! dng file
S! dng namei gán inode thuc
tính file
Vào-ra
file
Cu trúc h
thng file
Qun
lý cây
creat
dup
close
creat
chdir
chroot
chown
chmod
stat
link
unlink
mknod
mount
umount
creat
mknod
link
unlink
chown
chmod
stat
read
write
cseek
umount
chdir
chown
Thut toán h thng file mc thp
Namei
iget iput Ialloc ifree alloc free bmap
Thut toán nh v buffer
getblk brelse Bread breada bwrite
Hình 3.2. T#ng thv l
i h thng File 4
6
Chúng ta xem xét mt s thut toán làm vic v
i inode.
Thut toán truy nhp ti inode (iget)
Nhiu tình hung òi hi thut toán iget, ch/ng hn như, mt quá trình m mt file m
hoc to mt file m
i v.v.. Thut toán iget cp phát mt bn in-core inode i v
i mt s
hiu inode. Tuy nhiên, trong trưng hp chưa có bn sao in-core inode thì d có ni dung
c
a nó c$n phi (c ưc ni dung c
a inode ó và c$n nh v khi d liu cha inode ã
cho. Công thc liên quan n khi "a t cha inode có th (c vào b nh
trong như
sau:
Ch. s khi cha inode = (s hiu inode - 1) / (s lưng inode trong mt khi nh
+ ch. s khi nh
$u tiên cha danh sách inode trên "a.
Sau khi ã (c khi "a cha inode vào b nh
trong, xác nh chính xác v trí c
a
inode, chúng ta có công thc sau:
Byte v trí $u tiên = ((s hiu inode - 1) mod (s lưng inode trong mt khi
nh
))* dài mt inode
Ví d, nu như mi inode "a chim 64 bytes, mi khi "a cha 8 inode "a thì inode
s 8 s7 b)t $u t byte th 448 trên khi "a $u tiên trong vùng danh sách các inode.
ý r0ng, khi làm vic v
i mt h thng file thì super block c
a nó luôn có mt trong b
nh
trong h thng có nhng thông tin làm vic. Chú ý r0ng, trong super block có mt
danh sách các inode ri (trên nó) và mt danh sách các khi ri.
Thut toán iget nhn mt inode cho nó tích cc và iu ó tùy thuc vào mt s tình
hung sau ây:
- Nu inode không tn ti trong vùng m mà li không thuc danh sách các
inode ri trên super block thì h thng phi thông báo mt li ã ư(c gp.
Li này xy ra do yêu c$u mt inode không còn
vùng m làm vic v
i file
na (tương ng v
i trưng hp trong MS-DOS thông báo: too many files
opened),
- inode ã có trong vùng m các inode trên h thng file (ã có in-core inode).
Trong trưng hp này x! lý theo hai bư
c:
+ inode tương ng ã b khóa bi mt quá trình khác: lúc ó phi i cho
n khi quá trình trư
c ây không khóa inode na. Sau khi ưc tháo
khóa inode có th tr thành tích cc hoc ri,
+ Nu inode danh sách các inode ri thì loi b nó khi danh sách này
b0ng cách t inode sang tích cc.
- inode không tn ti trên vùng m tuy nhiên danh sách các inode ri khác
rng. Khi danh sách các inode này khác rng, có ngh"a là có nhng inode
không có giá tr: loi b nó và t inode m
i vào thay th.
Thut toán iput loi b inode
Thut toán iput có chc nng i ng4u v
i thut toán iget: c$n tháo b
t s xut hin c
a
mt inode, ch/ng hn khi chương trình thc hin thao tác óng file.
Khác v
i trưng hp thut toán iget, thut toán iput không ny sinh tình hung sai sót.
Trong thut toán này, khi mt quá trình không làm vic v
i mt file ưc liên kt v
mt inode na thì mt s tình hung x-y ra:
- H thng gim s lưng file tích cc i 1,
- Nu s lưng file tích cc là 0 thì: 4
7
+ Nu ó là lnh xoá file thì trư
c ó h thng ã thc hin thao tác gim s
liên kt v
i inode i 1 và vì vy có th s lưng liên kt tr thành 0, có
ngh"a là s tn ti c
a file vt lý không còn. Khi ó, chúng ta thc hin
vic xoá thc s file nói trên b0ng mt s thao tác: gii phóng các khi d
liu, t kiu file c
a inode là 0 và gii phóng inode.
+ khi s liên kt >0 thi c$n cp nht s thay i c
a inode lên "a t.
- Trong trưng hp s lưng file tích cc v4n dương thì không thc hin thao tác
gì.
Chú ý là trong thut toán này có s! dng thut toán ifree.
Thut toán ialloc gán inode cho mt file mi
Khi mt file m
i ưc xut hin, ch/ng hn khi to file creat, phi cung cp mt inode
cho file và thut toán ialloc áp ng òi hi trên.
Hot ng c
a thut toán ialloc ưc gii thích như sau:
- kim tra danh sách inode ri trên super block, xy ra mt trong hai trưng hp
hoc danh sách rng hoc không rng,
- Nu danh sách không rng thì ly mt inode tip theo cho file, khi to các
giá tr ban $u c
a inode ó và gim s inode ri trên super trên super block.
- Nu danh sách các inode ri trên super block là rng: tìm kim trên h thng
file nhng inode ri ti vào danh sách các inode ri trên super block. Nu
danh sách ó $y hoc không tìm thy ưc na thì gán mt inode cho file.
Nu danh sách inode ri trên super block là rng và không tìm thy inode ri
trên "a thì s7 có thông báo li.
Trên danh sách các inode ri, nhân lưu gi mt inode ưc g(i là inode nh
, chính là
inode cui cùng ưc tìm thy sau này thun li cho tìm kim.
Thut toán ifree ti mt inode r(i trên
)a vào danh sách các inode r(i trên super
block
Thut toán namei tìm ch' s mt inode theo tên file
Thut toán namei là mt thut toán ph #dng, nhiu thut toán làm vic v
i file phi s!
dng namei. T tên mt ưng d4n file/thư mc, thut toán namei cho inode tương ng.
Thut toán cp phát d liu trên
)a
Khi nhân mun cp phát mt khi d liu, nó s7 cp phát khi ri tip theo ã ưc ghi
nhn trong super block. Khi mt khi d liu ã ưc cp cho mt file thì nó ch. ưc cp
phát li khi nó tr thành ri. Nu không còn khi rng nào trên h thng file mà li có nhu
c$u cung cp khi thì nhân s7 thông báo li.
3.1.4. H( tr# nhiu h thng File
Các phiên bn $u tiên c
a Linux ch. h tr mt h thng file duy nht ó là h thng file
minix. Sau ó, v
i s m rng nhân, cng ng Linux ã thêm vào nó rt nhiu kiu h
thng file khác nhau và Linux tr thành mt h iu hành h tr rt nhiu h thng file.
Dư
i ây là mt s h thng file thông dng trong các h iu hành khác nhau ưc Linux
h tr. 4
8
♦ H thng file ADFS: ADFS vit t)t c
a Acorn Disc Filing System là h thng file
chu-n trên h iu hành RiscOS. V
i s h tr này, Linux có th truy cp vào các phân
vùng "a nh dng theo h thng file ADFS.
♦ H thng file AFFS: AFFS (The Amiga Fast File System) là mt h thng file ph bin
c
a h iu hành AmigaOS phiên bn 1.3 chy trên các máy Amiga.
♦ H thng file CODA: CODA là mt h thng file mng cho phép ngưi dùng có th kt
gán các h thng file t xa và truy cp chúng như các h thng file cc b (local).
♦ H thng file DEVPTS: H thng file cho Unix98 PTYs.
♦ H thng file EFS: ây là mt dng h thng file s! dng cho CDROM.
♦ H thng file EXT2: H thng file EXT2 (The second extended filesystem) là h thng
ưc dùng ch
yu trên các phiên bn c
a h iu hành Linux. Chúng ta s7 tr li ngiên
cu h thng file này trong các ph$n sau.
♦ H thng file HFS: ây là h thng file chy trên các máy Apple Macintosh.
♦ H thng file HPFS: HPFS là h thng file ưc s! dng trong h iu hành OS/2.
Linux h tr h thng file này mc ch. (c (read only).
♦ H thng file ISOFS: ây là h thng file ưc s! dng cho các "a CD. H thng
thông dng nht cho các "a CD hin nay là ISO 9660. V
i s h tr này, h thng
Linux có th truy cp d liu trên các "a CD.
♦ H thng file MINIX: MINIX là h thng file $u tiên mà Linux h tr. H thng file
này ưc s! dng trong h iu hành Minix và mt s h thng Linux c2.
♦ H thng file MSDOS: V
i s h tr này, h thng Linux có th truy cp ưc các
phân vùng c
a h iu hành MSDOS. Linux c2ng có th s! dng kiu MSDOS truy
cp các phân vùng c
a Window 95/98 tuy nhiên khi ó, các ưu im c
a h iu hành
Window s7 không còn giá tr ví d như tên file ch. ti a 13 ký t (k c m rng).
♦ H thng file NFS: NFS (Network File System) là mt h thng file trên mng h tr
vic truy cp d liu t xa ging như h thng file CODA. V
i NFS, các máy chy
Linux có th chia s3 các phân vùng "a trên mng s! dng như là các phân vùng cc
b c
a chính máy mình.
♦ H thng file NTFS: V
i s h tr này, h thng Linux có th truy cp vào các phân
vùng c
a h iu hành Microsoft Window NT.
♦ H thng file PROC: ây là mt h thng file c bit ưc Linux h tr. H thng file
PROC không chim mt phân vùng nào c
a h thng và c2ng không qun lý các d
liu lưu tr trên "a. PROC hin th ni dung c
a chính nhân h thng. Các file trong h
thng file PROC lưu tr các thông tin v trng thái hin hành c
a nhân. Thông tin v
mi mt tin trình ang thc hin trong h thng ưc lưu trong mt thư mc mang tên
ng v
i ch. s process ID c
a tin trình ó. Ngưi dùng có th s! dng h thng file
PROC ly các thông tin v nhân c2ng như s!a i mt s giá tr c
a nhân thông qua
s!a i ni dung c
a các file trong h thng file này. Tuy nhiên, vic s!a i trc tip
như trên tương i nguy him, d* gây v6 h thng.
♦ H thng file QNX4: ây là h thng file ưc s! dng trong h iu hành QNX 4. 4
9
♦ H thng file ROMFS: ây là các h thng file ch. (c (read only) ưc s! dng ch
yu cho vic khi to "a o (ramdisk) trong quá trình khi ng "a cài t.
♦ H thng file SMB: SMB (Server Mesage Block) là mt giao thc c
a Windows dùng
chia s3 file gia các h iu hành Windows 95/98, Windows NT và OS/2 Lan
Manager. V
i s h tr SMB, h iu hành Linux có th chia s3 c2ng như truy cp các
file n0m trên các phân vùng c
a mt máy chy các h iu hành k trên. Nói tóm li,
SMB c2ng là mt dng h tr h thng file mng giúp h thng có th chia s3 v
i các
h thng s! dng chung giao thc SMB.
♦ H thng file UMSDOS: H thng file UMSDOS (Unix-like MSDOS) là h thng file
ưc m rng t h thng file MSDOS theo nh hư
ng Unix. H thng file này có mt
s ưu im so v
i MSDOS như là h tr tên file dài, h tr vic phân quyn, h tr các
liên kt (link), h tr các file c bit (device, pipe ...) và... H thng file này có th
ưc s! dng làm phân vùng gc c
a h thng Linux.
♦ H thng file VFAT: VFAT chính là h thng file m rng c
a h thng FAT. H
thng file này ưc s! dng trong các h iu hành Windows 95/98.
Như vy, ngoài kh nng h tr nhiu loi thit b, Linux còn có kh nng h tr nhiu kiu
h thng file. B0ng cách h tr nhiu kiu h thng file, Linux có th truy cp và x! lý các
file c
a nhiu h iu hành khác nhau. Mc dù có kh nng truy cp nhiu h thng file
khác nhau, h thng file c
a Linux v4n phi m bo cung cp cho ngưi dùng mt giao
din nht quán i v
i các file, bo v các file trên các h thng khác nhau, ti ưu các thao
tác truy cp vào thit b... thc hin ưc iu này, Linux s! dng mt h thng file c
bit g(i là h thng file o VFS (Virtual File System). 5
0
H thng file o VFS ưc thit k cung cp mt giao din thng nht v các file ưc
lưu tr trên các thit b. Hình 3.3 mô t mi quan h gia VFS v
i các h thng file thc và
các thit b lưu tr.
VFS có trách nhim cung cp cho chương trình ngưi dùng mt giao din nht quán v h
thng file thông qua các lnh g(i h thng (system call). Mi khi có mt yêu c$u truy cp
file, VFS s7 da vào các h thng file thc tìm kim file yêu c$u trên các thit b vt lý.
V
i mi file tìm ưc, nó thc hin thao tác m file ó và cho tương ng file v
i mt cu
trúc d liu g(i là i-node. VFS cung cp rt nhiu lnh g(i thao tác v
i h thng file
nhưng ch
yu thuc vào các loi sau:
♦ Các thao tác liên quan t
i h thng file.
♦ Các thao tác liên quan t
i i-node.
♦ Các thao tác v
i file ang m.
♦ Các thao tác v
i vùng m d liu.
3.1.5. Liên kt tư#ng trưng (lnh ln)
Trong Linux có hai kiu liên kt ó là liên kt tưng trưng (liên kt mm) và liên kt
cng.
Programatic file system interface
System call interface
Virtual File System
Buffer cache
Ext2 Minix Msdos Vfat
Device driver
Physical hardware
Inode cache
Directory
cache
Hình 3.3. H thng file o
VFS5
1
"Liên kt cng" là mt cách g(i khác i v
i mt file ang tn ti (không có s phân
bit gia file gc và file liên kt). Theo cách nói k9 thut, chúng cùng chia s3 mt inode và
inode này cha ng tt c các thông tin v file. Không th to mt liên kt cng t
i mt
thư mc.
"Liên kt tưng trưng" là mt kiu file c bit, trong ó, mt file liên kt thc s tham
chiu theo tên n mt file khác. Có th hiu kiu file này như là mt con tr ch. d4n t
mt file hoc mt thư mc, và ưc s! dng thay th cho file hoc thư mc ưc tr t
i.
H$u ht các thao tác (như m, (c, ghi ...) ưc thc hin trên các file liên kt, sau ó, nhân
h thng s7 t ng "tham chiu" và thc hin trên file ích c
a liên kt. Tuy nhiên, có mt
s các thao tác như xóa file, file liên kt s7 b xóa b ch không phi file ích c
a nó.
to mt liên kt tưng trưng, hãy s! dng lnh ln v
i cú pháp như sau:
ln [tùy-chn] <ích> [tên-ni]
Lnh này s7 to mt liên kt n thư mc/file ích v
i tên file liên kt là tên-ni. Nu
tên-ni không có, mt liên kt v
i tên file liên kt ging như tên file ích s7 ưc to ra
trong thư mc hin thi.
Các tu5 ch(n c
a lnh ln:
-b, --backup[=CONTROL] : to liên kt quay tr li cho mi file ích ang tn ti.
-f, --force : xóa b các file ích ang tn ti.
-d, -F, --directory : to liên kt cng n các thư mc (tùy ch(n này ch. dành cho ngưi dùng
có quyn qun tr h thng). Mt s phiên bn không có tùy ch(n này.
-n, --no-dereference : mt file bình thưng ưc xem là ích liên kt t mt thư mc.
-i, interactive : v4n to liên kt dù file ích ã b xóa b.
-s, --symbolic : to các liên kt tưng trưng.
--target-directory=<tên-th-mc> : xác nh thư mc tên-thư-mc là thư mc có cha
các liên kt.
-v, --verbose : hin th tên các file trư
c khi to liên kt.
--help : hin th trang tr giúp và thoát.
Ví d, mun to liên kt n file /usr/doc/g77/DOC v
i tên file liên kt là
g77manual.txt, thì gõ lnh như sau:
# ln -s /usr/doc/g77/DOC g77manual.txt
Khi chy chương trình mc, các file liên kt có tên b)t $u bi du "", và khi vt sáng
di chuyn n file liên kt thì tên file ưc liên kt n s7 hin th bên dư
i.
3.2 Quyn truy nhp thư mc và file
3.2.1 Quyn truy nhp
Mi file và thư mc trong Linux u có mt ch
s hu và mt nhóm s hu, c2ng như
mt tp hp các quyn truy nhp. Cho phép thay i các quyn truy nhp và quyn s hu
file và thư mc nh0m cung cp truy nhp nhiu hơn hay ít hơn.
Thông tin v mt file có dng sau (ưc hin ra theo lnh hin danh sách file ls -l): 5
2
Trong ó, dãy 10 ký t $u tiên mô t kiu file và quyn truy nhp i v
i tp tin ó.
Theo mc nh, ngưi dùng to mt file chính là ngưi ch
(s hu) c
a file ó và là
ngưi có quyn s hu nó. Ngưi ch
c
a file có c quyn thay i quyn truy nhp hay
quyn s hu i v
i file ó. Tt nhiên, mt khi ã chuyn quyn s hu c
a mình cho
ngưi dùng khác thì ngưi ch
c2 không ưc phép chuyn quyn s hu và quyn truy
nhp ưc na.
Tp hp mt chui có 10 ký t ã gi
i thiu trên ây ưc chia ra làm 4 ph$n: kiu file,
các quyn truy nhp n file c
a ch
s hu, c
a nhóm s hu và ngưi dùng khác.
Có mt s kiu file trong Linux. Ký t $u tiên trong tp hp 10 ký t mô t kiu file
và quyn truy nhp s7 cho bit file thuc kiu nào (ch cái ó ưc g(i là ch cái biu
di*n). Bng dư
i ây s7 lit kê các kiu file trong Linux:
Ch cái bi u di*n Ki u file
d
c
l
-
Thư mc (directory)
File kiu khi (block-type special file)
File kiu ký t (character-type special file)
Liên kt tưng trưng (symbolic link)
File ưng ng (pipe)
Socket
File bình thưng (regular file)
Chín ký t tip theo trong chui là quyn truy nhp ưc chia ra làm 3 nhóm tương ng
v
i quyn truy nhp c
a ngưi s! hu, nhóm s hu và ngưi dùng khác.
Ví d, 10 ký t $u tiên trong dòng ví d ngay trư
c ây s7 ưc phân tích thành:
hiu ưc chính xác quyn truy nhp có ý ngh"a như th nào i v
i h thng máy
tính,
phi
nh
r0ng
Linux
xem
mi
th
u là file. Nu cài t mt ng dng, nó c2ng s7 ưc xem như m(i chương trình khác,
tr mt iu: h thng nhn bit r0ng mt ng dng là mt chương trình kh thi, tc là nó
có th chy ưc. Mt bc thư g!i cho :8#là mt dng file vn bn bình thưng, nhưng
Tp hp
quyn truy
nhp
S#liên kt
n file
(thư :c)
Ngưi
%&
#file
;&<m %&
#
file
=>ch thư
c
file (byte)
;?@y gi#
Ao file
Tên file
drwxr-xr-x 12 root root 4096 Oct 23 2000 LinuxVN.com
Quyn %
a
ngưi BCng khác
Kiu file: thư
:c
Quyn %
a
ngưi %&
Quyn %
a
D&<m#%&
d rwx r-x r-x5
3
nu thông báo cho h thng bit ó là mt chương trình kh thi, h thng s7 c chy
chương trình (và tt nhiên là li).
Có ba loi quyn truy nhp chính i v
i thư mc/file, ó là: (c (read - r), ghi (write -
w) và thc hin (execute - x). Quyn (c cho phép ngưi dùng có th xem ni dung c
a file
v
i rt nhiu chương trình khác nhau, nhưng h( s7 không th thay i, s!a cha hoc xóa
bt k5 thông tin nào trong ó. Tuy nhiên, h( có th sao chép file ó thành file c
a h( và s!a
cha file bn sao.
Quyn ghi là quyn truy nhp tip theo. Ngưi s! dng v
i quyn ghi khi truy nhp vào
file có th thêm thông tin vào file. Nu có quyn ghi và quyn (c i v
i mt file, có th
son tho li file ó - quyn (c cho phép xem ni dung, và quyn ghi cho phép thay i
ni dung file. Nu ch. có quyn ghi, s7 thêm ưc thông tin vào file, nhưng li không th
xem ưc ni dung c
a file.
Loi quyn truy nhp th ba là quyn thc hin, quyn này cho phép ngưi dùng có th
chy ưc file, nu ó là mt chương trình kh thi. Quyn thc hin c lp v
i các quyn
truy nhp khác, vì th hoàn toàn có th có mt chương trình v
i quyn (c và quyn thc
hin, nhưng không có quyn ghi. C2ng có trưng hp mt chương trình ch. có quyn thc
hin, có ngh"a là ngưi dùng có th chy ng dng, nhưng h( không th xem ưc cách nó
làm vic hay sao chép nó.
Bng dư
i ây gi
i thiu cách ký hiu c
a các quyn truy nhp:
Quyn truy nhp Ý ngh)a
---
r--
r-x
rw-
rwx
Không cho phép mt quyn truy nhp nào
Ch. ưc quyn (c
Quyn (c và thc hin (cho chương trình và shell script)
Quyn (c và ghi
Cho phép tt c các quyn truy nhp (cho chương trình)
Tuy nhiên, i v
i thư mc thì ch. có ba loi ký hiu c
a các quyn truy nhp là: ---, rx và rwx, vì ni dung c
a thư mc là danh sách c
a các file và các thư mc con có bên
trong thư mc ó. Quyn (c mt thư mc là ưc xem ni dung c
a thư mc ó và quyn
thc hin i v
i mt thư mc là quyn tìm ưc file và thư mc con có trong thư mc.
Như vy, v
i ví d ang ưc xem xét, chúng ta nhn ưc ây là mt thư mc và
quyn truy nhp nó ưc gii thích như sau:
Gi
i thích:
S hn ch trưng hp v quyn truy nhp thư mc ưc gii thích theo các lp lun
như sau:
Quyn ngưi
BCng khác:
(c, thc hin
(không ghi)
Kiu file:
thư :c
Quyn %
a
ngưi %&
:
(c, ghi,
thc hin
Quyn %
a
D&<m %&
:
(c, thc
hin
(không ghi)
d rwx r-x r-x5
4
Hãy hình dung, gi s! ch. có quyn (c trên thư mc, khi ó s7 xem ưc có
nhng file hay thư mc nào trong thư mc nhưng li không th xem c th ni dung
c
a mt file hay thư mc có trên thư mc ó vì không tìm ưc nó.
Hoc gi s! có quyn thc hin - quyn này s7 cho phép tìm ưc file có
trên thư mc - nhưng li không có quyn (c i v
i mt thư mc, vy thì làm th
nào bit ưc trong thư mc có nhng file nào.
3.2.2. Các lnh cơ bn
a. Thay
i quyn s hu file vi lnh chown
thay i quyn s hu i v
i mt file, hãy s! dng lnh chown v
i cú pháp như
sau:
chown [tïy-chän] [chñ][.nhãm] <file ...>
Lnh này cho phép thay ch
s hu file. Nu ch. có tham s v ch, thì ngưi dùng
ch s7 có quyn s hu file và nhóm s hu không thay i. Nu theo sau tên ngưi ch
là du "." và tên c
a mt nhóm thì nhóm ó s7 nhóm s hu file. Nu ch. có du "." và
nhóm mà không có tên ngưi ch
thì ch. có quyn s hu nhóm c
a file thay i, lúc này,
lnh chown có tác dng ging như lnh chgrp (lnh chgrp ưc trình bày dư
i ây).
Các tùy ch(n c
a lnh chown:
-c, --changes : hin th dòng thông báo ch. v
i các file mà lnh làm thay i s hu (s thông
báo hin ra có th ít hơn trưng hp -v, -verbosr).
-f, --silent, --quiet : b qua h$u ht các thông báo li.
-R, --recursive : thc hin i quyn s hu i v
i thư mc và file theo quy.
-v, --verbose : hin th dòng thông báo v
i m(i file liên quan mà chown tác ng t
i (có hoc
không thay i s hu).
--help : ưa ra trang tr giúp và thoát.
Ví d, thư mc LinuxVN.com có thông tin v các quyn truy nhp như sau:
drwxr-xr-x 12 thu root 4096 Oct 23 2000 LinuxVN.com
Ngưi s hu hin ti thư mc LinuxVN.com là ngưi dùng thu. ngưi dùng lan
là ch
s hu thư mc trên, hãy gõ lnh:
# chown lan LinuxVN.com
Khi ó, nu dùng lnh ls thì thông tin v thư mc LinuxVN.com s7 có dng:
drwxr-xr-x 12 lan root 4096 Oct 23 2000 LinuxVN.com
v
i ngưi s hu thư mc bây gi là ngưi dùng lan.
Khi chuyn quyn s hu file cho mt ngưi khác, ngưi ch
c2 mt quyn s hu file
ó.
b. Thay
i quyn s hu nhóm vi lnh chgrp
Các file (và ngưi dùng) còn thuc vào các nhóm, ây là phương thc truy nhp file
thun tin cho nhiu ngưi dùng nhưng không phi tt c ngưi dùng trên h thng. Khi
ng nhp, mc nh s7 là thành viên c
a mt nhóm ưc thit lp khi siêu ngưi dùng root
to tài khon ngưi dùng. Cho phép mt ngưi dùng thuc nhiu nhóm khác nhau, nhưng
mi l$n ng nhp ch. là thành viên c
a mt nhóm. 5
5
thay i quyn s hu nhóm i v
i mt hoc nhiu file, hãy s! dng lnh chgrp
v
i cú pháp như sau:
chgrp [tùy-chn] {nhóm|--reference=nhómR} <file...>
Lnh này cho phép thay thuc tính nhóm s hu c
a file theo tên nhóm ưc ch. ra trc
tip theo tham s nhóm hoc gián tip qua thuc tính nhóm c
a file có tên là nhómR.
Các tùy ch(n c
a lnh là (mt s tương t như lnh chown):
-c, --changes : hin th dòng thông báo ch. v
i các file mà lnh làm thay i s hu (s thông
báo hin ra có th ít hơn trưng hp -v, -verbosr).
-f, --silent, --quiet : b qua h$u ht các thông báo li.
-R, --recursive : thc hin i quyn s hu i v
i thư mc và file theo quy.
-v, --verbose : hin th dòng thông báo v
i m(i file liên quan mà chgrp tác ng t
i (có hoc
không thay i s hu).
--help : hin th trang tr giúp và thoát
Tham s --reference=nhómR cho thy cách gián tip thay nhóm ch
c
a file theo nhóm ch
c
a
mt file khác (tên là nhómR) là cách thc ưc ưa chung hơn. Tham s này là xung kh)c v
i tham
s nhóm c
a lnh.
c. Thay
i quyn truy cp file vi lnh chmod
Cú pháp lnh chmod có ba dng:
chmod [tùy-chn] <mod [,mod]...> <file...>
chmod [tùy-chn] <mod-h-8> <file...>
chmod [tùy-chn] --reference=nhómR <file...>
Lnh chmod cho phép xác lp quyn truy nhp theo kiu (mode) trên file. Dng $u
tiên là dng xác lp tương i, dng th hai là dng xác lp tuyt i và dng cui cùng là
dng gián tip ch. d4n theo quyn truy nhp c
a file nhómR.
Các tùy ch(n c
a lnh chmod ưc lit kê như dư
i ây và có ý ngh"a tương t các
tu5 ch(n tương ng c
a các lnh chown, chgrp:
-c, --changes
-f, --silent, --quiet
-v, --verbose
-R, --recursive
--help
và tham s --reference=RFILE c2ng ý ngh"a gián tip như trong lnh chgrp.
Gii thích v hai cách xác lp quyn truy nhp file trong lnh chmod như sau: xác lp
tuyt i (dùng h thng mã s vit theo h cơ s 8 biu di*n cho các quyn truy nhp) và
xác lp tương i (dùng các ch cái biu di*n quyn truy nhp).
Cách xác lp tương
i5
6
Cách xác lp tương i là d*#nh
theo ý ngh"a c
a ni dung các mod và ch. nhng thay
i thc s m
i ưc biu di*n trong lnh. Ba hp sau ây s7 gii thích các ch cái biu
di*n mod theo cách xác lp tương i.
Có th kt hp các mc t hp th nht và hp th ba v
i mt mc t hp th hai
to ra mt mod.
Ví d, nu mun thêm quyn ghi i v
i file test cho tt c ngưi dùng trong nhóm s
hu, hãy ch(n g cho nhóm s hu, + cho thêm quyn truy nhp, và w cho quyn ghi. Lúc
ó lnh chmod s7 có dng sau:
chmod g+w test
Cách xác lp tương i trong lnh chmod g$n ging như mt menu có nhiu mc ch(n
khác nhau, cho phép kt hp có ưc s la ch(n theo yêu c$u.
Nu quyt nh g6#b quyn (c và thc hin trên file test cho nhng ngưi không cùng
nhóm, hãy ch(n o cho ngưi dùng khác, - g6#b quyn truy nhp, và r,x cho quyn (c
và thc hin. Lnh chmod s7 là:
chmod o-rx test
Cách xác lp tuyt
i
i v
i ngưi dùng hiu sơ b v biu di*n s trong h cơ s 8 thì cách xác lp tuyt
i li ưc ưa chung hơn.
Ph$n 3.2.1. cho bit biu di*n quyn truy nhp file thông qua dãy gm 9 v trí dư
dng rwxrwxrwx, trong ó tng cm 3 v trí theo th t tương ng v
i: ch
s hu, nhóm
s hu và ngưi dùng khác. Như vy thuc tính quyn truy nhp c
a mt file có th biu
di*n thành 9 bít nh phân trong ó bít có giá tr 1 thì quyn ó ưc xác nh, ngưc li thì
quyn ó b tháo b. Như vy, ch
s hu tương ng v
i 3 bít $u tiên, nhóm s6#hu tương
ng v
i 3 bít gia, ngưi dùng khác tương ng v
i 3 bít cui. Mi cm 3 bít như vy cho
mt ch s h 8 (nhn giá tr t 0 n 7) và thuc tính quyn truy nhp tương ng v
i 3 ch
s h 8.
Ví d, cp 3 s h 8 là 755 tương ng v
i dòng 9 bít 111101101 v
i 111 cho ch
s
hu, 101 cho nhóm s hu, 101 cho ngưi dùng khác. Ví d lnh:
chmod 753 memo1
t thuc tính quyn truy nhp i v
i file memo1 là rwxr-xr-x. d*#xác lp 3 ch s
h 8 áp dng cách tính như sau:
Quyn truy cp
u=user (ngưi s#hu)
g=group (D&<m s#hu)
o=other (ngưi khác)
a=all (tt %#ngưi BCng)
Thao tác thay
i
+ (thêm quyn)
- (g6#E#quyn)
= (xác nhn quyn)
Ki u truy cp
r=read (quyn (c)
w=write (quyn ghi)
x=execute (quyn thc
hin) 5
7
Quy"n Ch% s h 8 Quy"n Ch% s h 8
Ch. (c 4 Ch. (c và ghi 6
Ch. ghi 2 Ch. (c và thc hin 5
Ch. thc hin 1 Ch. ghi và thc hin 3
Không có quyn nào 0 (c, ghi và thc hin 7
d. ng nhp vào mt nhóm ngưi dùng mi vi lnh newgrp
Linux cho phép mt ngưi dùng có th là thành viên c
a mt hoc nhiu nhóm ngưi
dùng khác nhau, trong ó có mt nhóm ưc g(i là nhóm khi ng. iu này ưc m
bo khi thc hin lnh adduser hoc usersdd. Tuy nhiên, ti mt thi im, mt ngưi
dùng thuc vào ch. mt nhóm. Khi mt ngưi dùng ng nhp, h thng ng$m nh ngưi
dùng ó là thành viên c
a nhóm khi ng, và có quyn truy nhp i v
i nhng file thuc
quyn s hu c
a nhóm khi ng ó. Nu mun s! dng quyn s hu theo các nhóm
khác i v
i nhng file thì ngưi dùng phi chuyn i thành thành viên c
a mt nhóm
nhng nhóm ã ưc g)n v
i ngưi dùng. Lnh newgr cho phép ngưi dùng chuyn sang
nhóm ngưi dùng khác ã g)n v
i mình v
i cú pháp:
newgrp [nhóm]
trong ó nhóm là mt tên nhóm ngưi dùng tn ti trong h thng.
Ví d, mt ngưi dùng là thành viên c
a hai nhóm user và installer, v
i user là nhóm
khi ng. Khi ng nhp, ngưi dùng ó có tư cách là thành viên c
a nhóm user. Khi
mong mun s! dng mt s các chương trình thuc quyn s hu c
a nhóm installer,
ngưi dùng c$n gõ lnh sau:
# newgrp installer
Nu ngưi dùng nói trên c chuyn vào mt nhóm mà ngưi dùng ó không là thành
viên, ch/ng hn dùng lnh:
# newgrp hot2
thì Linux s7 ưa ra mt khuyn cáo thân thin như sau:
newgrp: Sorry
3.3 Thao tác vi thư mc
Như ã ưc gi
i thiu (mc 3.1.1.), Linux t #chc h thng file theo cách s! dng các
thư mc. Mc này b)t $u b0ng vic gi
i thiu mt s thư mc chính và tác dng c
a
chúng trong h thng Linux. Sau ó mt s lnh thao tác v
i thư mc cơ bn nht ưc
trình bày.
3.3.1 Mt s thư mc
c bit
* Thư mc gc /
ây là thư mc gc cha ng tt c các thư mc con có trong h thng. 5
8
* Thư mc /root
Thư mc /root có th ưc coi là "thư mc riêng" c
a siêu ngưi dùng. Thư mc này
ưc s! dng lưu tr các file tm thi, nhân Linux và nh khi ng, các file nh phân
quan tr(ng (nhng file ưc s! dng n trư
c khi Linux có th g)n kt n phân vùng
/user), các file ng nhp quan tr(ng, b m in cho vic in n, hay vùng lưu tm cho vic
nhn và g!i email. Nó c2ng ưc s! dng cho các vùng trng tm thi khi thc hin các
thao tác quan tr(ng, ví d như khi xây dng (build) mt gói RPM t các file RPM ngun.
* Thư mc /bin
Trong Linux, chương trình ưc coi là kh thi nu nó có th thc hin ưc. Khi mt
chương trình ưc biên dch, nó s7 có dng là file nh phân. Như vy, chương trình ng
dng trong Linux là mt file nh phân kh thi.
Chính vì l7 ó, nhng nhà phát trin Linux ã quyt nh phi t # chc mt thư mc
"binaries" lưu tr các chương trình kh thi có trên h thng, ó chính là thư mc /bin.
Ban $u, thư mc /bin (bin là vit t)t c
a t binary) là nơi lưu tr các file nh phân
kh thi. Nhưng theo thi gian, ngày càng có nhiu hơn các file kh thi có trong Linux, do
ó, có thêm các thư mc như /sbin, /usr/bin ưc s! dng lưu tr các file ó.
* Thư mc /dev
Mt ph$n không th thiu trong bt k5 máy tính nào ó là các trình iu khin thit b.
Không có chúng, s7 không th có ưc bt k5 thông tin nào trên màn hình c
a (các thông
tin có ưc do trình iu khin thit b hin th ưa ra). C2ng không th nhp ưc thông
tin (nhng thông tin do trình iu khin thit b bàn phím (c và chuyn t
i h thng), và
c2ng không th s! dng "a mm c
a (ưc qun lý bi trình iu khin "a mm).
Tt c các trình iu khin thit b u ưc lưu tr trong thư mc /dev.
* Thư mc /etc
Qun tr h thng trong Linux không phi là ơn gin, ch/ng hn như vic qun lý tài
khon ngưi dùng, vn bo mt, trình iu khin thit b, cu hình ph$n cng, v.v..
gim b
t phc tp, thư mc /etc ã ưc thit k lưu tr tt c các thông tin hay các
file cu hình h thng.
* Thư mc /lib
Linux có mt trung tâm lưu tr các thư vin hàm và th
tc, ó là thư mc /lib.
* Thư mc /lost+found
Mt file ưc khôi phc sau khi có bt k5 mt vn hoc gp mt li v ghi "a trên
h thng u ưc lưu vào thư mc này.
* Thư mc /mnt
Thư mc /mnt là nơi kt ni các thit b (ví d "a cng, "a mm...) vào h thng
file chính nh lnh mount. Thông thưng các thư mc con c
a /mnt chính là gc c
a các
h thng file ưc kt ni: /mnt/floppy: "a mm, /mnt/hda1: vùng $u tiên c
a "a cng
th nht (hda), /mnt/hdb3: vùng th ba c
a "a cng th 2 (hdb) ... 5
9
* Thư mc /tmp
Thư mc /tmp ưc rt nhiu chương trình trong Linux s! dng như mt nơi lưu tr
các file tm thi.
Ví d, nu ang son tho mt file, chương trình s7 to ra mt file là bn sao tm thi
(bn nháp) c
a file ó và lưu vào trong thư mc /tmp. Vic son tho thc hin trc tip
trên file tm thi này và sau khi son tho xong, file tm thi s7 ưc ghi '#lên file gc.
Cách thc như vy bo m s an toàn i v
i file c$n son tho.
* Thư mc /usr
Thông thưng thì thư mc /usr là trung tâm lưu tr tt c các lnh hư
ng n ngưi
dùng (user-related commands). Tuy nhiên, ngày nay tht khó xác nh trong thư mc này
có nhng th gì, bi vì h$u ht các file nh phân c$n cho Linux u ưc lưu tr ây,
trong ó áng chú ý là thư mc con /usr/src bao gm các thư mc con cha các chương
trình ngun c
a nhân Linux.
* Thư mc /home
Thư mc này cha các thư mc cá nhân c
a ngưi dùng: mi ngưi dùng tương ng v
mt thư mc con ây, tên ngưi dùng ưc ly làm tên c
a thư mc con.
* Thư mc /var
Thư mc /var ưc s! dng lưu tr các file cha các thông tin luôn luôn thay i,
bao gm b m in, vùng lưu tm thi cho vic nhn và g!i thư (mail), các khóa quá trình,
v.v..
* Thư mc /boot
Là thư mc cha nhân c
a h thng (Linux-*.*.), System.map (file ánh x n các
driver np các h thng file khác), nh (image) c
a h thng file dùng cho initrd
(ramdisk), trình iu khin cho các thit b RAID (mt thit b gm mt mng các #"a
cng tng tc và an toàn khi ghi d liu), các bn sao lưu boot record c
a các
phân vùng "a khác. Thư mc này cho phép khi ng và np li bt k5 trình iu khin
nào ưc yêu c$u (c các h thng file khác.
* Thư mc /proc
ây là thư mc dành cho nhân (kernel) c
a h iu hành và thc t ây là mt h
thng file c lp do nhân khi to.
* Thư mc /misc và thư mc /opt
Cho phép lưu tr m(i i tưng vào hai thư mc này.
* Thư mc /sbin
Thư mc lưu gi các file h thng thưng t ng chy.
3.3.2 Các lnh cơ bn v thư mc
* Xác
nh thư mc hin thi vi lnh pwd
Cú pháp lnh: 6
0
pwd
Lnh này cho bit hin ngưi dùng ang trong thư mc nào và hin ra theo dng mt ưng d4n tuyt i.
Ví d, gõ lnh pwd ti du nh)c lnh sau khi ngưi dùng lan va ng nhp thì màn
hình hin th như sau:
# pwd
/home/lan
#
* Xem thông tin v thư mc vi lnh ls
S! dng lnh ls và mt s các tùy ch(n c
a nó là có th bit ưc m(i thông tin v mt
thư mc. Cú pháp lnh:
ls [tùy-chn] [file]...
Lnh này ưa ra danh sách các file liên quan n tham s file trong lnh. Trưng hp
ph #bin tham s file là mt thư mc, tuy nhiên trong mt s trưng hp khác, tham s file
xác nh nhóm (khi s! dng các mô t nhóm *, ? và cp [ và ]); nu không có tham s file,
mc nh danh sách các file có trong thư mc hin thi s7 ưc hin th.
Các tùy ch(n c
a lnh:
-a : lit kê tt c các file, bao gm c file -n.
-l : ưa ra thông tin $y
nht v các file và thư mc.
-s : ch. ra kích thư
c c
a file, tính theo khi (1 khi = 1204 byte).
-F : xác nh kiu file (/ = thư mc, * = chương trình kh thi).
-m : lit kê các file ưc ngn cách nhau bi du ",".
-C : ưa ra danh sách các file và thư mc theo dng ct (hai thư mc g$n nhau ưc xp vào
mt ct).
-1 : hin th mi file hoc thư mc trên mt dòng.
-t : s)p xp các file và thư mc trong danh sách theo th t v thi gian ưc s!a i g$n ây
nht.
-x : ưa ra danh sách các file và thư mc theo dng ct (hai thư mc g$n nhau ưc xp trên hai
dòng $u c
a hai ct k nhau).
-r : s)p xp danh sách hin th theo th t ngưc li.
-R : lit kê l$n lưt các thư mc và ni dung c
a các thư mc.
Ví d, lnh
# ls -l
s7 hin th danh sách $y
nht v các file và thư mc có trong thư mc hin thi.
total 108
drwxr-xr-x 12 thu root 4096 Oct 23 2000 LinuxVN.com
drwxr-xr-x 2 root root 4096 Oct 31 2000 bin
drwxr-xr-x 2 root root 4096 Dec 11 16:54 boot
drwxr-xr-x 7 root root 36864 Dec 11 16:54 dev
drwxr-xr-x 43 root root 4096 Dec 11 16:55 etc 6
1
drwxr-xr-x 5 root root 4096 Dec 11 16:57 home
drwxr-xr-x 4 root root 4096 Oct 31 2000 lib
drwxr-xr-x 2 root root 16384 Oct 31 2000 lost+found
drwxr-xr-x 2 root root 0 Dec 11 16:54 misc
drwxr-xr-x 5 root root 4096 Oct 31 2000 mnt
drwxr-xr-x 2 root root 4096 Aug 23 12:03 opt
dr-xr-xr-x 56 root root 0 Dec 11 11:54 proc
drwxr-x--- 12 root root 4096 Dec 11 16:55 root
drwxr-xr-x 3 root root 4096 Oct 31 2000 sbin
drwxr-xr-x 3 root root 4096 Oct 31 2000 tftpboot
drwxrwxrwx 8 root root 4096 Dec 11 16:58 tmp
drwxr-xr-x 22 root root 4096 Oct 31 2000 usr
drwxr-xr-x 22 root root 4096 Oct 31 2000 var
Dòng $u tiên "total 108" cho bit t ng s khi (1024 byte) trên "a lưu tr các file
trong danh sách (14*4+36+16=108).
Mi dòng tip theo trình bày thông tin v mi file hay thư mc con. Các thông tin này
ã ưc gi
i thiu trư
c ây.
Ch/ng hn,
ý ngh"a c
a mi trưng trên ây ã ưc gii thích trong mc 3.2.1.
Khi gõ lnh:
# ls [is]*
cho danh sách các file và thư mc con có tên b)t $u b0ng hoc ch cái i hoc ch cái s có
trong thư mc hin thi:
info-dir initlog.conf inittab services
shadow shadow- shells smb.conf
sysctl.conf syslog.conf
* Lnh to thư mc mkdir
Lnh mkdir to mt thư mc v
i cú pháp:
mkdir [tùy-chn] <thư-mc>
Lnh này cho phép to mt thư mc m
i nu thư mc ó chưa thc s tn ti. to
mt thư mc, c$n c t tên và v trí c
a nó trên h thng file (v trí mc nh là thư mc
hin thi). Nu thư mc ã tn ti, h thng s7 thông báo cho bit.
Các tùy ch(n:
Kiu file .*"
quyn truy
nhp
S"liên kt
n file
(thư 0c)
Ngư
"file
5!m "
file
6/ch thư7c
file (byte)
58*y gi
"
&o file
Tên file
drwxr-xr-x 22 root root 4096 Oct 31 2000 var 6
2
-m, --mode=Mod : thit lp quyn truy nhp Mod như trong lnh chmod nhưng không cho
quyn rwxrwxrwx.
-p, --parents : to các thư mc c$n thit mà không thông báo li khi nó ã tn ti.
--verbose : hin th các thông báo cho mi thư mc ưc to.
--help : ưa ra trang tr giúp và thoát.
Ví d, nu mun to thư mc test trong thư mc home, hãy gõ lnh sau:
# mkdir /home/test
* Lnh xóa b thư mc rmdir
Như ã bit, lnh mkdir to ra mt thư mc m
i, và v i ng4u thì lnh rmdir
ưc dùng xóa b mt thư mc. Cú pháp lnh:
rmdir [tùy-chn[ <thư-mc>
Có th xóa b bt k5 thư mc nào nu có quyn ó. Lưu ý r0ng, thư mc ch. b xóa khi
nó "rng", tc là không tn ti file hay thư mc con nào trong ó.
Không có cách gì khôi phc li các thư mc ã b xóa, vì th hãy suy ngh" c-n thn
trư
c khi quyt nh xóa mt thư mc.
Các tùy ch(n c
a lnh:
--ignore-fail-on-non-empty : b qua các li nu xóa mt thư mc không rng.
-p, --parents : xóa b mt thư mc, sau ó l$n lưt xóa b tip các thư mc có trên ưng d4n
cha thư mc va xóa. Ví d, dòng lnh rmdir -p /a/b/c s7 tương ương v
i ba dòng lnh
rmdir /a/b/c, rmdir /a/b, rmdir /a (v
i iu kin các thư mc là rng).
--verbose : ưa ra thông báo khi xóa mt thư mc.
--help : hin th trang tr giúp và thoát.
Ví d:
# rmdir -p /test/test1/test2
rmdir: /: No such file or directory
#
Dòng lnh trên s7 l$n lưt xóa ba thư mc test2, test1, test và hin th thông báo trên
màn hình kt qu c
a lnh.
* Lnh
i tên thư mc mv
Cú pháp lnh:
mv <tên-c> <tên-mi>
Lnh này cho phép i tên mt thư mc t tên-c thành tên-mi.
Ví d, lnh
# mv LinuxVN.com LinuxVN
s7 i tên thư mc LinuxVN.com thành LinuxVN.
Nu s! dng lnh mv i tên mt thư mc v
i mt cái tên ã ưc t cho mt file
thì lnh s7 gp li.
Nu tên m
i trùng v
i tên mt thư mc ang tn ti thì ni dung c
a thư mc ưc i
tên s7 ghi '#lên ni dung c
a thư mc trùng tên. 6
3
3.4. Các lnh làm vic vi file
3.4.1 Các ki u file có trong Linux
Mc 3.1.2. ã trình bày sơ lưc v kiu c
a các file. Như ã ưc gi
i thiu, có rt
nhiu file khác nhau trong Linux, nhưng bao gi c2ng tn ti mt s kiu file c$n thit cho
h iu hành và ngưi dùng, dư
i ây gi
i thiu li mt s các kiu file cơ bn.
File ngi dùng (user data file): là các file to ra do hot ng c
a ngưi
dùng khi kích hot các chương trình ng dng tương ng. Ví d như các file thu$n
vn bn, các file cơ s d liu hay các file bng tính.
File h thng (system data file): là các file lưu tr thông tin c
a h thng
như: cu hình cho khi ng, tài khon c
a ngưi dùng, thông tin thit b ... thưng
ưc ct trong các tp dng vn bn ngưi dùng có th can thip, s!a i theo ý
mình.
File thc hin (executable file): là các file cha mã lnh hay ch. th cho
máy tính thc hin. File thc hin lưu tr dư
i dng mã máy mà ta khó có th tìm
hiu ưc ý ngh"a c
a nó, nhưng tn ti mt s công c "hiu" ưc các file ó.
Khi dùng trình ng dng mc (Midnight Commander, chương 8), file thc hin ưc
b)t $u bi du (*) và thưng có màu xanh lc.
Th mc hay còn gi là file bao hàm (directory): là file bao hàm các file
khác và có cu to hoàn toàn tương t như file thông thưng khác nên có th g(i là
file. Trong mc, file bao hàm thưng có màu tr)ng và b)t $u b0ng du ngã (~) hoc
du chia (/). Ví d: /, /home, /bin, /usr, /usr/man, /dev ...
File thi
t b (device file): là file mô t thit b, dùng như là nh danh ch.
ra thit b c$n thao tác. Theo quy ư
c, file thit b ưc lưu tr trong thư mc /dev.
Các file thit b hay gp trong thư mc này là tty (teletype - thit b truyn thông),
ttyS (teletype serial - thit b truyn thông ni tip), fd0, fd1, ... (floppy disk- thit
b# # "a mm), hda1, hda2, ... hdb1, hdb2, ... (hardisk - thit b# # cng theo
chu-n IDE; a, b,... ánh s# #"a vt lý; 1, 2, 3... ánh s# #logic). Trong mc, file
thit b có màu tím và b)t $u b0ng du cng (+).
File liên k
t (linked file): là nhng file cha tham chiu n các file khác
trong h thng tp tin c
a Linux. Tham chiu này cho phép ngưi dùng tìm nhanh
i file thay vì t
i v trí nguyên th
y c
a nó. Hơn na, ngưi ta có th g)n vào ó các
thông tin ph tr làm cho file này có tính nng tri hơn so v
i tính nng nguyên th
y
c
a nó. Ta thy loi file này ging như khái nim shortcut trong MS-Windows98.
Không ging mt s h iu hành khác (như MS-DOS ch/ng hn), Linux qun lý thi
gian c
a tp tin qua các thông s thi gian truy nhp (accesed time), thi gian kin to
(created time) và thi gian s!a i (modified time).
3.4.2. Các lnh to file
Trong Linux có rt nhiu cách to file, sau ây là các cách hay ưc dùng. 6
4
* To file vi lnh touch
Lnh touch có nhiu chc nng, trong ó mt chc nng là giúp to file m
i trên h
thng: touch rt hu ích cho vic t #chc mt tp hp các file m
i. Cú pháp lnh:
touch <file>
Thc cht lnh này có tác dng dùng cp nht thi gian truy nhp và s!a cha l$n
cui c
a mt file. Vì lý do này, các file ưc to b0ng lnh touch u ưc s)p xp theo
thi gian s!a i. Nu s! dng lnh touch i v
i mt file chưa tn ti, chương trình s7 to
ra file ó. S! dng bt k5 trình son tho nào son tho file m
i.
Ví d, dùng lnh touch to file newfile:
# touch newfile
* To file b+ng cách
i hưng
u ra ca lnh (>)
Cách này rt hu ích nu mun lưu kt qu c
a mt lnh ã thc hin.
g!i kt qu c
a mt lnh vào mt file, dùng du ">" theo ngh"a chuyn hư
ng li ra
chu-n. Ví d, ưa kt qu c
a lnh ls -l /bin vào file /home/thu/lenhls b0ng cách gõ:
# ls -l /bin > /home/thu/lenhls
Linux t ng to nu file lenhls chưa có, trong trưng hp ngưc li, ni dung file c2
s7 b th ch bi kt qu c
a lnh.
# ls -l /bin >/home/thu/lenhls
Nu mun b sung kt qu vào cui file thay vì thay th ni dung file, hãy s! dng du
">>".
Ví d, lnh
# ls -l /bin >> /home/thu/lenhls
ưa các dòng danh sách file trong thư mc /bin vào cui ni dung c
a file
/home/thu/lenhls.
* To file vi lnh cat
Lnh cat tuy ơn gin nhưng rt hu dng trong Linux. Chúng ta có th s! dng lnh
này ly thông tin t $u vào (bàn phím...) ri kt xut ra file hoc các ngun khác (màn
hình ...), hay xem ni dung c
a mt file ... Ph$n này trình bày tác dng c
a lnh cat i
v
i vic to file. Cú pháp lnh:
cat > <file>
Theo ng$m nh, lnh này cho phép ly thông tin $u vào t bàn phím ri xut ra màn
hình. Son tho ni dung c
a mt file b0ng lnh cat tc là ã i hư
ng $u ra c
a lnh t
màn hình vào mt file. Ngưi dùng gõ ni dung c
a file ngay ti du nh)c màn hình và gõ
CTRL+d kt thúc vic son tho. Nhưc im c
a cách to file này là nó không cho
phép s!a li, ví d nu mun s!a mt li chính t trên mt dòng, ch. có cách là xóa n v
trí c
a li và gõ li ni dung va b xóa.
Ví d. to file newfile trong thư mc /home/vd b0ng lnh cat.
# cat > /home/vd/newfile
This is a example of cat command
# 6
5
Sau khi son tho xong, gõ Enter và CTRL+d tr v du nh)c lnh, nu không gõ
Enter thì phi gõ CTRL+d hai l$n. Có th s! dng luôn lnh cat xem ni dung c
a file
va son tho:
# cat /home/vd/newfile
This is a example of cat command
#
3.4.3 Các lnh thao tác trên file
* Sao chép file vi lnh cp
Lnh cp có hai dng như sau:
cp [tùy-chn] <file-ngun> ... <file-ích>
cp [tùy-chn] --target-directory=<thư-mc> <file-ngun>...
Lnh này cho phép sao file-ngu%n thành file-
ích hoc sao chép t nhiu file-ngun
vào mt thư mc ích (tham s <file-ích> hay <thư-mc>). Dng th hai là mt cách vit
khác i th t hai tham s v trí.
Các tùy ch(n:
-a, --archive : ging như -dpR (t #hp ba tham s -d, -p, -R, như dư
i ây).
-b, --backup[=CONTROL] : to file lưu cho mi file ích nu như nó ang tn ti.
-d, --no-dereference : duy trì các liên kt.
-f, --force : ghi '#file ích ang tn ti mà không nh)c nh.
-i, --interactive : có thông báo nh)c nh trư
c khi ghi '.
-l, --link : ch. to liên kt gia file-ích t file-ngun mà không sao chép.
-p, --preserve : duy trì các thuc tính c
a file-ngun sang file-ích.
-r : cho phép sao chép mt cách quy file thông thưng.
-R : cho phép sao chép mt cách quy thư mc.
-s, --symbolic-link : to liên kt tưng trưng thay cho vic sao chép các file.
-S, --suffix=<hu-t> : b qua các hu t thông thưng (hoc ưc ch. ra).
-u, --update : ch. sao chép khi file ngun m
i hơn file ích hoc khi file ích chưa có.
-v, --verbose : ưa ra thông báo v quá trình sao chép.
--help : hin th trang tr giúp và thoát.
File ích ưc to ra có cùng kích thư
c và các quyn truy nhp như file ngun, tuy
nhiên file ích có thi gian to lp là thi im thc hin lnh nên các thuc tính thi gian
s7 khác.
Ví d, lnh
# cp /home/ftp/vd /home/test/vd1
Nu v trí ích, mô t $y
tên file ích thì ni dung file ngun s7 ưc sao chép
sang file ích. Trong trưng hp ch. ưa ra v trí file ích ưc t trong thư mc nào thì
tên c
a file ngun s7 là tên c
a file ích.
# cp /home/ftp/vd /home/test/ 6
6
Trong ví d này, tên file ích s7 là vd ngh"a là to mt file m
i /home/test/vd.
Nu s! dng lnh này sao mt thư mc, s7 có mt thông báo ưc ưa ra cho bit ngun
là mt thư mc và vì vy không th dùng lnh cp sao chép.
# cp . newdir
cp: .: omitting directory
Ví d v vic lnh cp cho phép sao nhiu file cùng mt lúc vào mt thư mc.
# cp vd vd1 newdir
# pwd
/newdir
# ls -l
total 8
-rw-r--r-- 1 root ftp 15 Nov 14 11:00 vd
-rw-r--r-- 1 root ftp 12 Nov 14 11:00 vd1
Lu ý:
i v
i nhiu lnh làm vic v
i file, khi gõ lnh có th s! dng kí hiu mô
t nhóm xác nh mt nhóm file làm cho tng hiu lc c
a các lnh ó. Ví d,
lnh:
# cp * bak
thc hin vic sao chép m(i file có trong thư mc hin thi sang thư mc con
c
a nó có tên là bak.
Dùng lnh
# cp /usr/src/linux-2.2.14/include/linux/*.h bak
cho phép sao chép m(i file v
i tên có hai kí hiu cui cùng là ".h" sang thư mc
con bak.
Chính vì lí do nói trên, dù trong nhiu lnh tuy không nói n vic s! dng kí hiu mô
t nhóm file nhưng chúng ta có th áp dng chúng nu iu ó không trái v
i suy lun
thông thưng. Do nhng tình hung như th là quá phong phú cho nên không th gi
i thiu
ht trong tài liu. Chúng ta chú ý mt gii pháp là mi khi s! dng mt lnh nào ó, nên
th! nghim cách thc hiu qu này.
* $i tên file vi lnh mv
Cú pháp lnh i tên file:
mv <tên-c> <tên-mi>
Lnh này cho phép i tên file t tên c, thành tên mi.
Ví d:
# mv vd newfile
Lnh này s7 i tên file vd thành newfile. Trong trưng hp file newfile ã tn ti,
ni dung c
a file vd s7 ghi '#lên ni dung c
a file newfile.
* Xóa file vi lnh rm
Lnh rm là lnh rt "nguy him" vì trong Linux không có lnh khôi phc li nhng gì
ã xóa, vì th hãy c-n tr(ng khi s! dng lnh này. Cú pháp lnh: 6
7
rm [tùy-chn] <file> ...
Lnh rm cho phép xóa b mt file hoc nhiu file.
Các tùy ch(n:
-d, --directory : loi b liên kt c
a thư mc, k c thư mc không rng. Ch. có siêu ngưi
dùng m
i ưc phép dùng tùy ch(n này.
-f, --force : b qua các file (xác nh qua tham s file) không tn ti mà không c$n nh)c nh.
-i, --interactive : nh)c nh trư
c khi xóa b mt file.
-r, -R, --recursive : xóa b ni dung c
a thư mc mt cách quy.
-v, --verbose : ưa ra các thông báo v quá trình xóa file.
--help : hin th trang tr giúp và thoát.
Lnh rm cho phép xóa nhiu file cùng mt lúc b0ng cách ch. ra tên c
a các file c$n xóa
trong dòng lnh (hoc dùng kí kiu mô t nhóm).
Ví d, dùng lnh ls xem danh sách các file trong thư mc hin thi:
# ls
ld-Linux.so.1
ld-Linux.so.1.9.5
ld-Linux.so.2
ld.so
ld.so.1.9.5
libBrokenLocale-2.1.3.so
libBrokenLocale.so.1
libNoVersion-2.1.3.so
vd2.txt
libnss_dns-2.1.3.so
libnss_dns.so.1
libnss_dns.so.2
libnss_files-2.1.3.so
libnss_files.so.1
libnss_files.so.2
libnss_hesiod-1.3.so
telex.o
S! dng lnh xóa file vd2.txt sau ây:
# rm vd2.txt telex.o
và sau ó dùng lnh ls xem li danh sách file:
# ls
ld-Linux.so.1
ld-Linux.so.1.9.5
ld-Linux.so.2
ld.so
ld.so.1.9.5
libBrokenLocale-2.1.3.so
libBrokenLocale.so.1
libNoVersion-2.1.3.so
Libnss_dns-2.1.3.so
Libnss_dns.so.1
Libnss_dns.so.2
Libnss_files-2.1.3.so
Libnss_files.so.1
Libnss_files.so.2
Libnss_hesiod-1.3.so
telex.o
Dùng lnh
# rm bak/*.h
xóa m(i file v
i tên có hai kí hiu cui cùng là ".h" trong thư mc con bak. 6
8
* Lnh
m t" và dòng trong file wc
Linux có lnh wc dùng m s ký t, s t, hay s dòng trong mt file. Cú pháp
lnh:
wc [tùy-chn] [file]...
Lnh hin ra s lưng dòng, s lưng t, s lưng ký t có trong mi file, và mt dòng
tính t ng nu có nhiu hơn mt file ưc ch. ra. Nu không có tùy ch(n nào thì mc nh
ưa ra c s dòng, s t và s ký t. Ng$m nh khi không có tên file trong lnh thì s7 (c
và m trên thit b vào chu-n.
Các tu5 ch(n:
-c, --byte, --chars : ưa ra s ký t trong file.
-l, --lines : ưa ra s dòng trong file.
-L, --max-line-length : ưa ra chiu dài c
a dòng dài nht trong file.
-w, --words : ưa ra s t trong file.
--help : hin th trang tr giúp và thoát.
Ví d, sau khi gõ lnh:
# wc /home/lan/mau/mau1
xut hin dòng thông báo:
11 64 293 /home/lan/mau/mau1
Dòng thông báo trên cho bit file mau1 có 293 ký t, s 64 t và có 11 dòng.
Ví d sau khi gõ lnh:
# wc
ngưi dùng gõ tip các dòng như sau:
This is a example of wc command without
[namefile]
sau ó ngưi dùng gõ cp phím Ctrl-d kt thúc thì thy dòng thông báo hin ra:
2 9 49
Khi gõ lnh wc mà không có mt tham s nào, mc nh s7 son tho trc tip ni dung
trên thit b vào chu-n. Dùng CTRL+d kt thúc vic son tho, kt qu s7 hin th lên
màn hình như ví d trên.
# wc /home/lan/vd/vdcalj /home/lan/vd/vdwc
8 41 192 /home/lan/vd/vdcalj
24 209 1473 /home/lan/vd/vdwc
32 250 1665 total
Lnh trên m s ký t, s t, s dòng trên mi file ưc ch. ra, và dòng cui cùng hin
th t ng s dòng, s t, s ký t m ưc.
B0ng cách kt hp lnh wc v
i mt s lnh khác, có th có nhiu cách bit ưc
nhng thông tin c$n thit. Ch/ng hn:
kt hp v
i lnh ls xác nh s file có trong mt thư mc:
# ls | wc -l
37 6
9
dòng lnh trên cho bit trong thư mc ch
c
a có 36 file (do dòng $u tiên kt qu thông
báo c
a lnh ls không xác nh mt file).
kt hp v
i lnh cat bit s tài khon cá nhân có trên máy c
a ngưi
dùng:
# cat /etc/passwd | wc -l
324
* Lnh loi b nhng dòng không quan trng uniq
Trong mt s trưng hp khi xem ni dung mt file, chúng ta thy có mt s các thông
tin b trùng lp, ví d các dòng trng hoc các dòng cha ni dung ging nhau. ng
thi làm g(n và thu nh kích thư
c c
a file, có th s! dng lnh uniq lit kê ra ni dung
file sau khi ã loi b các dòng trùng lp. Cú pháp lnh:
uniq [tùy-chn] [input] [output]
Lnh uniq s7 loi b các dòng trùng lp k nhau t input (thit b vào chu-n) và ch.
gi li mt dòng duy nht trong s các dòng trùng lp ri ưa ra output (thit b ra chu-n).
Các tu5 ch(n:
-c, --count : m và hin th s l$n xut hin c
a các dòng trong file.
-d : hin th lên màn hình dòng b trùng lp.
-u : hin th ni dung file sau khi xóa b toàn b các dòng b trùng lp không gi li mt dòng
nào.
-i : hin th ni dung file sau khi xóa b các dòng trùng lp và ch. gi li duy nht mt dòng có
ni dung b trùng lp.
-D : hin th tt c các dòng trùng lp trên màn hình.
Nu s! dng lnh uniq trên mt file không có các dòng trùng lp thì lnh không có tác
dng.
Ví d, ngưi dùng s! dng lnh cat xem ni dung file vduniq
# cat vduniq
Gnome có hai phương pháp thoát ra ngoài.
Gnome có hai phương pháp thoát ra ngoài.
thoát bng cách s dng menu chính, hãy m
menu chính, chn mc Logout áy menu.
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Nu mun thoát bng cách s dng nút Logout trên Panel,
trưc ht phi thêm nút này vào Panel.
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Trong file vduniq có hai dòng b trùng lp và k nhau là dòng th 1 và 2.
Gnome có hai phương pháp thoát ra ngoài.
Gnome có hai phương pháp thoát ra ngoài.
và dòng th 5 và 6
Chn YES/ NO kt thúc phiên làm vic vi Gnome. 7
0
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Dùng lnh uniq loi b dòng trùng lp:
# uniq vduniq
Gnome có hai phương pháp thoát ra ngoài.
thoát bng cách s dng menu chính, hãy m
menu chính, chn mc Logout áy menu.
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Nu mun thoát bng cách s dng nút Logout trên Panel,
trưc ht phi thêm nút này vào Panel.
Chn YES/ NO kt thúc phiên làm vic vi Gnome.
Dòng cui cùng trong file vduniq có ni dung trùng v
i dòng th 5, nhưng sau lnh
uniq, nó không b xóa vì không k v
i dòng có ni dung trùng lp.
* Sp xp ni dung file vi lnh sort
sort là lnh (c các thông tin và s)p xp chúng theo th t trong bng ch cái hoc
theo th t ưc quy nh theo các tùy ch(n c
a lnh. Cú pháp lnh:
sort [tùy-chn] [file] ...
Hin th ni dung sau khi s)p xp c
a mt hoc nhiu file ra thit b ra chu-n là tác
dng c
a lnh sort. Ng$m nh s)p xp theo th t t in c
a các dòng có trong các file
(tng ch cái theo bng ch h thng (ch/ng hn ASCII) và k t v trí $u tiên trong các
dòng).
Các tùy ch(n:
+<s1> [-<s2>] : Hai giá tr s1 và s2 xác nh "khóa" s)p xp c
a các dòng, thc cht ly
xâu con t v trí s1 t
i v trí s2 c
a các dòng so sánh ly th t s)p xp các dòng. Nu s2
không có thì coi là ht các dòng; nu s2 nh hơn s1 thì b qua la ch(n này. Chú ý, nu có
s2 thì phi cách s1 ít nht mt du cách.
-b : b qua các du cách ng trư
c trong phm vi s)p xp.
-c : kim tra nu file ã s)p xp thì thôi không s)p xp na.
-d : xem như ch. có các ký t [a-zA-Z0-9] trong khóa s)p xp, các dòng có các kí t c bit
(du cách, ? ...) ưc ưa lên $u.
-f : s)p xp không phân bit ch hoa ch thưng.
-n : s)p xp theo kích thư
c c
a file.
-r : chuyn i th t s)p xp hin thi.
Ví d, mun s)p xp file vdsort
# cat vdsort
trưc ht phi thêm nút này vào Panel.
21434
bn xác nhn là có thc s mun thoát hay không.
menu chính, chn mc Logout áy menu.
Bn có th s dng mc Logout t menu chính
Gnome có hai phương pháp thoát ra ngoài. 7
1
hoc nút Logout trên Panel chính thoát ra ngoài.
Khi ó mt hp thoi Logout s xut hin yêu cu
57879
La chn YES hoc NO kt thúc phiên làm vic vi
Gnome.
Nó không cung cp ch c nng hot ng nào khác ngoài ch c
nng này.
Nó không cung cp ch c nng hot ng nào khác ngoài ch c
nng này.
Nu mun thoát bng cách s dng nút Logout trên Panel,
# sort -f vdsort
21434
57879
Bn có th s dng mc Logout t menu chính
bn xác nhn là có thc s mun thoát hay không.
Gnome có hai phương pháp thoát ra ngoài.
hoc nút Logout trên Panel chính thoát ra ngoài.
Khi ó mt hp thoi Logout s xut hin yêu cu
La chn YES hoc NO kt thúc phiên làm vic vi
Gnome.
menu chính, chn mc Logout áy menu.
Nu mun thoát bng cách s dng nút Logout trên Panel,
Nó không cung cp ch c nng hot ng nào khác ngoài ch c
nng này.
Nó không cung cp ch c nng hot ng nào khác ngoài ch c
nng này.
trưc ht phi thêm nút này vào Panel.
Có th kt hp lnh sort v
i các lnh khác, ví d:
# ls -s | sort -n
total 127
1 Archive/
1 infoWorld/
13 keylime.pie
46 drop.text.hqx
64 bitnet.mailing-lists.Z
Lnh trên cho th t s)p xp c
a các file theo kích thư
c trong thư mc hin thi.
3.4.4 Các lnh thao tác theo ni dung file
* S
dng lnh file
xác
nh ki u file
Cú pháp lnh file: 7
2
file [tùy-chn] [-f file] [-m <file-nh>...] <file>...
Lnh file cho phép xác nh và in ra kiu thông tin cha trong file. Lnh file s7 l$n lưt
kim tra t kiu file h thng, kiu file magic (ví d file mô t thit b) ri n kiu file
vn bn thông thưng. Nu file ưc kim tra tha mãn mt trong ba kiu file trên thì kiu
file s7 ưc in ra theo các dng cơ bn sau:
text: dng file vn bn thông thưng, ch. cha các mã ký t ASCII.
executable: dng file nh phân kh thi.
data: thưng là dng file cha mã nh phân và không th in ra ưc.
Mt s tu5 ch(n sau ây:
-b : cho phép ch. ưa ra kiu file mà không ưa +'m theo tên file.
-f tên-file : cho phép hin th kiu c
a các file có tên trùng v
i ni dung trên mi dòng trong
file tên-file. kim tra trên thit b vào chu-n, s! dng du "-".
-z : xem kiu c
a file nén.
Ví d:
# file file.c file /dev/hda
file.c: C program text
file: ELF 32-bit LSB executable, Intel 80386,version
1,dynamically linked, not stripped
/dev/hda: block special
Lnh trên cho xem kiu c
a hai file file.c, file và thư mc /dev/hda.
Nh
r0ng kt qu c
a lnh file không phi lúc nào c2ng chính xác tuyt i.
* Xem ni dung file vi lnh cat
F on trư
c, chúng ta ã có dp làm quen v
i lnh cat thông qua tác dng to file c
a
lnh. Ph$n này gi
i thiu tác dng ch
yu c
a lnh cat: ó là tác dng xem ni dung c
a
mt file. Cú pháp lnh:
cat [tùy-chn] <tên file>
Các tùy ch(n:
-A, --show-all : ging như tùy ch(n -vET.
-b, --number-nonblank : hin th thêm s th t trên mi dòng (b qua dòng trng).
-e : ging như tùy ch(n -vE.
-E, --show-ends : hin th du "$" ti cui mi dòng.
-n, --number : hin th s th t c
a mi dòng (k c dòng trng).
-s : nu trong ni dung file có nhiu dòng trng thì s7 loi b b
t ch. hin th mt dòng
trng.
-t : ging như -vT.
-T, --show-tabs : hin th du TAB dư
i dng ^I.
-v, --show-nonprinting : hin th các ký t không in ra ưc ngoi tr LFD và TAB.
--help : hin th trang tr giúp và thoát.
Ví d: 7
3
# cat vdcat
chúng ta thy xut hin các dòng sau ây:
Gnome có hai phương pháp thoát ra ngoài.
có th s dng mc Logout t menu chính
hoc nút Logout trên Panel chính thoát ra ngoài.
thoát bng cách s dng menu chính, hãy m
menu chính, chn mc Logout áy menu.
Khi ó mt hp thoi Logout s xut hin yêu cu
xác nhn là có thc s mun thoát hay không.
hoc nút Logout trên Panel chính thoát ra ngoài.
thoát bng cách s dng menu chính, hãy m
menu chính, chn mc Logout áy menu.
# cat -bEs vdcat
thì ni dung file hin ra như sau:
1 Gnome có hai phương pháp thoát ra ngoài. $
2 có th s dng mc Logout t menu chính $
3 hoc nút Logout trên Panel chính thoát ra ngoài.$
4 thoát bng cách s dng menu chính, hãy m $
5 menu chính, chn mc Logout áy menu. $
$
6 Khi ó mt hp thoi Logout s xut hin yêu cu $
7 xác nhn là có thc s mun thoát hay không.$
$
8 hoc nút Logout trên Panel chính thoát ra ngoài.$
9 thoát bng cách s dng menu chính, hãy m $
10 menu chính, chn mc Logout áy menu.
* Xem ni dung các file ln vi lnh more
Lnh cat cho phép xem ni dung c
a mt file, nhưng nu file quá l
n, ni dung file s7
trôi trên màn hình và ch. có th nhìn thy ph$n cui c
a file. Linux có mt lnh cho phép
có th xem ni dung c
a mt file l
n, ó là lnh more. Cú pháp lnh:
more [-dlfpcsu] [-s] [+/xâum!u] [+dòng-s] [file ...]
Lnh more hin th ni dung c
a file theo tng trang màn hình.
Các la ch(n:
-s : xác nh s dòng ni dung c
a file ưc hin th (s).
-d : trên màn hình s7 hin th các thông báo giúp ngưi dùng cách s! dng i v
i lnh more,
ví như [ Press space to continue, "q" to quit .], hay hin th [Press "h" for instructions .]
thay th cho ting chuông cnh báo khi bm sai mt phím. 7
4
-l : more thưng xem ^L là mt ký t c bit, nu không có tùy ch(n này, lnh s7 dng ti
dòng $u tiên có cha ^L và hin th % ni dung ã xem ưc (^L không b mt), nhn phím
space (hoc enter) tip tc. Nu có tùy ch(n -l, ni dung c
a file s7 ưc hin th như bình
thưng nhưng mt khuôn dng khác, tc là du ^L s7 mt và trư
c dòng có cha ^L s7 có
thêm mt dòng trng.
-p : không cun màn hình, thay vào ó là xóa nhng gì có trên màn hình và hin th tip ni
dung file.
-c : không cun màn hình, thay vào ó xóa màn hình và hin th ni dung file b)t $u t .nh
màn hình.
-s : xóa b
t các dòng trng lin nhau trong ni dung file ch. gi li mt dòng.
-u : b qua du gch chân.
+/xâum-u : tùy ch(n +/xâum-u ch. ra mt chui s7 ưc tìm kim trư
c khi hin th mi file.
+dòng-s : b)t $u hin th t dòng th dòng-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 v
i lnh more, có th s! dng mt s các phím t)t thc hin mt s các thao tác
ơn gin trong khi ang thc hin lnh. Bng dư
i ây lit kê các phím t)t ó:
Phím tt Chc nng
[Space]
[Enter]
h
d hoc CTRL+D
q hoc CTRL+Q
f
b hoc CTRL+B
Nhn phím space hin th màn hình tip theo
Hin th n dòng tip theo
Hin th dòng tip theo
Hin th danh sách các phím t)t
Cun màn hình (mc nh là 11 dòng)
Thoát khi lnh more
B qua n dòng (mc nh là 1)
B qua k màn hình tip theo (mc nh là 1)
Tr li k màn hình trư
c (mc nh là 1) 7
5
=
:n
:p
v
CTRL+L
:f
.
Hin th s dòng hin thi
xem k file tip theo
Tr li k file trư
c
Chy chương trình son tho vi ti dòng hin thi
V7 li màn hình
Hin th tên file hin thi và s dòng
Lp li lnh trư
c
* Thêm s th t! ca các dòng trong file vi lnh nl
Như ã bit lnh cat v
i tham s -n s7 ánh s th t c
a các dòng trong file, tuy nhiên
Linux còn cho phép dùng lnh nl thc hin công vic như vy. Cú pháp lnh:
nl [tùy-chn] <file>
Lnh này s7 ưa ni dung file ra thit b ra chu-n, v
i s th t c
a dòng ưc thêm
vào. Nu không có file (tên file), hoc khi file là du "-", thì (c ni dung t thit b
vào chu-n.
Các tu5 ch(n:
-b, --body-numbering=STYLE : s! dng kiu STYLE cho vic ánh th t các dòng trong
ni dung file. Có các kiu STYLE sau:
a : ánh s tt c các dòng k c dòng trng;
t : ch. ánh s các dòng không trng;
n : không ánh s dòng.
-d, --section-delimiter=CC : s! dng CC ánh s trang logic (CC là hai ký t xác nh
phm vi cho vic phân trang logic).
-f, --footer-numbering=STYLE : s! dng kiu STYLE ánh s các dòng trong ni dung
file (mt câu có th có hai dòng ...).
-h, --header-numbering=STYLE : s! dng kiu STYLE ánh s các dòng trong ni dung
file.
-i, --page-increment=s : ánh s th t c
a dòng theo cp s cng có công sai là s.
-l, --join-blank-lines=s :nhóm s dòng trng vào thành mt dòng trng.
-n, --number-format=khuôn : %&'n s dòng theo khuôn (khuôn: ln - cn trái, không có s 0
$u; rn - cn phi, không có s 0 $u; rz - cn phi và có s 0 $u)
-p, --no-renumber : không thit lp li s dòng ti mi trang logic.
-s, --number-separator=xâu : thêm chui xâu vào sau s th t c
a dòng.
-v, --first-page=s : s dòng $u tiên trên mi trang logic.
-w, --number-width=s : hin th s th t c
a dòng trên ct th s.
--help : hin th trang tr giúp và thoát.
Ví d:
# nl --body-numbering=a --number-format=rz vdnl
000001 1) New configuration mode
000002
000003 7
6
000004 1-1) Directories
000005
000006 Now, everything goes to ~/GNUstep/Library/AfterStep or
000007 /usr/local/share/afterstep !
000008
000009 You can use your old .steprc config file with afterstep -
f myoldsteprc,
000010 however, this isn't recommended at all.
000011
000012 New versions of asapps will also put their config. file
here in a near
000013 future, like modules currently do.
000014
Lnh trong ví d trên cho thêm s th t c
a các câu trong file vdnl theo dng: ánh s
th t tt c các dòng, k c dòng trng, các s th t ưc cn phi và có s 0 $u (lưu ý
r0ng có dòng trong file ưc hin ra thành hai dòng trên giy).
* Xem qua ni dung file v
i lnh head
Các on trư
c cho bit cách thc xem ni dung c
a mt file nh lnh cat hay more.
Trong Linux c2ng có các lnh khác cho nhiu cách thc xem ni dung c
a mt file.
Trư
c ht, chúng ta hãy làm quen v
i lnh head. Cú pháp lnh
head [tùy-chn] [file]...
Lnh này mc nh s7 ưa ra màn hình 10 dòng $u tiên c
a mi file. Nu có nhiu hơn
mt file, thì l$n lưt tên c
a file và 10 dòng ni dung $u tiên s7 ưc hin th. Nu không
có tham s file, hoc file là du "-", thì ng$m nh s7 (c t thit b vào chu-n.
Các tu5 ch(n:
-c, --bytes=c. : hin th c. (s nguyên) ký t $u tiên trong ni dung file (c. có th nhn giá tr
là b cho 512, k cho 1K, m cho 1 Meg)
-n, --lines=n : hin th n (s nguyên) dòng thay cho 10 dòng ng$m nh.
-q, --quiet, --silent : không ưa ra tên file dòng $u.
-v, --verbose : luôn ưa ra tên file dòng $u.
--help : hin th trang tr giúp và thoát.
Ví d:
# head -6 vdhead1 vdhead2
==> vdhead1 <==
1) New configuration mode
1-1) Directories
Now, everything goes to Ú/GNUstep/Library/AfterStep or
==> vdhead2 <== 7
7
1.7.164 patch 3
$HOME/GNUstep/Library/AfterStep/start/Desktop/Theme/.include
changed from shell script call to perl script call
Lnh này cho xem qua 6 dòng $u tiên trong ni dung hai file vdhead1 và vdhead2.
* Xem qua ni dung file vi lnh tail
Lnh th hai cho phép xem qua ni dung c
a file là lnh tail v
i cú pháp:
tail [tùy-chn] [file]...
Lnh tail ng$m nh ưa ra màn hình 10 dòng cui trong ni dung c
a các file. Nu có
nhiu hơn mt file, thì l$n lưt tên c
a file và 10 dòng cui s7 ưc hin th. Nu không có
tham s file, hoc file là du "-" thì ng$m nh s7 (c t thit b vào chu-n.
Các tùy ch(n:
--retry : c g)ng m mt file khó truy nhp khi b)t $u thc hin lnh tail.
-c, --bytes=n : hin th n (s) ký t sau cùng.
-f, --follow[={name | descritptor}] : sau khi hin ni dung file s7 hin thông tin v file: -f, --
follow, và --follow=descriptor là như nhau.
-n, --lines=n : hin th n (s) dòng cui cùng c
a file thay cho 10 dòng ng$m nh.
--max-unchanged-stats=n : hin th tài liu v file (ng$m nh n là 5).
--max-consecutive-size-changes=n : hin th tài liu v file (ng$m nh n là 200).
--pid=PID : kt hp v
i tùy ch(n -f, chm dt sau khi quá trình có ch. s = PID li.
-q, --quiet, --silent : không ưa ra tên file dòng $u trong ni dung ưc hin th.
-s, --sleep-interval=k : kt hp v
i tùy ch(n -f, dng k giây gia các hot ng.
-v, --verbose : luôn hin th tên c
a file.
--help : hin th trang tr giúp và thoát.
Ví d:
# tail -2 vdtail1 vdtail2
==> vdtail1 <==
Now, everything goes to ~/GNUstep/Library/AfterStep or
/usr/local/share/afterstep !
==> vdtail2 <==
changed from shell script call to perl script call
Lnh trên cho xem hai dòng cui c
a hai file vdtail1 và vdtail2.
* Tìm s! khác nhau gia hai file (lnh diff)
Vic tìm ra s khác nhau gia hai file ôi khi là rt c$n thit. Linux có mt lnh có tác
dng như vy, ó là lnh diff v
i cú pháp:
diff [tu"-chn] <file1> <file2> 7
8
Trong trưng hp ơn gin, lnh diff s7 so sánh ni dung c
a hai file. Nu file1 là
mt thư mc còn file2 là mt file bình thưng, diff s7 so sánh file có tên trùng v
file2 trong thư mc file1 v
i file2.
Nu c file1 và file2 u là thư mc, diff s7 thc hin s so sánh l$n lưt các file
trong c hai thư mc theo th t t a-z (s so sánh này s7 không qui nu tu5 ch(n -r
hoc --recursive không ưc ưa ra). Tt nhiên so sánh gia hai thư mc không th chính
xác như khi so sánh hai file.
Các tu5 ch(n:
-a: xem tt c các file dng vn bn và so sánh theo tng dòng.
-b: b qua s thay i v s lưng c
a ký t trng.
-B: b qua m(i s thay i mà ch.#%&'n hoc xoá các dòng trng.
--brief: ch. thông báo khi có s khác nhau mà không ưa ra chi tit ni dung khác nhau.
-d: tìm ra s khác bit nh (tu5 ch(n này có th làm chm tc làm vic c
a lnh diff).
--exclude-from=file: khi so sánh thư mc, b qua các file và các thư mc con có tên phù hp
v
i m4u có trong file.
-i: so sánh không bit ch hoa ch thưng.
-r: thc hin so sánh qui trên thư mc.
-s: thông báo khi hai file là ging nhau.
-y: hin th hai file cnh nhau d*#phân bit s khác nhau.
3.4.5 Các lnh tìm file
* Tìm theo ni dung file b+ng lnh grep
Lnh grep c2ng như lnh ls là hai lnh rt quan tr(ng trong Linux. Lnh này có hai tác
dng cơ bn như sau:
tác dng th nht là l(c $u ra c
a mt lnh khác v
i cú pháp là
<lnh> | grep <m!u lc>
tác dng th hai, và c2ng là tác dng cơ bn ưc gi
i thiu trong ph$n này,
là tìm dòng cha m4u ã nh trong file ưc ch. ra.
Cú pháp lnh grep:
grep [tùy-chn] <m!u-lc> [file]
Lnh grep hin th tt c các dòng có cha mu-lc trong file ưc ch. ra (hoc t
thit b vào chu-n nu không có file hoc file có dng là du "-")
Các tùy ch(n:
-G, --basic-regexp : xem m4u l(c như mt biu thc thông thưng. iu này là ng$m nh.
-E, --extended-regexp : xem m4u l(c như mt biu thc m rng.
-F, --fixed-strings : xem m4u như mt danh sách các xâu c nh, ưc phân ra bi các dòng
i. Ngoài lnh grep còn có hai lnh là egrep và fgrep. egrep tương t như lnh grep -E, fgrep
tương t v
i lnh grep -F .
Lnh grep còn có các tùy ch(n sau:
-A NUM, --after-context=NUM : ưa ra NUM dòng ni dung tip theo sau dòng có cha
m4u. 7
9
-B NUM, --before-context=NUM : ưa ra NUM dòng ni dung trư
c dòng có cha m4u.
-C [NUM], --context[=NUM] : hin th NUM dòng (mc nh là 2 dòng) ni dung.
-NUM : ging --context=NUM ưa ra các dòng ni dung trư
c và sau dòng có cha m4u. Tuy
nhiên, grep s7 không ưa ra dòng nào nhiu hơn mt l$n.
-b, --byte-offset : hin th a ch. tương i trong file $u vào trư
c mi dòng ưc ưa ra
-c, --count : m s dòng tương ng cha m4u trong file $u vào thay cho vic hin th các
dòng cha m4u.
-d ACTION, --directories=ACTION : nu $u vào là mt thư mc, s! dng ACTION x!
lý nó. Mc nh, ACTION là read, tc là s7 (c ni dung thư mc như mt file thông thưng.
Nu ACTION là skip, thư mc s7 b b qua. Nu ACTION là recurse, grep s7 (c ni dung
c
a tt c các file bên trong thư mc ( quy); tùy ch(n này tương ương v
i tùy ch(n -r.
-f file, --file=file : ly các m4u t file, mt m4u trên mt dòng. File trng cha ng các m4u
rng, và các dòng ưa ra c2ng là các dòng trng.
-H, --with-file : ưa ra tên file trên mi dòng cha m4u tương ng.
-h, --no-filename : không hin th tên file +'m theo dòng cha m4u trong trưng hp tìm nhiu
file.
-i : hin th các dòng cha m4u không phân bit ch hoa ch thưng.
-l : ưa ra tên các file trùng v
i m4u l(c.
-n, --line-number : thêm s th t c
a dòng cha m4u trong file.
-r, --recursive : (c tt c các file có trong thư mc ( quy).
-s, --no-messages : b qua các thông báo li file không (c ưc hoc không tn ti.
-v, --invert-match : hin th các dòng không cha m4u.
-w, --word-regexp : ch. hin th nhng dòng có cha m4u l(c là mt t tr(n G8n.
-x, --line-regexp : ch. hin th nhng dòng mà ni dung trùng hoàn toàn v
i m4u l(c.
Ví d, ngưi dùng gõ lnh cat xem ni dung file text:
# cat -n text
thì hin ra ni dung file ó như sau:
1 $ file file.c file /dev/hda
2 file.c: C program text
3 file:ELF 32-bit LSB executable, Intel 80386, version 1,
4 dynamically linked, not stripped
5 /dev/hda: block special
6
7 $ file -s /dev/hda",1,2,3,4,5,6,7,8,9,10#
8 /dev/hda: x86 boot sector
9 /dev/hda1: Linux/i386 ext2 filesystem
10 /dev/hda2: x86 boot sector
11 /dev/hda3: x86 boot sector, extended partition table
12 /dev/hda4: Linux/i386 ext2 filesystem
13 /dev/hda5: Linux/i386 swap file
14 /dev/hda6: Linux/i386 swap file 8
0
15 /dev/hda7: Linux/i386 swap file
16 /dev/hda8: Linux/i386 swap file
17 thutest
18 toithutest
Sau ó, dùng lnh grep l(c các dòng có cm filesystem
# grep -n filesystem text
9: /dev/hda1: Linux/i386 ext2 filesystem
12: /dev/hda4: Linux/i386 ext2 filesystem
C2ng có th s! dng các ký hiu biu di*n thông thưng (regular - expression) trong
m4u l(c ưa ra ưc nhiu cách tìm kim file khác nhau.
Bng dư
i ây lit kê mt s ký hiu hay dùng:
# grep - H thutest text
text: thutest
text: toithutest
# grep -H "^thutest" text
text: thutest
Ngoài các tùy ch(n khác nhau, lnh grep còn có hai dng na trên Linux. Hai dng ó
là egrep - s! dng v
i các m4u l(c phc tp, và fgrep - s! dng tìm nhiu m4u l(c
cùng mt lúc.
Th.nh thong mt biu thc ơn gin không th xác nh ưc i tưng c$n tìm, ví
d, như ang c$n tìm các dòng có mt hoc hai m4u l(c. Nhng lúc ó, lnh egrep t
ra rt có ích. egrep - expression grep - có rt nhiu các ký hiu biu di*n mnh hơn
grep. Dư
i ây là các ký hiu hay dùng:
Ký hiu Ý ngh)a
C
\c
^
$
.
[xy]
[^xy]
c*
- thay th cho ký t c
- hin th c như là mt ký t bình thưng nu c là mt ký t iu khin
- b)t $u mt dòng
- kt thúc dòng
- thay cho mt ký t ơn
- ch(n mt ký t trong tp hp các ký t ưc ưa ra
- ch(n mt ký t không thuc tp hp các ký t ưc ưa ra
- thay cho mt m4u có hoc không cha ký t c 8
1
Ví d, gi s! bây gi mun tìm các dòng có cha mt hoc nhiu hơn ký t b trên file
passwk v
i lnh egrep.
# egrep 'b+' /etc/passwd | head
cho ra các dòng kt qu sau:
root : x : 0 : 0 : root : /root : /bin/bash
bin : x : 1 : 1 : bin : /bin :
daemon : x : 2 : 2 : daemon : /sbin :
sync : x : 5 : 0 : sync : /sbin : /bin/sync
shutdown : x : 6 : 0 : shutdown : /sbin : /sbin/shutdown
halt : x : 7 : 0 : halt : /sbin : /sbin/halt
gopher : x : 13 : 30 : gopher : /usr/lib/gopher-data :
nobody : x : 99 : 99 : Nobody : / :
xfs : x : 43 : 43 : X Font Server : /etc/X11/fs : /bin/false
named : x : 25 : 25 : Named : /var/named : /bin/false
Khi gõ lnh:
# egrep '([^a-zA-Z] | :wi)' /etc/printcap | head
thì nhn ưc thông báo kt qu:
aglw:$\
:wi=AG 23 : wk=multiple Apple LaserWrite IINT:
aglw1:\
:wi=AG 23 : wk=Apple LaserWrite IINT:
Ký hiu Ý ngh)a
c
\c
^
$
.
[xy]
[^xy]
c*
c+
c?
a | b
(a)
- thay th cho ký t c
- hin th c như là mt ký t bình thưng nu c là mt ký t iu khin
- b)t $u mt dòng
- kt thúc dòng
- thay cho mt ký t ơn
- ch(n mt ký t trong tp hp các ký t ưc ưa ra
- ch(n mt ký t không thuc tp hp các ký t ưc ưa ra
- thay cho mt m4u có hoc không cha ký t c
- thay cho mt m4u có cha mt hoc nhiu hơn ký t c
- thay cho mt m4u không có hoc ch. có cha duy nht mt ký t c
- hoc là a hoc là b
- a mt biu thc 8
2
aglw2:\
:wi=AG 23 : wk=Apple LaserWrite IINT:
aglw3:\
:wi=AG 23 : wk=Apple LaserWrite IINT:
Lnh trên cho phép tìm các dòng ưc b)t $u bi (^) mt ch cái không phân bit ch
hoa ch thưng ([a-zA-Z]) hoc ( | ) dòng có cha m4u :wi.
Bt k5 lúc nào mun tìm các dòng có cha nhiu hơn mt m4u l(c, egrep là lnh tt
nht s! dng.
Có nhng lúc c$n phi tìm nhiu m4u l(c trong mt lúc. Ví d, có mt file cha rt
nhiu m4u l(c và mun s! dng mt lnh trong Linux tìm các dòng có cha các m4u
ó. Lnh fgrep s7 làm ưc iu này.
Ví d, file thu có ni dung như sau:
# cat thu
/dev/hda4: Linux/i386 ext2 filesystem
/dev/hda5: Linux/i386 swap file
/dev/hda8: Linux/i386 swap file
/dev/hda9: empty
/dev/hda10: empty
thutest
toithutest
và file mauloc có ni dung là:
# cat mauloc
empty
Bây gi mun s! dng ni dung file mauloc làm m4u l(c tìm các câu trong file
thu, hãy gõ lnh:
# fgrep -i -f mauloc thu
/dev/hda9: empty
/dev/hda10: empty
thutest
toithutest
* Tìm theo các
c tính ca file vi lnh find
Các on trên ây ã gi
i thiu cách thc tìm file theo ni dung v
i các lnh grep,
egrep và fgrep. Linux còn cho phép ngưi dùng s! dng mt cách thc khác $y nng
lc, ó là s! dng lnh find, lnh tìm file theo các thuc tính c
a file. Lnh này có mt s
khác bit so v
i các lnh khác, ó là các tùy ch(n c
a lnh là mt t ch không phi mt ký
t. iu kin c$n i v
i lnh này là ch. ra ưc im b)t $u c
a vic tìm kim trong h
thng file và nhng quy t)c c$n tuân theo c
a vic tìm kim. Cú pháp c
a lnh find:
find [ưng-d!n] [biu-th c]
Lnh find thc hin vic tìm kim file trên cây thư mc theo bi u thc ưc ưa ra.
Mc nh
ưng d-n là thư mc hin thi, bi u thc là -print.
Biu th&c có th có nh%ng dng sau: 8
3
Các toán t!:
( EXPR ); ! EXPR hoc -not EXPR; EXPR1 -a EXPR2 hoc EXPR1 -and
EXPR2; EXPR1 -o EXPR2 hoc EXPR1 -or EXPR2; và EXPR1, EXPR2
Các tùy ch(n lnh: tt c các tùy ch(n này luôn tr v giá tr true và ưc
t $u biu thc
-daystart : o thi gian (-amin, -atime, -cmin, -ctime, -mmin, -mtime).
-depth : thc hin tìm kim t ni dung bên trong thư mc trư
c (mc nh vic tìm kim ưc
thc hin b)t $u ti gc cây thư mc có cha file c$n tìm).
-follow : (tùy ch(n này ch. áp dng cho thư mc) nu có tùy ch(n này thì các liên kt tưng
trưng có trong mt thư mc liên kt s7 ưc ch. ra.
-help, --help : hin th kt qu c
a lnh find và thoát.
các test
-amin n : tìm file ưc truy nhp n phút trư
c.
-atime n : tìm file ưc truy nhp n*24 gi trư
c.
-cmin n : trng thái c
a file ưc thay i n phút trư
c ây.
-ctime n : trng thái c
a file ưc thay i n*24 gi trư
c ây.
-empty : file rng và hoc là thư mc hoc là file bình thưng.
-fstype ki u : file thuc h thng file v
i kiu.
-gid n : ch. s nhóm c
a file là n.
-group nhóm : file thuc quyn s hu c
a nhóm.
-links n : file có n liên kt.
-mmin n : d liu c
a file ưc s!a l$n cui vào n phút trư
c ây.
-mtime n : d liu c
a file ưc s!a vào n*24 gi trư
c ây.
-name m-u : tìm kim file có tên là m4u. Trong tên file có th cha c các ký t i din như
du "*", "?"...
-type ki u : tìm các file thuc kiu v
i kiu nhn các giá tr:
b: c bit theo khi
c: c bit theo ký t
d: thư mc
p: pipe
f: file bình thưng
l: liên kt tưng trưng
s: socket
-uid n: ch. s ngưi s hu file là n.
-user tên-ngưi: file ưc s hu bi ngưi dùng tên-ngưi.
Các hành ng
-exec lnh : tùy ch(n này cho phép kt hp lnh find v
i mt lnh khác có ưc thông tin
nhiu hơn v các thư mc có cha file c$n tìm. Tùy ch(n exec phi s! dng du {} - nó s7 thay
th cho tên file tương ng, và du '\' ti cui dòng lnh, (phi có khong trng gia {} và '\').
Kt thúc lnh là du ';' 8
4
-fprint file : hin th $y
tên file vào trong file. Nu file không tn ti thì s7 ưc to ra, nu
ã tn ti thì s7 b thay th ni dung.
-print : hin th $y
tên file trên thit b ra chu-n.
-ls : hin th file hin thi theo khuôn dng: lit kê danh sách $y
#+'m c s thư mc, ch. s
c
a mi file, v
i kích thư
c file ưc tính theo khi (block).
Ví d:
# find -name 'what*'
./usr/bin/whatis
./usr/bin/whatnow
./usr/doc/AfterStep-1.8.0/TODO/1.0%&'%1.5/whatsnew
./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-devinfo/gnome-dev-info/what.html
./usr/doc/gnome-libs-devel-1.0.55/devel-docs/gnome-devinfo/gnome-dev-info/whatis.html
# find . -type f -exec grep -l -i mapping {} \ ;
./OWL/WordMap/msw-to-txt.c
./.elm/aliases.text
./Mail/mark
./News/usenet.alt
./bin/my.new.cmd: Permission denied
./src/fixit.c
./temp/attach.msg
3.5 Nén và sao lưu các file
3.5.1 Sao lưu các file (lnh tar)
D liu rt có giá tr, s7 mt nhiu thi gian và công sc nu phi to li, thm chí có
lúc c2ng không th nào to li ưc. Vì vy, Linux ưa ra các cách thc ngưi dùng bo
v d liu c
a mình.
Có bn nguyên nhân cơ bn khin d liu có th b mt: li ph$n cng, li ph$n mm,
li do con ngưi hoc do thiên tai.
Sao lưu là cách bo v d liu mt cách kinh t nht. B0ng cách sao lưu d liu, s7
không có vn gì xy ra nu d liu trên h thng b mt.
Mt vn rt quan tr(ng trong vic sao lưu ó là la ch(n phương tin sao lưu. c$n
phi quan tâm n giá c, tin cy, tc , ích li c2ng như tính kh dng c
a các phương
tin sao lưu.
Có rt nhiu các công c có th ưc s! dng sao lưu. Các công c truyn thng là
tar, cpio và dump (công c trong tài liu này là tar). Ngoài ra còn rt nhiu các công c
khác có th la ch(n tùy theo phương tin sao lưu có trong h thng.
Có hai kiu sao lưu là sao lưu theo kiu toàn b (full backup) và sao lưu theo kiu tng
d$n (incremental backup). Sao lưu toàn b thc hin vic sao m(i th trên h thng file,
bao gm tt c các file. Sao lưu tng d$n ch. sao lưu nhng file ưc thay i hoc ưc
to ra k t t sao lưu cui cùng. 8
5
Vic sao lưu toàn b có th ưc thc hin d*#dàng v
i lnh tar v
i cú pháp:
tar [tùy-chn] [<file>, ...] [<thư-mc>, ...]
Lnh (chương trình) tar ưc thit k to lp mt file lưu tr duy nht. V
i tar, có
th kt hp nhiu file thành mt file duy nht có kích thư
c l
n hơn, iu này s7 giúp cho
vic di chuyn file hoc sao lưu bng t tr nên d*#dàng hơn nhiu.
Lnh tar có các la ch(n:
-c, --create : to file lưu tr m
i.
-d, --diff, --compare : tìm ra s khác nhau gia file lưu tr và file h thng ưc lưu tr.
--delete : xóa t file lưu tr (không s! dng cho bng t).
-r, --append : %&'n thêm file vào cui file lưu tr.
-t, --list : lit kê ni dung c
a mt file lưu tr.
-u, --update : ch. thêm vào file lưu tr các file m
i hơn các file ã có.
-x, --extract, --get : tách các file ra khi file lưu tr.
-C, --directory tên-thư-mc : thay i n thư mc có tên là tên-thư-mc.
--checkpoint : ưa ra tên thư mc khi (c file lưu tr.
-f, --file [HOSTNAME:]file : tùy ch(n này xác nh tên file lưu tr hoc thit b lưu tr là file
(nu không có tùy ch(n này, mc nh nơi lưu tr là /dev/rmt0).
-h, --dereference : không hin các file liên kt mà hin các file mà chúng tr t
i.
-k, --keep-old-files : gi nguyên các file lưu tr ang tn ti mà không ghi '#file lưu tr m
lên chúng.
-K, --starting-file file : b)t $u ti file trong file lưu tr.
-l, --one-file-system : to file lưu tr trên h thng file cc b.
-M, --multi-volume : tùy ch(n này ưc s! dng khi dung lưng c
a file c$n sao lưu là l
n và
không cha ht trong mt ơn v lưu tr vt lý.
-N, --after-date DATE, --newer DATE : ch. lưu tr các file m
i hơn các file ưc lưu tr
trong ngày DATE.
--remove-files : xóa file gc sau khi ã sao lưu chúng vào trong file lưu tr.
--totals : ưa ra t ng s byte ưc to bi tùy ch(n --create.
-v, --verbose : hin th danh sách các file ã ưc x! lý.
Ví d:
# tar --create --file /dev/ftape /usr/src
tar: Removing leading / from absolute path names in the
archive
#
Lnh trên to mt file sao lưu c
a thư mc /usr/src trong thư mc /dev/ftape, (dòng
thông báo trên cho bit r0ng tar s7 chuyn c du / vào trong file sao lưu).
Nu vic sao lưu không th thc hin g(n vào trong mt bng t, lúc ó hãy s! dng tùy
ch(n -M:
# tar -cMf /dev/fd0H1440 /usr/src
tar: Removing leading / from absolute path names in the
archive 8
6
Prepare volume #2 for /dev/fd0H1440 and hit return:
#
Chú ý r0ng phi nh dng "a mm trư
c khi thc hin vic sao lưu, có th s! dng
mt thit b $u cui khác thc hin vic nh dng "a khi tar yêu c$u mt "a mm
i.
Sau khi thc hin vic sao lưu, có th kim tra kt qu c
a công vic b0ng tùy ch(n --
compare:
# tar --compare --verbose -f /dev/ftape
usr/src/
usr/src/Linux
usr/src/Linux-1.2.10-includes/
...
#
s! dng kiu sao lưu tng d$n, hãy s! dng tùy ch(n -N:
# tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src
--verbose
tar: Removing leading / from absolute path names in the
archive
usr/src/
usr/src/Linux-1.2.10-includes/
usr/src/Linux-1.2.10-includes/include/
usr/src/Linux-1.2.10-includes/include/Linux/
usr/src/Linux-1.2.10-includes/include/Linux/modules/
usr/src/Linux-1.2.10-includes/include/asm-generic/
usr/src/Linux-1.2.10-includes/include/asm-i386/
usr/src/Linux-1.2.10-includes/include/asm-mips/
usr/src/Linux-1.2.10-includes/include/asm-alpha/
usr/src/Linux-1.2.10-includes/include/asm-m68k/
usr/src/Linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
#
Lưu ý r0ng, tar không th thông báo ưc khi các thông tin trong inode c
a mt file b
thay i, ví d như thay i quyn truy nhp c
a file, hay thay i tên file ch/ng hn.
bit ưc nhng thông tin thay i s7 c$n dùng n lnh find và so sánh v
i trng thái hin
thi c
a file h thng v
i danh sách các file ưc sao lưu t trư
c.
3.5.2 Nén d liu
Vic sao lưu rt có ích nhưng ng thi nó c2ng chim rt nhiu không gian c$n thit
sao lưu. gim không gian lưu tr c$n thit, có th thc hin vic nén d liu trư
c
khi sao lưu, sau ó thc hin vic gii nén (dãn) nhn li ni dung trư
c khi nén.
Trong Linux có khá nhiu cách nén d liu, tài liu này gi
i thiu hai phương cách
ph #bin là gzip và compress. 8
7
* Nén, gii nén và xem ni dung các file vi lnh gzip, gunzip và zcat
Cú pháp các lnh này như sau:
gzip [tùy-chn] [ -S suffix ] [ < file> ]
gunzip [tùy-chn] [ -S suffix ] [ <file> ]
zcat [tùy-chn] [ <file> ]
Lnh gzip s7 làm gim kích thư
c c
a file và khi s! dng lnh này, file gc s7 b thay
th bi file nén v
i ph$n m rng là .gz, các thông tin khác liên quan n file không thay
i. Nu không có tên file nào ưc ch. ra thì thông tin t thit b vào chu-n s7 ưc nén và
g!i ra thit b ra chu-n. Trong mt vài trưng hp, lnh này s7 b qua liên kt tưng trưng.
Nu tên file nén quá dài so v
i tên file gc, gzip s7 c)t b b
t. gzip s7 ch. c)t ph$n tên
file vưt quá 3 ký t (các ph$n ưc ngn cách v
i nhau bi du chm). Nu tên file gm
nhiu ph$n nh thì ph$n dài nht s7 b c)t b. Ví d, tên file là gzip.msdos.exe, khi ưc
nén s7 có tên là gzip.msd.exe.gz.
File ưc nén có th ưc khôi phc tr li dng nguyên th v
i lnh gzip -d hoc
gunzip.
V
i lnh gzip có th gii nén mt hoc nhiu file có ph$n m rng là .gz, -gz, .z, -z,
_z hoc .Z ... gunzip dùng gii nén các file nén b0ng lnh gzip, zip, compress,
compress -H.
Lnh zcat ưc s! dng khi mun xem ni dung mt file nén trên thit b ra chu-n.
Các tùy ch(n:
-c, --stdout --to-stdout : ưa ra trên thit b ra chu-n; gi nguyên file gc không có s thay
i. Nu có nhiu hơn mt file $u vào, $u ra s7 tu$n t là các file ưc nén mt cách c lp.
-d, --decompress --uncompress : gii nén.
-f, --force : thc hin nén hoc gii nén thm chí file có nhiu liên kt hoc file tương ng thc
s ã tn ti, hay d liu nén ưc (c hoc ghi trên thit b $u cui.
-h, --help : hin th màn hình tr giúp và thoát.
-l, --list : hin th nhng thông tin sau i v
i mt file ưc nén:
compressed size: kích thư
c c
a file nén
uncompressed size: kích thư
c c
a file ưc gii nén
ratio: A,#l nén (0.0% nu không bit)
uncompressed_name: tên c
a file ưc gii nén
Nu kt hp v
i tùy ch(n --verbose, các thông tin sau s7 ưc hin th:
method: phương thc nén
crc: CRC 32-bit cho d liu ưc gii nén
date & time: thi gian các file ưc gii nén
Nu kt hp v
i tùy ch(n --name, tên file ưc gii nén, thi gian gii nén ưc lưu
tr trong file nén
Nu kt hp v
i tùy ch(n --verbose, t ng kích thư
c và A,#l nén c
a tt c các file s7
ưc hin th
Nu kt hp v
i tùy ch(n --quiet, tiêu và t ng s dòng c
a các file nén không ưc
hin th. 8
8
-n, --no-name : khi nén, tùy ch(n này s7 không lưu tr tên file gc và thi gian nén, (tên file
gc s7 luôn ưc lưu nu khi nén tên c
a nó b c)t b). Khi gii nén, tùy ch(n này s7 không
khôi phc li tên file gc c2ng như thi gian thc hin vic nén. Tùy ch(n này ưc ng$m
nh.
-N, --name : tùy ch(n này ngưc v
i tùy ch(n trên (-n), nó hu ích trên h thng có s gi
i hn
v dài tên file hay khi thi im nén b mt sau khi chuyn i file.
-q, --quiet : b qua m(i cnh báo.
-r, --recursive : nén thư mc.
-S .suf, --suffix .suf : s! dng ph$n m rng .suf thay cho .gz. Bt k5 ph$n m rng nào c2ng
có th ưc ưa ra, nhưng các ph$n m rng khác .z và .gz s7 b ngn chn tránh s ln xn
khi các file ưc chuyn n h thng khác.
-t, --test : tùy ch(n này ưc s! dng kim tra tính toàn G8n c
a file ưc nén
-v, --verbose : hin th ph$n trm thu g(n i v
i mi file ưc nén hoc gii nén
-#, --fast, --best : iu ch.nh tc c
a vic nén b0ng cách s! dng du #,
nu -# là -1 hoc --fast thì s! dng phương thc nén nhanh nht (less
compression),
nu là -9 hoc --best thì s7 dùng phương thc nén chm nht (best
compression).
Ng$m nh mc nén là -6 (ây là phương thc nén theo tc nén 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
#
* Nén, gii nén và xem file vi các lnh compress, uncompress, zcat
Cú pháp các lnh như sau:
compress [tùy-chn] [<file>] 8
9
uncompress [tùy-chn] [<file>]
zcat [tùy-chn] [<file>]
Lnh compress làm gim kích thư
c c
a file và khi s! dng lnh này, file gc s7 b
thay th bi file nén v
i ph$n m rng là .Z, các thông tin khác liên quan n file không
thay i. Nu không có tên file nào ưc ch. ra, thông tin t thit b vào chu-n s7 ưc nén
và g!i ra thit b ra chu-n. Lnh compress ch. s! dng cho các file thông thưng. Trong
mt vài trưng hp, nó s7 b qua liên kt tưng trưng. Nu mt file có nhiu liên kt cng,
compress b qua vic nén file ó tr khi có tùy ch(n -f.
Các tùy ch(n:
-f : nu tùy ch(n này không ưc ưa ra và compress chy trong ch nn trư
c, ngưi dùng
s7 ưc nh)c khi các file ã thc s tn ti và có th b ghi '. Các file ưc nén có th ưc
khôi phc li nh vic s! dng lnh uncompress.
-c : tùy ch(n này s7 thc hin vic nén hoc gii nén ri ưa ra thit b ra chu-n, không có file
nào b thay i.
Lnh zcat tương ương v
i uncompress -c. zcat thc hin vic gii nén hoc là các
file ưc lit kê trong dòng lnh hoc t thit b vào chu-n ưa ra d liu ưc gii nén
trên thit b ra chu-n.
-r : nu tùy ch(n này ưc ưa ra, compress s7 thc hin vic nén các thư mc.
-v : hin th#A,#l gim kích thư
c cho mi file ưc nén.9
0
CHƠNG 4. QU
N TR QUÁ TRÌNH
4.1 Quá trình trong UNIX
4.1.1. Sơ b v quá trình
Quá trình là i tưng trong h thng tương ng v
i mt phiên thc hin c
a mt
chương trình. Quá trình bao gm ba thành ph$n là text, data, stack. Text là thành ph$n câu
lnh thc hin, data là thành ph$n d liu còn stack là thành ph$n thông tin tm thi hot
ng theo cơ ch LIFO. Các câu lnh trong text ch. thao tác t
i vùng data, stack tương ng
c
a quá trình, không truy nhp ưc t
i data và stack c
a các quá trình khác, ngoi tr các
vùng d liu dùng chung.
Các quá trình ưc h thng phân bit b0ng s hiu c
a quá trình, vit t)t là PID
(Proccess Index). Quá trình ưc to khi khi ng h iu hành là quá trình 0. M(i quá
trình khác u ưc to ra t mt quá trình khác thông qua li g(i h thng fork: quá trình
thc hin li g(i h thng fork ưc g(i là quá trình cha, còn quá trình ưc to ra theo li
g(i fork ưc g(i là quá trình con. Tr quá trình 0 không có cha, m(i quá trình có trong h
thng u có mt cha và mt cha có th có nhiu con.
Kt qu dch chương trình ngun s7 to ra file chương trình ích gm mt s ph$n như
sau (lưu tr trên vt d4n ngoài):
Ph$n $u file mô t mt s c tính c
a file chương trình (tương t File
header c
a file chương trình trong MS-DOS),
Ph$n text c
a chương trình,
Các giá tr m $u v vic phân phi b nh
i v
i vùng data c
a chương
trình,
Mt s bng thông tin liên quan n t file.
Khi có li g(i fork, thông qua li g(i h thng exec, nhân s7 ti ni dung
c
a file chương trình vào b nh
trong theo các vùng text, data và stack:
Vùng text c
a quá trình tương ng v
i file chương trình,
Vùng data c
a quá trình tương ng v
i các giá tr ưc quy nh trong file
chương trình,
Vùng stack ưc nhân t ng to v
i kích thư
c theo s linh hot c
a
nhân.
Ph$n stach bao gm các stack frame (khung) lôgic: mi satck frame ưc t vào khi
gi mt hàm và ly ra khi quay v. Mi stack frame cha tham sô c
a hàm, các bin a
phương v.v. Tương ng trong stack có mt stack pointer liên quan n chiu sâu c
a stack.
Trong mã chương trình có các dòng lnh qun lý hình trng c
a stack, và nhân s7 nh v
không gian i v
i stack theo yêu c$u.
4.1.2. Sơ b cu trúc
iu khi n ca UNIX
Theo phân cp, h thng thc hin theo ba mc: mc ngưi dùng, mc nhân và mc
ph$n cng.
• Mc ngưi dùng (user level): gm có chương trình ngưi dùng và chương trình
trong các thư vin. Các chương trình này chy (ph$n lnh c
a chúng thc hin) 9
1
trong trng thái ngưi dùng c
a quá trình. Chương trình ngưi dùng thao tác v
nhân hoc trc tip hoc gián tip nh g(i thư vin nh các li gi h thng.
• Mc nhân là mc tr(ng tâm nht c
a h iu hành Linux-UNIX. Chy mc nhân
là nhng chương trình c
a h iu hành thuc h thng con iu khin File (h
thng con làm vic v
i File - File Subsystem), h thng con iu khin quá trình
(Proccess Control System), các li g(i h thng (system calls), các chương trình
iu khin thit b (Device Drivers), Cache b m (Buffer cache) và các chương
trình iu khin ph$n cng (Hard Control). Hai thành ph$n cơ bn nht là H thng
iu khin File và H thng con iu khin quá trình.
Hình v7 dư
i ây cho sơ b cu trúc iu khin trong UNIX:
Chương AHInh ngưi BCng
Thư vin m4u
J>ao din theo các li ?(i h#thng
H#thng con iu khin
File
H#thng con iu khin quá
AHInh (bao gm 3#A&@nh ph$n
con bên K&iB#truyn
thông liên quá AHInhB#
lp LchM&@nh ph$n iu
phi b#nh
Cache b#m
69"tKhiiu khin
thit )
IU KHIN PHN C NG
PHN C NG
Mc phn
cng
Mc ngư
i $;ng
Mc
nhân
Mc
nhân
Cu &'c a Nhân .*"các mc quá &'(nh9
2
4.1.3. Các h thng con trong nhân
H thng con iu khin File có nhim v qun lý h thng File, cung cp vùng nh
ri
"a cho File, iu khin truy cp File và tìm kim d liu v.v. a s các thut toán v các
li g(i h thng liên quan n File và các hàm chương trình con mc thp ã ưc trình
bày trong chương 2. Các quá trình tương tác v
i H thng con iu khin File nh các li
g(i h thng (các li g(i h thng File mc cao). Vic truy nhp t
i File nh hai cách thc:
truy nhp trc tip v
i File hoc thông qua buffer cache.
Các buffer cache lưu tr d liu tm thi theo tng khi. Nhân vào-ra d
liu thông qua các khi trung gian và nh thit b nh
th cp: truy nhp d liu
theo khi,
Nhân thao tác trc tip v
i khi iu khin thit b truy nhp trc tip d
liu trong File không qua thit b ph: truy nhp theo ký t.
H thng con iu khin quá trình chu trách nhim ng b hóa s tương tác liên quá
trình, qun lý b nh
và lp lch thc hin i v
i các quá trình ang tn ti. H thng con
iu khin File và H thng con iu khin quá trình tương tác v
i nhau khi file ưc ti
vào b nh
trong và cho thc hin. Mt s li g(i h thng cho khi iu khin quá trình:
fork: To quá trình m
i. Li g(i hàm này có dng pid=fork()
exec: Cho thc hin quá trình ang tn ti; exec(pid)
exit: Cho kt thúc quá trình ang tn ti,
brk: iu khin kích thư
c b nh
cp phát cho quá trình,
signal: iu khin các hin tưng bt thưng trong quá trình
H thng con iu khin quá trình bao gm 3 thành ph$n sau ây:
Thành ph$n iu phi b nh
có nhim v qun lý, iu khin cp phát b
nh
. Mt s trang b loi b khi cp phát b nh
cho quá trình.
B lp lch (schelduler) có nhim v iu phi CPU cho các quá trình. Các
quá trình có ưu tiên và b lp lch ch(n quá trình có ưu tiên cao nht.
B truyn thông liên quá trình thc hin vic ng b hóa các quá trình liên
quan nhau.
B iu khin ph$n cng (hardware control) có chc nng cho phép ng)t và tương tác
thông tin v
i máy. Các thit b như "a, thit b $u cui có th ng)t CPU khi ang thc
hin quá trình. Các chương trình x! lý ng)t là hàm riêng bit trong nhân mà không phi là
mt quá trình.
Stack trong quá trình
Mi quá trình thc hin ưc mode nhân và mode ngưi dùng vì vy phân chia hai loi
stack nhân và stack ngưi dùng.
Chúng ta xem xét ví d sau:
#include <fenth.h>
char buffer[2048];
int version;
main (argc, argv);
int argc;
char *argv[];
int fdold, fdnew; 9
3
if (argc != 3)
printf(' c$n 2 i s i v
i chương trình sao file!');
exit(1)
fdold = open (argv[1], O_RDONLY); /* m file ngun ch. (c */
if (fdold == -1)
printf (' Không th m file &cs
',argv[1]);
exit(1);
fdnew =creat (argv[2],0666); /*m File ich rw cho m(i ngưi */
if (fdnew ==-1)
printf('Không th khi to file &cs
',argv[2];
exit(1);
copy(fdold,fdnew);
exit(0);
copy (old, new)
int old, new;
int count;
while (count = read(old,buffer,sizeof(buffer))>0)
write(buffer,count);
Trong chương trình trên, mã lnh (g(i là ph$n text) c
a file ưc sinh ra t các hàm
main và copy. Khi to giá tr ban $u cho bin version và dành vùng nh
cho bin mng
buffer.
Trong ví d trên, các tham s argc, argv và các bin fdold, fdnew trong chương trình
main trong stack khi main ưc g(i (mt l$n i v
i m(i chương trình), còn các tham s
old và new và bin count trong hàm copy xut hin mi khi copy ưc g(i.
Stack ngi dùng Stack nhân
Bin cc b không có
a ch. frame 2
a ch. quay li sau khi
write
Hư7ng t1ng ca stack
Các tham s
c
a write
b m
buffer
i frame 3
Frame 3
Các bin cc
b
count call write () call
func2()
Bin cc b
a ch. c
a Frame 1 a ch. c
a Frame 1 9
4
a ch. quay v sau li g(i
copy
a ch. quay v sau li g(i
func2
Các tham s
c
a copy
old
new frame 2 Frame 2
Tham s c
a func2 nhân
Bin cc b fdold
fdnew
call copy () call
func2()
Bin cc b
a ch. c
a Frame 0 a ch. c
a Frame 0
a ch. quay v sau li g(i
main
a ch. quay v sau li g(i
func1
Tham s c
a
main
argc
argv Frame 1
Frame 1
Tham s c
a func1 nhân
call main () call func1()
Các stack cho mt quá trình
Quá trình trong UNIX ưc thc hin theo mt trong hai mode: mode nhân hay mode
ngưi dùng và tương ng v
i 2 mode này, quá trình s! dng stack riêng bit i v
i mi
mode.
Stack ngưi dùng cha các i s, bin cc b, và các d liu khác i v
i vic thc
hin hàm trong mode ngưi dùng. Stach nhân cha các i s, bin cc b, các tham s,
các a ch. liên kt v.v. liên quan n thc hin các hàm theo mode nhân.
4.1.4. Sơ b v
iu khi n quá trình
Nhân s! dng 4 cu trúc d liu sau ây truy nhp n quá trình:
• Bng các quá trình, tương ng v
i mi quá trình ang tn ti trong h thng là mt
thành ph$n. Mi thành ph$n bao gm mt s trưng sau ây (mi thành ph$n ây
chính là mt PCB):
- Trng thái c
a quá trình,
- Ch
s hu c
a quá trình,
- Trưng liên quan n trng thái ngưng c
a quá trình (theo li g(i hàm sleep)
- a ch. c
a vùng s! dng tương ng v
i quá trình,
- Các thông tin tương ng ưc trình bày trong PCB.
• Vùng s! dng (U-area) cha các thông tin riêng, có tác dng khi quá trình ang thc
hin:
- Ch. s thành ph$n tương ng v
i quá trình trong bng các quá trình: a ch. c
a
khi PCB tương ng,
- B m thi gian chy mc nhân và mc ngưi dùng,
- Các giá tr tr v và mã li (nu có) i v
i li g(i h thng hin ti,
- Mô t v các file ang m ng v
i quá trình,
- Tham s lưu tr dung lưng d liu di chuyn trong vào - ra.
- Thư mc hin ti và thư mc gc hin ti: môi trưng c
a quá trình,
- Các gi
i hn kích thư
c file và quá trình,
- Các mc cho phép thc hin i v
i quá trình,
- Mt s thông tin khác
• Các bng nh v a ch. b nh
i v
i mi quá trình, 9
5
• Bng cha vùng b nh
chung: phân hoch b nh
, c tính mi vùng theo phân hoch:
cha text, data hoc vùng b nh
dùng chung v.v.
Sơ b v mi liên kt c
a các cu trúc d liu trên ưc mô t như hình v7 phía sau.
Nhân x! lý v
i các li g(i h thng như sau:
- V
i li g(i fork: Nhân sao vùng a ch. c
a quá trình c2, cho phép các quá trình
chia x3 vùng b nh
,
- V
i li g(i exec: Nhân cp phát các vùng b nh
thc cho các vùng text, data và
stack,
- V
i li g(i exit: Nhân s7 gii phóng các vùng b nh
liên quan n quá trình.
Cá
c
cu
trú
c
d
liu
i
u
khi
quá
trìn
h
4.1.
5. Trng thái và chuy n dch trng thái
Sơ #biu di*n các trng thái và vic chuyn trng thái trong UNIX ưc trình bày
trong hình dư
i ây (S hiu trng thái quá trình xem trong hình v7).
Thc hin mc
nhân (2)
Thc hin mc
ngư
i $;ng (1)
S<n 2*ng sang mc
ngư
i $;ng (7)
4,*n thin
(9)
Ch
"i thiu &*i
nguyên (4) S<n 2*ng thc
hin (3)
Ch
"i ="b"nh7"
>8,*i (6)
Quá &'(nh
phát sinh
(8)
i b"nh7""
thc hin (5)
U-area
B#nh
#trong (các trang thc)
Nng các GCng
nh
#cho mt
quá AHInh
Nng các GCng nh
#
(Eng các trang o) 9
6
Sơ ?"chuyn trng thái quá trình
Khi quá trình ưc phát sinh nó trng thái (8), tùy thuc vào tình trng b nh
quá
trình ưc phân phi b nh
trong (3) hay b nh
ngoài (5). Trng thái (3) th hin quá
trình ã s1n sáng thc hin, các thành ph$n c
a nó ã b nh
trong ch i CPU thc
hin. Vic thc hin tip theo tùy thuc vào trng thái trư
c ó c
a nó. Nu l$n $u phát
sinh, nó c$n i t
i thc hin mc nhân hoàn thin công vic li g(i fork s7 t trng thái
(3) sang trng thái (1), trong trưng hp khác, t trng thái (3) nó i t
i trng thái ch di
CPU mc ngưi dùng (7).
Trong trng thái thc hin mc ngưi dùng (1), quá trình i t
i trng thái (2) khi gp
li g(i h thng hoc hin tưng ng)t xy ra. T trng thái (1) t
i trng thái (7) khi ht
lưng t! thi gian.
Trng thái (4) là trng thái ch i trong b nh
còn trng thái (6) th hin vic ch i
trong b nh
ngoài.
Cung chuyn t trng thái (2) vào ngay trng thái (2) xy ra khi quá trình trng thái
thc hin mc nhân, nhân h thng g(i các hàm x! lý ng)t tương ng.
4.1.6. S! ngưng hot
ng và hot
ng tr li ca quá trình
Mt quá trình trong trng thái thc hin mc nhân có kh nng chuyn sang trng thái
ngưng theo li g(i hàm sleep. Trng thái ngưng xy ra trong mt s tình hung ch i mt
s kin: hoàn thành vic vào-ra, quá trình khác thc hin li g(i exit v.v.
Sau khi s kin xy ra, quá trình t trng thái ngưng chuyn sang trng thái s1n sàng
có th ưc cp phát CPU chy.
4.1.7. Sơ b v lnh
i vi quá trình
Khi m mt trang man, lit kê các file v
i lnh ls, chy trình son tho vi hay chy bt
k5 mt lnh nào trong Linux thì iu ó có ngh"a là ang khi to mt hoc nhiu quá
trình. Trong Linux, bt c chương trình nào ang chy u ưc coi là mt quá trình. Có
th có nhiu quá trình cùng chy mt lúc. Ví d dòng lnh ls -l | sort | more s7 khi to
ba quá trình: ls, sort và more.
Quá trình có th tri qua nhiu trng thái khác nhau và ti mt thi im mt quá trình
rơi vào mt trong các trng thái ó. Bng dư
i ây gi
i thiu các trng thái cơ bn c
a quá
trình trong Linux.
Ký hiu Ý ngh)a
D
R
S
T
Z
(uninterruptible sleep) trng thái này quá trình b treo và không th
chy li nó b0ng mt tín hiu.
(runnable) trng thái s1n sàng thc hin, tc là quá trình có th thc
hin ưc nhưng ch n lưt thc hin vì mt quá trình khác ang có
CPU.
(sleeping) trng thái tm dng, tc là quá trình tm dng không hot
ng (20 giây hoc ít hơn)
(traced or stopped) trng thái dng, quá trình có th b treo bi mt
quá trình ngoài 9
7
W
<
N
L
(zombie process) quá trình ã kt thúc thc hin, nhưng nó v4n ưc
tham chiu trong h thng
không có các trang thưng trú
quá trình có mc ưu tiên cao hơn
quá trình có mc ưu tiên thp hơn
có các trang khóa bên trong b nh
4.2. Các lnh cơ bn
4.2.1. Lnh fg và lnh bg
Linux cho phép ngưi dùng s! dng t #hp phím CTRL+z dng mt quá trình và
khi ng li quá trình ó b0ng cách gõ lnh fg. Lnh fg (foreground) tham chiu n
các chương trình mà màn hình c2ng như bàn phím ang làm vic v
i chúng.
Ví d, ngưi dùng ang xem trang man c
a lnh sort, nhìn xung cui thy có tùy
ch(n -b, mun th! tùy ch(n này ng thi v4n mun xem trang man. Thay cho vic ánh
q thoát và sau ó chy li lnh man, cho phép ngưi dùng gõ CTRL+z tm dng
lnh man và gõ lnh th! tùy ch(n -b. Sau khi th! xong, hãy gõ fg tip tc xem trang
man c
a lnh sort. Kt qu c
a quá trình trên hin th như sau:
# man sort | more
SORT(1) FSF SORT(1)
NAME
sort - sort lines of text Files
SYNOPSIS
../src/sort [OPTION] ... [Files]...
DESCRIPTION
Write sorted concatenation of all FILE(s) to standard out-put.
+POS1 [-POS2]
start a key at POS1,end it *before* POS2 obsoles-cent)field numbers and character
offsets are num-bered starting with zero(contrast with the -k option)
-b ignore leading blanks in sort fields or keys
--More--
(CTRL+z)
[1]+ Stopped man sort | more
# ls -s | sort -b | head -4
1 Archives/
1 InfoWorld/
1 Mail/
1 News/
1 OWL/
# fg
man sort | more
--More-- 9
8
Trong ph$n trư
c, cách thc gõ phím CTRL+z tm dng mt quá trình ã ưc gi
thiu. Linux còn ngưi dùng cách thc chy mt chương trình dư
i ch nn
(background) - s! dng lnh bg - trong khi các chương trình khác ang chy, và chuyn
mt chương trình vào trong ch nn - dùng ký hiu &.
Nu mt quá trình hot ng mà không ưa ra thông tin nào trên màn hình và không
c$n nhn bt k5 thông tin $u vào nào, thì có th s! dng lnh bg ưa nó vào trong ch
nn ( ch này nó s7 tip tc chy cho n khi kt thúc). Khi chương trình c$n ưa
thông tin ra màn hình hoc nhn thông tin t bàn phím, h thng s7 t ng dng chương
trình và thông báo cho ngưi dùng. C2ng có th s! dng ch. s iu khin công vic (job
control) làm vic v
i chương trình nào mun. Khi chy mt chương trình trong ch
nn, chương trình ó ưc ánh s th t (ưc bao bi du ngoc vuông []), theo sau là
ch. s c
a quá trình.
Sau ó có th s! dng lnh fg + s th! t" ca chơng trình ưa chương trình
tr li ch n i và tip tc chy.
có mt chương trình (hoc mt lnh ng) t ng chy trong ch nn, ch. c$n
thêm ký hiu '&' vào cui lnh.
Trong mt s h thng, khi quá trình nn kt thúc thì h thng s7 g!i thông báo t
ngưi dùng, nhưng trên h$u ht các h thng, khi quá trình trên nn hoàn thành thì h thng
s7 ch cho n khi ngưi dùng gõ phím Enter thì m
i hin th du nh)c lnh m
i +'m theo
thông báo hoàn thành quá trình (thưng thì mt quá trình hoàn thành sau khong 20 giây).
Nu c chuyn mt chương trình vào ch nn mc dù nó có các thông tin c$n xut
hoc nhp t các thit b vào ra chu-n thì h thng s7 ưa ra thông báo li dư
i dng sau:
Stopped (tty input/output) tên chơng trình.
Ví d, lnh sau ây thc hin vic tìm kim file thu1 trong ch nn:
# find -name thu1 &
[5] 918
trong ch này, s th t c
a chương trình là [5], ch. s quá trình tương ng v
i lnh
find là 918. Vì gõ Enter khi quá trình chưa thc hin xong nên trên màn hình ch. hin th
s th t c
a chương trình và ch. s quá trình, nu ch khong 30 hoc 40 giây sau ri gõ
Enter l$n na, màn hình hin th thông báo hoàn thành chương trình như sau:
#
[5] Done find -name thu1
#
Gi s! chương trình chưa hoàn thành và mun chuyn nó lên ch n i, hãy gõ lnh
sau:
# fg 5
find -name thu1
./thu1
chương trình ã hoàn thành và hin th thông báo r0ng file thu1 n0m thư mc gc.
Thông thưng s7 ưa ra mt thông báo li nu ngưi dùng c chuyn mt chương trình
vào ch nn khi mà chương trình ó c$n phi xut hoc nhp thông tin t thit b vào ra
chu-n. Ví d, lnh:
# vi &
[6] 920 9
9
#
nhn Enter
#
[6] + Stopped (tty output) vi
#
Lnh trên chy chương trình vi trong ch nn, tuy nhiên lnh gp phi li vì ây là
chương trình òi hi hin th các thông tin ra màn hình (output). Dòng thông báo li
Stopped (tty intput) vi c2ng xy ra khi chương trình vi c$n nhn thông tin.
4.2.2. Hi n th các quá trình
ang chy vi lnh ps
Linux cung cp cho ngưi dùng hai cách thc nhn bit có nhng chương trình nào
ang chy trong h thng. Cách d*#hơn, ó là lnh jobs s7 cho bit các quá trình nào ã
dng hoc là ưc chy trong ch nn.
Cách phc tp hơn là s! dng lnh ps. Lnh này cho bit thông tin $y
nht v các
quá trình ang chy trên h thng.
Ví d:
# ps
PID TTY TIME CMD
7813 pts/0 00:00:00 bash
7908 pts/0 00:00:00 ps
#
(PID - ch. s c
a quá trình, TTY - tên thit b $u cui trên ó quá trình ưc thc hin,
TIME - thi gian chy quá trình, CMD - lnh khi to quá trình).
Cú pháp lnh ps:
ps [tùy-chn]
Lnh ps có mt lưng quá phong phú các tùy ch(n ưc chia ra làm nhiu loi. Dư
ây là mt s các tùy ch(n hay dùng. Các tùy ch(n ơn gin:
-A, -e : ch(n hin th tt c các quá trình.
-T : ch(n hin th các quá trình trên trm cui ang chy.
-a : ch(n hin th tt c các quá trình trên mt trm cui, bao gm c các quá trình c
a
nhng ngưi dùng khác.
-r : ch. hin th quá trình ang ưc chy.
Chn theo danh sách
-C : ch(n hin th các quá trình theo tên lnh.
-G : hin th các quá trình theo ch. s nhóm ngưi dùng.
-U : hin th các quá trình theo tên hoc ch. s c
a ngưi dùng thc s (ngưi dùng khi ng
quá trình).
-p : hin th các quá trình theo ch. s c
a quá trình.
-s : hin th các quá trình thuc v mt phiên làm vic.
-t : hin th các quá trình thuc mt trm cui.
-u : hin th các quá trình theo tên và ch. s c
a ngưi dùng hiu qu. 1
0
Thi
t t khuôn dng c a ra ca các quá trình
-f : hin th thông tin v quá trình v
i các trưng sau UID - ch. s ngưi dùng, PID - ch. s quá
trình, PPID - ch. s quá trình khi to ra quá trình, C - , STIME - thi gian khi to quá trình,
TTY - tên thit b $u cui trên ó quá trình ưc chy, TIME - thi gian thc hin quá
trình, CMD - lnh khi to quá trình
-l : hin th $y
các thông tin v quá trình v
i các trưng F, S, UID, PID, PPID, C, PRI, NI,
ADDR, SZ, WCHAN, TTY, TIME, CMD
-o xâu-chn : hin th các thông tin v quá trình theo dng do ngưi dùng t ch(n thông qua
xâu-ch(n các kí hiu iu khin hin th có các dng như sau:
%C, %cpu % CPU ưc s! dng cho quá trình
%mem % b nh
ưc s! dng chy quá trình
%G tên nhóm ngưi dùng
%P ch. s c
a quá trình cha khi ng ra quá trình con
%U nh danh ngưi dùng
%c lnh to ra quá trình
%p ch. s c
a quá trình
%x thi gian chy quá trình
%y thit b $u cui trên ó quá trình ưc thc hin
Ví d, mun xem các thông tin như tên ngưi dùng, tên nhóm, ch. s quá trình, ch. s
quá trình khi to ra quá trình, tên thit b $u cui, thi gian chy quá trình, lnh khi to
quá trình, hãy 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
4.2.3. Hy quá trình vi lnh kill
Trong mt s trưng hp, s! dng lnh kill h
y b mt quá trình. iu quan tr(ng
nht khi s! dng lnh kill là phi xác nh ưc ch. s c
a quá trình mà chúng ta mun
h
y. Cú pháp lnh:
kill [tùy-chn] <ch(-s-ca-tin-trình>
kill -l [tín hiu]
Lnh kill s7 g!i mt tín hiu n quá trình ưc ch. ra. Nu không ch. ra mt tín hiu
nào thì ng$m nh là tín hiu TERM s7 ưc g!i.
-s : xác nh tín hiu ưc g!i. Tín hiu có th là s hoc tên c
a tín hiu. Dư
i ây là mt s
tín hiu hay dùng:
S Tên Ý ngh)a
1 SIGHUP (hang up) ây là tín hiu ưc g!i n tt c các
quá trình ang chy trư
c khi logout khi h
thng
2 SIGINT (interrupt) ây là tín hiu ưc g!i khi nhn 1
0
CTRL+c
9 SIGKILL (kill) tín hiu này s7 dng quá trình ngay lp tc
15 SIGTERM tín hiu này yêu c$u dng quá trình ngay lp tc,
nhưng cho phép chương trình xóa các file tm.
-p : lnh kill s7 ch. ưa ra ch. s c
a quá trình mà không g!i mt tín hiu nào.
-l : hin th danh sách các tín hiu mà lnh kill có th g!i n các quá trình (các tín hiu này có
trong file /usr/include/Linux/signal.h)
Ví d,
# ps
PID TTY TIME CMD
2240 pts/2 00:00:00 bash
2276 pts/2 00:00:00 man
2277 pts/2 00:00:00 more
2280 pts/2 00:00:00 sh
2281 pts/2 00:00:00 sh
2285 pts/2 00:00:00 less
2289 pts/2 00:00:00 man
2291 pts/2 00:00:00 sh
2292 pts/2 00:00:00 gunzip
2293 pts/2 00:00:00 less
2298 pts/2 00:00:00 ps
# kill 2277
PID TTY TIME CMD
2240 pts/2 00:00:00 bash
2276 pts/2 00:00:00 man
2280 pts/2 00:00:00 sh
2281 pts/2 00:00:00 sh
2285 pts/2 00:00:00 less
2289 pts/2 00:00:00 man
2291 pts/2 00:00:00 sh
2292 pts/2 00:00:00 gunzip
2293 pts/2 00:00:00 less
2298 pts/2 00:00:00 ps
4.2.4. Cho máy ng"ng hot
ng mt thi gian vi lnh sleep
Nu mun cho máy ngh. mt thi gian mà không mun t)t vì ngi khi ng li thì c$n
dùng lnh sleep. Cú pháp:
sleep [tùy-chn] NUMBER[SUFFIX$]
NUMBER: s giây(s) ngng hot ng.
SUFFIX : có th là giây(s) hoc phút(m) hoc gi hoc ngày(d) 1
0
Các tùy ch(n:
--help : hin th tr giúp và thoát
--version : hin th thông tin v phiên bn và thoát
4.2.5. Xem cây quá trình vi lnh pstree
ã bit lnh xem các quá trình ang chy trên h thng, tuy nhiên trong Linux còn
có mt lnh cho phép có th nhìn thy mc phân cp c
a các quá trình, ó là lnh
pstree. Cú pháp lnh:
pstree [tùy-chn] [pid | ngưi-dùng]
Lnh pstree s7 hin th các quá trình ang chy dư
i dng cây quá trình. Gc c
a cây
quá trình thưng là init. Nu ưa ra tên c
a mt ngưi dùng thì cây c
a các quá trình do
ngưi dùng ó s hu s7 ưc ưa ra.
pstree thưng gp các nhánh quá trình trùng nhau vào trong du ngoc vuông, ví d:
init -+-getty
|-getty
|-getty
|-getty
thành
init ---4*[getty]
-a : ch. ra tham s dòng lnh. Nu dòng lnh c
a mt quá trình ưc tráo i ra bên ngoài, nó
ưc ưa vào trong du ngoc ơn.
-c : không th thu g(n các cây con ng nht. Mc nh, các cây con s7 ưc thu g(n khi có th
-h : hin th quá trình hin thi và "t #tiên" c
a nó v
i màu sáng tr)ng
-H : ging như tùy ch(n -h, nhưng quá trình con c
a quá trình hin thi không có màu sáng
-l : hin th dòng dài.
-n : s)p xp các quá trình cùng mt t #tiên theo ch. s quá trình thay cho s)p xp theo tên
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] 1
0
|-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
4.2.6. Lnh thit
t li
ưu tiên ca quá trình nice và lnh renice
Ngoài các lnh xem và h
y b quá trình, trong Linux còn có hai lnh liên quan n
ưu tiên c
a quá trình, ó là lnh nice và lnh renice.
chy mt chương trình v
i ưu tiên nh trư
c, hãy s! dng lnh nice.
Cú pháp lnh:
nice [tùy-chn] [lnh [tham-s ]... ]
Lnh nice s7 chy mt chương trình (lnh) theo ưu tiên ã s)p xp. Nu không có
lnh, mc ưu tiên hin ti s7 hin th. ưu tiên ưc s)p xp t -20 (mc ưu tiên cao
nht) n 19 (mc ưu tiên thp nht).
-ADJUST : tng ưu tiên theo ADJUST $u tiên
--help : hin th trang tr giúp và thoát
thay i ưu tiên c
a mt quá trình ang chy, hãy s! dng lnh renice.
Cú pháp lnh:
renice <-ưu-tiên> [tùy-chn]
Lnh renice s7 thay i mc ưu tiên c
a mt hoc nhiu quá trình ang chy.
-g : thay đổi quyền ưu tiên theo nhóm người dùng
-p : thay đổi quyền ưu tiên theo chỉ số của quá trình
-u : thay đổi quyền ưu tiên theo tên người dùng
Ví d:
# renice +1 987 -u daemon root -p 32 1
0
lnh trên s7 thay i mc ưu tiên c
a quá trình có ch. s là 987 và 32, và tt c các quá
trình do ngưi dùng daemon và root s hu.1
0
CHƠNG 5. QU
N LÝ TÀI KHO
N NGI DÙNG
Chương này cung cp mt s công c hu ích trong Linux qun lý các tài khon
ngưi dùng trên h thng.
5.1 Tài khon ngưi dùng
Như ã bit, trong h iu hành a ngưi dùng, c$n phân bit ngưi dùng khác nhau do
quyn s hu các tài nguyên trong h thng, ch/ng hn như, mi ngưi dùng có quyn hn
v
i file, quá trình c
a riêng h(. iu này v4n rt quan tr(ng thm chí c khi máy tính ch. có
mt ngưi s! dng ti mt thi im. M(i truy cp h thng Linux u thông qua tài khon
ngưi dùng. Vì th, mi ngưi s! dng ưc g)n v
i tên duy nht (ã ưc ng ký) và tên
ó ưc s! dng ng nhp. Tuy nhiên mt ngưi dùng thc s có th có nhiu tên ng
nhp khác nhau. Tài khon ngưi dùng có th hiu là tt c các file, các tài nguyên, và các
thông tin thuc v ngưi dùng ó.
Khi cài t h iu hành Linux, ng nhp root s7 ưc t ng to ra. ng nhp này
ưc xem là thuc v siêu ngưi dùng (ngưi dùng cp cao, ngưi qun tr), vì khi ng
nhp v
i tư cách ngưi dùng root, có th làm bt c iu gì mun trên h thng. Tt nht
ch. nên ng nhp root khi thc s c$n thit, và hãy ng nhp vào h thng v
i tư cách là
mt ngưi dùng bình thưng.
Ni dung chương này gi
i thiu các lnh to mt ngưi dùng m
i, thay i thuc
tính c
a mt ngưi dùng c2ng như xóa b mt ngưi dùng. Lưu ý, ch. có th thc hin
ưc các lnh trên nu có quyn c
a mt siêu ngưi dùng.
5.2 Các lnh cơ bn qun lý ngưi dùng
Ngưi dùng ưc qun lý thông qua tên ngưi dùng (thc ra là ch. s ngưi dùng).
Nhân h thng qun lý ngưi dùng theo ch. s, vì vic qun lý theo ch. s s7 d*#dàng và
nhanh thông qua mt cơ s d liu lưu tr các thông tin v ngưi dùng. Vic thêm mt
ngưi dùng m
i ch. có th thc hin ưc nu ng nhp v
i tư cách là siêu ngưi dùng.
to mt ngưi dùng m
i, c$n phi thêm thông tin v ngưi dùng ó vào trong cơ s
d liu ngưi dùng, và to mt thư mc cá nhân cho riêng ngưi dùng ó. iu này rt c$n
thit thit lp các bin môi trưng phù hp cho ngưi dùng.
Lnh chính thêm ngưi dùng trong h thng Linux là useradd (hoc adduser).
5.2.1 File /etc/passwd
Danh sách ngưi dùng c2ng như các thông tin tương ng ưc lưu tr trong file
/etc/passwd.
Ví d dư
i ây là ni dung c
a file /etc/passwd:
mail:x:8:12:mail:/var/spool/mail:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
bien:x:500:0:Nguyen Thanh Bien:/home/bien:/bin/bash
sangnm:x:17:100:Nguyen Minh Sang:/home/sangnm:/bin/bash
lan:x:501:0:Lan GNU:/home/lan:/bin/bash
Mi dòng trong file tương ng v
i by trưng thông tin c
a mt ngưi dùng, và các
trưng này ưc ngn cách nhau bi du ':'. ý ngh"a c
a các trưng thông tin ó l$n lưt
như sau: 1
0
Tên ngưi dùng (username)
Mt kh-u ngưi dùng (passwd - ưc mã hóa)
Ch. s ngưi dùng (user id)
Các ch. s nhóm ngưi dùng (group id)
Tên $y
hoc các thông tin khác v tài khon ngưi dùng (comment)
Thư mc ngưi dùng ng nhp
Shell ng nhp (chương trình chy lúc ng nhp)
Bt k5 ngưi dùng nào trên h thng u có th (c ưc ni dung file /etc/passwd,
và có th ng nhp v
i tư cách ngưi dùng khác nu h( bit ưc mt kh-u, ây chính là
lý do vì sao mt kh-u ng nhp c
a ngưi dùng không hin th trong ni dung file.
5.2.2 Thêm ngưi dùng vi lnh useradd
Siêu ngưi dùng s! dng lnh useradd to mt ngưi dùng m
i hoc cp nht
ng$m nh các thông tin v ngưi dùng.
Cú pháp lnh:
useradd [tùy-chn] <tên-ngưi-dùng>
useradd -D [tùy-chn]
Nu không có tùy ch(n -D, lnh useradd s7 to mt tài khon ngưi dùng m
i s!
dng các giá tr ưc ch. ra trên dòng lnh và các giá tr mc nh c
a h thng. Tài khon
ngưi dùng m
i s7 ưc nhp vào trong các file h thng, thư mc cá nhân s7 ưc to, hay
các file khi to ưc sao chép, iu này tùy thuc vào các tùy ch(n ưc ưa ra.
Các tùy ch(n như sau:
-c, comment : son tho trưng thông tin v ngưi dùng.
-d, home_dir : to thư mc ng nhp cho ngưi dùng.
-e, expire_date : thit t thi gian (YYYY-MM-DD) tài khon ngưi dùng s7 b h
y b.
-f, inactive_days : tùy ch(n này xác nh s ngày trư
c khi mt kh-u c
a ngưi dùng ht hiu
lc khi tài khon b h
y b. Nu =0 thì h
y b tài khon ngưi dùng ngay sau khi mt kh-u ht
hiu lc, =-1 thì ngưc li (mc nh là -1).
-g, initial_group : tùy ch(n này xác nh tên hoc s khi to ng nhp nhóm ngưi dùng.
Tên nhóm phi tn ti, và s c
a nhóm phi tham chiu n mt nhóm ã tn ti. S nhóm
ng$m nh là 1.
-G, group : danh sách các nhóm ph mà ngưi dùng c2ng là thành viên thuc các nhóm ó.
Mi nhóm s7 ưc ngn cách v
i nhóm khác bi du ',', mc nh ngưi dùng s7 thuc vào
nhóm khi to.
-m : v
i tùy ch(n này, thư mc cá nhân c
a ngưi dùng s7 ưc to nu nó chưa tn ti.
-M : không to thư mc ngưi dùng.
-n : ng$m nh khi thêm ngưi dùng, mt nhóm cùng tên v
i ngưi dùng s7 ưc to. Tùy ch(n
này s7 loi b s ng$m nh trên.//
-p, passwd : to mt kh-u ng nhp cho ngưi dùng.//
-s, shell : thit lp shell ng nhp cho ngưi dùng.
-u, uid : thit t ch. s ngưi dùng, giá tr này phi là duy nht.
Thay i các giá tr ng$m nh 1
0
Khi tùy ch(n -D ưc s! dng, lnh useradd s7 b qua các giá tr ng$m nh và cp
nht các giá tr m
i.
-b, default_home : thêm tên ngưi dùng vào cui thư mc cá nhân to tên thư mc cá nhân
i.
-e, default_expire_date : thay i thi hn ht giá tr c
a tài khon ngưi dùng.
-f, default_inactive : xác nh thi im ht hiu lc c
a mt kh-u ng nhp khi tài khon
ngưi dùng b xóa b.
-g, default_group : thay i ch. s nhóm ngưi dùng.
-s, default_shell : thay i shell ng nhp.
Ngoài lnh useradd, có th to ngưi dùng m
i b0ng cách sau:
Son tho file /etc/passwd b0ng vipw. Lnh vipw m trình son tho trên h thng
và hiu ch.nh bn sao tm c
a file /etc/passwd. Vic s! dng file tm và khóa file s7 có
tác dng như mt cơ ch khóa ngn vic hai ngưi dùng cùng son tho file mt lúc.
Lúc ó s7 thêm dòng thông tin m
i v ngưi dùng c$n to. Hãy c-n thn trong vic son
tho tránh nh$m l4n. Riêng trưng mt kh-u nên trng và to mt kh-u sau. Khi file này
ưc lưu, vipw s7 kim tra s ng nht trên file b thay i. Nu tt c m(i th dưng như
thích hp thì có ngh"a là file /etc/passwd ã ưc cp nht.
Ví d: thêm ngưi dùng có tên là new, ch. s ngưi dùng 503, ch. s nhóm là 100, thư
mc cá nhân 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á nhân ca ngưi dùng mi vi lnh mkdir
# mkdir /home/new
Sao chép các file t thư mc /etc/skel/ (ây là thư mc lưu tr các file c$n
thit cho ngưi dùng) vào file cá nhân va to
Thay i quyn s hu và các quyn truy nhp file /home/new v
i các
lnh chown và chmod
# chown new /home/new
# chmod go=u,go-w /home/new
Thit lp mt khu ca ngưi dùng vi lnh passwd
# passwd new
passwd:
Sau khi thit lp mt kh-u cho ngưi dùng bư
c cui cùng, tài khon ngưi dùng s7
làm vic. Nên thit lp mt kh-u ngưi dùng bư
c cui cùng, nu không h( có th vô tình
ng nhp trong khi ang sao chép các file. 1
0
5.2.3 Thay
i thuc tính ngưi dùng
Trong Linux có rt nhiu lnh cho phép thay i mt s các thuc tính c
a tài khon
ngưi dùng như:
chfn: thay i thông tin cá nhân c
a ngưi dùng.
chsh: thay i shell ng nhp.
passwd: thay i mt kh-u.
Mt s các thuc tính khác s7 phi thay i b0ng tay. Ví d, thay i tên ngưi dùng,
c$n son tho li trc tip trên file /etc/passwd (v
i lnh vipw).
Nhưng có mt lnh t ng quát cho phép có th thay i bt k5 thông tin nào v tài khon
ngưi dùng, ó là lnh usermod.
Cú pháp lnh:
usermod [tùy-chn] <tên-ng-nhp>
Lnh usermod s!a i các file tài khon h thng theo các thuc tính ưc xác nh
trên dòng lnh.
Các tùy ch(n c
a lnh:
-c, comment : thay i thông tin cá nhân c
a tài khon ngưi dùng.
-d, home_dir : thay i thư mc cá nhân c
a tài khon ngưi dùng.
-e, expire_date : thay i thi im ht hn c
a tài khon ngưi dùng (YYYY-MM-DD).
-f, inactive_days : thit t s ngày ht hiu lc c
a mt kh-u trư
c khi tài khon ngưi dùng
ht hn s! dng.
-g, initial_group : tùy ch(n này thay i tên hoc s khi to ng nhp nhóm ngưi dùng.
Tên nhóm phi tn ti, và s c
a nhóm phi tham chiu n mt nhóm ã tn ti. S nhóm
ng$m nh là 1.
-G, group : thay i danh sách các nhóm ph mà ngưi dùng c2ng là thành viên thuc các
nhóm ó. Mi nhóm s7 ưc ngn cách v
i nhóm khác bi du ',' mc nh ngưi dùng s7
thuc vào nhóm khi to.
-l, login_name : thay i tên ng nhp c
a ngưi dùng. Trong mt s trưng hp, tên thư mc
riêng c
a ngưi dùng có th s7 thay i tham chiu n tên ng nhp m
i.
-p, passwd : thay i mt kh-u ng nhp c
a tài khon ngưi dùng.
-s, shell : thay i shell ng nhp.
-u, uid : thay i ch. s ngưi dùng.
Lnh usermod không cho phép thay i tên c
a ngưi dùng ang ng nhp. Phi
m bo r0ng ngưi dùng ó không thc hin bt k5 quá trình nào trong khi lnh
usermod ang thc hin thay i các thuc tính c
a ngưi dùng ó.
Ví d mun thay i tên ngưi dùng new thành tên m
i là newuser, hãy gõ lnh sau:
# usermod -l new newuser
5.2.4 Xóa b mt ngưi dùng (lnh userdel)
xóa b mt ngưi dùng, trư
c ht phi xóa b m(i th có liên quan n ngưi dùng
ó.
Lnh hay ưc dùng xóa b mt tài khon ngưi dùng là lnh userdel v
i cú pháp:
userdel [-r] <tên-ngưi-dùng> 1
0
Lnh này s7 thay i ni dung c
a các file tài khon h thng b0ng cách xóa b các
thông tin v ngưi dùng ưc ưa ra trên dòng lnh. Ngưi dùng này phi thc s tn ti.
Tu5 ch(n -r có ý ngh"a:
-r : các file tn ti trong thư mc riêng c
a ngưi dùng c2ng như các file n0m trong các thư
mc khác có liên quan n ngưi dùng b xóa b cùng lúc v
i thư mc ngưi dùng.
Lnh userdel s7 không cho phép xóa b ngưi dùng khi h( ang ng nhp vào h thng. Phi h
y b
m(i quá trình có liên quan n ngưi dùng trư
c khi xoá b ngưi dùng ó.
Ngoài ra c2ng có th xóa b tài khon c
a mt ngưi dùng b0ng cách hiu ch.nh li file
/etc/passwd.
5.3 Các lnh cơ bn liên quan
n nhóm ngưi dùng
Mi ngưi dùng trong h thng Linux u thuc vào mt nhóm ngưi dùng c th. Tt
c nhng ngưi dùng trong cùng mt nhóm có th cùng truy nhp mt trình tin ích, hoc
u c$n truy cp mt thit b nào ó như máy in ch/ng hn.
Mt ngưi dùng cùng lúc có th là thành viên c
a nhiu nhóm khác nhau, tuy nhiên ti
mt thi im, ngưi dùng ch. thuc vào mt nhóm c th.
Nhóm có th thit lp các quyn truy nhp các thành viên c
a nhóm ó có th truy
cp thit b, file, h thng file hoc toàn b máy tính mà nhng ngưi dùng khác không
thuc nhóm ó không th truy cp ưc.
5.3.1 Nhóm ngưi dùng và file /etc/group
Thông tin v nhóm ngưi dùng ưc lưu trong file /etc/group, file này có cách b trí
tương t như file /etc/passwd. Ví d ni dung c
a file /etc/group có th như sau:
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
disk:x:6:root
lp:x:7:daemon,lp
mail:x:12:mail
huyen:x:500:
langnu:x:501:
Mi dòng trong file có bn trưng ưc phân cách bi du ':'. ý ngh"a c
a các trưng
theo th t xut hin như sau:
Tên nhóm ngưi dùng (groupname)
Mt kh-u nhóm ngưi dùng (passwd - ưc mã hóa), nu trưng này rng,
tc là nhóm không yêu c$u mt kh-u
Ch. s nhóm ngưi dùng (group id)
Danh sách các ngưi dùng thuc nhóm ó (users) 1
1
5.3.2 Thêm nhóm ngưi dùng
Cho phép hiu ch.nh thông tin trong file /etc/group b0ng bt k5 trình son tho vn
bn nào có trên h thng c
a thêm nhóm ngưi dùng, nhưng cách nhanh nht là s! dng
lnh groupadd.
Cú pháp lnh :
groupadd [tùy-chn] <tên-nhóm>
Các tu5 ch(n là:
-g, gid : tùy ch(n này xác nh ch. s nhóm ngưi dùng, ch. s này phi là duy nht. Ch. s
i phi có giá tr l
n hơn 500 và l
n hơn các ch. s nhóm ã có trên h thng. Giá tr t 0 n
499 ch. dùng cho các nhóm h thng.
-r : tùy ch(n này ưc dùng khi mun thêm mt tài khon h thng.
-f : tùy ch(n này s7 b qua vic nh)c nh, nu nhóm ngưi dùng ó ã tn ti, nó s7 b ghi '.
Ví d:
Thêm nhóm ngưi dùng b0ng cách son tho file /etc/group:
installer:x:102:hieu, huy, sang
tiengviet:x:103:minh, long, dung
Hai dòng trên s7 b # sung hai nhóm ngưi dùng m
i cùng danh sách các thành viên
trong nhóm: nhóm installer v
i ch. s nhóm là 102 và các thành viên là các ngưi dùng
có tên hieu, huy, sang. Tương t là nhóm tiengviet v
i ch. s nhóm là 103 và danh
sách các thành viên là minh, long, dung. ây là hai nhóm (102, 103) ngưi dùng h
thng.
Thêm nhóm ngưi dùng m
i v
i lnh groupadd:
# groupadd -r installer
Lnh trên s7 cho phép to mt nhóm ngưi dùng m
i có tên là installer, tuy nhiên
các thành viên trong nhóm s7 phi b #sung b0ng cách son tho file /etc/group.
5.3.3 S
a
i các thuc tính ca mt nhóm ngưi dùng (lnh groupmod)
Trong mt s trưng hp c$n phi thay i mt s thông tin v nhóm ngưi dùng b0ng
lnh groupmod v
i cú pháp như sau:
groupmod [tùy-chn] <tên-nhóm>
Thông tin v các nhóm xác nh qua tham s tên-nhóm ưc iu ch.nh.
Các tùy ch(n c
a lnh:
-g, gid : thay i giá tr ch. s c
a nhóm ngưi dùng.
-n, group_name : thay i tên nhóm ngưi dùng.
5.3.4 Xóa mt nhóm ngưi dùng (lnh groupdel)
Nu không mun mt nhóm nào ó tn ti na thì ch. vic xóa tên nhóm ó trong file
/etc/group. Nhưng phi lưu ý r0ng, ch. xóa ưc mt nhóm khi không có ngưi dùng nào
thuc nhóm ó na.
Ngoài ra có th s! dng lnh groupdel xóa mt nhóm ngưi dùng.
Cú pháp lnh:
groupdel <tên-nhóm> 1
1
Lnh này s7 s!a i các file tài khon h thng, xóa tt c các thc th liên quan n
nhóm. Tên nhóm phi thc s tn ti.
5.4 Các lnh cơ bn khác có liên quan
n ngưi dùng
Ngoài các lnh như thêm ngưi dùng, xóa ngưi dùng ..., còn có mt s lnh khác có
th giúp ích rt nhiu nu ang làm vic trên mt h thng a ngưi dùng.
5.4.1 $ng nhp vi tư cách mt ngưi dùng khác khi dùng lnh su
ôi lúc mun thc hin lnh như mt ngưi dùng khác và s! dng các file hay thit b
thuc quyn s hu c
a ngưi dùng ó. Lnh su cho phép thay i tên ngưi dùng mt
cách hiu qu và cp cho các quyn truy nhp c
a ngưi dùng ó.
Cú pháp lnh:
su <ngưi-dùng>
Nu ng nhp v
i tư cách ngưi dùng bình thưng và mun tr thành siêu ngưi dùng
(root) dùng lnh sau:
# su root
Khi ó h thng s7 yêu c$u nhp mt kh-u c
a siêu ngưi dùng. Nu cung cp úng
mt mã, thì s7 là ngưi dùng root cho t
i khi dùng lnh exit hoc CTRL+d ng xut
ra khi tài khon này và tr v ng nhp ban $u. Tương t, nu ng nhp v
i tư cách
root và mun tr thành ngưi dùng bình thưng có tên là newer thì hãy gõ lnh sau:
# su newer
s7 không b hi v mt kh-u khi thay i t siêu ngưi dùng sang mt ngưi dùng khác.
Tuy nhiên nu ng nhp v
i tư cách ngưi dùng bình thưng và mun chuyn i sang
mt ng nhp ngưi dùng khác thì phi cung cp mt kh-u c
a ngưi dùng ó.
5.4.2 Xác
nh ngưi dùng
ang
ng nhp (lnh who)
* Lnh who là mt lnh ơn gin, cho bit ưc hin ti có nhng ai ang ng nhp
trên h thng v
i cú pháp như sau:
who [tùy-chn]
Các tu5 ch(n là:
-H, --heading : hin th tiêu c
a các ct trong ni dung lnh.
-m : hin th tên máy và tên ngưi dùng v
i thit b vào chu-n.
-q, --count : hin th tên các ngưi dùng ng nhp và s ngưi dùng ng nhp.
Ví d:
# who
root tty1 Nov 15 03:54
lan pts/0 Nov 15 06:07
#
Lnh who hin th ba ct thông tin cho tng ngưi dùng trên h thng. Ct $u là tên
c
a ngưi dùng, ct th hai là tên thit b $u cui mà ngưi dùng ó ang s! dng, ct th
ba hin th ngày gi ngưi dùng ng nhp.
Ngoài who, có th s! dng thêm lnh users xác nh ưc nhng ngưi ng nhp
trên h thng. 1
1
Ví d:
# users
lan root
#
* Trong trưng hp ngưi dùng không nh
n i tên ng nhp trong mt phiên làm vic
(iu này nghe có v3 như hơi vô lý nhưng là tình hung ôi lúc gp phi), hãy s! dng lnh
whoami và who am i.
Cú pháp lnh:
whoami
hoc
who am i
Ví d:
# whoami
lan
#
# who am i
may9!lan pts/0 Nov 15 06:07
#
Lnh who am i s7 hin kt qu $y
hơn v
i tên máy ng nhp, tên ngưi dùng
ang ng nhp, tên thit b và ngày gi ng nhp.
* Có mt cách khác
xác
nh thông tin ngưi dùng vi lnh id
Cú pháp lnh:
id [tùy-chn] [ngưi-dùng]
Lnh này s7 ưa ra thông tin v ngưi dùng ưc xác nh trên dòng lnh hoc thông
tin v ngưi dùng hin thi.
Các tu5 ch(n là:
-g, --group : ch. hin th ch. s nhóm ngưi dùng.
-u, --user : ch. hin th ch. s c
a ngưi dùng.
--help : hin th trang tr giúp và thoát.
Ví d:
# id
uid=506(lan) gid=503(lan) groups=503(lan)
#
# id -g
503
#
# id -u
506
#
# id root 1
1
uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon),
3(sys),4(adm),6(disk),10(wheel)
#
5.4.3 Xác
nh các quá trình
ang
ư#c tin hành (lnh w)
Lnh w cho phép xác nh ưc thông tin v các quá trình ang ưc thc hin trên h
thng và nhng ngưi dùng tin hành quá trình ó.
Cú pháp lnh:
w [ngưi-dùng]
Lnh w ưa ra thông tin v ngưi dùng hin thi trên h thng và quá trình h( ang
thc hin. Nu ch. ra ngưi dùng trong lnh thì ch. hin ra các quá trình liên quan n
ngưi dùng ó.
Ví d:
# w
root tty2 - 2:14pm 13:03 9.30s 9.10s /usr/bin/mc -P
lan pts/1 192.168.2.213 3:20pm 0.00s 0.69s 0.10s w
root pts/2 :0 3:33pm 9:32 0.41s 0.29s /usr/bin/mc –P1
1
CHƠNG 6. TRUYN THÔNG VÀ MNG UNIX-LINUX
6.1. Lnh truyn thông
6.1.1. Lnh write
Lnh write ưc dùng trao i gia nhng ngưi hin ang cùng làm vic trong h
thng. Thông thưng, mt ngưi dùng mun liên h v
i ngưi dùng khác, c$n s! dng lnh
who:
$who
hin thông tin như sau:
user1 tty17 Oct 15 10:20
user2 tty43 Oct 15 8:25
user4 tty52 Oct 15 12:20
trong ó có tên ngưi dùng, s hiu terminal, ngày gi vào h thng.
Sau ó s! dng lnh write chuyn thông báo cho nhau.
$write <tên ngưi dùng> [<tên trm cui>]
c$n g!i thông báo n ngưi dùng user1 có tên user2 s7 gõ:
$write user2 tty43
• Nu ngưi dùng user2 hin không làm vic thì trên màn hình ngưi dùng user1 s7 hin
ra: "user2 is not logged in" và hin li du mi shell.
• Nu ngưi dùng user2 ang làm vic, máy ngưi dùng user2 s7 phát ra ting chuông và
trên màn hình hin ra:
Message from user1 on tty17 at <gi, phút>
Cùng lúc ó, ti máy c
a user1 màn hình tr)ng hin nhng thông tin g!i t
i ngưi
dùng user2. Ngưi g!i gõ thông báo c
a mình theo quy t)c:
- Kt thúc mt dòng b0ng cm -o,
- Kt thúc dòng cui cùng (ht thông báo) b0ng cm -oo.
kt thúc kt ni v
i ngưi dùng user2, ngưi dùng user1 gõ ctrl-d.
t chi m(i vic nhn thông báo t ngưi khác, s! dng lnh không nhn thông báo:
$mesg n (n - no)
Mt ngưi khác g!i thông báo n ngưi này s7 nhn ưc vic truy nhp không cho
phép permission denied.
tip tc cho phép ngưi khác g!i thông báo n, s! dng lnh:
$mesg y (y - yes)
6.1.2. Lnh mail
Lnh mail cho phép g!i thư in t! gia các ngưi dùng, song hot ng theo ch
off-line (gián tip). Khi dùng lnh write truyn thông cho nhau thì òi hi hai ngưi g!i
và nhn ng thi ang làm vic và cùng chp nhn cuc trao i ó. Cách thc s! dng
mail là khác h/n: mt trong hai ngưi g!i hoc nhn có th không ng nhp vào h thng.
m bào cách thc truyn thông gián tip (còn g(i là off-line) như vy, h thng to ra
cho mi ngưi dùng mt hp thư riêng. Khi mt ngưi dùng lnh mail g!i thư n mt
ngưi khác thì thư ưc t ng cho vào hp thư c
a ngưi nhn và ngưi nhn sau ó
c2ng dùng lnh mail xem trong hp thư có thư m
i hay không. Không nhng th mail
còn cho phép s! dng trên mng internet (a ch. mail thưng dư
i dng tênlogin@máy.mng.l#nh-vc.quc-gia). 1
1
- Lnh mail ch. yêu c$u ngưi g!i (hoc ngưi nhn) login trong h thng. Vic nhn và
g!i thư ưc tin hành t mt ngưi dùng. Thư g!i i cho ngưi dùng khác, ưc lưu
ti hp thư c
a h thng.
- Ti thi im login h thng, ngưi dùng có th thy ưc có thư m
i khi trên màn
hình xut hin dòng thông báo "you have mail".
Lnh mail trong UNIX gm 2 chc nng: g!i thư và qun lý thư. Tương ng, có hai ch
làm vic v
i lnh mail: mode lnh (command mode) qun tr thư và mode son
(compose mode) cho phép to thư.
a/ Mode son
Mode son làm vic trc tip v
i mt thư và g!i ngay cho ngưi khác. Mode son thc
cht là s! dng lnh mail có tham s:
$mail tên_ngưi_nhn> Ví d, $mail user2
Lnh này cho phép son và g!i thư cho ngưi nhn có tên ưc ch..
Sau khi gõ lnh, màn hình b xóa và con tr son tho nhp nháy góc trên, trái
ngưi dùng gõ ni dung thư.
kt thúc son thư, hãy gõ ctrl-d, màn hình c
a mail bin mt và du mi c
a shell li
xut hin.
Chú ý: Dng sau ây ưc dùng g!i thư ã son trong ni dung mt file nào ó (chú
ý du "<" ch. d4n thit b vào chu-n là ni dung file thay vì cho bàn phím):
$mail tên_ngưi_nhn < tên_file_ni_dung_thư
Ví d, $ mail user2 < thu1
Ni dung thư t File thu1 ưc g!i cho ngưi nhn user2, du mi c
a shell li hin ra.
Cách làm trên ây hay ưc s! dng trong g!i / nhn thư in t! hoc liên kt truyn
thông vì cho phép tit kim ưc thi gian kt ni vào h thng, c bit chi phí phi tr
khi kt ni là áng k.
b/ Mode lnh
Như ã nói s! dng mode lnh c
a mail qun lý hp thư. Vào mail theo mode lnh
khi dùng lnh mail không tham s:
Sau khi gõ lnh, màn hình mail mode lnh ưc hin ra v
i du mi c
a mode lnh.
(ph #bin là du chm hi "?") Ti ây ngưi dùng s! dng các lnh c
a mail qun lý h
thng thư c
a mình.
C$n tr giúp gõ du chm hi (màn hình có hai du ??): ? màn hình hin ra dng sau:
<s> Hin thư s <s>
(du cách) Hin thư ngay phía trư
c
+ Hin thư ngay tip theo
l cmd thc hin lnh cmd
dq xóa thư hin thi và ra khi mail
m user g!i thư hin thi cho ngưi dùng
s tên-file ghi thư hin thi vào file có tên
r [tên-file] tr li thư hin thi (có th t file)
d <s> xóa thư s
u khôi phc thư hin thi
u <s> khôi phc thư s
m <user> ... chuyn tip thư t
i các ngưi dùng khác
q ra khi mail 1
1
Thc hin các lnh theo ch. d4n trên ây qun tr ưc hp thư c
a cá nhân.
6.1.3. Lnh talk
Trong Linux cho phép s! dng lnh talk thay th cho lnh write.
6.2 Cu hình Card giao tip mng
các máy có th giao tip ưc v
i nhau trong mng theo giao thc TCP/IP, thit b
dùng làm phương tin giao tip ó là Card giao tip mng (network card). qun lý thit
b này Linux cung cp lnh ifconfig. Lnh này dùng xem các thông tin v cu hình mng
hin thi c
a máy c2ng như gán các a ch. cho các card giao tip mng (interface). Ngoài
ra ta c2ng có th dùng lnh này kích hot hoc t)t mt card mng.
/sbin/ifconfig <giao din> [ <
a ch(> ] [ arp | -arp][
broadcast <
a ch(>][netmask <mt n mng> ]
trong ó:
<giao din>
tên c
a thit b giao tip mng, ch/ng hn eth0 cho card mng $u tiên, eth1 cho card mng
th hai.
<
a ch(>
a ch. mng s7 gán cho giao din này.
up
tu5 ch(n này s7 kích hot giao din ưc ch. ra.
down
tu5 ch(n này s7 t)t giao din ưc ch. ra.
arp | -arp
cho phép hay cm giao thc ARP trên giao din này.
broadcast <
a ch(>
xác nh a ch. qung bá cho giao din này.
netmask <mt n mng>
xác nh mt n mng cho giao din này.
xem cu hình c
a máy hin ti ta dùng lnh
# ifconfig
Và ví d v kt qu thu ưc là:
eth0 Link encap:Ethernet HWaddr 00:02:55:07:63:07
inet addr:203.113.130.201 Bcast:203.113.130.223 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
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) TX bytes:1265930467 (1207.2 Mb)
Interrupt:29 1
1
eth1 Link encap:Ethernet HWaddr 00:05:1C:98:05:B1
inet addr:10.10.0.10 Bcast:10.10.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
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) TX bytes:1471928637 (1403.7 Mb)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:45868 errors:0 dropped:0 overruns:0 frame:0
TX packets:45868 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5338927 (5.0 Mb) TX bytes:5338927 (5.0 Mb)
Trong trưng hp này ta thy máy hin ti có 2 card mng và ưc gán các a ch.
tương ng như trên.
Mun ch. xem các thông tin v mt card mng nào ó thôi ta dùng lnh:
# ifconfig eth0
Mun kích hot mt card mng ta dùng lnh
# ifconfig eth0 up
Mun t)t mt card mng ta dùng lnh
# ifconfig eth0 down
Mun t li a ch. cho mt card mng ta dùng lnh:
# ifconfig eth0 203.162.9.154 netmask 255.255.255.248
Ngoài ra nu máy tính có cài giao din GNOME cùng các package qun lý mng c
a
GNOME thì ta có th s! dng lnh có giao din #ho giúp cho vic cu hình các tham s
card mng d*#dàng hơn. có công c này ta phi cài t package redhat-config-networkxxx.rpm trong ó xxx là s hiu phiên bn c
a chương trình.
Trong giao din #ho GNOME ta ánh lnh redhat-config-network, mt hp thoi s7
hin lên cho phép ta thay i các tham s cho tng card mng ưc cài trên máy.
6.3. Các dch v mng
6.3.1 H thông tin mng NIS
Khi s! dng h thng mng nói chung, mc ích c
a chúng ta là làm cho môi trưng
mng tr nên trong sut i v
i ngưi dùng. Mt trong nhng im quan tr(ng là làm cho
các d liu quan tr(ng như là thông tin v ngưi dùng, v các trm trong mng là ng nht
trên tt c các trm làm vic. NIS (Network Information System) là mt ng dng cung cp
các tin ích truy nhp cơ s d liu phân phi thông tin, ch/ng hn như d liu trong
/etc/passwd và /etc/group cho tt c các máy trm trên mng. iu này làm cho mng tr
nên mt h thng duy nht. NIS ưc xây dng trên vic s! dng dch v RPC (Remote
Procedure Call). Nó bao gm mt thư vin máy ch
, thư vin máy trm và các công c
qun tr. Ban $u NIS ưc g(i là nhng trang vàng (Yellow Pages –YP). Cùng v
i s phát 1
1
trin c
a NIS mà có s xut hin khác nhau trong các phiên bn. NIS truyn thng ưc
xây dng trên thư vin libc 4/5. NIS+ là s m rng c
a NIS song v4n h tr bo mt thông
tin. NYS là mt phiên bn chu-n h tr c NIS và NIS+.
Hot
ng ca NIS
NIS lưu tr cơ s d liu v thông tin qun tr mng trong các file maps. Các file này
ưc t trên mt NIS server trung tâm, t ó các NIS client có th truy nhp n các thông
tin thông qua dch v RPC. Các file maps thưng là các file theo nh dng DMB, mt
dng cơ s d liu ơn gin. Các file maps ưc to ra t các file vn bn như /etc/hosts
hay /etc/passwd. Mi file vn bn này có th có nhiu file maps khác nhau tùy thuc vào
khóa c
a nó. Ví d nu khóa là tên máy trm thì ta có file hosts.byname, nu khóa là a ch.
IP thì ta có file hosts.byname.
File chFile maps tương 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 tên ng)n hơn 7 nh
i v
i ngưi dùng g(i là các
nickname. hin th danh sách các nickname ta dùng lnh ypcat:
#ypcat -x
Use "ethers" for map "ethers.byname"
Use "aliases" for map "mail.aliases"
Use "services" for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts" for map "hosts.byname"
Use "networks" for map "networks.byaddr"
....
Các chương trình máy ch
c
a NIS thưng có tên là ypserv. Trong các mng c6#nh ta
ch. c$n mt máy làm máy ch
NIS. Mt min (domain) NIS là mt tp hp các máy trm
ưc qun lý bi mt máy ch
NIS. hin th và t tên cho mt min ta s! dng lnh
#domainname nis-domain
Tên min NIS s7 cho bit máy ch
c
a min nào các ng dng s7 truy cp nhn
thông tin c$n thit. bit ưc máy ch
nào trong mng là NIS server, các chương trình
ng dng phi hi ypbind, mt chương trình chy ng$m có nhim v phát hin các NIS
server trên mng. Nó s7 phát các gói tin qung bá tìm các máy ch
NIS trên mng hoc
s! dng các thông tin trong các file cu hình ngưi qun tr ã cung cp. 1
1
Cài
t và cu hình cho máy chNIS
V
i NIS ta có khái nim máy ch
NIS chính và máy ch
NIS ph, mt min ch. có th
có mt máy ch
NIS chính. Khi trong mng có nhiu máy trm làm vic, mt máy ch
NIS
có th b quá ti, hoc khi có s c thì toàn b h thng mng ó s7 không th hot ng
ưc. Các máy ch
NIS ph s7 giúp gii quyt vn này. Vic cài t các máy ch
NIS
ph ch. khác máy ch
NIS chính ch to ra các file map. Chúng không ưc to ra b0ng
makedbm mà ưc ly v t máy ch
chính.
Bây gi ta tìm hiu cách cài t máy ch
NIS chính. Trư
c tiên ta phi cài t ph$n
mm ypserv lên máy tính. Chương trình s7 n0m trong package ypserv-xxx.rpm. Ta có th
cài t b0ng lnh:
#rpm -ivh ypserv-xxx.rpm
#mkdir /var/yp/nis-domain
to các file cơ s d liu ta s! dng chương trình makedbm. Do ó phi m bo
chương trình ã ưc cài trên máy, vic to lp s7 ưc tin hành thông qua mt makefile.
Trong file này s7 cha các lnh c$n thit to ra file maps. Sau khi cài t ph$n mm ta
dùng lnh make:
#domainname nis-domain
#cd /var/yp
#make
Các file map không t ng cp nht mi khi ta s!a thông tin qun tr. Do vy mi khi
có s thay i, ta c$n thc hin li lnh make cp nht s s!a i.
Cài
t các máy trm NIS
Trư
c tiên ta c$n cài t ph$n mm ypbind lên máy trm b0ng lnh:
#rpm -ivh ypbind-xxx.rpm
Bư
c tip theo là ch. ra tên c
a máy ch
và tên min NIS mà trm này s7 s! dng b0ng
cách thay i thông tin trong file /etc/yp.conf như sau:
#/etc/yp.conf
domainname nis-domain
server lnserver
Dòng $u tiên cho bit máy trm này thuc vào min NIS có tên là nis-domain. Nu
không có dòng lnh này thì ta có th ch. ra b0ng cách ánh lnh domainname ti du nh)c
dòng lnh. Dòng th 2 ch. ra tên máy ch
NIS. a ch. IP c
a tên máy ch
này phi xut
hin trong file /etc/hosts. Hoc ta có th s! dng a ch. IP ngay trên dòng này.
Khi ta s! dng máy tính thưng xuyên phi thay i min NIS, ta có th ch. ra nhiu
min NIS và các máy ch
tương ng v
i nó b0ng lnh server. File cu hình dư
i ây cho
phép thc hin iu ó:
#yp.conf
server ln-server1 domainname1
server ln-server2 domainname2
Khi mun s! dng mt min khác thì ta ch. c$n ánh li lnh domainname xác nh
min ta tương ng. 1
2
Sau khi ã to ra các file cu hình cơ bn, ta nên kim tra xem chương trình ypbind ã
hot ng hay chưa. Trư
c ht, khi ng ypbind, sau ó dùng tin ích ypcat ly thông
tin qun lý bi NIS server. xem thông tin v a ch. IP c
a các trm ta dùng lnh:
#ypbind
#ypcat hosts.byname
192.168.50.1 may1
192.168.50.1 may2
....
Nu ta không nhn ưc kt qu như trên hoc ta nhn ưc mt thông báo li “can’t
bind to servers domain”, có ngh"a là h thng NIS hot ng chưa tt, ta có th kim tra
xem tên min và tên máy ch
trong file yp.conf ã chính xác chưa và sau ó ping máy ch
.
Nu máy ch
ã hot ng ta kim tra xem s hot ng c
a ypserv b0ng lnh rpcinfo:
#rpcinfo –u serverhost ypserv
program 10004 version 2 ready and waiting
Nu ta nhn ưc thông báo như trên là ypserv ang hot ng tt.
L!a chn các file map
Khi s! dng NIS ta c$n xác nh nhng file cu hình nào c
a các máy trm s7 ưc
thay th bi NIS. Thông thưng NIS ưc s! dng tra cu các thông tin v máy trm và
tài khon ngưi dùng. Mc dù ta ã s! dng NIS như là mt h qun tr tp trung, h thng
này v4n cho phép các máy trm làm vic ưc quyn t do la ch(n s! dng các file cu
hình cc b hoc s! dng t NIS server. Th t ưc ch. ra trong file /etc/nsswitch.conf.
Ví d sau cho bit th t s! dng dch v c
a các hàm gethostbyname(),
gethostbyaddr() và getservbyname(). Các dch v ưc lit kê trư
c s7 ưc s! dng, nu
không thành công thì s! dng dch v sau ó.
#nsswitch.conf
hosts: nis dns files
services files nis
Dư
i ây là danh sách các dch v có th s! dng trong file /etc/nsswitch.conf. Các file,
chương trình c th ưc s! dng s7 ph thuc vào tng loi dch v:
nisplus hay nis+: s! dng NIS+ server cho min NIS hin thi. Tên c
a server ưc ch.
ra trong file /etc/nis.conf.
nis: s! dng NIS server cho domain hin thi. Tên c
a server ưc ch. ra trong file
/etc/yp.conf. V
i thành ph$n hosts, các file map là hosts.byname và hosts.byaddr s7 ưc s!
dng.
dns: s! dng DNS server, dch v này ưc s! dng cho mình thành ph$n hosts. Tên
c
a máy ch
ưc t trong file /etc/resolv.conf.
files: s! dng các file cu hình cc b, ví d: /etc/passwd cho thành ph$n passwd.
dbm: tìm thông tin trong các file cơ s d liu /var/dbm. Tên c
a các file là tên c
a các
file map tương ng c
a dch v NIS.
Các thành ph$n ưc h tr hin thi c
a NYS là: hosts, networks, passwd, group,
shadow, services, protocols, rpc, và mt s file khác.
Nu có t khóa [NOTFOUND=return] trong các thành ph$n c
a file nsswitch.conf, NIS
s7 thoát ra ngay mà không s! dng tip các dch v sau trong trưng hp nó không tìm thy
thông tin dch v trư
c ó. Ch. khi nào dch v trư
c b li, NIS m
i dùng tip dch v1
2
sau. Trong ví d dư
i NIS ch. s! dng các file cc b khi khi ng hoc DNS, NIS server
b hng.
#/ect/nsswitch.conf
hosts: nis dns [NOTFOUND=return] files
network: nis [NOTFOUND=return] files
services: file nis
protocol: files nis
rpc: files nis
S
dng các file map passwd và group
Mt trong nhng ng dng chính c
a NIS là ng b thông tin v các tài khon c
a
ngưi s3 dng trên tt c các máy trm trong min NIS. Khi ó thông tin v ngưi dùng
trên trm ưc lit kê mt ph$n nh trong /etc/passwd, ph$n còn li ưc lưu trong file map
passwd.byname. Vic ch(n nis trong file /etc/nsswitch.conf chưa
NIS có th hot
ng.
Khi s! dng tài khon c
a ngưi dùng ưc cung cp bi NIS, trư
c tiên phi m bo
s hiu c
a ngưi dùng trong file passwd phi trùng v
i s hiu c
a ngưi dùng ó trên
NIS. Nu s hiu ngưi dùng, s hiu nhóm c
a ngưi dùng ó khác v
i thông tin trong
min NIS, ta c$n s!a li cho trùng nhau.
Trư
c tiên ta thay i s hiu ngưi dùng (uid) và s hiu nhóm (gid) trong ó file
/etc/passwd và /etc/group trên trm cc b sang các giá tr m
i c
a NIS. Sau ó i quyn
s hu c
a tt c các file b0ng cách thay i s hiu uid và gid c2 sang uid và gid m
i. Gi
s! ngưi dùng anhnv có s hiu uid là 501, thuc nhóm sinhvien có gid là 423, ta s!a i
quyn s hu như sau:
#find / -uid 501 – print > /tmp/uid/uid.501
#find / -gid 501 – print > /tmp/uid/gid.501
#cat /tmp/uid.501 | xargs chown anhnv
#cat /tmp/gid.501 | xargs chgrp sinhvien
Sau khi thc hin các công vic trên s hiu uid và gid c
a mt ngưi dùng trên máy
trm s7 ng nht v
i NIS. Bư
c tip theo là s!a i file /etc/nsswitch.conf như sau:
#/etc/nsswitch.conf
passwd: nis files
group: nis files
File trên quy nh lnh login và các lnh thuc h( này s7 truy vn NIS server khi mt
ngưi dùng mun truy nhp, nu không tìm thy nó s7 tìm tip n các file cc b. Thông
thưng ta loi b h$u ht ngưi dùng khi các file cc b, ch. gi li root hoc các tài
khon chung như mail, news,… cho mt s tác v c$n chuyn i s hiu uid sang tên và
ngưc li. Ví d trong chương trình qun lý công vic cron s! dng lnh su tm tr
thành news. Nu news không có trong /etc/passwd, chương trình trên s7 không thc hin
ưc.
Khi ngưi dùng mun thay i mt kh-u, h( không th dùng lnh passwd như khi chưa
có NIS. Lnh passwd ch. có tác dng s!a i các file cu hình cc b. NIS cung cp mt
công c là yppasswd, nó không nhng cho phép s!a i mt kh-u ngưi dùng trên NIS mà
còn thay i các thuc tính khác như shell… Chương trình này ưc thc hin khi khi
ng h thng b0ng cách chy thêm dch v rpc.yppasswd. Vì thói quen ngưi dùng có th1
2
gõ lnh passwd khi mun thay i mt kh-u. Gii pháp ây là thay i passwd b0ng mt
liên kt n yppasswd.
#cd /bin
#mv passwd passwd.old
#ln yppasswd passwd
6.4 H thng file trên mng
Linux có dch v chia s3 file trên mng máy tính. Khi ta mun có kh nng các máy
Linux có th chia s3 tài nguyên là các file v
i nhau, dch v NFS s7 cung cp kh nng này.
Dch v này cho phép chia s3 file cho các ngưi dùng trên mng LAN, các file này có kh
nng xut hin i v
i các ngưi dùng như là các file trên máy c
a mình.
6.4.1 Cài
t NFS
cài t dch v này ta c$n chu-n b mt package là nfs-utils-xxx.rpm trong ó xxx là
s hiu phiên bn. ng nhp v
i quyn root và s! dng lnh:
# rpm –ivh nfs-utils-xxx.rpm
Nu không có li thông báo li thì vic cài t ã thành công.
NFS s! dng th
tc RPC (Remote Procedure Calls) g!i và nhn yêu c$u gia các
máy ch
và máy trm trên mng, do vy dch v ánh x c ng portmap (dch v qun lý các
yêu c$u RPC) phi ưc khi ng trư
c. Trên máy ch
NFS d nh s7 chia s3 các file d
liu phi khi ng hai dch v nfs và portmap b0ng lnh:
# service nfs start
# service portmap start
NFS hot ng thì ta c$n phi khi ng các dch v sau:
Portmapper: tin trình này không làm vic trc tip v
i NFS mà tham gia qun lý các
yêu c$u RPC t máy trm g!i n.
Mountd: tin trình này s7 ánh x các file trên máy ch
i các thư mc trên máy trm
yêu c$u. Nó s7#&O,#b ánh x này nu có lnh umount t máy trm.
Nfs: là tin trình chính thc hin các nhim v c
a giao thc NFS. Nó có nhim v
cung cp cho các máy trm các thư mc hoc file ưc yêu c$u.
Ta có th kim tra các thông tin v các dch v NFS b0ng lnh:
#rpcinfo -p
Ta s7 thu ưc kt qu:
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
…
100005 3 udp 1024 mountd
100005 3 tcp 1024 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
... 1
2
6.4.2 Khi
ng và d"ng NFS
Vic khi ng dch v NFS c2ng khá ơn gin và ã ưc gi
i thiu trên b0ng cách
khi ng portmap và nfs.
# service nfs start
hoc
#/etc/init.d/nfs start
Vic dng (t)t) dch v này c2ng khá ơn gin, ta dùng lnh sau:
#service nfs stop
hoc
#/etc/init.d/nfs stop
Ta có th t cho dch v này ưc t ng khi ng khi ta khi ng máy tính b0ng
cách dùng lnh:
#setup
Hình t các ng dng t khi ng khi Linux khi ng
Sau ó ch(n “System services”, tip ó ta s7 nhn ưc mt danh sách các dch v hin
ang có trong h thng. Mun cho dch v nào ưc t ng khi ng ta ch. c$n ch(n
dch v ó, ây ta ch(n dch v có tên nfs. Ch(n OK và cui cùng ch(n Quit.
6.4.3 Cu hình NFS server và Client
Cu hình nfs ta ch. c$n s!a file /etc/exports, ây là file cha danh sách các thư mc
ưc chia s3 cho các máy khác. Nó c2ng ng thi cha danh sách các máy trm có quyn
ưc truy cp và quyn truy cp c
a các máy trm này. Mt chú ý v nh dng c
a file này
như sau: các dòng trng s7 ưc b qua, các dòng b)t $u b0ng du # ưc coi là các dòng 1
2
chú thích và s7 ưc b qua. Các dòng dài quá ta có th ng)t trên nhiu dòng b0ng cách s!
dng du ng)t dòng (\).
Cu trúc c
a mi dòng khai báo trong file này như sau:
Tên thư mc Danh sách a ch.
các máy trm,
quyn truy nhp c
a
các máy trm ó
Danh sách a ch.
các máy trm,
quyn truy nhp
c
a các máy trm
ó
/software/project 192.168.0.172(rw) 192.168.0.127(ro)
/software/setup 192.168.0.0/28(ro)
Trong ó, các tham s có ý ngh"a như sau: tên thư mc là ưng d4n n thư mc ta
mun chia s3 cho các máy khác. Danh sách a ch. các máy trm, có th là a ch. IP hoc
tên máy (ưc lit kê trong file /etc/hosts). Trong trưng hp mun lit kê danh sách các
máy có a ch. g$n k nhau trong mt khong nào ó ta có th có cách vit rút g(n như sau:
ch/ng hn ta mun lit kê các a ch. c
a máy trm trong khong t 192.168.0.0 n các
máy trm có a ch. 192.168.0.15 ta ch. c$n vit 192.168.0.0/28. Quyn truy nhp ưc vit
dư
i dng (rw) ch. quyn (c và ghi, còn (ro) thì các máy trm ch. có quyn (c trên thư
mc ó, (noaccess) cm các máy trm truy nhp vào các thư mc con c
a thư mc chia s3.
Chú ý, gia a ch. c
a máy và quyn truy nhp không có du cách.
6.4.4 S
dng mount
(c d liu trên các thư mc ã ưc chia s3 này ta có th dùng cách sau: ta
s7 dùng lnh mount, nhưng trong trưng hp này ta phi c$n quyn qun tr (root).
Cú pháp c
a lnh s7 như sau:
#mount <tên_máy_ch:/tên_thư_mc_chia_s)>
</tên_thư_mc_cn_ánh_x>
Lưu ý, trư
c khi ra lnh này ta phi to ra thư mc c$n ánh x (trong trưng hp
nó chưa tn ti).
Ví d, ánh x thư mc /software/project trên mt máy ch
192.168.0.33 vào
thư mc /mnt/project trên máy hin ti ta dùng lnh sau:
#mount 192.168.0.33:/software/project /mnt/project
Bây gi thư mc /mnt/project trên máy hin ti s7 bình /ng như các thư mc
khác trên máy. Ta có th sao chép, (c các file trên thư mc này.
6.4.5 Unmount
Sau khi thc hin xong các thao tác c$n thit, ta có th h
y b ánh x này b0ng
lnh umount như sau:
#umount /mnt/project
Sau lnh này thì ta không còn có kh nng thao tác v
i thư mc trên máy ch
ưc na, nu mun ta li phi ánh x li. 1
2
Ngoài ra mun xem trng thái hot ng c
a dch v nfs ta có th dùng lnh:
#/etc/init.d/nfs status
Nó s7 hin th thông tin v trng thái hin ti c
a dch v này ang chy hay ã
dng li.
rpc.mountd (pid 936) is running...
nfsd (pid 948 947 946 945 944 943 942 941) is running...
rpc.rquotad (pid 931) is running...
6.4.6 Mount t!
ng qua tp cu hình
Bây gi nu ta mun h thng s7 t ng ánh x thư mc này khi máy khi ng cho
nhng ngưi dùng không có quyn qun tr có th dùng ưc thì ta có th s! dng cách s!a
i ni dung c
a file /etc/fstab.
C2ng tương t như lnh mount trên, trong file /etc/fstab c2ng có các trưng ging như
ã nói trên. Mi mt dòng trong file này s7 có cu trúc như sau:
<tên_máy_ch:/ưng_d!n_n_thư_mc_chia_s)>
</ưng_d!n_n_thư_mc_cc_b> nfs
tham s nfs ch. cho h iu hành bit kiu file là nfs. Ví d ta có th thêm dòng
192.168.0.33:/software/project /mnt/project nfs
vào cui file /etc/fstab. 1
2
CHƠNG 7. L
P TRÌNH SHELL VÀ L
P TRÌNH C TRÊN LINUX
7.1. Cách thc pipes và các yu t cơ bn lp trình trên shell
7.1.1. Cách thc pipes
Trong Linux có mt s loi shell, shell ng$m nh là bash. Shell cho phép ngưi dùng
chy tng lnh shell (thc hin trc tip) hoc dãy lnh shell (file script) và c bit hơn là
theo dng thông qua ng d4n (pipe).
• Trong mt dòng lnh c
a shell có th thc hin mt danh sách các lnh tu$n t nhau
dng:
<lnh> [; <lnh>]...
Như vy danh sách lnh là dãy các lnh liên tip nhau, cái sau cách cái trư
c bi du
chm phy ";"
Ví d, $ cal 10 1999; cal 11 1999 ; cal 12 1999
Shell cho ngưi dùng cách thc c bit thc hin các lnh tu$n t nhau, cái ra c
a lnh
trư
c là cái vào c
a lnh sau và không phi thông qua nơi lưu tr trung gian.
• S! dng ng d4n là cách thc c bit trong UNIX và Linux, ưc th hin là mt cách
thc c
a shell truyn thông liên quá trình. ống d4n ưc t #chc theo kiu cu trúc
d liu dòng xp hàng "vào trư
c ra trư
c" FIFO "First In First Out". Trong cu trúc
dòng xp hàng, mt $u c
a dòng nhn ph$n t! vào và còn $u kia li xut ph$n t! ra.
Trong ng cnh c
a shell, v
i hai quá trình A và B ưc kt ni mt ng d4n ưc th
hin như sau:
Như vy $u ra c
a A thông thưng hoc là thit b ra chu-n (màn hình) hoc là mt
File (là mt tham s c
a lnh) ưc thay b0ng "$u nhp c
a ng d4n". Tương t, $u vào
c
a B thông thưng hoc là thit b vào chu-n (bàn phím) hoc là mt File (là mt tham s
c
a lnh) ưc thay b0ng "$u xut c
a ng d4n". Dòng byte l$n lưt "chy" t quá trình A
sang quá trình B.
Mô t cách thc s! dng ưng ng trong shell như sau:
<lnh ph c h*p> là hoc <lnh> hoc (<lnh>[;<lnh>]...)
Vy ưng ng có dng
<lnh ph c h*p> | <lnh ph c h*p>
Lnh phc hp phía sau có th không có i s. Trong trưng hp ó, thông tin kt qu
t lnh phía trư
c tr thành thông tin input c
a lnh ngay phía sau mà không chu tác ng
theo cách thông thưng c
a lnh trư
c na.
Ví d, $ cal 1999 | more
Ni dung lch nm 1999 (lnh cal óng vai trò quá trình A) không ưc in ngay ra màn
hình như thông thưng theo tác ng c
a lnh cal na mà ưc lưu lên mt "file" tm thi
kiu "ng d4n" c
a h thng và sau ó tr thành i s c
a lnh more (lnh more óng vai
trò quá trình B).
Trong chương trình, có th dùng ng d4n làm file vào chu-n cho các lnh (c tip theo.
Ví d,
ls -L | \
Quá AHInh A Quá AHInh B 1
2
thì ký hiu "\" ch. ra r0ng ng d4n ưc dùng như file vào chu-n.
7.1.2. Các yu t cơ bn
lp trình trong shell
Shell có công c cho phép có th lp trình trên shell làm tng thêm thân thin khi
giao tip v
i ngưi dùng. Các i tưng tham gia công c như th có th ưc lit kê:
- Các bin (trong ó chú ý t
i các bin chu-n),
- Các hàm vào - ra
- Các phép toán s h(c,
- Biu thc iu kin,
- Cu trúc r7 nhánh,
- Cu trúc lp.
a. Mt s ni dung trong chương trình shell
- Chương trình là dãy các dòng lnh shell song ưc t trong mt file vn bn
(ưc son tho theo son tho vn bn),
- Các dòng lnh b)t $u b0ng du # chính là dòng chú thích, b b qua khi shell
thc hin chương trình,
- Thông thưng các b dch lnh shell là sh (/bin/sh) hoc ksh (/bin/ksh)
thc hin mt chương trình shell ta có các cách sau ây:
$sh <<tên chương trình>
hoc $sh <tên chương trình>
hoc nh i mod c
a chương trình:
$chmod u+x <tên chương trình>
và chy chương trình $<tên chương trình>
- Ph$n l
n các yu t ngôn ng trong lp trình shell là tương ng v
i lp trình C.
Trong tài liu này s! dng chúng mt cách t nhiên.
b. Các bin trong file script
Trong shell có th k t
i 3 loi bin:
• Bin môi trưng (bin shell c bit, bin t khóa, bin shell xác nh trư
c hoc bin
shell chu-n) ưc lit kê như sau (các bin này thưng gm các ch cái hoa):
- HOME : ưng d4n thư mc riêng c
a ngưi dùng,
- MAIL: ưng d4n thư mc cha hp thư ngưi dùng,
- PATH: thư mc dùng tìm các file th hin ni dung lnh,
- PS1: du mi ban $u c
a shell (ng$m nh là $),
- PS2: du mi th 2 c
a shell (ng$m nh là >),
- PWD: Thư mc hin ti ngưi dùng ang làm,
- SHELL: ưng d4n c
a shell (/bin/sh hoc /bin/ksh)
- TERM: S hiu gán cho trm cui,
- USER: Tên ngưi dùng ã vào h thng,
Trong .profile thư mc riêng c
a mi ngưi dùng thưng có các câu lnh dng:
<bin môi trưng> = <giá tr
• Bin ngưi dùng: Các bin này do ngưi dùng t tên và có các cánh thc nhn giá tr
các bin ngưi dùng t bàn phím (lnh read).
Bin ưc t tên gm mt xâu ký t, quy t)c t tên như sau: ký t $u tiên phi là
mt ch ci hoc du gch chân (_), sau tên là mt hay nhiu ký t khác. to ra mt
bin ta ch. c$n gán bin ó mt giá tr nào ó. Phép gán là mt du b0ng (=). Ví d:
myname=”TriThanh” 1
2
Chú ý: không ưc có du cách (space) 0ng trư
c hay 0ng sau du b0ng. Tên bin là
phân bit ch hoa ch thưng. truy xut n mt bin ta dùng cú pháp sau; $tên_bin.
Ch/ng hn ta mun in ra giá tr c
a bin myname trên ta ch. c$n ra lnh: echo $myname.
$myname.
$myname.
Mt s ví d v cách t tên bin:
$ no=10 #ây là mt cách khai báo hp l
Nhưng cách khai báo dư
i ây là không hp l
$ no =10 #có du cách sau tên bin
$ no= 10 # có du cách sau du =
$ no = 10 # có du cách c 0ng trư
c l4n 0ng sau du =
Ta có th khai báo mt bin nhưng nó có giá tr NULL như trong nhng cách sau:
$ vech=
$
Nu ta ra lnh in giá tr c
a bin này thì ta s7 thu ưc mt giá tr NULL ra màn hình
(mt dòng trng).
• Bin t ng (hay bin-ch. (c, tham s v trí) là các bin do shell ã có s1n; tên các
bin này cho trư
c. Có 10 bin t ng:
$0, $1, $2, ..., $9
Tham bin “$0” cha tên c
a lnh, các tham bin thc b)t $u b0ng “$1” (nu tham s
cú v trí l
n hơn 9, ta phi s! dng cú pháp ${} – ví d, ${10} thu ưc các giá tr c
a
chúng). Shell bash có ba tham bin v trí c bit, “$#”, “$@”, và “$#”. “$#” là s lưng
tham bin v trí (không tính “$0”). “$*” là mt danh sách tt c các tham bin v trí loi tr
“$0”, ã ưc nh dng như là mt xâu ơn v
i mi tham bin ưc phân cách bi k
t
$IFS. “$@” tr v tt c các tham bin v trí ưc ưa ra dư
i dng N xâu ưc bao trong
du ngoc kép.
S khác nhau gia “$*” và “$@” là gì và ti sao li có s phân bit? S khác nhau cho
phép ta x! lý các i s dòng lnh b0ng hai cách. Cách th nht, “$*”, do nó là mt xâu
ơn, nên có th ưc biu di*n linh hot hơn không c$n yêu c$u nhiu mã shell. “$@” cho
phép ta x! lý mi i s riêng bit bi vì giá tr c
a chúng là N i s c lp.
Dòng ra (hay dòng vào) tương ng v
i các tham s v trí là các "t" có trong các dòng
ó. Ví d,
$chay vao chuong trinh roi
Nu chay là mt lnh thì dòng vào này thì:
$0 có giá tr chay $1 có giá tr vao $2 có giá tr chuong
$3 có giá tr trinh $4 có giá tr roi
Mt ví d khác v bin v trí giúp ta phân bit ưc s khác nhau gia bin $* và $@:
#!/bin/bash
#testparm.sh
function cntparm
{ 1
2
echo –e “inside cntparm $# parms: $*”
}
cntparm ‘$*’
cntparm ‘$@’
echo –e “outside cntparm $* parms
”
echo –e “outside cntparm $@ parms
”
Khi chy chương trình này ta s7 thu ưc kt qu:
$./testparm.sh Kurt Roland Wall
inside cntparm 1 parms: Kurt Roland Wall
inside cntparm 3 parms: Kurt Roland Wall
outside cntparm: Kurt Roland Wall
outside cntparm: Kurt Roland Wall
Trong dòng th nht và th 2 ta thy kt qu có s khác nhau, dòng th nht bin
“$*” tr v tham bin v trí dư
i dng mt xâu ơn, vì th cntparm báo cáo mt tham bin
ơn. Dòng th hai g(i cntparm, tr v i s dòng lnh c
a là 3 xâu c lp, vì th cntparm
báo cáo ba tham bin.
c. Các ký t c bit trong bash
Ký t! Mô t
<
\
&
{
}
~
'
#
‘
“
$
*
?
nh hư
ng $u vào
nh hư
ng $u ra
B)t $u subshell
Kt thúc subshell
Ký hiu d4n
Dùng hin ký t c bit
Thi hành lnh chy ch ng$m
B)t $u khi lnh
Kt thúc khi lnh
Thư mc home c
a ngưi dùng hin ti
Thay th lnh
Chia c)t lnh
Li chú gii
Trích d4n mnh
Trích d4n yu
Biu thc bin
Ký t i din cho chui
Ký t i din cho mt ký t
Các ký t c bit ca bash
Du chia c)t lnh, ; , cho phép thc hin nhng lnh bash phc tp ánh trên mt dòng.
Nhưng quan tr(ng hơn, nó là kt thúc lnh theo lý thuyt POSIX.
Ký t chú gii, # , khin bash b qua m(i ký t t ó cho n ht dòng. im khPQc nhau
gia các ký t trích d4n mnh và trích d4n yu, ‘ và “, tương ng là: trích d4n mnh b)t
bash hiu tt c các ký t theo ngh"a en; trích d4n yu ch. bo h cho mt vài ký t c
bit c
a bash . 1
3
7.2. Mt s lnh lp trình trên shell
7.2.1. S
dng các toán t
bash
Các toán t string
Các toán t! string, c2ng ưc g(i là các toán t! thay th trong tài liu v bash, kim tra
giá tr c
a bin là chưa gán giá tr hoc khng xác nh. Bng dư
i là danh sách các toán t!
này cùng v
i miêu t c th cho chc nng c
a tng toán t!.
Toán t
Chc nng
${var:- word} Nu bin tn ti và xác nh thì tr v giá tr c
a nó, nu
không thì tr v word
${var:= word} Nu bin tn ti và xác nh thì tr v giá tr c
a nó, nu
không thì gán bin thành word, sau ó tr v giá tr c
a
nó
${var:+ word} Nu bin tn ti và xác nh thì tr v word, còn không
thì tr v null
${var:?message} Nu bin tn ti và xác nh thì tr v giá tr c
a nó, còn
không thì hin th “bash: $var:$message” và thoát ra khi
lnh hay tp lnh hin thi.
${var: offset[:length]} Tr v mt xâu con c
a var b)t $u ti offset c
a dài
length. Nu length b b qua, toàn b xâu t offset s7
ưc tr v.
Các toán t string ca bash
minh ho, hãy xem xét mt bin shell có tên là status ưc khi to v
i giá tr
defined. S! dng 4 toán t! string $u tiên cho kt qu status như sau:
$echo ${status:-undefined}
defined
$echo ${status:=undefined}
defined
$echo ${status:+undefined}
undefined
$echo ${status:?Dohhh\! undefined}
defined
Bây gi s! dng lnh unset xoá bin status, và thc hin v4n các lnh ó, ưc
output như sau:
$unset status
$echo ${status:-undefined}
undefined
$echo ${status:=undefined}
undefined
$echo ${status:+undefined}
undefined
$unset status
$echo ${status:?Dohhh\! undefined}
bash:status Dohhh! Undefined 1
3
C$n thit unset status l$n th hai vì lnh th ba, echo ${status:+undefined}, khi to
li status thành undefined.
Các toán t! substring ã có trong danh sách bng trên c bit có ích. Hãy xét 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.
Các toán t Pattern-Matching
Các toán t! pattern-matching có ích nht trong công vic v
i các bn ghi dài bin
hay các xâu ã ưc nh dng t do ưc nh gi
i bi các kí t c nh. Bin môi trưng
$PATH là mt ví d. Mc dù nó có th khá dài, các thư mc riêng bit ưc phân nh bi
du hai chm. Bng dư
i là danh sách các toán t! Pattern-Matching c
a bash và chc nng
c
a chúng.
Toán t! Chc nng
${var#pattern} Xoá b ph$n kh
p (match) ng)n nht c
a pattern trư
c var
và tr v ph$n còn li
${var##pattern} Xoá b ph$n kh
p (match) dài nht c
a pattern trư
c var và
tr v ph$n còn li
${var%pattern} Xoá b ph$n kh
p ng)n nht c
a pattern cui var và tr
v ph$n còn li
${var%%pattern} Xoá b ph$n kh
p dài nht c
a pattern cui var và tr v
ph$n còn li
${var/pattern/string} Thay ph$n kh
p dài nht c
a pattern trong var b0ng string.
Ch. thay ph$n kh
p $u tiên. Toán t! này ch. có trong bash
2.0 hay l
n hơn.
${var//pattern/string} Thay ph$n kh
p dài nht c
a pattern trong var b0ng string.
Thay tt c các ph$n kh
p. Toán t! này có trong bash 2.0
hoc l
n hơn.
Các toán t bash Pattern-Matching
Thông thưng quy t)c chu-n c
a các toán t! bash pattern-matching là thao tác v
i file
và tên ưng d4n. Ví d, gi s! ta có mt tên bin shell là mylife có giá tr là
/usr/src/linux/Documentation/ide.txt (tài liu v trình iu khin "a IDE c
a nhân). S!
dng m4u “/*” và “*/” ta có th tách ưc tên thư mc và tên 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á xâu matching “*/” dài nht trong tên file và tr v tên file. Lnh th 4
làm kh
p tt c m(i th sau “/”, b)t $u t cui bin, b tên file và tr v ưng d4n c
a
file. Kt qu c
a tp lnh này là:
$ ./pattern.sh 1
3
${myfile##*/} = ide.txt
basename $myfile = ide.txt
${myfile%/*} = /usr/src/linux/Documentation
dirname $myfile = /usr/src/linux/Documentation
minh ho v các toán t! pattern-matching và thay th, lnh thay th mi du hai
chm trong bin môi trưng $PATH b0ng mt dòng m
i, kt qu hin th ưng d4n rt d*
(c (ví d này s7 sai nu ta không có bash phiên bn 2.0 hoc m
i hơn):
$ echo –e ${PATH//:/\
}
/usr/local/bin
/usr/bin
/usr/X11R6/bin
/home/kwall/bin
/home/wall/wp/wpbin
Các toán t so sánh chui
kim tra iu kin thc
str1 = str2 str1 b0ng str2
str1 != str2 str1 khác str2
-n str str có dài l
n hơn 0 (khác null)
-z str str có dài b0ng 0 (null)
Toán t sánh chu@i ca bash
Các toán t so sánh s hc
kim tra iu kin thc
-eq b0ng
-ge l
n hơn hoc b0ng
-gt l
n hơn
-le nh hơn hoc b0ng
-lt nh hơn
-ne khác
Các cách test s nguyên ca bash
7.2.2. $iu khi n lu%ng
Các cu trúc iu khin lung c
a bash, nó bao gm:
• if – Thi hành mt hoc nhiu câu lnh nu có iu kin là true hoc false.
• for – Thi hành mt hoc nhiu câu lnh trong mt s c nh l$n.
• while – Thi hành mt hoc nhiu câu lnh trong khi mt iu kin nào ó là
true hoc false.
• until – Thi hành mt hoc nhiu câu lnh cho n khi mt iu kin nào ó
tr thành true hoc false.
• case – Thi hành mt hoc nhiu câu lnh ph thuc vào giá tr c
a bin.
• select – Thi hành mt hoc nhiu câu lnh da trên mt khong tu5 ch(n c
a
ngưi dùng. 1
3
7.2.2.1 Cu trúc r nhánh có i"u kin if
Bash cung cp s thc hin có iu kin lnh nào ó s! dng câu lnh if, câu lnh if c
a
bash $y
chc nng như c
a C. Cú pháp c
a nó ưc khái quát như sau:
if condition
then
statements
[elif condition
statements]
[else
statements]
fi
$u tiên, ta c$n phi ch)c ch)n r0ng mình hiu if kim tra trng thái thoát c
a câu lnh
last trong condition. Nu nó là 0 (true), sau ó statements s7 ưc thi hành, nhưng nu nó
khác 0, thì mnh else s7 ưc thi hành và iu khin nhy t
i dòng $u tiên c
a mã fi.
Các mnh elif (tu5 ch(n) (có th nhiu tu5 ý) s7 ch. thi hành khi iu kin if là false.
Tương t, mnh else (tu5 ch(n) s7 ch. thi hành khi tt c else không tha mãn. Nhìn
chung, các chương trình Linux tr v 0 nu thành công hay hoàn toàn bình thưng, và khác
0 nu ngưc li, vì th không có hn ch nào c.
Chú ý: Không phi tt c chương trình u tuân theo cùng mt chu-n cho giá tr tr v,
vì th c$n kim tra tài liu v các chương trình ta kim tra mã thoát v
i iu kin if. Ví d
chương trình diff, tr v 0 nu không có gì khác nhau, 1 nu có s khác bit và 2 nu có
vn nào ó. Nu mt câu iu kin hot ng không như mong i thì hãy kim tra tài
liu v mã thoát .
Không quan tâm n cách mà chương trình xác nh mã thoát c
a chúng, bash ly 0 có
ngh"a là true hoc bình thưng còn khác 0 là false. Nu ta c$n c th kim tra mt mã
thoát c
a lnh, s! dng toán t! $? ngay sau khi chy lnh. $? tr v mã thoát c
a lnh chy
ngay lúc ó.
Phc tp hơn, bash cho phép ta phi hp các mã thoát trong ph$n iu kin s! dng các
toán t! && và || ưc g(i là toán t! logic AND và OR. Cú pháp $y
cho toán t! AND
như sau:
command1 && command2
Câu lnh command2 ch. ưc chy khi và ch. khi command1 tr v trng thái là s 0
(true).
Cú pháp cho toán t! OR thì như sau:
command1 || command2
Câu lnh command2 ch. ưc chy khi và ch. khi command1 tr li mt giá tr khác 0
(false).
Ta có th kt hp li c 2 loi toán t! li có mt biu thc như sau:
command1 && comamnd2 || command3
Nu câu lnh command1 chy thành công thì shell s7 chy lnh command2 và nu
command1 không chy thành công thì command3 ưc chy. 1
3
Ví d:
$ rm myf && echo "File is removed successfully" || echo "File is not removed"
Nu file myf ưc xóa thành công (giá tr tr v c
a lnh là 0) thì lnh "echo File is
removed successfully" s7 ưc thc hin, nu không thì lnh "echo File is not removed"
ưc chy.
Gi s! trư
c khi ta vào trong mt khi mã, ta phi thay i mt thư mc và copy mt
file. Có mt cách thc hin iu này là s! dng các toán 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 nhiên, bash cho phép ta vit on mã này súc tích hơn nhiu như sau:
if cd /home/kwall/data && cp datafile datafile.bak
then
# more code here
fi
C hai on mã u thc hin cùng mt chc nng, nhưng on th hai ng)n hơn nhiu,
g(n nh8 và ơn gin. Mc dù if ch. kim tra các mã thoát, ta có th s! dng cu trúc […]
lnh test kim tra các iu kin phc tp hơn. [condition] tr v giá tr biu th condition
là true hay false. test c2ng có tác dng tương t.
Mt ví d khác v cách s! dng cu trúc 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 lưng các phép toán iu kin c
a bin hin ti khong 35, khá nhiu và hoàn ch.nh.
Ta có th kim tra các thuc tính file, so sánh các xâu và các biu thc s h(c.
Chú ý: Các khong trng trư
c du m ngoc và sau du óng ngoc trong [condition]
là c$n phi có. ây là iu kin c$n thit trong cú pháp shell c
a bash.
Bng dư
i là danh sách các toán t! test file ph bin nht (danh sách hoàn ch.nh có th
tìm thy trong nhng trang manual $y
v bash). 1
3
Toán 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 bình thưng(không là
mt thư mc hay mt file c bit)
-r file file cho phép (c
-s file file tn ti và khác rng
-w file file cho phép ghi
-x file file kh thi hoc nu file là mt thư mc thì
cho phép tìm kim trên file
-O file file c
a ngưi dùng hin ti
-G file file thuc mt trong các nhóm ngưi dùng
hin ti là thành viên
file1 -nt file2 file1 m
i hơn file2
file1 -ot file2 file1 c2 hơn file2
Các toán t test file ca bash
Ví d chng trình shell cho các toán t! test file trên các thư mc trong bin $PATH. Mã
cho chương trình 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 don’t have write permission in $dir”
fi
if [ -0 $dir ]; then
echo -e "\tYou own $dir"
else
echo –e “\tYou don’t 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
Chương trình descpath.sh 1
3
Vòng lp for (gi
i thiu trong ph$n dư
i) s7 duyt toàn b các ưng d4n thư mc trong
bin PATH sau ó kim tra các thuc tính c
a thư mc ó. Kt qu như sau (kt qu có th
khác nhau trên các máy khác nhau do giá tr c
a bin PATH khác nhau):
/usr/local/bin
You don’t have write permission in /usr/local/bin
You don’t own /usr/local/bin
You aren’t a member of /usr/local/bin’s group
You don’t have write permission in /bin
You don’t own /bin
You aren’t a member of /bin’s group
/usr/bin
You don’t have write permission in /usr/bin
You don’t own /usr/bin
You aren’t a member of /usr/bin’s group
/usr/X11R6/bin
You don’t have write permission in /usr/X11R6/bin
You don’t own /usr/X11R6/bin
You aren’t a member of /usr/X11R6/bin’s group
/home/kwall/bin
You have write permission in /home/kwall/bin
You own /home/kwall/bin
You are a member of /home/kwall/bin’s 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/wpbin’s group
Các biu thc trong ph$n iu kin c2ng có th kt hp v
i nhau to thành các biu
thc phc tp hơn b0ng các phép toán logic. Dư
i ây là mt bng các biu thc logic
trong shell.
Toán t
Ý ngh)a
! expression Logical NOT
expression1 -a expression2 Logical AND
expression1 -o expression2 Logical OR
7.2.2.2 Các vòng lp ã quy
t nh: for
Như ã thy chương trình trên, for cho phép ta chy mt on mã mt s l$n nht
nh. Tuy nhiên cu trúc for c
a bash ch. cho phép ta lp i lp li trong danh sách các giá
tr nht nh bi vì nó không t ng tng hay gim con m vòng lp như là C, Pascal, hay
Basic. Tuy nhiên vòng lp for là công c lp thưng xuyên ưc s! dng bi vì nó iu
khin g(n gàng trên các danh sách, như là các tham s dòng lnh và các danh sách các file
trong thư mc. Cú pháp $y
c
a for là:
for value in list 1
3
do
statements using $value
done
list là mt danh sách các giá tr, ví d như là tên file. Giá tr là mt thành viên danh sách
ơn và statements là các lnh s! dng value. Mt cú pháp khác c
a lnh for có dng như
sau:
for (( expr1; expr2; expr3 ))
do
.....
...
repeat all statements between do and
done until expr2 is TRUE
done
Linux không có tin ích i tên hay copy các nhóm c
a file. Trong MS-DOS nu ta
có 17 file có ph$n m rng a*.doc, ta có th s! dng lnh COPY copy *.doc thành file
*.txt. Lnh DOS như sau:
C:\ cp doc\*.doc doc\*.txt
s! dng vòng lp for c
a bash bù )p nhng thiu sót này. on mã dư
i ây có th
ưc chuyn thành chương trình shell thc hin úng như nhng gì ta mun:
for docfile in doc/*.doc
do
cp $docfile ${docfile%.doc}.txt
done
S! dng mt trong các toán t! pattern-matching c
a bash, on mã này làm vic copy
các file có ph$n m rng là *.doc b0ng cách thay th .doc cui c
a tên file b0ng .txt.
Mt ví d khác v vòng for ơn gin như sau:
#!/bin/bash
for i in 1 2 3 4 5
do
echo "Welcome $i times"
done
Ta c2ng có mt cu trúc v for như sau, chương trình này c2ng có cùng chc nng như
chương trình trên nhưng ta chú ý n s khác bit v cú pháp c
a lnh for.
#!/bin/bash
for (( i = 0 ; i <= 5; i++ ))
do
echo "Welcome $i times"
done
$ chmod +x for2
$ ./for2
Welcome 0 times
Welcome 1 times
Welcome 2 times
Welcome 3 times 1
3
Welcome 4 times
Welcome 5 times
Tip theo là mt ví d v vòng for lng nhau:
#!/bin/bash
for (( i = 1; i <= 5; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 5; j++ )) ### Inner for loop ###
do
echo -n "$i "
done
Ví d khác v cách s! dng cu trúc 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 chương trình v
i tham s:
$ chmod 755 mtable
$ ./mtable 7
Ta thu ưc kt qu như sau:
7 * 1 = 7
7 * 2 = 14
...
..
7 * 10 = 70
7.2.2.3 Các vòng lp không xác nh: while và until1
3
Vòng lp for gi
i hn s l$n mà mt on mã ưc thi hành, các cu trúc while và until
c
a bash cho phép mt on mã ưc thi hành liên tc cho n khi mt iu kin nào ó
xy ra. Ch. v
i chú ý là on mã này c$n vit sao cho iu kin cui phi xy ra nu không
s7 to ra mt vòng lp vô tn. Cú pháp c
a nó như sau:
while condition
do
statements
done
Cú pháp này có ngh"a là khi nào condition còn true, thì thc hin statements cho n
khi condition tr thành false (cho n khi mt chương trình hay mt lnh tr v khác 0):
until condition
do
statements
done
Cú pháp until có ngh"a là trái ngưc v
i while: cho n khi condition tr thành true thì
thi hành statements (có ngh"a là cho n khi mt lnh hay chương trình tr v mã thoát
khác 0)
Cu trúc while c
a bash kh)c phc thiu sót không th t ng tng, gim con m cua
vòng lp for. Ví d, ta mun copy 150 bn c
a mt file, thì vòng lp while là mt la ch(n
gii quyt bài toán này. Dư
i ây là chương trình:
#!/bin/sh
#
declare -i idx
idx=1
while [ $idx != 150]
do
cp somefile somefile.$idx
idx=$idx+1
done
Chương trình này gi
i thiu cách s! dng tính toán s nguyên c
a bash. Câu lnh
declare khi to mt bin, idx, nh ngh"a là mt s nguyên. Mi l$n lp idx tng lên, nó s7
ưc kim tra thoát khi vòng lp. Vòng lp until tuy c2ng có kh nng ging while
nhưng không ưc dùng nhiu vì rt khó vit và chy chm.
Mt ví d na v cách s! dng vòng lp while ưc minh h(a trong chương trình in
bn nhân c
a 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 ] 1
4
do
echo "$n * $i = 'expr $i \* $n'"
i='expr $i + 1'
done
7.2.2.4 Các cu trúc la chn: case và select
Cu trúc iu khin lung tip theo là case, hot ng c2ng tương t như lnh switch
c
a C. Nó cho phép ta thc hin các khi lnh ph thuc vào giá tr c
a bin. Cú pháp $y
c
a case như sau:
case expr in
pattern1 )
statements ;;
pattern2 )
statements ;;
…
[*)
statements ;;]
esac
expr ưc em i so sánh v
i tng pattern, nu nó b0ng nhau thì các lnh tương ng s7
ưc thi hành. Du ;; là tương ương v
i lnh break c
a C, to ra iu khin nhy t
i dòng
$u tiên c
a mã esac. Không như t khoá switch c
a C, lnh case c
a bash cho phép ta
kim tra giá tr c
a expr da vào pattern, nó có th cha các kí t i din. Cách làm vic
c
a cu trúc case như sau: nó s7 kh
p (match) biu thc expr v
i các m4u pattern1,
pattern2,…nu có mt m4u nào ó kh
p thì khi lnh tương ng v
i m4u ó s7 ưc thc
thi, sau ó nó thoát ra khi lnh case. Nu tt c các m4u u không kh
p và ta có s! dng
m4u * (trong nhánh *)), ta thy ây là m4u có th kh
p v
i bt k5 giá tr nào (ký t i din
là *), nên các lnh trong nhánh này s7 ưc thc hin.
Cu trúc iu khin select (không có trong các phiên bn bash nh hơn 1.14) ch. riêng
có trong Korn và các shell bash. Thêm vào ó, nó không có s tương t như trong các ngôn
ng lp trình quy ư
c. select cho phép ta d* dàng trong vic xây dng các menu ơn gin
và áp ng các ch(n la c
a ngưi dùng. Cú pháp c
a nó như sau:
select value [in list]
do
statements that manipulate $value
done
Dư
i ây là mt ví d v cách s! dng lnh select:
#!/bin/bash
# menu.sh – Createing simple menus with select
#######################################
IFS=:
PS3=“choice? ”
# clear the screen
clear 1
4
select dir in $PATH
do
if [ $dir ]; then
cnt=$(ls –Al $dir | wc -l)
echo “$cnt files in $dir”
else
echo “Dohhh! No such choice!”
fi
echo –e “
Press ENTER to continue, CTRL –C to quit”
read
clear
done
Chương trình to các menu b+ng select
Lnh $u tiên t kí t IFS là : (ký t phân cách), vì th select có th phân tích hoàn
ch.nh bin môi trưng $PATH. Sau ó nó thay i li nh)c default khi select b0ng bin
PS3. Sau khi xoá sch màn hình, nó bư
c vào mt vòng lp, ưa ra mt danh sách các thư
mc n0m trong $PATH và nh)c ngưi dùng ch(n la như là minh ho trong hình dư
i.
Nu ngưi dùng ch(n hp l, lnh ls ưc thc hin kt qu ưc g!i cho lnh m t
wc m s file trong thư mc và hin th kt qu có bao nhiêu file trong thư mc ó. Do
ls có th s! dng mà không c$n i s, script $u tiên c$n ch)c ch)n là $dir khác null (nu
nó là null, ls s7 hot ng trên thư mc hin hành nu ngưi dùng ch(n 1 menu không hp
l). Nu ngưi dùng ch(n không hp l, mt thông báo li s7 ưc hin th. Câu lnh read
(ưc gi
i thiu sau) cho phép ngưi dùng ánh vào la ch(n c
a mình và nhn Enter
lp li vòng lp hay nhn Ctrl + C thoát.
Chú ý: Như ã gi
i thiu, các vòng lp script không kt thuc nu ta không nhn Ctrl+C.
Tuy nhiên ta có th s! dng lnh break thoát ra. 1
4
7.2.2.5 Các hàm shell
Các hàm chc nng c
a bash là mt cách m rng các tin ích s1n có trong shell, nó có các
im li sau:
• Thi hành nhanh hơn do các hàm shell luôn thưng trc trong b nh
.
• Cho phép vic lp trình tr nên d* dàng hơn vì ta có th t chc chương trình thành
các module.
Ta có th nh ngh"a các hàm shell s! dng theo hai cách:
function fname
{
commands
}
hoc là
fname()
{
commands
'(
C hai dng u ưc chp nhn và không có gì khác gia chúng. g(i mt hàm ã
nh ngh"a ơn gin là g(i tên hàm cùng v
i các i s mà nó c$n.
Nu so sánh v
i C hay Pascal, hàm c
a bash không ưc cht ch7, nó không kim tra
li và không có phương thc tr v i s b0ng giá tr. Tuy nhiên ging như C và Pascal,
các bin a phương có th khai báo cc b i v
i hàm, do ó tránh ưc s xung t v
bin toàn cc. thc hin iu này ta dùng t khoá local như trong on mã sau:
function foo
{
local myvar
local yourvar=1
}
Trong ví d v các bin v trí trên ta c2ng thy ưc cách s! dng hàm trong bash.
Các hàm shell giúp mã c
a ta d* hiu và d* bo dư6ng. S! dng các hàm và các chú thích
ta s7 6 rt nhiu công sc khi ta phi tr li nâng cp on mã mà ta ã vit t thi gian
rt lâu trư
c ó.
7.2.3 Các toán t
nh hưng vào ra
Ta ã ưc bit v các toán t! nh hư
ng vào ra, > và <. Toán t! nh hư
ng ra cho
phép ta g!i kt qu ra c
a mt lnh vào mt file. Ví d như lnh sau:
$ cat $HOME/.bash_profile > out
Nó s7 to mt file tên là out trong thư mc hin ti cha các ni dung c
a file
bash_profile, b0ng cách nh hư
ng $u ra c
a cat t
i file ó.
Tương t, ta có th cung cp $u vào là mt lênh t mt file hoc là lnh s! dng toán
t! $u vào, <. Tacó th vit li lnh cat s! dng toán t! nh hư
ng $u vào như sau:
$ cat < $HOME/.bash_profile > out 1
4
Kt qu c
a lnh này v4n như th nhưng nó cho ta hiu thêm v cách s! dng nh
hư
ng $u vào $u ra.
Toán t! nh hư
ng $u ra, >, s7 ghi è lên bt c file nào ang tn ti. ôi khi iu
này là không mong mun, vì th bash cung cp toán t! ni thêm d liu, >>, cho phép ni
thêm d liu vào cuôi file. Hay xem lnh thêm bí danh cdlpu vào cui c
a file .bashrc c
a
tôi:
$echo “alias cdlpu=’cd $HOME/kwall/projects/lpu’ ” >> $HOME/.bashrc
Mt cách s! dng nh hư
ng $u vào là $u vào chu-n (bàn phím). Cú pháp c
a lnh
này như sau:
Command << label
Input …
Label
Cú pháp này nói lên r0ng command (c các input cho n khi nó gp label. Dư
i ây là
ví d v cách s! dng cu trúc này:
#!/bin/bash
####################################
USER=anonymous
ftp -i -n << END
open ftp.caldera.com
user $USER $PASS
cd /pub
ls
close
END
7.2.4. Hin dòng vn bn
Lnh echo hin ra dòng vn bn ưc ghi ngay trong dòng lnh có cú pháp:
echo [tùy chn] [xâu ký t]…
v
i các tùy ch(n như sau:
-n : hin xâu ký t và du nh)c trên cùng mt dòng.
-e : bt kh nng thông dch ưc các ký t iu khin.
-E : t)t kh nng thông dch ưc các ký t iu khin.
--help : hin h tr và thoát. Mt s bn Linux không h tr tham s này.
Ví d, dùng lnh echo v
i tham s -e
# echo -e ‘th
dùng lnh echo
’
s7 thy hin ra chính dòng vn bn lnh:
th
dùng lnh echo
#
ở đây ký tự điểu khiển ‘
’ là ký t Q xung dòng. 1
4
7.2.5. Lnh read
c d liu cho bin ngưi dùng
Lnh read có dng read <tên bin>
Ví d chương trình shell có tên thu1.arg có ni dung như sau:
#!/bin/sh
# Chuong trinh hoi ten nguoi va hien lai
echo "Ten anh la gi?"
read name
echo "Xin chao, $name , anh go $# doi so"
echo "$*"
Sau ó, ta thc hin
$chmod u+x thu1.arg
và $thu1.arg Hoi ten nguoi va hien lai
s7 thy xut hin
Ten anh la gi? Tran Van An
Xin chao, Tran Van An, anh go 6 doi so
Hoi ten nguoi va hien lai
7.2.6. Lnh set
gán kt qu ư ra t lnh shell ra các bin t ng, ta dùng lnh set
Dng lnh set set '<lnh>'
Sau lnh này, kt qu thc hin lnh không hi ra lê màn hình mà gán kt qu ó tương
ng cho các bin t ng. MRt cách t ng các t trong kt qu thc hin lnh s7 gán
tương ng cho các bin t ng (t $1 tr i).
Xem xét mt ví d sau ây (chương trình thu2.arg) có ni dung:
#!/bin/sh
# Hien thoi diem chay chuong trinh nay
set 'date'
echo "Thoi gian: $4 $5"
echo "Thu: $1"
echo "Ngay $3 thang $2 nam $6"
Sau khi i mode c
a File chương trình này và chy, chúng ta nhn ưc:
Thoi gian: 7:20:15 EST
Thu: Tue
Ngay 20 thang Oct nam 1998
Như vy,
$# = 6
$* = Tue Oct 20 7:20:15 EST 1998
$1 = Tue $2=Oct $3 = 20 $4 = 7:20:15
$5 = EST $6 = 1998
7.2.7. Tính toán trên các bin
Các tính toán trong shell ưc thc hin v
i các i s nguyên. Các phép toán gm có:
cng (+), tr (-), nhân (*), chia (/), mod (%).
Biu thc thc hin theo các phép toán ã nêu.
Tính toán trên shell có dng:
'expr <biu thc>' 1
4
Ví d, chương trình v
i tên cong.shl sau ây:
#!/bin/sh
# Tinh va in hai so
tong = 'expr $1 + $2'
echo "Tong = $tong"
Sau ó, khi i mod và chy
$cong.shl 5 6
s7 hin ra:
Tong = 11
7.2.8. Chương trình ví d
/* Program 5 */
#!/bin/sh
# Chuong trinh liet ke cac thu muc con cua 1 thu muc
# Minh hoa cach su dung if then fi, while do done
# va cac CT test, expr
if test $# -ne 1
then
echo Cu phap: $0 \<Ten thu muc\>
exit 1
fi
cd $1 # Chuyen vao thu muc can list
if test $? -ne 0 # Neu thu muc khong ton tai thi ra khoi CT
then
exit 1
fi
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\) 1
4
fi
done
}
7.3. Lp trình C trên UNIX
7.3.1. Trình biên dch gcc
H iu hành UNIX luôn kèm theo b dch ngôn ng lp trình C v
i tên g(i là cc (C
compiler). Trong Linux, b dch có tên là gcc (GNU C Compiler) v
i ngôn ng lp trình
không khác nhiu v
i C chu-n. Ni dung chi tit v các ngôn ng lp trình trên Linux thuc
phm vi c
a các tài liu khác.
gcc cho ngưi lp trình kim tra trình biên dch. Quá trình biên dch bao gm bn giai
on:
• Tin x! lý
• Biên dch
• Tp hp
• Liên kt
Ta có th dng quá trình sau mt trong nhng giai on kim tra kt qu biên dch
ti giai on y. gcc c2ng có th chp nhn ngôn ng khác c
a C, như ANSI C hay C
truyn thng. Như ã nói Q trên, gcc thích hp biên dch C++ hay Objective-C. Ta có th
kim soát lưng c2ng như kiu thông tin c$n debug, tt nhiên là có th nhúng trong quá
trình nh phân hóa kt qu và ging như h$u ht các trISnh biên dch, gcc c2ng thc hin ti
ưu hóa mã.
Trư
c khi b)t $u i sâu vào nghiên cu gcc, ta xem mt ví d sau:
#include<stdio.h>
int main (void)
{
fprintf( stdout, “Hello, Linux programming world!
”);
return 0;
}
Mt chương trình in hình dùng minh ho vic s dng gcc
biên dch và chy chương trình này hãy gõ:
$ gcc hello.c –o hello
$ ./hello
Hello, Linux programming world!
Dòng lnh $u tiên ch. cho gcc phi biên dch và liên kt file ngun hello.c, to
ra tp tin thc thi, b0ng cách ch. nh s! dng i s -o hello. Dòng lnh th hai
thc hin chương trình, và kt qu cho ra trên dòng th 3.
Có nhiu ch mà ta không nhìn thy ưc, gcc trư
c khi chy hello.c thông qua
b tin x! lý c
a cpp, m rng bt k5 mt macro nào và chèn thêm vào ni dung
c
a nhng file #include. Tip n, nó biên dch mã ngun tin x! lý sang mã obj .
Cui cùng, trình liên kt, to ra mã nh phân cho chương trình hello. 1
4
Ta có th to li tng bư
c này b0ng tay, chia thành tng bư
c qua tin trình
biên dch. ch. cho gcc bit phi dng vic biên dch sau khi tin x! lý, ta s! dng
tu5 ch(n –E c
a gcc:
$ gcc –E hello.c –o hello.cpp
Xem xét hello.cpp và ta có th thy ni dung c
a stdio.h ưc chèn vào file,
cùng v
i nhng mã thông báo tin x! lý khác. Bư
c tip theo là biên dch hello.cpp
sang mã obj. S! dng tu5 ch(n –c c
a gcc hoàn thành:
$ gcc –x cpp-output -c hello.cpp –o hello.o
Trong trưng hp này, ta không c$n ch. nh tên c
a file output bi vì trình biên
dch to mt tên file obj b0ng cách thay th .c bi .o. Tu5 ch(n –x ch. cho gcc bit
b)t $u biên dch bư
c ưc ch. báo trong trưng hp này v
i mã ngun tin x!
lý.
Làm th nào gcc bit chia loi c bit c
a file? Nó da vào uôi m rng c
a
file trên xác nh rõ phi x! lý file như th nào cho dúng. H$u ht nhng uôi
m rng thông thưng và chú thích c
a chúng ưc lit kê trong bng dư
i.
Phn m rng Ki u
.c Mã ngun ngôn ng C
.c, .cpp Mã ngun ngôn ng C++
.i Mã ngun C tin x! lý
.ii Mã ngun C++ tin x! lý
.S, .s Mã ngun Hơp ng
.o Mã i tưng biên dch (obj)
.a, .so Mã thư vin biên dch
Các ph$n m rng c
a tên file i v
i gcc
Liên kt file i tưng, và cui cùng to ra mã nh phân:
$ gcc hello.o –o hello
Trong trưng hp , ta ch. mun to ra các file obj, và như vy thì bư
c liên kt
là không c$n thit.
H$u ht các chương trình C cha nhiu file ngun thì mi file ngun ó u phi
ưc biên dch sang mã obj trư
c khi t
i bư
c liên kt cui cùng. Gi s! có mt ví
d, ta ang làm vic trên killerapp.c là chương trình s! dng ph$n mã c
a helper.c,
như vy biên dch killerapp.c ta phi dùng dòng lnh sau:
$ gcc killerapp.c helper.c –o killerapp
gcc qua l$n lưt các bư
c tin x! lý - biên dch – liên kt, lúc này to ra các file
obj cho mi file ngun trư
c khi to ra mã nh phân cho killerapp.
Mt s tu5 ch(n dòng lnh c
a gcc:
-o FILE Ch. nh tên file output; không c$n thit khi biên dch sang
mã obj. Nu FILE không ưc ch. rõ thì tên mc nh s7 là
a.out.
-c Biên dch không liên kt. 1
4
-DF00=BAR nh ngh"a macro tin x! lý t tên F00 v
i mt giá tr
c
a BAR trên dòng lnh.
-IDIRNAME Trư
c khi chưa quyt nh ưc DIRNAME hãy tìm
kim nhng file include trong danh sách các thư mc(
tìm trong danh sách các ưng d4n thư mc)
-LDIRNAME Trư
c khi chưa quyt nh ưc DIRNAME hãy tìm
kim nhng file thư vin trong danh sách các thư mc.
V
i mc nh gcc liên kt da trên nhng thư vin dùng
chung
-static Liên kt da trên nhng thư vin t"nh
-lF00 Liên kt da trên libF00
-g Bao gm chu-n g6 ri thông tin mã nh phân
-ggdb Bao gm tt c thông tin mã nh phân mà ch. có chương
trình g6 ri GNU- gdb m
i có th hiu ưc
-O Ti ưu hoá mã biên dch
-ON Ch. nh mt mc ti ưu hoá mã N, 0<=N<=3.
-ANSI H tr chu-n ANSI/ISO c
a C, loi b nhng m rng
c
a GNU mà xung t v
i chu-n( tu5 ch(n này không
bo m mã theo ANSI).
-pedantic Cho ra tt c nhng cnh báo quy nh bi chu-n
-pedantic-erors Thông báo ra tt c các li quy nh bi chu-n
ANSI/ISO c
a C.
-traditional H tr cho cú pháp ngôn ng C c
a Kernighan và
Ritchie (ging như cú pháp nh ngh"a hàm kiu c2).
-w Chn tt c thông ip cnh báo.
-Wall Thông báo ra tt c nhng cnh báo hu ích thông
thưng mà gcc có th cung cp.
-werror Chuyn i tt c nhng cnh báo sang li mà s7 làm
ngưng tin trình biên dch.
-MM Cho ra mt danh sách s ph thuc tương thích ưc
to.
-v Hin ra tt c các lnh ã s! dng trong mi bư
c c
a
tin trình biên dch.
7.3.2. Công c GNU make
Trong trưng hp ta vit mt chương trình rt l
n ưc cu thành bi t nhiu
file, vic biên dch s7 rt phc tp vì phi vit các dòng lnh gcc rt là dài. kh)c
phc tình trng này, công c GNU make ã ưc ưa ra. GNU make ưc gii
quyt b0ng cách cha tt c các dòng lnh phc tp ó trong mt file g(i là
makefile. Nó c2ng làm ti ưu hóa quá trình dch b0ng cách phát hin ra nhng file
nào có thay i thì nó m
i dch li, còn file nào không b thay i thì nó s7 không
làm gì c, vì vy thi gian dch s7 ưc rút ng)n. 1
4
Mt makefile là mt cơ s d liu vn bn cha cách lut, các lut này s7 báo
cho chương trình make bit phi làm gì và làm như th nào. Mt lut bao gm các
thành ph$n như sau:
• ích (target) – cái mà make phi làm
• Mt danh sách các thành ph$n ph thuc (dependencies) c$n to ra ích
• Mt danh sách các câu lnh thc thi trên các thành ph$n ph thuc
Khi ưc g(i, GNU make s7 tìm các file có tên là GNUmakefile, makefile hay
Makefile. Các lut s7 có cú pháp như sau:
target: dependency1, dependency2, ….
command
command
……
Target thưng là mt file như file kh thi hay file object ta mun to ra.
Dependency là mt danh sách các file c$n thit như là $u vào to ra target.
Command là các bư
c c$n thit (ch/ng hn như g(i chương trình dch) to ra
target.
Dư
i ây là mt ví d v mt makefile v to ra mt chương trình kh thi có tên là
editor (s hiu dòng ch. ưa vào tin theo dõi, còn ni dung c
a makefile không
cha s hiu dòng). Chương trình này ưc to ra bi mt s các 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
5. screen.o : screen.c screen.h
6. gcc -c screen.c
7. keyboard.o : keyboard.c keyboard.h
8. gcc -c keyboard.c
9. clean:
10. rm *.o
biên dch chương trình này ta ch. c$n ra lnh make trong thư mc cha file
này.
Trong makefile này cha tt c 5 lut, lut $u tiên có ích là editor ưc g(i là
ích ng$m nh. ây chính là file mà make s7 phi to ra, editor có 3 dependencies
editor.o, screen.o, keyboard.o. Tt c các file này phi tn ti thì m
i to ra ưc
ích trên. Dòng th 2 là lnh mà make s7 g(i thc hin to ra ích trên. Các dòng
tip theo là các ích và các lnh tương ng to ra các file i tưng (object).
7.3.3. Làm vic vi file
Trong Linux, làm vic v
i file ta s! dng mô t file (file descriptor). Mt
trong nhng thun li trong Linux và các h thng UNIX khác là giao din file làm
như nhau i v
i nhiu loi thit b. "a t, các thit b vào/ra, c ng song song, gi1
5
máy trm (pseudoterminal), c ng máy in, bng mch âm thanh, và chut ưc qun
lý như các thit b c bit ging như các tp thông thưng lp trình ng dng.
Các socket TCP/IP và min, khi kt ni ưc thit lp, s! dng mô t file như th
chúng là các file chu-n. Các ng (pipe) c2ng tương t các file chu-n.
Mt mô t file ơn gin ch. là mt s nguyên ưc s! dng như ch. mc (index)
vào mt bng các file m liên kt v
i tng tin trình. Các giá tr 0, 1 và 2 liên quan
n các dòng (streams) vào ra chu-n: stdin, stderr và stdout; ba dòng ó thưng kt
ni v
i máy c
a ngưi s! dng và có th ưc chuyn tip (redirect).
Mt s li g(i h thng s! dng mô t file. H$u ht các li g(i ó tr v giá tr -1
khi có li xy ra và bin errno ghi mã li. Mã li ưc ghi trong trang chính tu5
theo tng li g(i h thng. Hàm perror() ưc s! dng hin th ni dung thông
báo li da trên mã li.
Hàm open()
Li g(i open() s! dng m mt file. Khuôn m4u c
a hàm và gii thích tham
s và c c
a nó ưc cho dư
i â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 xâu ch. ra ưng d4n n file s7 ưc m. Thông s
th ba xác nh ch c
a file Unix (các bit ưc phép) ưc s! dng khi to mt
file và nên ưc s! dng khi to mt file . Tham s flags nhn mt trong các giá tr
O_RDONLY, O_WRONLY hoc O_RDWR
C Chú gii
O_RDONLY
O_WRONLY
O_RDWR
O_CREAT
O_EXCL
O_NOCTTY
O_TRUNC
O_APPEND
O_NONBLOCK
O_NODELAY
O_SYNC
M file (c
M file ghi
M file (c và ghi
To file nu chưa tn ti file ó
Tht bi nu file ã có
Không iu khin tty nu tty ã m và tin trình không iu khin tty
C)t file nu nó tn ti
Ni thêm và con tr t cui file
Nu mt quá trình không th hoàn thành mà không có tr*, tr v trng
thái trư
c ó
Tương t O_NONBLOCK
Thao tác s7 không tr v cho n khi d liu ưc ghi vào "a hoc thit
b khác
Các giá tr c
ca hàm open() 1
5
open() tr v mt mô t file nu không có li xy ra. Khi có li , nó tr v giá tr -1 và
t giá tr cho bin errno. Hàm create() c2ng tương t như open() v
i các c O_CREATE |
O_WRONLY | O_TRUNC
Hàm close()
Chúng ta nên óng mô t file khi ã thao tác xong v
i nó. Ch. có mt i s ó là s
mô t file mà li g(i open() tr v. Dng c
a li g(i close() là:
#include <unistd.h>
int close(int fd);
Tt c các khoá (lock) do tin trình x! lý trên file ưc gii phóng, cho dù chúng ưc
t mô t file khác. Nu quá trình óng file làm cho b m liên kt b0ng 0 thì file s7 b
xoá. Nu ây là mô t file cui cùng liên kt n mt file ưc m thì bn ghi bng file
m ưc gii phóng. Nu không phi là mt file bình thưng thì các hiu ng không mong
mun có th xy ra.
Hàm read()
Li g(i h thng read() s! dng (c d liu t file tương ng v
i mt mô t file.
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
i s $u tiên là mô t file mà ưc tr v t li g(i open() trư
c ó. i s th hai là
mt con tr t
i b m sao chép d liu và i s th ba là s byte s7 ưc (c. read()
tr v s byte ưc (c hoc -1 nu có li xy ra.
Hàm write()
Li g(i h thng write() s! dng ghi d liu vào file tương ng v
i mt mô t file.
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
i s $u tiên là s mô t file ưc tr v t li g(i open() trư
c ó. i s th hai là
con tr t
i b m ( sao chép d liu, có dung lưng
l
n cha d liu) và i s
th ba xác nh s byte s7 ưc ghi. write() tr v s byte (c hoc -1 nu có li xy ra
Hàm ftruncate()
Li g(i h thng ftruncate() c)t file tham chiu bi mô t file fd v
i dài ưc xác
nh bi tham s length
#include <unistd.h>
int ftruncate(int fd, size_t length);
Tr v giá tr 0 nu thành công và -1 nu có li xy ra.
Hàm lseek()
Hàm lseek() t v trí (c và ghi hin ti trong file ưc tham chiu bi mô t file files
i v trí offset 1
5
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
Ph thuc vào giá tr c
a whence, giá tr c
a offset là v trí b)t $u (SEEK_SET), v trí
hin ti (SEEK_CUR), hoc cui file (SEEK_END). Giá tr tr v là kt qu c
a offset: b)t
$u file, hoc mt giá tr c
a off_t , giá tr -1 nu có li.
Hàm fstat()
Hàm fstat () ưa ra thông tin v file thông qua vic mô t các file, nơi kt qu c
a struct
stat ưc ch. ra con tr ch. n buf().Kt qu tr v giá tr 0 nu thành công và nhn giá
tr -1 nu sai ( kim tra li).
#include <sys/stat.h>
#include <unistd.h>
int fstat(int filedes, struct stat *buf);
Sau ây là nh ngh"a c
a struct stat:
struct stat
{
dev_t st_dev; / * thit b */
int_t st_ino ; /* inode */
mode_t st_mode; /* ch bo v */
nlink_t st_nlink; /* s lưng các liên kt cng */
uid_t st_uid; /* s hiu c
a ngưi ch
*/
gid_t st_gid; /* s hiu nhóm c
a ngưi ch
*/
dev_t st_rdev; /* kiu thit b */
off_t st_size;/* kích thư
c bytes */
unsigned long st_blksize; /* kích thư
c khi*/
unsigned long st_blocks; /* S lưng các khi ã s! dng*/
time_t st_atime; /* thi gian truy cp cui cùng*/
time_t st_mtime; /* thi gian cp nht cui cùng */
time_t st_ctime; /* thi gian thay i cui cùng */
};
Hàm fchown()
Li g(i h thng fchown() cho phép tathay i ngưi ch
và nhóm ngưi ch
kt hp
v
i vic m file.
#include <sys/types.h>
#include <unistd.h>
int fchown(int fd, uid_t owner, gid_t group);
Tham s $u tiên là mô t file, tham s th hai là s nh danh c
a ngưi ch
, và tham
s th ba là s nh danh c
a nhóm ngưi ch
. Ngưi dùng hoc nhóm ngưi dùng s7 ưc 1
5
phép s! dng khi giá tr -1 thay i. Giá tr tr v là 0 nu thành công và –1 nu gp li
(kim tra bin errno).
Thông thưng ngưi dùng có th thay i nhóm các file thuc v h(. Ch. root m
i có
quyn thay i ngưi ch
s hu c
a nhiu nhóm.
Hàm fchdir( )
Li g(i hàm fchdir( ) thay i thư mc b0ng cách m file ưc mô t bi bin fd. Giá
tr tr v là 0 nu thành công và –1 nu có li (kim tra bin errno).
#include <unistd.h>
int fchdir(int fd);
Mt ví d v cách s! dng các hàm thao tác v
i file:
/* filedes_io.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <fcntl.h>
#include <unistd.h>
#include < assert.h>
#include <errno.h>
#include <string.h>
#include <stdio.h> /*for print */
char sample1[] = “This is sample data 1
”;
char sample2[] = “This is sample data 2
”;
char data[16];
main ( )
{
int fd;
int rc;
struct stat statbuf;
printf( “Creating file
”);
fd = open(“junk.out”, 0_WRONLY | 0_CREAT| 0_TRUNG, 0666);
assert(fd>=0);
rc = write(fd, sample1, strlen(sample 1) );
assert(fd>=0);
rc = write(fd, sample1, strlen(sample1));
assert(rc == strlen(sample1));
close(fd); 1
5
printf(“ Appending to file
”);
fd = open(“junk.out”, 0_WRONLY| 0_APPEND);
assert(fd>=0);
printf( “ locking file
”);
rc = flock(fd, LOCK_EX);
assert(rc == 0);
printf(“sleeping for 10 seconds
”);
sleep(10);
printf(“writing data
”);
rc = write(fd, sample2, strlen(sample2));
assert(rc == strlen(sample2));
printf(“unlocking file
”);
rc = flock(fd, LOCK_UN);
assert(rc == 0);
close(fd);
printf(“Reading file
”);
fd = open(“junk.out”, 0_RDONLY);
assert (fd >=0);
while (1)
{
rc = read (fd, data, sizeof (data) );
if( rc > 0 )
{
data[rc] =0; /* kt thúc xâu */
printf (“ Data read (rc = %d): <%s>
”, rc, data);
}
else if (rc == 0)
{
printf (“ End of file read \ n”);
break;
} else
{
perror ( “ read error ” );
break;
}
}
close (fd);
printf (“ Fiddling with inode
”);
fd = open (“ junk.out”, 0_RDONLY); 1
5
assert (fd >= 0);
printf (“ changing file mode
”);
rc = fchmod ( fd, 0600);
assert (rc == 0);
if ( getuid ( ) == 0 ) {
printf ( “ changing file owner
” );
rc = fchown (fd, 99, 99);
assert (rc == 0);
} else
{
printf ( “ not changing file owner
”);
}
fstat (fd, &statbuf);
printf (“ file mode = 0% ( octal ) \ n”, statbuf.st_mode);
printf(“Owner uid = %d \ n”, statbuf.st_uid);
printf(“ Owner gid = %d
”, statbuf.st_uid);
close(fd);
}
7.3.4. Thư vin liên kt
Ph$n này s7 gi
i thiu cách to ra và s! dng thư vin (các module chương trình ã
ưc vit và ưc tái s! dng nhiu l$n). Thư vin gc c
a C/C++ trên Linux chính là
glibc, thư vin này cung cp cho ngưi dùng rt nhiu li g(i h thng. Các thư vin trên
Linux thưng ưc t chc dư
i dng t"nh (static library), thư vin chia s3 (shared
library) và ng (dynamic library - ging như DLL trên MS Windows). Thư vin
t"nh ưc liên kt c nh vào trong chương trình trong quá trình liên kt. Thư vin
dùng chung ưc np vào b nh
trong khi chương trình b)t $u thc hin và cho
phép các ng dng cùng chia s3 loi thư vin này. Thư vin liên kt ng ưc np
vào b nh
ch. khi nào chương trình g(i t
i.
7.3.4.1 Thư vin liên kt t)nh
Thư vin t"nh và các thư vin dùng chung (shared library) là các file cha các
file ưc g(i là các module ã ưc biên dch và có th s! dng li ưc. Chúng
ưc lưu tr dư
i mt nh dng c bit cùng v
i mt bng (hoc mt bn )
phc v cho quá trình liên kt và biên dch. Các thư vin liên kt t"nh có ph$n m
rng là .a. s! dng các module trong thư vin ta c$n thêm ph$n #include file tiêu
(header) vào trong chương trình ngun và khi liên kt (sau quá trình biên dch)
thì liên kt v
i thư vin ó. Dư
i ây là mt ví d v cách to và s! dng mt thư
viên liên kt t"nh. Có 2 ph$n trong ví d này, ph$n th nht là mã ngun cho thư
vin và ph$n th 2 cho chương trình s! dng thư vin. 1
5
/*
* liberr.h
*/
#ifndef _LIBERR_H
#define _LIBERR_H
#include <stdarg.h>
/* in ra mt thông báo li t
i vicg(i stderr và return hàm g(i */
void err_quit(const char *fmt, … );
/* in ra mt thông ip li cho logfile và tr v hàm g(i */
void log_ret(char *logfile, const char *fmt, …);
/* in ra mt thông ip li cho logfile và thoát */
void log_quit( char *logfile, const char *fmt , …);
/* in ra mt thông báo li và tr li hàm g(i */
void err_prn(const char *fmt, va_list ap, char *logfile);
#endif //_LIBERR_H
Mã ngu?n cho file liberr.h
#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);
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;
} 1
5
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, "
");
fflush(stdout);
if(logfile !=NULL){
if((plf=fopen(logfile, "a") ) != NULL){
fputs(buf, plf);
fclose(plf);
}else
fputs("failed to open log file
", stderr);
}else fputs(buf, stderr);
fflush(NULL);
return;
}
Mã ngu?n file liberr.c
to mt thư vin t"nh, bư
c $u tiên là dch on mã c
a form i tưng:
$gcc –H –c liberr.c –o liberr.o
tip theo:
$ar rcs liberr.a liberr.o
/*
* errtest.c
*/
#include <stdio.h>
#include <stdlib.h>
#include "liberr.h"
#define ERR_QUIT_SKIP 1
#define LOG_QUIT_SKIP 1
int main(void)
{ 1
5
FILE *pf;
fputs("Testing err_ret()...
", stdout);
if((pf = fopen("foo", "r")) == NULL)
err_ret("%s %s", "err_ret()", "failed to open foo");
fputs("Testing log_ret()...
", 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()...
", 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()...
", stdout);
if((pf = fopen("foo", "r")) == NULL)
log_ret("errtest.log", "%s %s", "log_quit()", "failed to open foo");
#endif /* LOG_QUIT_SKIP */
return EXIT_SUCCESS;
}
Mã ngu?n file testerr.c
Biên dch chương trình kim tra, ta s! dng dòng lnh:
$ gcc -g errtest.c -o errtest -L. -lerr
Tham s -L. ch. ra ưng d4n t
i thư mc cha file thư vin là thư mc hin thi, tham
s –lerr ch. rõ thư vin thích hp mà chúng ta mun liên kt. Sau khi dch ta có th kim tra
b0ng cách chy chương trình.
7.3.4.2 Thư vin dùng chung
Thư vin dùng chung có nhiu thun li hơn thư vin t"nh.Th nht, thư vin dùng
chung tn ít tài nguyên h thng, chúng s! dng ít không gian "a vì mã ngun thư vin
dùng chung không biên dch sang mã nh phân nhưng ưc liên kt và ưc dùng t ng
mi l$n dùng. Chúng s! dng ít b nh
h thng vì nhân chia s3 b nh
cho thư vin dùng
chung này và tt c các chương trình u s! dng chung min b nh
này. Th 2, thư vin
dùng chung nhanh hơn vi chúng ch. c$n np vào mt b nh
. Lí do cui cùng là mã ngun
trong thư vin dùng chung d* bo trì. Khi các li ưc s!a hay thêm vào các c tính,
ngưi dùng c$n s! dng thư vin nâng cp. i v
i thư vin t"nh, mi chương trình khi s!
dng thư vin phi biên dch li.
Trình liên kt (linker)/module ti (loader) ld.so liên kt tên biu tưng t
i thư vin dùng
chung mi l$n chy. Thư vin dùng chung có tên c bit (g(i là soname), bao gm tên thư
vin và phiên bn chính. Ví d: tên $y
c
a thư vin C trong h thng là libc.so.5.4.46,
tên thư vin là libc.so, tên phiên bn chính là 5, tên phiên bn ph là 4, 46 là mc vá (patch 1
5
level). Như vy, soname thư vin C là libc.5. Thư vin libc6 có soname là libc.so.6, s thay
i phiên bn chính là s thay i áng k thư vin. Phiên bn ph và patch level thay i
khi li ưc s!a nhưng soname không thay i và bn m
i có s thay khác bit áng k so
v
i bn c2.
Các chương trình ng dng liên kt da vào soname. Tin ích idconfig to mt biu
tưng liên kt t thư vin chu-n libc.so.5.4.46 t
i soname libc.5 và lưu tr thông tin này
trong /etc/ld.so.cache. Trong lúc chy, ld.so (c ph$n lưu tr, tìm soname thích hp và
np thư vin hin tai vào b nh
, kt ni hàm ng dng g(i t
i i tưng thích hp trong
thư vin.
Các phiên bn thư vin khác nhau nu:
Các giao din hàm $u ra thay i.
Các giao din hàm m
i ưc thêm.
Chc nng hot ng thay i so v
i c t ban $u
Cu trúc d liu $u ra thay i
Cu trúc d liu $u ra ưc thêm
duy trì tính tương thích c
a thư vin, c$n m bo các yêu c$u:
Không thêm vào nhng tên hàm ã có hoc thay i hot ng c
a nó
Ch. thêm vào cui cu trúc d liu ã có hoc làm cho chúng có tính tu5 ch(n hay
ưc khi to trong thư vin
Không m rng cu trúc d liu s! dng trong các mng
Xây dng thư vin dùng chung hơi khác so v
i thư vin t"nh, quá trình xây dng thư
vin dùng chung ưc minh ho dư
i ây:
Khi biên dch file i tưng, s! dng tùy ch(n -fpic c
a gcc nó s7 to ra mã c lp
v trí (position independence code) t ó có th liên kt hay s! dng bt c ch
nào
Không loi b file i tưng và không s! dng các tùy ch(n –fomit –frame -pointer
c
a gcc, vì nu không s7 nh hưng n quá trình g6 ri (debug)
S! dng tu5 ch(n -shared and –soname c
a gcc
S! dng tu5 ch(n –Wl c
a gcc truyn tham s t
i trình liên kt ld.
Thc hin quá trình liên kt da vào thư vin C, s! dng tu5 ch(n –l c
a gcc
Tr li thư vin x! li li , to thư vin dùng chung trư
c ht xây dng file i tưng:
$ gcc -fPiC -g -c liberr.c -o liberr.o
Tip theo liên kt thư vin:
$ gcc -g -shared -Wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc
Vì không th cài t thư vin này như thư vin h thng trong /usr hay /usr/lib chúng ta
c$n to 2 kiên kt, mt cho soname:
Và cho trình liên kt khi kt ni da vào liberr, s! dng –lerr:
$ ln -s liberr.so.1.0.0 liberr.so
Bây gi, d! dng thư vin dùng chung m
i chúng ta quay li chương trình kim tra,
chúng ta c$n hư
ng trình liên kt t
i thư vin nào s! dng và tìm nó âu, vì vy chúng
ta s7 s! dng tu5 ch(n –l và –L:
$ gcc -g errtest.c -o errtest -L. -lerr
Cui cùng chy chưong trình, chúng ta c$n ch. cho ld.so nơi tìm thư vin dùng
chung :
$ LD_LIBRARY_PATH=$(pwd) ./errtest
7.3.4.3 S dng i tng dùng chung theo cách ng1
6
Mt cách s! dng thư vin dùng chung là np chúng t ng mi khi chy không
ging như nh2ng thư vin liên kt và np mt cách t ng. Ta có th s! dng giao din dl
(dynamic loading) vì nó to s linh hot cho lp trình viên hay ngưi dùng.
Gi s! ta ang to mt ng dng s! lý ho. Trong ng dng, ta biu di*n d liu
mt dng không theo chu-n nhưng li thun tin cho ta x! lý, và ta c$n có nhu c$u chuyn
d liu ó ra các nh dng thông dng ã có (s lưng các nh dng này có th có hàng
trm loi) hoc (c d liu t các nh dng m
i này vào x! lý. gii quyt vn
này ta có th s! dng gii pháp là thư vin. Nhưng khi có thêm mt nh dng m
i thì ta li
phi biên dch li chương trình. ây li là mt iu không thích hp l)m. Kh nng s! dng
thư vin ng s7 giúp ta gii quyt vn va gp phi. Giao din dl cho phép to ra giao
din (các hàm) (c và vit chung không ph thuc vào nh dng c
a file nh. thêm
hoc s!a các nh dng c
a file nh ta ch. c$n vit thêm mt module m nhn chc
nng ó và báo cho chương trình ng dng bit là có thêm mt module m
i b0ng cách ch.
c$n thay i mt file cu hình trong mt thư mc xác nh nào ó.
Giao din dl (c2ng ơn thu$n ưc xây dng như mt thư vin - thư vin libdl) cha
các hàm ti (load), tìm kim và gii phóng (unload) các i tưng chia s3. s! dng
các hàm này ta thêm file <dlfcn.h> vào ph$n #include vào trong mã ngun, và khi dch thì
liên kt nó v
i thư vin libdl b0ng cách s! dng tham s và tên –ldl trong dòng lnh dch.
dl cung cp 4 hàm x! lí các công vic c$n thit ti, s! dng và gii phóng i tưng
dùng chung.
Truy cp i tng chia s)
truy cp mt i tưng chia s3, dùng hàm dlopen() có c t như sau:
void *dlopen(const char *filename, int flag);
dlopen() truy cp i tưng chia s3 b0ng filename và b0ng c. Filename có th là ưng
d4n $y
, tên file rút g(n hay NULL. Nu là NULL dlopen() m chương trình ang chy,
ó là chương trình c
a bn, nu filename là ưng d4n dlopen() m file ó, nu là tên rút
g(n dlopen() s7 tìm trong v trí sau tìm file:
$LD_ELF_LiBRARY_PATH,
$LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, và /lib.
C có th là RTLD_LAZY, có ngh"a là các kí hiu (symbol) hay tên hàm t i tưng
truy cp s7 ưc tìm mi khi chúng ưc g(i, hoc c có th là RTLD_NOW, có ngh"a tt
c kí hiu t i tưng truy cp s7 ưc tìm trư
c khi hàm dlopen() tr v. dlopen() tr iu
khin t
i i tưng truy nhâp nu nó tìm thy t filename hay tr v giá tr NULL nu
không tìm thy.
S dng i tng chia s)
Trư
c khi có th s! dng mã ngun trong thư vin ta phi bit ang tìm cái gì và tìm
âu. Hàm dlsym() s7 giúp iu ó:
void *dlsym(void *handle, char *symbol);
dlsym() tìm kí hiu hay tên hàm trong truy cp và tr li con tr kiu void t
i i tưng
hay NULL nu không thành công.
Kim tra li
Hàm dlerror() s7 giúp ta kim tra li khi s! dng i tưng truy cp ng:
const char *dlerror(void);
Nu mt trong các hàm li, dlerror() tr v thông báo chi tit li và gán giá tr NULL
cho ph$n b li.
Gi
i phóng i tng chia s)1
6
bo v tài nguyên h thng c bit b nh
, khi ta s! dng xong module trong mt
i tưng chia s3, thì gii phóng chúng. Hàm dlclose() s7 óng i tưng chia s3:
int dlclose(void *handle);
S dng giao din dl
minh ho cách s! dng dl,chúng ta quay li thư vin x! lí li, s! dng mt chương
trình khác như sau:
/*
* 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
", dlerror());
exit(EXIT_FAILURE);
}
dlerror();
errfcn = dlsym(handle, "err_ret");
if((errmsg = dlerror()) != NULL) {
fprintf(stderr, "Didn't find err_ret(): %s
", errmsg);
exit(EXIT_FAILURE);
}
if((pf = fopen("foobar", "r")) == NULL)
errfcn("couldn't open foobar");
dlclose(handle);
return EXIT_SUCCESS;
}
Mã ngu?n chương trình dltest.c
Biên dch ví d trên b0ng lnh:
$ gcc -g -Wall dltest.c -o dltest -ldl
Như tacó th thy, chúng ta không liên kt da vào liberr hay liberr.h trong mã ngun.
Tt c truy cp t
i liberr.so thông qua dl. Chy chương trình b0ng cách sau:
$ LD_LIBRARY_PATH=$(pwd) ./dltest
Nu thành công thì ta nhn ưc kt qu như sau:
couldn’t open foobar: No such file or directory 1
6
7.3.5 Các công c cho thư vin
Công c nm
Lnh nm lit kê toàn b các tên hàm (symbol) ưc mã hoá trong file i tưng
(object) và nh phân (binary). Lnh nm s! dng cú pháp sau:
nm [options] file
Lênh nm lit kê nhng tên hàm cha trong file. Bng dư
i lit kê các tu5 ch(n c
a lnh
nm:
Tu/ chn Miêu t
-C| -demangle Chuyn tên ký t vào tên mc ngưi dùng cho d* (c.
-s|-print-armap
Khi s! dng các file lưu tr (ph$n m rng là “.a”), in ra các
ch. s c
a module cha hàm ó.
-u| -undefined-only
Ch. ưa ra các hàm không ưc nh ngh"a trong file này, tc
là các hàm ưc nh ngh"a mt file khác.
- l | -line-numbers
S! dng thông tin g6 ri in ra s dòng nơi hàm ưc nh
ngh"a.
Các tu* chn ca lnh nm
Công c ar
Lnh ar s! dng cú pháp sau:
ar {dmpqrtx} [thành viên] file
Lnh ar to, ch.nh s!a và trích các file lưu tr. Nó thưng ưc s! dng to các thư
vin t"nh- nhng file mà cha mt hoc nhiu file i tưng cha các chương trình con
thưng ưc s! dng (subrountine) nh dng tin biên dch (precompiled format), lnh
ar c2ng to và duy trì mt bng mà tham chiu qua tên ký t t
i các thành viên mà trong ó
chúng ưc nh ngh"a. Chi tit c
a lnh này ã ưc trình bày trong chương trư
c.
Công c idd
Lnh nm lit kê các hàm ưc nh ngh"a trong mt file i tưng, nhưng tr khi ta bit
nhng gì thư vin nh ngh"a nhng hàm nào. Lnh idd hu ích hơn nhiu. idd lit kê các
thư vin ưc chia s3 mà mt chương trình yêu c$u mà chy. Cú pháp c
a nó là:
idd [options] file
Lnh idd in ra tên c
a thư vin chia s3 mà file này s! dng. Ví d: chương trình thư
“client mutt” c$n 5 thư vin chia s3, như ưc minh ho sau ây:
$ idd /usr/bin/mutt
libnsl.so.1 => /lib/libns1.so.1 (0x40019000)
libslang.so.1 => /usr/lib/libslang.so.1 (0x4002e000)
libm.so.6 => /lib/libm/so.6 (0x40072000)
libc.so.6 => /lib/libc.so.6 (0x4008f000)
/lib/id-linux.so.2 => /lib/id-Linux.so.2 (0x4000000)
Tìm hi u lnh idconfig
Lnh idconfig s! dng cú pháp sau:
ldconfig [tu* chn] [libs] 1
6
Lnh ldconfig xác nh rõ các liên kt ng (liên kt khi chy) ưc yêu c$u bi thư
vin ưc chia s3 n0m trong các thư mc /usr/lib và /lib. Dư
i ây là các tùy ch(n c
a lnh
này:
Các tu/ chn Các miêu t
-p
ơn thu$n ch. in ra ni dung c
a /etc/ld.so.cache, mt danh
sách hin thi các thư vin ưc chia s3 mà ld.so bit.
-v
Cp nht /etc/ld.so.cache , lit kê s phiên bn c
a mi thư
vin, quét các thư mc và bt k5 liên kt mà ưc to ra hoc
cp nht.
Các tuA ch
n ca hàm idconfig
Bi
n môi trng và file cu hình.
Chương trình ti (loader) và trình liên kt (linker) ld.so s! dng 2 bin môi trưng. Bin
th nht là $LD_LIBRARY, cha danh sách các thư mc cha các file thư vin ưc phân
cách bi du hai chm tìm ra các thư vin c$n thit khi chy. Nó ging như bin môi
trưng $PATH. Bin môi trưng th hai là $LD_PRELOAD, mt danh sách các thư vin
ưc ngưi dùng thêm vào ưc phân cách nhau bi khong trng (space).
ld.so c2ng cho phép s! dng 2 file cu hình mà có cùng mc ích v
i bin môi trưng
ưc cp trên. File /etc/ld.so.conf cha mt danh sách các thư mc mà chương trình
ti và trình liên kt (loader/linker) nên tìm kim các thư vin chia s3 bên cnh /usr/lib và
/lib. /etc/ld.so.preload cha danh sách các file thư vin ưc phân cách b0ng mt khong
trng các thư vin này là thư vin ngưi dùng to ra.1
6
TÀI LIU THAM KH
O
……1
6
CHÚ THÍCH MT STHU
T NG
Vn ch(n thut ng ting Vit cho các thut ng gc ting Anh luôn là vn c$n
ưc tho lun vic ch(n la như vy là thích hp. Dù cho trong tài liu này, nhiu thut
ng ting Vit ã ưc s! dng mt cách ph #bin nhưng tài liu c2ng lit kê vào bng chú
thích dư
i ây v
i mc ích giúp bn (c thun tin trong tra cu và liên h. Trong bng
chú thích, mi thut ng ting Vit dùng trong tài liu s7 ưc +'m theo thut ng ting
Anh gc và sau ó có th là mt li chú thích ng)n. Bng chú thích là mt c g)ng nh
nh0m h tr s! dng tài liu này hiu qu hơn và phm vi s! dng c
a nó gi
i hn trong tài
liu.
Ting Vit Ting Anh Gii thích ngn
File File Tp hp d liu có t #chc theo mt mc ích s!
dng: on vn bn, mt chương trình ngun, mt
tp hp d liu ... Còn ưc g(i là tp hay g(i theo
cách gi nguyên gc ting Anh là File.
Tên file Filename Tên g(i c
a file (file thưng, thư mc, file c bit
...) ưc dùng xác nh file.
Thư mc Directory Nơi cha mt danh sách các file trong h thng
File, ưc Linux coi như mt dng file c bit.
H thng file File system H thng toàn b các file có trong h iu hành
Linux (và UNIX nói chung).
Lnh Command Linux cho phép ngưi s! dng dùng lnh trình
bày mt "thao tác" yêu c$u h thng thc hin.
Tin ích (còn
g(i là lnh
thưng trc)
Utility Lnh có s1n trong Linux (trong shell hoc ưc
t ti nhng thư mc theo quy nh c
a Linux).
Dòng lnh Command line Dòng lnh bao gm mt hoc mt s lnh trong
mt l$n yêu c$u c
a ngưi dùng. Kt thúc dòng
lnh là du xung dòng.
ng nhp Login Th
tc b)t $u mt phiên làm vic c
a mt ngưi
s! dng. Login là lnh cho phép ng nhp. Th
tc logout kt thúc phiên làm vic.
Ngưi dùng User Ngưi s! dng Linux cho công vic c
a mình.
Siêu ngưi
dùng (ngưi
dùng ti
cao/ngưi
qun tr)
Superuser Linux quy nh có mt siêu ngưi dùng thc hin
có quyn hn ti cao trong h thng bao gm các
lnh qun tr h thng. V
i mt s lnh Linux
(thêm, b
t ngưi dùng ...) thì ch. siêu ngưi dùng
ưc phép s! dng.
Con tr cursor im ánh du trên màn hình ánh du v trí hin
thi hin thông tin. Trong trình son tho vn
bn, nó là v trí son tho hin thi trong vn bn
H iu hành Operating
System (OS)
B chương trình bao gm các file trên "a (bng)
t có chc nng qun lý tài nguyên máy tính và
óng vai trò là "máy tính o" i v
i ngưi dùng. 1
6
H iu hành
a chương
trình
Multiprogramming OS
H iu hành hot ng theo cách thc trong b
nh
ng thi có nhiu chương trình ưc "bình
/ng" trong phân phi tài nguyên (CPU, b nh
).
H iu hành
a ngưi dùng
Multi-users OS Mi ngưi dùng s! dng mt trm cui ưc kt
ni máy tính trc tip thc hin công vic trên
máy tính (có a chương trình).
Nhân Kernel B phn ct lõi nht c
a Linux, thưng trc
thc hin các chc nng cơ bn c
a h iu hành
(còn ưc g(i là lõi)
Quá trình Process Mt l$n thc hin c
a mt chương trình (Còn ưc
g(i là tin trình). Mt s h iu hành g(i là bài
toán (task).
Chương trình
gii thích lnh
Command
Comment
Program
(CCP)
Mt chương trình thuc h iu hành có chc nng
tip nhn, phân tích dòng lnh ngưi dùng lnh
ưc thc hin. Trong Linux là shell, trong MSDOS là COMMAND.COM.
ng nhp Login Th
tc mà mt ngưi dùng c$n phi thc hin khi
b)t $u phiên làm vic v
i Linux. Th
tc này yêu
c$u ngưi dùng ưa vào tên kí hiu và mt kh-u ã
ưc ng kí trong h thng.
ng xut Logout Th
tc mà mt ngưi dùng c$n phi thc hin khi
kt thúc phiên làm vic v
i Linux. Trên máy tính
cá nhân, sau khi ng xut s7 kéo theo mt ng
nhp m
i.
Du nh)c shell Còn g(i là du nh)c dòng lnh
Kí hiu mô t
nhóm
wildcards Kí hiu ưc dùng xác nh mt nhóm file (ví
d *, ?, [] và [] v
i -). Còn ưc g(i là kí hiu thay
th.
Cài t Linux Installation
Linux
Quá trình to ra h iu hành Linux lên máy tính
s! dng 1
6
PH LC A. QUÁ TRÌNH CÀI T REDHAT-LINUX
Linux s! dng ph$n cng c
a máy PC hiu qu hơn MS-DOS, Window hay WinNT, và
do ó kh nng chu các li do cu hình sai ph$n cng s7 kém hơn. Chúng ta c$n làm mt
s vic trư
c khi b)t $u cài t gim thiu các kh nng không th cài t tip khi gp
phi vn này.
Trư
c tiên, hãy c g)ng tìm càng nhiu càng tt các tài liu v ph$n cng máy PC mà
mình nh cài, như mainboard, card #ho, màn hình, modem... và chúng nơi có th
tìm thy và tra cu d*#dàng.
Tip theo, tìm hiu thông tin v ph$n cng máy tính c
a và tp hp chúng li. Chúng ta
có th làm iu này khi s! dng chc nng in cu hình máy c
a mt s tin ích như MSD
trong DOS, hoc System Information trong Windows. Nhng thông tin chính xác v bàn
phím, chut, màn hình... s7 giúp rt nhiu trong quá trình cu hình X sau này.
Sau ó, kim tra ph$n cng máy tính c
a tìm ra các vn nu có, bi chúng có th
làm quá trình cài t Linux b treo. Sau ây là mt s vn thưng gp.
Mt h thng DOS hay Windows có th qun lý #"a IDE và CDROM c khi jumper
master/slave không ưc t úng. Trong khi Linux không gii quyt ưc vn này. Vì
vy nu có nghi ng hãy xem li các jumper này ã ưc t úng chưa.
Mt s thit b ngoi vi c$n có nhng tin ích t cu hình cho chúng khi máy khi
ng. Các thit b như card mng, CD-ROM, card âm thanh hoc bng t có th gp phi
vn này. Nu trưng hp này xy ra, có th s! dng lnh t cu hình li ti du nh)c
khi ng.
Mt s h iu hành khác cho phép chut dng bus chia s3 mt IRQ v
i các thit b
khác, trong khi Linux không h tr iu này. Nu th! làm iu ó, h thng có th b treo.
Nên liên h v
i ngưi dùng Linux có kinh nghim ưc gii áp nhng vư
ng m)c.
C$n tin hành công vic chu-n b thi gian cho vic cài t. Quá trình cài t có th kéo
dài mt ting hoc hơn v
i nhng h thng ch. cài Linux, hoc lên t
i ba ting v
i h thng
c$n chy nhiu h iu hành khác nhau (thưng v
i nhng h thng này kh nng b treo
máy hoc có li khi cài t s7 cao hơn).
Ph lc này gi
i thiu cách cài t hai phiên bn RedHat là 6.2 và 7.1 nh0m cung cp
tính a dng khi cài t, to iu kin cho ngưi s! dng.
AA. Cài
t phiên bn RedHat 6.2
AA.1. To
)a mm khi
ng
Bư
c này ch. c$n thit khi không th khi ng t# #CD-ROM.
Nu mua Red Hat Linux trc tip t Red Hat Linux s7 nhn +'m "a khi ng. Còn
nu mua bn copy t công ty th 3, ta phi t to "a khi ng và cách to là như sau:
Trong Windows, ưa "a mm vào . Bm phím phi chut vào desktop to folder
i, t tên Bootdisk ri m folder này.
ưa "a CD Red Hat vào #CD. M My Computer, nhn vào #CD, m folder có tên
Dosutils, nhn vào file Rawrite, bm phím phi chut và kéo nó vào Bootdisk. Ch(n Copy
here t menu xut hin.
óng c!a s # Dosutils. M folder Images trong CD-ROM. Chép file Boot.img vào
folder Bootdisk, ging như ã làm v
i Rawrite. 1
6
Ch(n Start.Run gõ vào Command trong hp hi thoi, nhn OK. Mt c!a s #xut hin
v
i du nh)c DOS “C:\Windows\Desktop”. Gõ vào cd bootdisk, nhn Enter.
Khi ã hoàn tt vic to "a mm khi ng: gõ rawrite ti du nh)c DOS. Nhp
boot.img là tên file mun copy, nhn Enter. Gõ a:\ (tên #"a mm), và nhn Enter khi ưc
hi #ích.
AA.2. Phân vùng li &
)a DOS/Windows hin thi
Trong h$u ht các h thng ưc s! dng, # cng thưng ưc phân vùng cho MSDOS, OS/2,... C$n thay i kích thư
c, s)p xp li các phân vùng này to ch trng cho
vic cài t Linux.
Cách tt nht làm vic này là dùng mt ph$n mm chuyên dng, ch/ng hn như ph$n
mm PQMagic c
a Power Quest. Dùng ph$n mm này, có th di chuyn / thay i kích
thư
c / thêm / xoá / format các phân vùng trong #cng mt cách d*#dàng v
i giao din #
ho. Còn vic dùng FDisk c
a MS-DOS thì cc k5 vt v, mun di chuyn / thay i kích
thư
c c
a mt phân vùng nào ó, $u tiên phi backup tt c các d liu trong phân vùng,
xoá phân vùng ó (vic này s7 làm mt các thông tin v d liu trong phân vùng), tip theo
là to mt phân vùng m
i v
i kích thư
c mong mun, cui cùng là restore li toàn b d
liu ã backup vào phân vùng m
i to này! Tt nht dùng mt ph$n mm mi*n phí cc
mnh như PQMagic.
AA.3. Các bưc cài
t (bn RedHat 6.2 và khi
ng t" CD-ROM)
ưa "a CDROM Redhat 6.2 vào #CD, sau ó trong BIOS SETUP ta t ch khi
ng t# #CD. Khi khi ng li máy, quá trình s7 ưc boot t CDROM. Sau ây là chi
tit quá trình mt "a khi ng cài t tin hành.
L!a chn ch
cài
t
H thng ưa ra các ch cho chúng ta la ch(n :
Gõ Enter ch(n ch cài t #h(a.
Gõ “text” + Enter ch(n ch Text.
Gõ “expert” + Enter ch(n ch Expert. Ch(n ch này có ngh"a ta t
ch(n cu hình ph$n cng còn hai ch trên s7 t ng detect.
Gõ “linux ks” + Enter ch(n ch cài t t mng hoc t "a mm.
L!a chn ngôn ng hi n th.
H thng ưa ra rt nhiu ngôn ng cho phép la ch(n, ví d như Czech, English,
French, German.... Thưng ch(n English.
L!a chn cu hình bàn phím
Linux òi hi la ch(n cu hình bàn phím t các mô hình sau:
Model :
Brazilian ABNT 2
Dell
Generic.
Microsoft.
................. 1
6
Ta s7 la ch(n bàn phím tương thích theo các dng trên, nu không rõ bàn phím thuc
loi nào thì nên ch(n kiu Generic.
Layout: Ngôn ng s! dng gõ (khong 24 ngôn ng)
Variant: Có 2 ch là.
Eliminate Dead Keys (khi chúng ta s! dng các kí t c bit).
None (kiu mc nh).
Test: chúng ta s7 gõ các phím kim tra th!.
Chn cu hình chut
H thng ưa ra 10 loi chut la ch(n loi tương thích v
i chut c
a mình, nu
không bit rõ chut thuc loi nào thì nên ch(n kiu Generic. Và phi ch(n úng kiu chut
là PS/2 hay Serial nu không thì s7 không s! dng ưc chut.
H thng
ưa ra li gii thiu v bn Red Hat
ang cài
t.
L!a chn ki u cài
t.
Install (cài m
i) gm có các ch :
GNome Workstation.
KDE Workstation.
Server
Custom
Upgrade (Nâng cp)
• Tu/ chn cài
t WorkStation
Nu la ch(n kiu cài m
i là GNome Workstation hoc KDE Workstation thì h thng
s7 cài t X Window System và chương trình qun lý Desktop theo dng GNome hoc
KDE. Nu chưa tho l)m v Linux thì hãy s! dng tu5 ch(n này, nó s7 b qua nhiu bư
c.
La ch(n Custom là ch. phù hp v
i ngưi ã quen v
i Linux. C hai la ch(n
WorkStation này s7 chu-n b các vic sau:
Nu "a cng c
a chưa h ưc phân vùng trư
c ó, Linux s7 xoá ht tt c các phân
vùng trên các #"a cng và cài t các phân vùng sau:
+ Mt phân vùng swap kích thư
c 64MB
+ Mt phân vùng root (ưc mount là / ) cha ng m(i file ưc cài t.
Chú ý là chúng ta s7 phi c$n ti thiu 600MB #cng tin hành cài t theo kiu
WorkStattion.
Nu h thng ã ưc cài s1n Windows (Windows 3.1/95/98), kiu cài t WorkStation
s7 t ng cu hình h thng khi ng ch song song s! dng LILO.
• Tu/ chn cài
t Server
Nu la ch(n kiu cài t m
i là Server thì h thng s7 cài t theo kiu máy ch
Linux
và c2ng như kiu WorkStation, tu5 ch(n này s7 tránh phi cu hình nhiu thành ph$n ph$n
cng. Và khi cài t theo kiu này, nên c-n thn vì h thng s7 xoá tt c các partition trên 1
7
tt c các #"a. Vì vy, ch ch
n kiu cài t Server nu chBc chBn trong #"cng không có
mt d liu gì c. Sau ây là các bư
c mà kiu này tin hành phân vùng #"a:
+ To mt phân vùng Swap kích thư
c 64MB.
+ To mt phân vùng kích thư
c 256MB v
i mount point là “/”.
+ To mt phân vùng kích thư
c ti thiu 512MB ưc mount là “/usr”.
+ To mt phân vùng ti thiu 215MB ưc mount là “/home”.
+ To mt phân vùng kích thư
c 256MB ưc mount là “/var”.
Như vy chúng ta phi c$n ti thiu 1.6BG# #cng tin hành cài t theo kiu Server.
• Tu/ chn cài
t Custom
i v
i kiu Custom h thng s7 cho phép t ch(n các thành ph$n và cu hình ph$n
cng cài t mt cách $y
nht, tuy nhiên c2ng ri r)m và phc tp nht. T bư
c 7
tr i, ch. gi
i thiu v tu5 ch(n cài t này. Sau ây s7 gi
i thiu t ng quát mt s bư
c
mà quá trình này thit t:
To các phân vùng: c$n phi ch. rõ Redhat s7 ưc cài t vào phân vùng nào.
Format các phân vùng: Nhng phân vùng m
i ưc thêm vào s7 phi ưc format li
theo nh dng Linux filesystem. Tuy nhiên c2ng có th la ch(n phân vùng nào c$n phi
format.
L!a chn và cài
t các gói phn mm
i 01m: Thc hin sau khi ã phân vùng "a
cng.
Thit
t cu hình LILO: có th la ch(n cài t LILO vào Master Boot Record hoc
Sector $u tiên c
a phân vùng Root hoc không la ch(n cài LILO.
Xác
nh các Partition
$u tiên c$n xác nh các im kích hot (mount point) cho mt hoc nhiu partition.
Trong bng partition có các thông tin sau:
Mount Point: Xác nh partition nào s7 ưc kích hot khi Linux ưc cài t và chy. Nu
partition tn ti và có nhãn là not set thì ta xác nh mount point b0ng cách kích chut vào nút
Edit hoc double - click trên partition.
Và h thng khuyên chúng ta nên to các partition theo cách sau:
Mt swap partition (ít nht 16MB) - dùng h tr b nh
o. Nu máy chúng ta có
16Mb Ram hoc ít hơn thì b)t buc chúng ta phi to swap partition. Thm chí nu có
nhiu b nh
hơn, chúng ta c2ng nên to swap partition. Kích thư
c ti thiu c
a swap
partition = max |b nh
Ram và 16Mb|.
Mt boot partition (ti a 16Mb) - cha nhân c
a HH cùng v
i các file trong quá
trình khi ng.
Mt root partition (t 500Mb - 1Gb) là nơi cha thư mc gc và tt c các file (tr các
file trong boot partition). V
i 500Mb cho phép cài theo kiu Workstation và v
i 1Gb cho
phép cài m(i th. 1
7
Device:
Hin tên các device partition (Ví d: hda2 i din cho partition th 2 trên # cng
primary).
Request: Cho bit không gian mà partition hin có. Nu mun thay i kích thư
c thì chúng ta
phi xoá partition ó và to li b0ng cách dùng nút “Add”.
Actual: Cho bit không gian mà partition ang s! dng.
Type: Cho bit kiu c
a partition.
Và chúng ta có th add, edit, và delete các partition b0ng cách kích chut vào các nút
ó. Chc nng c
a tng nút là:
Add: Dùng to mt partition m
i, gm có các thông tin sau:
Mount Point: gm có các kiu
/ :
/boot :
/usr :
/home :
/var :
/opt :
/tmp :
/usr/local :
Size (Megs): ch(n kích thư
c c
a partition.
Grow to fill disk: nu ch(n thì partition này s7 s! dng toàn b vùng "a trng còn li.
Partition type: gm có các kiu
Linux Swap: ch(n kiu này nu chúng ta mun to partition swap.
Linux Native : ch(n kiu này nu chúng ta mun to partition root.
Linux RAID :
DOS 16-bit < 32 :
DOS 16-bit > 32 :
Edit: Dùng thay i mount point c
a partition.
Delete: Dùng xoá partition.
Reset: Khôi phc li nhng thay i.
Make RAID Device: S! dng Make Raid device ch. khi ã có kinh nghim v RAID.
Drive Summaries: hin th thông tin v cu hình "a.
Chn Partition
Format
Gm có các thông tin: 1
7
Partition mun Format.
La ch(n “Check for bad blocks while formating”
Ch(n “Check for bad blocks while formating” tìm ra nhng bad bocks trên "a sau
ó s7 ánh du li nh0m không ghi d liu lên chúng na.
Chn cu hình LILO (Linux Loader)
ch(n cu hình LILO, phi không t du kim “Do not install LILO”. Nu #Linux
Native có tên là /dev/hda5 thì màn hình s7 hin ra cho phép cài t chương trình np Linux
vào Master Boot Record (MBR) hoc First Sector of boot partition (sector $u tiên c
a
phân vùng khi ng). Nói chung là nên ch(n Master Boot Record có th khi ng t
nhiu .
Nu có các #"a SCSI hoc "a cng c
a h tr LBA thì c$n phi ánh du kim vào
mc “Use Linear Mode”.
Kernel Parameters: Các tham s s7 dùng bt c khi nào nhân ưc khi ng.
Bng dư
i s7 cho bit thông tin v các phân vùng: tên phân vùng, loi phân vùng, có
phi là phân vùng khi ng không ?. c$n ch(n phân vùng khi ng là phân vùng có tên
Linux (thưng là phân vùng mà Redhat s7 t mc nh và chúng ta không phi thay i
gì). Nu ã có phân vùng tên là ‘dos’, chính là phân vùng trư
c khi cài t thì sau này mi
khi khi ng máy tính, chúng ta có th ch(n phân vùng này khi ng mt cách bình
thưng b0ng cách gõ tên phân vùng ó ti du nh)c “LILO Boot” trong quá trình khi
ng. Cho phép thay i tên c
a phân vùng tương ng trong ph$n “Boot Label”.
Tu5 ch(n “Create boot disk”: ch. c$n ch(n mc này nu không cài LILO hoc cài LILO
nhưng không cài vào MBR. Chú ý là nu không cài LILO thì b)t buc phi ch(n mc này
khi ng t "a mm.
Chn múi gi
Nu cài trong ch #h(a, màn hình mc nh s7 hin ra mt bn #th gi
i. Có th
thay i bn #theo các kiu sau:
World (bn #th gi
North American (B)c M9)
South American (Nam M9)
Pacific Rim (Châu úc)
Europe (Châu Âu)
Africa (Châu Phi)
Asia (Châu á)
i v
i Vit Nam ta thì ch(n Asia/Saigon (trong "a CD cài t LinuxVN thì mc
ch(n là Asia/Hanoi).
Có th ch(n múi gi theo kiu UTC Offset (Universal Time Coordinated), tc là kiu
GMT +/- lch. Nu h thng gi s ti s! dng UTC thì ch(n “System clock uses
UTC”. 1
7
Thit
t cu hình Account (ngưi s
dng)
Như ã bit Linux k tha t Unix, do ó nó c2ng h tr ch a ngưi dùng như
Unix. Bn cài t Redhat cho phép t luôn cu hình ngưi dùng ngay trong quá trình cài
t.
$u tiên chúng ta c$n t mt kh-u cho ngưi dùng Root trong ph$n “Root Password”
và xác nhn li mt kh-u này trong mc “Confirm”. Chú ý là mc nh tt c các mt kh-u
u phi ti thiu 6 ký t.
Sau ó ta có th thêm ngay mt s ngưi dùng $u tiên: Tên t trong “Account
Name”, gõ password trong mc “Password” và xác nhn mt kh-u trong mc Password
(confirm) ngay bên cnh, tên $y
c
a ngưi dùng trong mc “Full Name”. Sau ó gõ
phím “Add” th thêm ngưi dùng m
i vào danh sách các ngưi dùng. Phím “Edit” cho
phép hin th ngưi dùng hin hành trong bng danh sách ngưi dùng, phím “Delete”
xoá ngưi dùng hin thi.
Thit
t cu hình quyn hn (Authentication Configuration)
Thc hin các mc sau:
Enable MD5 Password: cách mã hoá này cho phép mt kh-u dài t
i 256 ký t.
Shadow Password: ây là cách bo mt ti a cho mt kh-u, file cha mt kh-u
/etc/passwd s7 ưc thay b0ng etc/shadow và file này ch. ưc phép hin th bi ngưi
dùng Root. Ch(n c 2 mc này s7 tng tính bo mt c
a h thng.
Enable NIS: ch(n mc này nu máy tính kt ni vào mng NIS (Network Information
System) cho phép mt nhóm máy tính trong vùng Network Information Service v
i cùng
mt password.
NIS domain: tên c
a domain hoc nhóm máy tính cha h thng.
NIS server: cho phép máy tính dùng mt NIS server rêng, hơn là mt thông ip rng
rãi trong mng LAN.
L!a chn các gói phn mm cài
t (Pakage Selection)
Có rt nhiu mc ch(n s7 nói chi tit ph$n sau như: Printer Support, h thng X
Window, GNome, KDE, DOS / Window Connectivity,.... La ch(n “Everything” s7 cài
$y
tt c m(i th, do ó c$n phi la ch(n các gói ph$n mm phù hp nu #Linux
Native / không
.
Các packages có thưc ch
n cài t bao g?m:
Printer Support: Nu ưc cài Linux s7 c g)ng nhn máy in hoc cho phép ngưi
dùng thit lp các thông s v máy in c
a h thng.
X Window System: Môi trưng #h(a nguyên A&O,#trong Linux, ưc g(i t)t là X. X
không phi là mt giao din #h(a ngưi dùng thc s mà ch. là mt h c!a s #cùng v
các công c mt giao din #h(a ngưi dùng có th ưc xây dng t ó.
GNOME: Là mt giao din #h(a ngưi dùng 8p hơn, tin li và thân thin hơn X,
GNOME c2ng cung cp mt giao din lp trình mc cao hơn to ra các ng dng v
giao din kiu GNOME. 1
7
KDE: KDE là mt giao din #h(a ngưi dùng ưc phát trin da trên thư vin giao
din #h(a C++ Qt. Thư vin giao din này h tr UNIX, Windows và c Mac. Do ưc
phát trin trư
c GNOME nên KDE có nhiu im tt hơn.
Mail/ WWW/ News tools: B công c dùng g!i, nhn thư tín in t!, duyt Web và
(c các bn tin.
Dos/ Windows Connectivity: B gi lp DOS và Windows cho phép ngưi dùng chy
các ng dng DOS và Windows ngay trong Linux.
Graphic Manupulation: Các tin ích #h(a như Gview, Imgedit... cho phép trình di*n
và x! lý các file hình nh.
Games: Mt s chương trình trò chơi gii trí trong ch text hoc X Window.
Multimedia Support: Các chương trình h tr a phương tin, như nghe midi, wave,
mp3... iu khin joystick, thu âm ...
Dialup WorkStation: Cho phép ngưi dùng s! dng modem và quay s s! dng
các dch v qua ưng in thoi như g!i nhn mail, web...
News Server: Cung cp dch v máy ch
news, cho phép máy tính tr thành mt server
bn tin.
NFS Server: Máy ch
h thng file mng NFS (Network File System).
SMB Server: Máy ch
h thng file mng Samba.
IPX/ Netware Connectivity: Giúp h thng chy Linux giao tip v
i các máy tính
khác qua mng Netware s! dng giao thc IPX.
Anonymous FTP Server: Cài t package này giúp máy tính tr thành mt máy ch
FTP (File Transfer Protocol), có th cung cp dch v truyn file cho các máy khác trong
mng.
Web Server: Cài t package này giúp máy tính tr thành mt máy ch
Web, có th
cung cp dch v web cho các máy khác trong mng.
DNS Name Server: Cài t package này giúp máy tính tr thành mt máy ch
DNS, có
th cung cp dch v t tên vùng cho các máy khác trong mng.
Postgres (SQL) Server: Cài t package này giúp máy tính tr thành mt máy ch
SQL, có th cung cp dch v truy vn d liu cho các máy khác trong mng.
Network Management Workstation: Giúp máy tính trm làm vic iu hành tr thành
mt máy ch
SQL, có th cung cp dch v truy vn d liu cho các máy khác trong mng.
TeX Document Formatting: H son tho và nh dng vn bn dư
i dng Tex.
Emacs: H son tho vn bn ơn gin.
Development: Các b biên dch, g6#ri, công c phát trin ph$n mm ... dư
i các ngôn
ng như Perl, C, C++. Mã ngun c
a các chương trình trong Linux.
Kernel Development: Mã ngun nhân Linux và b công c phát trin dành cho phát
trin nhân Linux. 1
7
Extra Documentation: M(i tài liu v Linux có trong "a CD, dư
i nhng ngôn ng
như Anh, Pháp, Italia, Tây Ban Nha...
Utilities: Các tin ích cho Linux.
Thit
t cu hình X (X Configuration)
Ph$n này s7 t cu hình card màn hình th hin khi chúng ta s! dng các h thng
X Window. Ví d sau ây là mt s thông s hin th khi chúng ta cài t:
Video Card: ATI Mach64
Video Ram: 4096KB
X server: Mach64
Monitor: 14” COLOR
quét ngang: 30 - 54 Khz
quét d
c: 50 - 120 Hz
ây là ph$n khá quan tr(ng, nu card màn hình c
a không phi là dng chu-n thì s7
phi cài b0ng tay, mt công vic khá mt mi.
Test this Configuration: n vào ây kim tra tính nng # ho có hot ng tt
không, nu màn hình c
a qua khi cuc kim tra này thì có th coi là ã thành công t
90% quá trình cài t Redhat.
Customize X Configuration: Nu ch(n mc này thì ghi gõ Next, Redhat s7 cho mt
bng cho thit lp b0ng tay các ch #h(a 8 bits, 16 bits, 32 bits; các ch phân gii
640x480, 800x600, 1024x786, ... Chú ý là khi ch(n phân gii nào thì luôn luôn gõ phím
“Test this Configuration” m bo màn hình c
a luôn hin th úng.
Bt
u quá trình copy t"
)a CD vào &cng
Bư
c cui cùng này s7 thc hin các bư
c format #Linux Native / (nu ã ch(n ph$n
trư
c), format #Linux Swap, và sau ó là gii nén tt c các gói ph$n mm mà ã la ch(n
trong bư
c th 13 vào #cng. Quá trình này mt khong 10 phút n 20 phút tu5 theo s
lưng các gói ch(n.
Kt thúc quá trình này, gõ “Exit”, khi ng li máy, nh
tháo "a CD Redhat ra khi #
b)t $u khi ng t# #cng.
AA.4. Các hn ch v phn cng
i vi Linux
Các b vi x
lý mà Linux h( tr#
Linux ch
yu chy trên các máy PC th h 386, 486, 586 s! dng các ph$n cng h( vi
x! lý 80386. Vic cài t trên các ph$n cng khác thì v4n ang trong giai on thit k.
Có th chy th! Linux b0ng mt máy v
i ph$n cng ti thiu là: b vi x! lý Intel 386,
486, 586, 4MB RAM và mt #mm. D" nhiên là càng nhiu RAM thì càng tt.
Linux h tr VESA Local Bus và PCI. 1
7
Linux c2ng h tr ph$n l
n cho các #cng chu-n ESDI và MCA (bus c quyn c
a
IBM).
Linux c2ng có th chy trên các laptop h( 386.
Có mt cách cài t Linux trên 8086 ưc bit n dư
i tên g(i ELKS (Embeddable
Linux Kernel Subset). ây là mt nhân Linux 16 bit ưc ch
yu s! dng trong các h
thng nhúng. Thc ra phiên bn Linux hin nay không th chy ưc $y
trên 8086 hay
286 bi vì nhng b vi x! lý này không h tr cho vic chuyn i tác v c2ng như qun lý
b nh
.
Linux h tr a quá trình cho các kin trúc Intel MP.
Dư
i ây là danh sách các b VXL mà Linux h tr:
Dòng 68000 c
a Amigas và Ataris hin ang ưc trin khai nghiên cu.
Các phiên bn GNU/Linux c2ng ưc th! cài t cho các nn Alpha, Sparc, PowerPC, ARM.
Mt d án v Linux trên PPC c2ng ã ưc tin hành.
Apple ã h tr MkLinux trên các Power Macs da trên OSF c
a Mach vi nhân.
Linux cho máy 64 bit DEC Alpha/AXP.
ang nghiên cu v Linux cho MIPS, b)t $u i v
i R4 trên các máy Deskstation Type.
Hin có 2 bn Linux cho dòng máy dùng h( vi x! lý ARM. Mt là c
a vi x! lý ARM3 trên các
máy Acorn A5000 và nó còn bao gm c các thit b I/O cho 82710. Còn li là cho h( vi x! lý
ARM610 c
a máy Acorn RISC PC.
Linux cho SPARC ang ưc tin hành.
Có bn Hardhat cho các máy SGI/Indy.
Các yêu cu v không gian &cng
i vic cài t ti thiu là 10 MB, ch
yu là th! ch không có nhiu các tính nng
khác.
Ta có th cài t thêm X v
i khong 80 MB. Nu cài t c b GNU/Linux s7 c$n
khong 500MB-1GB bao gm c mã ngun và nhiu th khác na.
Các yêu cu v b nh
Ti thiu là 4MB. Ta có th s! dng swapping chy thêm các cài t khác. Linux nói
chung là chy tương i “thoi mái” v
i 4MB Ram nhưng các ng dng X Windows s7
chy chm bi vì chúng c$n phi thc vic swap vào ra trên "a.
Mt vài ng dng hin ti li ch. chy bình thưng v
i 128MB b nh
vt lý ch/ng hn
như Netscape.
S! tương thích vi các h
iu hành khác: DOS, OS/2, 386BSD, Win95
Linux s! dng s)p xp phân dng ging như MS-DOS do ó nó có th chia s3 "a v
các h iu hành khác. Tuy vy, iu này c2ng có ngh"a là các h iu hành khác c2ng có
th không h/n là hoàn toàn tương thích. Các trình Fdisk và Format c
a DOS th.nh thong
li có th vit '#lên d liu trong phân vùng c
a Linux bi vì chúng có th s! dng các
thông tin phân vùng sai lnh t boot sector c
a phân vùng ch không phi là t bng phân
vùng. tránh hin tưng này, mt ý tưng là ưa v 0 a ch. b)t $u c
a mt phân vùng 1
7
va m
i to lp trong Linux trư
c khi s! dng các lnh format c
a MS-DOS. S! dng lnh
sau:
$ dd if=/dev/zero of=/dev/hdXY bs=512 count=1
V
i hdXY là phân vùng liên quan, ch/ng hn /dev/hda1 là phân vùng $u tiên trên "a
IDE $u tiên.
Linux có th (c và ghi các file trên các phân vùng FAT c
a DOS và OS/2 và các "a
mm b0ng cách s! dng h thng file DOS ưc tích hp vào nhân hoc các công c
mtool. Nhân c2ng cung cp h tr cho h thng file VFAT c
a Windows 9x và Windows
NT. Hin ti các "a phân vùng theo NTFS c2ng ang ưc nghiên cu h tr cùng v
vic h tr nén "a như là mt tính nng chu-n.
Linux c2ng có th truy cp ưc t
i h thng file HPFS c
a OS/2 nhưng ch. ch
read-only. Ngưi ta có th thc hin iu này như mt la ch(n khi biên dch nhân.
Linux c2ng h tr cho vic thao tác trên các nh dng AFFS (Amiga Fast File System)
t bn 1.3 tr v sau b0ng cách như mt la ch(n lúc biên dch hay như mt mô un riêng.
Tuy vy, iu này c2ng ch. dng mc ch. (c. Các truy cp "a mm thì chưa có h
tr bi vì s khác bit gia các iu khin "a c
a PC và Amiga.
i v
i các máy chy các h iu hành c
a Unix như BSD, System V... thì các nhân
hin ti c2ng m
i ch. có th (c h thng file UFS trên System V, Xenix, BSD, mt s sn
ph-m tha k khác như SunOS, FreeBSD, NetBSD, NeXTStep. H tr UFS c2ng ưc coi
như mt la ch(n lúc biên dch nhân hay như mt mô un.
Linux cho phép (c/vit trên các #"a SMB c
a các nhóm Windows và WinNT. Có
mt chương trình tên là Samba cho phép truy cp và h thng file mng WfW (mi*n là
dùng giao thc TCP/IP) .
i v
i các máy Macintosh thì có mt tp hp các chương trình cp ngưi dùng
có th (c, ghi trên HFS (Macintosh Hierarchical File System).
Câu hi t ra là có th chy mt chương trình Windows trong Linux hay không ?
Chương trình tên WINE ang ưc phát trin mô phng môi trưng Windows trong
Linux. Hin ti khi mun dùng hai h iu hành cùng lúc v
i Linux thì ta ã có chương
trình LILO boot. LILO boot b)t buc ta phi la ch(n h iu hành vào lúc khi ng.
Ngoài ra, còn có mt chương trình tên LOADLIN là mt chương trình DOS cho phép np
Linux (c2ng như bt k5 h iu hành khác) khin cho Linux cùng tn ti v
i DOS.
LOADLIN c bit hu dng khi ta mun cài Linux trên các #"a th 3, 4 c
a h thng
(hoc khi ta thêm mt #SCSI vào mt h thng có cha #IDE). Trong trưng hp này thì
LILO boot s7 không có kh nng tìm kim và np nhân. Do ó ta s7 phi to mt thư mc
ch/ng hn C:LINUX, t LOADLIN vào trong ó cùng v
i mt bn copy c
a nhân và ri
s! dng nó.
Chú ý: C$n to ít nht mt phân vùng Linux dư
i hn 1024 cylinder logic. 1
7
PH LC B. TRÌNH SON TH
O VIM
UNIX có hai b son tho là ed và vi trong ó vi ưc ưa chung hơn do vi ưc phát
trin t b son tho dòng lnh ed. Trong ch vn bn, Linux cho phép ngưi dùng s!
dng trình son tho vim mà vim chính là b son tho tương thích v
i vi. vim ưc ph$n
l
n ngưi dùng s! dng son tho các file vn bn ASCII, c bit là to ra các vn bn
chương trình ngun.
vim có sáu ch cơ bn:
Ch thưng (Normal mode): trong ch thưng ngưi dùng ưc
phép nhp tt c các lnh son tho thông thưng. Nu không thit lp tu5 ch(n
insertmode, ng$m nh vào ngay ch thưng khi khi ng vim. Ch
thưng còn ưc g(i là ch
lnh.
Ch o (Visual mode): ch này c2ng g$n ging như ch thưng,
ch. khác ch là lnh di chuyn có tác dng ánh du vn bn. Mt khác, các lnh
khác (không là lnh di chuyn) thc s tác dng trong phm vi nhng on vn bn
ã ưc ánh du.
Ch ch(n la (Select mode): ch này tương t như ch la ch(n
c
a MS-Windows. Ngưi dùng có th nhp mt ký t thuc loi in n ưc xoá
mt s la ch(n và chy ch #%&'n.
Ch #%&'n (Insert mode): Trong ch này, có th son tho vn bn
bình thưng như các b son tho quen bit khác. Vn bn ó s7 ưc %&'n vào
trong b m.
Ch dòng lnh (Command-line mode hay cmdline mode): Trong
ch này, mt dòng lnh ưc nhp ti áy c!a s #son tho. ó có th là các lnh
Ex (:), các lnh tìm kim (/ hay ?), và các lnh l(c (!).
Ch Ex (Ex mode): ging như ch dòng lnh, nhưng sau khi nhp
mt lnh, v4n trong ch Ex. Tuy nhiên còn rt nhiu hn ch i v
i các lnh
ch này.
Ngoài ra còn có nm ch ph sau:
Ch ch thc hin (Operator-pending mode): ch này ging ch
thưng, nhưng sau khi g(i mt lnh, vim s7 ch cho n khi on vn bn chu
tác ng c
a lnh ưc ưa ra.
Ch thay th (Replace mode): ch thay th là mt trưng hp c
bit c
a ch #%&'n. Ngưi dùng có th nhp m(i ký t như trong ch #%&'n, ch.
khác ch: mi ký t nhp s7 thay th cho mt ký t ã tn ti (có th g(i là ch
'#- overwrite).
Ch #%&'n-lnh (Insert Normal mode): gõ CTRL-O trong ch #%&'n
chuyn sang ch #%&'n-lnh. Ch này c2ng ging như ch thưng, nhưng
sau khi thc hin mt lnh, vim s7 tr li ch #%&'n.
Ch #%&'n-o (Insert Visual mode): ch này ưc sinh ra khi trong
ch #%&'n thc hin mt s la ch(n o. vim s7 tr v ch #%&'n sau khi s la
ch(n o ó kt thúc. 1
7
Ch #%&'n-la ch(n (Insert Select mode): ch này ưc khi to khi
chy ch la ch(n trong ch #%&'n. Khi ch la ch(n kt thúc, vim s7 tr v
ch #%&'n.
Vic chuyn i gia các ch trong vim ưc thc hin nh các lnh (phím lnh
hoc xâu lnh) c
a vim và ưc tp hp trong bng dư
i ây. Trong bng này, ct $u tiên
là ch ngun, hàng $u tiên là ch ích, ô giao gia hàng và ct cha các phím lnh
chuyn ch (ký hiu *1, *2, *3, *4, *5, *6 là cách vit t)t danh sách lnh ưc gii thích
sau):
Ch
cn chuyn t+i
Ch
hin
thi Thưng o
L!a
chn
231n
Thay
th
Dòng
lnh
Ex
Thưng v, V,
^V
*4 *1 R :, /, ?, ! Q
ảo *2 ^G c, C -- : --
La ch(n *5 ^O, ^G *6 -- : --
T&'n <Esc> -- -- <Insert> -- --
Thay th <Esc> -- -- <Insert> -- --
Dòng lnh *3 -- -- :start -- --
Ex :vi -- -- -- -- --
Gii thích các lnh vit t)t:
*1 chuyn sang ch #%&'n t ch thưng, s! dng mt trong
các phím: i, I, a, A, o, O, c, C, s, S.
*2 chuyn sang ch thưng t ch o: ngoài <Esc>, v, V,
CTRL-V có th gõ mt phím lnh thông thưng (ngoi tr phím lnh di chuyn con
tr).
*3 chuyn sang ch thưng t ch dòng lnh:
Thc hin lnh <Enter>
Gõ CTRL-C hoc <Esc>
*4 chuyn sang ch la ch(n t ch thưng:
S! dng chut la ch(n vn bn
S! dng các phím không in ưc di chuyn du nh)c tr trong khi n
gi phím SHIFT
*5 chuyn sang ch thưng t ch la ch(n: s! dng các phím
không in ưc di chuyn du nh)c tr mà không nhn phím SHIFT.
*6 chuyn sang ch #%&'n t ch la ch(n: nhp mt ký t có
th in ưc.
Dư
i ây trình bày ni dung mt s các lnh cơ bn trong vim. 1
8
B.1 Khi
ng vim
B.1.1 M chương trình son tho vim
Cách ơn gin nht b)t $u dùng vim son tho mt file vn bn, là gõ mt trong ba
lnh sau:
vim [tu/-chn] b)t $u son tho hay hiu ch.nh mt file
vim [tu/-chn] <danh sách các file> b)t $u son tho mt hoc nhiu file
vim [tu5 ch(n] - son tho mt file t thit b vào chu-n
Nu tham s danh sách các file không có thì vim s7 thao tác v
i mt file m
i (vùng
m son tho rng). Ngưc li, file $u tiên trong danh sách tr thành file hin hành và
ưc (c vào trong vùng son tho. Con tr s7 xut hin $u dòng $u tiên c
a vùng này.
hư
ng n file k tip, ta ánh lnh ":next" ch lnh. son tho mt file có tên
b)t $u b0ng "-" thì phi in vào tên file du "--".
Ví d:
# vim vdvim'
~
~
~
~
~
~
~
"vdvim"[New File] 0,0-1 All
Lnh trên m mt c!a s #cho ngưi dùng son tho mt file m
i có tên là "vdvim"
Mt s các tu5 ch(n cơ bn:
B.1.2. Tính nng m nhiu c
a s
Trong vim, có th chia c!a s #son tho hin thi thành nhiu ph$n hay m nhiu c!a
s #cùng lúc son tho các file khác nhau.
Ví d lnh sau s7 m hai file vd1 và vd2 trên hai c!a s #son tho:
# vim -o2 vd1 vd2
~
~
~
+ [n] t du nh)c tr ti dòng th n (ng$m nh là dòng cui)
+ <lnh> thc hin lnh sau khi np file
+/<m4u> <file> t du nh)c tr ti dòng $u tiên có cha m4u trong file
-o[n] m n c!a s #(ng$m nh có mt c!a s #cho mt file: n=1)
--help hin th danh sách các tham s và thoát 1
8
vd1 0,0-1 All
~
~
~
vd2 0,0-1 All
"vd2" [New File]
Sau ây là mt s các lnh hay dùng:
CTRL-W chia c!a s #hin ti thành hai ph$n
:split <file> chia c!a s #và son tho <file> trên mt ph$n chia c
a c!a s #
:sf <file> chia c!a s , tìm file trên ưng d4n và son tho nó
CTRL-W CTRL-^ chia c!a s #và edit alternate file
CTRL-W n to mt c!a s #trng m
i (ging :new)
CTRL-W q dng vic son tho và óng c!a s #(ging :q)
CTRL-W o phóng to c!a s #hin hành trên toàn màn hình
CTRL-W j di chuyn tr son tho xung c!a s #dư
CTRL-W k di chuyn tr son tho lên c!a s #trên
CTRL-W t di chuyn tr son tho lên .nh c!a s
CTRL-W b di chuyn tr son tho xung áy c!a s
CTRL-W p di chuyn tr son tho n c!a s #ưc kích hot lúc trư
c
CTRL-W x di chuyn tr son tho n c!a s #tip theo
CTRL-W = to tt c các c!a s #có chiu cao như nhau
CTRL-W - gim chiu cao c
a c!a s #hin thi
CTRL-W + tng chiu cao c
a c!a s #hin thi
CTRL-W $ thit t chiu cao c
a c!a s #hin thi
B.1.3. Ghi và thoát trong vim
Bng dư
i ây gi
i thiu các lnh ghi ni dung file lên h thng file và thoát khi
vim sau khi ã son tho xong ni dung c
a file (tham s !n, m nu có mang ý ngh"a "tC
dòng n t7i dòng m").
:[n,m] w [!] ghi file hin thi.
:[n,m] w <file> ghi ni dung ra <file>, tr khi file ó ã thc s tn ti
:[n,m] w! <file> ghi ni dung ra <file>, nu file ã tn ti thì ghi '#lên
ni dung c2
:[n,m] w[!] >> [<file>] %&'n thêm vào <file>, nu không có file, mc nh là file
hin thi
:[n,m] w !<lnh> thc hin <lnh> trên các dòng t dòng th n n dòng
th m như thit b vào chu-n
:[n,m] up [thi gian] [!] ghi file hin thi nu nó ưc s!a i
:q [!] thoát khi vim
:wq [!] [<file>] ghi ni dung <file> (mc nh là file hin thi) và thoát
khi vim
:x [!] <file> ging :wq nhưng ch. ghi khi thc s có s thay i trong
ni dung file (ging ZZ) 1
8
:st [!] dng vim và khi to mt shell (ging CTRL-Z)
B.2. Di chuy n tr son tho trong Vim
B.2.1. Di chuy n trong vn bn
Di chuyn tr son tho trong vn bn là mt tính nng rt quan tr(ng trong mt trình
son tho vn bn vim. Dư
i ây là mt s các lnh thc hin vic trên (ct $u tiên có
n ch. mt s là s lưng):
N l di chuyn tr son tho v bên phi n ký t
N h di chuyn tr son tho v bên trái n ký t
n k di chuyn tr son tho lên n dòng
n j di chuyn tr son tho xung n dòng
0 di chuyn v $u dòng
^ di chuyn n t $u tiên c
a dòng hin ti
$ di chuyn n cui dòng
<Enter> di chuyn n $u dòng tip theo
n - di chuyn n $u dòng trư
c dòng hin ti n dòng
n + di chuyn n $u dòng sau dòng hin ti n dòng
n _ di chuyn n $u dòng sau dòng hin ti n-1 dòng
G di chuyn n dòng cui cùng trong file
n G di chuyn n dòng th n trong file (ging :n)
H di chuyn n dòng $u tiên trên màn hình
M di chuyn n dòng gia màn hình
n gg di chuyn n $u dòng th n (mc nh là dòng $u
tiên)
n gk di chuyn lên n dòng màn hình
n gj di chuyn xung n dòng màn hình
B.2.2. Di chuy n theo các
i tư#ng vn bn
vim cung cp các lnh dư
i ây cho phép di chuyn tr son tho nhanh theo các i
tưng vn bn và iu ó to nhiu thun tin khi biên tp, ch/ng hn, trong các trưng hp
ngưi dùng c$n xoá b hay thay i mt t, mt câu ...
N W di chuyn n t tip theo
N E di chuyn n cui c
a t th n
N B di chuyn ngưc li n t
N ge di chuyn ngưc li n t và t du nh)c tr ti ch cái cui t
N > di chuyn n n câu tip theo
N < di chuyn ngưc li n câu
N | di chuyn n n on tip theo
N | di chuyn ngưc li n on
N ]] di chuyn n n ph$n tip theo và t du nh)c tr ti $u ph$n
N [[ di chuyn ngưc li n ph$n và t du nh)c tr ti $u ph$n
n ][ di chuyn n n ph$n tip theo và t du nh)c tr ti cui ph$n
n [] di chuyn ngưc li n ph$n và t du nh)c tr ti cui ph$n 1
8
B.2.3. Cun màn hình
Màn hình s7 t ng cun khi di tr son tho n áy hoc lên .nh màn hình. Tuy
nhiên các lnh sau ây giúp ngưi dùng cun màn hình theo ý mun:
N <CTRL-f> cun lên n màn hình (mc nh là 1 màn hình)
N <CTRL-b> cun xung n màn hình (mc nh là 1 màn hình)
N <CTRL-d> cun xung n dòng (mc nh là 1/2 màn hình)
N <CTRL-u> cun lên n dòng (mc nh là 1/2 màn hình)
N <CTRL-e> cun xung n dòng (mc nh là 1 dòng)
N <CTRL-y> cun lên n dòng (mc nh là 1 dòng)
z<Enter> v7 li c!a s #son tho, dòng hin ti s7 là dòng trên cùng c
a
c!a s #(ging zt)
z. v7 li c!a s #son tho, dòng hin ti s7 là dòng gia c
a c!a
s #(ging zz)
z- v7 li c!a s #son tho, dòng hin ti s7 là dòng áy c
a c!a
s #(ging zb)
B.3. Các thao tác trong vn bn
vim có rt nhiu các lnh h tr thao tác son tho hay hiu ch.nh mt file. Ph$n dư
ây gi
i thiu chi tit v các cách thêm vn bn, hiu ch.nh vn bn hay xoá mt vn
bn.
Khi son tho vn bn, nhiu dòng có th ưc nhp b0ng cách s! dng phím Enter.
Nu có mt li c$n phi s!a, có th s! dng các phím m2i tên di chuyn tr son tho
trong vn bn và s! dng các phím Backspace hoc Delete hiu ch.nh.
B.3.1. Các lnh 431n vn bn trong vim
A %&'n vn bn vào v trí du nh)c tr hin thi (n l$n)
N A %&'n vn bn vào cui mt dòng (n l$n)
n i %&'n vn bn vào bên trái du nh)c tr (n l$n)
I %&'n vn bn vào bên trái ký t $u tiên khác trng trên dòng hin ti
(n l$n)
n gI %&'n vn bn vào ct $u tiên (n l$n)
n o %&'n n dòng trng vào dư
i dòng hin ti
n O %&'n n dòng trng vào trên dòng hin ti
:r file %&'n vào v trí con tr ni dung c
a file
:r! lnh %&'n vào v trí con tr kt qu c
a lnh lnh
B.3.2. Các lnh xoá vn bn trong vim
Bên cnh các lnh to hay %&'n vn bn, vim c2ng có mt s lnh cho phép ngưi dùng
có th xoá vn bn. Dư
i ây là bng lit kê mt s lnh cơ bn:
N x xoá n ký t bên phi du nh)c tr
N X xoá n ký t bên trái du nh)c tr
N dd xoá n dòng k t dòng hin thi
D hoc d$ xoá t v trí hin thi n ht dòng 1
8
N dw xoá n t k t v trí hin thi
dG xoá t v trí hin thi n cui file
d1G xoá ngưc t v trí hin thi n $u file
dn$ xoá t dòng hin thi n ht dòng th n
N,m d xoá t dòng th n n dòng th m
N cc xoá n dòng, k c dòng hin thi ri khi to ch #%&'n (Insert)
N C xoá n dòng k t v trí hin thi ri khi to ch #%&'n (Insert)
cn$ xoá t dòng hin thi n ht dòng th n ri khi to ch #%&'n
(Insert)
N s xoá n ký t và chy ch #%&'n (Insert)
N S xoá n dòng và chy ch #%&'n (Insert)
B.3.3. Các lnh khôi phc vn bn trong vim
Các lnh sau cho phép khôi phc li vn bn sau mt thao tác hiu ch.nh nào ó:
N u khôi phc li vn bn như trư
c khi thc hin n l$n thay i
U khôi phc li hoàn toàn dòng vn bn hin thi như trư
c khi thc
hin bt k5 s hiu ch.nh nào trên dòng ó
: e! hiu ch.nh li. Lưu tr trng thái c
a l$n ghi trư
c
N CTRL-R làm li (redo) n l$n khôi phc (undo) trư
c ó !
6.3.4. Các lnh thay th vn bn trong vim
vim còn có các lnh cho phép thay i vn bn mà không c$n phi xoá vn bn ri sau
ó ánh m
i.
n r <ký t> thay th n ký t bên phi du tr bi <ký
t>
R ghi '# vn bn bi mt vn bn m
i (hay
chuyn sang ch thay th - Replace trong
Vim)
n ~ chuyn n ch hoa thành ch thưng và
ngưc li
n gUU chuyn các ký t trên n dòng, k t dòng
hin ti, t ch thưng thành ch hoa
n guu chuyn các ký t trên n dòng, k t dòng
hin ti, t ch hoa thành ch thưng
n CTRL-A cng thêm n ơn v vào s hin có
n CTRL-X b
t i n ơn v t s hin có
n > [> ...] chuyn dòng th n sang bên phi x khong
trng (ging như phím TAB trong Win),
nu không có n mc nh là dòng hin ti, x
là s du ' > ' (ví d: >>> thì x b0ng 3)
n < [< ...] chuyn dòng th n sang bên trái x khong
trng (ging như phím SHIFT+TAB trong
Win), nu không có n mc nh là dòng
hin ti, x là s du ' < ' 1
8
n J kt hp n dòng, k t dòng hin ti, thành
mt dòng
n gJ ging như J nhưng không %&'n các khong
trng
:[n,m] ce [width] cn gia t dòng th n n dòng th m v
rng là width, nu không có width, mc
nh rng là 80
:[n,m] ri [width] cn phi t dòng th n n dòng th m v
rng là width, nu không có width, mc
nh rng là 80
:[n,m] le [width] cn trái t dòng th n n dòng th m v
rng là width, nu không có width, mc
nh rng là 80
:[n,m]s/<m4u1>/<m4u2>/[g][c] tìm t dòng th n n dòng th m và thay
th m4u1 bi m4u2. V
i [g], thay th cho
m(i m4u tìm ưc. V
i [c], yêu c$u xác
nhn i v
i mi m4u tìm ưc
:[n,m]s[g][c] lp li lnh tìm và thay th trư
c (:s) v
phm Vim m
i t dòng n n dòng m +'m
theo là các tu5 ch(n
& lp li vic tìm kim và thay th trên dòng
hin thi mà không có các tu5 ch(n
B.3.5. Sao chép và di chuy n vn bn trong vim
Ph$n này gi
i thiu v
i các các lnh cơ bn c)t và dán vn bn trong vim.
sao chép vn bn phi thc hin ba bư
c sau:
Sao chép vn bn vào mt b nh
m (Yanking)
Di chuyn du nh)c tr n v trí c$n sao chép (Moving)
Dán vn bn (Pasting)
Sau ây là các lnh c th c
a tng bư
c:
* Sao chép vn bn vào b nh
m
n yw sao chép n ký t
n Y sao chép n dòng vn bn, k t dòng hin ti, vào b nh
m (ging
yy)
: [n] co [m] sao chép dòng th n vào dư
i dòng th m
* Dán vn bn:
n P dán on vn bn ưc sao chép vào bên phi v trí hin thi (n l$n)
n P dán n on vn bn ưc sao chép vào bên trái v trí hin thi (n l$n)
n Gp ging như p, nhưng ưa du nh)c tr v sau on vn bn m
i dán
n gP ging như P, nhưng ưa du nh)c tr v sau on vn bn m
i dán
: [n] put m dán m dòng vn bn vào sau dòng th n (nu không có n ng$m nh 1
8
là dòng hin ti)
: [n] put! m dán m dòng vn bn vào trư
c dòng th n (nu không có n ng$m
nh là dòng hin ti)
Ngoài các lnh trên, khi s! dng vim trong xterm, ngưi dùng có th s! dng chut
thc hin các thao tác cho vic sao chép vn bn. Vic này ch. thc hin ưc khi ang
trong ch son tho c
a vim. Nhn phím trái chut và kéo t im b)t $u n im kt
thúc c
a on vn bn c$n sao chép. on vn bn ó s7 ưc t ng sao vào b nh
m.
Sau ó di tr son tho n v trí c$n dán và nháy nút chut gia, vn bn s7 ưc dán vào
v trí mun.
di chuyn vn bn trong vim, c2ng phi thc hin qua ba bư
c sau:
C)t on vn bn và dán vào b m
Di chuyn du nh)c tr t
i v trí m
i c
a on vn bn
Dán on vn bn vào v trí m
Di chuyn vn bn ch. khác sao chép bư
c $u tiên là bư
c c)t on vn bn. hãy s!
dng các lnh xoá trong vim c)t on vn bn. Ví d, khi dùng lnh dd, dòng b xoá s7
ưc lưu vào trong b m, khi ó có th s! dng các lnh dán dán vn bn vào v trí
i.
Ngoài ra còn có th s! dng mt s lnh sau:
B.3.6. Tìm kim và thay th vn bn trong vim
vim có mt s các lnh tìm kim như sau:
/ <xâu> tìm xâu t dòng hin ti n dòng cui trong file
? <xâu> tìm xâu t dòng hin ti ngưc lên dòng $u trong file
N tìm tip xâu ưc ưa ra trong lnh / hoc ? (t trên xung dư
N tìm tip xâu ưc ưa ra trong lnh / hoc ? (t dư
i lên trên)
Xâu ưc tìm kim trong lnh / hay ? có th là mt biu thc. Mt biu thc thông
thưng là mt tp các ký t. Tp ký t này ưc xây dng b0ng cách kt hp gia các ký t
thông thưng và các ký t c bit. Các ký t c bit trong biu thc thưng là:
. thay th cho mt ký t ơn ngoi tr ký t xung dòng
\ hin th các ký t c bit
* thay th cho 0 hoc nhiu ký t
\+ thay th cho 1 hoc nhiu ký t
\= thay th cho 0 hoc mt ký t
^ thay th cho ký t $u dòng
$ thay th cho ký t cui dòng
\ < thay th cho ch b)t $u c
a t
\ > thay th cho ch cui c
a t
: [n] m [x] di chuyn dòng th n vào dư
i dòng th x
' ' dch chuyn n v trí lúc trư
c
' " dch chuyn n v trí lúc trư
c thc hin vic hiu ch.nh file 1
8
[] thay th cho mt ký t n0m trong cp du []
[^] thay th cho ký t không thuc trong cp du [] và ng sau du ^
[-] thay th cho mt tp có th t các ký t
\p thay th cho mt ký t có th in ưc
\s thay th cho mt ký t trng
\e thay th cho phím Esc
\t thay th cho phím Tab
vim s! dng ch lnh Ex thc hin các vic tìm kim và thay th. Tt c các lnh
trong ch này ưc b)t $u b0ng du ':'. có th kt hp lnh tìm kim và thay thay th
ưa ra ưc các lnh phc tp theo dng t ng quát sau:
:<
i m bt
u>,<
i m kt thúc> s/<m-u cn thay th>/<m-u
ư#c thay
th>/[g][c]
Ví d, lnh sau ây:
:1,$s/the/The/g
tìm trong file ang son tho các t the và thay chúng bi các t The.
B.3.7. $ánh du trong vim
m |a-zA-Z| ánh du vn bn ti v trí hin thi v
i du là các ch cái |a-zA-Z|
'|a-z| dch chuyn con tr t
i v trí ã ưc ánh du bi các ch cái |a-z| trong
phm Vim file hin thi
'|A-Z| dch chuyn con tr t
i v trí ã ưc ánh du bi các ch cái |A-Z| trong
mt file bt k5
:marks hin th các ánh du hin thi
B.3.8. Các phím s
dng trong ch
&431n
Chuyn i ch
<Insert> chuyn vào ch #%&'n hoc ch thay th
<Esc> thoát khi ch #%&'n, tr li ch thông thưng
CTRL-C ging như <Esc>, nhưng ???
CTRL-O <lnh> thc hin <lnh> và tr v ch #%&'n
Di chuyn
Các phím m2i tên di chuyn tr son tho sang trái/phi/lên/xung mt ký t
SHIFT-left/right di chuyn tr son tho sang trái/phi mt t
<Home> di chuyn tr son tho v $u dòng
<End> di chuyn tr son tho v cui dòng
Các phím c bit
<Enter>, CTRL-M, CTRL-J b)t $u mt dòng m
CTRL-E %&'n ký t vào bên phi du nh)c tr
CTRL-Y %&'n mt ký t vào bên trái du nh)c tr
CTRL-A %&'n vào trư
c on vn bn ưc %&'n
CTRL- %&'n vào trư
c on vn bn ưc %&'n và dng ch #%&'n
CTRL-R <thanh ghi> %&'n ni dung c
a mt thanh ghi 1
8
CTRL-N %&'n t tip theo vào trư
c du nh)c tr
CTRL-P %&'n t trư
c ó vào trư
c du nh)c tr
CTRL-X ... hoàn thành t trư
c du nh)c tr theo nhiu cách khác nhau
<Backspace>, CTRL-H xoá mt ký t trư
c du nh)c tr
<Del> xoá mt ký t sau du nh)c tr
CTRL-W xoá t trư
c du nh)c tr
CTRL-U xoá tt c các ký t trên dòng hin ti
CTRL-T %&'n mt khong trng trư
c dòng hin thi
CTRL-D xoá mt khong trng trư
c dòng hin thi
B.3.9. Mt s lnh trong ch
o
v khi nhn phím này, có th s! dng các phím di chuyn ánh du on
vn bn hoc b ánh du (vn bn ưc ánh du có màu tr)ng)
V khi nhn phím này, mt dòng vn bn s7 ưc ánh du và có th s! dng
các phím di chuyn ánh du on vn bn hoc b ánh du
CTRL-V nhn phím này s7 ánh du mt khi vn bn và có th s! dng các phím
di chuyn ánh du on vn bn hoc b ánh du
o di chuyn v trí du nh)c tr trên khi ưc ánh du hoc b ánh du
gv ánh du li on vn bn ưc ánh du lúc trư
c
n aw ch(n ánh du n t
n as ch(n ánh du n câu
n ap ch(n ánh du n on
n ab ch(n ánh du n khi
B.3.10. Các lnh lp
n . lp li n l$n thay i cui
q |a-z| ghi các ký t ưc nhp vào trong thanh ghi |a-z|
n @|a-z| thc hin ni dung có trong thanh ghi |a-z| n l$n
n @@ lp li n l$n s thc hin c
a lnh @|a-z| trư
c
:@|a-z| thc hin ni dung c
a thanh ghi |a-z| như mt lnh Ex
:@@ lp li s thc hin c
a lnh :@|a-z| trư
c
:[n,m]g/m4u/[lnh] thc hin lnh (mc nh là :p) trên các dòng có cha m4u
n0m trong khong t dòng th n n dòng th m
:[n,m]g!/<m4u>/[lnh] thc hin lnh (mc nh là :p) trên các dòng không cha
m4u n0m trong khong t dòng th n n dòng th m
:sl [n] tm dng trong n giây
n gs tip tc dng trong n giây
B.4. Các lnh khác
B.4.1. Cách th!c hin các lnh bên trong Vim
:sh khi to mt shell
:! <lnh> thc hin mt lnh shell trong Vim 1
8
:!! lp li lnh ':! <lnh>' lúc trư
c
K m trang man c
a lnh trùng v
i ni dung t ti du nh)c tr
q thoát khi lnh ang thc hin tr li Vim
B.4.2. Các lnh liên quan
n file
Ngoài các lnh cơ bn như sao chép hay c)t dán, trong vim còn có mt s lnh cho
phép có th có ưc nhng thông tin c$n thit v file.
CTRL-G hin th tên file hin thi +'m theo trng thái file và v trí du
nh)c tr (trng thái có th là: ch. (c, ưc s!a, li khi (c,
file m
i) (ging :f)
n CTRL-G hin th thông tin như CTRL -G và có thêm ưng d4n $y
c
a file (nu n>1, tên buffer hin thi s7 ưc ưa ra)
g CTRL-G ưa ra v trí du nh)c tr theo dng: ct/t ng s ct,
dòng/t ng s dòng và ký t/t ng s ký t
:f <tên m
i> i tên file hin thi thành tên m
:ls lit kê tt c các file hin thi ang ưc s! dng trong Vim
(ging :buffer và :files)
:cd ưa thêm ưng d4n vào tên file
:w <tên file> to mt bn sao c
a file hin thi v
i tên m
i là tên file
(ging như save as trong Win)
Xác nh file c$n son tho
:e[n, /m4u] <file> son tho file, t dòng th n hoc t dòng có cha m4u, tr
khi có s thay i thc s trong file
:e[n, /m4u]! <file> luôn son tho file, t dòng th n hoc t dòng có cha m4u,
b qua m(i s thay i trong file
:e np li file hin thi, tr khi có s thay i thc s trong file
:e! luôn np li file hin thi, b qua m(i s thay i thc s
trong file
:fin [!] <file> tìm file trên ưng d4n và son tho
:e #n son tho file th n (ging n CTRL-^)
Các lnh khác
:pw ưa ra tên thư mc hin thi
:conf <lnh trong vim
thc hin lnh trong vim và ưa ra hp thoi yêu c$u xác
nhn khi có thao tác òi hi s xác nhn 1
9
PH LC C. MIDNIGHT COMMANDER
C.1. Gii thiu v Midnight Commander (MC)
Ngưi s! dng h iu hành MS-DOS u bit tính nng tin ích Norton Commander
(NC) rt mnh trong qun lý, iu khin các thao tác v file, thư mc, "a c2ng như là môi
trưng trc quan trong ch vn bn (text). Dù trong h iu hành Windows sau này ã
có s h tr c
a tin ích Explorer nhưng không vì th mà vai trò c
a NC gim i: Nhiu
ngưi dùng v4n thích dùng NC trong các thao tác v
i file và thư mc. Linux c2ng có mt
tin ích mang tên Midnight Commander (vit t)t là MC) có chc nng và giao din g$n
ging v
i NC c
a MS-DOS và s! dng MC trong Linux tương t như s! dng NC trong
MS-DOS.
C.2. Khi
ng MC
Lnh khi ng MC:
# mc [Tùy-chn]
Có mt s tu5 ch(n khi dùng tin ích này theo mt s dng thông dng sau:
-a Không s! dng các ký t #ho v7 các ưng th/ng khung.
-b Khi ng trong ch màn hình en tr)ng.
-c Khi ng trong ch màn hình màu.
-d Không h tr chut
-P V
i tham s này, Midnight Commander s7 t ng chuyn thư mc hin
hành t
i thư mc ang làm vic. Như vy, sau khi kt thúc, thư mc hin
hành s7 là thư mc cui cùng thao tác.
-v file S! dng chc nng View c
a MC xem ni dung c
a file ưc ch. ra.
-V Cho bit phiên bn chương trình ang s! dng.
Nu ch. ra ưng d4n (path), ưng d4n $u tiên là thư mc ưc hin th trong panel
ch(n (selected panel), ưng d4n th hai ưc hin th panel còn li.
C.3. Giao din ca MC
Giao din c
a MC ưc chia ra làm bn ph$n. Ph$n l
n màn hình là không gian hin th
c
a hai panel. Panel là mt khung c!a s #hin th các file thư mc cùng các thuc tính c
a
nó hoc mt s ni dung khác. Theo mc nh, dòng th hai t dư
i lên s7 là dòng lnh còn
dòng dư
i cùng hin th các phím chc nng. Dòng $u tiên trên .nh màn hình là thc ơn
ngang (menu bar) c
a MC. Thanh thc ơn này có th không xut hin nhưng nu kích
hot b0ng c hai chut ti dòng $u tiên hoc nhn phím <F9> thì nó s7 hin ra và ưc
kích hot.
Midnight Commander cho phép hin th cùng mt lúc c hai panel. Mt trong hai panel
là panel hin hành (panel ch(n). Thanh sáng ch(n n0m trên panel hin hành. H$u ht các
thao tác u di*n ra trên Panel này. Mt s các thao tác khác v file như Rename hay Copy
s7 mc nh s! dng thư mc Panel còn li làm thư mc ích. Tuy nhiên ta v4n có th s!a
ưc thư mc này trư
c khi thao tác vì các thao tác này $u tiên bao gi c2ng yêu c$u nhp
ưng d4n. Trên panel s7 hin th h$u ht các file và thư mc con c
a thư mc hin hành.
Midnight Commander có cơ ch hin th các kiu file khác nhau b0ng các ký hiu và màu 1
9
s)c khác nhau, ví d như các file biu tưng liên kt s7 có ký hiu ‘@’ $u, các file thit
b s7 có màu tím, các file ưng ng có màu en, các thư mc có ký hiu ‘/’ $u, các
thư mc liên kt có ký hiu ‘~’...
Cho phép thi hành mt lnh h thng t MC b0ng cách gõ chúng lên màn hình. Tt c
nhng gì có gõ vào u ưc hin th dòng lnh phía dư
i tr mt s ký t iu khin và
khi nhn Enter, Midnight Commander s7 thi hành lnh gõ vào.
C.4. Dùng chut trong MC
Midnight Commander s7 h tr chut trong trưng hp không g(i v
i tham s -d. Khi
kích chut vào mt file trên Panel, file ó s7 ưc ch(n, có ngh"a là thanh sáng ch(n s7
n0m ti v trí file ó và panel cha file ó s7 tr thành panel hin hành. Còn nu kích chut
phi vào mt file, file ó s7 ưc ánh du hoc xoá du tu5 thuc vào trng thái kích trư
c
ó.
Nu kích ôi chut ti mt file, file ó s7 ưc thi hành nu ó là file thi hành ưc
(executable program) hoc nu có mt chương trình c trưng cho riêng ph$n m rng ó
thì chương trình c trưng này s7 ưc thc hin.
Ngưi dùng c2ng có th thc hin các lnh c
a các phím chc nng b0ng cách nháy
chut lên phím chc nng ó.
Nu kích chut ti dòng $u tiên trên khung panel, toàn b panel s7 b kéo lên. Tương
t kích chut ti dòng cui cùng trên khung panel, toàn b panel s7 b kéo xung.
Có th b qua các thao tác chut c
a MC và s! dng các thao tác chut chu-n b0ng
cách gi phím <Shift>
C.5. Các thao tác bàn phím
Mt s thao tác c
a Midnight Commander cho phép s! dng nhanh b0ng cách gõ các
phím t)t (hot key). tương thích v
i mt s h thng khác, trong các bng dư
i ây v
Midnight Commander, vit t)t phím CTRL là “C”, phím ALT là “M” (Meta), phím SHIFT
là “S”. Các ký hiu t #hp phím có dng như sau:
C-<chr> Có ngh"a là gi phím CTRL trong khi gõ phím <char>. Ví d
C -f có ngh"a là gi CTRL và nhn <f>.
C-<chr1><char2> Có ngh"a là gi phím CTRL trong khi gõ phím <char1> sau
ó nh tt c ra và gõ phím <char2>.
M-<chr> Có ngh"a là gi phím ALT trong khi gõ phím <char>. Nu
không có hiu lc thì có th thc hin b0ng cách gõ phím
<Esc> nh ra ri gõ phím <char>.
S-<chr> Có ngh"a là gi phím SHIFT trong khi gõ phím <char>.
Sau ây là chc nng mt s phím thông dng.
Các phím thc hin lnh:
Enter Nu có dòng lnh, lnh ó s7 ưc thi hành. Còn nu không thì s7 tu5
vào v trí c
a thanh sáng trên panel hin hành là file hay thư mc mà
hoc vic chuyn i thư mc hoc thi hành file hay thi hành mt
chương trình tương ng s7 di*n ra.
C-l Cp nht li các thông tin trên Panel. 1
9
Các phím thao tác trên dòng lnh:
M-Enter hay CEnter
chép tên file v trí thanh sáng ch(n xung dòng lnh
M-Tab
hoàn thành tên file, lnh, bin, tên ngưi dùng hoc tên máy
giúp
C-x t, C-x C-t
sao các file ưc ánh du (mc nh là file hin thi) trên panel
ch(n (C-x t) hoc trên panel kia (C-x C-t) xung dòng lnh
C-x p, C-x C-p
ưa tên ưng d4n hin thi trên panel ch(n (C-x p) hoc trên
panel kia (C-x C-p) xung dòng lnh
M-p, M-n
s! dng hin li trên dòng lnh các lnh ã ưc g(i trư
c
ó. M-p s7 hin li dòng lnh ưc thi hành g$n nht, M-n hin
li lnh ưc g(i trư
c lnh ó
C-a ưa du nh)c tr v $u dòng
C-e ưa du nh)c tr v cui dòng
C-b, Left ưa du nh)c tr di chuyn sang trái mt ký t
C-f, Right ưa du nh)c tr di chuyn sang phi mt ký t
M-f ưa du nh)c tr n t tip theo
M-b ưa du nh)c tr ngưc li mt t
C-h, Space xoá ký t trư
c ó
C-d, Delete xoá ký t ti v trí du nh)c tr
C-@ ánh du c)t
C-k xoá các ký t t v trí du nh)c tr n cui dòng
M-C-h, MBackspace
xoá ngưc li mt t
Các phím thao tác trên panel:
Up,Down, PgUp,
PgDown, Home, End
s! dng các phím này di chuyn trong mt panel
b, C-b, C-h,
Backspace, Delete
di chuyn ngưc li mt trang màn hình
Space di chuyn tip mt trang màn hình
u, d di chuyn lên/ xung 1/2 trang màn hình
g, G di chuyn n im $u hoc cui c
a mt màn hình
Tab, C-i
hoán i panel hin hành. Thanh sáng ch(n s7 chuyn t panel c2
sang panel hin hành
Insert, C-t ch(n ánh du mt file hoc thư mc
M-g, M-h, M-j l$n lưt ch(n file $u tiên, file gia và file cui trên panel hin th1
9
C-s, M-s
tìm kim file trong thư mc. Khi kích hot ch này, nhng ký
t gõ vào s7 ưc thêm vào xâu tìm kim thay vì hin th trên
dòng lnh. Nu tu5 ch(n Show mini-status trong option ưc t
thì xâu tìm kim s7 ưc hin th dòng trng thái.
Khi gõ các kí t, thanh sáng ch(n s7 di chuyn n file $u tiên có
nhng ký t $u ging nhng ký t gõ vào. S! dng phím
Backspace hoc Del hiu ch.nh sai sót. Nu nhn C-s l$n na,
vic tìm kim s7 ưc tip tc
M-t chuyn i kiu hin th thông tin v file hoc thư mc
C-\ thay i thư mc hin thi
+
s! dng du cng la ch(n ánh du mt nhóm file. Có th s!
dng các ký t i din như ‘*’, ‘?’... biu di*n các file s7 ch(n
s! dng du tr xoá ánh du mt nhóm file. Có th s! dng
các ký t di din như ‘*’, ‘?’ biu di*n các file s7 xoá
*
s! dng du * ánh du hoc xoá ánh du tt c các file trong
panel
M-o
mt panel s7 hin th ni dung thư mc hin thi hoc thư mc cha
c
a thư mc hin thi c
a panel kia
M-y di chuyn n thư mc lúc trư
c ã ưc s! dng
M-u di chuyn n thư mc tip theo ã ưc s! dng
C.6. Th!c
ơn thanh ngang (menu bar)
Thc ơn thanh ngang trong Midnight Commander ưc hin th dòng $u tiên trên
màn hình. Mi khi nhn <F9> hoc kích chut ti dòng d$u tiên trên màn hình thc ơn
ngang s7 ưc kích hot. Thc ơn ngang c
a MC có nm mc “Left”, “File”,
“Command”, “Option” và “Right”.
Thc ơn Left và Right giúp ta thit lp c2ng như thay i kiu hin th c
a hai panel
left và right. Các thc ơn mc con c
a chúng gm:
Listing Mode ...
thc ơn này ưc dùng khi mun thit lp kiu hin th c
a
các file. Có bn kiu hin th:
* Full - hin th thông tin v tên , kích thư
c, và thi gian s!
i c
a file;
* Brief - ch. hin th tên c
a file;
* Long - hin th thông tin $y
v file (tương t lnh ls -l);
* User - hin th các thông tin do t ch(n v file;
Quick view C-x q xem nhanh ni dung c
a mt file
Info C-x i xem các thông tin v mt thư mc hoc file
Tree hin th dư
i dng cây thư mc
Sort order...
thc hin s)p xp ni dung hin th theo tên, theo tên m
rng, thi gian s!a cha, thi gian truy nhp, thi gian thay
i, kích thư
c, inode
Filter ... thc hin vic l(c file theo tên
Network link ... thc hin liên kt n mt máy tính
FTP link ... thc hin vic ly các file trên các máy t xa 1
9
Rescan C-r quét li
Thc ơn File cha mt danh sách các lnh mà có th thi hành trên các file ã ưc
ánh du hoc file ti v trí thanh ch(n. Các thc ơn mc con:
User menu F2 thc ơn dành cho ngưi dùng
View F3 xem ni dung c
a file hin thi
View file ... m và xem ni dung c
a mt file bt kì
Filtered view M-!
thc hin mt lnh l(c v
i tham s là tên file và hin th
ni dung c
a file ó
Edit F4
son tho file hin thi v
i trình son tho mc nh trên
h thng
Copy F5 thc hin copy
cHmod C-x c
thay i quyn truy nhp i v
i mt thư mc hay mt
file
Link C-x l to mt liên kt cng n file hin thi
Symlink C-x s to mt liên kt tưng trưng n file hin thi
edit sYimlink C-x C-s hiu ch.nh li mt liên kt tưng trưng
chOwn C-x o thay i quyn s hu i v
i thư mc hay file
Advanced chown
thay i quyn s hu c2ng như quyn truy nhp c
a file
hay thư mc
Rename/Move F6 thc hin vic i tên hay di chuyn i v
i mt file
Mkdir F7 to mt thư mc
Delete F8 xoá mt hoc nhiu file
Quick cd M-c chuyn nhanh n mt thư mc
select Group M-+ thc hin vic ch(n mt nhóm các file
Unselect group M- ngưc v
i lnh trên
reverse selecTion M-* ch(n các file trong thư mc hin thi
Exit F10 thoát khi MC
Thc ơn Command c2ng cha mt danh sách các lnh.
Directory tree hin th thư mc dư
i dng cây thư mc
Find file M-? tìm mt file
Swap panels C-u thc hin tráo i ni dung gia hai panel hin th
Switch panels on/of C-o
ưa ra lnh shell ưc thc hin l$n cui (ch. s! dng
trên xterm, trên console SCO và Linux)
Compare directories C-x d
thc hin so sánh thư mc hin ti trên panel ch(n v
các thư mc khác
Command history ưa ra danh sách các lnh ã thc hin
Directory hotlist C-\ thay i thư mc hin thi
External panelize C-x !
thc hin mt lnh trong MC và hin th kt qu trên
panel ch(n (ví d: nu mun trên panel ch(n hin th tt
c các file liên kt trong thư mc hin thi, hãy ch(n mc
thc ơn này và nhp lnh
find . -type l -print 1
9
s7 thy kt qu tht tuyt vi)
Show directory size hin th kích thư
c c
a thư mc
Command history hin th danh sách các lnh ã thc hin
Directory hotlist C-\ chuyn nhanh n mt thư mc
Background C-x j thc hin mt s lnh liên quan n các quá trình nn
Extension file edit
cho phép hiu ch.nh file ~/.mc/ext xác nh chương
trình s7 thc hin khi xem, son tho hay làm bt c iu
gì trên các file có tên m rng
Thc ơn Options cho phép thit lp, &O,# b mt s tu5 ch(n có liên quan n hot
ng c
a chương trình MC.
Configuration ... thit lp các tu5 ch(n cu hình cho MC
Lay-out ... xác lp cách hin th c
a MC trên màn hình
Confirmation ... thit lp các hp thoi xác nhn khi thc hin mt thao tác nào ó
Display bits ... thit lp cách hin th c
a các ký t
Learn keys ... xác nh các phím không ưc kích hot
Virtual FS ... thit lp h thng file o
Save setup ghi m(i s thit lp ưc thay i
C.7. Các phím chc nng
Các phím chc nng c
a Midnight Commander ưc hin th ti dòng cui cùng c
a
màn hình. Có th thc hin các chc nng ó b0ng cách kích chut lên nhãn c
a các chc
nng tương ng hoc nhn trên bàn phím chc nng ó.
F1 hin th trang tr giúp
F2 ưa ra thc ơn ngưi dùng
F3 xem ni dung mt file
F4 son tho ni dung mt file
F5 thc hin sao chép file
F6 thc hin di chuyn hoc i tên file
F7 to thư mc m
F8 xoá thư mc hoc file
F9 ưa tr son tho lên thanh thc ơn n0m ngang
F10 thoát khi MC
C.8. B son tho ca Midnight Commander
Midnight Commander cung cp mt b son tho khá tin dng trong vic son tho
các vn bn ASCII. B son tho này có giao din và thao tác khá ging v
i tin ích Edit
c
a DOS hay NcEdit c
a Norton Commander. hiu ch.nh mt s file vn bn, hãy di
chuyn thanh sáng ch(n n v trí file ó ri nhn F4, ni dung c
a file ó s7 hin ra trong
vùng son tho. Sau khi hiu ch.nh xong, nhn F2 ghi li. B son tho này có mt thc
ơn ngang cung cp các chc nng $y
như mt b son tho thông thưng. Nu ã
tng là ngưi dùng DOS và m
i dùng Linux thì nên dùng b son tho này hiu ch.nh
và son tho vn bn thay vì b son tho Vim. Sau ây là bng lit kê các phím chc nng
c2ng như các mc thc ơn trong b son tho này: 1
9
* Thanh th!c
ơn
Th!c
ơn File:
các thao tác liên quan n file
Open/load C-o m hoc np mt file
New C-n to mt file m
Save F2 ghi ni dung file ã ưc son tho
Save as ... F12 to mt file khác tên nhưng có ni dung trùng v
i ni dung
file hin thi
Insert file ... F15 %&'n ni dung mt file vào file hin thi
Copy to file ... C-f sao on vn bn ưc ánh du n mt file khác
About .. thông tin v b son tho
Quit F10 thoát khi b son tho
Th!c
ơn Edit:
các thao tác liên quan n vic son tho ni dung file
Toggle Mark F3 thc hin ánh du mt on vn bn
Mark Columns S-F3 ánh du theo ct
Toggle Ins/overw Ins chuyn i gia hai ch #%&'n/'
Copy F5 thc hin sao chép file
Move F6 thc hin di chuyn file
Delete F8 xoá file
Undo C-u tr v trng thái trư
c khi thc hin mt s thay i
Beginning C-PgUp di chuyn n $u màn hình
End C-PgDn di chuyn n cui màn hình
Th!c
ơn Sear/Repl:
các thao tác liên quan n vic tìm kim và thay th
Search .. F7 thc hin tìm kim mt xâu vn bn
Search again F17 tìm kim tip
Replace ... F4 tìm và thay th xâu vn bn
Th!c
ơn Command:
Các lnh có th ưc thc hin trong khi son tho
Goto line ... M-l di chuyn tr son tho n mt dòng
Insert Literal ... C-q %&'n vào trư
c du nh)c tr mt ký t
Refresh screen C-l làm tươi li màn hình
Insert Date/time %&'n ngày gi hin ti vào v trí du n)hc tr
Format paragraph M-p nh dng li on vn bn
Sort M-t thc hin s)p xp 1
9
Th!c
ơn Options:
Các tu5 ch(n có th thit lp cho b son tho
General ... thit lp các tu5 ch(n cho b son tho
Save mode ... ghi li m(i s thit lp ưc thay i
* Các phím chc nng
F1 hin th trang tr giúp
F2 ghi ni dung file
F3 thc hin vic ánh du on vn bn
F4 tìm và thay th xâu vn bn
F5 thc hin vic sao chép
F6 di chuyn file
F7 tìm kim xâu vn bn
F8 xoá on vn bn ưc ánh du
F9 hin th thanh thc ơn ngang
F10 thoát khi b son tho 1
9
PH LC D. SAMBA
D.1 Cài
t Samba
Nu các dch v chia s3 file gia các máy Windows v
i nhau và gia các máy Linux
v
i nhau ã ưc gii quyt thì còn li là vn chia s3 file gia các máy Linux và
Windows li là mt nhu c$u quan tr(ng. Samba hin ã tr thành cây c$u ni gia Linux và
Windows. Samba cho phép các máy tính chy Linux có th hot ng và giao tip trên
cùng mt giao thc mng v
i máy Windows. Samba server thc hin các dch v sau:
• Chia s3 mt hay nhiu h thng file.
• Chia s3 các máy in ã ưc cài t c hai phía server và client c
a nó.
• H tr các client duyt Network Neighborhood trong các máy windows.
• Kim tra xác nhn các client ng nhp vào vùng c
a Windows.
• Cung cp hoc h tr vic phân gii a ch. c
a server b0ng WINS (Windows
Internet Name Server).
d*#hình dung hơn, ta ly ví d mng ơn gin có dùng Samba. Gi s! ta có mt cu
hình mng cơ bn sau: mt máy ch
Linux có s! dng Samba v
i tên ưc t là Toltec, và
hai client trên MS Windows, v
i tên là Maya và Aztec, ưc ni v
i nhau trong mt mng
Lan và tham gia vào nhóm làm vic có tên METRAN. Ta còn gi s! máy ch
Toltec còn có
mt máy in phun tên là lp ưc ni ti ch, ng thi vic chia s3 "a cng cho phép các
máy “nhìn” thy nhau. Mô t mng trên b0ng hình v7 D.1 ưc biu di*n dư
i ây:
Hình D.1 Mt mng có nhiu h iu hành
Các vai trò c
a Samba i v
i mng Windows NT (phiên bn Samba 2.0.4b.)
Vai Trò Có th thc hin c
File Server Có
Printer Server Có
Primary Domain Controller Có (Samba 2.1 hay mun hơn)
Backup Domain Controller Không
Window 95/98 Authentication Có
Local Master Browser Có
Local Backup Browser Không
Domain Master Browser Có
Primary WINS Server Có
Secondary WINS Server Không 1
9
D.2 Các thành phn ca Samba
Samba thc cht cha mt s chương trình phc v cho nhng mc ích khác nhau nhng có liên quan v
i nhau. Ht nhân c
a Samba là hai deamon có nhng nhim v sau:
smbd Daemon: smbd chu trách nhim iu khin các tài nguyên ưc chia s3 gia
máy ch
Samba và các máy trm c
a nó. Nó cung cp các dch v v file, in, và trình duyt
cho các máy trm SMB thông qua mt hay nhiu mng. smdb x! lý tt c các trao i gia
máy ch
Samba và các client mng c
a nó. Ngoài ra, deamon này còn chu trách nhim
kim tra xác nhn ngưi dùng, khoá tài nguyên, và chia s3 d liu thông qua giao thc
SMB.
nmbd Deamon: nmbd là mt máy ch
dch v tên ơn gin b)t chư
c các chc nng
máy ch
dch v tên, chy v
i các giao thc WINS và NetBIOS. Daemon này l)ng ngheÕ
các yêu c$u c
a máy ch
dch v tên và cung cp các thông tin thích hp khi ưc g(i t
i.
Nó còn cung cp danh sách duyt Network Neighborhood và tham gia vào la ch(n các i
tưng mng trong ó.
B cài t Samba còn có mt tp hp nh các công c dòng lnh Linux:
smbclient: Mt client Linux theo kiêu ftp có th dùng tin ích này kt ni v
i tài
nguyên ưc Samba chia s3.
Smbtar: Chương trình lưu tr các tài nguyên ưc chia s3, tương t như lnh tar c
a
Linux.
nmblookup: Chương trình cung cp NetBIOS thông qua vic tìm tên b0ng TCP/IP.
smbpasswd: Chương trình cho phép ngưưi qun tr thay i mt kh-u ã mã hóa c
a
Samba.
testparm: Chương trình ơn gin làm cho file cu hình Samba có hiu lc.
testprns: Chương trình kim tra liu các máy in khác nhau có ưc deamon smbd nhn
ra hay không.
Nu mun xem tng deamon thc hin nhng gì, Samba có chương trình v
i tên
smbstatus s7 a tt c các thông tin ó lên màn hình như sau:
Samba version 2.2.7-security-rollup-fix
Service uid gid pid machine
----------------------------------------------
IPC$ root root 21608 httt-09 (10.10.16.5) Fri Nov 28 09:42:52 2003
No locked files
Vic cài t samba c2ng khá ơn gin, ta c$n chu-n b các package sau:
samba-client-xxx.rpm
samba-xxx.rpm
samba-common-xxx.rpm
Trong ó xxx là s hiu phiên bn c
a samba. ng nhp v
i quyn root và sau ó ra lnh:
#rpm –ivh samba-client-xxx.rpm samba-xxx.rpm sambacommon-xxx.rpm
Nu ta không nhn li thông báo li nào c thì quá trình cài t ã hoàn tt. 2
0
D.3 File cu hình Samba
Nhng tên ưc bao trong các ngoc vuông dùng ký hiu cho các ph$n c
a
file cu hình smb.conf, mô t các chia s3 hay dch v mà Samba cung cp. Ví d,
các ph$n “test” và “homes” là các chia s3 riêng r7 i v
i "a cng; chúng cha các
tu5 ch(n ưc ánh x t
i các thư mc c th trên server Samba. Ph$n chia s3
“printers” cha các tu5 ch(n ánh x t
i các máy in khác nhau c
a servers. Tt c các
ph$n ưc xác nh trong file smb.conf, tr ph$n [global, s7 ưc coi như các chia
s3 "a cng hoc máy in cho nhng dùng kt ni v
i server Samba.
Các dòng vào còn li là các tu5 ch(n riêng ưc quy nh c th cho s chia s3 ã ưc
cp t
i. Các tu5 ch(n ó có tác dng cho t
i khi b)t $u mt ph$n m
i ưc ký hiu
trong cp ngoc vuông, hoc cho t
i im cui c
a file smb.conf ưc thit lp b0ng cách
gán giá tr cho chúng. Mi mt tu5 ch(n cu hình u có cú pháp ơn gin: option =
value
Cui cùng, ta có th dùng khong trng d ngn cách chui các giá tr trong danh sách,
hoc có th dùng các du phy, Hai cách trên là tơng ơng nhau nhng ta ch. nên dùng mt
cách hoc du phy hoc khong trng.
Ch vit hoa không có ý ngh"a gì i v
i file cu hính Samba, ngoi tr trong các v trí
mà h iu hành ưc ch. t
i không cho phép vit, bi vì h iu hành Linux phân bit ch
vit thưng và vit hoa.
Trong trưng hp dòng vào quá dài không th gói g(n trong không gian mà c!a s #
dòng lnh cho phép, ta có th vit tip dòng trong file cu hình Samba b0ng cách dùng ký
hiu du gch ngưc “\”, ví d:
comment = Su chia se dau tien la ban sao chinh cua s\
an pham phan mem Teamworks moi
Có th thay i file smb.conf và bt k5 tu5 ch(n nào c
a nó vào thi im bt k5 trong
khi các daemon Samba ang chy. Theo mc nh, Samba kim tra file cu hình c
a mình
c 60 giây mt l$n tip nhn cá thay i m
i. Nu không mun ch i lâu như vy, bn
có th b)t các daemon ó np li b0ng cách g!i tín hiu SIGHUP t
i chúng, hoc ch. ơn
gin là khi ng li. Ví d, nu tin trình smbd có PID là 893, ta có th b)t nó (c li file
cu hình b0ng lnh sau ây:
# kill –SIGHUP 893
Không phi tt c các thay i u ưc cá máy client chp nhn ngay. Ví d, các tài
nhuyên chia s3 hin thi ang ưc s! dng s7 không ưc ng ký cho n khi các máy
client c)t các ni kt ri kt ni li t
i các tài nguyên ó. Thêm na, c2ng s7 không ưc
ng ký ngay lp tc. iu ó giúp cho các máy client tích cc không b ng)t ni kt mt
cách bt ng hoc gp phi các vn không ưc ch i v truy cp tài nguyên khi phiên
làm vic v4n ang ưc m.
Các bi
n: Samba có mt tp hp $y
cá bin xác nh các c trưng c
a server
Samba và c
a cá máy client ni v
i nó. Mi mt bin ưc b)t $u b0ng du ph$n trm
“%”, tip theo là mt ký t ơn vit hoa hoc vit thưng và ch. có th ưc dùng bên v
phi c
a dòng linh tu5 ch(n cu hình theo cú pháp potion = variable nh trong câu li lnh ví
d sau:
[pub]
path = /home/ftp/pub/%a 2
0
Ký hiu bin %a có ngh"a i din cho kin trúc c
a máy tính client, như WinNT ch.
các máy tính chy trên Windows NT, Win95 – cho máy Windows 95 hoc 98, hay như
WfWg – cho Windows for Worrgroups (Windows 3.11). Theo cách vit trên, Samba s7 gán
ưng d4n chung ch. t
i tài nguyên ưc chia s3 trong ph$n [pub] cho các máy client chy
trên Windows NT, gán ưng d4n khác cho các máy Windows 9x, và mt ưng d4n na
cho các máy v
i Windows for Worrkgroups. Nói cách khác, các ưng d4n mà theo ó mi
máy client nhn thy tài nhuyên chia s3 s7 khác nhau, tu5 thuc vào kin trúc c
a client.
Bin $nh ngh)a
Các bin ca máy client
%a Kin trúc c
a các máy client(ví d, Samba, wfwg, winNT, win95,
hoc UNKNOWN).
%I a ch. IP c
a client(ví d, 192.168.220.100).
%m Tên NetBIOS c
a client.
%M Tên DNS c
a client.
Các bin v ngưi dùng
%g Nhóm chính c
a %u
%G Nhóm chính c
a %U
%u Thư mc home hin thi c
a %u.
%U Tên ngưi dùng ưc yêu c$u trên máy client
Các bin v tài nguyên
ư#c chia s5
%p ưng d4n cho automounter t
i thư mc gc c
a tài nguyên ưc
chia s3, nu thư mc ó khác v
i %P
%P Th mc gc hin thi c
a tài nguyên ưc chia s3.
%S Tên hin thi c
a tài nguyên ưc chia s3.
Các bin ca server
%d nh danh tin trình (PID) server hin thi.
%h Tên host DNS c
a server Samba.
%L Tên host NetBIOS c
a server Samba
%N Th mc home c
a server Samba, ly t file ánh x (map) c
a
automount.
%v Phiên bn Samba.
Các bin khác
%R Mc c
a giao thc SMB ưc tho thun thit lp.
%T Ngày gi hin ti.
Danh sách các bin c
a Samba
D.4 Các phn
c bit ca file cu hình Samba
Phn [global]: Ph$n [global] xut hin h$u như trong m(i file cu hình Samba, thm
chí khi trong ó không có dòng lnh b)t buc nào. M(i tu5 ch(n ưc thit lp trong ph$n
này u ưc áp dng i v
i tt c các tài nguyên chia s3 khác, vì ni dung c
a ph$n này
s7 ưc sao chép vào các ph$n khác. Nhưng các ph$n khác, nu c2ng có các tu5 ch(n ging
như trong ph$n [global], thì trong các ph$n ó, các tu5 ch(n s7 ưc xác nh v
i các giá tr
i ưc ghi '#lên các lên các giá tr c2 c
a [global]. Ta có th cu hình server 2
0
Samba, $u tiên ta phi chú ý n ba tu5 ch(n cu hình cơ bn xut hin trong ph$n
ửglobalứ c
a file cu hình smb.conf:
[global]
Server configuration parameters
netbios name = HYDRA
server string = Samba %v on (%L)
workgroup = SIMPLE
Tu* chn netbios name: cho phép t tên NetBIOS cho server. Ví d:
netbios name = DHQGHN
Giá tr mc nh cho tu5 ch(n này là tên máy c
a server (ph$n bên trái cùng c
a tên
DNS $y
). Ví d, tên NetBIOS mc nh c
a máy hut.edu.vn s7 là HUT. Thông thưng,
ngưi ta t tên NetBIOS khác v
i tên DNS hin thi.
Vic thay i tên NetBIOS c
a server không ưc khuyn khích nu không có lý do
chính áng, nu như tên ó không phi là duy nht vì mng LAN ưc chia ra thành hai
hay nhiu vùng DNS. Ví d, khi mng hut.edu.vn b chia thành hai vùng v
i các server
là hut.lythuyet.edu.vn và hut.thuchanh.edu.vn thì tên NetBIOS c2 là HUT bây
gi có th thành các tên HUTLYTHUYET và HUTTHUCHANH.
Tùy chn server string: Thông s c
a server string xác nh ni dung dòng chú thích s7
xut hin cnh tên c
a server Samba trong c c!a s #Network Neighborhood (khi ch
Details) l4n c!a s #qun lý in c
a Microsoft Windows. Bn có th dùng các bin chu-n
cung cp thông tin cho dòng mô t ó, ví d trên ta ã s! dng hai bin là %v và %L.
Tùy chn workgroup: Thông s c
a tu5 ch(n workgroup thit lp nhóm làm bic hin
thi, nơi mà server Samba t thông báo cho các thành biên c
a mng v mình. Các clients
mun truy cp ưc tài nguyên ưc chia s3 trên server Samba phi cùng thuc v mt
nhóm làm vic NetBIOS. Nên nh
r0ng các nhóm làm vic phi có các tên nhóm NetBIOS
thc th, tuân theo quy t)c t tên NetBIOS.
Cu hình chia s) #a c&ng
Trong ví d ph$n trư
c ta ã nh)c n r0ng do chưa có tài nguyên ưc chia s3 nên
c!a s #chi tit c
a server hydra ang còn trng. Bây gi ta tip tc làm vic c
i file cu
hình Samba và to ra mt "a cng ưc chia s3 còn rng có tên là [data]. ây là các
ng tác c$n thêm vào t ưc kt qu va nêu:
SampleDataDrive]
comment=Data Drive
path = /export/samba/data
writable = yes
guest ok = yes
Tài nguyên ưc chia s3 ửSampleDataDriveứ thưng là "a cng ưc Samba chia
s3 và ánh x t
i thư mc /export/samba/data trên server Samba. Ta ã cho
thêm mt dòng vào có chú thích mô t tài nguyên ưc chia s3 ó là Data Drive, c2ng
như gán cho bn thân tài nguyên ó mt cái tên SampleDataDrive.
Tài nguyên ưc chia s3 ưc thit lp có quyn ghi cho các ngưi dùng. Giá tr mc
nh c
a tu5 ch(n này là ch. (c. Trong phương án không c$n nc bo mt cht ch7 như
ây, ta t giá tr yes cho tu5 ch(n guest ok, cho bt k5 ai c2ng có th kt ni ưc 2
0
i tài nguyên va ưc chia s3. Trên máy UNIX có cài t Samba ta to thư mc
/export/samba/data v
i quyn root b0ng các lnh sauUV
# mkdir /export/samba/data
#chmod 777 /export/samba/data
Bây gi, nu ta li kt ni v
i server hydra (b0ng cách kích phím chut vào biu tưng
c
a server trong c!a s #Network Neighborhood c
a Windows), mt thư mc ưc chia s3
v
i tên data ã xut hin.
Tu/ chn Thông s Chc nng Mc
nh Phm vi
Path
(directory)
String
(ưng d4n
n thư
mc)
t thư mc UNIX dùng
cho chia s3 "a cng hoc
cho vic xp hàng ch bi
máy in ưc chia s3.
/tmp Share
Guest ok
(public)
Nh phân
(yes/no)
Nu t là yes, s7 không
d$n kim tra xác nhn
ngưi dùng 3 truy cp tài
nguyên ưc chia s3 này.
no Share
Comment
String (xâu
ký t)
t chú thích s7 xut hin
cùng tài nguyên ưc chia
s3.
Không có Share
volume String
t tên cho #"a, theo
dng c
a DOS.
Tên c
a tài
nguyên
ưc chia
s3
Share
Read only
Nh phân
(yes/no)
Nu là yes, cho phép truy
cp ch. (c t
i tài nguyên
ưc chia s3.
yes Share
Writeable
(write ok)
nh phân
(yes/no)
Nu là no, cho phép truy
cp ch. (c t
i tài nguyên
ưc chia s3.
Share
Các tu5 ch(n cơ bn chia s3 "a cng
Các tu* chn v" mng ca Samba
Tu/ chn Thông s Chc nng Mc
nh Phm vi
hosts
allow
(allow
hosts)
String (danh
sách tên máy)
Xác nh các máy có th
kt ni v
i Samba. Không có Share V
Hosts deny
(deny
hosts)
String (danh
sách tên máy)
Xác nh các máy không
th kt ni v
i Samba. Không có Share
Bind
interfaces
only
Nh phân
(yes/no)
Nu t là yes, Samba s7
ch. liên kt t
i các giao
din xác nh bi tu5 ch(n
no V Global 2
0
interfaces.
socket
address
String (a ch.
IP)
t a ch. IP ngheÕ,
dùng cho trng hp có
nhiu giao thc o trên
servers.
Không có Global
Các tu5 ch(n cu hình mng
Tùy chn hosts allow: Tu5 ch(n này xác nh các máy có quyn truy cp các tài
nguyên ưc chia s3 trên servers Samba, ưc vit như danh sách các máy hay a ch. IP
c
a chúng, cách nhau b0ng du phy hoc khong trng. Ta có th t ưc mt chút ít
mc bo mt, ch. ơn gin b0ng cách t a ch. mng con LAN c
a mình vào ch giá
tr c
a tu5 ch(n này. Ví d:
hosts allow = 192.168.200. localhost
Chú ý r0ng ta t localhost (hoc a ch. 127.0.0.1) v trí sau a ch. c
a mng con.
Mt trong s các li thưng thy khi dùng tu5 ch(n hosts allow là cm luôn servers Samba
liên h v
i chính nó. Chương trình smbpasswd s7 c$n ưc kt ni v
i servers Samba như
là mt client thay i mt kh-u mã hóa c
a ngưi dùng. Thêm na, vic duyt ti ch
c2ng òi hi có ưc ng nhp ti ch.
Sau ây là các quy t)c c
a Samba quy nh cho vic dùng các tu5 ch(n hosts allow
và hosts deny:
- Nu không có tu5 ch(n allow hoc deny nào ưc xác nh trong file cu hình
smb.conf Samba s7 cho phép các kt ni t bt k5 máy nào mà h thng Unix
chp nhn
- Nu có các tu5 ch(n allow hoc deny ưc xác trong ph$n !global c
a file cu
hình smb.conf, chúng s7 ưc áp dng cho tt c các tài nguyên ưc chia s3,
thm chí khi mt tài nguyên nào ó có tu5 ch(n ghi '#lên ưc xác nh.
- Nu ch. có tu5 ch(n allow ưc xác nh cho mt tài nguyên ưc chia s3, ch.
có các máy ưc lit kê m
i có quyn truy cp tài nguyên ó. Các máy khác u
b cm.
- Nu ch. có tu5 ch(n deny ưc xác nh cho mt tài nguyên ưc chia s3, m(i
máy không có trong danh sách u có quyn s! dng tài nguyên ó.
- Nu c hai tu5 ch(n allow và deny ưc xác nh, mt máy ã xut hin trong
danh sách ưc phép thì không có mt trong danh sách b cm. Nu không máy
ó s7 b cm truy cp vào tài nguyên ưc chia s3.
Chý ý: C-n thn tránh trng hp ta cho phép mt máy nào ó, nhưng sau y li cm c
mng con mà máy y tham gia.
hosts deny: Tu5 ch(n hosts deny xác nh các máy không có quyn truy nhp tài
nguyên ưc chia s3, ưc vit như danh sách các tên máy hoc a ch. IP c
a chúng, cách
nhau b0ng du ph-y hay khong trng v
i cú pháp ging như
i v
i tu5 ch(n hosts
allow trên. Ví d, hn ch truy cp t
i servers t mt máy, tr t vùng example.com,
ta có th vit:
hosts deny = ALL EXCEPT.example.com 2
0
Ging như hosts allow, không có giá tr mc nh cho tu5 ch(n hosts deny. Nu mun
cho phép hay cm truy cp t
i tài nguyên ưc chia s3 c th ta phi qua c hai tu5 ch(n
hosts allow và hosts deny trong ph$n ửglobalứ hay nu có dng thì phi ghi '#
giá tr m
i trong ph$n cu hình cho tài nguyên ưc chia s3 ó.
interfaces: Tu5 ch(n interfaces lit kê các a ch. mng mà ta mun servers Samba
nhn bit và áp ng. Tu5 ch(n này rt tin li nu ta mun máy tính tham gia ng thi
nhiu mng con. Nu không ưc dùng Samba tìm giao din mng chính c
a servers (th-
ưng là card Ethernet $u tiên) khi khi ng và t cu hình hot ng ch. trong mng
con có giao din mng ó. Ta phi dùng tu5 ch(n này b)t buc Samba phi thc hin
mng con khác na trong mng c
a ta.
Giá tr c
a tu5 ch(n là mt hay nhiu b gm các ôi a ch. IP/ mt n mng, ging
như trong ví d sau:
interfaces = 192.168.220.100/255.255.255.0 192.168.210.30/255.255.0
Có th dùng nh dng mt n bít CIDR nh sau:
interfaces = 192.168.220.100/24 192.168.210.30/24
S c
a mt n bít ch. s $u tiên ưc bt trong mt n mng, ví d s 24 ngh"a là 24
bít $u tiên (trong s tt c 32 bit) s7 ưc kích hot, hay ông ngh"a v
i giá tr mt n
mng 255.255.255.0. Tương t nh vy, s 16 tương ương v
i mt n 255.255.0.0, và 8-
v
i 255.0.0.0. Tuy nhiên, tu5 ch(n này có th hot ng không úng nu ta dùng DHCP
(phân phi a ch. IP ng).
Bind interfaces only: Tu5 ch(n này có th ưc dùng b)t buc các tin trình smbd
và nmbd phc v các yêu c$u SMB ch. cho các a ch. ưc xác nh bi tu5 ch(n
interfaces mà thôi. Tin trình nmbd bình thưng liên kt giao din (0.0.0.0.) trên các c ng
137 và 138 t
i tt c các a ch., cho phép chúng nhn các thông báo phân phi công cng
t kh)p m(i nơi. Tuy nhiên, nu ta ghi '#lên giá tr ó b0ng:
bind interfaces only = yes
Thì ch. các gói i t các a ch. ngun xác thông qua tu5 ch(n interfaces m
i ưc chp
nhn. V
i smbd, tu5 ch(n này c2ng b)t Samba không phc v các yêu c$u v file c
a các
mng con ngoài danh sách c
a tu5 ch(n interfaces. Nu mun cho phép có các ni kt
mng tm thi, như dng SLIP hoc ppp, ta không ưc dng tu5 ch(n này. Nói chung, tu5
ch(n này ít ưc dùng, và thưng ch. có nhng ngưi qun tr $y kinh nghim m
i ý t
nó.
Nu t giá tr cho bind intefaces only là yes, ta phi thêm a ch. c
a máy ti ch
(127.0.0.1) vào danh sách c
a interfaces, nu không smbpasswd s7 không th hot ng
ưc.
socket address: Tu5 ch(n socket address quy nh a ch. nào trong s ưc xác nh
bi interfaces s7 “ghe” tc là ch các kt ni. Samba theo mc nh chp nhn tt c các
ni kt v
i tt c các a ch.. Khi ưc dùng trong file smb.conf, tu5 ch(n này hn ch s
a ch. mà Samba s7 dùng ch các ni kt. Vi d:
Interfaces = 192.168.220.100/24 192.168.210.30/24
Socket address = 192.168.210.30
Bình thưng, tu5 ch(n này không ưc khuyên dùng.
Nu như có dùng các mt kh-u ã mã hoá, ta phi thêm vào mt dòng có ni dung
encrypt passwords=yes vào file cu hình trên.
Sau khi ã son tho ni dung như trên c
a file smb.conf và t nó vào úng v trí c$n
thit, ta khi ng li server Samba và dùng các máy client Windows kim tra kt qu. 2
0
Tt nhiên các máy client Windows ó c2ng phi thuc v nhóm SIMPLE – trong ví d ta
v4n dùng t $u chơng – ó là các máy phoenix và chimaera.
M(i tu5 ch(n xut hin tr
c ph$n ưc ánh du b0ng ngoc vuông “[]”$u tiên, tc là
bên ngoài ph$n [lobal] c2ng ưc coi là nhng tu5 ch(n chung.
Phn [mes] Nu mt client nào ó c g)ng kt ni t
i tài nguyên ưc chia s3 không
ưc nêu trong file cu hình smb.conf, Samba s7 tìm tài nguyên ưc chia s3 ửhomesứ
trong file cu hình. Nu ph$n này tn ti, tên c
a tài nguyên ưc chia s3 không xác nh
kia s7 ưc coi như tên ngưi dùng c
a Linux và ưc yêu c$u tìm trong cơ s d liu mt
kh-u c
a server Samba. Nu như có tên ngưưi dùng ó, Samba coi máy ưc nói t
i
trên là mt ngưưi dùng Linux ang c kt ni t
i th mc home c
a mình trong server.
Ví d, gi s! mt máy client kt ni v
i server Samba hydra l$n $u tiên, và c truy cp
i tài nguyên ưc chia s3 có tên là [dung]. Trong file smb.conf, không có tài nguyên
ưc chia s3 nào tên là ửdungứ ưc xác nh, nhng li có ph$n [homes], vì th Samba
tìm file cơ s d liu mt kh-u và tìm xem có tài khon ngưưi dùng dung trong h thng
hay không, Sau ó Samba kim tra m$y kh-u ưc client cung cp và so sánh v
i mt kh-u
c
a ngưưi dùng Linux dung - hoc trong file cơ s d liu mt kh-u nu dùng mt kh-u
mã hoá. Nu các mt kh-u ó trùng nhau, Samba nhn bit ch)c là ngưưi dùng dung có
quyn và ang mun kt ni t
i th mc home c
a mình trong máy Linux. Sau ó Samba s7
t to tài nguyên ưc chia s3 ưc g(i là ửdungứ cho ngưi dùng dung.
Ngưi ta c2ng áp dng phơng pháp ưc thc hin v
i ph$n [homes] to tài khon
ngưi dùng m
i, +'m theo mt kh-u.
Phn [printers]: Ph$n c bit th ba g(i là [printers] tương t như ph$n
[homes]. Nu mt client c kt ni t
i tài nguyên ưc chia s3 không có mt trong file
cu hình smb.conf file, và nu tên c
a nó không th tìm ưc trong file mt kh-u, Samba s7
kim tra xem nó có phi s chia s3 máy in cho client ó. Samba thc hin iu ó thông
qua vic (c file d liu máy in (thưng là /etc/printcap hay /etc/terminfo)
xem có tên c
a tài nguyên ưc chia s3 ó hay không. Nu có, Samba to ra tài nguyên
ưc chia s3 v
i tên liên quan t
i vic chia s3 máy in. có th in ưc trong Samba ta
phi thêm các tu5 ch(n printer driver, printer driver file, và printer
driver location vào file cu hình smb.conf c
a Samba. Tu5 ch(n chung printer
driver file ch. n file printers.def phi ưc t vào ph$n [global]. Các tu5 ch(n còn li
ưc t vào ph$n tài nguyên máy in ưc chia s3 mà ta mun cu hình mt cách t ng
các trình iu khin máy in. Giá tri cho printer driver phi trùng v
i xâu ưc hin ra trong
Printer Winzard trên h thng Windows. Giá tr c
a printer driver location là -
ng d4n c
a tài nguyên PRINTER$ mà ta thit lp, ch không phi là ng d4n UNIX
trên server. Do ó, ta có th dùng các dòng mã sau ây trong file cu hình Samba:
[global]
printer driver file = /usr/local/samba/print/printers.def
[hpdeskjet]
path = /var/spool/samba/printers
printable = yes
printer driver = HP DeskJet 560C Printer
printer driver location = \\%L\PRINTER$
Ging như i v
i ph$n [home], ta không c$n phi bo trì tài nguyên ưc chia s3 cho
mi mt may in c
a h thng trong file cu hình smb.conf. Thc vy, Samba luôn da vào 2
0
vic ng ký máy in c
a Linux nu ta c$n n, và cung cp các máy in ã ng ký cho các
client. Tuy nhiên, có mt hn ch nh: nu tài khon ngưưi dùng và máy in u có tên là
hai, Samba bao gi c2ng tìm tài khon ngưưi dùng tr
c tiên, bt k là client thc ra là c$n
kt ni v
i máy in.
Các chi tit G'# vic thit lp tài nguyên ưc chia s3 ửprintersứ ưc trình bày
trong ph$n liên quan t
i vic in và phân gii tên.
Các tu* chn cu hình: Các tu5 ch(n trong file cu hình Samba ưc chia s3 làm hai
loi: global (toàn cc) và share (chia s3). Mi mt loi quy nh mt tu5 ch(n s7 ưc xut
hin âu trong file cu hình.
Global (toàn cc): Các tu5 ch(n global phi có mt ch. trong ph$n [global]
mà thôi. ây là các tu5 ch(n thưng ch. ps dng xác nh hot ng c
a chính server
Samba.
Share: Các tu5 ch(n share có th xut hin trong các tài nguyên ưc chia s3 c th,
hoc c trong ph$n [global]. Nu có mt trong ph$n [global], chúng s7 xác nh
các giá tr mc nh cho tt c các tài nguyên ưc chia s3, chng nào cha b các tu5 ch(n
cùng tên ti các ph$n tài nguyên ưc chia s3 c th ghi '#nhng giá tr m
i.
D.5 Qun lý ngưi dùng trong Samba
Samba có kh nng qun lý ngưi dùng có kh nng truy cp vào máy ch
Samba. Nó
có kh nng qun lý ngưi dùng khá c lp v
i h thng ngưi dùng h thng. Thông
thưng các thông tin v ngưi dùng s7 ưc lưu trong file smbpasswd, file này n0m trong
thư mc /etc/samba. thêm mt ngưi dùng cho samba qun lý, ngưi dùng ó phi là
mt ngưi dùng trong h thng. Sau ó, thao tác v
i nhng ngưi dùng c
a samba, ta có
công c smbpasswd.
smbpasswd [-a][-x][-d][-e][-h][-s] [ tên người dùng ]
Trong ó,
- a : tu5 ch(n này cho phép ta thêm mt ngưi dùng m
i vào trong danh sách ngưi
dùng c
a samba.
- x : tu5 ch(n này cho phép xoá b mt ngưi dùng trong danh sách ngưi dùng c
a
samba.
- d : tu5 ch(n này cho phép ta khoá (disable) mt ngưi dùng trong danh sách
ngưi dùng c
a samba.
- e : tu5 ch(n này cho phép ta m khoá (enable) mt ngưi dùng trong danh sách
ngưi dùng c
a samba mà ngưi dùng ó ã b khoá b0ng tham s -d.
- <tên ngưi dùng>: tên c
a ngưi dùng ta mun x! lý.
Ch/ng hn, mun thêm mt ngưi dùng vào trong danh sách ngưi dùng c
a samba, ta
dùng lnh (s! dng lnh này v
i quyn root):
#smbpasswd –a thanhnt
Trong ó ngưi dùng thanhnt phi là mt ngưi dùng h thng. Sau khi ánh lnh này,
máy s7 hi ta ánh vào mt kh-u cho ngưi dùng m
i này, và samba cho phép ngưi dùng
do nó qun lý có th có mt kh-u khác v
i mt kh-u h thng c
a ngưi dùng ó.
New SMB password:
Retype new SMB password:
Password changed for user thanhnt. 2
0
Lưu ý là mt kh-u s7 ưc hi hai l$n m bo tính chính xác và mt kh-u s7 không
ưc hin th ra màn hình. Nu thành công thì ta s7 nhn ưc thông báo như trên. Ta c2ng
có th dùng lnh này thay i mt kh-u c
a mt ngưi dùng b0ng lnh (thc hin b0ng
quyn root):
#smbpasswd thanhnt
Khi ó nó s7 thông báo cho ta nhp mt kh-u hai l$n ging như trên. Còn trong trưng
hp là mt ngưi dùng bình thưng thì mun thay i mt kh-u samba cho chính ngưi
dùng ó ta ch. c$n ánh:
#smbpasswd
Old SMB password:
New SMB password:
Retype new SMB password:
Mismatch - password unchanged.
Unable to get new password.
Trong trưng hp trên, máy s7 yêu c$u ta nhp mt kh-u c2 trư
c khi nhp mt kh-u
i, nu có sai sót (mt kh-u c2 không úng hoc mt kh-u m
i không kh
p nhau) thì ta s7
nhn ưc thông báo li.
Nu mun xoá ngưi dùng ra khi danh sách ngưi dùng thì s! dng lnh (v
i quyn
root):
#smbpasswd –x thanhnt
Còn nu mun mt ngưi dùng trong danh sách v4n tn ti nhưng không có hiu lc,
thì ta có th khoá ngưi dùng ó b0ng lnh:
#smbpasswd –d thanhnt
Khi ó ngưi dùng thanhnt tuy v4n còn n0m trong danh sách nhưng không ưc samba
coi là ngưi dùng hp l na. Khi mun khôi phc ngưi dùng này có các quyn như ban
$u thì ta có th khôi phc b0ng lnh:
#smbpasswd –e thanhnt
D.6 Cách s
dng Samba t" các máy trm
D.6.1 Cách s
dng t" các máy trm là Linux
Samba có cung cp mt công c nh0m s! dng các thư mc chia s3 theo giao thc SMB
trong mng LAN, ó chính là smbclient. V
i công c này ta có th thao tác v
i tài nguyên
ưc chia s3 trên mng, ch/ng hn như kt ni vào mt thư mc chia s3 trên mt máy nào
ó thao tác, sao chép file t thư mc ó. smbclient c2ng ging như mt chương trình
client ftp.
smbclient <tên d
ch v> [-U <tên ngưi dùng> ] [ -W <tên
mi+n hoc group> ] –L [<tên netbios>]
Trong ó:
- <tên dch v> : là tên c
a dch v mun s! dng, có dng //Maychu/dichvu. Maychu
là tên netbios c
a máy ch
cung cp dch v, còn dichvu là tên c
a dch v mun s!
dng. Ch/ng hn như //dulieu/setups, thì tên máy ch
c$n truy nhp là dulieu, còn 2
0
setups là tên thư mc mun tham chiu n. Ta c2ng có th s! dng a ch. IP thay
cho tên netbios dư
i dng //192.168.0.12/setups.
- U <tên ngưi dùng> : là tên ngưi dùng mun s! dng tài nguyên ó.
- W <tên min hoc group> : là tên min hoc group mà máy ch
ó thuc vào.
- L <tên netbios> : là tên netbios c
a máy ch
ta mun xem các dch v mà máy ch
ó
ang cung cp.
Ví d, xem thông tin v các thư mc chia s3 c
a mt máy ng thi cùng v
i các
thông tin v các máy trong min, các máy min khác ta dùng lnh:
# smbclient -L 10.10.16.5 -U thanhnt -W httt
Thì máy s7 hi ta mt kh-u ng v
i ngưi dùng trên, sau khi ánh úng mt kh-u ta s7
thu ưc kt qu:
added interface ip=10.10.16.23 bcast=10.10.255.255 nmask=255.255.0.0
Password:
Domain=ửCHTTTMPIứ OS=ửUnixứ Server=ửSamba 2.2.3aứ
Sharename Type Comment
--------- ---- -------
netlogon Disk Network Logon Service
public Disk Public Stuff
Source Disk Source and documents for vietseek
IPC$ IPC IPC Service (Samba Server)
ADMIN$ Disk IPC Service (Samba Server)
thanhnt Disk Home Directories
Server Comment
--------- -------
HTTT-23 Samba Server
Workgroup Master
--------- -------
BCNK.FOTECH VINHTQ
BMVT NGUYENHONG
CHTTTMPI HTTT-23
ECC HUNGTN
FOTECH ANHNV
FOTECH-CTSV MAIPT
s! dng mt dch v (mt thư mc chia s3 ch/ng hn) ta có th dùng lnh như sau:
# smbclient //10.10.16.5/setup -U thanhnt -W httt
Trong trưng hp này ta s7 ưc máy hi mt kh-u, nu thành công thì nó s7 cho ta
mt phiên làm vic v
i dch v ó, c th ta s7 ưc mt phiên làm vic v
i thư mc, ta có
th sao chép file trên thư mc này vào máy hin ti và ngưc li.
added interface ip=10.10.16.23 bcast=10.10.255.255
nmask=255.255.0.0
Password:
Domain=[CHTTTMPI] OS=[Unix] Server=[Samba 2.2.3a] 2
1
smb: \>
smb: \> ls
. D 0 Tue Sep 11 12:03:53 2001
.. D 0 Tue Sep 11 12:03:53 2001
ee120-ta D 0 Wed Aug 29 09:37:14 2001
fa01 D 0 Fri Sep 21 09:47:34 2001
60472 blocks of size 2097152. 52606 blocks available
smb: \> cd fa01\ee120-kmm
smb: \> put hello.p [send files from local to remote]
smb: \> get interruptq.doc [receive files to local from
remote]
smb: \> quit
Khi du nh)c hin ra, xem các lnh thao tác, ta có th ánh lnh help. Sau khi
kt thúc phiên làm vic, ta dùng lnh quit thoát.
K
t gn mt th mc chia s) vào mt th mc trong h thng file hin ti:
Trong trưng hp ta không mun dùng các lnh smbclient cho tng phiên làm vic
khi mà ta s7 có nhiu thao tác v
i thư mc ưc chia s3 ó, gii pháp tt nht là kt
g)n thư mc chia s3 ó vào thành mt thư mc trên máy cc b. Khi ó thư mc
ưc kt g)n s7 tr thành mt thư mc bình /ng như các thư mc trên máy cc b.
M(i vic thao tác s7 tr nên thun tin hơn rt nhiu. làm iu ó ta dùng lnh
(v
i quyn root):
#smbmount //10.10.16.5/setup /mnt/smb –o username=thanhnt
hoc
#mount –t smbfs //10.10.16.5/setup /mnt/smb –o
username=thanhnt
Khi ó máy s7 hi mt kh-u, khi thành công thì ta s7 ánh x ưc thư mc chia
s3 setup trên máy 10.10.16.5 thành mt thư mc /mnt/smb trên máy c
a mình. Khi
nào xong ta có th b kt g)n ó b0ng lnh:
#smbmount /mnt/smb
hoc
#umount /mnt/smb
D.6.2 Cách s
dng t" các máy trm là Windows
Ta ch(n menu start, ta ch(n run, sau ó ánh vào tên máy mà ta mun s! dng
mt dch v nào ó như trên hình D.2. 2
1
Hình D.2 S! dng dch v samba t máy trm Windows
Sau ó máy s7 hi ta tên ngưi dùng và mt kh-u dùng truy cp. Sau khi nhp
các thông tin, nu thành công thì ta s7 ưc mt c!a s #hin th danh sách các
dch v c
a máy ch
samba ó cung cp như hình D.3.
Hình D.3 Danh sách các dch v trên mt samba server
Cho phép ánh x mt thư mc trên mt samba server thành mt #"a trêm máy
trm Windows b0ng cách trên c!a s #hin danh sách các tài nguyên trên ta nháy phi
chut vào thư mc ta mun ánh x, sau ó ch(n “Map network drive” như trên hình
D.4. 2
1
Hình D.4 To mt ánh x# #"a trên máy trm Windows
Sau ó máy s7 hi tên #"a mà ta mun t cho #m
i này như hình D.5: 2
1
Hình D.5 t tên #"a cho mt ánh x# #"a
Bạn đang đọc truyện trên: Truyen247.Pro