You are on page 1of 47

- 1-

Mc lc
Bi 1

NG NHP H THNG LINUX ............................................... 3

1.1.
1.2.
1.3.

Truy cp vo my tnh ci t h iu hnh Linux................................. 3


S dng Telnet truy cp vo my Linux t xa........................................ 3
Thot khi h thng..................................................................................... 3

Bi 2

S DNG E-Mail

2.1.
2.2.
2.3.

Gi th bng sendmail................................................................................. 4
Nhn th ...................................................................................................... 4
Cc thao tc h tr....................................................................................... 4

Bi 3

CC LNH TRN LINUX ............................................................. 6

3.1.
T chc h thng tp tin trn Linux ............................................................ 6
3.2.
Cc lnh thao tc trn h thng tp tin ........................................................ 6
3.2.1.
To mi th mc................................................................................. 6
3.2.2.
Thay i th mc hin hnh ............................................................... 7
3.2.3.
Xem th mc lm vic hin hnh ....................................................... 7
3.2.4.
Xem thng tin v tp tin v th mc................................................... 7
3.2.5.
Di chuyn mt hay nhiu tp tin ......................................................... 7
3.2.6.
Sao chp tp tin................................................................................... 8
3.2.7.
To lin kt vi tp tin ........................................................................ 8
3.2.8.
Tm kim mt tp tin .......................................................................... 8
3.2.9.
Xo th mc rng ............................................................................... 9
3.2.10.
Xa cc tp tin hoc th mc.............................................................. 9
3.2.11.
Xem hng dn s dng lnh ............................................................. 9
3.2.12.
Hin th ni ca cc tp tin ................................................................. 9
3.2.13.
Ni cc tp tin ..................................................................................... 9
3.2.14.
Xut ni dung thng bo................................................................... 10
3.2.15.
Nn v gii nn tp tin ...................................................................... 10
3.3.
Cc lnh h thng ...................................................................................... 10
3.3.1.
Lnh at .............................................................................................. 10
3.3.2.
Lnh hostname .................................................................................. 10
3.3.3.
Lnh ps............................................................................................. 10
3.3.4.
Lnh clear.......................................................................................... 11
3.3.5.
Lnh date........................................................................................... 11
3.3.6.
Lnh cal <month> <year> ............................................................... 11
3.3.7.
Lnh mount ....................................................................................... 11
3.3.8.
Tin ch mc ....................................................................................... 11
3.3.9.
Tin ch my tnh bc ......................................................................... 12

Bi 4

QUN L TI KHON V PHN QUYN S DNG.......... 13

4.1.
Qun l ti khon ca h thng ................................................................. 13
4.1.1.
Ti khon ngi dng ....................................................................... 13
4.1.2.
Ti khon nhm ngi dng............................................................. 13
4.2.
Phn quyn ngi dng trn h thng tp tin............................................ 13
4.2.1.
Cc quyn truy xut trn tp tin........................................................ 13
4.2.2.
Lnh chmod ...................................................................................... 14
4.2.3.
Thay i ngi hoc nhm s hu tp tin ........................................ 14

- 2-

Bi 5
5.1.
5.2.
5.3.
5.4.
5.4.1.

Bi 6
6.1.
6.2.
6.3.
6.4.
6.5.
6.6.

Bi 7
Bi 8

S DNG TRNH SON THO VI ........................................... 17


Gii thiu................................................................................................... 17
Khi ng vi .............................................................................................. 17
Son tho vn bn...................................................................................... 17
Thot khi vi.............................................................................................. 18
Dng vi vi danh sch cc lnh chy ca Shell ........................... 18

LP TRNH SHELL

21

Chng trnh tnh tng 1-> n..................................................................... 21


Chng trnh tnh giai tha ca mt s ..................................................... 21
Chng trnh m s dng ca mt tp tin ............................................... 21
Chng trnh m s t ca mt tp tin .................................................... 22
Chng trnh tm dng c di ln nht trong mt tp tin..................... 22
Chng trnh tm mt xu trong mt tp tin.............................................. 23

Lp trnh C & C++


24
QUN L TIN TRNH 26

8.1.
Gii thiu................................................................................................... 26
8.1.1.
To mt tin trnh - lnh fork............................................................ 26
8.1.2.
Dng mt tin trnh........................................................................... 26
8.1.3.
Giao tip gia cc tin trnh.............................................................. 27
8.1.4.
Lin lc gia hai tin trnh ................................................................ 28
8.2.
Lp trnh a tin trnh ................................................................................ 29
8.2.1.
ng dn lin lc ................................................................................. 29
8.2.2.
Thao tc vi "ng dn lin lc"......................................................... 30
8.2.3.
Lin lc gia tin trnh cha v tin trnh con .................................... 30

Bi 9

Lp trnh mng TCP/IP 31

9.1.
9.2.

Lp trnh client /server theo giao thc TCP/IP.......................................... 31


Lp trnh client /server theo giao thc UDP/IP ......................................... 36

Bi 10
Bi 11
Bi 12

Dch v FTP
39
CC TP TIN CU HNH MNG ............................................. 41
CU HNH DCH V DNS .......................................................... 43

12.1.
Cc tp tin cu hnh dch v DNS ........................................... 43
12.1.1.
Tp tin /etc/host.conf ........................................................................ 43
12.1.2.
Tp tin /etc/resolv.conf ..................................................................... 43
12.1.3.
Tp tin /etc/named.conf ................................................................... 43
12.1.4.
Tp tin /var/named/dng.vn.zone ....................................................... 43
12.1.5.
Tp tin /var/named/edu.vn.zone........................................................ 44
12.1.6.
Tp tin /var/named/0.0.127.in-addr.arpa.zone .................................. 44
12.1.7.
Tp tin /var/named/localhost.zone ................................................... 44
12.1.8.
Lnh khi ng dch v DNS ........................................................... 44
12.2.
Cc lnh v tin ch h tr ........................................................... 45
12.2.1.
Lnh nslookup................................................................................... 45
12.2.2.
Lnh host........................................................................................... 45
12.2.3.
Lnh dig ............................................................................................ 45
12.2.4.
Tin ch redhat-config-bind .............................................................. 45

- 3-

NG NHP H THNG LINUX

Bi 1
1.1.

Truy cp vo my tnh ci t h iu hnh Linux

Khi ng my ci t Linux, xut hin du nhc khi ng h iu hnh:


Boot : linux

Khi HH Linux khi ng, xut hin du nhc truy cp h thng :


login :
password :

Ngi dng nhp vo username v password tng ng, trn mn hnh xut hin
du nhc ca h thng nh sau :
[user12@linux user12]$

1.2.

S dng Telnet truy cp vo my Linux t xa

Truy cp vo Server LINUX t my Windows. Yu cu my Windows ci t


mng. kim tra h thng mng, t du nhc ca lnh trn Windows, g lnh :
C:\>ping 200.201.202.180

Nu trn mn hnh xut hin :

Reply from 200.201.202.180 ...

th ngha l my tnh c kh nng truy cp vo Server LINUX, ngc li, nu c


thng bo no khc thng bo nh trn th nn kim tra li cu hnh mng trn my.
Tip theo, ta g lnh :
telnet 200.201.202.180

Sau mt khong thi gian thit lp lin kt, trn ca s telnet xut hin :
login :
password :

Ngi dng nhp vo username v password tng ng.

V d : ng nhp vo vi ti khon user12, trn mn hnh xut hin nh sau :


login: user12
Password:
Last login: Wed Apr 7 08:35:50 from 131.16.16.21
[user12@linux user12]$

1.3.

Thot khi h thng

Thot khi phin lm vic :

#exit

hoc

Chm dt hot ng ca h thng :

#shutdown h now

#logout

- 4-

S DNG E-Mail

Bi 2

Th in t hin nay ang tr thnh phng tin chnh lin lc trn mng. Th
in t d s dng, tin li v nhanh chng. Trong phn ny ta s dng dch v
sendmail ca h thng Linux.

2.1.

Gi th bng sendmail
C php : mail <address1> <address2> <address3> . . .

$mail

user01 root

Tip theo, trn mn hnh xut hin


Subject :

Bn g vo ch bc th. Nhn Enter, bt u nhp vo ni dung th.


Sau khi nhp vo ni dung th, nhn CTRL-D gi th i.
Trn mn hnh xut hin :
CC :

Nhp vo tn nhng ngi cng nhn th hoc nhn Enter b qua.

2.2.

Nhn th
Khi c th n, trn mn hnh xut hin thng bo :
You have mail

c th, g vo lnh :

$mail

Trn mn hnh s lit k cc bc th theo th t 1, 2, 3 ... c ni dung


th no, g vo s th t ca bc th .
Du & nhc rng bn ang chng trnh c th.
xa th ang c, ti du nhc bn g :

&d

thot chng trnh c th, ti du nhc bn g :

&q

V d Mt phin gi mail ca user12 :


[user12@linux user12]$ mail user15 root
Subject: Chao ban
Thuc hanh LINUX
Cc:
[user12@linux user12]$

2.3.

Cc thao tc h tr

hy b th trc khi gi, bn nhn CTRL-C hai ln.

c ni dung mt tp tin trn th mc hin hnh vo mail : ~r

filename

- 5-

Thay i ch ca th :

Xem tt c cc th lu trong hp th :

~s
$more mbox

Cc lnh thao tc trn sendmail


t <message list>
type messages
n
goto and type next message
e <message list>
edit messages
f <message list>
give head lines of messages
d <message list>
delete messages
s <message list>
file append messages to file
u <message list>
undelete messages
R <message list>
reply to message senders
r <message list>
reply to message senders and all recipients
pre <message list> make messages go back to /usr/spool/mail
p <message list>
print message
m <user list> mail to specific users
q
quit, saving unresolved messages in mbox
x
quit, do not remove system mailbox
h
print out active message headers
!
shell escape
cd [directory] chdir to directory or home if none given

- 6-

CC LNH TRN LINUX

Bi 3
3.1.

T chc h thng tp tin trn Linux

/etc
/usr/bin
/dev
/usr/man
/usr/include
/var/log
/home
/usr/lib

Cu hnh h thng cc b theo my


Cha hu ht cc lnh ngi dng.
Cc tp tin thit b.
Cha cc ti liu trc tuyn.
Cha cc tp tin include chun ca C.
Cc tp tin lu gi thng tin lm vic hin hnh ca ngi dng.
Cha cc th mc con ca cc user.
Cha cc tp tin th vin ca cc chng trnh ngi dng.

Khi truy cp vo h thng, th mc lm vic ca ngi dng c xem nh l th


mc ch. V d : Th mc ch ca user01 s l /home/user01
Nu ng dn bt u bng du /, h thng xem nh l mt tn ng dn
y bt u t th mc gc.

3.2.

Cc lnh thao tc trn h thng tp tin

Cc tham s lun bt u bi du -, v trong hu ht cc trng hp nhiu tham


s mt ch ci c th kt hp dng mt du -.
V d: Thay v dng lnh ls -l -F, ta c th dng lnh tng ng ls -lF.
K t
*?[ ]

K t i din hay theo mu

&

Chy ng dng ch nn (background), tr li du nhc h thng cho


cc tc v khc .

Du phn cch nhiu lnh trn mt dng lnh.

Tt tc dng ca nhng k t c bit nh *, ?, [, ], &, ;, >, <, |

>

nh hng d liu xut ra file.

<

nh hng d liu nhp t file.

>>

3.2.1.

Chc nng

nh hng d liu xut ra cui file nu file tn ti.

nh hng d liu xut l d liu nhp cho lnh tip theo.

S dng bin mi trng.

To mi th mc

C php :

mkdir <dir1> <dir2> ... <dirN>


<dir1> . . . <dirN>

l tn cc th mc cn to.

[user01@linux user01]$ mkdir baitap

- 7[user01@linux
[user01@linux
[user01@linux
[user01@linux
[user01@linux

3.2.2.

user01]$
user01]$
user01]$
user01]$
user01]$

mkdir
mkdir
ls
mkdir
mkdir

document
baitap\ltc
baitap/ltc
baitap/perl

Thay i th mc hin hnh

C php :

cd <directory>

<directory>

l th mc mun chuyn n.

. : yu cu chuyn n th mc hin hnh.


.. : chuyn n th mc cha.
[user01@linux user01]$ cd baitap
[user01@linux user01]$ cd /home
[user01@linux user01]$ cd

3.2.3.

Xem th mc lm vic hin hnh

C php :

pwd

[user12@linux user12]$ pwd


/home/user12
[user12@linux user12]$

3.2.4.

Xem thng tin v tp tin v th mc

C php :

ls

<file1> <file2> ... <fileN> <Tham s>


<file1> . . . <fileN>

l danh sch tn tp tin hay th mc.

<Tham s> :
-F : dng hin th mt vi thng tin v kiu ca tp tin
-l : (long) lit k kch thc tp tin, ngi to ra, cc quyn ngi s dng.
[user12@linux user12]$ ls -lF
total 75
drwxrwxr-x 2 user12
user12
drwxrwxr-x 2 user12
user12
-rwxrwxr-x
1 user12
user12
-rw-rw-r-1 user12
user12
-rw-rw-r-1 user12
user12
[user12@linux user12]$
ls lF
ls *a*
ls F*E

3.2.5.

1024 Apr 7 09:41 baitap/


1024 Apr 7 09:41 doc/
71 Mar 31 10:39 hello*
126 Apr 7 09:26 baitho.txt
70 Apr 7 08:26 hello.c

: hin th tt c tp tin hay th mc con c k t a


: hin th danh sch bt u bng F v kt thc bng E
Di chuyn mt hay nhiu tp tin

C php :

mv

<file1> <file2> ... <fileN> <destination>

- 8<file1> . . . <fileN>
<destination>

l danh sch tn tp tin cn di chuyn

l tp tin hay th mc ch.

Lnh mv c th dng i tn tp tin.


Chuyn nhiu tp tin
$ mv * directory

Di chuyn th mc
[user01@linux user01]$ mkdir ctrinh
[user01@linux user01]$ ls lF
[user01@linux user01]$ mv ctrinh baitap

Di chuyn th mc /home/user01/ctrinh vo th mc /home/user01/baitap


3.2.6.

Sao chp tp tin

C php :

cp <source> <destination>

[user01@linux user01]$ cd baitap


[user01@linux baitap]$ vi tho.txt
[user01@linux baitap]$ mv tho.txt baitho.doc
[user01@linux baitap]$ ls
baitho.doc ctrinh
hello.c
ltc
perl
[user01@linux baitap]$ cp baitho.doc ~/document

Sao chp tt c cc tp tin vo mt danh mc


$ cp

3.2.7.

directory

To lin kt vi tp tin

To lin kt vi tp tin l to thm cho tp tin tn mi v ng dn tng ng.


C php :

ls -l

ln

<source> <destination>

: xem s lin kt ca tp tin.

Mun xa mt tp tin ta phi xo tt c cc lin kt ca n.


[user01@linux
[user01@linux
[user01@linux
[user01@linux
[user01@linux
[user01@linux

3.2.8.

user01]$
user01]$
user01]$
user01]$
user01]$
user01]$

pwd
ls -l
ls -l baitap
ln baitap/file1
ls -l baitap
ls -l file.link

file.link

Tm kim mt tp tin

Lnh find cho php tm kim mt hay nhiu tp tin trong mt cy danh mc.

Tm theo tn:

Tm theo s i-node ca tp tin:

Tm theo tn ngi s hu :

find
find

<path> -name

<filename>

<path> -inum <number>

find <path> -user <username>

- 9 trnh cc thng bo li a ra mn hnh, ta c th i hng u ra li


chun (standard error) ti mt tp tin rng (/dev/null ):
$ find

-name

filename

- print

2>/dev/null

V d:
$ pwd
/home/user01
$ find / -name ttyc2d1 - print 2>/dev/null
/dev/ttyc2d1
$ ls -i /unix
2810 - r- xr- - r- - 2 bin bin 508516 Mar
$find / -inum 2810 - print 2>/dev/null

3.2.9.

10 1989

/unix

Xo th mc rng

C php :

rmdir <dir1> <dir2> ... <dirN>


<dir1> ... <dirN>

rmdir /home/baitap

xa th mc

l tn nhng th mc cn xa.
/home/baitap

3.2.10. Xa cc tp tin hoc th mc


C php :

rm <file1> <file2> ... <fileN>

3.2.11. Xem hng dn s dng lnh


C php :
ho?c

Trong

man <command>
<command> --help
<command> /?
<command>

l tn ca mt cn xem hng dn.

[user12@linux user12]$ man ls


[user12@linux user12]$ cp --help
[user12@linux user12]$ cp --help >cp.txt

3.2.12. Hin th ni ca cc tp tin


C php :

more <file1> <file2> ... <fileN>


<file1> <file2> ... <fileN>

[user12@linux user12]$more baitho.txt


[user12@linux user12]$more mbox

l nhng tp tin cn hin th.

// hin th tp tin baitho.txt


// Xem tt c th lu trong hp th

3.2.13. Ni cc tp tin
C php : cat <file1> <file2> ... <fileN> [>filename]

Lnh dng hin th ton b ni dung ca nhiu tp tin cng mt lc.


<file1> <file2> ... <fileN>

V d:

l nhng tp tin cn hin th ni dung.

- 10Hin th ni dung hai tp tin baitho.txt v vanban.doc


$cat baitho.txt vanban.doc

Kt ni ni dung hai tp tin baitho.txt v vanban.doc vo tp tin thop.doc


$cat baitho.txt vanban.doc >thop.doc

3.2.14. Xut ni dung thng bo


C php :

echo <arg1> <arg2> ... <argN>

Trong <arg1> <arg2> ... <argN> l cc i s dng lnh.


[user12@linux user12]$ echo Chao cac ban
Chao cac ban sinh vien
[user12@linux user12]$echo *

Hin th ni dung th mc

3.2.15. Nn v gii nn tp tin


C php : gzip <filename>

Nn mt tp tin. Tn tp tin nn ging nh tn ban u, km theo ui .gz


[user12@linux user12]$ gzip vanban.txt
C php :

-> vanban.txt.gz

gunzip <filename>
gzip -d <filename>

Lnh dng gii nn tp tin.


[user12@linux user12]$gunzip vanban.txt.gz

3.3.
3.3.1.

Cc lnh h thng
Lnh at

Thc hin lnh theo thi gian nh trc


[user12@linux user12]$ at 8:15am Feb 27
echo Happy birthday | mail emily <CR>
<^d>
[user12@linux user12]$atrm jobnumber
[user12@linux user12]$at -l

3.3.2.

xa lnh trong hng i


hin th danh sch cc lnh trong hng i

Lnh hostname

Hin th tn my tnh ang lm vic.


H thng lu thng tin v tn my trong tp tin /etc/hosts
[user12@linux user12]$ hostname
linux.edu.vn

3.3.3.

Lnh ps

Xem danh sch cc tin trnh ang hot ng trn h thng.


[user12@linux user12]$ ps
PID TTY STAT TIME COMMAND

- 114516 p4 S 0:00 -bash


4703 p4 S 0:00 /usr/bin/mc -P
4705 r0 S 0:00 bash -rcfile .bashrc
4727 r0 R 0:00 ps
[user12@linux user12]$ kill 4703
Terminated

3.3.4.

//Hy b tin trnh mc c s hiu 4703

Lnh clear

Xa mn hnh.
3.3.5.

Lnh date

Hin th ngy thng hin hnh ca h thng


3.3.6.

Lnh cal <month> <year>

Xem lch tng ng vi thng v nm ch nh.


3.3.7.

Lnh mount

C php :

mount [-t <type>] <device> <mountpoint>

Lnh dng kt ni h iu hnh vi cc thit b khc trn h thng.

Lnh ny ch thc hin c khi bn vo h thng vi t cch l root.

type

: Kiu tp tin

device

: Tp tin iu khin thit b kt ni.

mountpoint

: V tr th mc trn h iu hnh dng kt ni vi file thit b.

To kt ni vi a logic 1

To kt ni vi a mm MS-DOS:

#mount /dev/hda1

/mnt/hdisk

#mount /dev/fd0

/mnt/floppy

To kt ni vi a mm LINUX : #mount -t ext2


To kt ni vi a CDROM :

#mount /dev/hda1

Hy kt ni vi a mm

#umount /dev/fd0

/dev/fd0

/mnt/floppy

/mnt/cdrom

Ch : H thng Linux xem cc thit b kt ni nh cc mt tp tin c bit.


3.3.8.

Tin ch mc

Tin ch mc trn Linux c giao din lm vic ging nh trnh NC Command ca


MS - DOS. khi ng mc g lnh nh sau :
#mc

- 123.3.9.

Tin ch my tnh bc

Chng trnh bc cung cp mt b my tnh tay gip ngi dng c th tnh ton
cc biu thc, cc hm ton hc ...
3.3.9.1. Khi ng bc
T du nhc h thng, bn g :
#bc

xut hin du nhc, bn c th nhp vo cc biu thc tnh ton :


(4+5)*(12-10)
18
1000000000000*1000000000000
1000000000000000000000000

n nh s ch s thp phn, dng lnh scale = n :


scale=3
1/6
.166

Lp trnh trong bc.


define giaithua(n)
{
if (n<=1) return (1);
else return (gt(n-1)*n);
}
gt(5)
120

chuyn i sang cc c s khc nhau, dng cc lnh ibase v obase


ibase=cs

nh dng c s u vo

obase=cs

nh dng c s xut ra

ibase v obase ngm nh l c s 10


ibase=16
FF
255
obase=2
FF
11111111
ibase
obase

3.3.9.2. Kt thc bc
Nhn CTRL-D thot.
#man bc

-> Xem cc hng dn s dng bc.

- 13-

QUN L TI KHON V PHN QUYN S DNG

Bi 4

M t c ch bo v tp tin ca LINUX: ngi s dng, nhm ngi s dng, cc


quyn truy xut trn tp tin.

4.1.
4.1.1.

Qun l ti khon ca h thng


Ti khon ngi dng

Mi ngi s dng trn h thng c m t qua cc thng tin sau:


-

username

: tn ngi s dng

password

: mt khu (nu c)

uid

: s nhn dng (user identify number )

gid

: s ca nhm (group identify number )

comment

Th mc ch ca ti khon (home directory )

Shell ng nhp (chng trnh chy lc bt u phin lm vic)

: ch thch

Cc thng tin trn c cha trong tp tin /etc/passwd


4.1.2.

Ti khon nhm ngi dng

Mt nhm ngi s dng c m t bng cc thng tin sau:


-

groupname

: tn ca nhm

gid

: s ca nhm (gid: group identify number)

danh sch cc ti khon thuc nhm

Cc thng tin trn c cha trong tp tin /etc/group

4.2.
4.2.1.

Phn quyn ngi dng trn h thng tp tin


Cc quyn truy xut trn tp tin

Khi tp tin c to lp, cc thng tin sau y ng thi c ghi li:


-

uid ca ngi to tp tin

gid ca ngi to tp tin

Cc quyn thm nhp tp tin khc . . .

Tp tin c bo v bi mt tp hp cc bit nh ngha quyn thm nhp

rwx
suid
owner

Trong :

rwx
sgid
group

rwx
other

- 14r

Quyn c ni dung tp tin, th mc

Quyn to v xo ni dung tp tin, to v xa tp tin trong th mc

Quyn thc thi tp tin. Quyn truy xut qua li trn th mc.

Cc quyn vi th mc ch c hiu lc mt mc nht nh, th mc con c th


c bo v trong khi th mc cha th khng.
Lnh ls -lF lit k danh sch cc tp tin v cc thuc tnh ca chng trong mt
danh mc, qua ta c th xem cc thng tin nh loi tp tin, quyn truy nhp,
ngi s hu v kch thc ca tp tin. . .
4.2.2.

Lnh chmod

Lnh chmod cho php thay i quyn trn tp tin ca ngi dng. Ch nhng
ngi s hu tp tin ny mi c th thay i c mc c quyn i vi tp tin ny.
C th thc hin lnh theo hai cch:
4.2.2.1. Dng cc k hiu tng trng:
C php :

chmod {a,u,g,o}{+,-,=}{r,w,x} <filename>

Trong : u (user), g (group), o (other), a (all)


Cc ton t

: + thm quyn. - bt quyn. = gn gi tr khc

4.2.2.2. Dng thng s tuyt i


C php :

chmod

<mode>

<filename>

trong mode l mt s c s 8 ( octal )


rwx
r -x
111
101
7
5
$chmod 754 filename
$chmod g-w,o+r baitho.doc
$chmod a+r baocao.txt
$chmod +r baocao.txt
$chmod og-x baocao.txt
$chmod u+rwx baocao.txt
$chmod o-rwx baocao.txt
$chmod 777 *

4.2.3.

r - 100
4

khng cho thc thi


cho php ngi s hu c th c, vit v thc thi.
khng cho truy nhp tp tin.
t cc quyn cho tt c cc i tng s dng .
trn ton b tp tin trong th mc hin hnh

Thay i ngi hoc nhm s hu tp tin

Lnh chown cho php thay i ngi s hu, nhm s hu trn tp tin.

Lnh chgrp cho php thay i nhm s hu trn tp tin.

- 15-

THC HNH
1. Thay i quyn trn tp tin
#cat bai1.sh
#ls -lF bai1.sh
#chmod u+x,g+wx bai1.sh
#ls -lF bai1.sh
#chmod 644 bai1.sh
#ls -lF bai1.sh
#chmod 764 bai1.sh
#ls -lF bai1.sh
#chmod 777 bai1.sh
#ls -lF bai1.sh

2. To ti khon h thng
To nhm cntt2004
#groupadd cntt2004

Xem tp tin /etc/group


#cat /etc/group

To mt account user01 mi thuc nhm cntt2004


#useradd - g cntt2004 -c Tai khoan user01 user01
#passwd user01

Xem tp tin /etc/passwd, /etc/shadow


#cat /etc/passwd
#cat /etc/shadow

Th ng nhp vo h thng vi ti khon l user01


To mt account user02
#useradd user02
#passwd user02

a user02 vo nhm cntt2004


#usermod -g cntt2004 user02

Th ng nhp vo h thng vi ti khon l user02


Xa user02
#userdel user02
#cat /etc/passwd

3. Thay i quyn s dng cho cc i tng trn tp tin


a. To mt tp tin mi /home/baocao.txt
b. i ch s hu ca tp tin /home/baocao.txt l user01

- 16#chown user01 /home/baocao.txt

c. Phn quyn rwxr--r-- cho cc i tng trn tp tin /home/baocao.txt.


#chmod 744 /home/baocao.txt

d. ng nhp vo h thng vi ti khon user01. Th thay i ni dung tp tin


/home/baocao.txt.
e. ng nhp vo h thng vi ti khon khc. Th thay i ni dung tp tin
/home/baocao.txt. Nhn xt ?
4. Phn quyn s dng cho cc i tng
a. To nhm ngi s dng c tn cntt2004.
b. B sung cc user01, user02 vo nhm cntt2004.
#usermod -g cntt2004 user01
#usermod -g cntt2004 user02

c. To th mc /home/common
#mkdir /home/common

d. i nhm s hu ca th mc /home/common l nhm cntt2004.


#chown :cntt2004 /home/common

hoc
#chgrp cntt2004 /home/common

e. Phn quyn rwx cho i tng nhm cntt2004 trn th mc /home/common


#chmod g+rwx /home/common
#ls -lF /home

f. ng nhp vo h thng vi ti khon user01. To th mc mi trong


/home/common.
g. ng nhp vo h thng vi mt ti khon khc khng thuc nhm cntt2004.
Th to th mc mi trong /home/common. Nhn xt ?.

- 17-

S DNG TRNH SON THO VI

Bi 5

Gii thiu trnh son tho vi, cc thao tc son tho tp tin bng vi.

5.1.

Gii thiu

vi l chng trnh son tho cc tp tin vn bn trn cc h thng Unix :


-

Mn hnh c xem nh mt ca s m trn tp tin.

C kh nng di chuyn con tr n bt k v tr no trn mn hnh.

Ca s c th di chuyn t do trn tp tin.

Phn ln cc phm dng c lp hoc kt hp vi phm Shift v Ctrl to ra cc


lnh ca vi. Cc lnh ca vi c th c gi khi c du " : " dng cui mn hnh.
C 2 ch (mode) trong khi s dng vi: Append mode v Command mode
Nhn phm lnh

Ch lnh
(Command mode)

Ch son tho
(Editor mode)
Nhn ESC + Phm lnh

5.2.

Khi ng vi
Ta c th gi vi vi tn tp tin vn bn :

V d :

vi bai1.txt

$ vi

filename

<Enter>

Mn hnh son tho hin ra nh sau ( y ang dng Telnet ni vo UNIX) :

Du ng (~) trc mi dng cho bit dng cn rng (trng)

Dng di cng cho bit tn file ang m, trng thi ca file: nu l file mi th
"[new file]", nu m file c th s hin th s dng, s k t trong file (hnh
di).

5.3.

Son tho vn bn

Chn k t trn mt dng a < text > < ESC >

S dng cc phm son tho vn bn.

- 18-

5.4.

Nhn phm ESC kt thc ch chn vn bn.

Thot khi vi

Mun ra khi vi v ghi li ni dung tp tin, bn nhn phm ESC v dng mt trong
cc lnh nh sau:
:ZZ
hoc :wq hoc :x
Thot khi vi v khng ghi li cc thay i trc
: q!

Khi trong ch son tho ca vi, mun chy chng trnh shell, dng lnh :
: ! <shellcommand>

hoc gi shell, sau chy cc lnh ca ngi dng, khi kt thc bm Ctrl-D tr
li vi:
: ! sh
$ <command>
$ Ctrl-D

5.4.1.

Dng vi vi danh sch cc lnh chy ca Shell

Lnh fc (fix command) cho php ta son tho bng vi v chy li cc lnh chy
ca Shell. Cch dng nh sau:
-

Son tho v cho chy lnh cui cng:

$fc

Son tho mt nhm lnh v cho chy:

$ fc m n

Xem danh sch 16 lnh cui cng:

$ fc

-l

$ fc

-lr

hoc history
(danh sch theo th t ngc li)

To mt tp tin cha mt s lnh chy (ca history):


$fc

-nl

n1

n2

> cmd

cmd l mt tp tin cha cc lnh ca history t lnh n1 n lnh n2

Bng tm tt cc lnh ca vi
<i>
<I>
<a>
<A>
<o>

Inserts text before cursor


Enters text at start of line
Inserts text after cursor
Enters text at end of line
Opens a new line below cursor

<O>
<d><w>
<d><d>

Opens a new line above cursor


Deletes word
Deletes entire line

- 19<D>
<x>
<c><w>
<c><c>
<C>
<R>
<J>
<e>
<w>
<$>
<l>
<k>
<j>
<h>

Deletes to end of line


Deletes character under cursor
Changes word
Changes line
Changes to end of line
Replaces character under cursor
Joins lines together
Moves to end of word
Moves to next word
Moves to end of line
Moves one space right
Moves one line up
Moves one line down
Moves one space left

<f><x>
<F><x>
<;>
number<|>
<H>
<L>
<M>
<G>
number<G>

Moves cursor to first occurrence of x


Moves cursor to last occurrence of x
Repeats the last f/F command
Moves cursor to specified column number
Moves cursor to top line on-screen (not top line of file)
Moves cursor to bottom line on-screen
Moves cursor to middle line on-screen
Moves cursor to bottom line of file
Moves cursor to specified line number
(same as<ESC>:number)
Moves to beginning of line
Marks current position with letter x
Scrolls for ward one half of the screen
Scrolls backward one half of the screen
Scrolls for ward one screen
Scrolls backward one screen
Redraws the screen
Shows the filename, current line, and column number
Redraws the screen with current line in middle of screen
Yanks entire line into buffer
Puts contents of buffer below cursor

<^>
<m>x
<Ctrl-d>
<Ctrl-u>
<Ctrl-f>
<Ctrl-b>
<Ctrl-l>
<Ctrl-G>
<z><z>
<y><y>
<p>

<P>
Puts contents of buffer above cursor
x[number]<yy> Yanks the indicated number of lines into the buffer named x
(x can be any single character az)

- 20x<p>
:w [file]

Places the contents of buffer x after the cursor


Writes contents to disk as file

:q
:q!
:wq
:r file
:e file
:!command
:number
:f
/string
?string
:x,ys/oldstring/newstring

Quits vi
Quits file without saving changes
Saves changes and quits vi
Reads specified file into editor
Edits file
Executes specified shell command
Moves to specified line number
Prints out current line and filename (same as <Ctrl-G>)
Searches forward for string
Searches backward for string
Replaces oldstring with newstring from line x to line y
(entering y = $ will replace to end of file)

<ESC><u>
<n>
~
<ESC>

Undoes last command


Finds next occurrence of string. Repeats last command
Changes character to opposite case
Switches to command mode

THC HNH
1. Dng chng trnh vi son tho tp tin vanban.doc
$vi

vanban.doc

2. Sao chp vn bn
4dd
Ctrl+d
p

Ct 4 dng v a vo vng m
Chuyn xung cui vn bn
Sao t vng m vo sau dng hin hnh

3. t v b ch hin th s dng :
:set
:set

nu
nonu

4. Lu ni dung tp tin v thot khi vi:


:wq

5. Xem lai ni dung tp tin vanban.doc.

- 21-

LP TRNH SHELL

Bi 6
6.1.

Chng trnh tnh tng 1-> n

Minh ha cc cu trc while do done, v cch s dng [], $(()).

Tp tin tong1.sh

#!/bin/sh
echo Chuong trinh tinh tong 1- $1
index=0
tong=0
while [ $index -lt $1 ]
do
index=$(($index + 1))
tong=$(($tong + $index))
done
echo "Tong 1-$1= $tong"
exit 0

Chy chng trnh :

chmod a+x tong1.sh


./tong1 100

6.2.

Chng trnh tnh giai tha ca mt s

Minh ha cc cu trc while do done, v cch s dng [], $(()).

Tp tin giaithua.sh

#!/bin/sh
echo Chuong trinh tinh $1!
index=0
gt=1
while [ $index -lt $1 ]
do
index=$(($index + 1))
gt=$(($gt * $index))
done
echo "$1!= $gt"
exit 0

Chy chng trnh :

chmod a+x giaithua.sh


./giaithua 5

6.3.

Chng trnh m s dng ca mt tp tin

Minh ha cc cu trc if then fi, while do done, v cch s dng [], $(()).

Tp tin demdong.sh

#!/bin/sh
echo Chuong trinh dem so dong cua tap tin $1
{
n=0
while read line

- 22do

n=$(($n + 1))
done
echo So dong cua tap tin $1 la : $n
}<$1
exit 0

Chy chng trnh :

chmod a+x demdong.sh


./demdong bai1.txt

6.4.

Chng trnh m s t ca mt tp tin

Minh ha cc cu trc for do done, while do done.

Tp tin demtu.sh

#!/bin/sh
echo Chuong trinh dem so tu cua tap tin $1
{
n=0
while read line
do
for wd in $line
do
n=$(($n + 1))
done
done
echo Tong so tu cua tap tin $1 la : $n
}<$1
exit 0

Chy chng trnh :

chmod a+x demtu.sh


./demtu bai1.txt

6.5.

Chng trnh tm dng c di ln nht trong mt tp tin

Minh ha cc cu trc if then fi, while do done.

Tp tin dongmax.sh

#!/bin/sh
echo Chuong trinh tim dong dai nhat trong tap tin $1
{
n=0
max=0
dong=
while read line
do
n=`expr length $line`
if [ $n gt $max ]
then
dong=$line

- 23fi

max=$n

done
echo Dong trong tap tin $1 co do dai max = $max la : $dong
}<$1
exit 0

Chy chng trnh :

chmod a+x dongmax.sh


./dongmax bai1.txt

6.6.

Chng trnh tm mt xu trong mt tp tin

Minh ha cc cu trc if then fi, while do done.

Tp tin timxau.sh

#!/bin/sh
echo Chuong trinh tim xau $1 trong tap tin $2
{
wordlen=`expr length $1`
# Do dai tu can tim
while read textline
do
textlen=`expr length $textline`
# Do dai cua dong vua doc
end=$(($textlen wordlen + 1
index=1
while [ $index le $end ]
do
temp=`expr substr $textline $index $wordlen
if [ $temp = $1 ]
then
echo Tim thay $1 tai dong $textline
break
fi
index=$(($index + 1))
done
done
}<$2
exit 0

Chy chng trnh :

chmod a+x timxau.sh


./timxau abc bai1.txt

- 24-

Lp trnh C & C++

Bi 7

Trnh bin dch GNU l cng c pht trin thng dng nht sn c trong h iu
hnh Linux, c dng bin dch cc kernael ca h iu hnh. Ngoi ra gcc cung
cp cc th vin v cc tp tin Header cn thit bin dch v chy cc chng trnh
ca ngi dng.
Cc chng trnh C thng c phn tn m rng l .c
Cc chng trnh C++ thng c phn tn m rng l .cc cc hoc .C
bin dch v thc thi mt chng trnh C bn lm nh sau :
1. Son tho chng trnh. Lu tp tin vi tn v phn m rng thch hp.
# vi example.c

2. Thot vi, t du nhc h thng bn g lnh :


C php :
#gcc

-o

gcc
hello

-o

filedestination

filesource

hello.c

3. Nu c li, trnh bin dch s thng bo s th t dng lnh li. Nu bin dch
thnh cng, chy chng trnh g lnh :
#./filedestination

V d

#./hello

Lu cch dng ./ trc tn chng trnh, ngha l my s ch tm kim chng


trnh kh thi ti th mc hin hnh.
dch cng mt lc nhiu tp tin chng trnh trong th mc hin hnh, bn
dng lnh : make hoc make all
Sau y l mt s chng trnh v d :

1. Chng trnh hello.c


#include <stdio.h>
#include <math.h>
main()
{
int i;
double a;
for(i=1;i<11;i++) {
a=i*1.0;
printf("%2d. %3d %4d %7.5f\n",i,i*i,i*i*i);
}
}

- 252. Chng trnh sample.c


#include <stdio.h>
void printnum ( int );
/* Khai bo hm*/
void printchar ( char );
/* Khai bo hm */
main () {
double tmp;
/* Khai bo bi?n ton c?c */
tmp = 1.234;
printf ("%f\n",tmp);
/* In gi tr? c?a bi?n ton c?c tmp */
printnum (5);
/* In gi tr? s? 5 */
printf ("%f\n",tmp);
/* In gi tr? c?a bi?n ton c?c tmp */
printchar ('k');
/* in k t? k */
printf ("%f\n",tmp);
/* In gi tr? c?a bi?n ton c?c tmp */
}
/* ?nh nghia hm d khai bo ? trn */
/* Khai bo c t? kho void nghia l hm khng tr? v? m?t gi tr? */
void printnum (int inputnum) {
int tmp;
tmp = inputnum;
printf ("%d \n",tmp);
}
void printchar (char inputchar) {
char tmp;
tmp = inputchar;
printf ("%c \n",tmp);
}

- 26-

QUN L TIN TRNH

Bi 8
8.1.

Gii thiu

Tin trnh l mt mi trng thc hin, bao gm mt phn on lnh v mt phn


on d liu. Cn phn bit vi khi nim chng trnh ch gm tp hp lnh.
Trn h iu hnh Linux, tin trnh c nhn bit thng qua s hiu ca tin trnh,
gi l pid. Cng nh i vi user, n c th nm trong nhm. V th phn bit ta
nhn bit qua s hiu nhm gi l pgrp. Mt s hm ca C cho php ly c nhng
thng s ny:
int

getpid()

/* tr v gi tr int l pid ca tin trnh hin ti*/

int

getppid()

/*tr v gi tr int l pid ca tin trnh cha ca tin trnh hin ti */

int

getpgrp()

/* tr v gi tr int l s hiu ca nhm tin trnh*/

int

setpgrp()

/*tr v gi tr int l s hiu nhm tin trnh mi to ra*/

V d:
Lnh : printf("Toi la tien trinh %d thuoc nhom %d",getpid(),getgrp());
Kt qu s l:
8.1.1.

Toi l tien trinh 235 thuoc nhom 231

To mt tin trnh - lnh fork

to ra mt tin trnh con. Gi tr tr li l 0 cho tin trnh con v du


hiu pid cho tin trnh cha. Gi tr s l -1 nu khng to c tin trnh mi.
int fork()

Theo nguyn tc c bn ca h thng, tin trnh con v cha s c cng on m.


on d liu ca tin trnh mi l mt bn sao chp chnh xc on d liu ca tin
trnh cha. Tuy nhin tin trnh con vn khc tin trnh cha pid, thi gian x l, ...
8.1.2.

Dng mt tin trnh

Lnh kill ca Shell c th dng chm dt hot ng ca mt tin trnh. v d


nh khi mun dng tin trnh 234 ta dng lnh:
kill 234
C cng c lnh kill nh sau:
int

kill(pid, sig);

int

pid;

l du hiu nhn bit ca mt tin trnh.

int

sig;

hng tn hiu giao tip tin trnh.

- 278.1.3.

Giao tip gia cc tin trnh

Vic giao tip gia cc tin trnh c thc hin thng qua cc tn hiu chun
ca h thng. Tn hiu l mt s ngt qung logic c gi n cc tin trnh bi h
thng thng bo cho chng v nhng s vic khng bnh thng trong mi trng
hot ng ca chng (nh li b nh, li vo ra). N cng cho php cc tin trnh lin
lc vi nhau. Mt tn hiu (tr SIGKILL) c th c xem xt theo ba cch khc nhau:
1. Tin trnh c th c b qua: V d chng trnh c th b qua s ngt
qung ca ngi s dng h thng ( l s b qua khi mt tin trnh ang
c s dng phn nn.
2. Tin trnh c th c thc hin: Trong trng hp ny, khi nhn c 1 tina
stiu, vic thc hin 1 tin trnh c chuyn v mt quy trnh do ngi s
dng xc nh trc, sau tr li ni n b ngt.
3. Li c th c tin trnh tr v sau khi nhn c tn hiu ny.
Di y l mt s tn hiu thng gp:

SIGHUP

Tn hiu ny c pht n cc tin trnh vo lc cui khi m n t ngt.


N cng c pht n mi tin trnh c tin trnh chnh t ngt.

SIGINT

Tn hiu ny c pht n cc tin trnh khi ta ra lnh ngt.

SIGQUIT

Tng t nh trn khi ta g vo ^D.

SIGILL

Lnh khng hp l, tn hiu c pht ra khi pht hin 1 lnh khng ng


cp vt l (v d nh 1 tin trnh thc hin mt lnh m my tnh
chng c lnh ny).

SIGTRAP

Tn hiu c pht ra sau mi lnh trong trng hp tin trnh c s dng


lnh ptrace().

SIGIOT

By c pht khi c cc vn v vt l.

SIGEMT

By ca lnh pht, c pht ra khi c li vt l trong khi thc hin.

SIGFPE

c pht ra khi c li v tnh ton nh mt s c du phy ni c nh


dng khng hp l. Gn nh lun ch ra li khi lp trnh.

SIGKILL

Trang b kt thc tin trnh. Khng th b qua hoc ct tn hiu ny.

SIGBUS

c pht khi gp li trn bus.

SYSGEGV

c pht ra khi gp li trn phn on s truy cp d liu bn ngoi phn


on d liu c cp pht cho tin trnh.

- 28SIGSYS

i s khng ng cho h thng gi.

SIGPIPE

Vit trn mt ng dn khng m c.

SIGALRM

Pht ra khi ng h ca mt tin trnh ngng li. ng h c hot ng


bng lnh alrm().

SIGTERM

c pht ra khi mt tin trnh kt thc bnh thng. Cng c th dng


dng 1 h thng kt thc tt c cc tin trnh hot ng.

8.1.4.

Lin lc gia hai tin trnh

T mt chng trnh n gin di y s dng cc lnh pht v nhn tn hiu, sau


gip lin lc gia hai tin trnh.
Ni dung ca v d l s lin lc gia mt tin trnh cha v mt tin trnh con thng
qua cc tn hiu c trnh by phn trc.
#include
<errno. h>
#include
<signal. h>
void fils_atc()
{
printf(" Tien trinh bi loai bo !!!\n");
kill(getpid(), SIGINT);
}
/***********************************/
void fils()
{
signal(SIGUSR1, fils_atc);
printf(" Hinh thanh tien trinh moi. Nhung chuan bi loai bo tien trinh nay !!\n");
while(1);
}
/******************************/
main()
{
int ppid, pid;
if ((pid = fork())==0) fils();
else
{
sleep(3);
printf(" Chap nhan !! Tien trinh se bi loai bo.\n");
kill(pid, SIGUSR1);
}
}

Trong v d trn, tin trnh con c s dng hm signal(SIGUSR1, fils_atc). Hm


ny c tc dng mi khi tin trnh con nhn c tn hiu SIGUSR1 th hm fils_atc()
s c thc thi.

- 29Nh vy v d trn mt tin trnh con c to ra nhng n li khng mun


tip tc tn ti. Do vy sau khi tm dng li sleep(3), tin trnh cha gi n cho tin
trnh con mt tn hiu l SIGUSR1 bng lnh:
kill(pid, SIGUSR1);

tin trnh con, tn hiu SIGUSR1 c gn vi hm fils_atc(). Hm ny ra mt


thng bo bo hiu tin trnh ny sp cht ri t gi n chnh mnh (tin trnh con) tn
hiu SIGINT, tn hiu ngt tin trnh. V tin trnh con cht.
kill(getpid(), SIGINT);

Mt s nhc im khi lin lc trc tip bng tn hiu:


-

Mt tn hiu c th b b qua, kt thc mt tin trnh hoc b chn li. l l do


chnh a ra cc tn hiu khng thch ng c tin hnh lin lc gia cc tin
trnh. Mt thng ip ip di hnh thc tn hiu c th s b mt nu n c
nhn lc loi tn hiu ny tm thi b b qua.

Mt vn khc l cc tn hiu c quyn rt ln, khi n chng lm ngt qung


cng vic hin ti. V d vic nhn mt tn hiu trong khi tin trnh ang i mt
s kin (m c th n khi s dng cc lnh open(), read(), ...) lm cho vic thc
thi hm b chch hng. Khi tr li, lnh chnh b ngt gi li mt thng ip bo
li m hon ton khng x l c.

Ngoi vic lin lc trc tip nh v d trn, cn cho php mt phng php lin
lc gia cc tin trnh khc, l lin lc qua "ng ng".

8.2.
8.2.1.

Lp trnh a tin trnh


ng dn lin lc

ng dn l mt c ch c bn lin lc gin tip gia cc tin trnh. l cc file


c bit (FIFO), cc thng tin c truyn i 1 u v thot ra mt u khc.
Mt s c im ca "ng dn":
-

Cc ng dn ch mang tnh cht tm thi, ch tn ti trong thi gian thc hin ca


mt tin trnh to ra n.

Mun to ra mt ng dn phi bt u bng mt lnh c bit: pipe().

Nhiu tin trnh c th vit v c trn cng mt ng dn. Tuy nhin, khng c mt
c ch no phn bit thng tin cho cc tin trnh u ra.

Dung lng ng dn b hn ch (khong 4KB). Do khi chng ta c gng vit khi


ng dn b y th s gp phi trng hp tc nghn.

- 30-

Cc tin trnh lin lc qua ng dn phi c mi quan h h hng v cc ng dn ni


phi c m trc khi to ra cc tin trnh con.

Khng th t thay i v tr thng tin trong ng.

8.2.2.

Thao tc vi "ng dn lin lc"

To mt ng dn:
int
int

p_desc[2];
pipe(p_desc);

Gi tr tr v l 0 nu thnh cng, -1 nu tht bi.


p_desc[0] : cha cc s hiu m t nh c th c trong ng dn.
p_desc[1] : cha cc s hiu m t nh c th vit trong ng dn.
Nh vy vic vit trong p_desc[1] l truyn d liu trong ng v vic c trong
p_desc[0] nhn chng.
V d:
#include <errno. h>
#include <signal. h>
main()
{
int
i,ret, p_desc[2];
char c;
pipe(p_desc);
write(p_desc[1], "AB", 2);
for (i=1; i<=3,i ++) {
ret=read(p_desc[0], &c, 1);
if (ret == 1)
printf(" Gia tri: %c\n",c);
else
perror("Loi ong dan rong");
}
}

V d trn ch ra rng ta c th truyn v nhn thng tin trn ng dn. Chng ta


dng hm read() v write() vit (truyn) v c (nhn) trn ng dn.
8.2.3.

Lin lc gia tin trnh cha v tin trnh con

Trong v d di y, mt tin trnh to ra mt ng dn, to ra mt tin trnh


con, vit mt vn bn vo ng dn.Tin trnh con tha hng ng dn v cc k hiu
m t ca ng dn, thc hin c trong ng dn:
#include <errno. h>
#include <stdio. h>
void code_fils(int number)
int
fd, nread;
char texte[100];

- 31fd=number;
printf(" So hieu mo ta la %d\n",fd);
switch (nread=read(fd, texte, sizeof(texte)))
{
case -1:
perror("Loi doc.");
case 0:
perror("EOF");
default:
printf("Van ban nhan duoc co %d ky tu: %s\n",fd, texte);
}
}
main() {
int
fd[2];
char chaine[10];
if (pipe(fd)==-1)
{ perror("Loi khoi tao pipe.");
exit(1);
}
switch (fork()) {
case -1:
perror(" Loi khoi tao tien trinh.");
break;
case 0:
if (close(fd[1])==-1)
perror(" Error.");
code_fils(fd[0]);
exit(0);
}
close(fd[0]);
if (write(fd[1]),"hello",6)==-1)
perror("Loi truyen.");
}

Kt qu chng trnh:
So hieu mo ta la: 5
Van ban nhan duoc co 6 ky tu: hello

Ch rng, tin trnh con c trong ng dn m khng vit nn n bt u


bng cch ng phn vit fd[1] tit kim cc tn hiu m t ca t hp. Tng t, v
tin trnh cha ch s dng phn vit nn n ng phn c li (fd[0]). Sau tin trnh
cha vit vo ng dn 6 k t v tin trnh con c chng.

Bi 9
9.1.

Lp trnh mng TCP/IP


Lp trnh client /server theo giao thc TCP/IP

Chng trnh tcpClient.c


/* Chuong trinh tcpClient.c */

- 32/* Khai bo cc file th vin cn thit gi hm socket*/


#include
#include
#include
#include
#include
#include
#include

<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
<netdb.h>
<stdio.h>
<unistd.h>

/*gethostbyname*/

/* close */

#define SERVER_PORT 1500


#define MAX_MSG 100
int main (int argc, char *argv[]) {
/* Khi to cc bin dng trong chng trnh */
int sd, rc, i;
struct sockaddr_in localAddr, servAddr;
struct hostent *h;
if(argc < 3) {
printf("usage: %s <IPserver> <data1> <data2> ... <dataN>\n",argv[0]);
exit(1);
}
/* Hm gethostbyname() ly v a ch IP theo tn nhp vo trong tp tin /etc/hosts */
h = gethostbyname(argv[1]);
if(h==NULL) {
printf("%s: unknown host '%s'\n",argv[0],argv[1]);
exit(1);
}
servAddr.sin_family = h->h_addrtype;
memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
servAddr.sin_port = htons(SERVER_PORT);
/*

Gn cc gi tr cho i tng socket.


To socket cho my Client. Lu li s m t socket */

sd = socket(AF_INET, SOCK_STREAM, 0);


if(sd<0) {
perror("cannot open socket ");
exit(1);
}
/*

t tn socket cho chng trnh Client


Gn a ch kt ni cho socket theo giao thc Internet */

localAddr.sin_family = AF_INET;
localAddr.sin_addr.s_addr = htonl(INADDR_ANY);
localAddr.sin_port = htons(0);
/* Hm htons() dng chuyn i trt t byte ca s nguyn trc khi gi i do h
thng s dng c ch giao tip TCP/IP */
/* Rng buc tn vi socket */

- 33rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr));


if(rc<0) {
printf("%s: cannot bind port TCP %u\n",argv[0],SERVER_PORT);
perror("error ");
exit(1);
}
/* Thc hin kt ni n server theo tn/a ch nhp vo t dng lnh */
rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));
if(rc<0) {
perror("cannot connect ");
exit(1);
}
/* Sau khi socket kt ni, thc hin gi cc d liu n chng trnh Server */
for(i=2;i<argc;i++) {
rc = send(sd, argv[i], strlen(argv[i]) + 1, 0);
if(rc<0) {
perror("cannot send data ");
close(sd);
exit(1);
}/* if */
printf("%s: data%u sent (%s)\n",argv[0],i-1,argv[i]);
}/* for */
return 0;
}/*main*/

Chng trnh tcpServer.c


/* Chuong trinh tcpServer.c */
/* Khai bo cc file th vin cn thit gi hm socket*/
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
/* close */
#define SUCCESS 0
#define ERROR 1
#define END_LINE 0x0
#define SERVER_PORT 1500
#define MAX_MSG 100
/* function readline */
int read_line();

- 34int main (int argc, char *argv[]) {


int sd, newSd, cliLen;
struct sockaddr_in cliAddr, servAddr;
char line[MAX_MSG];
/*

Gn cc gi tr cho i tng socket.


To socket cho my Server. Lu li s m t socket */

sd = socket(AF_INET, SOCK_STREAM, 0);


if(sd<0) {
perror("cannot open socket ");
return ERROR;
}
/*

t tn socket cho chng trnh Server


Gn a ch kt ni cho socket theo giao thc Internet */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(SERVER_PORT);
if(bind(sd, (struct sockaddr *) &servAddr, sizeof(servAddr))<0) {
perror("cannot bind port ");
return ERROR;
}
/*

To hng i lng nghe kt ni ca client


Cho php hng i nhn ti a 5 kt ni */
listen(sd,5);
/* Lp lin tc ch v lxy kt ni ca client */
while(1) {
printf("%s: waiting for data on port TCP %u\n",argv[0],SERVER_PORT);
cliLen = sizeof(cliAddr);
/* Chp nhn kt ni */
newSd = accept(sd, (struct sockaddr *) &cliAddr, &cliLen);
if(newSd<0) {
perror("cannot accept connection ");
return ERROR;
}
/* init line */
memset(line,0x0,MAX_MSG);
/* c d liu do Client gi n - x l d liu nhn c */
while(read_line(newSd,line)!=ERROR) {
printf("%s: received from %s:TCP%d : %s\n", argv[0], inet_ntoa(cliAddr.sin_addr),
ntohs(cliAddr.sin_port), line);
/* init line */
memset(line,0x0,MAX_MSG);

- 35} /* while(read_line) */
} /* while (1) */
}
/*
/*
/*
/*
/*
/*
/*
/*

WARNING */
this function is experimental. I don't know yet if it works */
correctly or not. Use Steven's readline() function to have something robust.*/
rcv_line is my function readline(). Data is read from the socket when */
needed, but not byte after bytes. All the received data is read.
*/
This means only one call to recv(), instead of one call for each received byte. */
You can set END_CHAR to whatever means endofline for you. (0x0A is \n)*/
read_lin returns the number of bytes returned in line_to_return
*/

/* Hm c chc nng c d liu t socket*/


int read_line(int newSd, char *line_to_return) {
static int rcv_ptr=0;
static char rcv_msg[MAX_MSG];
static int n;
int offset;
offset=0;
while(1) {
if(rcv_ptr==0) {
/* read data from socket */
memset(rcv_msg,0x0,MAX_MSG);
n = recv(newSd, rcv_msg, MAX_MSG, 0);
if (n<0) {
perror(" cannot receive data ");
return ERROR;
} else if (n==0) {
printf(" connection closed by client\n");
close(newSd);
return ERROR;
}
}

/* init buffer */
/* wait for data */

/* if new data read on socket OR if another line is still in buffer */


/* copy line into 'line_to_return' */
while(*(rcv_msg+rcv_ptr)!=END_LINE && rcv_ptr<n) {
memcpy(line_to_return+offset,rcv_msg+rcv_ptr,1);
offset++;
rcv_ptr++;
}
/* end of line + end of buffer => return line */
if(rcv_ptr==n-1) {
/* set last byte to END_LINE */
*(line_to_return+offset)=END_LINE;
rcv_ptr=0;
return ++offset;
}

- 36/* end of line but still some data in buffer => return line */
if(rcv_ptr <n-1) {
/* set last byte to END_LINE */
*(line_to_return+offset)=END_LINE;
rcv_ptr++;
return ++offset;
}
/* end of buffer but line is not ended => */
/* wait for more data to arrive on socket */
if(rcv_ptr == n) {
rcv_ptr = 0;
}
} /* while */
}/*main*/

9.2.

Lp trnh client /server theo giao thc UDP/IP

Chng trnh udpClient.c


/* udpClient.c */
#include
#include
#include
#include
#include
#include
#include
#include
#include

<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
<netdb.h>
<stdio.h>
<unistd.h>
<string.h>
<sys/time.h>

/* memset() */
/* select() */

#define REMOTE_SERVER_PORT 1500


#define MAX_MSG 100
int main(int argc, char *argv[]) {
int sd, rc, i;
struct sockaddr_in cliAddr, remoteServAddr;
struct hostent *h;
/* check command line args */
if(argc<3) {
printf("usage : %s <server> <data1> ... <dataN> \n", argv[0]);
exit(1);
}
/* get server IP address (no check if input is IP address or DNS name */
h = gethostbyname(argv[1]);
if(h==NULL) {
printf("%s: unknown host '%s' \n", argv[0], argv[1]);
exit(1);
}

- 37printf("%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,


inet_ntoa(*(struct in_addr *)h->h_addr_list[0]));
remoteServAddr.sin_family = h->h_addrtype;
memcpy((char *) &remoteServAddr.sin_addr.s_addr,
h->h_addr_list[0], h->h_length);
remoteServAddr.sin_port = htons(REMOTE_SERVER_PORT);
/* socket creation */
sd = socket(AF_INET,SOCK_DGRAM,0);
if(sd<0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}
/* bind any port */
cliAddr.sin_family = AF_INET;
cliAddr.sin_addr.s_addr = htonl(INADDR_ANY);
cliAddr.sin_port = htons(0);
rc = bind(sd, (struct sockaddr *) &cliAddr, sizeof(cliAddr));
if(rc<0) {
printf("%s: cannot bind port\n", argv[0]);
exit(1);
}
/* send data */
for(i=2;i<argc;i++) {
rc = sendto(sd, argv[i], strlen(argv[i])+1, 0,
(struct sockaddr *) &remoteServAddr,
sizeof(remoteServAddr));
if(rc<0) {
printf("%s: cannot send data %d \n",argv[0],i-1);
close(sd);
exit(1);
}
}
return 1;
}

Chng trnh udpServer.c


/* udpServer.c */
#include
#include
#include
#include
#include
#include
#include

<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
<netdb.h>
<stdio.h>
<unistd.h> /* close() */

- 38#include <string.h> /* memset() */


#define LOCAL_SERVER_PORT 1500
#define MAX_MSG 100
int main(int argc, char *argv[]) {
int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
/* To socket trn my Server - t tn cho socket ca chng trnh Server */
sd=socket(AF_INET, SOCK_DGRAM, 0);
if(sd<0) {
printf("%s: cannot open socket \n",argv[0]);
exit(1);
}
/* bind local server port rng buc tn vi socket */
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(LOCAL_SERVER_PORT);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
if(rc<0) {
printf("%s: cannot bind port number %d \n", argv[0], LOCAL_SERVER_PORT);
exit(1);
}
printf("%s: waiting for data on port UDP %u\n", argv[0],LOCAL_SERVER_PORT);
/* Thc hin vng lp v hn trn Server ch v x l kt ni n t my client */
while(1) {
/* Khi to b m */
memset(msg,0x0,MAX_MSG);
/* Nhn d liu gi n t client */
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0, (struct sockaddr *) &cliAddr, &cliLen);
if(n<0) {
printf("%s: cannot receive data \n",argv[0]);
continue;
}
/* In d liu nhn c */
printf("%s: from %s:UDP%u : %s \n", argv[0],inet_ntoa(cliAddr.sin_addr),
ntohs(cliAddr.sin_port),msg);
}/*while*/
return 0;
}

- 39-

Bi 10

DCH V TRUYN FILE FTP

FTP (File Transfer Protocol) l dch v cho php truyn cc tp tin gia hai my
tnh Client v Server, qun l cc th mc v truy cp vo th tn in t. FTP khng
c thit lp truy cp vo mt my khc v chy cc chng trnh my , ch
dng cho vic truyn tp tin.
kt ni FTP, g lnh sau :

ftp <IPAddressServer>

Lnh ngi dng FTP

M t

ascii

Chuyn sang ch truyn ascii

bell

m thanh ca chng trnh sau khi truyn mi tp tin

binary

Chuyn sang ch truyn nh phn

cd directory

Chuyn i th mc hin hnh trn server

cdup

Li th mc hin hnh v mt cp trc

close

Hu kt ni

delete filename

Xo mt tp tin trn server

dir directory

Hin th th mc directory ca server

get filename

Truyn tp tin trn server v my cc b

hash

Hin th/lm mt du # cho mi khi cc k t truyn c

help

Hin th cc tr gip

lcd directory

Chuyn i th mc hin hnh trn my cc b

ls directory

Xem danh sch cc tp tin trong th mc directory trn Server

mdelete files

Xa nhiu tp tin trn my Server

mdir directories

Lit k cc tp tin trong nhiu th mc trn my Server

mget files

Ti nhiu tp tin trn my Server v th mc hin hnh ca my


cc b

mkdir <directory >

To th mc trn my Server

mput files

Gi mt s tp tin t my cc b ln my Server

open host

Kt ni vi Server host t xa

put filename

Truyn tp tin t my cc b ln my Server

pwd

Hin th th mc hin hnh trn server

- 40status

Hin th trng thi ca ftp

rename file1 file2

i tn file1 trn my Server thnh file2

quote

Cung cp mt lnh FTP mt cch trc tip

quit

Chm dt kt ni v thot khi ftp

Hin th danh sch lnh

Khi truy cp vo h thng, nu cha c account, ngi dng c th login vi


account c bit l anonymous, khng c mt khu.

Thc hnh
C:\>ftp

Khi ng ftp t th mc hin hnh C:\

(to) : 200.201.202.180
user : user01

Nhp vo tn user

Password :

Nhp vo mt khu tng ng

ftp> dir

Xem ni dung th mc

ftp> ?

Xem ni dung cc lnh ca ftp

ftp>put autoexec.bat

autoexec.dos

Chuyn tp tin t Client ln Server


vi tn mi l autoexec.dos

ftp> ls

Xem kt qu truyn file

ftp>get autoexec.dos LINUX.TXT

Ly tp tin autoexec.dos trn Server v


Client vi tn mi l LINUX.TXT

ftp>mget autoexec.dos

Ly tp tin autoexec.dos trn Server v


Client th mc C:\

ftp>cd

/home/user01

Chuyn n th mc hin hnh l user01


l th mc c ton quyn ca user user01

ftp>mdir

document

To trong th mc user01 th mc mi
c tn document

ftp> help

dir

Xem hng dn s dng lnh dir

ftp>help

get

Xem hng dn s dng lnh get

ftp> quit

Kt thc phin lm vic

- 41-

Bi 11
1.

CC TP TIN CU HNH MNG

Tp tin /etc/hosts

# Do not remove the following line, or various programs


# that require network functionality will fail.
127.0.0.1
localhost.localdomain localhost
200.201.202.1 linuxsvr.dng.vn linuxsvr

2.

Tp tin /etc/sysconfig/network

NETWORKING=yes
FORWARD_IPV4=false
HOSTNAME=linuxsvr.edu.vn
DOMAIN=edu.vn
GATEWAY=200.201.202.1

3.

Tp tin /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet
IPADDR=200.201.202.1
NETMASK=255.255.255.0
NETWORK=200.201.202.0
BROADCAST=200.201.202.255

4.

Chy chng trnh X- Windows h tr cu hnh h thng :

redhat-config-network

5.

Khi ng li dch v mng

[root@linuxsvr root]#/etc/init.d/network restart


Shutting down interface eth0:
Shutting down loopback interface:
Setting network parameters:
Bringing up loopback interface:
Bringing up interface eth0:

6.

Kim tra bng lnh :

[root@linuxsvr root]#hostname

linuxsvr.dng.vn

[
[
[
[
[

OK
OK
OK
OK
OK

]
]
]
]
]

- 427.

Xem thng tin v cu hnh thit b mng

[root@linuxsvr root]#ifconfig
eth0
Link encap:Ethernet HWaddr 00:06:7B:02:71:21
inet addr:200.201.202.1 Bcast:200.201.202.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2326 errors:0 dropped:0 overruns:0 frame:0
TX packets:70927 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:218392 (213.2 Kb) TX bytes:6939053 (6.6 Mb)
Interrupt:9 Base address:0x4c00
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:933 errors:0 dropped:0 overruns:0 frame:0
TX packets:933 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:87261 (85.2 Kb) TX bytes:87261 (85.2 Kb)

Hnh 1. Cu hnh dch v mng bng tin ch redhat-config-network.

- 43-

Bi 12

CU HNH DCH V DNS

12.1. Cc tp tin cu hnh dch v DNS


12.1.1. Tp tin /etc/host.conf
order hosts,bind

12.1.2. Tp tin /etc/resolv.conf


:search dng.vn
nameserver 200.201.202.1

12.1.3. Tp tin /etc/named.conf


# named.conf - configuration for bind
# Generated automatically by redhat-config-bind, alchemist et al.
# Any changes not supported by redhat-config-bind should be put
# in /etc/named.custom
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
include "/etc/named.custom";
include "/etc/rndc.key";
zone "0.0.127.in-addr.arpa" {
type master;
file "0.0.127.in-addr.arpa.zone";
};
zone "localhost" {
type master;
file "localhost.zone";
};
zone "dng.vn" {
type master;
file "dng.vn.zone";
};
zone "edu.vn" {
type master;
file "edu.vn.zone";
};

12.1.4. Tp tin /var/named/dng.vn.zone


$TTL 86400
@
IN
SOA
dng. root.localhost (
1 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
IN
NS
200.201.202.1.

- 44www
tankhoi01
tankhoi02

IN
IN

A
A

IN

A
200.201.202.1
200.201.202.1
200.201.202.2

12.1.5. Tp tin /var/named/edu.vn.zone


$TTL 86400
@
IN
SOA
edu. root.localhost (
2 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
IN
NS
200.201.202.1.
www
IN
A
200.201.202.1
tankhoi01
IN
A
200.201.202.1
tankhoi02
IN
A
200.201.202.2

12.1.6. Tp tin /var/named/0.0.127.in-addr.arpa.zone


$TTL 86400
@
IN
SOA
localhost.
36 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttk
)
@
IN
NS
localhost.
1
IN
PTR
localhost.
1
IN
PTR
www.
1
IN
PTR
tankhoi01.
2
IN
PTR
tankhoi02.
1
IN
PTR
www.
1
IN
PTR
tankhoi01.
2
IN
PTR
tankhoi02.

root.linuxsvr.dng.vn (

12.1.7. Tp tin /var/named/localhost.zone


$TTL 86400
@
IN
SOA
@ root.localhost (
1 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
IN
NS
localhost.
@
IN
A
127.0.0.1

12.1.8. Lnh khi ng dch v DNS


/etc/init.d/named restart

- 45-

12.2. Cc lnh v tin ch h tr


12.2.1. Lnh nslookup
#nslookup
Note: nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead. Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.
> www.dng.vn
Server:
200.201.202.1
Address:
200.201.202.1#53
Name: www.dng.vn
Address: 200.201.202.1
> tankhoi02.edu.vn
Server:
200.201.202.1
Address:
200.201.202.1#53
Name: tankhoi02.edu.vn
Address: 200.201.202.2

12.2.2. Lnh host


#host tankhoi01.dng.vn
tankhoi01.dng.vn has address 200.201.202.1

12.2.3. Lnh dig


# dig dng.vn
; <<>> DiG 9.2.1 <<>> dng.vn
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58922
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;dng.vn.
;; AUTHORITY SECTION:
dng.vn.
86400
604800 86400
;;
;;
;;
;;

IN
IN

A
SOA

dng. root.localhost.dng.vn. 1 28800 7200

Query time: 28 msec


SERVER: 200.201.202.1#53(200.201.202.1)
WHEN: Mon Mar 22 09:14:13 2004
MSG SIZE rcvd: 78

12.2.4. Tin ch redhat-config-bind


#redhat-config-bind

- 46-

Hnh 2. Cu hnh dch v BIND bng tin ch redhat-config-bind.

@2004, Nguyn Tn Khi


Khoa CNTT Trng i hc Bch Khoa Nng

You might also like