H đi u hành MS-DOS và Windows thì có môi tr ng đánh l nh command-line, h đi u hành Unix và Linux có môi tr ng Shell.
Trang 1C ng Th c Hành Môn H i u Hành
-
M c Tiêu: Cài đ t H H Linux và s d ng shell script đ tìm hi u các thành
ph n trong H H Linux nh : h th ng file, quá trình, b nh và xu t nh p
N i dung:
Bu i 1: Các l nh c b n c a Shell
Bu i 2: C b n v l p trình Shell
Bu i 3: L p trình c u trúc và vòng l p trong Shell
Bu i 4: Qu n lý ti n trình
Bu i 5: Qu n lý vào ra và t p tin
Bu i 6: Ôn t p
Ph l c: Cài đ t Ubuntu
Trang 2CÁC L NH SHELL C B N
N i dung th c hành
̇ Tìm hi u v shell
̇ Các l nh c b n liên quan đ n đ ng d n
̇ Các l nh liên quan đ n vi c kh o sát th m c và file
̇ Các l nh thao tác file
̇ Quy n truy xu t file (file permission)
1 Shell – B thông d ch l nh
1.1 Shell là gì?
Chúng ta bi t r ng máy tính ch có th th c hi n các l nh d ng nh phân (bit 0, 1), còn g i là mã nh phân Các máy tính đ u tiên mu n th c hi n đ c ch ng trình thì ng i dùng ph i n p ch ng trình d i d ng các bit 0 và 1 ây là m t đi u r t phi n toái và c c k khó kh n v i con ng i kh c ph c nh c đi m này các nhà thi t k và xây d ng h đi u hành đ u có kèm theo m t ch ng trình đ c bi t Thông qua ch ng trình này ng i dùng có th nh p các l nh d i d ng ngôn ng
c p cao (ti ng Anh) đ yêu c u h đi u hành th c hi n m t công vi c nào đó
Ch ng trình đ c bi t này đ c g i là Shell (B thông d ch l nh) H đi u hành MS-DOS và Windows thì có môi tr ng đánh l nh command-line, h đi u hành Unix và Linux có môi tr ng Shell Chú ý r ng Shell không là m t thành c a h
đi u hành mà nó s d ng h đi u hành đ th c thi l nh, thao tác file…
H đi u hành Linux có th có nhi u lo i Shell khác nhau, d i đây là m t vài Shell thông d ng:
BASH (
Bourne-Again SHell )
Brian Fox and Chet Ramey Free Software Foundation
Là Shell thông
d ng nh t trong
H H Linux CSH (C SHell) Bill Joy
University of California (For BSD)
Là Shell có cú pháp
r t gi ng ngôn ng
C KSH (Korn SHell) David Korn
AT & T Bell Labs
Trang 3M t vài l nh liên quan đ n shell
Li t kê t t c các lo i shell có th có trong h th ng hi n t i dùng l nh:
$cat /etc/shells
Ki m tra lo i Shell đang đ c s d ng:
$echo $SHELL
1.2 Kh i đ ng Shell
N u chúng ta đ ng nh p vào h đi u hành Linux d i d ng Text thì m c nhiên chúng ta s ph i tr c ti p làm vi c v i Shell Tr ng h p dùng Linux d i d ng
đ h a (graphic) thì Shell s đ c kh i đ ng khi ta kh i đ ng c a s terminal (trong Fedora vào Applications / Accessories / Terminal) Khi Shell đ c kh i
đ ng ng i dùng s đ c đón chào và b t đ u nh p l nh t d u nh c (prompt) nh sau
$
Tuy nhiên d ng th c c a d u nh c có th thay đ i tùy h th ng Nó có th bao
g m c tên c a máy tính (hostname), th m c hi n hành đang làm vi c c a b n (current working directory)
1.3 Shell script là gì?
Nh đã nói trên shell là n i cho phép ng i dùng nh p l nh (thông th ng t bàn phím) và th c thi l nh Nh ng thay vì ng i dùng nh p tu n t các câu l nh
và th c thi chúng m t cách tu n t thì ng i dùng có th l u các l nh này vào m t file text và yêu c u shell th c hi n file này i u này đ c g i là shell script
M c đích: L nh cd cho phép b n di chuy n đ n nh ng đi m khác nhau trên cây
th m c
Cú pháp t ng quát:
$cd path
Trong đó path là đ ng d n ch đ n th m c mà ta mu n chuy n đ n
Ví d :
Chuy n đ n th m c /usr/local/bin th c hi n nh sau:
Chuy n v th m c c a ng i dùng hi n t i ta đánh l nh: cd
Trang 42.2 ng d n (Path) trong h đi u hành Linux
Dùng đ đ nh v m t tài nguyên nào đó (thông th ng là file) trong h th ng cây
th m c xác đ nh xem b n đang v trí nào (hay còn g i là th m c hi n
hành) trong cây th m c s d ng l nh: $pwd
Ví d :
Có 2 lo i đ ng d n th ng đ c s d ng là: ng d n tuy t đ i và đ ng d n t ng
đ i
Xác đ nh đ y đ toàn b đ ng d n t th m c g c (ký hi u: / ) đ n n i c n đ nh
v
Ví d :
/dev
/usr/bin
/usr/local/bin
chuy n vào th m c /user/local/bin dùng l nh nh sau:
$cd /user/local/bin
ng d n t ng đ i là đ ng d n đ c tính t v trí hi n hành đ n v trí c n đ nh
v M t đ ng d n t ng đ i không bao gi b t đ u v i ký t ‘/’
Ví d : gi s chúng ta đang th m c hi n hành là /usr Khi đó đ chuy n đ n th
m c /usr/local/bin chúng ta s d ng l nh:
$cd local/bin
(Trong khi n u s d ng đ ng d n tuy t đ i thì ph i đánh l nh: $cd /usr/local/bin)
Th m c cha c a th m c hi n hành đ c ký hi u b ng chu i hai ch m: “ ” Ký
hi u này th ng đ c s d ng v i l nh cd đ chuy n v th m c cha c a th m c
hi n hành:
Ví d : Gi s chúng ta đang th m c hi n hành là /usr/local/bin và th c hi n
l nh
$cd
Trang 5Khi đó chúng ta s đ c di chuy n v th m c /usr/local (th ki m tra l i b ng
l nh $pwd)
Chúng ta hoàn toàn có th s d ng ký hi u “ ” trong đ ng d n t ng đ i Gi s
có 2 đ ng d n /usr/local/bin và /usr/local/share và chúng ta đang có th m c hi n hành là /usr/local/bin di chuy n qua th m c /usr/local/share ta dùng l nh:
$cd /share
L nh này có ngh a là yêu c u h đi u hành di chuy n v th m c cha c a bin (là /usr/local) và chuy n ti p đ n th m c share
Ký hi u d u ch m “.” đ c dùng đ th hi n th m c hi n hành và đ c s d ng
đ yêu c u shell th c hi n m t ch ng trình hay shell script nào đó trong th m c
hi n hành
Ví d : $./myprog
myprog là m t shell script trong th m c hi n hành
Trong h đi u hành Linux m i ng i dùng khi đ ng nh p vào đ u có m t th m c
cá nhân đ l u tr d li u riêng Khi mu n tr v th m c cá nhân ng i dùng có
th dùng l nh cd không tham s Cho dù đang b t k th m c nào trong cây th
m c
Ngoài ra ký hi u “~” c ng đ c dùng đ xác đ nh là th m c các nhân Ví d ta
th c hi n ch ng trình myprog trong th m c hi n hành, v i tham s là myfile.txt
th m c cá nhân b ng l nh sau:
$ /myprog ~/myfile.txt
Bi n PATH là m t bi n trong môi tr ng shell PATH l u danh sách các đ ng
d n mà shell d a vào đó đ tìm ki m m t ch ng trình hay file nào đó khi c n thi t sau khi tìm ki m th m c hi n hành không có ki m tra bi n PATH đang l u nh ng đ ng d n nào ta dùng l nh:
$echo $PATH
Chú ý: PATH ph i là ký t hoa
Trang 6thêm đ ng d n m i vào danh sách c a bi n PATH ta có th g n đ ng d n
c n thêm vào sau biên PATH nh sau:
PATH=$PATH:<path>
Ví d : (chú ý PATH=$PATH ph i vi t li n nhau)
ng d n /root/shellscript/ đã đ c đ a vào bi n PATH
L nh ls đ c dùng đ li t kê n i dung c a th m c ây là l nh đ c dùng th ng
nh t trong Linux L nh ls đ c s d ng r t nhi u cách v i các tham s t ng ng
D i đây là m t vài tr ng h p s d ng c a l nh ls
$ls: li t kê file trong th m c hi n hành
Ví d :
$ls -l: li t kê files trong th m c hi n hành v i thông tin đ y đ (long format)
Ví d :
Trang 7K t qu c a l nh ls v i tham s -l đ c chia thành 7 c t:
(1) (2) (3) (4) (5) (6) (7)
C t (1): xác đ nh quy t truy xu t c a file ho c th m c Ký hi u “-” th hi n đó là
m t file bình th ng, ký t “d” xác đ nh đó là th m c T p h p các ký t theo sau
đ c chia làm 3 nhóm, m i nhóm 3 ký t Các ký t này có th là r (read), w
(write), x (execute) Nhóm 3 ký t đ u th hi n quy n c a ng i s h u (owner), nhóm 3 ký t k th hi n quy n cho nhóm (group) và nhóm 3 ký t cu i th hi n quy n cho t t c nh ng ng i dùng khác
C t (2): th hi n s l ng n i k t kay liên k t (link) đ n t p tin ho c th m c (khái
ni m n i k t s đ c đ c p sau)
C t (3): xác đ nh ch s h u c a t p tin ho c th m c
C t (4): tên c a nhóm có quy n t ng ng trên t p tin ho c th m c
C t (5): kích th c t p tin ho c th m c tính theo bytes
C t (6): th i gian mà file hay th m c đ c c p nh t
C t (7): tên file ho c th m c
L nh less cho phép xem n i dung c a file text
Cú pháp: $ less tên_file
Ví d :
K t qu th c hi n l nh trên nh sau:
Trang 8N i dung c a file đ c li t kê theo t ng trang màn hình duy t qua n i dung
c a file ta dùng các phím ch c n ng nh sau:
Page Up ho c b: cu n lên 1 trang
Page Down ho c space: cu n xu ng 1 trang
G: di chuy n đ n dòng cu i c a file
1G: di dhuy n đ n dòng đ u c a file
/chu i: nh y đ n dòng ch a chu i c n tìm
n: ti p t c tìm chu i đã tìm tr c đó
q: thoát
L nh file đ c dùng đ xác đ nh file thu c lo i file gì, ch ng h n nh file: ASCII text, Bourne-Again shell script text, JPEG image data, RPM…
Cú pháp: $file tên_file
Ký t đ i di n đ c dùng đ xác đ nh tên file hay t p h p các tên phai theo m t
khuôn m u (pattern) nào đó D i đây li t kê các ký t đ i di n và ý ngh a c a nó:
Trang 9Ký t đ i di n Ý ngh a
* Trùng kh p v i b t k m t hay nhi u ký t nào
? Trùng kh p v i b t k ký t đ n nào [t p_h p_các_ký_t ] Trùng kh p v i b t k ký t nào n m trong
t p_h p_các_ký_t T p_h p_các_ký_t có th đ c
th hi n d i d ng 1 kho n Ví d [A-Z] th hi n t p
h p các ký t hoa
[! t p_h p_các_ký_t ] Trùng kh p v i b t k ký t nào KHÔNG n m trong
t p_h p_các_ký_t
D i đây là m t vài ví d minh h a vi c s d ng ký t đ i di n
* T t c tên file
g* T t c các file có tên b t đ u b ng ch g
b*.txt T t c các file có tên b t đ u b ng ch b và k t thúc v i txt Data??? T t c các file có tên b t đ u v i Data và ti p theo là chính
xác 3 ký t [abc]* T t c các file có tên b t đ u b ng a ho c b ho c c theo sau
là b t k ký t gì [A-Z]* T t c các file có tên b t đ u b ng ký t hoa theo sau là b t
k ký t gì
BACKUP.[0-9][0-9][0-9]
T t c các file có tên b t đ u v i BACKUP k đ n là d u
ch m và ti p theo là 3 ký s [!a-z]* T t c các file có tên b t đ u KHÔNG ph i là ký t th ng
theo sau là b t k ký t gì
L nh cp th c hi n copy file ho c th m c D i đây là các d ng c b n c a l nh
cp
cp file1 file2 Copy n i dung c a file1 vào file2 N u file2 ch a t n t i thì
s đ c t o ra, ng c l i n i dung c a file2 s b chép
ch ng
cp -i file1 file2 Gi ng nh trên, nh ng trong tr ng h p file2 đã t n t i thì
ng i dùng s đ c nh c nh tr c khi file2 b chép ch ng
cp file1 dir1 Copy file1 vào trong th m c dir1
cp –R dir1 dir2 N u dir2 ch a t n t i thì dir2 đ c t o ra và n i dung th
m c 1 đ c chép vào Tr ng h p dir2 đã t n t i thi th
m c dir1 đ c t o ra trong dir2 và n i dung c a th m c dir1 đ c chép vào dir1 trong dir2
L nh mv dùng đ di chuy n m t ho c nhi u files vào m t th m c khác, ho c l nh
Trang 10đ i tên thành dir2 Tr ng h p dir2 đã t n t i thì dir1 s đ c di chuy n vào dir2
c dùng đ xóa file ho c th m c D i đây là vài cách dùng c a l nh rm
Rm file1 file2 Xóa file1 và file2
Rv –r dir1 dir2 Xóa th m c dir1 và dir2 cùng v i toàn b n i dung c a nó
c dùng đ t o th m c
Cú pháp: $mkdir tên_th _m c
4.6 L nh "which"
B n có th ki m tra m t ch ng trình nào đó có n m trong các th m c đ c ch
ra b i PATH hay không b ng cách dùng l nh which Ví d , đây ta s th y r ng trong h th ng Linux hi n tai không có ch ng trình tên sense:
$ which sense
which: no sense in (/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin)
Tr ng h p khác ta l i thành công khi tìm l nh ls:
$ which ls
/usr/bin/ls
4.7 S d ng "which -a"
Dùng c -a đ yêu c u which hi n th t t c các ch ng trình đ c yêu c u có trong các th m c đ c mô t b i PATH:
$ which -a ls
/usr/bin/ls
/bin/ls
N u b n mu n tìm nhi u thông tin h n ngòai v trí c a m t ch ng trình b n có
th dùng ch ng trình whereis :
$ whereis ls
ls: /bin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz
Ta th y r ng that ls có m t trong hai n i là /bin và /usr/bin H n th chúng ta còn
đ c thông báo r ng có tài li u h ng d n s d ng n m trong th m c
/usr/share/man
Trang 11L nh find là m t ti n ích khác cho phép b n tìm ki m các t p tin V i find b n không b gi i h n trong ph m vi tìm ki m ch ng trình, b n có th tìm ki m m t
t p tin b t k mà b n mu n b ng cách s d ng m t tiêu chu n tìm ki m nào đó Ví
d , đ tìm m t t p tin có tên README, b t đ u t th m c /usr/share/doc ta th c
hi n l nh sau:
$ find /usr/share/doc -name README
/usr/share/doc/ion-20010523/README
/usr/share/doc/bind-9.1.3-r6/dhcp-dynamic-dns-examples/README
/usr/share/doc/sane-1.0.5/README
B n có th s d ng các ký t đ i di n trong tham s -name, mà b n bao b c nó
b ng c p nháy đ n hay đ t ký t \ phía tr c ký t đ i di n đó Ví d , chúng ta
mu n tìm t p tin README v i các ph n m r ng khác nhau nh sau:
$ find /usr/share/doc -name README\*
/usr/share/doc/iproute2-2.4.7/README.gz
/usr/share/doc/iproute2-2.4.7/README.iproute2+tc.gz
/usr/share/doc/iproute2-2.4.7/README.decnet.gz
/usr/share/doc/iproute2-2.4.7/examples/diffserv/README.gz
/usr/share/doc/pilot-link-0.9.6-r2/README.gz
/usr/share/doc/gnome-pilot-conduits-0.8/README.gz
/usr/share/doc/gimp-1.2.2/README.i18n.gz
/usr/share/doc/gimp-1.2.2/README.win32.gz
/usr/share/doc/gimp-1.2.2/README.gz
/usr/share/doc/gimp-1.2.2/README.perl.gz
[578 additional lines snipped]
Ta có th dùng l nh sau:
$ find /usr/share/doc -name '[Rr][Ee][Aa][Dd][Mm][Ee]*'
Hay dùng tham s -iname:
$ find /usr/share/doc -iname readme\*
Tùy ch n -type cho phép b n tìm ki m các đ i t ng trong h th ng t p tin theo
nh ng ki u khác nhau Các tham s có th c a tùy ch n -type là b (cho thi t b
d ng kh i), c (thi t b d ng ký t ), d (th m c), p ( ng d n có tên), f (t p tin
th ng), l (liên k t m m), và s (socket) Ví d , đ tìm ki m các liên k t m m trong th m c /usr/bin mà nó có ch a chu i vim ta th c hi n l nh sau:
$ find /usr/bin -name '*vim*' -type l
/usr/bin/rvim
/usr/bin/vimdiff
/usr/bin/gvimdiff
Trang 12-rw - 1 root root 0 Jan 4 18:00 d
$ date
Mon Jan 7 18:14:52 EST 2002
B n có th tìm các t p tin mà nó đ c t o ra trong vòng 24 gi v a qua b ng l nh sau:
$ find -name \? -mtime -1
./a
Ho c b n có th tìm các t p tin mà chúng đ c t o ra tr c cách đây đã h n 24
gi :
$ find -name \? -mtime +0
./b
./c
./d
Tùy ch n -size cho phép b n tìm các t p tin d a trên kích th c c a chúng M c
đ nh, đ i s c a -size là các kh i 512-byte, tuy nhiên vi c thêm vào các h u t làm
m i vi c d dàng h n Các h u t đ c ch p nh n là b (kh i 512-byte), c (bytes), k (kilobytes), and w (2-byte) Bên c nh đó, b n có th thêm vào d u c ng đ nói
r ng l n h n ho c d u tr đ nói là nh h n
Ví d , đ tìm các t p tin bình th ng mà nó nh h n 50 bytes ta dùng l nh sau:
$ find /usr/bin -type f -size -50c
/usr/bin/krdb
/usr/bin/run-nautilus
/usr/bin/sgmlwhich
/usr/bin/muttbug
V i m c đích là xây d ng m t h đi u hành đa ng i dùng, ngay t lúc đ u H H Unix (và Linux sau này) đã đ c thi t k đ đáp ng yêu c u này Trong H H đa
ng i dùng ph i đ m b o sao cho ho t đ ng c a m t ng i dùng không th làm
h ng h th ng hay phá ho i d li u c a ng i dùng khác tìm hi u rõ h n
H H Linux đã th c hi n vi c này th nào, trong ph n này chúng ta tìm hi u các
l nh sau:
chmod
su
chown
chgrp
Trang 13ây là các l nh c b n nh t liên quan đ n vi c thi t l p các quy n truy xu t đ n file Tuy nhiên tr c khi đ c p k đ n các l nh trên Chúng ta s tìm hi u m t chút v các quy n truy xu t trên file
Trên h th ng Linux (hay Unix) file và th m c đ c gán quy n truy c p cho 3
đ i t ng: ng i s h u file (owner), nhóm ng i dùng (group) và nh ng
này là: quy n đ c (read), quy n vi t (write) và quy n th c thi (execute)
kh o sát quy n truy c p c a m t file ta dung l nh ls v i tham s -l nh sau:
V i l nh ls –l install.log li t kê các thông tin c a file install.log:
- Ch s h u (owner) c a file là root
- Ng i dùng root này có quy n read(r) và write(w)
- Nh ng ng i dùng thu c nhóm root ch có quy n read(r)
- Nh ng ng i dùng khác c ng ch có quy n (r)
Quy n truy xu t c a file đ c qui đ nh b i c t đ u tiên (vd: -rw-r r ) D i đây
là s đ gi i thích thông tin c a c t đ u tiên này
L nh chmod đ c s d ng đ thay đ i quy n truy xu t file và th m c Khi s
d ng l nh chmod ph i cung c p quy n c n thi t l p cho file hay th m c Quy n
c n thi t l p đ c bi u di n b i m t dãy s nh phân nh ví d sau:
rwx rwx rwx = 111 111 111
rw- rw- rw- = 110 110 110
Quy n đ c, vi t và th c thi cho các ng i dùng khác Quy n đ c, vi t và th c thi cho nhóm ng i s h u file Quy n đ c, vi t và th c thi cho nhóm ng i s h u file
“-” là file th ng
“d” là th m c