Sie sind auf Seite 1von 196

H iu hnh Linux

Phn 1: S dng Linux

ng nhp vo Linux
V d mn hnh ng nhp:
pc29 login: bctruong password: bctruong123 [bctruong@pc29 bctruong]$

bctruong v bctruong123 l thng tin username v password cp trong h thng (lu Linux c phn bit ch hoa v ch thng). pc29 l tn my tnh (hostname) K hiu $ l du nhc lnh (bash shell) K hiu # l du nhc lnh ca user root
TDE - HCM Thc hnh H iu hnh Linux 2

ng nhp vo Linux (tt)


Cc loi user account trn Linux:
root: Admin account, tng t account Administrator trn WinNT/200x daemon, shutdown, ftp, apache, : System account dng khi thc thi chng trnh. Khng th ng nhp bng cc account ny. lan, viet, tuan, : User account, mi account thng c cp mt th mc lm vic (home directory), v d /home/tuan
TDE - HCM Thc hnh H iu hnh Linux 3

ng nhp vo Linux (tt)


Thng tin v user account:
uid: M ngi dng (User ID) gid: M nhm ngi dng (Group ID) username, password Home directory: C cha mt s file chun:
.bash_profile: Thc thi mi khi user login, thng dng t bin mi trng PATH .bash_logout: Thc thi mi khi user logout. .bash_history: Cha cc dng lnh user g.

TDE - HCM

Thc hnh H iu hnh Linux

ng nhp vo Linux (tt)


ngh v password an ton:
T 8 k t tr ln Khng dng cc t trong t in Khng t trng vi username Cha c ch, s v k t c bit Khng ghi chp ra giy Nn thay i theo nh k

Trnh ng nhp bng ti khon root:


=> Nga vic v tnh lm hng h thng
TDE - HCM Thc hnh H iu hnh Linux 5

ng nhp vo Linux (tt)


To mt user account mi:
pc29 login: root password: password # useradd tuan -> to user tuan # passwd tuan -> t mt khu Changing password for user tuan New password: password Retype new password: password # exit -> thot khi root Lu : password khng hin th khi nhp
TDE - HCM Thc hnh H iu hnh Linux 6

ng nhp vo Linux (tt)


ng nhp bng user account va to:
pc29 login: tuan Password: nhtuan123 $ passwd -> i mt khu (nu cn)

Xem username ca mnh:


$ whoami tuan $ who am i tuan pts/0
TDE - HCM

May 18 18:29
Thc hnh H iu hnh Linux 7

ng nhp vo Linux (tt)


Xem cc user ang login:
$ who tuan pts/0 May 18 18:29 root tty01 May 15 15:18 root tty03 May 15 15:17 K hiu terminal ni trc tip vo my:
tty01, tty02, tty03,

K hiu terminal gi lp (pseudo terminal):


pts/0, pts/1, pts/2,
TDE - HCM Thc hnh H iu hnh Linux 8

ng nhp vo Linux (tt)


Xem chi tit cc user ang login:
$ w
15:10:41 up 4 days, 5:29, 3 users, load average: 0.91, 0.73, 0.35 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tuan pts/0 10.1.1.3 18:29 .0s .01s .01s w root tty01 15:18 2:0 .03s .00s w root tty03 15:17 5:23 0s 0s w

PCPU: Thi gian chng trnh WHAT chy JCPU: Tng thi gian cc chng trnh ca user ang chy
TDE - HCM Thc hnh H iu hnh Linux 9

Thot khi Linux


Logout:
$ logout $ exit hoc

Khi ng li my:
$ reboot hoc Nhn t hp phm Ctrl Alt - Del

Tt my:
$ poweroff hoc $ shutdown h now
TDE - HCM Thc hnh H iu hnh Linux 10

Cc lnh Linux c bn
S dng ty chn trn dng lnh:
Lnh lit k ni dung th mc:
$ ls $

Lit k tt c cc file, k c file n:


$ ls a ./ .bash_history .kermrc .lessrc

TDE - HCM

Thc hnh H iu hnh Linux

11

Cc lnh Linux c bn (tt)


S dng ty chn trn dng lnh: (tt)
Lit k chi tit tt c file:
$ ls al total 10 drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r-drwxr-xr-x $ ls la $ ls a -l
TDE - HCM

3 6 1 1 1 2

tuan root tuan tuan tuan tuan

users 1024 Dec 21 ./ root 1024 Dec 14 ../ users 163 Dec 7 .kermrc users 34 Jun 6 .less users 114 Nov 23 .lessrc users 1024 Dec 7 .term/ -> cho kt qu tng ng lnh trn -> cho kt qu tng ng lnh trn

C th thay i trt t cc ty chn:

Thc hnh H iu hnh Linux

12

Cc lnh Linux c bn (tt)


S dng ty chn trn dng lnh: (tt)
Lit k theo th t thi gian file (gim dn):
$ ls alt total 10 drwxr-xr-x drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--

3 6 2 1 1 1

tuan root tuan tuan tuan tuan

users 1024 Dec 21 ./ root 1024 Dec 14 ../ users 1024 Dec 7 .term/ users 163 Dec 7 .kermrc users 114 Nov 23 .lessrc users 34 Jun 6 .less

t: Vit tt t sort by time

TDE - HCM

Thc hnh H iu hnh Linux

13

Cc lnh Linux c bn (tt)


S dng ty chn trn dng lnh: (tt)
Lit k theo th t thi gian file (tng dn):
$ ls altr total 6 -rw-r--r-- 1 tuan users 34 Jun 6 .less -rw-r--r-- 1 tuan users 114 Nov 23 .lessrc drwxr-xr-x 2 tuan users 1024 Dec 7 .term/ -rw-r--r-- 1 tuan users 163 Dec 7 .kermrc drwxr-xr-x 6 root root 1024 Dec 14 ../ drwxr-xr-x 3 tuan users 1024 Dec 21 ./ Ty chn r dng xut kt qu theo th t ngc li Lu ty chn r khc vi R dng khi lit k c nhng th mc con bn trong.
TDE - HCM Thc hnh H iu hnh Linux 14

Cc lnh Linux c bn (tt)


S dng tham s dng lnh:
Lit k chi tit th mc /usr/local/src:
$ ls l /usr/local/src

Lit k th mc cha:
$ ls ..

Lit k th mc lm vic ca user:


$ ls ~

TDE - HCM

Thc hnh H iu hnh Linux

15

Cc lnh Linux c bn (tt)


Chuyn hng nhp/xut (redirection):
D liu u ra t command1 c chuyn cho u vo ca command2 thng qua pipe:
command1 | command2

K hiu | c th tm thy phm \ Lit k th mc theo tng trang bng cch s dng pipe:
$ ls /usr/local/src | more

TDE - HCM

Thc hnh H iu hnh Linux

16

Cc lnh Linux c bn (tt)


Chuyn hng nhp/xut: (tt)
gi kt qu thc thi lnh ra file, s dng k hiu > Lit k mt th mc ra file output.txt trn a:
$ ls /usr/local/src > output.txt

Sau , c th xem ni dung output.txt:


$ more output.txt $ less output.txt $ tail output.txt hoc hoc -> Ch xem 10 dng cui

TDE - HCM

Thc hnh H iu hnh Linux

17

Cc lnh Linux c bn (tt)


Chuyn hng nhp/xut: (tt)
K hiu > lun to mt file mi hoc thay th ni dung file c b sung thm ni dung m khng ghi ln file c, s dng k hiu >> B sung danh sch user ang lm vic vo file output.txt:
$ who >> output.txt

TDE - HCM

Thc hnh H iu hnh Linux

18

Cc lnh Linux c bn (tt)


Quy c m t lnh Linux:
Ch khng nm trong cc du [], <>, {} c gi nguyn:
$ ls [-l]

Ch trong [] l ty chn (khng bt buc):


$ ls [-l]

Du <> v ch bn trong c thay bng on ch tng ng:


$ more <filename> nu <filename> l output.txt -> more output.txt
TDE - HCM Thc hnh H iu hnh Linux 19

Cc lnh Linux c bn (tt)


Quy c m t lnh Linux: (tt)
Du {} ni ch c chn mt trong nhiu gi tr lit k bn trong:
$ hostname {<hostname> | -F <file>} -> hostname <hostname> hoc -> hostname F <file> Du | dng phn cch cc la chn vi nhau

Du m t nhiu tham s tng t:


$ more [filenames ] -> more file1 file2 file3 file4 file5
TDE - HCM Thc hnh H iu hnh Linux 20

Cc lnh Linux c bn (tt)


Tr gip v lnh Linux:
Xem ti liu m t lnh (manual):
$ man <command> -> xem help ca command $ man k <keyword> -> tm dng cha keyword

Xem hng dn cc lnh shell (lnh ni tr):


$ help

Ti liu LDP (Linux Documentation Project)


http://www.tldp.org

TDE - HCM

Thc hnh H iu hnh Linux

21

Cc lnh Linux c bn (tt)


S dng k t thay th (wildcard):
K t *:
$ ls /home/tuan/*.txt input.txt output.txt vanban.txt

K t ?:
$ ls /home/tuan/??put.txt input.txt

S dng tnh nng autocomplete:


$ pass* $ pass<nhn TAB>
TDE - HCM

<-> $ passwd <-> $ passwd


22

Thc hnh H iu hnh Linux

Cc lnh Linux c bn (tt)


Bin mi trng (environment variables):
Bin mi trng c nh ngha ring cho tng user, tng phin lm vic. Xem cc bin mi trng:
$ env hoc $ set HOME=/home/tuan LOGNAME=tuan PATH=/usr/local/bin:/usr/bin SHELL=/bin/bash

PATH l ni shell s tm lnh thc thi


TDE - HCM Thc hnh H iu hnh Linux 23

Cc lnh Linux c bn (tt)


Bin mi trng: (tt)
t bin mi trng:
$ PATH = .:/usr/bin:/home/tuan $ export PATH Tng ng vi: $ export PATH = .:/usr/bin:/home/tuan

Thit lp t ng bin mi trng khi login:


Gi lnh trn trong file ~/.bash_profile (~ l k hiu th mc lm vic ca user)

Thc thi li file .bash_profile:


$ source ~/.bash_profile
TDE - HCM Thc hnh H iu hnh Linux 24

Cc lnh Linux c bn (tt)


Tin trnh (process):
L cc chng trnh ang thc thi bi h thng hoc ngi s dng. Xem cc process ta ang chy:
$ ps -> Vit tt t process status PID TTY STAT TIME COMMAND 41 pts/0 S 0:00 bash 134 pts/0 R 0:00 ps PID: Process ID (t 0 -> 65565) TTY: Terminal chy process Du -: Login shell (bash)
TDE - HCM Thc hnh H iu hnh Linux 25

Cc lnh Linux c bn (tt)


Tin trnh (process): (tt)
Xem chi tit cc process ta ang chy:
$ ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND tuan 26509 0.0 0.1 4328 1416 pts/0 S 09:18 0:00 -bash tuan 26575 0.0 0.0 2592 640 pts/0 R 09:21 0:00 ps -u

STAT: Process Status (S=Sleeping, R=Running)

Xem tt c cc process ang chy:


$ $ $ $ ps ps ps ps a ax aux axf -> -> -> -> Xem Xem Xem Xem cc process trn terminal ny tt c process chi tit tt c process c quan h gia cc process
26

TDE - HCM

Thc hnh H iu hnh Linux

Cc lnh Linux c bn (tt)


Tin trnh (process): (tt)
ps vi ty chn l:
$ ps l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 508 26509 26508 0 75 0 - 1083 wait4 pts/0 0 bash 0 R 508 26746 26509 0 80 0 - 779 pts/0 0 ps

PPID: Parent Process ID


bash (PID=26509) init (PID=1) Tt c cc process
TDE - HCM Thc hnh H iu hnh Linux

gi ps (PID=26746)

PPID = bash PID


27

Cc lnh Linux c bn (tt)


Tin trnh (process): (tt)
Hy tin trnh: Lnh kill
Dng khi khng th kt thc chng trnh bng cch thng thng hay t hp phm Ctrl-C, q Bc 1: Login vo root Bc 2: Dng ps u tm PID ca process cn kill Bc 3: $ kill <PID> Bc 4: Dng ps u <PID> kim tra li; nu khng cn -> bc 8; nu vn cn nhng vi PID mi -> bc 6.

TDE - HCM

Thc hnh H iu hnh Linux

28

Cc lnh Linux c bn (tt)


Tin trnh (process): (tt)
Hy tin trnh: (tt)
Bc 5: Nu process vn cn, kill vi ty chn -9:
$ kill -9 <PID>

Dng ps u kim tra li; nu process vn cn -> bc 7; nu process mt -> bc 8 Bc 6: Process xut hin li vi PID mi -> do parent process sinh ra -> cn kill parent process. Bc 7: Dng ps l tm PPID v kill parent process theo cc bc nu. Bc 8: Process b kill. Cn logout khi root:
$ exit
TDE - HCM Thc hnh H iu hnh Linux 29

Cc lnh Linux c bn (tt)


Chuyn thnh user khc:
Thay v phi logout khi user hin ti v login li t u vi user mi, ta dng lnh su: Chuyn thnh user root:
$ su Password: $ su Password: -> Vit tt t super user -> Nhp password ca root

Chuyn thnh user root (vi profile ca root):


-> Nhp password ca root

Chuyn thnh user (khc root):


$ su [-] <username>
TDE - HCM Thc hnh H iu hnh Linux 30

Cc lnh Linux c bn (tt)


Tm kim chui vi lnh grep:
Lnh grep (Global Regular Expression Parser) tm v hin th cc dng cha chui cn tm. Cng dng 1: Lc kt qu lnh:
<command> | grep <pattern> $ ls | grep put -> Lit k file c ch put input.txt output.txt $ ps ax | grep bash -> Tm chnh xc 6368 tty2 S 0:00 -bash 27514 pts/0 S 0:00 -bash 27959 pts/0 S 0:00 grep bash
TDE - HCM Thc hnh H iu hnh Linux 31

Cc lnh Linux c bn (tt)


Tm kim chui vi lnh grep: (tt)
Cng dng 2: Tm dng c cha chui con trong file:
grep <pattern> <filename> $ grep Window input.txt X Window is a GUI of Linux But Windows is a Microsofts OS $ grep Window input.txt X Window is a GUI of Linux

TDE - HCM

Thc hnh H iu hnh Linux

32

S dng h thng file


Phn loi file theo ni dung:
D liu ngi dng D liu h thng: V d file /etc/passwd File thc thi (chng trnh)

Tn file:
Ti a 256 k t Cha cc k t hoa, thng, s, du ., du -, du _, Mt s h thng ch phn bit 32 hay 64 k t u tin trong tn file
TDE - HCM Thc hnh H iu hnh Linux 33

S dng h thng file (tt)


Th mc:
L mt loi file c bit Quy tc t tn tng t nh file
/

boot

home

etc

/etc

tuan

duyen

/home/duyen

TDE - HCM

Thc hnh H iu hnh Linux

34

S dng h thng file (tt)


Th mc lm vic (home directory):
Mi user c cp mt th mc lu tr d liu ring ca mnh. Tn th mc thng trng tn username v t trong th mc /home. Home directory cn c k hiu l du ~:
[tuan@pc29 /]$ cd ~ <-> cd /home/tuan

User c ton quyn c ghi trong th mc ny Mc nh cc user khng th c ghi c trong home directory ca nhau.

TDE - HCM

Thc hnh H iu hnh Linux

35

S dng h thng file (tt)


Lnh in th mc hin hnh (pwd):
cd /var/log $ pwd -> vit tt t Print working dir /var/log

ng dn tng i v tuyt i:
ng dn tng i: Cn c vo th mc hin hnh ng dn tuyt i: ng dn y t th mc gc n file
TDE - HCM Thc hnh H iu hnh Linux 36

S dng h thng file (tt)


V d ng dn tng i:
$ cd /var/log -> /var/log hin hnh $ more messages -> /var/log/messages $ more ./samba/smb.log -> /var/log/samba/smb.log $more ../lib/mylib.txt -> /var/lib/mylib.txt Du . k hiu th mc user ang ng Du .. k hiu th mc cha
TDE - HCM Thc hnh H iu hnh Linux 37

S dng h thng file (tt)


Lnh chuyn th mc (cd):
$ pwd /home/tuan $ cd .. -> Chuyn ra th mc cha /home $ pwd /home $ cd .. -> Chuyn ra th mc cha / $ pwd /
TDE - HCM Thc hnh H iu hnh Linux 38

S dng h thng file (tt)


To file vn bn vi lnh cat:
To file mi:
$ cat > newfile Hello World Heres some text ^D

Xem li ni dung file:


$ cat newfile Hello World Heres some text
TDE - HCM Thc hnh H iu hnh Linux 39

S dng h thng file (tt)


To file vn bn vi lnh cat: (tt)
B sung thm vo file:
$ cat >> newfile Some more lines

Ni nhiu file thnh mt file:


$ cat > anotherfile Diffrerent text $ cat newfile.txt anotherfile > bigfile

Lnh cat, vt tt ca concatenate ni cc input xut ra mt output.


TDE - HCM Thc hnh H iu hnh Linux 40

S dng h thng file (tt)


To th mc (mkdir):
$ mkdir <tn/ng dn th mc>

Di chuyn (mv) v sao chp file (cp):


$ mv <source> <destination> $ cp <source> <destination>

Di chuyn v sao chp vi wildcard: Di chuyn th mc:


$ mvdir <directory> <destination>
TDE - HCM Thc hnh H iu hnh Linux 41

S dng h thng file (tt)


i tn file / th mc:
$ mv <tn c> <tn mi>

Xa file:
$ rm <file> Nhc trc khi xa: ty chn i (interactive) $ rm i *duck rm: remove dead_duck? Y rm: remove guiduck? N rm: remove lame-duck? y
TDE - HCM Thc hnh H iu hnh Linux 42

S dng h thng file (tt)


Xa th mc:
Dng lnh rmdir xa th mc:
$ rmdir <th mc>

Ch xa c th mc trng (khng cn ni dung) xa ton b ni dung v cc th mc con bn trong (th mc cha trng):
$ rm r <th mc> Ty chn r (recursive) duyt quy ton b th mc con bn trong
TDE - HCM Thc hnh H iu hnh Linux 43

S dng h thng file (tt)


Gii nn tp tin:
$ gunzip onefile.gz $ unzip onefile.zip -> -> -> -> onefile onefile

Nn tp tin:
$ gzip onefile $ zip onefile onefile.gz onefile.zip

Gii nn tp tin tar.gz:


$ tar xvfz onefile.tar.gz
TDE - HCM Thc hnh H iu hnh Linux 44

S dng h thng file (tt)


Cc th mc quan trng:
Th mc gc / /home: Cha cc home directory ca cc user /bin (binaries): Cha cc chng trnh Linux c bn /usr: Cha cc phn mm, ti liu, /usr/bin: Cha cc chng trnh ci t /dev: Linux xem mi th l file, y l ni cha cc file thit b
$ cat /dev/cdrom > MyCDImage.iso Thit b /dev/null: Dng nhn d liu rc
TDE - HCM Thc hnh H iu hnh Linux 45

H iu hnh Linux
Phn 2: Qun tr Linux I

Quyn truy cp file v th mc


Thuc tnh file:
$ ls -l /usr/games -rwxr-xr-x 3 root root 4096 Feb 21 11:45 banner -r-xrwxr-x 3 root games 4096 Feb 21 11:44 fortune

7 trng thuc tnh cho mi file:


Tp quyn truy xut (permission) S lin kt n file (link count) User ID s hu file owner (v d root) Nhm user ca file (v d games) Kch thc file (tnh theo byte) Ngy gi to file Tn file
TDE - HCM Thc hnh H iu hnh Linux 47

Quyn truy cp file v th mc (tt)


Ch s hu ca file (owner):
L user to ra file :
[tuan@pc29 tuan]$ mkdir thumuc1 [tuan@pc29 tuan]$ ls l drwxr-xr-x 2 tuan users 4096 11:44 thumuc1

Ch s hu ca thumuc1 l tuan

Owner c th gn quyn truy cp file . root c th i owner ca file:


# chown <ch s hu mi> <file>
[root@pc29 tuan]# chown root thumuc1 [root@pc29 tuan]# ls l drwxr-xr-x 2 root users 4096 11:44 thumuc1
TDE - HCM Thc hnh H iu hnh Linux 48

Quyn truy cp file v th mc (tt)


Nhm ngi dng (group):
Mi group c th cha nhiu user. Mt user c th thuc nhiu group nhng ch c mt nhm chnh (primary group). Thng thng nhm chnh ca mi user l mt group c trng tn vi User ID, v d: UID=tuan, Primary GID=tuan

ngha ca group:
Dng khi cn cp quyn truy cp file cho mt nhm ngi.
TDE - HCM Thc hnh H iu hnh Linux 49

Quyn truy cp file v th mc (tt)


Nhm user ca file (group):
L nhm chnh ca owner khi to file:
[tuan@pc29 tuan]$ mkdir thumuc1 [tuan@pc29 tuan]$ ls l drwxr-xr-x 2 tuan users 4096 11:44 thumuc1

Nhm chnh (primary group) ca tuan l users Nhm ca thumuc1 l users

root c th i nhm ca file:


# chgrp <nhm mi> <file>
[root@pc29 tuan]# chgrp admins thumuc1 [root@pc29 tuan]# ls l drwxr-xr-x 2 tuan admins 4096 11:44 thumuc1
TDE - HCM Thc hnh H iu hnh Linux 50

Quyn truy cp file v th mc (tt)


Quyn truy cp file:
3 quyn: c(r), ghi(w), thc thi(x) p dng cho 3 i tng: owner, group, other (cc user khc)

Quyn truy cp th mc:


3 quyn: lit k(r), ghi(w), chuyn vo(x) p dng cho 3 i tng: owner, group, other (cc user khc
TDE - HCM Thc hnh H iu hnh Linux 51

Quyn truy cp file v th mc (tt)


r owner group other
K hiu x: Dng chui quyn: r,w,x: cho php -: cm Dng bit quyn: 1: cho php 0 : cm x x x

w
x x x

x
x x x

TDE - HCM

Thc hnh H iu hnh Linux

52

Quyn truy cp file v th mc (tt)


=> Cn 9 bit biu din quyn cho mt file Biu din dng chui quyn:
- : file d : th mc

- r w x r w x r w x
owner group other

Biu din dng bit quyn: 1 1 1 1 1 1 1 1 1


owner
TDE - HCM

group

other
53

Thc hnh H iu hnh Linux

Quyn truy cp file v th mc (tt)


Biu din quyn dng s:
Quy i dng bit quyn sang h bt phn. V d: rwxr-xr-x = 111101101 = 755
owner c ton quyn, cc user cn li ch c c v thc thi

rwx------ = 111000000 = 700


owner c ton quyn, cn li khng c quyn

r--rw---- = 100110000 = 460


owner ch c, user trong nhm c quyn c ghi, cn li khng c quyn
TDE - HCM Thc hnh H iu hnh Linux 54

Quyn truy cp file v th mc (tt)


t quyn truy cp file:
chmod <specification> <file> Dng specification th nht: chmod [u|g|o|a][+|-][r|w|x] <file>
u: owner; g: group; o: other; a: c 3 i tng +: bt quyn; -: tt quyn r: quyn r; w: quyn w; x: quyn x

Dng specification th hai: chmod <s bt phn> <file>


S bt phn biu din chui bit quyn trn
TDE - HCM Thc hnh H iu hnh Linux 55

Quyn truy cp file v th mc (tt)


Mt s v d t quyn file:
$ chmod ugo-rw myfile $ chmod a-rw myfile
=> Tt quyn c/ghi ca tt c user

hoc

$ ls -l -rwxrwxrwx 1 root dr-xr-x-wx 2 root $ chmod go-rw my* $ ls -l -rwx--x--x 1 root dr-x--x--x 2 root
TDE - HCM

admins 640 05:40 myfile admins 4096 05:40 mydir

admins 640 05:40 myfile admins 4096 05:40 mydir


56

=> Tt quyn c/ghi ca cc user trong group v user khc


Thc hnh H iu hnh Linux

Quyn truy cp file v th mc (tt)


Mt s v d t quyn file: (tt)
$ ls -l -rw-r--r-- 1 tuan users 1024 myfile $ chmod 755 myfile $ ls -l -rwxr-xr-x 1 tuan users 1024 myfile
=> group v other khng c quyn ghi

$ chmod 644 myfile $ ls -l -rw-r--r-- 1 tuan users 1024 myfile


=> tt quyn ghi ca group v other, tt tt c quyn thc thi
TDE - HCM Thc hnh H iu hnh Linux 57

Quyn truy cp file v th mc (tt)


User c quyn c file th cng c quyn copy file. User s l owner ca file copy mi:
$ whoami tuan $ ls -l -rwxr-xr-x 1 root admins 100 myfile $ cp myfile ~ $ ls l ~ -rwxr-xr-x 1 tuan users 100 myfile
TDE - HCM Thc hnh H iu hnh Linux 58

Quyn truy cp file v th mc (tt)


User c quyn ghi trong th mc th cng c quyn xa cc file trong th mc , cho d cc file c t quyn ghi cho user hay khng:
$ whoami tuan $ groups users => xem danh sch group users users: duyen nam tuan viet $ ls -la drwxrwx--- 2 root users 4096 . -rw------- 2 root root 916 file01 $ rm file01
TDE - HCM Thc hnh H iu hnh Linux 59

Trnh thng dch lnh Shell


Shell l g?
Chng trnh din dch cc lnh do user nhp t bn phm v chuyn cho Linux thc thi. Ta nh trnh command.com trong MS-DOS. Shell thng dng trn Linux hin nay l Bash (Bourne Again Shell).
TDE - HCM Thc hnh H iu hnh Linux 60

Trnh thng dch lnh Shell (tt)


Shell cha mt s lnh buit-in (ta nh lnh ni tr trong MS-DOS), v d pwd. Cc lnh khc u l nhng chng trnh thc thi nm trong cc th mc (ta nh lnh ngoi tr trong MS-DOS), v d cp,mv.

TDE - HCM

Thc hnh H iu hnh Linux

61

Trnh thng dch lnh Shell (tt)


Sau khi user ng nhp (login), Linux s chy mt shell mi cho user lm vic. Khi user logout, shell ca user s kt thc. Shell thng l chng trnh u tin c chy sau khi user login. Loi shell lm vic ca mi user c nh ngha trong thuc tnh ca user account.

TDE - HCM

Thc hnh H iu hnh Linux

62

Trnh thng dch lnh Shell (tt)


Cc loi shell truyn thng:
Bourne shell (sh): Shell u tin v c mt trn mi h UNIX, h tr lp trnh shell rt tt. C shell (csh): C php lp trnh ta nh ngn ng C, h tr tng tc vi user tt. Korn shell (ksh): Kt hp cc u im ca Bourne shell v C shell, cung cp mi trng Bourne shell vi kh nng h tr tng tc vi user.

TDE - HCM

Thc hnh H iu hnh Linux

63

Trnh thng dch lnh Shell (tt)


Shell trn Linux:
bash: Phin bn m rng ca sh tcsh: Phin bn m rng ca csh pdksh: Phin bn m rng ca ksh

Bourne Again Shell (bash):


L shell mc nh trn Linux Tng thch Bourne shell B sung kh nng x l user input:
Auto-completion, wildcards, history, alias
TDE - HCM Thc hnh H iu hnh Linux 64

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Command-line Auto-completion:
Phm TAB,

S dng wildcard:
$ ls ch1.doc ch2.doc ch3.doc ch4.doc ch5.doc $ lpr ch* hay $ lpr ch?.doc hay $ lpr ch[12345].doc hay $ lpr ch[1-5].doc => In t file ch1.doc cho n ch5.doc
TDE - HCM Thc hnh H iu hnh Linux 65

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Command history:
Lu li cc lnh user g trong file HISTFILE (mc nh l .bash_history) home directory ca user . Kch thc history quy nh bi bin HISTSIZE. User c th ly li cc lnh g bng phm mi tn ln v xung, tng t nh doskey trong MS-DOS. Xem history:
$ history [s dng sau cng]
TDE - HCM Thc hnh H iu hnh Linux 66

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Alias: Thay cc lnh di bng tn (alias) ngn hn gim thao tc g phm.
$ cd /usr/local/src/gbench1 (1) t tn cho lnh (1) l gb: $ alias gb=cd /usr/local/src/gbench-1 S dng: $ gb Mt s alias mc nh trong RedHat bash:
alias ls=ls --color=tty alias ll=ls -l --color=tty alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
TDE - HCM Thc hnh H iu hnh Linux 67

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Input redirection: V d:
m s dng, s t, s k t trong mt on vn bn (c nhp t bn phm): $ wc Hello World! Ctrl-D 1 2 13 Dng input redirection c on vn bn t file: $ wc < hello.txt 1 2 13
TDE - HCM Thc hnh H iu hnh Linux 68

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Output redirection: Chuyn kt qu xut ca lnh ra file thay v in ra mn hnh. V d:
$ ls > dirlist.txt => Lit k ni dung th mc vo file dirlist.txt $ find / -name *.txt > result.txt => Tm cc file *.txt k t th mc / v in kt qu + thng bo ra file result.txt $ find / -name *.txt 2> /dev/null => Tm cc file *.txt k t th mc /, ch in kt qu ra mn hnh, khng in thng bo li (kt qu t thit b xut li chun stderr (2) s b ct).
TDE - HCM Thc hnh H iu hnh Linux 69

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Pipe (|): Truyn d liu gia cc lnh output ca lnh ny s l input ca lnh k. V d:
$ cat vidu.txt X Window is a GUI of Linux But Windows is a Microsofts OS Openwin is from Sun Solaris $ cat vidu.txt | grep Window | wc l 2 => In s dng cha ch Window trong file vidu.txt
TDE - HCM Thc hnh H iu hnh Linux 70

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Prompt: bash dng 2 mc du nhc:
PS1: Du nhc lnh, mc nh l:
[\u@\h \W]\$ chng hn: [tuan@pc29 usr]$

PS2: Du nhc ch nhp d liu, mc nh l > Mt s k t c bit dng cho prompt:


\$: K t $ hay # (i vi root) \\: K t \ \d: Ngy thng \h: Hostname \n: Xung hng \s: Tn shell \w: Th mc hin hnh
TDE - HCM Thc hnh H iu hnh Linux 71

Trnh thng dch lnh Shell (tt)


Bourne Again Shell (bash): (tt)
Thit lp Prompt cho shell:
$ PS1=\t\\ => Du nhc lnh s l: 16:43:24\

TDE - HCM

Thc hnh H iu hnh Linux

72

Qun tr h thng Linux


Gn kt (mount) h thng file:
Mi h thng file trn Unix/Linux u phi mount mi c th s dng c. Mount l thao tc gn kt mt h thng file vo mt th mc no (mount point) trong cy th mc gc /. Mi truy cp n th mc mount point c hiu l truy cp vo h thng file mount.

TDE - HCM

Thc hnh H iu hnh Linux

73

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
Trong qu trnh boot, lnh mount s c gi gn kt tt c cc h thng file ch nh trong file /etc/fstab. V d file /etc/fstab:
/dev/hda1 /dev/hda2 /dev/cdrom /dev/fd0 / swap /mnt/cdrom /mnt/floppy ext3 swap udf,iso9660 auto

=> mount hda1 vo th mc gc, cdrom vo th mc /mnt/cdrom, a mm vo /mnt/floppy


TDE - HCM Thc hnh H iu hnh Linux 74

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
nh dng lnh mount nh sau:
mount <filesystem> <mountpoint> filesystem l tn thit b mountpoint l tn th mc s gn kt vo thit b

Trng hp thit b cha c m t trong /etc/fstab hoc Linux khng t ng bit:


mount t <fstype> <filesystem> <mountpoint> fstype l kiu h thng file ca thit b

Mount a CDROM vo /mnt/cdrom:


mount /dev/cdrom /mnt/cdrom /dev/cdrom l tn thit b a CDROM 1
TDE - HCM Thc hnh H iu hnh Linux 75

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
Mount a mm vo th mc /mnt/floppy:
$ mount /dev/fd0 /mnt/floppy /dev/fd0 l tn thit b a mm 1 Trng hp a mm format FAT12: $ mount t msdos /dev/fd0 /mnt/floppy

Mount partition Win9x:


$ mount t vfat /dev/hda1 /mnt/win Gi s /dev/hda1 l partition ci Windows 9x ( C) => c ghi trong th mc /mnt/win nh trn a C: ca Windows 9x
TDE - HCM Thc hnh H iu hnh Linux 76

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
Mount a USB:
$ mount /dev/sda1 /mnt/usb /dev/sda1 l tn thit b USB 1 (khe cm u tin) Trng hp my c /dev/sda l thit b SCSI HDD, tn thit b USB s l /dev/sdb,

Mount a SCSI vo th mc /mnt/temp


$ mount /dev/sda1 /mnt/temp /dev/sda1 l partition1 ca a SCSI HDD 1

Vi lnh mount, mount point c th l bt c th mc no, tuy nhin thng thng nn t trong /mnt
TDE - HCM Thc hnh H iu hnh Linux 77

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
Mt s tn thit b:
/dev/fd0 l tn thit b a mm 1 /dev/fd1 l tn thit b a mm 2 /dev/cdrom l tn thit b CDROM 1 /dev/cdrom1 l tn thit b CDROM 2 /dev/hda1 l partition 1 ca HDD 1 /dev/hda2 l partition 2 ca HDD 1 /dev/hdb1 l partition 1 ca HDD 2 /dev/hdb3 l partition 3 ca HDD 2 /dev/sda1 l partition 1 a SCSI 1 hoc a USB 1 /dev/sdb3 l partition 3 a SCSI 2 hoc a USB 3
TDE - HCM Thc hnh H iu hnh Linux 78

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
Cc kiu h thng file (fstype):
ext2: h thng file trn Linux ext3: h thng file trn Linux iso9660: h thng file CDROM msdos: h thng file FAT vfat: h thng file FAT ntfs: h thng file NTFS nfs: Network File System smbfs: h thng file trn cc SMB share tmpfs: h thng file tm
TDE - HCM Thc hnh H iu hnh Linux 79

Qun tr h thng Linux (tt)


Gn kt (mount) h thng file: (tt)
G gn kt CDROM:
$ umount /mnt/cdrom hoc $ eject umount v y CDROM ra

Kim tra h thng file:


Nn unmount h thng file trc khi kim Gi lnh fsck:
$ fsck <tn thit b> $ fsck -A
TDE - HCM Thc hnh H iu hnh Linux 80

H iu hnh Linux
Phn 3: Qun tr Linux II

Thit b
Device (thit b):
L nhng g gn vo my tnh chy Linux v gi nhn d liu vi h thng. V d: Terminal, hard disk, printer, CDROM, modem, UNIX/Linux i x mi th nh device. Trnh iu khin thit b (device driver) l mt phn trong kernel, cha tp lnh giao tip vi device. Device driver trong Linux cho php tho lp d dng, c lp vi phn mm h iu hnh.
TDE - HCM Thc hnh H iu hnh Linux 82

Thit b (tt)
C hai loi device trn Linux:
Character device (thit b k t): Thit b nhp xut d liu dng mt ln mt k t. V d: terminal, printer, modem, Block device (thit b khi): Thit b nhp xut d liu theo tng khi ln d liu, c tc nhanh truyn hn thit b k t. V d hard disk, tape, Phn bit character v block device:
$ ls -l /dev crw------- root root beep => c=character brw-rw---- root floppy fd0 => b=block
TDE - HCM Thc hnh H iu hnh Linux 83

Thit b (tt)
S major v minor ca thit b:
Mi device c c trng bi 2 con s ny. S major phn bit cc kiu device (mi device driver khc nhau l mt kiu). S minor phn bit cc device cng kiu (khi h thng gn nhiu device ging nhau).

TDE - HCM

Thc hnh H iu hnh Linux

84

Thit b (tt)
To device:
mknod [option] device b|c|p|u major minor option:
-m [mode] t mode ca file thnh mode thay v gi tr mc nh l 0666.

b: block mode device, c: character mode device p: FIFO device, u: unbuffered character mode device

Xa device:
Dng lnh rm xa file thng thng

TDE - HCM

Thc hnh H iu hnh Linux

85

Thit b (tt)
Printer device:
Linux h tr parallel printer v serial printer. C hai loi u l character mode device. Tn cng my in (printer device), a ch cng v tn tng ng trn MS-DOS:
/dev/lp0 /dev/lp1 /dev/lp2 0x03BC 0x0378 0x0278 LPT1 LPT2 LPT3

lp0, lp1, lp2 l tn cc cng song song trn Linux. a ch cng c th thay i ty my
TDE - HCM Thc hnh H iu hnh Linux 86

Thit b (tt)
To printer device:
Printer device c th to ra nh sau (nu h thng cha to sn):
$ mknod m 620 /dev/lp0 c 6 0 => To character device tn /dev/lp0 vi s major=6, minor=0, quyn truy cp file l 620 major=6 l kiu thit b cng parallel minor=0 v y l device u tin, cc device k tip s nh s tng dn theo th t. $ chown root.daemon /dev/lp0 => t owner=root, group=daemon cho file lp0

Lu cch dng chown gn owner v group.


TDE - HCM Thc hnh H iu hnh Linux 87

Terminal
Terminal:
L b thit b giao tip gia ngi s dng vi cc my tnh UNIX, d liu nhp xut dng k t. Terminal truyn thng:
L thit b phn cng hoc my PC chy phn mm gi lp (v d HyperTerminal trn Windows) Kt ni vo my tnh UNIX/Linux qua cng serial.

Terminal o: Chng trnh gi lp terminal


Kch hot qua cc t hp phm Alt-F1 -> Alt-F6 Thm nhp qua mng bng trnh telnet, ssh
TDE - HCM Thc hnh H iu hnh Linux 88

Terminal (tt)
Login process:
boot Linux init mingetty login bash shell /etc/passwd ~/.bash_profile /etc/inittab Chn mc khi ng (run level) Gi chng trnh getty khi to cc terminal Thit lp thng s truyn thng vi terminal Gi trnh login Xc thc username v password Gn bin mi trng TERM Sau kt thc v m shell

TDE - HCM

Thc hnh H iu hnh Linux

89

Terminal (tt)
Tn cng serial, a ch cng v tn tng ng trn MS-DOS:
/dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3 0x03F8 0x02F8 0x03E8 0x02E8 COM1 COM2 COM3 COM4

ttyS0, ttyS1, ttyS2, ttyS3 l tn cc cng serial trn Linux. a ch cng c th thay i ty my
TDE - HCM Thc hnh H iu hnh Linux 90

Terminal (tt)
To terminal device:
Terminal c th to ra nh sau (nu h thng cha to sn):
$ mknod m 660 /dev/ttyS0 c 4 64 => To character device tn /dev/ttyS0 vi s major=4, minor=64, quyn truy cp file l 660 major=4 l kiu thit b cng serial minor=64: y l device u tin, cc device k tip s nh s tng dn theo th t. $ chown root.tty /dev/ttyS0
TDE - HCM Thc hnh H iu hnh Linux 91

Process
Process:
L chng trnh n, chy trong mt virtual address space ring ca h thng. Chy nhiu process trn dng lnh shell:
$ cat vidu.txt | grep Window | wc l $ cd /usr/games && banner => Du && dng phn cch cc lnh cn chy tun t.

TDE - HCM

Thc hnh H iu hnh Linux

92

Process (tt)
Cc loi process:
Interactive process: Yu cu user nhp d kin trong qu trnh thc thi, v d: text editor, shell, game, Batch process: Khng tng tc vi user khi thc thi, d kin u vo c cho trc. Daemon process: thng c kch hot vo lc boot my, chy ch background.

TDE - HCM

Thc hnh H iu hnh Linux

93

Process (tt)
Lnh ps (process status):
Xem chi tit cc process ca mnh:
$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND tuan 13814 1.5 0.1 4344 1432 pts/0 S 18:00 0:00 bash tuan 13851 0.0 0.0 2600 648 pts/0 R 18:00 0:00 ps -u

Xem cc process ca mt user no :


# ps u tuan

Xem chi tit tt c process trong h thng:


# ps -aux

TDE - HCM

Thc hnh H iu hnh Linux

94

Qun tr ngi dng


Ti khon superuser:
L user account c UID = 0, thng l root. Nn to tng account cho tng cng vic qun tr trnh ng nhp vo root.

File /etc/passwd:
File text lu c s d liu user account trn h thng. Ch c root mi c quyn ghi ln file ny.

TDE - HCM

Thc hnh H iu hnh Linux

95

Qun tr ngi dng (tt)


File /etc/passwd: (tt)
nh dng mi dng trong file:
username:password:UID:GID: comment:home_directory:login_command password: L m ha ca user password home_directory: Thng l /home/<username> login_command: Chng trnh cn gi ngay sau khi login thnh cng

Lu :
H thng khng lu tr trc tip user password. H thng ch c th kim chng user password ch khng th gii m c user password.
TDE - HCM Thc hnh H iu hnh Linux 96

Qun tr ngi dng (tt)


V d file /etc/passwd:
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin sync:x:5:0:/sbin:/sbin/nologin halt:x:7:0:halt:/sbin:/sbin/halt rpm:x:37:37::/var/lib/rpm:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp: nobody:x:99:99:Nobody:/:/sbin/nologin ftp:x:14:50:FTP:/var/ftp:/sbin/nologin tuan:x:500:500::/home/tuan:/bin/bash
TDE - HCM Thc hnh H iu hnh Linux 97

Qun tr ngi dng (tt)


Trng password trong /etc/passwd:
trng: Account c password rng. x: Password (m ha) lu trong /etc/shadow.

File /etc/shadow:
Lu cc password m ha ca mi account Ch c root mi c quyn c ghi file ny V d dng cha password ca account tuan trong /etc/shadow:
tuan:$1$/347I5oy$cfG13OXnR3tNKmRvraEyG. :12560:0:99999:7:::
TDE - HCM Thc hnh H iu hnh Linux 98

Qun tr ngi dng (tt)


Cc account h thng:
root: superuser account (UID = 0) daemon: Dng chy cc system process bin: Owner cho cc file thc thi ftp: Dng trong kt ni FTP

Trng password ca cc account nh daemon, bin, ftp l mt du *, th hin user khng c login bng account ny.
TDE - HCM Thc hnh H iu hnh Linux 99

Qun tr ngi dng (tt)


B sung user mi vo h thng: 2 cch
Sa trc tip file /etc/passwd:
Son tho file ny v b sung 1 dng cho user mi To home directory v t quyn s hu cho user Copy cc file khi ng (.bash_profile, ) vo home directory v t quyn s hu cho user. Lu : Sao lu li v cn thn khi dng cch ny

S dng lnh useradd:


# useradd tuan => To user account tuan vi cc gi tr mc nh:
home directory l /home/tuan login command (shell) l /bin/bash Nhm chnh (primary group) l tuan, khng c nhm ph.
TDE - HCM Thc hnh H iu hnh Linux 100

Qun tr ngi dng (tt)


Thm thng s cho useradd:
# useradd -d /tuan -s /bin/sh tuan => To user tuan c home directory l /tuan v shell lm vic l Bourne shell (/bin/sh) # useradd g user tuan => To user tuan v t nhm chnh (primary group) ca tuan l nhm user # useradd -g user -G teacher,admin tuan => To user tuan, t nhm chnh ca tuan l user, nhm ph l teacher v admin

File /etc/group: C s d liu user group


TDE - HCM Thc hnh H iu hnh Linux 101

Qun tr ngi dng (tt)


Sa i thng tin user: 2 cch
Sa trc tip file /etc/passwd, /etc/group S dng lnh usermod:
# usermod c Nguyen Van Tuan tuan => t thng tin comment cho account tuan # usermod G students,operators tuan => t nhm ph ca tuan l students v operator # usermod -g admins tuan => i nhm chnh ca tuan thnh admins
TDE - HCM Thc hnh H iu hnh Linux 102

Qun tr ngi dng (tt)


Xa user khi h thng: 2 cch
Sa trc tip file /etc/passwd:
Xa dng thng tin user trong file /etc/passwd Xa dng thng tin group trong file /etc/group Xa th mc lm vic ca user

S dng lnh userdel:


# userdel tuan => Xa tuan khi h thng (xa c group tuan) # userdel r tuan => Xa user tuan v xa c home dir ca tuan
TDE - HCM Thc hnh H iu hnh Linux 103

Qun tr ngi dng (tt)


File /etc/group: (tt)
nh dng mi dng trong file:
group_name:password:GID:users_list password: Thng l du *, x hoc trng, ch s dng mt s h thng yu cu user nhp password khi tham gia nhm. users_list: Danh sch cc user thnh vin ca nhm, cch nhau bi du phy (,).

V d file /etc/group:
root:x:0:root bin:x:1:root,bin,daemon tuan:x:500:
TDE - HCM Thc hnh H iu hnh Linux 104

Qun tr ngi dng (tt)


Thm, sa, xa nhm ngi dng: 2 cch
Sa trc tip file /etc/group Dng lnh groupadd, groupmod, groupdel:
# groupadd students => Thm nhm students vo h thng # groupmod -n sinhvien students => i tn nhm students thnh sinhvien # groupdel sinhvien => Xa nhm sinhvien

a thnh vin vo group:


Dng lnh usermod trnh by trn
TDE - HCM Thc hnh H iu hnh Linux 105

Cu hnh RedHat vi setup


File cu hnh trong Linux:
Hu ht d liu cu hnh trong Linux v cc ng dng u lu trong cc file cu hnh. File cu hnh thng l file vn bn, c phn m rng .conf v lu trong th mc /etc. Cu hnh ca h thng c thit lp bng cch hiu chnh cc file cu hnh.

Tin tch setup trong RedHat:


Dng thit lp cc cu hnh c bn cho h thng thng qua giao din menu gn gi. Trnh setup s hiu chnh cc thng s trong cc file cu hnh tng ng ca h thng.
TDE - HCM Thc hnh H iu hnh Linux 106

Cu hnh RedHat vi setup (tt)

TDE - HCM

Thc hnh H iu hnh Linux

107

Cu hnh RedHat vi setup (tt)


Trnh setup c 7 mc cu hnh sau:
Xc thc (Authentification): authconfig Tng la (Firewall): lokkit Thit b chut (Mouse): mouseconfig Mng (Network): netconfig My in (Printer): printconf Dch v h thng (System Services): ntsysv Ngy gi h thng (Timezone): timeconfig

Mi mc tng ng vi mt chng trnh cu hnh c tn nu trn.


TDE - HCM Thc hnh H iu hnh Linux 108

Cu hnh RedHat vi setup (tt)


Cu hnh xc thc ngi dng:
Xc thc qua NIS: Chn mc ny nu c s d liu user c lu tr tp trung trong mt NIS server trn mng. Xc thc qua LDAP: Chn mc ny nu c s d liu user c lu tr tp trung trong mt LDAP server trn mng. Xc thc qua Samba: Chn mc ny nu mun my Linux logon vo NT Domain nh mt my trm Windows NT.
TDE - HCM Thc hnh H iu hnh Linux 109

Cu hnh RedHat vi setup (tt)


Cu hnh Firewall:
Chn High, Medium hoc No firewall ty theo nhu cu v an ninh ca h thng.
V d cc my ni trc tip vi Internet cn dng High firewall, cc my trm trong mng LAN c bo v c th khng cn firewall.

Chn Customize trong trng hp cn thit lp firewall nhng vn cho php truy cp vo mt s cng TCP/IP no nh HTTP, FTP, SSH.
TDE - HCM Thc hnh H iu hnh Linux 110

Cu hnh RedHat vi setup (tt)


Cu hnh Mouse:
Chn ng loi mouse ang dng

Cu hnh Printer:
Chn printer queue v cu hnh my in

Cu hnh Timezone:
Chn time zone a phng

Cu hnh System Sevices:


Chn cc service (thng l daemon) s chy t ng khi boot my
TDE - HCM Thc hnh H iu hnh Linux 111

Cu hnh RedHat vi setup (tt)


Mt s service quan trng:
autofs: Dch v mount t ng khi boot crond: Dch v nh thi thc thi cups: Dch v in n dhcpd: DHCP Server - cp a ch IP ng httpd: Apache Web Server iptables: Firewall kudzu: Dch v nhn din phn cng ldap: LDAP Server dch v th mc
TDE - HCM Thc hnh H iu hnh Linux 112

Cu hnh RedHat vi setup (tt)


Mt s service quan trng: (tt)
named: DNS Server phn gii tn min network: Kch hot cc thit b mng nfs: NFS Server Network File System smb: Samba kt ni Microsoft Network squid: Proxy Server sshd: SSH Server cho php truy cp t xa telnet: Telnet Server cho truy cp t xa vsftpd: FTP Server xinetd: Qun l cc dch v Internet
TDE - HCM Thc hnh H iu hnh Linux 113

Cu hnh RedHat vi setup (tt)


Cu hnh Network:
Mi my phi thit lp cc thng s:
a ch IP theo quy nh ca ngi qun tr mng LAN (a ch thuc lp A, B hay C; netmask l bao nhiu). Gateway: Thit b/server ng vai tr ca ng kt ni ra cc mng LAN/WAN/Internet bn ngoi. Primary name server: phn gii tn min ra IP
V d phn gii www.yahoo.com -> 66.94.230.37

Secondary name server: Server d phng cho Primary name server Domain name (tn min): Tn my v tn min
TDE - HCM Thc hnh H iu hnh Linux 114

Cu hnh RedHat vi setup (tt)


Cu hnh Network (tt): V d

TDE - HCM

Thc hnh H iu hnh Linux

115

Cu hnh RedHat vi setup (tt)


Cu hnh Network: Cc thng s mng (IP, netmask, gateway, DNS, domain) c thit lp bng 2 phng php
S dng a ch IP tnh:
Thit lp bng tay cc thng s trn. Phi lin h vi qun tr mng LAN mi khi thit lp, thay i cu hnh mng cho my. Cc my trm phi thit lp li cu hnh khi c s thay i v cu hnh mng LAN.

TDE - HCM

Thc hnh H iu hnh Linux

116

Cu hnh RedHat vi setup (tt)


Cu hnh Network: (tt)
S dng a ch IP ng:
Cc thng s cu hnh mng c t ng thit lp thng qua mt DHCP Server. Ngi dng khng cn quan tm n vic thit lp cc thng s trn. Khi mng LAN thay i cu hnh, cc my trm s t ng c DHCP Server cp nht cu hnh. => Phi duy tr mt DHCP Server (v c th c mt DHCP Server d phng) trn mng LAN. => Chn option Use dynamic IP configuration (DHCP) trong phn cu hnh network ca setup.
TDE - HCM Thc hnh H iu hnh Linux 117

Cu hnh RedHat vi setup (tt)


Cu hnh Network:
Xem thng tin cu hnh mng: Lnh ifconfig
# ifconfig
eth0 eth1
Link encap:Ethernet HWaddr 00:06:B5:8C:76:0C inet addr:10.1.1.12 Bcast:10.1.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Link encap:Ethernet HWaddr 00:03:74:E0:C4:17 inet addr:10.2.1.12 Bcast:10.2.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

=> Xem thng tin tt c thit b mng # ifconfig eth0 => Xem thng tin card mng 1 # ifconfig eth1 => Xem thng tin card mng 2
TDE - HCM Thc hnh H iu hnh Linux 118

Cu hnh RedHat vi setup (tt)


Cu hnh Network: (tt)
Ngoi phng php dng setup cu hnh mng, c th hiu chnh trc tip cc file cu hnh /etc/sysconfig/network-scripts:
File ifcfg-eth0: Cu hnh cho thit b eth0 DEVICE=eth0 IPADDR=10.1.1.12 NETMASK=255.255.0.0 NETWORK=10.1.0.0 ONBOOT=yes HWADDR=00:06:5b:8c:c4:17
TDE - HCM Thc hnh H iu hnh Linux 119

Cu hnh RedHat vi setup (tt)


Cu hnh Network: (tt)
Kch hot thit b mng eth0:
# ifconfig eth0 up # ifup eth0 # ifconfig eth0 down # ifdown eth0 hoc

Tm ngng thit b mng eth0:


hoc

Ngoi ra, lnh ifconfig cn cho php thit lp cc thng s cu hnh mng v nhiu la chn khc.
TDE - HCM Thc hnh H iu hnh Linux 120

Thit lp cc service
Dch v h thng (service):
Cc service c thc thi thng qua cc script t th mc /etc/rc.d/init.d/ Ngoi ra cn c 7 th mc rc0.d rc6.d trong th mc /etc/rc.d/ cha cc lin kt n nhng script ny.

Cc service cho tng runlevel:


Linux c 7 mc runlevel, khi boot my vo runlevel no, Linux s thc thi cc service trong th mc rc0.d .. rc6.d tng ng vi runlevel .
TDE - HCM Thc hnh H iu hnh Linux 121

Thit lp cc service (tt)


V d: Dch v web server httpd
File script: /etc/rc.d/init.d/httpd Cc lin kt th mc /etc/rc.d/rc0.d .. rc6.d:
/etc/rc.d/rc3.d/K15httpd -> /etc/rc.d/init.d/httpd /etc/rc.d/rc5.d/S85httpd -> /etc/rc.d/init.d/httpd /etc/rc.d/rc1.d/K15httpd -> /etc/rc.d/init.d/httpd

K hiu K - u tin kt thc; S - bt u


TDE - HCM Thc hnh H iu hnh Linux 122

Thit lp cc service (tt)


B sung service mi:
To hoc copy file script ca service vo /etc/rc.d/init.d: V d file sshd
#!/bin/bash # Init file for OpenSSH server daemon # chkconfig: 2345 55 25 Ni dung file script Dng chkconfig bt buc phi c, ngha nh sau: 2345: sshd chy cc runlevel 2, 3, 4, 5 55: sshd c u tin bt u 55 (trong 100 service th sshd l service th 55 c start) 25: sshd c u tin kt thc l 25
TDE - HCM Thc hnh H iu hnh Linux 123

Thit lp cc service (tt)


B sung service mi: (tt)
Dng lnh chkconfig to cc lin kt tng ng trong /etc/rc.d/rc0.d rc6.d:
# chkconfig --add <service name>

Kch hot service t ng chy khi boot:


# chkconfig <service name> on C th dng trnh setup, mc System Service kch hot service ( trnh by phn trc).

t li runlevel cho service (nu cn):


# chkconfig --level <levels> <service>
TDE - HCM Thc hnh H iu hnh Linux 124

Thit lp cc service (tt)


Xem thit lp ca service:
chkconfig --list <service name>
# chkconfig --list sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Ngng kch hot service:


chkconfig <service name> off

Xa b service:
chkconfig --del <service name>
# chkconfig --del sshd

TDE - HCM

Thc hnh H iu hnh Linux

125

Ci t phn mm trn RedHat


Phn mm dng source:
Thng c ng gi v nn di dng .tar.gz cd <software_directory> configure => Cu hnh phn mm make => Bin dch phn mm make install => Ci t phn mm vo cc th mc h thng H thng phi c ci GCC (Gnome C Compiler) c file README, INSTALL ca phn mm bit chnh xc v cch ci t.
TDE - HCM Thc hnh H iu hnh Linux 126

Ci t phn mm trn RedHat (tt)


Phn mm dng RPM binary:
Gi phn mm c phn m rng tn file:
. i386.rpm, .i686.rpm => Kin trc Intel .sparc.rpm => Kin trc Sun

Ci t mi:
# rpm ivh <RPM_file>

Nng cp:
# rpm Uvh <RPM_file>

Cc ty chn quan trng:


--nodeps: b qua cc gi RPM lin quan --force: buc phi ci t
TDE - HCM Thc hnh H iu hnh Linux 127

Ci t phn mm trn RedHat (tt)


Phn mm dng RPM binary: (tt)
Xem thng tin phn mm ci:
# rpm -q <software_name> # rpm -qi <software_name>

G b phn mm (uninstall):
# rpm e <software> <software> gm tn v version ca phn mm, nu khng nh th dng rpm q xc nh.

Mt s lu khi ci t phn mm RPM:


Nu c thng bo li v dependancy gia cc gi RPM, dng ty chn --nodeps b qua.
TDE - HCM Thc hnh H iu hnh Linux 128

Ci t phn mm trn RedHat (tt)


Phn mm dng RPM source:
Gi phn mm c phn m rng tn file:
.src.rpm # # # # # => Dng source code

Dch RPM source sang RPM binary ri ci t:


rpm -ivh <RPM_source_file> cd /usr/src/redhat/SPECS rpmbuild bb <specs_file.spec> cd /usr/src/redhat/RPMS/i386 ;Vi Intel rpm -ivh <RPM_file>

iu chnh file specs (nu cn thm ty chn bin dch) trc khi gi rpmbuild
TDE - HCM Thc hnh H iu hnh Linux 129

H iu hnh Linux
Phn 4: Lp trnh Shell

Chng trnh Shell


Chng trnh Shell:
L file vn bn cha mt hoc nhiu lnh Linux cn thc thi mt lt. Cng dng:
Chy nhiu lnh c dng thng xuyn bng mt lnh n (chng trnh shell) T ng ha cng on ci t phn mm Vit cc chng trnh ng dng n gin

Chng trnh Shell c vit bng cc trnh son tho vn bn thng thng nh vi,
TDE - HCM Thc hnh H iu hnh Linux 131

To chng trnh Shell


V d: Chng trnh backup ni dung th mc lm vic vo a mm:
Son tho chng trnh shell:
# cat > backup mount t msdos /dev/fd0 /mnt/floppy cp ~/* -R /mnt/floppy

Gn quyn thc thi:


# chmod a+x backup

Chy chng trnh backup:


# ./backup
TDE - HCM

hoc # source backup


Thc hnh H iu hnh Linux 132

S dng bin
Bin (variable) l phn t nh cha d liu dng khi thc thi chng trnh shell. Hai loi bin:
Bin do chng trnh shell t khai bo, bin mi trng, v d PATH Bin quy c ca shell, v d: $1, $2,

Khai bo bin:
Khng cn khai bo trc Bin ca shell khng c kiu d liu: mt bin c th lu hoc chui k t hoc s nguyn,
TDE - HCM Thc hnh H iu hnh Linux 133

S dng bin (tt)


nh ngha bin v gn gi tr: v d
COUNT=5 -> Khai bo bin COUNT gi tr 5 Lu : vi Bash shell, khng c c khong trng cnh du = Mt cch gn khc: set COUNT = 5

Ly gi tr ca bin:
Dng du $ trc tn bin V d in gi tr bin COUNT ra mn hnh: echo $COUNT
TDE - HCM Thc hnh H iu hnh Linux 134

S dng bin (tt)


Bin tham s dng lnh:
L cc bin lu cc tham s c truyn trn dng lnh khi gi chng trnh shell. Quy tc t tn:
1: Tham s th 1 2: Tham s th 2 3: Tham s th 3

Ly gi tr: cng dng du $ trc tn bin


$1, $2, $3,
TDE - HCM Thc hnh H iu hnh Linux 135

S dng bin (tt)


Bin tham s dng lnh (tt): v d
Chng trnh shell to 2 user account:
# vi create-two useradd $1 useradd $2 passwd $1 passwd $2

Thc thi chng trnh:


# create-two huyen hieu => To user huyen v hieu, sau t password
TDE - HCM Thc hnh H iu hnh Linux 136

S dng bin (tt)


Mt s bin quy c trong Shell:
$#: S lng tham s dng lnh $?: M thot ca lnh va thc thi $0: Tn chng trnh shell (tham s 0) $*: Danh sch cc tham s dng lnh ($1 $2 ) $@: Danh sch cc tham s dng lnh, t trong du nhy ($1 $2 )

TDE - HCM

Thc hnh H iu hnh Linux

137

S dng du nhy
Du nhy kp (): biu din chui k t c cha khong trng
$ mystring=Hello World $ echo $mystring => In bin mystring Hello World Bash s bo li khi khng dng nhy kp cho chui: $ mystring=Hello World -bash: World: command not found => mystring vn khng c gn gi tr
TDE - HCM Thc hnh H iu hnh Linux 138

S dng du nhy (tt)


Du nhy n (): biu din chui k t c cha khong trng hay k t c bit khc
$ mystring=Hello World $ echo $mystring Hello World

ngha ca du nhy kp: che k t khong trng trong chui ngha ca du nhy n: che tt c k t c bit trong chui (gm c khong trng)
TDE - HCM Thc hnh H iu hnh Linux 139

S dng du nhy (tt)


Khi no s dng du nhy kp:
$ mystring=Hello, I am $LOGNAME $ echo $mystring Hello, I am tuan => Nhy kp khng che k t $ nn c thay th

Khi no s dng du nhy n:


$ mystring=Hello, I am $LOGNAME $ echo $mystring Hello, I am $LOGNAME => Nhy n che k t $ nn khng thay th
TDE - HCM Thc hnh H iu hnh Linux 140

S dng du nhy (tt)


Du s ngc \ (backslash): Dng che mt k t c bit.
$ mystring=Hello\ World $ echo $mystring Hello World => Du backslash che k t khong trng $ cost=\$2500 $ echo $cost $2500 => Du backslash che k t $
TDE - HCM Thc hnh H iu hnh Linux 141

S dng du nhy (tt)


Du nhy ngc (``): Dng ly kt qu thc thi ca lnh t bn trong.
$ dir_content=`ls la /home/tuan` $ echo $dir_content
drwxr-x--drwxr-xr-x -rw-------rw-r--r--rw-r--r--rw-r--r-22 tuan tuan 4096 Jun 3 15:57 . 25 tuan tuan 4096 Jun 3 16:49 .. 1 tuan tuan 16595 Jun 4 19:44 .bash_history 1 tuan tuan 24 Jun 11 2000 .bash_logout 1 tuan tuan 271 Jun 3 10:09 .bash_profile 1 tuan tuan 176 Aug 24 1995 .bashrc

=> Thc thi lnh ls v gn kt qu cho dir_content


TDE - HCM Thc hnh H iu hnh Linux 142

Lnh test
Dng nh gi mt biu thc iu kin C php: 2 dng
test expression [ expression ] Ton Ton Ton Ton
TDE - HCM

hay

C 4 nhm ton t dng trong expression:


t t t t s nguyn chui k t file logic
Thc hnh H iu hnh Linux 143

Lnh test (tt)


Ton t s nguyn: expression int1 eq int2 int1 ge int2 int1 int1 int1 int1 gt le lt ne int2 int2 int2 int2 ngha = true nu int1 = int2 = true nu int1 int2 = = = = true true true true nu nu nu nu int1 int1 int1 int1 > < int2 int2 int2 int2
144

TDE - HCM

Thc hnh H iu hnh Linux

Lnh test (tt)


Ton t chui: expression str1 = str2 str1 != str2 str -n str z str ngha = true nu str1 = str2 = true nu str1 str2 = true nu str null = true nu str length > 0 = true nu str length = 0

TDE - HCM

Thc hnh H iu hnh Linux

145

Lnh test (tt)


Ton t file: expression d filename f filename r s w x filename filename filename filename ngha = true nu l th mc = true nu l file thng = true nu file c c = true nu kch thc khc 0 = true nu file ghi c = true nu file thc thi c
Thc hnh H iu hnh Linux 146

TDE - HCM

Lnh test (tt)


Ton t logic: expression ngha ! expr = true nu expr = false expr1 -a expr2 = true khi expr1 v expr2 true expr1 -o expr2 =true khi expr1 hay expr2 true

TDE - HCM

Thc hnh H iu hnh Linux

147

Cu trc iu kin
Pht biu if: dng 1
if [ expression ] then commands fi

Pht biu if: dng 2


if [ expression ] then commands else commands fi
TDE - HCM Thc hnh H iu hnh Linux 148

Cu trc iu kin (tt)


Pht biu if: dng 3
if [ expression ] then commands elif [ expression2 ] then commands else commands fi
TDE - HCM Thc hnh H iu hnh Linux 149

Cu trc iu kin (tt)


V d pht biu if:
File hello: Hin th cu hello
if [ $1 = you ] then echo Hi, how are you? else echo Hello $1 fi

Lu :
Phi c khong trng cnh du [, ], = $1: chui k t tham s dng lnh th nht T kha then phi vit xung hng
TDE - HCM Thc hnh H iu hnh Linux 150

Cu trc iu kin (tt)


V d pht biu if: (tt)
File helpme: kim tra v c README.TXT
if [ -r README.TXT ] then less README.TXT elif [ ! -f README.TXT ] then echo Sorry, no help file! else echo Sorry, no read permission! fi
TDE - HCM Thc hnh H iu hnh Linux 151

Cu trc iu kin (tt)


Pht biu case:
case str1 in string1) commands;; string2) commands;; *) commands;; esac Pht biu case trong shell mnh hn C, Pascal ch c th so snh chui vi cc k t wild card.
TDE - HCM Thc hnh H iu hnh Linux 152

Cu trc iu kin (tt)


V d pht biu case:
File readfile: c ni dung mt file
case $3 in first) head -n $2 $1;; last) tail n $2 $1;; *) cat $1;; esac

V d, c 10 dng cui file README.TXT:


$ readfile README.TXT 10 last
TDE - HCM Thc hnh H iu hnh Linux 153

Cu trc lp
Pht biu for: dng 1
for var1 in list1 do commands done list1: danh sch cc gi tr cch nhau bi khong trng
list1 c th l mt bin hoc mt danh sch c nhp trc tip trong cu lnh.

var1: Ln lt nhn cc gi tr trong list1 ti mi ln lp


TDE - HCM Thc hnh H iu hnh Linux 154

Cu trc lp (tt)
Pht biu for: dng 2
for var1 do commands done var1: nhn gi tr t danh sch tham s dng lnh Dng pht biu for ny tng ng vi:
for var1 in $@
TDE - HCM Thc hnh H iu hnh Linux 155

Cu trc lp (tt)
V d pht biu for:
File uppercase: i sang ch hoa ni dung cc file vn bn (tn file nhp t dng lnh)
for file do tr a-z A-Z < $file > $file.caps done

Lnh tr: Chuyn i cc k t (a..z sang A..Z) ca chui nhp t bn phm v in ra mn hnh V d: $ uppercase vb1 vb2 vb3
=> vb1.caps, vb2.caps, vb3.caps
TDE - HCM Thc hnh H iu hnh Linux 156

Cu trc lp (tt)
V d pht biu for: (tt)
File uppercase2: version 2 ca uppercase danh sch file c sn (vb1, vb2, vb3)
for file in vb1 vb2 vb3 do tr a-z A-Z < $file > $file.caps done

=> Dng dng 1 ca pht biu for. Lu khng c du nhy trong danh sch

TDE - HCM

Thc hnh H iu hnh Linux

157

Cu trc lp (tt)
V d pht biu for: (tt)
File uppercase3: version 3 ca uppercase danh sch file l mt bin
list=vb1 vb2 vb3 for file in $list do tr a-z A-Z < $file > $file.caps done

=> Cng dng dng 1 ca pht biu for.

TDE - HCM

Thc hnh H iu hnh Linux

158

Cu trc lp (tt)
Pht biu while:
while expression do commands done expression: biu thc lun l (gi tr true hay false) Vng while lp khi expression = true

Lnh expr: nh gi mt biu thc ton


V d: $ expr 100 / 5 + 1 => In ra 21

Lnh shift: Dch chuyn tham s dng lnh qua tri ($2 => $1, $3 => $2, $4 => $3, )
TDE - HCM Thc hnh H iu hnh Linux 159

Cu trc lp (tt)
V d pht biu while:
File param: In th t v gi tr cc tham s trn dng lnh
count=1 while [ -n $* ] do echo Tham so thu $count = $1 shift count=`expr $count + 1` done Mi khi gi shift, bin $1 s ln lt mang gi tr tham s k tip
TDE - HCM Thc hnh H iu hnh Linux 160

Cu trc lp (tt)
Pht biu until:
until expression do commands done expression: biu thc lun l (gi tr true hay false) Vng until lp khi expression = false Lnh break: thot khi vng lp for, while, until, select
TDE - HCM Thc hnh H iu hnh Linux 161

Cu trc lp (tt)
V d pht biu until:
File param2: version until ca param
count=1 until [ -z $* ] do echo Tham so thu $count = $1 shift count=`expr $count + 1` done expression -z $* tr v true nu danh sch tham s dng lnh rng ( shift ht tham s)
TDE - HCM Thc hnh H iu hnh Linux 162

Lnh shift
Tc dng:
Dch chuyn gi tr hin ti ca cc tham s dng lnh sang tri mt v tr

V d:
$ command par1 par2 par3
=> $1 = par1, $2 = par2, $3 = par3

Sau khi shift:


=> $1 = par2, $2 = par3, $3 = null

Shift nhiu v tr:


shift n: Dch sang tri n v tr
TDE - HCM Thc hnh H iu hnh Linux 163

Lnh shift (tt)


V d: version 4 ca uppercase
$ uppercase4 -i vidu.in -o vidu.out while [ $1 ] do if [ $1 = -i ] then infile=$2 shift 2 elif [ $1 = -o ] then outfile=$2 shift 2 else echo Program $0 does not recognize option $1 break fi done tr a-z A-Z $infile $outfile
TDE - HCM Thc hnh H iu hnh Linux 164

Pht biu select


To h thng menu dng lnh:
select menuitem [in list_of_items] do commands done Du ngoc []: ty chn ca pht biu select list_of_items: bin hoc danh sch cha nhiu hn 1 phn t (menu item) Nu khng ch nh list_of_item, select s dng danh sch tham s dng lnh (nh for)
TDE - HCM Thc hnh H iu hnh Linux 165

Pht biu select (tt)


V d pht biu select:
Hin th 3 menu pick1, pick2, pick3:
select do echo read if [ then fi done menuitem in pick1 pick2 pick3 Ban muon chon muc $menuitem? res $res = y -o $res = Y ] break

Lnh read: c d liu user nhp t bn phm


TDE - HCM Thc hnh H iu hnh Linux 166

nh ngha th tc
Khai bo hm:
function_name () { commands }

Gi hm:
function_name [param1 param2 ] Hm khng hn ch s tham s Tham s hm c th xem nh tham s dng lnh (truy xut bng $1, $2, dng shift, nh vi lnh)

M tr v:
Gi lnh return [n]: n cha gi tr tr v (1 byte)
TDE - HCM Thc hnh H iu hnh Linux 167

nh ngha th tc (tt)
V d s dng hm:
File tinhgiaithua: Chng trnh tnh giai tha
#!/bin/bash # Ham giaithua giaithua () { if [ $1 -gt 1 ] ; then PREV=`expr $1 - 1` giaithua $PREV RESULT=`expr $RESULT \* $1` fi } # Chuong trinh chinh RESULT=1 giaithua $1 echo "Giai thua cua $1 = $RESULT"

Lu : Du nhn (*) phi thay bng \* shell khng hiu lm


TDE - HCM Thc hnh H iu hnh Linux 168

Mt s quy c khc
Mi file chng trnh shell nn bt u vi:
#!/bin/bash
=> Thng bo y l Bash shellscript h thng nhn bit khi thc thi. Ngoi ra cc trnh son tho vn bn nh vi cng h tr t mu ni dung.

Du chm phy (;):

Dng phn cch nhiu lnh trn cng mt dng Gi lnh exit n vi n l m thot continue: b qua lnh cn li v sang bc lp k continue n: tip tc t n vng lp gn nht break n: thot khi n vng lp gn lnh break nht
Thc hnh H iu hnh Linux 169

Thot chng trnh shell: Lnh continue, break:

TDE - HCM

Mt s quy c khc (tt)


Lnh export: Truyn gi tr bin xung cc shell con
$ DISPLAY=10.1.1.12:0.0; export DISPLAY

Lnh sed (stream editor): Hiu chnh d liu u vo, v d:


sed 1,2d vb.txt => xa dng 1 v dng 2 t vb.txt sed /bye/d vb.txt => xa dng c ch bye sed s/bad/good vb.txt => thay t bad thnh good sed -n /hello/p vb.txt => in nhng dng c t hello sed s/^M//g vb.dos > vb.unix => i vn bn DOS -> UNIX
TDE - HCM Thc hnh H iu hnh Linux 170

Mt s quy c khc (tt)


Cu trc && (v):
cmd1 && cmd2 tng ng vi if cmd1 ; then cmd2 ; fi

Cu trc || (hay):
cmd1 || cmd2 tng ng vi if cmd1 ; then : else cmd2 ; fi
TDE - HCM Thc hnh H iu hnh Linux 171

H iu hnh Linux
Phn 5: Lp trnh Linux

Ngn ng C
Lch s:
Pht trin bi Dennis Ritchie ti Bell Laboratories khi xy dng h thng UNIX Cc phin bn UNIX u tin c vit bng Assembly v ngn ng B. C ra i nhm khc phc cc yu im ca B v tr thnh ngn ng thng dng nht.

u im:
Chun ha trn nhiu nn tng, h iu hnh Chng trnh thc thi nhanh
TDE - HCM Thc hnh H iu hnh Linux 173

GNU C Compiler
GNU C Compiler (GCC):
L trnh bin dch C thng dng trn Linux Tng thch vi chun ANSI C

C php tng qut:


gcc [options] [filenames] Cc options s c p dng cho tng file trong filenames.

TDE - HCM

Thc hnh H iu hnh Linux

174

GNU C Compiler (tt)


Lu v options:
> 100 options trong GCC C nhiu options cha t 2 k t tr ln => Khng th nhm nhiu options sau mt du => Mi option phi i vi mt du ring V d: 2 lnh sau c ngha khc nhau:
gcc p g test.c gcc pg test.c
TDE - HCM Thc hnh H iu hnh Linux 175

GNU C Compiler (tt)


Bin dch chng trnh:
gcc test.c => File thc thi tn a.out gcc -o thunghiem test.c => File thc thi tn thunghiem gcc -c test.c => File m i tng tn test.o. Sau lin kt cc file object thnh file thc thi. => Dng option ny khi lin kt nhiu file
TDE - HCM Thc hnh H iu hnh Linux 176

GNU C Compiler (tt)


Option bin dch ti u:
Mc nh: Chng trnh dch nhanh v d debug. -O v -O2: Chng trnh nh hn v chy nhanh hn.

Option debug v profile:


-g: To thng tin debug trnh GNU debugger (gdb) s dng. -pg: To profile trnh gprof hin th thng tin timing khi chy chng trnh.
TDE - HCM Thc hnh H iu hnh Linux 177

GNU Debugger (gdb)


C php chung:
gdb [filename] => Bt u debug mt file chng trnh Trc , file chng trnh cn c bin dch vi ty chn -g.

Cc lnh c bn trong gdb:


file: np file chng trnh cn debug kill: dng debug chng trnh list: xem cc phn source code
TDE - HCM Thc hnh H iu hnh Linux 178

GNU Debugger (gdb)


Cc lnh c bn trong gdb: (tt)
break: t im dng (breakpoint) trong code run: thc thi chng trnh cn debug next: chy 1 dng code, khng chy vo trong cc hm. step: chy 1 dng code, chy vo trong cc hm trn dng . watch: hin th gi tr ca bin khi b thay i quit: thot khi gdb
TDE - HCM Thc hnh H iu hnh Linux 179

V d chng trnh C
Son tho file test.c:
$ cat > test.c #include <stdio.h> int main() { int n = 10; n += 2; printf(n = %i\n, n); return 0; } Ctrl-Z Enter
TDE - HCM Thc hnh H iu hnh Linux 180

V d chng trnh C (tt)


Dch chng trnh test.c:
$ gcc -g -o test test.c => file chng trnh test nm trong cng mt th mc vi test.c Thm ty chn -g c th debug chng trnh

Thc thi chng trnh test:


$ ./test n = 12
TDE - HCM Thc hnh H iu hnh Linux 181

V d chng trnh C (tt)


Debug chng trnh test:
$ gdb test GNU gdb Red Hat Linux () Copyright 2003 Free Software Foundation, Inc. (gdb) list 1 #include <stdio.h> 2 int main() { 3 int n = 10; 4 n += 2; 5 printf(n = %i\n, n); 6 return 0; 7 }
TDE - HCM Thc hnh H iu hnh Linux 182

V d chng trnh C (tt)


Debug chng trnh test: (tt)
(gdb) break 4
Breakpoint 1 at 0x804833f: test.c, line 4

(gdb) run
Starting program: /home/tuan/test Breakpoint 1, main () at test.c:4 4 n += 2;

(gdb) watch n
Hardware watchpoint 2: n

TDE - HCM

Thc hnh H iu hnh Linux

183

V d chng trnh C (tt)


Debug chng trnh test: (tt)
(gdb) next
Hardware watchpoint 2: n Old value = 10 New value = 12 main () at test.c:5 5 printf(n = %i\n, n);

(gdb) next
n = 12 7 return 0;

(gdb) kill (gdb) quit


TDE - HCM Thc hnh H iu hnh Linux 184

Mt s tin ch lp trnh C
xxgdb:
Phin bn giao din ha (X Window) ca gdb

indent:
nh dng m ngun theo quy tt thng nht

gprof:
Cho bit mi hm c gi bao nhiu ln v phn trm thi gian thc thi ca hm. Cn bin dch chng trnh vi ty chn -pg

p2c:
Chuyn m ngun Pascal thnh m ngun C
TDE - HCM Thc hnh H iu hnh Linux 185

Source Code Control


Mc ch:
Qun l cc phin bn source code ca phn mm. Gip tm kim, cp nht, theo di cc phin bn khc nhau ca mt file source d dng.

Tin ch make:
T ng bin dch, lin kt cc file source trong mt project phn mm. Th hin mi quan h ph thuc gia cc file source.
TDE - HCM Thc hnh H iu hnh Linux 186

Source Code Control (tt)


Tin ch make: (tt)
Ch cp nht cc file c thay i sau ln bin dch sau cng. S dng mt file m t (Makefile) cha cc lut cn thc hin khi bin dch phn mm. Mi lut s sinh ra cc lnh cn thit cho qu trnh bin dch. Cc lnh c thc thi bi shell.

TDE - HCM

Thc hnh H iu hnh Linux

187

Source Code Control (tt)


V d mt Makefile:
Project someonehappy bao gm cc file sau:
2 3 1 1 file file file file source: main.c, dothis.c header: yes.h, no.h, maybe.h th vin: /usr/happy/lib/likeatree.a assembly: itquick.s

=> file chng trnh someonehappy

TDE - HCM

Thc hnh H iu hnh Linux

188

Source Code Control (tt)


V d mt Makefile: (tt)
Mi dung Makefile:
someonehappy: main.o dothis.o /usr/happy/lib/likeatree.a gcc o someonehappy main.o dothis.o itquick.o /usr/happy/lib/likeatree.a main.o: main.c gcc -c main.c dothis.o: dothis.c gcc -c dothis.c itquick.o: itquick.s as -o itquick.o itquick.s
TDE - HCM Thc hnh H iu hnh Linux 189

Source Code Control (tt)


V d mt Makefile: (tt)
Mi dung Makefile: (tt)
fresh: rm *.o maybe.h: yes.h no.h cp yes.h no.h /user/sue/

Thc thi make:


$ make someonehappy $ make hoc

TDE - HCM

Thc hnh H iu hnh Linux

190

Source Code Control (tt)


nh dng ca Makefile
Bao gm nhiu mc, mi mc c dng:
<target>: [dependents] <command list> => Nu file <target> c hn so vi cc file [dependents] th make s thc thi <command list>. [dependents] l danh sch cc file Cc lnh trong <command list> cch nhau bi du chm phy (;) v khng c k t xung dng Trc <command list> phi l du cch TAB
TDE - HCM Thc hnh H iu hnh Linux 191

Source Code Control (tt)


Forcing recompiles:
Khng mun make bin dch li mi khi copy file t ni ny qua ni khc => S dng tin ch touch hay gi make vi ty chn -t

Kim tra Makefile:


Gi make vi ty chn -n => make s in ra cc thng bo nhng khng bin dch tht chng trnh
TDE - HCM Thc hnh H iu hnh Linux 192

Source Code Control (tt)


Macro:
Tng t nh cc bin trong lp trnh shell V d:
LIBFILES=/usr/happy/lib/likeatree.a objects = main.o dothis.o CC = /usr/bin/cc 1version=This is one version of someonehappy OPTIONS =

Makefile cng coi cc bin mi trng shell nh macro.


TDE - HCM Thc hnh H iu hnh Linux 193

Source Code Control (tt)


Macro: (tt)
Cc macro quan trng trong Makefile:
CC: Trnh C Compiler CFLAGS: Cc c bin dch cho CC

Macro c th tham kho cc macro khc:


LIB_DIR = /usr/happy/lib LIB_FILES = ${LIB_DIR}/likeatree.a OBJS = main.o dothis.o itquick.o sohappy: ${OBJS} ${LIB_FILES} ${CC} -o sohappy ${OBJS} ${LIB_FILES}
TDE - HCM Thc hnh H iu hnh Linux 194

Source Code Control (tt)


Lut hu t:
p dng chung mt mc ca Makefile cho cc target hay dependent c phn m rng cho trc => Khng cn to cho mi file mt mc ring trong Makefile. Mt s lut hu t mc nh ca make:
.SUFFIXES: .o .c .s .c.o: $(CC) $(CFLAGS) c $< .s.o: $(AS) $(ASFLAGS) o $@ $<
TDE - HCM Thc hnh H iu hnh Linux 195

Source Code Control (tt)


Lut hu t:
Mt s lut hu t mc nh ca make: (tt)
.SUFFIXES: .o .c .s => Cc hu t cn p dng lut .c.o: $(CC) $(CFLAGS) c $< => Dch cc file *.c nu cc file *.o ca chng cha c cp nht $< i din cho mi dependent *.c (tng t $?) $@ i din cho mi target *.o
TDE - HCM Thc hnh H iu hnh Linux 196

Das könnte Ihnen auch gefallen