SlideShare une entreprise Scribd logo
1  sur  64
Télécharger pour lire hors ligne
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Muïc luïc:
PHAÀN 1:          UNIX CÔ SÔÛ

Baøi 1. Khôûi ñoäng UNIX
1.1      Baét ñaàu phieân laøm vieäc
1.2      Keát thuùc phieân laøm vieäc
1.3      Caùch duøng leänh cuûa UNIX

Baøi 2. Laøm vieäc vôùi file.
2.1      Toå chöùc file
2.2      Di chuyeån giöõa caùc thö muïc
2.3      Caùc thao taùc cô sôû vôùi caùc thö muïc
2.4      Caùc thao taùc cô sôû vôùi file thöôøng

Baøi 3. Baûo veä caùc file cuûa ngöôøi söû duïng
3.1      Moâ taû ngöôøi söû duïng
3.2      Moâ taû nhoùm ngöôøi söû duïng
3.3      Baûo veä caùc file vaø caùc thö muïc

Baøi 4. Sao, chuyeån, lieân keát vaø tìm kieám file
4.1      Sao cheùp file
4.2      Chuyeån vaø ñoåi teân file
4.3      Taïo lieân keát vôùi file
4.4      Tìm kieám file

Baøi 5. Thoâng tin giöõa nhöõng ngöôøi söû duïng
5.1      Thoâng tin baèng leänh mail
5.2      Thoâng tin baèng leänh write

Baøi 6. Söû duïng chöông trình soaïn thaûo vi
6.1      Khôûi ñoäng vi
6.2      Soaïn thaûo vaên baûn

Baøi 7. Shell script
7.1      Quaûn lyù tieán trình
7.2      Laäp caùch thöùc cho shell script
7.3      Caùc shell UNIX

Baøi 8. Ñoåi höôùng (redirection)
8.1      Vaøo/ra chuan
8.2      Chuyeån ñoåi döõ lieäu giöõa caùc tieán trình


                                                      1
Copyright(c) by Galaxy CD – http://www.galaxycd.com


8.3     Ñoåi höôùng keùp ñaàu ra chuaån

Baøi 9. Cô cheá thay theá cuûa Shell
9.1      Truyeàn tham soá
9.2      Caùc bieán Shell
9.3      Caùc kí töï ñaëc bieät
9.4      Laáy keát quaû cuûa moät leänh
9.5      Caùc qui taéc thay theá cuûa Shell

Baøi 10. Moâi tröôøng cuûa Shell
10.1 Moâi tröôøng
10.2 Caùc bieán ñònh nghóa tröôùc
10.3 Caùc bieán chung

Baøi 11. Laäp trình möùc cô sôû döôùi UNIX
11.1 Caùc pheùp thöû trong Shell
11.2 Laäp trình moät caáu truùc coù ñieàu kieän
11.3 Laäp trình moät chu trình

Baøi 12. Tín hieäu vaø ñoàng boä
12.1 Quaûn lyù caùc tín hieäu
12.2 Quaûn lyù caùc tieán trình
12.3 Ñeä qui

PHAÀN 2          LAÄP TRÌNH C DÖÔÙI UNIX

Baøi 1. Giôùi thieäu chung
1.1      Caùc lôøi goïi heä thoáng
1.2      Chuû thöïc vaø chuû thöïc quyeàn cuûa tieán trình
1.3      Ñònh nghóa caùc tham bieán chöông trình
1.4      Moät soá ñònh nghóa khaùc

Baøi 2. Quaûn lyù tieán trình
2.1      Nhaän bieát tieán trình
2.2      Nhaän bieát chuû tieán trình
2.3      Thay ñoåi chuû vaø nhoùm chuû
2.4      Taïo moät tieán trình
2.5      Caùc haøm goïi moät tieán trình thay theá
2.6      Ñoàng boä tieán trình
2.7      Möùc öu tieân cuûa tieán trình
2.8      Nhoùm caùc tieán trình


                                                     2
Copyright(c) by Galaxy CD – http://www.galaxycd.com



Baøi 3. Quaûn lyù file
3.1      Môû moät file
3.2      Taïo moät file
3.3      Ñoùng file
3.4      Ñaët maët naï caùc quyeàn thaâm nhaäp file
3.5      Ñoïc file
3.6      Ghi file
3.7      Di chuyeån con troû file
3.8      Caáu truùc moät inode
3.9      Taïo moät inode
3.10 Thay ñoåi quyeàn thaâm nhaäp
3.11 Thay ñoåi chuû sôû höõu hoaëc nhoùm
3.12 Thay ñoåi thö muïc laøm vieäc




                                                  3
Copyright(c) by Galaxy CD – http://www.galaxycd.com


                             PHAÀN 1: UNIX CÔ SÔÛ
Baøi 1. Khôûi ñoäng UNIX

Noäi dung: Laøm quen vôùi heä ñieàu haønh UNIX. Baét ñaàu, keát thuùc phieân laøm vieäc, chaïy
           moät soá leänh ñaëc tröng.

1.1 Baét ñaàu phieân laøm vieäc:
Baät coâng taéc nguoàn cuûa terminal (trong heä thoáng cuûa NLC laø Xterm sau khi duøng
Exceed keát noái vôùi UNIX server), khoaûng moät giaây sau treân maøn hình hieän doøng thoâng
baùo:
          Login:
Haõy nhaäp vaøo teân (user name) khi keát thuùc baèng phím Enter. Neáu ngöôøi söû duïng coù
duøng maät khaåu (passwor), treân maøn hình seõ hieän doøng:
          Password:
Haõy vaøo maät khaåu cuûa mình vaø keát thuùc baèng phím Enter.
Neáu teân (vaø maät khaåu neáu coù) ñöôïc vaøo ñuùng, terminal ñoù seõ ñöôïc noái vôùi maùy chuû vaø
treân maøn hình seõ hieän kyù töï:
          $
ñoù laø daáu nhaéc cuûa Shell.
Maät khaåu ñaûm baûo an toaøn cho moãi phieân laøm vieäc. Ta coù theå thay ñoåi maät khaåu baèng
leänh passwd. Maät khaåu phaûi daøi ít nhaát 6 kyù töï, ít nhaát phaûi coù 2 kyù töï alphabet, phaûi
khaùc vôùi teân (user name) ít nhaát 3 kyù töï, daøi toái ña 13 kyù töï.

1.2 Keát thuùc phieân laøm vieäc:
AÁn CTRL + D (giöõ phím CTRL vaø goõ phím D) hoaëc goõ leänh
          $exit
ñeå keát thuùc phieân laøm vieäc.

1.4 Caùch duøng leänh cuûa UNIX:
    - Cuù phaùp cô baûn ñeå chaïy moät leänh cuûa UNIX nhö sau:
    $teânleänh [-tuyø choïn][ñoái soá 1]…[ñoái soá n]
Thí duï:
wc laø leänh ñeám vaø hieån thò soá doøng, töø vaø kyù töï cuûa moät file. Ta coù theå chaïy leänh wc
nhö sau
         $wc /etc/passwd
         32     37      1139 etc/passwd

        $wc     -l /etc/passwd
        32      etc/passwd


                                                 4
Copyright(c) by Galaxy CD – http://www.galaxycd.com



        $wc      -ld /etc/passwd /etc/group
        32       1139 etc/passwd
        15       337     etc/group
        47       1476 total

    - Caùc thoâng baùo loãi khi goïi leänh:
    Neáu leänh khoâng toàn taïi hoaëc khoâng tìm thaáy:
        $data
        data not found
    Neáu cuù phaùp cuûa leänh bò goõ sai:
        $wc -m            /etc/group
        usage: wc         [-clw][name…]

Baøi taäp:
Chuù yù: Kyù hieäu <CR> töôïng tröng cho vieäc goõ phím Enter.
    1.        Haõy baét ñaàu phieân laøm vieäc vôùi teân (username) cuûa baïn.
    2.        Ñôïi khi daáu nhaéc cuûa heä thoáng xuaát hieän (daáu $), goõ vaøo
                  date<CR>
    3.        Gaùn maät khaåu cho teân:
                  passwd<CR>
    4.        Lieät keâ teân nhöõng ngöôøi ñang söû duïng heä
                  who<CR>
    5.        Xem ai laø ngöôøi ñang laøm vieäc taïi terminal:
                  who am I<CR>
                  whoami<CR>
    6.        Xem teân terminal maø ta ñang laøm vieäc treân ñoù:
                  tty<CR>
    7.        Hieån thò caùc thoâng baùo leân maøn hình:
                  echo “Xin chao” <CR>
                  echo “Chao” <CR>
                  echo “Dau nhac ket thuc boi $ xuat hien sau Chao” <CR>
                  echo “Hom nay la ngay:”;date<CR>
                  echo “Hai lenh tren 1 dong cach nhau boi dau ;” <CR>
    8.        Duøng leänh cal (lòch):
                  cal        01      1900<CR>
                  cal        01<CR>
                  cal        1900<CR>
                  cal        1900 | more<CR>
    9.        Moät vaøi leänh khaùc:
                  logname<CR>


                                                   5
Copyright(c) by Galaxy CD – http://www.galaxycd.com


          uname<CR>
          who | wc<CR>
10.   Keát thuùc phieân laøm vieäc:
          Ctrl     D (giöõ phím Ctrl vaø goõ D) hoaëc exit<CR>




                                         6
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 2. Laøm vieäc vôùi file

Noäi dung: Caùc khaùi nieäm cô baûn veà file cuûa UNIX, toå chöùc cuûa caùc file treân ñóa, caùc
thao taùc vôùi file.

2.1 Toå chöùc file:
2.1.1 Caùc kieåu file
UNIX coù 3 kieåu file:
-File bình thöôøng (ordinary file): laø moät taäp hôïp thoâng tin (ASCII text hoaëc binary).
-File thö muïc (directory file): chöùa danh saùch caùc teâncoù theå truy nhaäp tôùi thí duï nhö
caùc file bình thöôøng, caùc file ñaëc bieät hoaëc caùc thö muïc con.
-File ñaëc bieät (special file): laø caùc file lieân quan tôùi caùc thieát bò ngoaïi vi cöùng vaø/hoaëc
cô cheá truyeàn tin.
Thí duï:
         Baøn phím laø moät file ñaàu vaøo(input file).
         Maøn hình laø moät file ñaàu ra (output file).
         Maùy in laø moät file ñaàu ra.

2.1.2 Toå chöùc cuûa caùc file
Caùc file cuûa UNIX ñöôïc toå chöùc theo daïng caây (tree). Thö muïc goác (root) cuûa caây
ñöôïc bieåu dieãn baèng kyù töï /.
Caáu truùc caây cô sôû cuûa heä UNIX ñöôïc boá trí nhö sau:
Kyù hieäu file bình thöôøng

Kyù hieäu file thö muïc

Kyù hieäu file ñaëc bieät
                                                      /


                    unix       bin          etc           dev           users       usr




                                                                user1           user2




                              Hình 1: Caáu truùc caây cô sôû cuûa UNIX

2.2 Di chuyeån giöõa caùc thö muïc:
Ñeå di chuyeån giöõa caùc thö muïc trong caây cuûa UNIX, ta duøng 2 leänh sau ñaây:


                                                  7
Copyright(c) by Galaxy CD – http://www.galaxycd.com


         cd      chuyeån ñeán thö muïc caàn ñeán (change directory)
         pwd hieån thò teân thö muïc ñang laøm vieäc (print working directory)
Taïi thôøi ñieåm baét ñaàu phieân laøm vieäc, ta ôû trong thö muïc tieáp nhaän (HOME directory).
Muoán xem teân thö muïc tieáp nhaän naøy, ta duøng leänh pwd.
Thí duï: user1 coù thö muïc tieáp nhaän laø /users/user1
         $pwd
         /users/user1

Ñeå di chuyeån giöõa caùc thö muïc ta duøng leänh cd vôùi teân thö muïc caàn chuyeån ñeán.
        $cd     /usr/bin
        $pwd
        /usr/bin
        $cd ..
        $pwd
        /usr

Ñeå veà thö muïc tieáp nhaän khi ta ñang ôû baát kyø ñaâu, goõ:
         $cd
         $pwd
         /users/user1

2.3 Caùc thao taùc cô sôû vôùi thö muïc:
2.3.1 Xem noäi dung thö muïc:
     - Xem noäi dung thö muïc hieän ñang laøm vieäc:
                   $ls
     - Xem noäi dung thö muïc khaùc, chaúng haïn thö muïc /bin:
                   $ls     /bin
     - Xem theâm thoâng tin cuûa caùc file trong thö muïc:
                   $ls     -l
         hoaëc $ll
     - Xem teân caùc file trong thö muïc theo coät:
                   $lc
Khi duøng leänh ls –l ta coù theå phaân bieät caùc kieåu file baèng caùch xem kyù töï ñaàu cuûa doøng
hieån thò, neáu laø:
                   d              : file thö muïc.
                   -              : file bình thöôøng
                   c hoaëc b      : file ñaëc bieät
2.3.2 Taïo thö muïc:
Ñeå taïo moät thö muïc môùi, ta duøng leänh mkdir (make directory):
         $mkdir            index
         $cd       index


                                                    8
Copyright(c) by Galaxy CD – http://www.galaxycd.com


         $ls     -a
         .
         ..
Leänh mkdir taïo moät thö muïc vôùi 2 ñaàu vaøo (entry)
    - baûn thaân thö muïc coù teân ñaõ cho.
    - thö muïc . lieân heä vôùi thö muïc ñöôïc taïo ôû treân
    - thö muïc . . lieân heä vôí thö muïc cha.
2.3.3 Xoùa thö muïc:
Ñeå xoaù moät thö muïc ta duøng leänh rmdir (remove directory):
         $rmdir          index
Neáu muoán xoaù thö muïc khoâng roãng, phaûi duøng leänh rm vôùi tuyø choïn r
         $rm -ri         thumuc

2.4 Caùc thao taùc cô sôû vôùi file thöôøng:
2.4.1 Nhaän bieát moät file thöôøng:
Leänh file phaân tích noät dung cuûa moät file vaø hieån thò tính chaát cuûa thoâng tin chöùa trong
file:
        $file /etc/passwd
        /etc/passwd: ascii text

         $file /bin/ls
         /bin/ls: 680x0 executable 32 bits page aligned striped
2.4.2 Xem noäi dung moät file thöôøng ASCII:
Coù theå duøng moät trong caùc leänh sau:
         cat                       duøng ñeå xem noäi dung caùc file nhoû.
         pg hoaëc more             xem noäi dung caùc file lôùn theo trang.

        $cat teân file
        $pg      teân file
        $more teân file
2.4.3 Taïo moät file thöôøng ASCII
Taïi Shell cuûa UNIX ta coù theå deã daøng taïo moät file thöôøng ASCII text baèng caùch duøng
leänh cat
        $cat >text_file
        abcdef
        123456
        <Ctrl + D>
        $




                                                  9
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    -   Kyù töï ‘>’ ñoåi höôùng, thay vì ñeán ñaàu ra chuaån (standard output) ‘ ‘ ñeán file
        ñöôïc quy ñònh ngay sau ‘>’. ÔÛ ñaây caùc kyù töï goõ vaøo ñöôïc ghi vaøo file
        ‘text_file’.
    -   Leänh cat, neáu khoâng coù ñoái soá (argument), seõ coi baøn phím laø ñaàu vaøo chuaån.
    -   Goõ <Ctrl + D> taïi doøng troáng cuoái cuøng keát thuùc vieäc vaøo soá lieäu.

       <                                                   (1) >
Stdin KEYBOARD                         cat                 FILE stdout




                                                           CONSOLE          stderr
                                                                  2>
                              Hình 2 : ñoåi höôùng ñaàu vaøo/ra chuaån

Caùch vieát teân file khi taïo file:
     - ñoä daøi
          + teân file cuûa UNIX sys V daøi toái ña 14 kyù töï
          + teân file cuûa BERKELEY, baét ñaàu töø version BSD 4.2. coù theå daøi ñeán 256 kyù
          töï.
     - khoâng coù söï haïn cheá duøng kyù töï naøo khi vieát teân file, song ta caàn chuù yù vaøi
          ñieåm sau:
          + khoâng duøng caùc kyù töï ñaëc bieät (tröø daáu chaám ‘.’ hoaëc daáu gaïch döôùi ‘_’) vì
          phaàn lôùn caùc kyù töï ñoù ñöôïc duøng trong cuù phaùp cuûa leänh Shell.
          + file coù teân baét ñaàu baèng daáu chaám ‘.’ laø file aån (hidden).
          + kyù töï vieát thöôøng khaùc vôùi vieát hoa.
Vieát teân file baèng caùch duøng caùc metacharacter (? Vaø *)
     - kyù töï ‘*’ thay theá moät xaâu kyù töï
     - kyù töï ‘?’ thay theá moät kyù töï
Thí duï:
          $ll       /bin/c*
          $ll       /bin/c?
2.4.4 Xoaù moät file thöôøng:
Leänh : rm
Coù theå duøng leänh rm vôùi caùc tuyø choïn sau:
          -i        coù hoûi ñaùp ñeå khaúng ñònh
          -f        khoâng coù hoûi ñaùp. Tuyø choïn naøy raát nguy hieåm, chæ nhöõng ngöôøi söû duïng
coù kinh nghieäm vaø caån thaän môùi neân duøng.

        $rm     text_file
        $rm     -i      text_file


                                                 10
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi taäp:
    1. Xem teân thö muïc ñang laøm vieäc:
                 pwd<CR>
    2. Xem noäi dung cuûa thö muïc ñang laøm vieäc:
                 ls –l<CR>
    3. Taïo file vaên baûn tintin:
                 cat > tintin<CR>
                 blabla<CR>
                 BLABLA<CR>
                 end<CR>
                 CTRL + D (giöõ phím Ctrl vaø goõ phím D)
    4. Xem noäi dung file tintin:
                 cat tintin<CR>
    5. Xem noäi dung caùc thö muïc /bin          /usr/bin        /dev
                 ll /bin<CR> hoaëc
                 ls -C /bin hoaëc ll /bin | pg
    6. Taïo 2 thö muïc d1 vaø d2
                 mkdir d1 d2<CR>
    7. Chuyeån thö muïc laøm vieäc ñeán d1
    8. Taïo moät file trong thö muïc d1
    9. Trôû veà thö muïc tieáp nhaän (HOME directory)
                 cd<CR>
    10. Xem noäi dung thö muïc ñang laøm vieäc:
                 ls      -l hoaëc       ll
                 ls
                 ll      -R (xem noäi dung caû caùc thö muïc con)
                 lc
    11. Xoaù thö muïc d1:
                 rm      d1/*
                 rmdir d1
         Hoaëc
                 rm      -ri      d1




                                              11
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 3. Baûo veä caùc file cuûa ngöôøi söû duïng:

Noäi dung : moâ taû cô cheá baûo veä file cuûa UNIX : ngöôøi söû duïng, nhoùm ngöôøi söû duïng,
            caùc quyeàn thaâm nhaäp file

3.1 Moâ taû ngöôøi söû duïng:
3.1.1 Khaùi nieäm :
Moät ngöôøi söû duïng ñöôïc moâ taû baèng caùc thoâng tin sau:
    - teân
    - [maät khaåu (neáu coù]
    - soá nhaän daïng (uid : user identify number)
    - soá cuûa nhoùm (gid : group identify number)
    - [chuù thích]
    - thö muïc tieáp nhaän (HOME directory)
    - [teân chöông trình cho chaïy luùc baét ñaàu teân laøm vieäc]
Caùc thoâng tin treân ñöôïc chöùa trong file /etc/passwd
3.1.2 Leänh defuser:
Leänh naøy ôû trong danh muïc /etc, noù cho pheùp:
    - hieån thò danh saùch nhöõng ngöôøi söû duïng.
    - theâm ngöôøi söû duïng môùi (chæ nhöõng ngöôøi quaûn trò heä thoáng coù quyeàn)

    $cat         /etc/passwd | pg
    root : RKgSspHwm.PB.:0:3:0000-Admin000,,,:/:
    date::18:1::/:/bin/date
    tty::19:1::/:/bin/tty
    user1::3000:300::/users/user1:
    user2::3001:300::/users/user2:

    $/etc/defuser | pg
    USER                 UID               GID              HOMEDIR                   SHELL
    root                 0                 3                /
    daemon               1                 12               /
    bin                  2                 2                /bin
    sys                  3                 3                /usr
    adm                  4                 4                /usr/adm
    date                 18                1                /                         /bin/date
    tty                  19                1                /                         /bin/tty
    sync                 20                1                /                         /bin/sync
    securadm             11                11               /etc/secure/bin
    lp                   71                2                /usr/spool/lp
    user1                3000              300              /users/user1              /bin/ksh


                                                  12
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    user2               3001            300              /users/user2            /bin/ksh

3.2 Moâ taû nhoùm ngöôøi söû duïng
3.2.1 Khaùi nieäm :
Moät nhoùm ngöôøi söû duïng laø taäp hôïp cuûa moät soá ngöôøi söû duïng coù theå duøng chung caùc
file cuûa nhau.
Moät nhoùm ngöôøi söû duïng ñöôïc moâ taû baèng caùc thoâng tin sau:
     - teân cuûa nhoùm
     - [maät khaåu]
     - soá cuûa nhoùm (gid : group identify number)
     - [danh saùch nhöõng ngöôøi khaùch (guest)]
Caùc thoâng tin treân ñöôïc chöùa trong file /etc/group
3.2.2 Leänh defgrp:
Leänh naøy ôû trong thö muïc /etc, noù cho pheùp:
     - hieån thò danh saùch caùc nhoùm ngöôøi söû duïng.
     - theâm nhoùm môùi (chæ ngöôøi quaûn trò heä thoáng môùi coù quyeàn).

    $cat        /etc/group
    public :: 100 : invite
    animator :: 200 :
    stagiaires :: 300 :

    $/etc/defgrp
    GRP                 GID             USERS
    root                0               root
    other               1               date
                                        sync
                                        shut
    bin                 2               root
                                        bin
                                        daemon
                                        lp
    sys                 3               root
                                        bin
                                        sys
                                        adm
    adm                 4               root
                                        adm
                                        daemon
    uucp                5               uucp
                                        daemon


                                               13
Copyright(c) by Galaxy CD – http://www.galaxycd.com


                                        nuucp
    mail                6               root
                                        …

3.3 Baûo veä caùc file vaø caùc thö muïc
3.3.1 Caùc quyeàn thaâm nhaäp file:
Khi file ñöôïc taïo laäp, caùc thoâng tin sau ñaây ñoàng thôøi ñöôïc ghi laïi:
     - uid cuûa ngöôøi taïo file
     - gid cuûa ngöôøi taïo file
     - caùc quyeàn thaâm nhaäp file
     …
File ñöôïc baûo veä bôûi moät taäp hôïpc caùc bit ñònh nghóa quyeàn thaâm nhaäp:
         r w x             r w x             r w x
         suid              sgid
         owner             group             other
Trong ñoù:
         r                 quyeàn ñoïc
         w                 quyeàn ghi
         x                 quyeàn chaïy (executing)
         suid              set user-id
         sgid              set group-id
Ñoái vôùi thö muïc:
         r                 quyeàn ñoïc noäi dung thö muïc
         w                 quyeàn taïo vaø xoaù file trong thö muïc
         x                 quyeàn qua laïi (crossing) thö muïc
Ghi chuù: caùc quyeàn vôùi thö muïc chæ coù hieäu löïc taïi moät möùc nhaát ñònh, thö muïc con coù
theå ñöôïc baûo veä trong khi thö muïc cha thì khoâng.
3.3.2 Leänh ls -l
Leänh naøy lieät keâ danh saùch caùc file vaø caùc thuoäc tính cuûa chuùng trong moät thö muïc,
qua ñoù ta coù theå phaùt hieän loaïi file, caùch baûo veä, ngöôøi sôû höõu, vaø kích thöôùc cuûa
chuùng…
Thí duï:
Caùc file thöôøng (ordinary files):
         $ls     -l        /bin
         -rwxrwxr-x        1        bin      bin      16336 Mar 8              1988 cat
         -rwxrwxr-x        3        root bin          16124 Mar 8              1988 cp
         -rwxrwxr-x        1        bin      bin      18760 Mar 8              1988 cat
         -rwxrwxr-x        1        bin      bin      13320 Mar 8              1988 echo
         -rwxrwxr-x        2        bin      bin      33896 Mar 8              1988 ed
         -rwxrwxr-x        1        bin      bin      28928 Mar 8              1988 file
         -rwxrwxr-x        3        root bin          16124 Mar 8              1988 ln


                                                14
Copyright(c) by Galaxy CD – http://www.galaxycd.com


       -rwxrwxr-x         8         bin     bin       60152 Mar 8              1988 ls
       -rwxr-sr-x         1         bin     mail 63264 April 2                 1988 mail
       -rwxrwxr-x         1         bin     bin       15276 Mar 8              1988 mesg
       -rwxr-xr-x         1         root bin          13180 Mar 8              1988 mkdir
       …
Trong ñoù:
       Coät 1 : loaïi file vaø quyeàn thaâm nhaäp (-rwxrwxr-x, rwxr-xr-x…)
       Daáu tröø ‘-‘ ôû ñaàu coù nghóa file laø file thöôøng (khoâng phaûi thö muïc).
       Daáu tröø ôû trong daõy bit coù nghóa laø khoâng coù quyeàn töông öùng bit ñoù.
       Ñeå tieát kieäm choã, ngöôøi ta ñaët bit s vaøo cuøng moät nôi vôùi bit x vaø kyù hieäu:
       -         s neáu x toàn taïi
       -         S neáu X khoâng toàn taïi.
       (bit s : set uid hoaëc set gid khi chaïy file)
       Coät 2 : soá lieân keát (link number)
       Coät 3 : teân ngöôøi sôû höõu file (owner)
       Coät 4 : teân nhoùm sôû höõu file (group)
       Coät 5 : kích thöôùc file.
       Coät 6,7,8 : ngaøy söûa ñoåi gaàn nhaát
       Coät 9 : teân file.

Caùc file ñaëc bieät (Special files):
          $ll      /dev
          crw-------       1       lp       bin             8.97 May 6               1988 lp1
          crw-rw-rw-       2       root sys                 3,2      Apr     3       09:08 null
          brw-r-----       3       root sys                 0,96 Apr         3       08:54 pd300
          .
          .
          crw-rw-rw-       4       root sys                 4,012 May 6              1988 rflop
          .
          .
          crw--w--w-       2       root other               1,17 Mar 2               07:57 tty11
Trong ñoù:
          Coät 1: Kyù töï ñaàu tieân laø c hoaëc b coù nghóa laø file ñöôïc ñoïc hoaëc ghi theo töøng
kyù töï (c) hoaëc ghi theo töøng khoái (b).
          Coät 5: Bieåu dieãn majo vaø minor cuûa thieát bò (major: loaïi thieát bò, minor: ñòa chæ
cuûa thieát bò)

Caùc file thö muïc (directory files):
         $ll    /users
         drwxr-xr-x      2       user1 stagiair              240      Mar      31      10:16 user1



                                                   15
Copyright(c) by Galaxy CD – http://www.galaxycd.com


         drwxr-xr-x        2        user2 stagiair                32      Mar 31     11:16 user1
         drwxr-xr-x        2        user3 stagiair                24      Mar 31     10:16 user1
         drwxr-xr-x        2        user4 stagiair                32      Mar 31     11:16 user1
trong ñoù:
         Coät 1: Kyù töï ñaàu tieân d coù nghóa laø file thö muïc.
         Coät 2: Soá caùc thö muïc con
3.3.3 Thay ñoåi quyeàn thaâm nhaäp file:
Leänh chmod cho pheùp thay ñoåi quyeàn thaâm nhaäp caùc file vaø thö muïc. Coù theå chaïy leänh
theo 2 caùch:
    - cho thoâng soá tuyeät ñoái:
                 chmod              mode teân_file
         trong ñoù thoâng soá mode laø moät soá cô soá 8 (octal)
                 r w x              r - x               r - -
                 1 1 1              1 0 1               1 0 0
                    7                   5                   4
                 $chmod             754        teân_file
    - duøng caùc kyù hieäu töôïng tröng:
                 chmod              who [operation]               [right]     filename
         trong ñoù:
                 who :              u          coù nghóa          user
                                    g                             group
                                    o                             other
                                    a                             all
                 operation:
                                    +          theâm quyeàn
                                    -          bôùt quyeàn
                                    =          gaùn giaù trò khaùc
                 right:
                                    r          reading
                                    w          writing
                                    x          execution
                                    s          ñaët suid hoaëc guid
Thí duï:
         $chmod            g-w, o = r          toto
3.3.4 Ñaët quyeàn thaâm nhaäp ngaàm ñònh:
Caùc quyeàn thaâm nhaäp ñöôïc gaùn baèng maët naï quyeàn thaâm nhaäp cuûa töøng ngöôøi söû duïng.
Leänh umask cho pheùp ta ñaët maët naï naøy. Cuù phaùp cuûa leänh nhö sau:
         umask nnn
trong ñoù: nnn laø soá buø 7 cuûa giaù trò caùc quyeàn thaâm nhaäp.
Thí duï:
         $umask            177


                                               16
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        $>       titi
        $ll      titi
        -rw-------      1        user1 other 0          Mar     11    10:11 titi
        $umask          333
        $>toto
        $ll      toto
        -r--r--r--      1        user1 other 0          Mar     11    20:11 toto
3.3.5 Thay ñoåi ngöôøi hoaëc nhoùm sôû höõu file:
Leänh chown cho pheùp thay ñoåi ngöôøi sôû höõu.
Leänh chgrp cho pheùp thay ñoåi nhoùm sôû höõu.
        $echo Hello >file1
        $chmod 700 file1
        $ls -l file1
        -rwx------      1        user1 stagiair         6       Apr   5      14:06 file1
        $cat file1
        Hello

        $chgrp animator file1
        $ls -l file1
        -rwx------   1      user1 animator              6       Apr   5      14:06 file1
        $chown user2 file1
        $ls -l file1
        -rwx------   1      user2 animator              6       Apr   5      14:06 file1

         $cat file1
         cat: cannot open file1
Baøi taäp:
    1. Haõy taïo chöông trình sau trong thö muïc tieáp nhaän:
    - chöông trình “hello”:
                 $cat >         hello
                 print ”Hello”
                 print “How are you ?”
                 ^D
    - chöông trình reply:
                 $cat >         reply
                 print “Hello”
                 print “Fine. And you ?”
                 ^D
    2. Xem quyeàn thaâm nhaäp vaøo caùc file treân:
                 ll     -R
    3. Chaïy 2 chöông trình treân.


                                              17
Copyright(c) by Galaxy CD – http://www.galaxycd.com


          Ñaët quyeàn chaïy ñöôïc (executable) cho 2 files treân.
          Chaïy laïi 2 chöông trình treân.
                   $hello
                   $chmod +x hello
                   $hello
     4. Boû caùc quyeàn thaâm nhaäp tôùi hello vaø reply cuûa nhöõng ngöôøi cuøng nhoùm (group)
          vaø cuûa nhöõng ngöôøi khaùc (other)
                   chmod go = teân file
          Coù theå duøng leänh chmod theo caùch khaùc ñöôïc khoâng ? Haõy thöû vôùi caû caùc file
khaùc (g-rwx, o-rwx, 700 …)
     5. Thay ñoåi quyeàn thaâm nhaäp sao cho nhöõng ngöôøi cuøng nhoùm coù khaû naêng ñoïc vaø
          chaïy caùc file hello vaø reply
     6. Haõy thöû thay ñoåi ngöôøi hoaëc nhoùm sôû höõu cuûa moät file:
                   chown userY file
          Khi ñoù file seõ thuoäc sôû höõu cuûa ngöôøi khaùc. Coù theå xoaù ñöôïc khoâng ?
     7. Haõy laøm theo höôùng daãn sau:
                   cat      >        rm
                   echo Hello
                   ^D
ñeå taïo file rm, sau ñoù söûa quyeàn thaâm nhaäp ñeå file coù theå chaïy ñöôïc:
                   chmod +x rm
thöû chaïy file rm ñeå xoaù moät file naøo ñoù ñang toàn taïi:
                   rm file
Ñieàu gì seõ xaûy ra?
KHOÂNG BAO GIÔØ ÑÖÔÏC ÑAËT TEÂN FILE TRUØNG VÔÙI TEÂN LEÄNH HEÄ THOÅNG.
(CHUÙ YÙ: test cuõng laø moät leänh cuûa heä thoáng)




                                              18
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 4: Sao cheùp, chuyeån, lieân keát vaø tìm kieám file.

Noäi dung: caùc thao taùc, caùc leänh thöôøng duøng vôùi file

4.1 Sao cheùp file
Leänh cp (copy) cho pheùp ta sao cheùp moät hoaëc nhieàu file:
    - sao cheùp moät file:
                $cp      file_nguoàn      file_ñích
    - sao cheùp nhieàu file vaøo moät thö muïc:
                $cp      file1 file2… thö_muïc
    - sao taát caû caùc file vaøo moät thö muïc:
                $cp      *        thö_muïc

Thí duï:
           $pwd
           /users/user2

           $ls   -l
           total 2
           drwxrwxr-x       2          user2 stagiair           32    Apr    5      16:31 copie
           drwxrwxr-x       2          user2 stagiair           96    Apr    5      16:31 source

           $cd     source

           $ls    -l
           total 3
           -rw-rw-r-- 1     user2 stagiair            16        Apr   5      16:25 original1
           -rw-rw-r-- 1     user2 stagiair            17        Apr   5      16:26 original2
           -rw-rw-r-- 1     user2 stagiair            18        Apr   5      16:27 original3

           $ls     -l       ../copie
           total   0

           $cp     original1           ../copie/original1.copie

           $ls    -l        ../copie
           total 1
           -rw-rw-r-- 1     user2 stagiair 16         Apr       5     16:25 original1.copie

           $cp     *        ../copie



                                                     19
Copyright(c) by Galaxy CD – http://www.galaxycd.com


           $cd    ../copie

           $ls    -l
           total 4
           -rw-rw-r--   1    user2   stagiair   16    Apr   5     16:25   original1
           -rw-rw-r--   1    user2   stagiair   16    Apr   5     16:25   original1.copie
           -rw-rw-r--   1    user2   stagiair   17    Apr   5     16:26   original2
           -rw-rw-r--   1    user2   stagiair   18    Apr   5     16:27   original3

4.2 Chuyeån vaø ñoåi teân file:
Leänh mv cho pheùp chuyeån vaø ñoåi teân file:
    - chuyeån moät file:
               $mv file_nguoàn           file_ñích
    - chuyeån nhieàu file:
               $mv file1 file2 …                  thö_muïc
               $mv *            thö_muïc
    - chuyeån thö muïc:
               $mv thö_muïc1             thö_muïc2
               (caùc thö muïc phaûi coù cuøng thö muïc con)

Thí duï:
           $pwd
           /users/user2/source

           $ls    -l
           total 3
           -rw-rw-r-- 1      user2 stagiair           16    Apr   5       16:25 original1
           -rw-rw-r-- 1      user2 stagiair           17    Apr   5       16:26 original2
           -rw-rw-r-- 1      user2 stagiair           18    Apr   5       16:27 original3


           $mv    original1          original1.bis

           $ls    -l
           total 3
           -rw-rw-r-- 1      user2 stagiair           16    Apr   5       16:25 original1.bis
           -rw-rw-r-- 1      user2 stagiair           17    Apr   5       16:26 original2
           -rw-rw-r-- 1      user2 stagiair           18    Apr   5       16:27 original3

           $cd    ..



                                                     20
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        $pwd
        /users/user2

        $ls   -l
        total 2
        drwxrwxr-x       2         user2 stagiair         96       Apr     4        10:20 copie
        drwxrwxr-x       2         user2 stagiair         96       Apr     4        10:21 source

        $mv     source             replace

        $ls   -l
        total 2
        drwxrwxr-x       2         user2 stagiair 96      Apr      4       10:20 copie
        drwxrwxr-x       2         user2 stagiair 96      Apr      4       10:21 replace

        $ls    -l        replace
        total 3
        -rw-rw-r-- 1     user2 stagiair           16      Apr      5       16:25 original1.bis
        -rw-rw-r-- 1     user2 stagiair           17      Apr      5       16:26 original2
        -rw-rw-r-- 1     user2 stagiair           18      Apr      5       16:27 original3

4.3 Taïo lieân keát vôùi file:
Taïo lieân keát vôùi file laø taïo theâm cho file teân môùi vaø ñöôøng daãn töông öùng. Leänh ln cho
pheùp ta laøm vieäc treân.
         $ln     file_nguoàn         file_ñích
Baèng leänh ls -l, ta coù theå xem soá lieân keát cuûa file. Leänh rm duøng ñeå xoùa moät lieân keát.
Muoán xoaù moät file, ta phaûi xoaù taát caû caùc lieân keát cuûa noù.
Thí duï:
         $pwd
         /users/user2

        $ls   -l
        total 2
        drwxrwxr-x       2         user2 stagiair         96       Apr     4        10:20 appli
        drwxrwxr-x       2         user2 stagiair         96       Apr     4        10:21 source

        $ls    -l        appli
        total 1
        -rw-rw-r-- 1     user2 stagiair           71      Apr      5       17:05 file1

        $ln     appli/file1        file.link


                                                21
Copyright(c) by Galaxy CD – http://www.galaxycd.com



       $ls    -l       appli
       total 1
       -rw-rw-r-- 2    user2 stagiair            71      Apr   5      17:05 file1

       $ls    -l       file.link
       total 1
       -rw-rw-r-- 2    user2 stagiair            71      Apr   5      17:05 file.link

4.4 Tìm kieám moät file
Leänh find cho pheùp tìm moät hay nhieàu file trong caây thö muïc. Ta coù theå:
    - Tìm theo teân:
                 $find ñöôøng_daãn -name teân_file -print
    - Tìm theo soá i-node (i-num) cuûa file:
                 $find ñöôøng_daãn -inum           number -print
    - Tìm theo teân ngöôøi sôû höõu:
                 $find pathname -user username -print
Ñeå traùnh caùc thoâng baùo loãi ñöa ra maøn hình, ta coù theå ñoåi höôùng ñaàu ra loãi chuaån
(standard error) tôùi moät file khoâng (/dev/null)
         $find / -name filename -print 2> /dev/null
Thí duï:
         $pwd
         /users/user1

       $find / -name           ttyc2d1 -print 2> /dev/null
       /dev/ttyc2d1

       $ls -i /unix
       2810 -r-xr--r-- 2         bin      bin    508516 Mar 10        1989    /unix

       $find / -inum 2810              -print 2> /dev/null
       /unix
       /makesys/root/unix

       $pwd
       /users/user1

       $find /users -user -user1 -print
       /users/user1
       /users/user1/res1
       /users/user1/res


                                                22
Copyright(c) by Galaxy CD – http://www.galaxycd.com


       /users/user1/file1

       $ll
       total 3
       -rw-rw-r-- 1    user1 stagiair          75      Oct     18      11:41 res1
       -rw-rw-r-- 1    user1 stagiair          75      Oct     18      11:42 res
       -rw-rw-r-- 1    user1 stagiair          75      Oct     18      11:43 file1

Baøi taäp:
    1. Taïo 2 files file1 vaø file2 trong thö muïc tieáp nhaän.
    2. Sao caùc file ñoù vaøo caùc file file?.old
                 cp        file1 file1.old
    3. Taïo caùc thö muïc src vaø bin
                 mkdir src            bin
    4. Sao caùc file file1 vaø file2 vaøo thö muïc src, caùc file file?.old vaøo thö muïc bin.
    5. Xoaù caùc file trong thö muïc tieáp nhaän.
    6. Sao caùc files file1, file2, file1.old vaø file2.old trôû laïi thö muïc tieáp nhaän.
    7. Ñeå laøm tieáp caùc phaàn sau, caàn toå chöùc caùc file nhö sau:
    - file1 vaø file2 ôû trong thö muïc bin
    - file1.old vaø file2.old ôû trong thö muïc src vaø
    - khoâng coù file naøo ôû trong thö muïc tieáp nhaän.
    Taïo moät lieân keát teân laø file3 trong thö muïc tieáp nhaän vôùi file1 trong thö muïc bin
                 cd
                 ln        /users/userX/bin/file1             /users/userX/file3
    8. Lieät keâ 2 file file1 vaø file3
                 ll -i /users/userX/bin/file1                 /users/userX/file3
         Ta coù nhaän xeùt gì veà nhöõng thoâng tin ñöôïc ñöa ra maøn hình ?
    9. Haõy xoaù file3 vaø kieåm tra xem noù ñaõ bò xoaù chöa, xem ñieàu gì xaûy ra vôùi file1?
         Haõy giaûi thích.
    10. Leänh chuyeån file (mv) cho pheùp ñoåi teân moät file. Haõy sao file file2.old trong
         thö muïc src vaøo file file4/
    11. Haõy tìm file vi
                 find / -name                vi       -print 2> /dev/null
    12. Xem giaù trò i-num cuûa file vi (duøng ll vôùi tuyø choïn –l)
    13. Tìm taát caû caùc file coù cuøng giaù trò i-num vôùi vi.




                                              23
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 5: Thoâng tin giöõa nhöõng ngöôøi söû duïng

Noäi dung: giôùi thieäu caùc leänh duøng ñeå truyeàn vaø nhaän tin mail, write

5.1 Thoâng tin baèng leänh mail
5.1.1 Gôûi thö
Leänh mail cho pheùp gôûi thö cho ngöôøi khaùc. Vieäc gôûi khoâng phuï thuoäc vaøo ngöôøi nhaän
ñang trong phieân laøm vieäc hay khoâng.
         $mail user1
         message written-out
         Ctrl-D
         $
5.1.2 Nhaän thö:
Khi baét ñaàu phieân laøm vieäc, neáu ta coù thö, treân maøn hình seõ hieän doøng thoâng baùo “you
have mail”. Trong quaù trình laøm vieäc, SHELL seõ laøm coâng vieäc kieåm tra thö ñeán theo
moät chu kyø thôøi gian ñònh tröôùc. Ñeå xem hoäp thö, ta duøng leänh mail khoâng coù ñoái.
Thí duï:
    - gôûi thö cho ngöôøi khaùc:
                 $whoami
                 user2

                $mail user3
                you can read my files
                CTRL-D
                $
    -   nhaän thö
                bmw
                Welcom on DPX/2
                login : user3
                B.O.S
                you have mail

                 $mail
                 From user2 Fri Mar 7 12:07 EET 1992
                 you can read my files

                 ?h
                 usage
                 q                quit
                 x                exit without changing mail



                                                  24
Copyright(c) by Galaxy CD – http://www.galaxycd.com


                 p                print
                 s [file]         save (default mailbox)
                 w [file]         same without header
                 -                print previous
                 d                delete
                 + [user]         mail to user
                 !cmd             execute cmd
                 ?q
                 $
Chuù yù: Ñaàu thö (header) coù theå bò thay ñoåi khi laøm vieäc treân maïng.

5.3    Thoâng tin baèng leänh write
Leänh write cho pheùp gôûi thoâng baùo töùc thôøi tôùi nhöõng ngöôøi khaùc ñang trong phieân laøm
vieäc.

               $write user2
               hello my friend
               how are you
               CTRL – D
               $
Leänh wall cho pheùp gôûi thoâng baùo tôùi taát caû nhöõng ngöôøi ñang laøm vieäc trong heä.

Leänh write ghi thoâng tin tröïc tieáp leân maøn hình neân coù theå gaây nhieãu cho coâng vieäc maø
ngöôøi nhaän ñang laøm. Ñeå traùnh laøm vieäc ñoù coù theå duøng leänh mesg vôùi tuyø choïn n.
                $mesg
                …




                                                  25
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 6: Söû duïng chöông trình soaïn thaûo vi möùc cô sôû

Noäi dung: giôùi thieäu chöông trình soaïn thaûo vi, cung caáp moät soá kieán thöùc cô sôû ñeå coù
           theå soaïn thaûo ñöôïc vaên baûn hay chöông trình.

6.1 Khôûi ñoäng vi
6.1.1 Giôùi thieäu chung:
vi (vieát taét cuûa Video Interactif) laø chöông trình soaïn thaûo vaên baûn theo trang maøn
hình:
     - Maøn hình ñöôïc xem nhö moät cöûa soå môû treân file.
     - Coù khaû naêng di chuyeån cursor tôùi baát kyø nôi naøo treân maøn hình.
     - Cöûa soå coù theå di chuyeån töï do treân file.
Ñeå hieån thò ñuùng, vi caàn bieát kieåu terminal ñang duøng.
Ta coù theå ñònh nghóa ñöôïc kieåu terminal baèng caùch gaùn gía trò cho bieán moâi tröôøng
TERM:
Thí duï:
                  $TERM=tws2103;export TERM
Phaàn lôùn caùc phím ñöôïc duøng ñoäc laäp hoaëc keát hôïp vôùi phím SHIFT vaø CTRL ñeå taïo
caùc leänh cuûa vi.
Khi moät leänh bò goõ sai, vi baùo hieäu baèng nhaùy maøn hình, keâu beep hoaëc thoâng baùo loãi.
Chöông trình vi ñöôïc xaây döïng töø chöông trình soaïn thaûo doøng ex. Caùc leänh cuûa ex coù
theå ñöôïc goïi khi coù daáu “:” ôû doøng cuoái maøn hình.
6.1.2 Baét ñaàu duøng vi
Ta coù theå goïi vi vôùi teân file vaên baûn:
         $vi      teân_file
Cöûa soå soaïn thaûo seõ ñöôïc môû taïi ñaàu file. Neáu file chöa toàn taïi, noù seõ ñöôïc taïo bôûi leänh
ghi. Doøng cuoái cuøng treân maøn hình ñöôïc duøng cho nhöõng vieäc sau:
     - vaøo caùc leänh,
     - thoáng keâ,
     - baùo loãi.
Ñoái vôùi nhöõng ngöôøi môùi duøng vi, coù theå duøng version khaùc cuûa vi:
         $vedit teân_file
version naøy cuûa vi seõ hieän thoâng baùo INPUT MODE khi ta ñang trong cheá ñoä nhaäp vaên
baûn.

Khi ta chæ muoán xem noäi dung cuûa moät file, duøng:
        $view teân_file.
version naøy cuûa vi môû file chæ ñeå ñoïc, cho pheùp ta xem ñöôïc noäi dung maø traùnh ñöôïc
nguy cô file bò thay ñoåi.




                                                   26
Copyright(c) by Galaxy CD – http://www.galaxycd.com


6.1.2 Ra khoûi vi:
Muoán ra khoûi vi vaø ghi file coù theå duøng moät trong caùc caùch sau:
        ZZ                         hoaëc
        :w       sau ñoù :q        hoaëc
        :wq                        hoaëc
        :x
Ra khoûi vi vaø khoâng ghi file:
        :q       (neáu khoâng coù söûa ñoåi) hoaëc
        :q!
Khi ñang trong vi, muoán laøm vieäc vôùi SHELL, ta coù theå laøm nhö sau:
    - chaïy moät leänh cuûa SHELL
                 :!leänh
    - hoaëc goïi SHELL, sau ñoù chaïy caùc leänh ta muoán, khi keát thuùc aán CTRL-D ñeå trôû
        laïi vi:
                 :!sh
                 $leänh
                 $CTRL-D

6.2 Soaïn thaûo vaên baûn:
6.2.1 Xen vaên baûn:
    - xen kyù töï treân moät doøng:
                a <text> <ESC>                    Xen kyù töï vaøo sau cursor. Leänh khoâng
                                                  ñöôïc hieån thò treân maøn hình. ESC: Keát thuùc
                                                  cheá ñoä xem.
                 i <text> <ESC>                   Xen kyù töï vaøo tröôùc cursor.
                 A <text> <ESC>                   Xen kyù töï vaøo cuoái doøng.
                 I <text> <ESC>                   Xen kyù töï vaøo ñaàu doøng.
    - xen doøng:
                 o <text> <ESC>                     Xen moät doøng vaøo tröôùc doøng chöùa cursor.
                 O <text> <ESC>                     Xen moät doøng vaøo sau doøng chöùa cursor.
Ghi chuù: muoán xen caùc kyù töï khoâng in ñöôïc (non printable) ta phaûi goõ:
        CTRL – V tröôùc chuùng.
6.2.2 Di chuyeån cursor trong file:
    - theo kyù töï:
        sang traùi: duøng phím muõi teân traùi hoaëc h hoaëc backspace.
        xuoáng doøng: duøng phím muõi teân xuoáng hoaëc j hoaëc linefeed
        sang phaûi : duøng phím muõi teân phaûi hoaëc i hoaëc escape.
        leân doøng : duøng phím muõi teân leân hoaëc k.
    - theo doøng:
        ^        veà ñaàu doøng
        $        cuoái doøng


                                                 27
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    Enter ñaàu doøng tieáp
    -        ñaàu doøng treân
    0(null) veà ñaàu doøng vaät lyù (doøng baét ñaàu baèng daáu caùch hoaëc tab)
-   theo maøn hình:
    H        veà ñaàu maøn hình (Home)
    M        veà giöõa maøn hình (Middle)
    L        veà cuoái maøn hình (Last)
-   theo töø (word):
    w        W         veà ñaàu töø tieáp
    b        B         ñaàu töø hieän taïi
    e        E         cuoái töø hieän taïi
-   theo caâu (sentence):
    (        veà ñaàu caâu
    )        veà cuoái caâu
    daáu keát thuùc moät caâu laø caùc daáu ., ! hoaëc ?
-   theo ñoaïn vaên (paragraph):
    {        veà ñaàu ñoaïn vaên
    }        cuoái ñoaïn vaên
    ñoaïn vaên keát thuùc baèng moät doøng troáng.
-   theo cöûa soå (window):
    z                  doøng hieän taïi ôû giöõa cöûa soå.
    z<Enter>           doøng hieän taïi ôû ñaàu cöûa soå.
    z-                 doøng hieän taïi ôû cuoái cöûa soå.

    ^D                xuoáng nöûa cöûa soå
    ^U                leân nöûa cöûa soå
    ^F                xuoáng moät cöûa soå (-2 doøng)
    ^B                leân moät cöûa soå (2 doøng)

    Ghi chuù: ^ laø kyù hieäu cuûa phím CTRL
-   theo soá thöù töï doøng:
    Ñeå hieån thò soá thöù töï cuûa caùc doøng soaïn thaûo:
             :set      nu
    Xoaù boû hieån thò treân:
             :set      nonu

    :n <Enter> hoaëc nG                  chuyeån cursor ñeán doøng thöù n
    :$ hoaëc G                           ñeán doøng cuoái vaên baûn

    :se list                             hieån thò caùc kyù töï aån (hidden)



                                                28
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    -   tìm daõy kyù töï:
        /                 kyù hieäu chieàu tìm xuoâi.
        ?                 kyù hieäu chieàu tìm ngöôïc.

        /string           chuyeån cursor tôùi doøng chöùa daõy kyù töï theo chieàu xuoâi.

        ?string           chuyeån cursor tôùi doøng chöùa daõy kyù töï theo chieàu ngöôïc.

       //              laëp laïi tìm xuoâi.
       ??              laëp laïi tìm ngöôïc.
6.2.3 Xoùa vaên baûn:
    - xoùa kyù töï:
       x               xoùa kyù töï taïi vò trí cursor
       3x              xoùa 3 kyù töï
       X               xoùa kyù töï tröôùc vò trí cursor
    - xoùa doøng vaên baûn:
       dd hoaëc :d<CR>            xoùa doøng chöùa cursor
       3dd                        xoùa 3 doøng baét ñaàu töø doøng chöùa cursor
       d$ hoaëc D                 xoùa ñeán cuoái doøng

        dw                         xoaù töø chöùa cursor
        3dw hoaëc d3w              xoaù 3 töø

       d/string                    xoùa khi heát daõy string
6.2.4 Thay theá vaên baûn:
    - thay theá kyù töï:
        rc                         thay theá kyù töï hieän taïi baèng kyù töï c (???)
        R<text><ESC>               thay theá soá kyù töï baèng daõy “text”

    -   thay theá doøng:
        S<text><ESC>               xoùa doøng hieän taïi vaø thay noù baèng “text”

    -   thay theá töø:
        cw<text><ESC>              thay moät töø baèng “text”. Töø ñöôïc thay theá tính töø cursor
                                   ñeán kyù töï $.
       c2w<text><ESC>              thay 2 töø.
       C hoaëc c$                  thay theá cuoái doøng
       c/string                    thay theá ñeán heát ”string”
6.2.5 Xoùa hoaëc laëp laïi leänh:
    - Xoaù leänh
       u                   xoùa taùc duïng cuûa leänh cuoái cuøng


                                                    29
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        U                 xoaù taát caû thay ñoåi ñaõ laøm treân doøng hieän taïi.
    - Laëp laïi leänh:
        .                 laëp laïi leänh söûa ñoåi vaên baûn cuoái cuøng (???)
6.2.6 Xem traïng thaùi vaên baûn ñang soaïn thaûo:
^G      Hieån thò teân, traïng thaùi, soá doøng, vò trí ,cursor vaø phaàn traêm vaên baûn tính töø vò
        trí cursor ñeán cuoái vaên baûn.
6.2.7 Sao cheùp, chuyeån vaên baûn:
    - di chuyeån vaên baûn:
Moãi laàn thöïc hieän moät leänh xoùa (x hoaëc d), vi ñeàu ghi laïi phaàn vaên baûn bò xoùa vaøo
vuøng ñeäm rieâng cho ñeán laàn xoùa sau. Leänh p vaø P cho pheùp laáy laïi vaên baûn töø vuøng
ñeäm ñoù. Tröôùc khi thöïc hieän leänh naøy, cursor phaûi ñöôïc ñaët vaøo vò trí cuøng kieåu vôùi
phaàn vaên baûn coù trong vuøng ñeäm :
                 -kyù töï
                 -töø
                 -doøng
                 -cuoái doøng (end of line)
p sao phaàn vaên baûn xoaù laàn cuoái cuøng vaøo sau ñoái töôïng trong cuøng kieåu.
P sao phaàn vaên baûn xoaù laàn cuoái vaøo tröôùc ñoái töôïng cuøng kieåu.

Moät caùch khaùc ñeå chuyeån doøng:
        :5,10m20         chuyeån caùc doøng töø 5 ñeán 10 tôùi sau doøng 20

   - Sao cheùp vaên baûn:
   Leänh y(yank) cho pheùp sao phaàn vaên baûn ta muoán vaøo vuøng ñeäm . Muoán sao phaàn
   vaên baûn töø vuøng ñeäm ra, ta phaûi chuyeån cursor vaøo nôi caàn sao, sau ñoù duøng p hoaëc
   P.
        Y3w                      sao 3 töø vaøo vuøng ñeäm
        Y hoaëc yy               sao doøng hieän taïi vaøo vuøng ñeäm .
        5yy                      sao 5 doøng vaøo vuøng ñeäm
Moät caùch khaùc ñeå sao cheùp doøng:
        :5,8t25                  sao caùc doøng töø 5 ñeán 8 tôùi sau doøng 25

6.3     Duøng vi vôùi danh saùch caùc leänh ñaõ chaïy cuûa Shell (history of commands)
Leänh fc (fix command) cho pheùp ta soaïn thaûo baèng vi vaø chaïy laïi caùc leänh ñaõ chaïy cuûa
Shell, caùch duøng nhö sau:
    - soaïn thaûo vaø cho chaïy leänh cuoái cuøng:
                 $fc
    - soaïn thaûo moät nhoùm leänh vaø cho chaïy:
                 $fc    m       n
    - xem danh saùch 16 leänh cuoái cuøng:
                 $fc    -l      hoaëc history


                                                 30
Copyright(c) by Galaxy CD – http://www.galaxycd.com


                 $fc      -lr      (danh saùch theo thöù töï ngöôïc laïi)
    - taïo moät file chöùa moät soá leänh ñaõ chaïy (cuûa history):
                 $fc      -nl      n1       n2       > cmd
         cmd laø moät file chöùa caùc leänh cuûa history töø leänh n1 ñeán leänh n2
Baøi taäp:
    1. Sao file vaên baûn coù saün vaøo thö muïc tieáp nhaän:
                 cp /users/EXERCISES/editsave                 edition
    2. Duøng chöông trình vi ñeå soaïn thaûo file treân:
                 vi       edition
    3. Chuyeån cursor xuoáng cuoái doøng vaên baûn, xong laïi chuyeån veà ñaàu vaên baûn.
    Duøng:
                 CTRL – D vaø CTRL – U hoaëc
                 CTRL – F vaø CTRL – B hoaëc
                 G            vaø :1
    4. Haõy söûa:
    - Teân “Dupont Jean” ñaàu tieân thaønh “Jean-Jacques”
    - Teân “Dupont Pierre” ñaàu tieân thaønh “Jean-Pierre”
    Laøm nhö sau:
         /Dupont Jean/
         chuyeån cursor tôùi kyù töï “n” cuûa “Jean”
         a-Jacques<ESC>

         /Dupont Pierre/
         chuyeån cursor tôùi kyù töï “p” cuûa “Pierre”
         iJean-<ESC>
    5.   Haõy vaøo teân mình vaøo doøng tröôùc doøng “Dupont” ñaàu tieân:
                  :1
                  /Dupont/
                  Oname<ESC>
    6.   Haõy vaøo bieät hieäu hoaëc moät teân baát kyø vaøo sau doøng “Dupont” cuoái cuøng:
                  G
                  ?Dupont?
                  oname<ESC>
    7.   Ghi file vaø ra khoûi vi:
                  :wq hoaëc
                  ZZ
    8.   Vaøo laïi vi vaø soaïn thaûo file edition. Ñaët vaø boû cheá ñoä hieån thò soá doøng.
                  vi edition
                  :set      nu
                  :set      nonu
    9.   Haõy söûa “Dupont Jean” thaønh “Martin Jean”:


                                                   31
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Chuyeån cursor tôùi kyù töï “D” cuûa “Dupont”:
hoaëc:
             XxxxxxiMartin<ESC>                 (duøng x ñeå xoùa kyù töï)
(neáu laøm sai hoaëc muoán laøm laïi goõ U ñeå xoaù boû toaøn boä thay ñoåi treân doøng)
hoaëc:
             dwiMartin<ESC>                     (duøng dw ñeå xoùa töø)
hoaëc:
             cwMartin<ESC>                      (duøng cw ñeå thay töø)
10. Xoaù doøng chöùa “Coteau Jean”:
             /Couteau Jean/
             dd
11. Thay taát caû “Dupont” thaønh “Durand”
             /Dupont/
             cwDurand<ESC>
             //
             .
12. Chuyeån caùc doøng chöùa “Durand” xuoáng cuoái vaên baûn:
Chuyeån cursor tôùi doøng “Durand” ñaàu tieân:
             4dd      (xoùa 4 doøng vaø ñöa vaøo vuøng ñeäm)
             G        (chuyeån ñeán cuoái vaên baûn)
             P        (sao töø trong vuøng ñeäm )
13. Nhaân ñoâi doøng chöùa “Martin Jean”
             yy
             p
14. Hieän ta ñang trong vi, haõy gôûi thoâng baùo tôùi cho ngöôøi khaùc ñang trong phieân
    laøm vieäc:
             :!who
             :!mail userX
             message
             ^D
15. Ta ñang ôû taïi thö muïc tieáp nhaän, söûa ñoåi vaø chaïy laïi moät leänh:
             $cd
             $write userX
             message
             ^D
             $fc      ->söûa X thaønh Y
             :wq
             $




                                         32
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 7 Shell_script

Noäi dung: giôùi thieäu shell, tieán trình (process) vaø caùc caùch thöùc thöïc hieän tieán trình.

Shell coù theå ñoïc vaø thöïc hieän moät file goàm danh saùch caùc leänh caàn thöïc hieän.
File ôû daïng naøy ñöôïc goïi laø shell_sript hoaëc procedure
Shell_script ñöôïc thöïc hieän nhôø shell, vaø chính shell seõ phaùt sinh vaø quaûn lyù taát caû caùc
tieán trình caàn thieát ñeå thöïc hieän coâng vieäc ñöôïc moâ taû trong shell_script

7.1 Quaûn lyù tieán trình:
7.1.1 Muïc ñích cuûa shell
Shell laø chöông trình thoâng dòch leänh


                                         Hieån thò $




                                         Ñoïc leänh




                                      Taïo tieán trình




                                 Ñôïi tieán trình keát thuùc




                                         Hieån thò $


7.1.2 Taïo tieán trình:
Khaùi nieäm chung veà tieán trình:
Tieán trình ñöôïc hieåu laø vieäc thöïc hieän moät coâng vieäc hay moät chöông trình trong moâi
tröôøng cuï theå trong heä thoùng. Ta coù theå phaân bieät hai loaïi tieán trình:
    - Tieán trình heä thoáng: laø tieán trình khoâng gaén vôùi baát kyø moät terminal naøo, noù
         ñöôïc taïo ra vaøo thôøi ñieåm khôûi ñoäng heä thoáng hoaëc vaøo caùc thôøi ñieåm coá ñònh
         do ngöôøi duøng quaûn trò heä thoáng ñaët.



                                                    33
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    -   Tieán trình do ngöôøi söû duïng taïo ra.

Caùc tieán trình ñöôïc toå chöùc theo daïng caây:
         Tieán trình cha                    tieán trình con
            (parent)                          (child)

Ñoái vôùi ngöôøi söû duïng, tieán trình cha laø Shell ñöôïc taïo taïi thôøi ñieåm baét ñaàu phieân laøm
vieäc.
7.1.3 Lieät keâ caùc tieán trình:
Leänh ps cho pheùp lieät keâ danh saùch caùc tieán trình ñang dieãn ra:
         $ps      -f
         UID                PID PPID C                  STIME             TTY TIME COMMAND
         user5              4582 1             0        11:04:45          tty23 0:01 -sh
         user5              4792 4582 36                11:10:04          tty23 0:04 ps -f
trong ñoù:
         UID                soá UID cuûa ngöôøi chuû tieán trình
         PID                soá cuûa tieán trình (process identity)
         PPID               soá cuûa tieán trình cha (parent process identity)
         C                  chæ soá söû duïng boä xöû lyù (processor utilization for scheduling).
         STIME              thôøi ñieåm baét ñaàu tieán trình
         TTY                terminal ñieàu khieån tieán trình
         TIME               thôøi gian tích luyõ thöïc hieän tieán trình (cumulative time)
         COMMAND teân leänh sinh ra tieán trình
Tieán trình soá 1 laø tieán trình init, trong ñoù coù chöùcc naêng giaùm saùt caùc terminal, laø tieán
trình cha cuûa taát caû caùc tieán trình Shell khi login.
Caùch thöïc hieän moät shell_script:
                  $chmod +x proc
                  $proc
hoaëc
                  $sh       proc

7.2 Laäp caùch thöùc (setup) cho shell_script:
Leänh set cho pheùp laäp caùch thöùc chaïy shell_script.
        set      -x                hieån thò doøng leänh sau khi trieån khai leänh
        set      -v                hieån thò doøng leänh tröôùc khi trieån khai
        set      -e                ra khoûi shell_script sau khi gaëp moät loãi
        set      -t                ra khoûi shell_script sau leänh tieáp
        set      -                 xoaù taùc duïng cuûa x vaø v
Vieäc laäp caùch thöùc chæ lieân quan tôùi shell_script ñang chaïy. Caùc tuyø choïn -x vaø –v coù
theå ñöa vaøo doøng leänh goïi shell_script:
        $sh      -v       proc


                                                   34
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        $sh     -x      proc

Thí duï:
    - duøng “-x”:
              $cat exam1
              set    -x
              echo “The current directory is :”
              pwd
              echo “List of files :“
              echo file1 file2 file3

                $exam1
                + echo The current directory is :
                The current directory is:
                + pwd
                /users/user8
                + echo List of files:
                List of files:
                + echo file1 file2 file3
                file1 file2 file3
    -   duøng “-v”:
                $cat exam2
                set      -v
                echo “The current directory is :”
                pwd
                echo “List of files :“
                echo file1 file2 file3

                    $exam2
                    echo The current directory is :
                    The current directory is:
                    pwd
                    /users/user8
                    echo List of files:
                    List of files:
                    echo file1 file2 file3
                    file1 file2 file3
Coù theå duøng kyù töï ‘#’ ñeå vieát chuù thích cho doøng leänh trong shell_script, neáu chuù thích
vieát ngay sau leänh treân cuøng moät doøng, ta phaûi cho ít nhaát moät daáu caùch (space) vaøo
tröôùc kyù töï ‘#’.



                                                35
Copyright(c) by Galaxy CD – http://www.galaxycd.com


7.2 Caùc loaïi Shell UNIX
Coù 3 loaïi shell UNIX:
        csh        cuûa Berkeley BSD
        sh         cuûa AT&T, Bourne-shell
        ksh        cuûa AT&T,Korn-shell
Shell ksh duøng trong taøi lieäu naøy laø toaøn boä sh keát hôïp vôùi phaàn phaùt trieån cuûa csh.
Shell csh coù cuù phaùp gioáng ngoân ngöõ C, nhöng caùc shell_script cuûa csh khoâng chaïy
ñöôïc döôùi sh vaø ksh.
Döôùi ñaây laø lieät keâ nhöõng khaùc nhau cô baûn khaùc:
    - csh vaø ksh coù nhaät kyù (history).
    - ksh coù trình soaïn thaûo doøng (line editor)
    - cuù phaùp voøng laëp
        csh: while end
        ksh, sh: while do done
    - chæ csh coù leänh goto
    - cô cheá thay theá bieán cuûa ksh laø hoaøn thieän nhaát
    - csh vaø ksh coù caùc pheùp tính soá hoïc.




                                               36
Copyright(c) by Galaxy CD – http://www.galaxycd.com



Baøi 8: Ñoåi höôùng (Redirection)

Noäi dung: caùc luoàng döõ lieäu vaøo/ra chuan vaø caùc thao taùc ñoåi höôùng chuùng.

8.1 Vaøo/ra chuaån:
8.1.1 Caùc file vaøo/ra chuaån:
Khi cho moït file chaïy, Shell töï ñoäng môû 3 file vaøo/ra chuan:
         Vaøo chuaån (stdin)                  fd = 0
         Ra chuaån (stdout)                   fd = 1
         Loãi chuaån (stderror)               fd = 2
Kyù hieäu fd laø moâ taû file (file descriptor).
Thoâng thöôøng ñaàu vaøo chuaån laø baøn phím, ñaàu ra chuaån vaø loãi chuaån laø maøn hình.
8.1.2 Ñoåi höôùng ñaàu ra chuaån :
Ta coù theå ñoåi höôùng caùc soá lieäu, thay vì ra maøn hình, vaøo moät file theo caùc caùch sau:
         $leänh > teân_file
Neáu file chöa toàn taïi, noù seõ ñöôïc töï ñoäng taïo ra. Neáu ñaõ toàn taïi, noäi dung cuõ seõ bò xoùa.
         $leänh >> teân_file
Vôùi caùch naøy, döõ lieäu seõ ñöôïc ghi theâm vaøo cuoái file.
Thí duï:
         $ls       /bin >            file1
         $ls       /bin >>           file1
8.1.3 Ñoåi höôùng ñaàu ra loãi chuaån:
    - Ñoåi höôùng vaøo moät file:
                   $leänh 2 > file1
         hoaëc:
                   $leänh 2 >> file1
    - Ñoåi höôùng vaøo file soá lieäu (vaøo ñaàu ra chuaån):
                   $leänh > file1 2 > &1
    - Ñoåi höôùng vaøo file khoâng:
                   $leänh 2 > /dev/null
8.1.4 Ñoåi höôùng ñaàu vaøo chuaån:
    - Soá lieäu vaøo chuaån töø moät file:
                   $leänh < file2
Thí duï:
         $mail user1 < file2
    - Ñoåi höôùng caùc leänh töø ñaàu vaøo chuaån:
    Caùch ñoåi höôùng naøy cho pheùp ta ñöa caùc khai baùo cho moät leänh ttrong shell_script:
         $command           <<       STRING
         soá lieäu vaø/hoaëc leänh



                                                     37
Copyright(c) by Galaxy CD – http://www.galaxycd.com


         maø leänh naøy caàn ñoïc
         STRING
         $
Thí duï: duøng leänh cat taïo moät file:
         $cat >           file1 <<OK
         aa
         bb
         OK

        $cat      file1
        aa
        bb
        $

8.2 Chuyeån döõ lieäu giöõa caùc tieán trình:
Hai doøng leänh sau ñaây:
          leänh1      >     temp
          leänh2     <      temp
coù theå ñöôïc thay theá baèng moät doøng leänh nhö sau:
          leänh1 | leänh 2
Khi ñoù ñaàu ra chuaån cuûa leänh leänh1 seõ laø ñaàu vaøo chuaån cuûa leänh leänh2, vaø file trung
gian temp khoâng caàn thieát nöõa.
Kyù hieäu | goïi laø oáng (pipe).
Thí duï:
          $ls     -l | pg

8.3 Ñoåi höôùng keùp (double) ñaàu ra chuaån:
Leänh tee cho pheùp ñoåi höôùng keùp ñaàu ra chuaån: vöøa höôùng döõ lieäu ñaàu ra veà höôùng
khaùc, vöøa hieån thò ra maøn hình.
        $leänh | tee teân_file.

                            stdout
          leänh                                      tee                          stdout




                                               teân_file




                                                38
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Thí duï:
         $ps -ef | tee file_ps | grep $LOGNAME
Coù theå duøng tee vôùi tuyø choïn –a (tee –a), khi ñoù döõ lieäu ñaàu ra seõ ñöôïc ghi tieáp vaøo
cuoái file file_ps

Baøi taäp:
    1. Haõy vieát leänh coù teân WHO vôùi caùc chöùc naêng sau::
    - tính vaø hieån thò soá ngöôøi söû duïng ñang trong phieân laøm vieäc.
    - hieån thò danh saùch vaø caùc thuoäc tính cuûa hoï.
    - xoùa file ñeäm (neáu coù duøng) ñöôïc taïo khi chaïy leänh WHO.
    Gôïi yù: duøng caùc leänh who, tee, wc.
    2. Vieát leänh LLD lieät keâ caùc thö muïc con trong moät thö muïc.
    Gôïi yù: duøng caùc leänh ll vaø grep.




                                                 39
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 9: Cô cheá thay theá cuûa Shell

Noäi dung: caùch thao taùc vôùi caùc tham soá cuûa shell_script, caùc bieán trong Shell, caùc kyù
töï ñaëc bieät ñöôïc thoâng dòch khi vieát trong caâu leänh shell.

9.1 Truyeàn tham soá:
9.1.1 Truyeàn tham soá cho moät Shell_script
Moät Shell_script coù theå laøm vieäc vôùi caùc thoâng soá ñöôïc truyeàn qua doøng leänh.
        $proc par1 par2 par3
          |       |         |      |
         $0      $1        $2     $3
Trong Shell_script ñöôïc goïi (trong tröôøng hôïp naøy laø proc), caùc tham soá ñöôïc theå hieän
baèng:
        $0      teân Shell_script
        $1      tham soá thöù nhaát
        $2      tham soá thöù hai
        $n      tham soá thöù n

           $#     soá caùc tham soá
           $*     taát caû caùc tham soá
           $$     PID cuûa shell_script

Thí duï:
           $cat   param
           echo   Name of shell_script: $0
           echo   First parameter : $1
           echo   Third parameter : $3
           echo   Number of parameters: $#
           echo   List of all the param: $*
           $

        $param London Paris New-York Brussels
        Name of shell_script: param
        First parameter: London
        Third parameter: New-York
        Number of parameters: 4
        List of all the param: London Paris New-York Brussels
9.1.2 Dòch chuyeån caùc tham soá:




                                                  40
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Vôùi caùch theå hieän tham soá cuûa shell_script baèng $n, ta chæ coù theå laøm vieäc ñöôïc vôùi töø
1 ñeán 9 tham soá. Baèng caùch dòch chuyeån, ta coù theå laøm vieäc vôùi soá tham soá nhieàu hôn
9. Vieäc dòch chuyeån ñöôïc thöïc hieän bôûi leänh:
         shift
Sau khi shift:
- $0             vaãn giöõ nguyeân
- $1             maát ñi
- $2             thaønh $1
- $3             thaønh $2
- $n             thaønh $n-1
- $*, S#         ñöôïc caäp nhaät laïi.
Coù theå dòch chuyeån n vò trí baèng caùch:
         shift n
Thí duï:
         $cat shifting
         echo First parameter: $1
         echo Nineth parameter: $9
         echo Number of parameters: $#
         echo “SHIFTING”
         shift
         echo First parameter: $1
         echo Nineth parameter: $9
         echo Number of parameters: $#
         $

         $shifting A B C D E F G H I J K
         First parameter: A
         Nineth parameter: I
         Number of parameters: 11
         “SHIFTING”
         shift
         First parameter: B
         Nineth parameter: J
         Number of parameters: 10
         $

9.2 Caùc bieán Shell
9.2.1 Caùc kieåu bieán:
Ksh coù theå xöû lyù 4 kieåu bieán sau:
    - soá nguyeân
    - xaâu kyù töï


                                                 41
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    - baûng caùc xaâu kyù töï
    - baûng caùc soá nguyeân
Thí duï:
    - bieán xaâu kyù töï:
                $string = “character string”
                $print $string
                character string
Ghi chuù:
           o noäi dung bieán ñöôïc bieåu dieãn baèng teân bieán vaø daáu $ ñaèng tröôùc.
           o tröôùc vaø sau daáu ‘””’ khoâng coù kyù töï troáng.
    - bieán soá nguyeân:
                $integer var = 2
                $itypeset -i var1 = 23
                $print $var $var1
                2 23
    - baûng caùc xaâu kyù töï:
                $string[1] = “more characters”
                $print ${string[1]}
                more characters

                 $print ${string[0]}
                 character string

Ghi chuù: khi khai baùo moät bieán, ta cuõng coù theå coi bieán ñoù laø bieán ñaàu tieân cuûa moät
baûng cuøng teân vôùi noù.
    - baûng caùc soá nguyeân:
                  $integer tabint
                  $typeset -i i

                $tabint[0] = 13
                $tabint[13] = “toto”
                ksh:toto:bad member
                $i=1
                $tabint[i] = 45
                $print tabint[1]
                45
Chæ soá (index) cuûa baûng laø moät soá nguyeân töø 0 ñeán 511.
    - xoùa moät bieán:
                $unset i
9.2.2 Caùch thay theá caùc bieán shell:



                                                  42
Copyright(c) by Galaxy CD – http://www.galaxycd.com


          $print ${var-val1}      hieån thò giaù trò cuûa var, neáu bieán var chöa ñònh nghóa thì
hieån thò val1 thay cho giaù trò cuûa var
          $print ${var=val2} neáu var chöa ñònh nghóa, taïo bieán var vôùi giaù trò laø val2
          $print ${var:-val3} gioáng tröôøng hôïp ñaàu
          $print ${var:=val4} gioáng tröôøng hôïp thöù hai nhöng var coù theå chöa ñöôïc ñònh
nghóa hoaëc coù giaù trò null.
          $print ${var?message}           neáu var chöa ñöôïc ñònh nghóa, hieån thò message.
(thí duï: print ${var?not defined})

Chuù thích:
    - bieán chöa ñöôïc ñònh nghóa laø bieán chöa toàn taïi
    - bieán coù gía trò null laø bieán chæ chöùamoät kyù töï Return, hoaëc xaâu roãng.
                 $integer           tab
                 $tab[0]=1          tab[1]=2       tab[2]=7
    - lieät keâ caùc giaù trò cuûa baûng:
                 $print ${tab[*]}
                 1 2 7
    - hieån thò soá phaàn töû cuûa baûng:
                 $print ${#tab[*]}
                 3
9.1.3 Duøng moät bieán ôû cheá doä hoûi ñaùp:
Leänh read cho pheùp duøng moät bieán ôû cheá ñoä hoûi ñaùp khi ñang chaïy moät shell_script.
Thí duï:
         $cat menu
         echo This is an example of menu
         echo Choice: 1, 2 or 3
         read reply
         echo Your choice is $reply

        $menu
        This is an example of menu
        Choice: 1, 2 or 3
        2
        Your choice is 2
Cuù phaùp read var?”invite” cho pheùp hieån thò tröïc tieáp xaâu “invite”
        $read var?”Choice: 1, 2 or 3?”
        Choice :1,2 or 3?3
        $echo $var
        3
9.2.4 Baûo veä moät bieán:



                                                 43
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Leänh read-only cho pheùp baûo veä moät bieán. Ta chæ coù theå ñoïc maøkhoâng thay ñoåi ñöôïc
giaù trò cuûa noù.
          $VAR=45
          $readonly  VAR

         $VAR=22
         ksh: VAR: is readonly
         $echo $VAR
         45
Leänh readonly khoâng coù ñoái hieån thò danh saùch caùc bieán ñöôïc baûo veä.
Ñeå baûo veä moät bieán, ta cuõng coù theå duøng tpeset vôùi tuyø choïn –r:
         $typeset          -r      var1=68

9.3 Caùc kyù töï ñaëc bieät
9.3.1 Taïo moät teân vôùi caùc metacharacter
Moät soá kyù töï coù yù nghóa ñaëc bieät trong doøng leänh Shell, ngöôøi ta goïi caùc kyù töï ñoù laø
metacharacter. Chuùng cho pheùp taïo ra caùc teân file ta quan taâm trong moät thö muïc.
         *        thay theá moät xaâu kyù töï baát kyø/
         ?        thay theá moät kyù töï baát kyø.
         []       thay theá moät trong nhöõng kyù töï trong ngoaëc vuoâng.
         [!]      thay theá moät kyù töï khoâng coù trong ngoaëc vuoâng.
Muoán duøng moät kyù töï kieåu metacharacter ñeå theå hieän moät teân maø khoâng bò hieäu öùng
ñaëc bieät cuûa noù, ta caàn cho vaøo tröôùc noù moät kyù töï “” (backslash).
Chuù yù: caùc metacharacter duøng trong Shell khoâng cuøng yù nghóa vôùi caùc metacharacter
duøng trong caùc chöông trình soaïn thaûo.
Thí duï:
         $echo *            hieån thò taát caû caùc file trong thö muïc.
         $echo *.c          hieån thò taát caû caùc file coù teân keát thuùc baèng .c
         $echo *
         *

        $ls
        a.out
        try.o
        file1
        file1.c
        file5
        fileA

        $ls     *.c
        file1.c


                                                 44
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        $ls     *.*
        a.out
        try.o
        file1.c

        $ls     *.?
        try.o
        file1.c

         $ls      file[0-9]
         file1
         file5
Chuù yù: Caùc kyù töï metacharacter chæ coù taùc duïng trong phaàn cuûa doøng leänh, chuùng
khoâng coù taùc duïng trong phaàn ñoåi höôùng.
Thí duï:
         $echo hello > *.c
         $ls      *.c      lieät keâ caùc file coù teân keát thuùc baèng .c
         $ls      *.c     lieät keâ caùc file coù teân *.c
9.3.2 Kyù töï ~(tilde)
Kyù töï           ~        thay theá teân thö muïc tieáp nhaän
Hai kyù töï       ~+       thay theá teân thö muïc ñang laøm vieäc.
Hai kyù töï       ~_       thay theá teân thö muïc ta ñaõ ôû trong ngay tröôùc khi chuyeån sang
thö muïc hieän haønh.
Thí duï:
         $echo             ~          xem teân thö muïc tieáp nhaän
         /users/user1
         $cd      /etc                chuyeån ñeán /etc
         $pwd
         /etc
         $cd                          trôû veà thö muïc tieáp nhaän
         $pwd
         /users/user1
         $echo            ~_          xem teân thö muïc laøm vieäc ngay tröôùc khi chuyeån ñeán thö
                                      muïc hieän haønh
         /etc
         $echo            ~+          xem teân thö muïc laøm vieäc
         /users/user1

9.4 Laáy keát quaû cuûa moät leänh:
9.4.1 Laáy keát quaû cuûa moät leänh cho vaøo moät bieán
Trong shell_script, keát quaû cuûa moät leänh coù theå theå hieän baèng caùch sau:


                                                  45
Copyright(c) by Galaxy CD – http://www.galaxycd.com


         `leänh` hoaëc $(leänh)
Ta coù theå duøng caùch theå hieän treân ñeû gaùn noäi dung cho moät bieán.
Thí duï:
         $pwd
         /users/user1

        $YY = `pwd`
        $echo $YY
        /users/user1

         $var=$(pwd)
         $echo $var
         /users/user1
9.4.2 Laáy keát quaû cuûa moät leänh döôùi daïng caùc tham soá:
Leänh set cho pheùp laáy keát quaû cuûa moät leänh döôùi daïng caùc thoâng soá nhö sau:
         $1, $2, $3…………$[n]
Thí duï:
         $date
         Tue Jun          6        17:12:40          EET 1991
         $set date
         $echo $2
         Jun
         $echo $6
         1991

        $set $(ls)
        $echo ${11}

9.6 Caùc quy taéc thay theá cuûa Shell
9.5.1 Duøng caùc daáu nhaùy:
         ‘………’ Shell khoâng thöïc hieän pheùp thay theá caùc kyù töï trong daáu nhaùy ñôn
         “………” Shell thöïc hieän pheùp thay theá trong daáu nhaùy keùp caùc kyù töï: $  vaø `
Thí duï:
         $NOM=jean
         $echo nom=$NOM
         nom=jean                        thoâng dòch bieán

        $echo ‘nom=$NOM’
        nom=$NOM                            hieån thò khoâng thay theá

        $ echo “nom=$NOM”


                                                   46
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        nom=jean                            thoâng dòch bieán

        $echo *
        file1 file2 …                       thoâng dòch kyù töï *

        $echo “*”
        *                                     hieån thò khoâng thoâng dòch
Baûng toùm taét veà thoâng dòch caùc kyù töï ñaëc bieät trong caùc daáu nhaùy:
Daáu nhaùy ñöôïc                         Caùc kyù töï ñaëc bieät duøng trong daáu nhaùy
duøng                      ‘         ` hoaëc )            “                          $    *
        ‘                  f             n                n             n             n    n
    ` hoaëc $(            n               f               n             o             o    o
        “                 n              o                f             o             o    n
Trong ñoù:
        f = keát thuùc xaâu kyù töï
        o = kyù töï ñöôïc thoâng dòch (coù yù nghóa ñaëc bieät)
        n = kyù töï khoâng ñöôïc thoâng dòch (bình thöôøng)

Thí duï caùch söû duïng baûng toùm taét:
    - Kyù töï $ ñöôïc thoâng dòch nhö moät metacharacter khi noù ôû trong $() hoaëc “”, khi
        bieán ñöôïc thay theá baèngh giaù trò cuûa noù. Ngöôïc laïi, noù khoâng ñöôïc thoâng dòch
        khi ôû giöõa hai daáu nhaùy ñôn.
9.5.2 Thay theá ñuùp
Khi Shell laøm thao taùc thay theá noù queùt moät laàn doøng leänh vaø thay theá bieán coù $ ñaèng
tröôùc.
Ta coù theå laøm hai laàn ñoäng taùc queùt baèng duøng leänh eval cuûa Shell. Nhö vaäy leänh ñöùng
sau eval ñöôïc thay theá 2 laàn tröôùc khi chaïy.

Thí duï:
Shell_script last_argument hieån thò ñoái cuoái cuøng cuûa doøng leänh:
         $cat last_argument
         set     -x
         eval echo $”$#”
         $last_argument 1 A Z 3 F G
         + eval echo $6
         + echo G
         G
Baøi taäp:
1. Haõy vieát shell_script copy_file ñeå sao cheùp moät file cuûa moät ngöôøi söû duïng khaùc,
sau ñoù ñoåi nhoùm vaø ngöôøi söû duïng cuûa file sao.
Cuù phaùp:


                                                   47
Copyright(c) by Galaxy CD – http://www.galaxycd.com


          copy_file file1 file2 user group
Gôïi yù: söû duïng caùc leänh cp, chown, chgrp
2. Haõy vieát shell_script dup_file coù chöùc naêng nhö copy_file ôû treân nhöng teân caùc file,
teân ngöôøi söû duïng vaø teân nhoùm ñöôïc vaøo baèng hoûi ñaùp.
Gôïi yù: söû duïng leänh read vaø caùc bieán caàn thieát.




                                              48
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 10: Moâi tröôøng cuûa Shell

Noäi dung: caùc lôùp bieán cuûa Shell, caùch truyeàn bieán cho tieán trình.

10.1 Moâi tröôøng
Moâi tröôøng cuûa Shell chöùa moät soá bieán ñònh nghóa tröôùc. Leänh set cho pheùp lieät keâ
danh saùch caùc bieán cuûa moâi tröôøng (ñònh nghóa tröôùc hoaëc khi laøm vieäc).
       $set

10.2 Caùc bieán ñònh nghóa tröôùc
Döôùi ñaây laø danh saùch caùc bieán ñònh nghóa tröôùc thöôøng coù:
        HOME                       chöùa teân thö muïc tieáp nhaän
        LOGNAME                    teân ngöôøi söû duïng
        PATH                       teân ñöôøng daãn cho caùc leänh
        PS1                        daáu nhaéc thöù nhaát
        PS2                        daáu nhaéc thöù hai
        TERM                       kieåu terminal
        IFS                        danh saùch caùc daáu phaân caùch (seperator)
        FCEDIT EDITOR              chöông trình soaïn thaûo nhaät kyù (history)
        PPID                       soá cuûa tieán trình cha cuûa Shell
        PWD                        thö muïc hieän haønh
        SHELL                      teân Shell ñang duøng
        RANDOM                     soá ngaãu nhieân
        SECONDS                    thôøi gian laøm vieäc tính theo giaây

10.3 Caùc bieán chung (common)
10.3.1 Bieán xuaát
Shell khoâng töï thöïc hieän caùc leänh ta ñöa vaøo maø taïo ra moät shell con ñeå thöïc hieän caùc
leänh ñoù. Do ñoù caùc tieán trình con khoâng bieát ñeán caùc bieán ta duøng trong shell. Ñeå moät
bieán cuûa moät tieán trình coù theå duøng chung cho moïi tieán trình con cuûa noù, ta phaûi xuaát
(export) noù thaønh bieán duøng chung baèng caùch duøng leänh export
         $var=18
         $export var
Chuù yù:
     - khoâng coù khaùi nieäm nhaäp (import).
     - Moät bieán xuaát khi bò thay ñoåi giaù trò trong tieán trình con vaãn giöõ nguyeân giaù trò
         trong tieán trình cha.
Caùc bieán xuaát coù theå lieät keâ baèng duøng leänh:
         $env




                                                   49
Copyright(c) by Galaxy CD – http://www.galaxycd.com


10.3.2 Thöïc hieän moät shell_script trong shell cha:
Thöïc hieän moät shell_script trong shell cha cho pheùp noù thöøa keá söû duïng toaøn boä moâi
tröôøng cuûa shell cha:
Thí duï:
         $cat proc
         echo $var

       $VAR= ok                ñònh nghóa bieán var trong shell

       $proc                   moät shell con ñöôïc taïo ra vaø noù khoâng hieåu bieán VAR

       $.proc                  shell töï thöïc hieän leänh maø khoâng taïo shell con, bieán VAR
                               coù trong moâi tröôøng cuûa noù.




                                              50
Copyright(c) by Galaxy CD – http://www.galaxycd.com


Baøi 11 Laäp trình möùc cô sôû döôùi UNIX

Noäi dung: caùc pheùp thöû, so saùnh, caùc pheùp tính soá hoïc trong Shell, laäp trình caùc caáu
truùc coù ñieàu kieän, laäp trình caùc voøng laëp.

11.1 Caùc pheùp thöû (test) trong Shell
11.1.1 Giaù trò traû veà cuûa moät leänh
Sau khi moät leänh thöïc hieän xong, bao giôø cuõng coù moät giaù trò traû veà (return code). Giaù
trò naøy chöùa trong bieán $?.
Neáu moät leänh ñöôïc thöïc hieän toát, giaù trò traû veà laø 0 (true : ñuùng).
Neáu moät leänh khoâng ñöôïc thöïc hieän toát, giaù trò traû veà khaùc 0 (false: sai).
Thí duï:
         $cat fac
         cat: cannot open fac
         $echo $?
         2

         $cat file
         I am a file
         $echo $?
         0

Chuù thích: leänh exit[n] cho pheùp ra khoûi moät shell_script vôùi giaù trò traû laïi laø n.
11.1.2 Söû duïng leänh test:
+ Leänh test ñöôïc duøng ñeå laäp trình moät ñieàu kieän trong caáu truùc hoaëc trong voøng laëp:
Coù 3 tröôøng hôïp duøng leänh test:
    - kieåm tra tính chaùt cuûa caùc file
    - so saùnh giöõa caùc soá
    - kieåm tra caùc xaâu kyù töï
+ Cuù phaùp leänh test:
         test    expression
         hoaëc
         [expression]
Trong caùc thí duï sau ñaây, hai caùch duøng treân ñeàu ñöôïc söû duïng nhö nhau.

+Kieåm tra tính chaát caùc file:
Sau khi test, giaù trò traû veà laø 0 (true) hoaëc khaùc 0 (false)
       test     -f          filename          0        neáu file toàn taïi vaø laø file thöôøng
       [-d      filename]                     0        neáu file toàn taïi vaø laø file thö muïc
       [-r      filename]                     0        neáu file toàn taïi vaø chæ ñoïc ñöôïc



                                                     51
Copyright(c) by Galaxy CD – http://www.galaxycd.com


        test     -w      filename         0        neáu file toàn taïi vaø ghi ñöôïc
        test     -x      filename         0        neáu file toàn taïi vaø chaïy ñöôïc
        test     -s      filename         0        file toàn taïi vaø khoâng roãng (not empty)
        [file1   -ef     file2]           0        file1 vaø file2 lieân keát vôùi nhau
        [file1   -nt     file2]           0        neáu file1 môùi hôn file2
        [file1   -ot     file2]           0        neáu file1 cuõ hôn file2

        [-b      filename]                0        file toàn taïi vaø ñoïc ghi theo block
        [-c      filename]                0        file toàn taïi vaø ñoïc ghi theo kyù töï

+So saùnh giöõa caùc soá:
Cuù phaùp nhö sau:
         test      value1 operator            value2
Caùc toaùn töû so saùnh (operator) coù theå duøng:
         -eq       baèng (equal to)
         -ne       khoâng baèng (not equal to)
         -gt       lôùn hôn (greater than)
         -ge       lôùn hôn hoaëc baèng (greater or equal to)
         -lt       nhoû hôn (less than)
         -le       nhoû hôn hoaëc baèng (less or equal to)
Thí duï:
         $test “$A” -eq             “$B”
true neáu giaù trò cuûa bieán A baèng giaù trò cuûa bieán B

+Kieåm tra caùc xaâu kyù töï:
         [“str1” = “str2”]                ñuùng neáu str1 baèng str2
         test “str1” != “str2”            ñuùng neáu str1 khaùc str2
         test    -z       “$A”            ñuùng neáu xaâu $A roãng
         test    -n       “$A”            ñuùng neáu xaâu $A khoâng roãng
Thí duï:
         $test “$LOGNAME”                 !=       “user1”

+Keát hôïp caùc ñieàu kieän:
Caùc toaùn töû so saùnh coù theå keát hôïp vôùi:
         -a                vaø (and)
         -o                hoaëc (or)
         !                 ñaûo (negation)
         (…)             goäp (grouping)
Thí duï:
         $test (-r file1 -o -r file2 ) -a -w file3
         ñuùng neáu:


                                                 52
Copyright(c) by Galaxy CD – http://www.galaxycd.com


    - file1 vaø file2 toàn taïi vaø chæ ñoïc ñöôïc
    vaø
    - file 3 toàn taïi vaø ghi ñöôïc.

11.2 Laäp trình moät caáu truùc coù ñieàu kieän:
11.2.1 Caáu truùc coù ñieàu kieän :
a) if then else fi
         if        command1
         then command2
         else command3
         fi
Giaûi thích:
         Neáu giaù trò traû veà sau khi thöïc hieän command1 laø 0 (ñuùng) thì thöïc hieän
command2,
         neáu khoâng thì thöïc hieän command3
         keát thuùc
Thí duï:
         if        test    -f       file1
         then echo “file exists”
         else echo “file does not exist”
         fi
Chuù thích: khoâng baét buoäc phaûi duøng else
         if        [-w file1]
         then echo “message”               >> file1
         fi

b) Caáu truùc loàng (nested)
Ta coù theå loàng caùc caáu truùc ñieàu kieän vôùi nhau. Khi ñoù:
         else if           thaønh elif
Thí duï:
         if       test     -f        file1
         then echo “file exists”
                  elif     test      -d       file1
                  then echo “file is a directory”
         fi
trong tröôøng hôïp naøy fi laø chung.
Chuù yù: cuù phaùp sau cuõng coù theå duøng ñöôïc:
         if
         then
         else if
                  then


                                                     53
Copyright(c) by Galaxy CD – http://www.galaxycd.com


                 else
         fi
c) Caùc toaùn töû | | vaø &&
Trong tröôøng hôïp ñieàu kieän ñôn giaûn, coù theå duøng toaùn töû hoaëc logic | |, hoaëc toaùn töû vaø
logic && ñeå laäp trình caáu truùc.
         command1 && command2
         Neáu command1 ñöôïc thöïc hieän toát, thì thöïc hieän command2, neáu khoâng thì ra.

         command1 | | command2
         Neáu command1 ñöôïc thöïc hieän toát, thì ra, neáu khoâng, thì thöïc hieän command2.
Chuù yù: coù theå duøng daáu ngoaëc ñôn ñeå goäp caùc leänh
Thí duï:
         test      -d demo && echo “demo is a directory”
         test      -d demo | | echo “demo is not a directory”
         (test -d demo && ls -l demo) | | echo “demo not ok”
11.2.2 Reõ nhaùnh trong pheùp choïn moät trong nhieàu giaù trò:
Duøng caáu truùc:
         case in            esac
Caáu truùc treân cho pheùp choïn moät trong nhieàu xaâu kyù töï vaø thöïc hieän caùc leänh lieân quan
ñeán xaâu ñoù.
         case $variable             in
         string1)                   cmd1
                                    cmd2
                                    ……………
                                    ;;
         string2)                   cmd1
                                    cmd2
                                    ……………
                                    ;;
         string3 | string4)         commands
                                    ;;
         esac
Chuù yù: coù theå duøng caùc metacharacter cuûa shell ñeå bieåu dieãn xaâu kyù töï,
         | coù nghóa laø hoaëc

11.3 Laäp trình moät voøng laëp
11.3.1 Voøng laëp for
a) Caáu truùc:           for in do done
Caáu truùc naøy cuûa for cho pheùp thöïc hieän moät chuoãi leänh nhö nhau vôùi moãi moät giaù trò
trong danh saùch ñaõ cho. Soá caùc voøng laëp baèng soá caùc giaù trò trong danh saùch.
        for      variable         in      val1 val2 val3 …


                                                 54
Copyright(c) by Galaxy CD – http://www.galaxycd.com


       do      command1
               command2
               command3
               …………………
         done
Vôùi variable coù theå gaùn ñöôïc caùc giaù trò val1, val2… thöïc hieän caùc leänh command1,
command2, …
Thí duï: WRITE laø moät shell_script gôûi thoâng baùo tôùi 3 ngöôøi duøng user1, user2, user3:
         $cat WRITE
         for      i in user1 user2 user3
         do       write $I < message_file
         done
b) Caáu truùc : for do done
Caáu truùc naøy cho pheùp thöïc hieän moät chuoãi leänh nhö nhau vôùi caùc ñoái ($1 $2 …) cuûa
shell_script ñöôïc goïi.
         for      variable
         do       command1
                  command2
                  command3
                  …………………
         done
Vôùi variable coù theå gaùn ñöôïc caùc ñoái cuûa shell_scipt thöïc hieän caùc leänh command1,
command2, …
Thí duï:
Shell_script copy sao cheùp caùc file trong danh saùch ñoái vaøo danh muïc /users/user8 vaø
ñoåi nhoùm thaønh nhoùm student, ñoåi ngöôøi sôû höõu thaønh user8.
         $cat copy
         for i
         do if [-f $i]
               then cp $i /users/user8
                  chgrp student /users/user8/$i
                  chown user8 /users/user8/$i
               fi
         done

       $ls     -l
       total 10
       -rw-------      1 phil    animator 56       May 31 14:14:22       file1
       -rw-------      1 phil    animator 22       May 31 15:14:22       file2

       $copy file1     file2    toto


                                              55
Copyright(c) by Galaxy CD – http://www.galaxycd.com


       toto is not a file

         $ls       -l       /users/user8
         total 5
         -rw-------         1 phil animator 56 May 31 14:14:22 file1
         -rw-------         1 phil animator 22 May 31 15:14:22 file2
11.3.2 Voøng laëp while vaø until
a ) while do done
Voøng laëp while thöïc hieän moät chuoãi leänh khi ñieàu kieän vaãn coøn thoaû maõn.
         while command1
         do        command2
                   command3
                   command4
                   …………………
         done
Khi giaù trò traû veà cuûa vieäc thöïc hieän command1 vaãn thoaû maõn ñieàu kieän (true), shell
thöïc hieän tieáp chuoãi leänh giöõa do … done.
Hai leänh thöôøng duøng trong voøng laëp while:
         true hoaëc :                cho giaù trò true(0)
         sleep[n]                    ñôïi n giaây
Thí duï:
     - shell_script param hieån thò taát caû caùc ñoái cuûa leänh.
                   $cat param
                   while test        $#       -ne      0
                   do       echo $1
                            shift
                   done
     - shell_script disp_time hieån thò soá lieäu ngaøy thaùng theo khoaûng thôøi gian 30
         giaây.
                   $cat disp_time
                   while true                          hoaëc while :
                   do       date
                            sleep 30
                   done
b) until do done
Voøng laëp until hoaït ñoäng ngöôïc laïi vôùi voøng laëp while
         until command1
         do        command2
                   command3
                   command4
                   …………………


                                              56
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix
Giao Trinh Unix

Contenu connexe

En vedette

My Favorite Animals
My  Favorite AnimalsMy  Favorite Animals
My Favorite Animalsguest3dc99c
 
The Gaa In The Glens Of Antrim
The Gaa In The Glens Of AntrimThe Gaa In The Glens Of Antrim
The Gaa In The Glens Of Antrimmartinmccarry
 
Sun Knowledge Revenue Cycle Management Services
Sun Knowledge Revenue Cycle Management ServicesSun Knowledge Revenue Cycle Management Services
Sun Knowledge Revenue Cycle Management ServicesSun Knowledge
 
Mobile Restaurant
Mobile RestaurantMobile Restaurant
Mobile Restaurantsvijayen
 

En vedette (7)

Produktkatalog 2009
Produktkatalog 2009Produktkatalog 2009
Produktkatalog 2009
 
My Favorite Animals
My  Favorite AnimalsMy  Favorite Animals
My Favorite Animals
 
The Gaa In The Glens Of Antrim
The Gaa In The Glens Of AntrimThe Gaa In The Glens Of Antrim
The Gaa In The Glens Of Antrim
 
Adwords
AdwordsAdwords
Adwords
 
Caffeine Update Si Seo
Caffeine Update Si SeoCaffeine Update Si Seo
Caffeine Update Si Seo
 
Sun Knowledge Revenue Cycle Management Services
Sun Knowledge Revenue Cycle Management ServicesSun Knowledge Revenue Cycle Management Services
Sun Knowledge Revenue Cycle Management Services
 
Mobile Restaurant
Mobile RestaurantMobile Restaurant
Mobile Restaurant
 

Dernier

FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaransekolah233
 
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Eesti Loodusturism
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfمحاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfKhaled Elbattawy
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 

Dernier (8)

FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
 
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
Saunanaine_Helen Moppel_JUHENDATUD SAUNATEENUSE JA LOODUSMATKA SÜNERGIA_strat...
 
Energy drink .
Energy drink                           .Energy drink                           .
Energy drink .
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
 
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdfمحاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
محاضرات الاحصاء التطبيقي لطلاب علوم الرياضة.pdf
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
 

Giao Trinh Unix

  • 1. Copyright(c) by Galaxy CD – http://www.galaxycd.com Muïc luïc: PHAÀN 1: UNIX CÔ SÔÛ Baøi 1. Khôûi ñoäng UNIX 1.1 Baét ñaàu phieân laøm vieäc 1.2 Keát thuùc phieân laøm vieäc 1.3 Caùch duøng leänh cuûa UNIX Baøi 2. Laøm vieäc vôùi file. 2.1 Toå chöùc file 2.2 Di chuyeån giöõa caùc thö muïc 2.3 Caùc thao taùc cô sôû vôùi caùc thö muïc 2.4 Caùc thao taùc cô sôû vôùi file thöôøng Baøi 3. Baûo veä caùc file cuûa ngöôøi söû duïng 3.1 Moâ taû ngöôøi söû duïng 3.2 Moâ taû nhoùm ngöôøi söû duïng 3.3 Baûo veä caùc file vaø caùc thö muïc Baøi 4. Sao, chuyeån, lieân keát vaø tìm kieám file 4.1 Sao cheùp file 4.2 Chuyeån vaø ñoåi teân file 4.3 Taïo lieân keát vôùi file 4.4 Tìm kieám file Baøi 5. Thoâng tin giöõa nhöõng ngöôøi söû duïng 5.1 Thoâng tin baèng leänh mail 5.2 Thoâng tin baèng leänh write Baøi 6. Söû duïng chöông trình soaïn thaûo vi 6.1 Khôûi ñoäng vi 6.2 Soaïn thaûo vaên baûn Baøi 7. Shell script 7.1 Quaûn lyù tieán trình 7.2 Laäp caùch thöùc cho shell script 7.3 Caùc shell UNIX Baøi 8. Ñoåi höôùng (redirection) 8.1 Vaøo/ra chuan 8.2 Chuyeån ñoåi döõ lieäu giöõa caùc tieán trình 1
  • 2. Copyright(c) by Galaxy CD – http://www.galaxycd.com 8.3 Ñoåi höôùng keùp ñaàu ra chuaån Baøi 9. Cô cheá thay theá cuûa Shell 9.1 Truyeàn tham soá 9.2 Caùc bieán Shell 9.3 Caùc kí töï ñaëc bieät 9.4 Laáy keát quaû cuûa moät leänh 9.5 Caùc qui taéc thay theá cuûa Shell Baøi 10. Moâi tröôøng cuûa Shell 10.1 Moâi tröôøng 10.2 Caùc bieán ñònh nghóa tröôùc 10.3 Caùc bieán chung Baøi 11. Laäp trình möùc cô sôû döôùi UNIX 11.1 Caùc pheùp thöû trong Shell 11.2 Laäp trình moät caáu truùc coù ñieàu kieän 11.3 Laäp trình moät chu trình Baøi 12. Tín hieäu vaø ñoàng boä 12.1 Quaûn lyù caùc tín hieäu 12.2 Quaûn lyù caùc tieán trình 12.3 Ñeä qui PHAÀN 2 LAÄP TRÌNH C DÖÔÙI UNIX Baøi 1. Giôùi thieäu chung 1.1 Caùc lôøi goïi heä thoáng 1.2 Chuû thöïc vaø chuû thöïc quyeàn cuûa tieán trình 1.3 Ñònh nghóa caùc tham bieán chöông trình 1.4 Moät soá ñònh nghóa khaùc Baøi 2. Quaûn lyù tieán trình 2.1 Nhaän bieát tieán trình 2.2 Nhaän bieát chuû tieán trình 2.3 Thay ñoåi chuû vaø nhoùm chuû 2.4 Taïo moät tieán trình 2.5 Caùc haøm goïi moät tieán trình thay theá 2.6 Ñoàng boä tieán trình 2.7 Möùc öu tieân cuûa tieán trình 2.8 Nhoùm caùc tieán trình 2
  • 3. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 3. Quaûn lyù file 3.1 Môû moät file 3.2 Taïo moät file 3.3 Ñoùng file 3.4 Ñaët maët naï caùc quyeàn thaâm nhaäp file 3.5 Ñoïc file 3.6 Ghi file 3.7 Di chuyeån con troû file 3.8 Caáu truùc moät inode 3.9 Taïo moät inode 3.10 Thay ñoåi quyeàn thaâm nhaäp 3.11 Thay ñoåi chuû sôû höõu hoaëc nhoùm 3.12 Thay ñoåi thö muïc laøm vieäc 3
  • 4. Copyright(c) by Galaxy CD – http://www.galaxycd.com PHAÀN 1: UNIX CÔ SÔÛ Baøi 1. Khôûi ñoäng UNIX Noäi dung: Laøm quen vôùi heä ñieàu haønh UNIX. Baét ñaàu, keát thuùc phieân laøm vieäc, chaïy moät soá leänh ñaëc tröng. 1.1 Baét ñaàu phieân laøm vieäc: Baät coâng taéc nguoàn cuûa terminal (trong heä thoáng cuûa NLC laø Xterm sau khi duøng Exceed keát noái vôùi UNIX server), khoaûng moät giaây sau treân maøn hình hieän doøng thoâng baùo: Login: Haõy nhaäp vaøo teân (user name) khi keát thuùc baèng phím Enter. Neáu ngöôøi söû duïng coù duøng maät khaåu (passwor), treân maøn hình seõ hieän doøng: Password: Haõy vaøo maät khaåu cuûa mình vaø keát thuùc baèng phím Enter. Neáu teân (vaø maät khaåu neáu coù) ñöôïc vaøo ñuùng, terminal ñoù seõ ñöôïc noái vôùi maùy chuû vaø treân maøn hình seõ hieän kyù töï: $ ñoù laø daáu nhaéc cuûa Shell. Maät khaåu ñaûm baûo an toaøn cho moãi phieân laøm vieäc. Ta coù theå thay ñoåi maät khaåu baèng leänh passwd. Maät khaåu phaûi daøi ít nhaát 6 kyù töï, ít nhaát phaûi coù 2 kyù töï alphabet, phaûi khaùc vôùi teân (user name) ít nhaát 3 kyù töï, daøi toái ña 13 kyù töï. 1.2 Keát thuùc phieân laøm vieäc: AÁn CTRL + D (giöõ phím CTRL vaø goõ phím D) hoaëc goõ leänh $exit ñeå keát thuùc phieân laøm vieäc. 1.4 Caùch duøng leänh cuûa UNIX: - Cuù phaùp cô baûn ñeå chaïy moät leänh cuûa UNIX nhö sau: $teânleänh [-tuyø choïn][ñoái soá 1]…[ñoái soá n] Thí duï: wc laø leänh ñeám vaø hieån thò soá doøng, töø vaø kyù töï cuûa moät file. Ta coù theå chaïy leänh wc nhö sau $wc /etc/passwd 32 37 1139 etc/passwd $wc -l /etc/passwd 32 etc/passwd 4
  • 5. Copyright(c) by Galaxy CD – http://www.galaxycd.com $wc -ld /etc/passwd /etc/group 32 1139 etc/passwd 15 337 etc/group 47 1476 total - Caùc thoâng baùo loãi khi goïi leänh: Neáu leänh khoâng toàn taïi hoaëc khoâng tìm thaáy: $data data not found Neáu cuù phaùp cuûa leänh bò goõ sai: $wc -m /etc/group usage: wc [-clw][name…] Baøi taäp: Chuù yù: Kyù hieäu <CR> töôïng tröng cho vieäc goõ phím Enter. 1. Haõy baét ñaàu phieân laøm vieäc vôùi teân (username) cuûa baïn. 2. Ñôïi khi daáu nhaéc cuûa heä thoáng xuaát hieän (daáu $), goõ vaøo date<CR> 3. Gaùn maät khaåu cho teân: passwd<CR> 4. Lieät keâ teân nhöõng ngöôøi ñang söû duïng heä who<CR> 5. Xem ai laø ngöôøi ñang laøm vieäc taïi terminal: who am I<CR> whoami<CR> 6. Xem teân terminal maø ta ñang laøm vieäc treân ñoù: tty<CR> 7. Hieån thò caùc thoâng baùo leân maøn hình: echo “Xin chao” <CR> echo “Chao” <CR> echo “Dau nhac ket thuc boi $ xuat hien sau Chao” <CR> echo “Hom nay la ngay:”;date<CR> echo “Hai lenh tren 1 dong cach nhau boi dau ;” <CR> 8. Duøng leänh cal (lòch): cal 01 1900<CR> cal 01<CR> cal 1900<CR> cal 1900 | more<CR> 9. Moät vaøi leänh khaùc: logname<CR> 5
  • 6. Copyright(c) by Galaxy CD – http://www.galaxycd.com uname<CR> who | wc<CR> 10. Keát thuùc phieân laøm vieäc: Ctrl D (giöõ phím Ctrl vaø goõ D) hoaëc exit<CR> 6
  • 7. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 2. Laøm vieäc vôùi file Noäi dung: Caùc khaùi nieäm cô baûn veà file cuûa UNIX, toå chöùc cuûa caùc file treân ñóa, caùc thao taùc vôùi file. 2.1 Toå chöùc file: 2.1.1 Caùc kieåu file UNIX coù 3 kieåu file: -File bình thöôøng (ordinary file): laø moät taäp hôïp thoâng tin (ASCII text hoaëc binary). -File thö muïc (directory file): chöùa danh saùch caùc teâncoù theå truy nhaäp tôùi thí duï nhö caùc file bình thöôøng, caùc file ñaëc bieät hoaëc caùc thö muïc con. -File ñaëc bieät (special file): laø caùc file lieân quan tôùi caùc thieát bò ngoaïi vi cöùng vaø/hoaëc cô cheá truyeàn tin. Thí duï: Baøn phím laø moät file ñaàu vaøo(input file). Maøn hình laø moät file ñaàu ra (output file). Maùy in laø moät file ñaàu ra. 2.1.2 Toå chöùc cuûa caùc file Caùc file cuûa UNIX ñöôïc toå chöùc theo daïng caây (tree). Thö muïc goác (root) cuûa caây ñöôïc bieåu dieãn baèng kyù töï /. Caáu truùc caây cô sôû cuûa heä UNIX ñöôïc boá trí nhö sau: Kyù hieäu file bình thöôøng Kyù hieäu file thö muïc Kyù hieäu file ñaëc bieät / unix bin etc dev users usr user1 user2 Hình 1: Caáu truùc caây cô sôû cuûa UNIX 2.2 Di chuyeån giöõa caùc thö muïc: Ñeå di chuyeån giöõa caùc thö muïc trong caây cuûa UNIX, ta duøng 2 leänh sau ñaây: 7
  • 8. Copyright(c) by Galaxy CD – http://www.galaxycd.com cd chuyeån ñeán thö muïc caàn ñeán (change directory) pwd hieån thò teân thö muïc ñang laøm vieäc (print working directory) Taïi thôøi ñieåm baét ñaàu phieân laøm vieäc, ta ôû trong thö muïc tieáp nhaän (HOME directory). Muoán xem teân thö muïc tieáp nhaän naøy, ta duøng leänh pwd. Thí duï: user1 coù thö muïc tieáp nhaän laø /users/user1 $pwd /users/user1 Ñeå di chuyeån giöõa caùc thö muïc ta duøng leänh cd vôùi teân thö muïc caàn chuyeån ñeán. $cd /usr/bin $pwd /usr/bin $cd .. $pwd /usr Ñeå veà thö muïc tieáp nhaän khi ta ñang ôû baát kyø ñaâu, goõ: $cd $pwd /users/user1 2.3 Caùc thao taùc cô sôû vôùi thö muïc: 2.3.1 Xem noäi dung thö muïc: - Xem noäi dung thö muïc hieän ñang laøm vieäc: $ls - Xem noäi dung thö muïc khaùc, chaúng haïn thö muïc /bin: $ls /bin - Xem theâm thoâng tin cuûa caùc file trong thö muïc: $ls -l hoaëc $ll - Xem teân caùc file trong thö muïc theo coät: $lc Khi duøng leänh ls –l ta coù theå phaân bieät caùc kieåu file baèng caùch xem kyù töï ñaàu cuûa doøng hieån thò, neáu laø: d : file thö muïc. - : file bình thöôøng c hoaëc b : file ñaëc bieät 2.3.2 Taïo thö muïc: Ñeå taïo moät thö muïc môùi, ta duøng leänh mkdir (make directory): $mkdir index $cd index 8
  • 9. Copyright(c) by Galaxy CD – http://www.galaxycd.com $ls -a . .. Leänh mkdir taïo moät thö muïc vôùi 2 ñaàu vaøo (entry) - baûn thaân thö muïc coù teân ñaõ cho. - thö muïc . lieân heä vôùi thö muïc ñöôïc taïo ôû treân - thö muïc . . lieân heä vôí thö muïc cha. 2.3.3 Xoùa thö muïc: Ñeå xoaù moät thö muïc ta duøng leänh rmdir (remove directory): $rmdir index Neáu muoán xoaù thö muïc khoâng roãng, phaûi duøng leänh rm vôùi tuyø choïn r $rm -ri thumuc 2.4 Caùc thao taùc cô sôû vôùi file thöôøng: 2.4.1 Nhaän bieát moät file thöôøng: Leänh file phaân tích noät dung cuûa moät file vaø hieån thò tính chaát cuûa thoâng tin chöùa trong file: $file /etc/passwd /etc/passwd: ascii text $file /bin/ls /bin/ls: 680x0 executable 32 bits page aligned striped 2.4.2 Xem noäi dung moät file thöôøng ASCII: Coù theå duøng moät trong caùc leänh sau: cat duøng ñeå xem noäi dung caùc file nhoû. pg hoaëc more xem noäi dung caùc file lôùn theo trang. $cat teân file $pg teân file $more teân file 2.4.3 Taïo moät file thöôøng ASCII Taïi Shell cuûa UNIX ta coù theå deã daøng taïo moät file thöôøng ASCII text baèng caùch duøng leänh cat $cat >text_file abcdef 123456 <Ctrl + D> $ 9
  • 10. Copyright(c) by Galaxy CD – http://www.galaxycd.com - Kyù töï ‘>’ ñoåi höôùng, thay vì ñeán ñaàu ra chuaån (standard output) ‘ ‘ ñeán file ñöôïc quy ñònh ngay sau ‘>’. ÔÛ ñaây caùc kyù töï goõ vaøo ñöôïc ghi vaøo file ‘text_file’. - Leänh cat, neáu khoâng coù ñoái soá (argument), seõ coi baøn phím laø ñaàu vaøo chuaån. - Goõ <Ctrl + D> taïi doøng troáng cuoái cuøng keát thuùc vieäc vaøo soá lieäu. < (1) > Stdin KEYBOARD cat FILE stdout CONSOLE stderr 2> Hình 2 : ñoåi höôùng ñaàu vaøo/ra chuaån Caùch vieát teân file khi taïo file: - ñoä daøi + teân file cuûa UNIX sys V daøi toái ña 14 kyù töï + teân file cuûa BERKELEY, baét ñaàu töø version BSD 4.2. coù theå daøi ñeán 256 kyù töï. - khoâng coù söï haïn cheá duøng kyù töï naøo khi vieát teân file, song ta caàn chuù yù vaøi ñieåm sau: + khoâng duøng caùc kyù töï ñaëc bieät (tröø daáu chaám ‘.’ hoaëc daáu gaïch döôùi ‘_’) vì phaàn lôùn caùc kyù töï ñoù ñöôïc duøng trong cuù phaùp cuûa leänh Shell. + file coù teân baét ñaàu baèng daáu chaám ‘.’ laø file aån (hidden). + kyù töï vieát thöôøng khaùc vôùi vieát hoa. Vieát teân file baèng caùch duøng caùc metacharacter (? Vaø *) - kyù töï ‘*’ thay theá moät xaâu kyù töï - kyù töï ‘?’ thay theá moät kyù töï Thí duï: $ll /bin/c* $ll /bin/c? 2.4.4 Xoaù moät file thöôøng: Leänh : rm Coù theå duøng leänh rm vôùi caùc tuyø choïn sau: -i coù hoûi ñaùp ñeå khaúng ñònh -f khoâng coù hoûi ñaùp. Tuyø choïn naøy raát nguy hieåm, chæ nhöõng ngöôøi söû duïng coù kinh nghieäm vaø caån thaän môùi neân duøng. $rm text_file $rm -i text_file 10
  • 11. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi taäp: 1. Xem teân thö muïc ñang laøm vieäc: pwd<CR> 2. Xem noäi dung cuûa thö muïc ñang laøm vieäc: ls –l<CR> 3. Taïo file vaên baûn tintin: cat > tintin<CR> blabla<CR> BLABLA<CR> end<CR> CTRL + D (giöõ phím Ctrl vaø goõ phím D) 4. Xem noäi dung file tintin: cat tintin<CR> 5. Xem noäi dung caùc thö muïc /bin /usr/bin /dev ll /bin<CR> hoaëc ls -C /bin hoaëc ll /bin | pg 6. Taïo 2 thö muïc d1 vaø d2 mkdir d1 d2<CR> 7. Chuyeån thö muïc laøm vieäc ñeán d1 8. Taïo moät file trong thö muïc d1 9. Trôû veà thö muïc tieáp nhaän (HOME directory) cd<CR> 10. Xem noäi dung thö muïc ñang laøm vieäc: ls -l hoaëc ll ls ll -R (xem noäi dung caû caùc thö muïc con) lc 11. Xoaù thö muïc d1: rm d1/* rmdir d1 Hoaëc rm -ri d1 11
  • 12. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 3. Baûo veä caùc file cuûa ngöôøi söû duïng: Noäi dung : moâ taû cô cheá baûo veä file cuûa UNIX : ngöôøi söû duïng, nhoùm ngöôøi söû duïng, caùc quyeàn thaâm nhaäp file 3.1 Moâ taû ngöôøi söû duïng: 3.1.1 Khaùi nieäm : Moät ngöôøi söû duïng ñöôïc moâ taû baèng caùc thoâng tin sau: - teân - [maät khaåu (neáu coù] - soá nhaän daïng (uid : user identify number) - soá cuûa nhoùm (gid : group identify number) - [chuù thích] - thö muïc tieáp nhaän (HOME directory) - [teân chöông trình cho chaïy luùc baét ñaàu teân laøm vieäc] Caùc thoâng tin treân ñöôïc chöùa trong file /etc/passwd 3.1.2 Leänh defuser: Leänh naøy ôû trong danh muïc /etc, noù cho pheùp: - hieån thò danh saùch nhöõng ngöôøi söû duïng. - theâm ngöôøi söû duïng môùi (chæ nhöõng ngöôøi quaûn trò heä thoáng coù quyeàn) $cat /etc/passwd | pg root : RKgSspHwm.PB.:0:3:0000-Admin000,,,:/: date::18:1::/:/bin/date tty::19:1::/:/bin/tty user1::3000:300::/users/user1: user2::3001:300::/users/user2: $/etc/defuser | pg USER UID GID HOMEDIR SHELL root 0 3 / daemon 1 12 / bin 2 2 /bin sys 3 3 /usr adm 4 4 /usr/adm date 18 1 / /bin/date tty 19 1 / /bin/tty sync 20 1 / /bin/sync securadm 11 11 /etc/secure/bin lp 71 2 /usr/spool/lp user1 3000 300 /users/user1 /bin/ksh 12
  • 13. Copyright(c) by Galaxy CD – http://www.galaxycd.com user2 3001 300 /users/user2 /bin/ksh 3.2 Moâ taû nhoùm ngöôøi söû duïng 3.2.1 Khaùi nieäm : Moät nhoùm ngöôøi söû duïng laø taäp hôïp cuûa moät soá ngöôøi söû duïng coù theå duøng chung caùc file cuûa nhau. Moät nhoùm ngöôøi söû duïng ñöôïc moâ taû baèng caùc thoâng tin sau: - teân cuûa nhoùm - [maät khaåu] - soá cuûa nhoùm (gid : group identify number) - [danh saùch nhöõng ngöôøi khaùch (guest)] Caùc thoâng tin treân ñöôïc chöùa trong file /etc/group 3.2.2 Leänh defgrp: Leänh naøy ôû trong thö muïc /etc, noù cho pheùp: - hieån thò danh saùch caùc nhoùm ngöôøi söû duïng. - theâm nhoùm môùi (chæ ngöôøi quaûn trò heä thoáng môùi coù quyeàn). $cat /etc/group public :: 100 : invite animator :: 200 : stagiaires :: 300 : $/etc/defgrp GRP GID USERS root 0 root other 1 date sync shut bin 2 root bin daemon lp sys 3 root bin sys adm adm 4 root adm daemon uucp 5 uucp daemon 13
  • 14. Copyright(c) by Galaxy CD – http://www.galaxycd.com nuucp mail 6 root … 3.3 Baûo veä caùc file vaø caùc thö muïc 3.3.1 Caùc quyeàn thaâm nhaäp file: Khi file ñöôïc taïo laäp, caùc thoâng tin sau ñaây ñoàng thôøi ñöôïc ghi laïi: - uid cuûa ngöôøi taïo file - gid cuûa ngöôøi taïo file - caùc quyeàn thaâm nhaäp file … File ñöôïc baûo veä bôûi moät taäp hôïpc caùc bit ñònh nghóa quyeàn thaâm nhaäp: r w x r w x r w x suid sgid owner group other Trong ñoù: r quyeàn ñoïc w quyeàn ghi x quyeàn chaïy (executing) suid set user-id sgid set group-id Ñoái vôùi thö muïc: r quyeàn ñoïc noäi dung thö muïc w quyeàn taïo vaø xoaù file trong thö muïc x quyeàn qua laïi (crossing) thö muïc Ghi chuù: caùc quyeàn vôùi thö muïc chæ coù hieäu löïc taïi moät möùc nhaát ñònh, thö muïc con coù theå ñöôïc baûo veä trong khi thö muïc cha thì khoâng. 3.3.2 Leänh ls -l Leänh naøy lieät keâ danh saùch caùc file vaø caùc thuoäc tính cuûa chuùng trong moät thö muïc, qua ñoù ta coù theå phaùt hieän loaïi file, caùch baûo veä, ngöôøi sôû höõu, vaø kích thöôùc cuûa chuùng… Thí duï: Caùc file thöôøng (ordinary files): $ls -l /bin -rwxrwxr-x 1 bin bin 16336 Mar 8 1988 cat -rwxrwxr-x 3 root bin 16124 Mar 8 1988 cp -rwxrwxr-x 1 bin bin 18760 Mar 8 1988 cat -rwxrwxr-x 1 bin bin 13320 Mar 8 1988 echo -rwxrwxr-x 2 bin bin 33896 Mar 8 1988 ed -rwxrwxr-x 1 bin bin 28928 Mar 8 1988 file -rwxrwxr-x 3 root bin 16124 Mar 8 1988 ln 14
  • 15. Copyright(c) by Galaxy CD – http://www.galaxycd.com -rwxrwxr-x 8 bin bin 60152 Mar 8 1988 ls -rwxr-sr-x 1 bin mail 63264 April 2 1988 mail -rwxrwxr-x 1 bin bin 15276 Mar 8 1988 mesg -rwxr-xr-x 1 root bin 13180 Mar 8 1988 mkdir … Trong ñoù: Coät 1 : loaïi file vaø quyeàn thaâm nhaäp (-rwxrwxr-x, rwxr-xr-x…) Daáu tröø ‘-‘ ôû ñaàu coù nghóa file laø file thöôøng (khoâng phaûi thö muïc). Daáu tröø ôû trong daõy bit coù nghóa laø khoâng coù quyeàn töông öùng bit ñoù. Ñeå tieát kieäm choã, ngöôøi ta ñaët bit s vaøo cuøng moät nôi vôùi bit x vaø kyù hieäu: - s neáu x toàn taïi - S neáu X khoâng toàn taïi. (bit s : set uid hoaëc set gid khi chaïy file) Coät 2 : soá lieân keát (link number) Coät 3 : teân ngöôøi sôû höõu file (owner) Coät 4 : teân nhoùm sôû höõu file (group) Coät 5 : kích thöôùc file. Coät 6,7,8 : ngaøy söûa ñoåi gaàn nhaát Coät 9 : teân file. Caùc file ñaëc bieät (Special files): $ll /dev crw------- 1 lp bin 8.97 May 6 1988 lp1 crw-rw-rw- 2 root sys 3,2 Apr 3 09:08 null brw-r----- 3 root sys 0,96 Apr 3 08:54 pd300 . . crw-rw-rw- 4 root sys 4,012 May 6 1988 rflop . . crw--w--w- 2 root other 1,17 Mar 2 07:57 tty11 Trong ñoù: Coät 1: Kyù töï ñaàu tieân laø c hoaëc b coù nghóa laø file ñöôïc ñoïc hoaëc ghi theo töøng kyù töï (c) hoaëc ghi theo töøng khoái (b). Coät 5: Bieåu dieãn majo vaø minor cuûa thieát bò (major: loaïi thieát bò, minor: ñòa chæ cuûa thieát bò) Caùc file thö muïc (directory files): $ll /users drwxr-xr-x 2 user1 stagiair 240 Mar 31 10:16 user1 15
  • 16. Copyright(c) by Galaxy CD – http://www.galaxycd.com drwxr-xr-x 2 user2 stagiair 32 Mar 31 11:16 user1 drwxr-xr-x 2 user3 stagiair 24 Mar 31 10:16 user1 drwxr-xr-x 2 user4 stagiair 32 Mar 31 11:16 user1 trong ñoù: Coät 1: Kyù töï ñaàu tieân d coù nghóa laø file thö muïc. Coät 2: Soá caùc thö muïc con 3.3.3 Thay ñoåi quyeàn thaâm nhaäp file: Leänh chmod cho pheùp thay ñoåi quyeàn thaâm nhaäp caùc file vaø thö muïc. Coù theå chaïy leänh theo 2 caùch: - cho thoâng soá tuyeät ñoái: chmod mode teân_file trong ñoù thoâng soá mode laø moät soá cô soá 8 (octal) r w x r - x r - - 1 1 1 1 0 1 1 0 0 7 5 4 $chmod 754 teân_file - duøng caùc kyù hieäu töôïng tröng: chmod who [operation] [right] filename trong ñoù: who : u coù nghóa user g group o other a all operation: + theâm quyeàn - bôùt quyeàn = gaùn giaù trò khaùc right: r reading w writing x execution s ñaët suid hoaëc guid Thí duï: $chmod g-w, o = r toto 3.3.4 Ñaët quyeàn thaâm nhaäp ngaàm ñònh: Caùc quyeàn thaâm nhaäp ñöôïc gaùn baèng maët naï quyeàn thaâm nhaäp cuûa töøng ngöôøi söû duïng. Leänh umask cho pheùp ta ñaët maët naï naøy. Cuù phaùp cuûa leänh nhö sau: umask nnn trong ñoù: nnn laø soá buø 7 cuûa giaù trò caùc quyeàn thaâm nhaäp. Thí duï: $umask 177 16
  • 17. Copyright(c) by Galaxy CD – http://www.galaxycd.com $> titi $ll titi -rw------- 1 user1 other 0 Mar 11 10:11 titi $umask 333 $>toto $ll toto -r--r--r-- 1 user1 other 0 Mar 11 20:11 toto 3.3.5 Thay ñoåi ngöôøi hoaëc nhoùm sôû höõu file: Leänh chown cho pheùp thay ñoåi ngöôøi sôû höõu. Leänh chgrp cho pheùp thay ñoåi nhoùm sôû höõu. $echo Hello >file1 $chmod 700 file1 $ls -l file1 -rwx------ 1 user1 stagiair 6 Apr 5 14:06 file1 $cat file1 Hello $chgrp animator file1 $ls -l file1 -rwx------ 1 user1 animator 6 Apr 5 14:06 file1 $chown user2 file1 $ls -l file1 -rwx------ 1 user2 animator 6 Apr 5 14:06 file1 $cat file1 cat: cannot open file1 Baøi taäp: 1. Haõy taïo chöông trình sau trong thö muïc tieáp nhaän: - chöông trình “hello”: $cat > hello print ”Hello” print “How are you ?” ^D - chöông trình reply: $cat > reply print “Hello” print “Fine. And you ?” ^D 2. Xem quyeàn thaâm nhaäp vaøo caùc file treân: ll -R 3. Chaïy 2 chöông trình treân. 17
  • 18. Copyright(c) by Galaxy CD – http://www.galaxycd.com Ñaët quyeàn chaïy ñöôïc (executable) cho 2 files treân. Chaïy laïi 2 chöông trình treân. $hello $chmod +x hello $hello 4. Boû caùc quyeàn thaâm nhaäp tôùi hello vaø reply cuûa nhöõng ngöôøi cuøng nhoùm (group) vaø cuûa nhöõng ngöôøi khaùc (other) chmod go = teân file Coù theå duøng leänh chmod theo caùch khaùc ñöôïc khoâng ? Haõy thöû vôùi caû caùc file khaùc (g-rwx, o-rwx, 700 …) 5. Thay ñoåi quyeàn thaâm nhaäp sao cho nhöõng ngöôøi cuøng nhoùm coù khaû naêng ñoïc vaø chaïy caùc file hello vaø reply 6. Haõy thöû thay ñoåi ngöôøi hoaëc nhoùm sôû höõu cuûa moät file: chown userY file Khi ñoù file seõ thuoäc sôû höõu cuûa ngöôøi khaùc. Coù theå xoaù ñöôïc khoâng ? 7. Haõy laøm theo höôùng daãn sau: cat > rm echo Hello ^D ñeå taïo file rm, sau ñoù söûa quyeàn thaâm nhaäp ñeå file coù theå chaïy ñöôïc: chmod +x rm thöû chaïy file rm ñeå xoaù moät file naøo ñoù ñang toàn taïi: rm file Ñieàu gì seõ xaûy ra? KHOÂNG BAO GIÔØ ÑÖÔÏC ÑAËT TEÂN FILE TRUØNG VÔÙI TEÂN LEÄNH HEÄ THOÅNG. (CHUÙ YÙ: test cuõng laø moät leänh cuûa heä thoáng) 18
  • 19. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 4: Sao cheùp, chuyeån, lieân keát vaø tìm kieám file. Noäi dung: caùc thao taùc, caùc leänh thöôøng duøng vôùi file 4.1 Sao cheùp file Leänh cp (copy) cho pheùp ta sao cheùp moät hoaëc nhieàu file: - sao cheùp moät file: $cp file_nguoàn file_ñích - sao cheùp nhieàu file vaøo moät thö muïc: $cp file1 file2… thö_muïc - sao taát caû caùc file vaøo moät thö muïc: $cp * thö_muïc Thí duï: $pwd /users/user2 $ls -l total 2 drwxrwxr-x 2 user2 stagiair 32 Apr 5 16:31 copie drwxrwxr-x 2 user2 stagiair 96 Apr 5 16:31 source $cd source $ls -l total 3 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1 -rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2 -rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3 $ls -l ../copie total 0 $cp original1 ../copie/original1.copie $ls -l ../copie total 1 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.copie $cp * ../copie 19
  • 20. Copyright(c) by Galaxy CD – http://www.galaxycd.com $cd ../copie $ls -l total 4 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.copie -rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2 -rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3 4.2 Chuyeån vaø ñoåi teân file: Leänh mv cho pheùp chuyeån vaø ñoåi teân file: - chuyeån moät file: $mv file_nguoàn file_ñích - chuyeån nhieàu file: $mv file1 file2 … thö_muïc $mv * thö_muïc - chuyeån thö muïc: $mv thö_muïc1 thö_muïc2 (caùc thö muïc phaûi coù cuøng thö muïc con) Thí duï: $pwd /users/user2/source $ls -l total 3 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1 -rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2 -rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3 $mv original1 original1.bis $ls -l total 3 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.bis -rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2 -rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3 $cd .. 20
  • 21. Copyright(c) by Galaxy CD – http://www.galaxycd.com $pwd /users/user2 $ls -l total 2 drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 copie drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 source $mv source replace $ls -l total 2 drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 copie drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 replace $ls -l replace total 3 -rw-rw-r-- 1 user2 stagiair 16 Apr 5 16:25 original1.bis -rw-rw-r-- 1 user2 stagiair 17 Apr 5 16:26 original2 -rw-rw-r-- 1 user2 stagiair 18 Apr 5 16:27 original3 4.3 Taïo lieân keát vôùi file: Taïo lieân keát vôùi file laø taïo theâm cho file teân môùi vaø ñöôøng daãn töông öùng. Leänh ln cho pheùp ta laøm vieäc treân. $ln file_nguoàn file_ñích Baèng leänh ls -l, ta coù theå xem soá lieân keát cuûa file. Leänh rm duøng ñeå xoùa moät lieân keát. Muoán xoaù moät file, ta phaûi xoaù taát caû caùc lieân keát cuûa noù. Thí duï: $pwd /users/user2 $ls -l total 2 drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:20 appli drwxrwxr-x 2 user2 stagiair 96 Apr 4 10:21 source $ls -l appli total 1 -rw-rw-r-- 1 user2 stagiair 71 Apr 5 17:05 file1 $ln appli/file1 file.link 21
  • 22. Copyright(c) by Galaxy CD – http://www.galaxycd.com $ls -l appli total 1 -rw-rw-r-- 2 user2 stagiair 71 Apr 5 17:05 file1 $ls -l file.link total 1 -rw-rw-r-- 2 user2 stagiair 71 Apr 5 17:05 file.link 4.4 Tìm kieám moät file Leänh find cho pheùp tìm moät hay nhieàu file trong caây thö muïc. Ta coù theå: - Tìm theo teân: $find ñöôøng_daãn -name teân_file -print - Tìm theo soá i-node (i-num) cuûa file: $find ñöôøng_daãn -inum number -print - Tìm theo teân ngöôøi sôû höõu: $find pathname -user username -print Ñeå traùnh caùc thoâng baùo loãi ñöa ra maøn hình, ta coù theå ñoåi höôùng ñaàu ra loãi chuaån (standard error) tôùi moät file khoâng (/dev/null) $find / -name filename -print 2> /dev/null Thí duï: $pwd /users/user1 $find / -name ttyc2d1 -print 2> /dev/null /dev/ttyc2d1 $ls -i /unix 2810 -r-xr--r-- 2 bin bin 508516 Mar 10 1989 /unix $find / -inum 2810 -print 2> /dev/null /unix /makesys/root/unix $pwd /users/user1 $find /users -user -user1 -print /users/user1 /users/user1/res1 /users/user1/res 22
  • 23. Copyright(c) by Galaxy CD – http://www.galaxycd.com /users/user1/file1 $ll total 3 -rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:41 res1 -rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:42 res -rw-rw-r-- 1 user1 stagiair 75 Oct 18 11:43 file1 Baøi taäp: 1. Taïo 2 files file1 vaø file2 trong thö muïc tieáp nhaän. 2. Sao caùc file ñoù vaøo caùc file file?.old cp file1 file1.old 3. Taïo caùc thö muïc src vaø bin mkdir src bin 4. Sao caùc file file1 vaø file2 vaøo thö muïc src, caùc file file?.old vaøo thö muïc bin. 5. Xoaù caùc file trong thö muïc tieáp nhaän. 6. Sao caùc files file1, file2, file1.old vaø file2.old trôû laïi thö muïc tieáp nhaän. 7. Ñeå laøm tieáp caùc phaàn sau, caàn toå chöùc caùc file nhö sau: - file1 vaø file2 ôû trong thö muïc bin - file1.old vaø file2.old ôû trong thö muïc src vaø - khoâng coù file naøo ôû trong thö muïc tieáp nhaän. Taïo moät lieân keát teân laø file3 trong thö muïc tieáp nhaän vôùi file1 trong thö muïc bin cd ln /users/userX/bin/file1 /users/userX/file3 8. Lieät keâ 2 file file1 vaø file3 ll -i /users/userX/bin/file1 /users/userX/file3 Ta coù nhaän xeùt gì veà nhöõng thoâng tin ñöôïc ñöa ra maøn hình ? 9. Haõy xoaù file3 vaø kieåm tra xem noù ñaõ bò xoaù chöa, xem ñieàu gì xaûy ra vôùi file1? Haõy giaûi thích. 10. Leänh chuyeån file (mv) cho pheùp ñoåi teân moät file. Haõy sao file file2.old trong thö muïc src vaøo file file4/ 11. Haõy tìm file vi find / -name vi -print 2> /dev/null 12. Xem giaù trò i-num cuûa file vi (duøng ll vôùi tuyø choïn –l) 13. Tìm taát caû caùc file coù cuøng giaù trò i-num vôùi vi. 23
  • 24. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 5: Thoâng tin giöõa nhöõng ngöôøi söû duïng Noäi dung: giôùi thieäu caùc leänh duøng ñeå truyeàn vaø nhaän tin mail, write 5.1 Thoâng tin baèng leänh mail 5.1.1 Gôûi thö Leänh mail cho pheùp gôûi thö cho ngöôøi khaùc. Vieäc gôûi khoâng phuï thuoäc vaøo ngöôøi nhaän ñang trong phieân laøm vieäc hay khoâng. $mail user1 message written-out Ctrl-D $ 5.1.2 Nhaän thö: Khi baét ñaàu phieân laøm vieäc, neáu ta coù thö, treân maøn hình seõ hieän doøng thoâng baùo “you have mail”. Trong quaù trình laøm vieäc, SHELL seõ laøm coâng vieäc kieåm tra thö ñeán theo moät chu kyø thôøi gian ñònh tröôùc. Ñeå xem hoäp thö, ta duøng leänh mail khoâng coù ñoái. Thí duï: - gôûi thö cho ngöôøi khaùc: $whoami user2 $mail user3 you can read my files CTRL-D $ - nhaän thö bmw Welcom on DPX/2 login : user3 B.O.S you have mail $mail From user2 Fri Mar 7 12:07 EET 1992 you can read my files ?h usage q quit x exit without changing mail 24
  • 25. Copyright(c) by Galaxy CD – http://www.galaxycd.com p print s [file] save (default mailbox) w [file] same without header - print previous d delete + [user] mail to user !cmd execute cmd ?q $ Chuù yù: Ñaàu thö (header) coù theå bò thay ñoåi khi laøm vieäc treân maïng. 5.3 Thoâng tin baèng leänh write Leänh write cho pheùp gôûi thoâng baùo töùc thôøi tôùi nhöõng ngöôøi khaùc ñang trong phieân laøm vieäc. $write user2 hello my friend how are you CTRL – D $ Leänh wall cho pheùp gôûi thoâng baùo tôùi taát caû nhöõng ngöôøi ñang laøm vieäc trong heä. Leänh write ghi thoâng tin tröïc tieáp leân maøn hình neân coù theå gaây nhieãu cho coâng vieäc maø ngöôøi nhaän ñang laøm. Ñeå traùnh laøm vieäc ñoù coù theå duøng leänh mesg vôùi tuyø choïn n. $mesg … 25
  • 26. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 6: Söû duïng chöông trình soaïn thaûo vi möùc cô sôû Noäi dung: giôùi thieäu chöông trình soaïn thaûo vi, cung caáp moät soá kieán thöùc cô sôû ñeå coù theå soaïn thaûo ñöôïc vaên baûn hay chöông trình. 6.1 Khôûi ñoäng vi 6.1.1 Giôùi thieäu chung: vi (vieát taét cuûa Video Interactif) laø chöông trình soaïn thaûo vaên baûn theo trang maøn hình: - Maøn hình ñöôïc xem nhö moät cöûa soå môû treân file. - Coù khaû naêng di chuyeån cursor tôùi baát kyø nôi naøo treân maøn hình. - Cöûa soå coù theå di chuyeån töï do treân file. Ñeå hieån thò ñuùng, vi caàn bieát kieåu terminal ñang duøng. Ta coù theå ñònh nghóa ñöôïc kieåu terminal baèng caùch gaùn gía trò cho bieán moâi tröôøng TERM: Thí duï: $TERM=tws2103;export TERM Phaàn lôùn caùc phím ñöôïc duøng ñoäc laäp hoaëc keát hôïp vôùi phím SHIFT vaø CTRL ñeå taïo caùc leänh cuûa vi. Khi moät leänh bò goõ sai, vi baùo hieäu baèng nhaùy maøn hình, keâu beep hoaëc thoâng baùo loãi. Chöông trình vi ñöôïc xaây döïng töø chöông trình soaïn thaûo doøng ex. Caùc leänh cuûa ex coù theå ñöôïc goïi khi coù daáu “:” ôû doøng cuoái maøn hình. 6.1.2 Baét ñaàu duøng vi Ta coù theå goïi vi vôùi teân file vaên baûn: $vi teân_file Cöûa soå soaïn thaûo seõ ñöôïc môû taïi ñaàu file. Neáu file chöa toàn taïi, noù seõ ñöôïc taïo bôûi leänh ghi. Doøng cuoái cuøng treân maøn hình ñöôïc duøng cho nhöõng vieäc sau: - vaøo caùc leänh, - thoáng keâ, - baùo loãi. Ñoái vôùi nhöõng ngöôøi môùi duøng vi, coù theå duøng version khaùc cuûa vi: $vedit teân_file version naøy cuûa vi seõ hieän thoâng baùo INPUT MODE khi ta ñang trong cheá ñoä nhaäp vaên baûn. Khi ta chæ muoán xem noäi dung cuûa moät file, duøng: $view teân_file. version naøy cuûa vi môû file chæ ñeå ñoïc, cho pheùp ta xem ñöôïc noäi dung maø traùnh ñöôïc nguy cô file bò thay ñoåi. 26
  • 27. Copyright(c) by Galaxy CD – http://www.galaxycd.com 6.1.2 Ra khoûi vi: Muoán ra khoûi vi vaø ghi file coù theå duøng moät trong caùc caùch sau: ZZ hoaëc :w sau ñoù :q hoaëc :wq hoaëc :x Ra khoûi vi vaø khoâng ghi file: :q (neáu khoâng coù söûa ñoåi) hoaëc :q! Khi ñang trong vi, muoán laøm vieäc vôùi SHELL, ta coù theå laøm nhö sau: - chaïy moät leänh cuûa SHELL :!leänh - hoaëc goïi SHELL, sau ñoù chaïy caùc leänh ta muoán, khi keát thuùc aán CTRL-D ñeå trôû laïi vi: :!sh $leänh $CTRL-D 6.2 Soaïn thaûo vaên baûn: 6.2.1 Xen vaên baûn: - xen kyù töï treân moät doøng: a <text> <ESC> Xen kyù töï vaøo sau cursor. Leänh khoâng ñöôïc hieån thò treân maøn hình. ESC: Keát thuùc cheá ñoä xem. i <text> <ESC> Xen kyù töï vaøo tröôùc cursor. A <text> <ESC> Xen kyù töï vaøo cuoái doøng. I <text> <ESC> Xen kyù töï vaøo ñaàu doøng. - xen doøng: o <text> <ESC> Xen moät doøng vaøo tröôùc doøng chöùa cursor. O <text> <ESC> Xen moät doøng vaøo sau doøng chöùa cursor. Ghi chuù: muoán xen caùc kyù töï khoâng in ñöôïc (non printable) ta phaûi goõ: CTRL – V tröôùc chuùng. 6.2.2 Di chuyeån cursor trong file: - theo kyù töï: sang traùi: duøng phím muõi teân traùi hoaëc h hoaëc backspace. xuoáng doøng: duøng phím muõi teân xuoáng hoaëc j hoaëc linefeed sang phaûi : duøng phím muõi teân phaûi hoaëc i hoaëc escape. leân doøng : duøng phím muõi teân leân hoaëc k. - theo doøng: ^ veà ñaàu doøng $ cuoái doøng 27
  • 28. Copyright(c) by Galaxy CD – http://www.galaxycd.com Enter ñaàu doøng tieáp - ñaàu doøng treân 0(null) veà ñaàu doøng vaät lyù (doøng baét ñaàu baèng daáu caùch hoaëc tab) - theo maøn hình: H veà ñaàu maøn hình (Home) M veà giöõa maøn hình (Middle) L veà cuoái maøn hình (Last) - theo töø (word): w W veà ñaàu töø tieáp b B ñaàu töø hieän taïi e E cuoái töø hieän taïi - theo caâu (sentence): ( veà ñaàu caâu ) veà cuoái caâu daáu keát thuùc moät caâu laø caùc daáu ., ! hoaëc ? - theo ñoaïn vaên (paragraph): { veà ñaàu ñoaïn vaên } cuoái ñoaïn vaên ñoaïn vaên keát thuùc baèng moät doøng troáng. - theo cöûa soå (window): z doøng hieän taïi ôû giöõa cöûa soå. z<Enter> doøng hieän taïi ôû ñaàu cöûa soå. z- doøng hieän taïi ôû cuoái cöûa soå. ^D xuoáng nöûa cöûa soå ^U leân nöûa cöûa soå ^F xuoáng moät cöûa soå (-2 doøng) ^B leân moät cöûa soå (2 doøng) Ghi chuù: ^ laø kyù hieäu cuûa phím CTRL - theo soá thöù töï doøng: Ñeå hieån thò soá thöù töï cuûa caùc doøng soaïn thaûo: :set nu Xoaù boû hieån thò treân: :set nonu :n <Enter> hoaëc nG chuyeån cursor ñeán doøng thöù n :$ hoaëc G ñeán doøng cuoái vaên baûn :se list hieån thò caùc kyù töï aån (hidden) 28
  • 29. Copyright(c) by Galaxy CD – http://www.galaxycd.com - tìm daõy kyù töï: / kyù hieäu chieàu tìm xuoâi. ? kyù hieäu chieàu tìm ngöôïc. /string chuyeån cursor tôùi doøng chöùa daõy kyù töï theo chieàu xuoâi. ?string chuyeån cursor tôùi doøng chöùa daõy kyù töï theo chieàu ngöôïc. // laëp laïi tìm xuoâi. ?? laëp laïi tìm ngöôïc. 6.2.3 Xoùa vaên baûn: - xoùa kyù töï: x xoùa kyù töï taïi vò trí cursor 3x xoùa 3 kyù töï X xoùa kyù töï tröôùc vò trí cursor - xoùa doøng vaên baûn: dd hoaëc :d<CR> xoùa doøng chöùa cursor 3dd xoùa 3 doøng baét ñaàu töø doøng chöùa cursor d$ hoaëc D xoùa ñeán cuoái doøng dw xoaù töø chöùa cursor 3dw hoaëc d3w xoaù 3 töø d/string xoùa khi heát daõy string 6.2.4 Thay theá vaên baûn: - thay theá kyù töï: rc thay theá kyù töï hieän taïi baèng kyù töï c (???) R<text><ESC> thay theá soá kyù töï baèng daõy “text” - thay theá doøng: S<text><ESC> xoùa doøng hieän taïi vaø thay noù baèng “text” - thay theá töø: cw<text><ESC> thay moät töø baèng “text”. Töø ñöôïc thay theá tính töø cursor ñeán kyù töï $. c2w<text><ESC> thay 2 töø. C hoaëc c$ thay theá cuoái doøng c/string thay theá ñeán heát ”string” 6.2.5 Xoùa hoaëc laëp laïi leänh: - Xoaù leänh u xoùa taùc duïng cuûa leänh cuoái cuøng 29
  • 30. Copyright(c) by Galaxy CD – http://www.galaxycd.com U xoaù taát caû thay ñoåi ñaõ laøm treân doøng hieän taïi. - Laëp laïi leänh: . laëp laïi leänh söûa ñoåi vaên baûn cuoái cuøng (???) 6.2.6 Xem traïng thaùi vaên baûn ñang soaïn thaûo: ^G Hieån thò teân, traïng thaùi, soá doøng, vò trí ,cursor vaø phaàn traêm vaên baûn tính töø vò trí cursor ñeán cuoái vaên baûn. 6.2.7 Sao cheùp, chuyeån vaên baûn: - di chuyeån vaên baûn: Moãi laàn thöïc hieän moät leänh xoùa (x hoaëc d), vi ñeàu ghi laïi phaàn vaên baûn bò xoùa vaøo vuøng ñeäm rieâng cho ñeán laàn xoùa sau. Leänh p vaø P cho pheùp laáy laïi vaên baûn töø vuøng ñeäm ñoù. Tröôùc khi thöïc hieän leänh naøy, cursor phaûi ñöôïc ñaët vaøo vò trí cuøng kieåu vôùi phaàn vaên baûn coù trong vuøng ñeäm : -kyù töï -töø -doøng -cuoái doøng (end of line) p sao phaàn vaên baûn xoaù laàn cuoái cuøng vaøo sau ñoái töôïng trong cuøng kieåu. P sao phaàn vaên baûn xoaù laàn cuoái vaøo tröôùc ñoái töôïng cuøng kieåu. Moät caùch khaùc ñeå chuyeån doøng: :5,10m20 chuyeån caùc doøng töø 5 ñeán 10 tôùi sau doøng 20 - Sao cheùp vaên baûn: Leänh y(yank) cho pheùp sao phaàn vaên baûn ta muoán vaøo vuøng ñeäm . Muoán sao phaàn vaên baûn töø vuøng ñeäm ra, ta phaûi chuyeån cursor vaøo nôi caàn sao, sau ñoù duøng p hoaëc P. Y3w sao 3 töø vaøo vuøng ñeäm Y hoaëc yy sao doøng hieän taïi vaøo vuøng ñeäm . 5yy sao 5 doøng vaøo vuøng ñeäm Moät caùch khaùc ñeå sao cheùp doøng: :5,8t25 sao caùc doøng töø 5 ñeán 8 tôùi sau doøng 25 6.3 Duøng vi vôùi danh saùch caùc leänh ñaõ chaïy cuûa Shell (history of commands) Leänh fc (fix command) cho pheùp ta soaïn thaûo baèng vi vaø chaïy laïi caùc leänh ñaõ chaïy cuûa Shell, caùch duøng nhö sau: - soaïn thaûo vaø cho chaïy leänh cuoái cuøng: $fc - soaïn thaûo moät nhoùm leänh vaø cho chaïy: $fc m n - xem danh saùch 16 leänh cuoái cuøng: $fc -l hoaëc history 30
  • 31. Copyright(c) by Galaxy CD – http://www.galaxycd.com $fc -lr (danh saùch theo thöù töï ngöôïc laïi) - taïo moät file chöùa moät soá leänh ñaõ chaïy (cuûa history): $fc -nl n1 n2 > cmd cmd laø moät file chöùa caùc leänh cuûa history töø leänh n1 ñeán leänh n2 Baøi taäp: 1. Sao file vaên baûn coù saün vaøo thö muïc tieáp nhaän: cp /users/EXERCISES/editsave edition 2. Duøng chöông trình vi ñeå soaïn thaûo file treân: vi edition 3. Chuyeån cursor xuoáng cuoái doøng vaên baûn, xong laïi chuyeån veà ñaàu vaên baûn. Duøng: CTRL – D vaø CTRL – U hoaëc CTRL – F vaø CTRL – B hoaëc G vaø :1 4. Haõy söûa: - Teân “Dupont Jean” ñaàu tieân thaønh “Jean-Jacques” - Teân “Dupont Pierre” ñaàu tieân thaønh “Jean-Pierre” Laøm nhö sau: /Dupont Jean/ chuyeån cursor tôùi kyù töï “n” cuûa “Jean” a-Jacques<ESC> /Dupont Pierre/ chuyeån cursor tôùi kyù töï “p” cuûa “Pierre” iJean-<ESC> 5. Haõy vaøo teân mình vaøo doøng tröôùc doøng “Dupont” ñaàu tieân: :1 /Dupont/ Oname<ESC> 6. Haõy vaøo bieät hieäu hoaëc moät teân baát kyø vaøo sau doøng “Dupont” cuoái cuøng: G ?Dupont? oname<ESC> 7. Ghi file vaø ra khoûi vi: :wq hoaëc ZZ 8. Vaøo laïi vi vaø soaïn thaûo file edition. Ñaët vaø boû cheá ñoä hieån thò soá doøng. vi edition :set nu :set nonu 9. Haõy söûa “Dupont Jean” thaønh “Martin Jean”: 31
  • 32. Copyright(c) by Galaxy CD – http://www.galaxycd.com Chuyeån cursor tôùi kyù töï “D” cuûa “Dupont”: hoaëc: XxxxxxiMartin<ESC> (duøng x ñeå xoùa kyù töï) (neáu laøm sai hoaëc muoán laøm laïi goõ U ñeå xoaù boû toaøn boä thay ñoåi treân doøng) hoaëc: dwiMartin<ESC> (duøng dw ñeå xoùa töø) hoaëc: cwMartin<ESC> (duøng cw ñeå thay töø) 10. Xoaù doøng chöùa “Coteau Jean”: /Couteau Jean/ dd 11. Thay taát caû “Dupont” thaønh “Durand” /Dupont/ cwDurand<ESC> // . 12. Chuyeån caùc doøng chöùa “Durand” xuoáng cuoái vaên baûn: Chuyeån cursor tôùi doøng “Durand” ñaàu tieân: 4dd (xoùa 4 doøng vaø ñöa vaøo vuøng ñeäm) G (chuyeån ñeán cuoái vaên baûn) P (sao töø trong vuøng ñeäm ) 13. Nhaân ñoâi doøng chöùa “Martin Jean” yy p 14. Hieän ta ñang trong vi, haõy gôûi thoâng baùo tôùi cho ngöôøi khaùc ñang trong phieân laøm vieäc: :!who :!mail userX message ^D 15. Ta ñang ôû taïi thö muïc tieáp nhaän, söûa ñoåi vaø chaïy laïi moät leänh: $cd $write userX message ^D $fc ->söûa X thaønh Y :wq $ 32
  • 33. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 7 Shell_script Noäi dung: giôùi thieäu shell, tieán trình (process) vaø caùc caùch thöùc thöïc hieän tieán trình. Shell coù theå ñoïc vaø thöïc hieän moät file goàm danh saùch caùc leänh caàn thöïc hieän. File ôû daïng naøy ñöôïc goïi laø shell_sript hoaëc procedure Shell_script ñöôïc thöïc hieän nhôø shell, vaø chính shell seõ phaùt sinh vaø quaûn lyù taát caû caùc tieán trình caàn thieát ñeå thöïc hieän coâng vieäc ñöôïc moâ taû trong shell_script 7.1 Quaûn lyù tieán trình: 7.1.1 Muïc ñích cuûa shell Shell laø chöông trình thoâng dòch leänh Hieån thò $ Ñoïc leänh Taïo tieán trình Ñôïi tieán trình keát thuùc Hieån thò $ 7.1.2 Taïo tieán trình: Khaùi nieäm chung veà tieán trình: Tieán trình ñöôïc hieåu laø vieäc thöïc hieän moät coâng vieäc hay moät chöông trình trong moâi tröôøng cuï theå trong heä thoùng. Ta coù theå phaân bieät hai loaïi tieán trình: - Tieán trình heä thoáng: laø tieán trình khoâng gaén vôùi baát kyø moät terminal naøo, noù ñöôïc taïo ra vaøo thôøi ñieåm khôûi ñoäng heä thoáng hoaëc vaøo caùc thôøi ñieåm coá ñònh do ngöôøi duøng quaûn trò heä thoáng ñaët. 33
  • 34. Copyright(c) by Galaxy CD – http://www.galaxycd.com - Tieán trình do ngöôøi söû duïng taïo ra. Caùc tieán trình ñöôïc toå chöùc theo daïng caây: Tieán trình cha tieán trình con (parent) (child) Ñoái vôùi ngöôøi söû duïng, tieán trình cha laø Shell ñöôïc taïo taïi thôøi ñieåm baét ñaàu phieân laøm vieäc. 7.1.3 Lieät keâ caùc tieán trình: Leänh ps cho pheùp lieät keâ danh saùch caùc tieán trình ñang dieãn ra: $ps -f UID PID PPID C STIME TTY TIME COMMAND user5 4582 1 0 11:04:45 tty23 0:01 -sh user5 4792 4582 36 11:10:04 tty23 0:04 ps -f trong ñoù: UID soá UID cuûa ngöôøi chuû tieán trình PID soá cuûa tieán trình (process identity) PPID soá cuûa tieán trình cha (parent process identity) C chæ soá söû duïng boä xöû lyù (processor utilization for scheduling). STIME thôøi ñieåm baét ñaàu tieán trình TTY terminal ñieàu khieån tieán trình TIME thôøi gian tích luyõ thöïc hieän tieán trình (cumulative time) COMMAND teân leänh sinh ra tieán trình Tieán trình soá 1 laø tieán trình init, trong ñoù coù chöùcc naêng giaùm saùt caùc terminal, laø tieán trình cha cuûa taát caû caùc tieán trình Shell khi login. Caùch thöïc hieän moät shell_script: $chmod +x proc $proc hoaëc $sh proc 7.2 Laäp caùch thöùc (setup) cho shell_script: Leänh set cho pheùp laäp caùch thöùc chaïy shell_script. set -x hieån thò doøng leänh sau khi trieån khai leänh set -v hieån thò doøng leänh tröôùc khi trieån khai set -e ra khoûi shell_script sau khi gaëp moät loãi set -t ra khoûi shell_script sau leänh tieáp set - xoaù taùc duïng cuûa x vaø v Vieäc laäp caùch thöùc chæ lieân quan tôùi shell_script ñang chaïy. Caùc tuyø choïn -x vaø –v coù theå ñöa vaøo doøng leänh goïi shell_script: $sh -v proc 34
  • 35. Copyright(c) by Galaxy CD – http://www.galaxycd.com $sh -x proc Thí duï: - duøng “-x”: $cat exam1 set -x echo “The current directory is :” pwd echo “List of files :“ echo file1 file2 file3 $exam1 + echo The current directory is : The current directory is: + pwd /users/user8 + echo List of files: List of files: + echo file1 file2 file3 file1 file2 file3 - duøng “-v”: $cat exam2 set -v echo “The current directory is :” pwd echo “List of files :“ echo file1 file2 file3 $exam2 echo The current directory is : The current directory is: pwd /users/user8 echo List of files: List of files: echo file1 file2 file3 file1 file2 file3 Coù theå duøng kyù töï ‘#’ ñeå vieát chuù thích cho doøng leänh trong shell_script, neáu chuù thích vieát ngay sau leänh treân cuøng moät doøng, ta phaûi cho ít nhaát moät daáu caùch (space) vaøo tröôùc kyù töï ‘#’. 35
  • 36. Copyright(c) by Galaxy CD – http://www.galaxycd.com 7.2 Caùc loaïi Shell UNIX Coù 3 loaïi shell UNIX: csh cuûa Berkeley BSD sh cuûa AT&T, Bourne-shell ksh cuûa AT&T,Korn-shell Shell ksh duøng trong taøi lieäu naøy laø toaøn boä sh keát hôïp vôùi phaàn phaùt trieån cuûa csh. Shell csh coù cuù phaùp gioáng ngoân ngöõ C, nhöng caùc shell_script cuûa csh khoâng chaïy ñöôïc döôùi sh vaø ksh. Döôùi ñaây laø lieät keâ nhöõng khaùc nhau cô baûn khaùc: - csh vaø ksh coù nhaät kyù (history). - ksh coù trình soaïn thaûo doøng (line editor) - cuù phaùp voøng laëp csh: while end ksh, sh: while do done - chæ csh coù leänh goto - cô cheá thay theá bieán cuûa ksh laø hoaøn thieän nhaát - csh vaø ksh coù caùc pheùp tính soá hoïc. 36
  • 37. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 8: Ñoåi höôùng (Redirection) Noäi dung: caùc luoàng döõ lieäu vaøo/ra chuan vaø caùc thao taùc ñoåi höôùng chuùng. 8.1 Vaøo/ra chuaån: 8.1.1 Caùc file vaøo/ra chuaån: Khi cho moït file chaïy, Shell töï ñoäng môû 3 file vaøo/ra chuan: Vaøo chuaån (stdin) fd = 0 Ra chuaån (stdout) fd = 1 Loãi chuaån (stderror) fd = 2 Kyù hieäu fd laø moâ taû file (file descriptor). Thoâng thöôøng ñaàu vaøo chuaån laø baøn phím, ñaàu ra chuaån vaø loãi chuaån laø maøn hình. 8.1.2 Ñoåi höôùng ñaàu ra chuaån : Ta coù theå ñoåi höôùng caùc soá lieäu, thay vì ra maøn hình, vaøo moät file theo caùc caùch sau: $leänh > teân_file Neáu file chöa toàn taïi, noù seõ ñöôïc töï ñoäng taïo ra. Neáu ñaõ toàn taïi, noäi dung cuõ seõ bò xoùa. $leänh >> teân_file Vôùi caùch naøy, döõ lieäu seõ ñöôïc ghi theâm vaøo cuoái file. Thí duï: $ls /bin > file1 $ls /bin >> file1 8.1.3 Ñoåi höôùng ñaàu ra loãi chuaån: - Ñoåi höôùng vaøo moät file: $leänh 2 > file1 hoaëc: $leänh 2 >> file1 - Ñoåi höôùng vaøo file soá lieäu (vaøo ñaàu ra chuaån): $leänh > file1 2 > &1 - Ñoåi höôùng vaøo file khoâng: $leänh 2 > /dev/null 8.1.4 Ñoåi höôùng ñaàu vaøo chuaån: - Soá lieäu vaøo chuaån töø moät file: $leänh < file2 Thí duï: $mail user1 < file2 - Ñoåi höôùng caùc leänh töø ñaàu vaøo chuaån: Caùch ñoåi höôùng naøy cho pheùp ta ñöa caùc khai baùo cho moät leänh ttrong shell_script: $command << STRING soá lieäu vaø/hoaëc leänh 37
  • 38. Copyright(c) by Galaxy CD – http://www.galaxycd.com maø leänh naøy caàn ñoïc STRING $ Thí duï: duøng leänh cat taïo moät file: $cat > file1 <<OK aa bb OK $cat file1 aa bb $ 8.2 Chuyeån döõ lieäu giöõa caùc tieán trình: Hai doøng leänh sau ñaây: leänh1 > temp leänh2 < temp coù theå ñöôïc thay theá baèng moät doøng leänh nhö sau: leänh1 | leänh 2 Khi ñoù ñaàu ra chuaån cuûa leänh leänh1 seõ laø ñaàu vaøo chuaån cuûa leänh leänh2, vaø file trung gian temp khoâng caàn thieát nöõa. Kyù hieäu | goïi laø oáng (pipe). Thí duï: $ls -l | pg 8.3 Ñoåi höôùng keùp (double) ñaàu ra chuaån: Leänh tee cho pheùp ñoåi höôùng keùp ñaàu ra chuaån: vöøa höôùng döõ lieäu ñaàu ra veà höôùng khaùc, vöøa hieån thò ra maøn hình. $leänh | tee teân_file. stdout leänh tee stdout teân_file 38
  • 39. Copyright(c) by Galaxy CD – http://www.galaxycd.com Thí duï: $ps -ef | tee file_ps | grep $LOGNAME Coù theå duøng tee vôùi tuyø choïn –a (tee –a), khi ñoù döõ lieäu ñaàu ra seõ ñöôïc ghi tieáp vaøo cuoái file file_ps Baøi taäp: 1. Haõy vieát leänh coù teân WHO vôùi caùc chöùc naêng sau:: - tính vaø hieån thò soá ngöôøi söû duïng ñang trong phieân laøm vieäc. - hieån thò danh saùch vaø caùc thuoäc tính cuûa hoï. - xoùa file ñeäm (neáu coù duøng) ñöôïc taïo khi chaïy leänh WHO. Gôïi yù: duøng caùc leänh who, tee, wc. 2. Vieát leänh LLD lieät keâ caùc thö muïc con trong moät thö muïc. Gôïi yù: duøng caùc leänh ll vaø grep. 39
  • 40. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 9: Cô cheá thay theá cuûa Shell Noäi dung: caùch thao taùc vôùi caùc tham soá cuûa shell_script, caùc bieán trong Shell, caùc kyù töï ñaëc bieät ñöôïc thoâng dòch khi vieát trong caâu leänh shell. 9.1 Truyeàn tham soá: 9.1.1 Truyeàn tham soá cho moät Shell_script Moät Shell_script coù theå laøm vieäc vôùi caùc thoâng soá ñöôïc truyeàn qua doøng leänh. $proc par1 par2 par3 | | | | $0 $1 $2 $3 Trong Shell_script ñöôïc goïi (trong tröôøng hôïp naøy laø proc), caùc tham soá ñöôïc theå hieän baèng: $0 teân Shell_script $1 tham soá thöù nhaát $2 tham soá thöù hai $n tham soá thöù n $# soá caùc tham soá $* taát caû caùc tham soá $$ PID cuûa shell_script Thí duï: $cat param echo Name of shell_script: $0 echo First parameter : $1 echo Third parameter : $3 echo Number of parameters: $# echo List of all the param: $* $ $param London Paris New-York Brussels Name of shell_script: param First parameter: London Third parameter: New-York Number of parameters: 4 List of all the param: London Paris New-York Brussels 9.1.2 Dòch chuyeån caùc tham soá: 40
  • 41. Copyright(c) by Galaxy CD – http://www.galaxycd.com Vôùi caùch theå hieän tham soá cuûa shell_script baèng $n, ta chæ coù theå laøm vieäc ñöôïc vôùi töø 1 ñeán 9 tham soá. Baèng caùch dòch chuyeån, ta coù theå laøm vieäc vôùi soá tham soá nhieàu hôn 9. Vieäc dòch chuyeån ñöôïc thöïc hieän bôûi leänh: shift Sau khi shift: - $0 vaãn giöõ nguyeân - $1 maát ñi - $2 thaønh $1 - $3 thaønh $2 - $n thaønh $n-1 - $*, S# ñöôïc caäp nhaät laïi. Coù theå dòch chuyeån n vò trí baèng caùch: shift n Thí duï: $cat shifting echo First parameter: $1 echo Nineth parameter: $9 echo Number of parameters: $# echo “SHIFTING” shift echo First parameter: $1 echo Nineth parameter: $9 echo Number of parameters: $# $ $shifting A B C D E F G H I J K First parameter: A Nineth parameter: I Number of parameters: 11 “SHIFTING” shift First parameter: B Nineth parameter: J Number of parameters: 10 $ 9.2 Caùc bieán Shell 9.2.1 Caùc kieåu bieán: Ksh coù theå xöû lyù 4 kieåu bieán sau: - soá nguyeân - xaâu kyù töï 41
  • 42. Copyright(c) by Galaxy CD – http://www.galaxycd.com - baûng caùc xaâu kyù töï - baûng caùc soá nguyeân Thí duï: - bieán xaâu kyù töï: $string = “character string” $print $string character string Ghi chuù: o noäi dung bieán ñöôïc bieåu dieãn baèng teân bieán vaø daáu $ ñaèng tröôùc. o tröôùc vaø sau daáu ‘””’ khoâng coù kyù töï troáng. - bieán soá nguyeân: $integer var = 2 $itypeset -i var1 = 23 $print $var $var1 2 23 - baûng caùc xaâu kyù töï: $string[1] = “more characters” $print ${string[1]} more characters $print ${string[0]} character string Ghi chuù: khi khai baùo moät bieán, ta cuõng coù theå coi bieán ñoù laø bieán ñaàu tieân cuûa moät baûng cuøng teân vôùi noù. - baûng caùc soá nguyeân: $integer tabint $typeset -i i $tabint[0] = 13 $tabint[13] = “toto” ksh:toto:bad member $i=1 $tabint[i] = 45 $print tabint[1] 45 Chæ soá (index) cuûa baûng laø moät soá nguyeân töø 0 ñeán 511. - xoùa moät bieán: $unset i 9.2.2 Caùch thay theá caùc bieán shell: 42
  • 43. Copyright(c) by Galaxy CD – http://www.galaxycd.com $print ${var-val1} hieån thò giaù trò cuûa var, neáu bieán var chöa ñònh nghóa thì hieån thò val1 thay cho giaù trò cuûa var $print ${var=val2} neáu var chöa ñònh nghóa, taïo bieán var vôùi giaù trò laø val2 $print ${var:-val3} gioáng tröôøng hôïp ñaàu $print ${var:=val4} gioáng tröôøng hôïp thöù hai nhöng var coù theå chöa ñöôïc ñònh nghóa hoaëc coù giaù trò null. $print ${var?message} neáu var chöa ñöôïc ñònh nghóa, hieån thò message. (thí duï: print ${var?not defined}) Chuù thích: - bieán chöa ñöôïc ñònh nghóa laø bieán chöa toàn taïi - bieán coù gía trò null laø bieán chæ chöùamoät kyù töï Return, hoaëc xaâu roãng. $integer tab $tab[0]=1 tab[1]=2 tab[2]=7 - lieät keâ caùc giaù trò cuûa baûng: $print ${tab[*]} 1 2 7 - hieån thò soá phaàn töû cuûa baûng: $print ${#tab[*]} 3 9.1.3 Duøng moät bieán ôû cheá doä hoûi ñaùp: Leänh read cho pheùp duøng moät bieán ôû cheá ñoä hoûi ñaùp khi ñang chaïy moät shell_script. Thí duï: $cat menu echo This is an example of menu echo Choice: 1, 2 or 3 read reply echo Your choice is $reply $menu This is an example of menu Choice: 1, 2 or 3 2 Your choice is 2 Cuù phaùp read var?”invite” cho pheùp hieån thò tröïc tieáp xaâu “invite” $read var?”Choice: 1, 2 or 3?” Choice :1,2 or 3?3 $echo $var 3 9.2.4 Baûo veä moät bieán: 43
  • 44. Copyright(c) by Galaxy CD – http://www.galaxycd.com Leänh read-only cho pheùp baûo veä moät bieán. Ta chæ coù theå ñoïc maøkhoâng thay ñoåi ñöôïc giaù trò cuûa noù. $VAR=45 $readonly VAR $VAR=22 ksh: VAR: is readonly $echo $VAR 45 Leänh readonly khoâng coù ñoái hieån thò danh saùch caùc bieán ñöôïc baûo veä. Ñeå baûo veä moät bieán, ta cuõng coù theå duøng tpeset vôùi tuyø choïn –r: $typeset -r var1=68 9.3 Caùc kyù töï ñaëc bieät 9.3.1 Taïo moät teân vôùi caùc metacharacter Moät soá kyù töï coù yù nghóa ñaëc bieät trong doøng leänh Shell, ngöôøi ta goïi caùc kyù töï ñoù laø metacharacter. Chuùng cho pheùp taïo ra caùc teân file ta quan taâm trong moät thö muïc. * thay theá moät xaâu kyù töï baát kyø/ ? thay theá moät kyù töï baát kyø. [] thay theá moät trong nhöõng kyù töï trong ngoaëc vuoâng. [!] thay theá moät kyù töï khoâng coù trong ngoaëc vuoâng. Muoán duøng moät kyù töï kieåu metacharacter ñeå theå hieän moät teân maø khoâng bò hieäu öùng ñaëc bieät cuûa noù, ta caàn cho vaøo tröôùc noù moät kyù töï “” (backslash). Chuù yù: caùc metacharacter duøng trong Shell khoâng cuøng yù nghóa vôùi caùc metacharacter duøng trong caùc chöông trình soaïn thaûo. Thí duï: $echo * hieån thò taát caû caùc file trong thö muïc. $echo *.c hieån thò taát caû caùc file coù teân keát thuùc baèng .c $echo * * $ls a.out try.o file1 file1.c file5 fileA $ls *.c file1.c 44
  • 45. Copyright(c) by Galaxy CD – http://www.galaxycd.com $ls *.* a.out try.o file1.c $ls *.? try.o file1.c $ls file[0-9] file1 file5 Chuù yù: Caùc kyù töï metacharacter chæ coù taùc duïng trong phaàn cuûa doøng leänh, chuùng khoâng coù taùc duïng trong phaàn ñoåi höôùng. Thí duï: $echo hello > *.c $ls *.c lieät keâ caùc file coù teân keát thuùc baèng .c $ls *.c lieät keâ caùc file coù teân *.c 9.3.2 Kyù töï ~(tilde) Kyù töï ~ thay theá teân thö muïc tieáp nhaän Hai kyù töï ~+ thay theá teân thö muïc ñang laøm vieäc. Hai kyù töï ~_ thay theá teân thö muïc ta ñaõ ôû trong ngay tröôùc khi chuyeån sang thö muïc hieän haønh. Thí duï: $echo ~ xem teân thö muïc tieáp nhaän /users/user1 $cd /etc chuyeån ñeán /etc $pwd /etc $cd trôû veà thö muïc tieáp nhaän $pwd /users/user1 $echo ~_ xem teân thö muïc laøm vieäc ngay tröôùc khi chuyeån ñeán thö muïc hieän haønh /etc $echo ~+ xem teân thö muïc laøm vieäc /users/user1 9.4 Laáy keát quaû cuûa moät leänh: 9.4.1 Laáy keát quaû cuûa moät leänh cho vaøo moät bieán Trong shell_script, keát quaû cuûa moät leänh coù theå theå hieän baèng caùch sau: 45
  • 46. Copyright(c) by Galaxy CD – http://www.galaxycd.com `leänh` hoaëc $(leänh) Ta coù theå duøng caùch theå hieän treân ñeû gaùn noäi dung cho moät bieán. Thí duï: $pwd /users/user1 $YY = `pwd` $echo $YY /users/user1 $var=$(pwd) $echo $var /users/user1 9.4.2 Laáy keát quaû cuûa moät leänh döôùi daïng caùc tham soá: Leänh set cho pheùp laáy keát quaû cuûa moät leänh döôùi daïng caùc thoâng soá nhö sau: $1, $2, $3…………$[n] Thí duï: $date Tue Jun 6 17:12:40 EET 1991 $set date $echo $2 Jun $echo $6 1991 $set $(ls) $echo ${11} 9.6 Caùc quy taéc thay theá cuûa Shell 9.5.1 Duøng caùc daáu nhaùy: ‘………’ Shell khoâng thöïc hieän pheùp thay theá caùc kyù töï trong daáu nhaùy ñôn “………” Shell thöïc hieän pheùp thay theá trong daáu nhaùy keùp caùc kyù töï: $ vaø ` Thí duï: $NOM=jean $echo nom=$NOM nom=jean thoâng dòch bieán $echo ‘nom=$NOM’ nom=$NOM hieån thò khoâng thay theá $ echo “nom=$NOM” 46
  • 47. Copyright(c) by Galaxy CD – http://www.galaxycd.com nom=jean thoâng dòch bieán $echo * file1 file2 … thoâng dòch kyù töï * $echo “*” * hieån thò khoâng thoâng dòch Baûng toùm taét veà thoâng dòch caùc kyù töï ñaëc bieät trong caùc daáu nhaùy: Daáu nhaùy ñöôïc Caùc kyù töï ñaëc bieät duøng trong daáu nhaùy duøng ‘ ` hoaëc ) “ $ * ‘ f n n n n n ` hoaëc $( n f n o o o “ n o f o o n Trong ñoù: f = keát thuùc xaâu kyù töï o = kyù töï ñöôïc thoâng dòch (coù yù nghóa ñaëc bieät) n = kyù töï khoâng ñöôïc thoâng dòch (bình thöôøng) Thí duï caùch söû duïng baûng toùm taét: - Kyù töï $ ñöôïc thoâng dòch nhö moät metacharacter khi noù ôû trong $() hoaëc “”, khi bieán ñöôïc thay theá baèngh giaù trò cuûa noù. Ngöôïc laïi, noù khoâng ñöôïc thoâng dòch khi ôû giöõa hai daáu nhaùy ñôn. 9.5.2 Thay theá ñuùp Khi Shell laøm thao taùc thay theá noù queùt moät laàn doøng leänh vaø thay theá bieán coù $ ñaèng tröôùc. Ta coù theå laøm hai laàn ñoäng taùc queùt baèng duøng leänh eval cuûa Shell. Nhö vaäy leänh ñöùng sau eval ñöôïc thay theá 2 laàn tröôùc khi chaïy. Thí duï: Shell_script last_argument hieån thò ñoái cuoái cuøng cuûa doøng leänh: $cat last_argument set -x eval echo $”$#” $last_argument 1 A Z 3 F G + eval echo $6 + echo G G Baøi taäp: 1. Haõy vieát shell_script copy_file ñeå sao cheùp moät file cuûa moät ngöôøi söû duïng khaùc, sau ñoù ñoåi nhoùm vaø ngöôøi söû duïng cuûa file sao. Cuù phaùp: 47
  • 48. Copyright(c) by Galaxy CD – http://www.galaxycd.com copy_file file1 file2 user group Gôïi yù: söû duïng caùc leänh cp, chown, chgrp 2. Haõy vieát shell_script dup_file coù chöùc naêng nhö copy_file ôû treân nhöng teân caùc file, teân ngöôøi söû duïng vaø teân nhoùm ñöôïc vaøo baèng hoûi ñaùp. Gôïi yù: söû duïng leänh read vaø caùc bieán caàn thieát. 48
  • 49. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 10: Moâi tröôøng cuûa Shell Noäi dung: caùc lôùp bieán cuûa Shell, caùch truyeàn bieán cho tieán trình. 10.1 Moâi tröôøng Moâi tröôøng cuûa Shell chöùa moät soá bieán ñònh nghóa tröôùc. Leänh set cho pheùp lieät keâ danh saùch caùc bieán cuûa moâi tröôøng (ñònh nghóa tröôùc hoaëc khi laøm vieäc). $set 10.2 Caùc bieán ñònh nghóa tröôùc Döôùi ñaây laø danh saùch caùc bieán ñònh nghóa tröôùc thöôøng coù: HOME chöùa teân thö muïc tieáp nhaän LOGNAME teân ngöôøi söû duïng PATH teân ñöôøng daãn cho caùc leänh PS1 daáu nhaéc thöù nhaát PS2 daáu nhaéc thöù hai TERM kieåu terminal IFS danh saùch caùc daáu phaân caùch (seperator) FCEDIT EDITOR chöông trình soaïn thaûo nhaät kyù (history) PPID soá cuûa tieán trình cha cuûa Shell PWD thö muïc hieän haønh SHELL teân Shell ñang duøng RANDOM soá ngaãu nhieân SECONDS thôøi gian laøm vieäc tính theo giaây 10.3 Caùc bieán chung (common) 10.3.1 Bieán xuaát Shell khoâng töï thöïc hieän caùc leänh ta ñöa vaøo maø taïo ra moät shell con ñeå thöïc hieän caùc leänh ñoù. Do ñoù caùc tieán trình con khoâng bieát ñeán caùc bieán ta duøng trong shell. Ñeå moät bieán cuûa moät tieán trình coù theå duøng chung cho moïi tieán trình con cuûa noù, ta phaûi xuaát (export) noù thaønh bieán duøng chung baèng caùch duøng leänh export $var=18 $export var Chuù yù: - khoâng coù khaùi nieäm nhaäp (import). - Moät bieán xuaát khi bò thay ñoåi giaù trò trong tieán trình con vaãn giöõ nguyeân giaù trò trong tieán trình cha. Caùc bieán xuaát coù theå lieät keâ baèng duøng leänh: $env 49
  • 50. Copyright(c) by Galaxy CD – http://www.galaxycd.com 10.3.2 Thöïc hieän moät shell_script trong shell cha: Thöïc hieän moät shell_script trong shell cha cho pheùp noù thöøa keá söû duïng toaøn boä moâi tröôøng cuûa shell cha: Thí duï: $cat proc echo $var $VAR= ok ñònh nghóa bieán var trong shell $proc moät shell con ñöôïc taïo ra vaø noù khoâng hieåu bieán VAR $.proc shell töï thöïc hieän leänh maø khoâng taïo shell con, bieán VAR coù trong moâi tröôøng cuûa noù. 50
  • 51. Copyright(c) by Galaxy CD – http://www.galaxycd.com Baøi 11 Laäp trình möùc cô sôû döôùi UNIX Noäi dung: caùc pheùp thöû, so saùnh, caùc pheùp tính soá hoïc trong Shell, laäp trình caùc caáu truùc coù ñieàu kieän, laäp trình caùc voøng laëp. 11.1 Caùc pheùp thöû (test) trong Shell 11.1.1 Giaù trò traû veà cuûa moät leänh Sau khi moät leänh thöïc hieän xong, bao giôø cuõng coù moät giaù trò traû veà (return code). Giaù trò naøy chöùa trong bieán $?. Neáu moät leänh ñöôïc thöïc hieän toát, giaù trò traû veà laø 0 (true : ñuùng). Neáu moät leänh khoâng ñöôïc thöïc hieän toát, giaù trò traû veà khaùc 0 (false: sai). Thí duï: $cat fac cat: cannot open fac $echo $? 2 $cat file I am a file $echo $? 0 Chuù thích: leänh exit[n] cho pheùp ra khoûi moät shell_script vôùi giaù trò traû laïi laø n. 11.1.2 Söû duïng leänh test: + Leänh test ñöôïc duøng ñeå laäp trình moät ñieàu kieän trong caáu truùc hoaëc trong voøng laëp: Coù 3 tröôøng hôïp duøng leänh test: - kieåm tra tính chaùt cuûa caùc file - so saùnh giöõa caùc soá - kieåm tra caùc xaâu kyù töï + Cuù phaùp leänh test: test expression hoaëc [expression] Trong caùc thí duï sau ñaây, hai caùch duøng treân ñeàu ñöôïc söû duïng nhö nhau. +Kieåm tra tính chaát caùc file: Sau khi test, giaù trò traû veà laø 0 (true) hoaëc khaùc 0 (false) test -f filename 0 neáu file toàn taïi vaø laø file thöôøng [-d filename] 0 neáu file toàn taïi vaø laø file thö muïc [-r filename] 0 neáu file toàn taïi vaø chæ ñoïc ñöôïc 51
  • 52. Copyright(c) by Galaxy CD – http://www.galaxycd.com test -w filename 0 neáu file toàn taïi vaø ghi ñöôïc test -x filename 0 neáu file toàn taïi vaø chaïy ñöôïc test -s filename 0 file toàn taïi vaø khoâng roãng (not empty) [file1 -ef file2] 0 file1 vaø file2 lieân keát vôùi nhau [file1 -nt file2] 0 neáu file1 môùi hôn file2 [file1 -ot file2] 0 neáu file1 cuõ hôn file2 [-b filename] 0 file toàn taïi vaø ñoïc ghi theo block [-c filename] 0 file toàn taïi vaø ñoïc ghi theo kyù töï +So saùnh giöõa caùc soá: Cuù phaùp nhö sau: test value1 operator value2 Caùc toaùn töû so saùnh (operator) coù theå duøng: -eq baèng (equal to) -ne khoâng baèng (not equal to) -gt lôùn hôn (greater than) -ge lôùn hôn hoaëc baèng (greater or equal to) -lt nhoû hôn (less than) -le nhoû hôn hoaëc baèng (less or equal to) Thí duï: $test “$A” -eq “$B” true neáu giaù trò cuûa bieán A baèng giaù trò cuûa bieán B +Kieåm tra caùc xaâu kyù töï: [“str1” = “str2”] ñuùng neáu str1 baèng str2 test “str1” != “str2” ñuùng neáu str1 khaùc str2 test -z “$A” ñuùng neáu xaâu $A roãng test -n “$A” ñuùng neáu xaâu $A khoâng roãng Thí duï: $test “$LOGNAME” != “user1” +Keát hôïp caùc ñieàu kieän: Caùc toaùn töû so saùnh coù theå keát hôïp vôùi: -a vaø (and) -o hoaëc (or) ! ñaûo (negation) (…) goäp (grouping) Thí duï: $test (-r file1 -o -r file2 ) -a -w file3 ñuùng neáu: 52
  • 53. Copyright(c) by Galaxy CD – http://www.galaxycd.com - file1 vaø file2 toàn taïi vaø chæ ñoïc ñöôïc vaø - file 3 toàn taïi vaø ghi ñöôïc. 11.2 Laäp trình moät caáu truùc coù ñieàu kieän: 11.2.1 Caáu truùc coù ñieàu kieän : a) if then else fi if command1 then command2 else command3 fi Giaûi thích: Neáu giaù trò traû veà sau khi thöïc hieän command1 laø 0 (ñuùng) thì thöïc hieän command2, neáu khoâng thì thöïc hieän command3 keát thuùc Thí duï: if test -f file1 then echo “file exists” else echo “file does not exist” fi Chuù thích: khoâng baét buoäc phaûi duøng else if [-w file1] then echo “message” >> file1 fi b) Caáu truùc loàng (nested) Ta coù theå loàng caùc caáu truùc ñieàu kieän vôùi nhau. Khi ñoù: else if thaønh elif Thí duï: if test -f file1 then echo “file exists” elif test -d file1 then echo “file is a directory” fi trong tröôøng hôïp naøy fi laø chung. Chuù yù: cuù phaùp sau cuõng coù theå duøng ñöôïc: if then else if then 53
  • 54. Copyright(c) by Galaxy CD – http://www.galaxycd.com else fi c) Caùc toaùn töû | | vaø && Trong tröôøng hôïp ñieàu kieän ñôn giaûn, coù theå duøng toaùn töû hoaëc logic | |, hoaëc toaùn töû vaø logic && ñeå laäp trình caáu truùc. command1 && command2 Neáu command1 ñöôïc thöïc hieän toát, thì thöïc hieän command2, neáu khoâng thì ra. command1 | | command2 Neáu command1 ñöôïc thöïc hieän toát, thì ra, neáu khoâng, thì thöïc hieän command2. Chuù yù: coù theå duøng daáu ngoaëc ñôn ñeå goäp caùc leänh Thí duï: test -d demo && echo “demo is a directory” test -d demo | | echo “demo is not a directory” (test -d demo && ls -l demo) | | echo “demo not ok” 11.2.2 Reõ nhaùnh trong pheùp choïn moät trong nhieàu giaù trò: Duøng caáu truùc: case in esac Caáu truùc treân cho pheùp choïn moät trong nhieàu xaâu kyù töï vaø thöïc hieän caùc leänh lieân quan ñeán xaâu ñoù. case $variable in string1) cmd1 cmd2 …………… ;; string2) cmd1 cmd2 …………… ;; string3 | string4) commands ;; esac Chuù yù: coù theå duøng caùc metacharacter cuûa shell ñeå bieåu dieãn xaâu kyù töï, | coù nghóa laø hoaëc 11.3 Laäp trình moät voøng laëp 11.3.1 Voøng laëp for a) Caáu truùc: for in do done Caáu truùc naøy cuûa for cho pheùp thöïc hieän moät chuoãi leänh nhö nhau vôùi moãi moät giaù trò trong danh saùch ñaõ cho. Soá caùc voøng laëp baèng soá caùc giaù trò trong danh saùch. for variable in val1 val2 val3 … 54
  • 55. Copyright(c) by Galaxy CD – http://www.galaxycd.com do command1 command2 command3 ………………… done Vôùi variable coù theå gaùn ñöôïc caùc giaù trò val1, val2… thöïc hieän caùc leänh command1, command2, … Thí duï: WRITE laø moät shell_script gôûi thoâng baùo tôùi 3 ngöôøi duøng user1, user2, user3: $cat WRITE for i in user1 user2 user3 do write $I < message_file done b) Caáu truùc : for do done Caáu truùc naøy cho pheùp thöïc hieän moät chuoãi leänh nhö nhau vôùi caùc ñoái ($1 $2 …) cuûa shell_script ñöôïc goïi. for variable do command1 command2 command3 ………………… done Vôùi variable coù theå gaùn ñöôïc caùc ñoái cuûa shell_scipt thöïc hieän caùc leänh command1, command2, … Thí duï: Shell_script copy sao cheùp caùc file trong danh saùch ñoái vaøo danh muïc /users/user8 vaø ñoåi nhoùm thaønh nhoùm student, ñoåi ngöôøi sôû höõu thaønh user8. $cat copy for i do if [-f $i] then cp $i /users/user8 chgrp student /users/user8/$i chown user8 /users/user8/$i fi done $ls -l total 10 -rw------- 1 phil animator 56 May 31 14:14:22 file1 -rw------- 1 phil animator 22 May 31 15:14:22 file2 $copy file1 file2 toto 55
  • 56. Copyright(c) by Galaxy CD – http://www.galaxycd.com toto is not a file $ls -l /users/user8 total 5 -rw------- 1 phil animator 56 May 31 14:14:22 file1 -rw------- 1 phil animator 22 May 31 15:14:22 file2 11.3.2 Voøng laëp while vaø until a ) while do done Voøng laëp while thöïc hieän moät chuoãi leänh khi ñieàu kieän vaãn coøn thoaû maõn. while command1 do command2 command3 command4 ………………… done Khi giaù trò traû veà cuûa vieäc thöïc hieän command1 vaãn thoaû maõn ñieàu kieän (true), shell thöïc hieän tieáp chuoãi leänh giöõa do … done. Hai leänh thöôøng duøng trong voøng laëp while: true hoaëc : cho giaù trò true(0) sleep[n] ñôïi n giaây Thí duï: - shell_script param hieån thò taát caû caùc ñoái cuûa leänh. $cat param while test $# -ne 0 do echo $1 shift done - shell_script disp_time hieån thò soá lieäu ngaøy thaùng theo khoaûng thôøi gian 30 giaây. $cat disp_time while true hoaëc while : do date sleep 30 done b) until do done Voøng laëp until hoaït ñoäng ngöôïc laïi vôùi voøng laëp while until command1 do command2 command3 command4 ………………… 56