Hệ điều hành linux và unix

Màu nền
Font chữ
Font size
Chiều cao dòng

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

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 

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 

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. 

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

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 

i m chính ca Linux 

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

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

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

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

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

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. 

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

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 

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

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

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

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. 

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

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

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

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. 

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 

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ư

file (byte) 

;?@y gi#

Ao file  

Tên file  

drwxr-xr-x  12 root root   4096   Oct 23 2000 LinuxVN.com 

Quyn %

ngưi BCng khác 

Kiu file: thư

:c 

Quyn %

ngưi %&

Quyn %

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 %

ngưi %&

(c, ghi, 

thc hin 

Quyn %

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

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 

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

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

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

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

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] 

d hoc CTRL+D 

q hoc CTRL+Q 

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 

CTRL+L 

:f 

Hin th s dòng hin thi 

xem k file tip theo 

Tr li k file trư

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ư

* 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 

[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 

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

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

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

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

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. 

cu 

trú

d

liu 

i

khi

quá 

trìn

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 

(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

(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

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

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: 

 $mail 

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ư

+   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

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 

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 

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

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

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 

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

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

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

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

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

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 

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 

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

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 

[email protected] 

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

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

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. 

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

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

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ư

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

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

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

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.  

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. 

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. 

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ư

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

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ư

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ư

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

 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ư

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ư

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

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

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

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ư

ó. 

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ư

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

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

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

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

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

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

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

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: Truyen2U.Pro