Giáo trình UNIX

Mục l ục:

PHẦN 1: UNIX CƠ SỞ

Bà i 1. Kh ởi đo ng UNIX

1.1 Bắ t đầu p hiên là m vi ệc

1.2 Ke t th úc p hie n là m v iệc

1.3 Cá ch dùng lện h của UNIX

Bà i 2. Là m vi ệc v ới f ile.

2.1 To chư c fi le

2.2 Di chu yển giư a cá c th ưmục

2.3 Cá c th ao tá c cơ sở vơ i cá c th ưmục

2.4 Cá c th ao tá c cơ sở vơ i fil e th ườn g

Bà i 3. Bả o ve cá c file cu a ng ười sử d ụng

3.1 Mô tả ngư ời sử du ng

3.2 Mô tả nho m n gươ i sư dụn g

3.3 Bảo v ệ cá c fil e và cá c th ưmục

Bà i 4. Sao , ch uye n, li ên k ết v à tìm k iếm file

4.1 Sao ch ép file

4.2 Ch uye n v à đo i tên fil e

4.3 Tạo li ên k ết v ới f ile

4.4 Tìm k iếm file

Bà i 5. Tho ng tin g iữa như ng n gươ i sư du ng

5.1 Th ông tin bằ n g le nh mail

5.2 Th ông tin bằ n g le nh write

Bà i 6. Sử dụn g ch ươn g trì nh soạ n thảo vi

6.1 Kh ởi đ ộng vi

6.2 So ạn t hả o vă n bản

Bà i 7. She ll scrip t

7.1 Qu ản lý ti ến t rình

7.2 Lập cá ch thức cho sh ell scrip t

7.3 Cá c sh ell UNIX

Bà i 8. Đo i hươ ng (red irection )

8.1 Vào /ra ch uan

8.2 Ch uye n đ ổi dư lie u gi ữa cá c tiến trìn h

pdf64 trang | Chuyên mục: Linux | Chia sẻ: dkS00TYs | Lượt xem: 3081 | Lượt tải: 1download
Tóm tắt nội dung Giáo trình UNIX, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
Hai lệnh thường dùng trong vòng lặp while: 
 true hoặc : cho giá trị true(0) 
 sleep[n] đợi n giây 
Thí dụ: 
- shell_script param hiển thị tất cả các đối của lệnh. 
$cat param 
while test $# -ne 0 
do echo $1 
 shift 
done 
- shell_script disp_time hiển thị số liệu ngày tháng theo khoảng thời gian 30 
giây. 
$cat disp_time 
while true hoặc while : 
do date 
 sleep 30 
done 
b) until do done 
Vòng lặp until hoạt động ngược lại với vòng lặp while 
 until command1 
 do command2 
 command3 
 command4 
 ………………… 
Copyright(c) by Galaxy CD –  
 57 
done 
Khi giá trị trả về của việc thực hiện command1 vẫn không thoả mãn điều kiện 
(false), shell thực hiện chuỗi lệnh giữa do…done 
Lệnh false thường hay được dùng trong vòng lặp này để cho giá trị false. 
Thí dụ: vòng lặp until: 
- ta viết lại shell_script param ở trên: 
$cat param 
until test $# -eq 0 
do echo $1 
 shift 
done 
c) các phép tính số học 
Lệnh let được dùng đẻ thực hiện các phép tính số học: 
Các toán tử có thể dùng gồm: 
 + - * / % 
Thí dụ: 
 $integer i=10 j=2 k l 
 let “k=i+j” 
 $echo $k 
 12 
Chú ý: cú pháp let “k=i+j” tương đương với ((k=i+j)) hoặc k=i+j 
 $((l=k*j)); echo $l 
 24 
Lệnh let có thể dùng với các toán tử so sánh, kết quả được chứa trong biến $?. Các 
toán tử so sánh có thể dùng là: 
 = == != 
Thí dụ: 
 $((i<j));echo $? 
 1 
Ta cũng có thể dùng các toán tử logic sau đây với let: 
 ! && | | 
d) Lập trình một số đếm 
Lệnh expr cho phép ta thực hiện một thao tác có cú pháp như sau: 
 $expr term1 operator term2 
Các toán tử có thể dùng: 
 cộng trừ nhân chia lấy số dư 
 + - * / % 
Thí dụ: shell_script create_file tạo các file file1, …… file10 
 $cat create_file 
 count=1 
 while test “$count” -le 10 
Copyright(c) by Galaxy CD –  
 58 
 do >file$count 
 count=expr $count+1 
 done 
 $cat create_file2 
 integer count=1 
 while let “count <””10” 
 do >file$count 
 count=count+1 
 done 
11.3.3 Ra khỏi một vòng lặp: 
Lệnh break cho phép ra khỏi các vòng lặp for, while, until. 
Thí dụ: shell_script stock ghi các dòng ký tự vào từ bàn phím lên file lines cho tới khi 
ta gõ từ “END”: 
 $cat stock 
 while true 
 do echo “Enter your line:” 
 read answer 
 if test “$answer” = “END” 
 then break 
 else echo $answer >> lines 
 fi 
done 
Chú ý: break[n] cho phép ra khỏi n mức của các vòng lặp lồng. 
11.3.4 Bỏ qua phần tiếp theo trong một vòng lặp: 
Lệnh continue cho phép bỏ qua các lệnh còn lại, quay về đầu vòng lặp. 
Thí dụ: shell_script supprim xoá tất cả các file có trong danh sách đối, trừ file save và 
source: 
 $cat supprim 
 set -x 
 for i 
 do if test “$i” = “save” -o “$i” = “source” 
 then continue 
 fi 
 echo $i 
 rm $i 
 done 
 $cd appli 
 $lc 
 titi save source toto 
Copyright(c) by Galaxy CD –  
 59 
 $supprim * 
 + test titi = save -o titi = source 
 + echo titi 
 titi 
 + rm titi 
 + test save = save -o save = source 
 + continue 
 + test source = save -o source = source 
 + continue 
 + test toto = save -o toto = source 
 + echo toto 
 toto 
 + rm toto 
 $lc 
 save source 
Bài tập: 
1. Dùng các cấu trúc và rẽ nhánh viết các shell_script sau: 
a) writemail message userX 
Chức năng: - gởi thông báo trực tiếp cho userX 
- nếu người đó không đang trong phiên làm việc, gởi vào 
hộp thư. 
Gợi ý: dùng lệnh write, mail, | | 
b) fileread filename 
Chức năng: - kiểm tra đối có phải là file hay không 
- nếu đúng, kiểm tra có phải là file chỉ đọc (readonly) 
không 
- hiện các thông báo tương ứng kết quả 
c) filesort file1 file2 
Chức năng: - đọc một dòng từ bàn phím và ghi lên file theo cách sau: 
 + vào cuối file1 nếu dòng chứa ít nhất một chữ (letter) 
 + vào cuối file2 nếu dòng chứa ít nhất một số (number) 
và không chứa bất kỳ một chữ. 
 + vào file không (null) nếu khác hai loại trên 
 - kiểm tra số các đối, nếu khác 2, hiển thị thông báo: 
 “command: filesort file1 file2” 
Gợi ý: dùng các lệnh case, read và các metacharacter 
2. Sử dụng các vòng lặp đã học, viết các shell_script sau: 
a) testdir 
Chức năng: hiển thị danh sách các thư mục con trong thư mục làm việc. 
Copyright(c) by Galaxy CD –  
 60 
Gợi ý: dùng các lệnh pwd, for, test 
b) mkfiles prefix n 
Chức năng: -tạo n file rỗng (ngầm định là 5) với tên prefix.n (thí dụ: 
file.1, file.2, file.3 với prefix=file và n=3) 
 - hiện dòng khẳng định tạo file “prefix.n” hay không 
trong vòng lặp. 
Gợi ý: dùng if, while, test, read, expr 
Copyright(c) by Galaxy CD –  
 61 
Bài 12 Tín hiệu và đồng bộ 
Nội dung: Các tín hiệu của hệ thống, cách dùng tín hiệu để điều khiển và đồng bộ các 
tiến trình. 
12.1 Quản lý các tín hiệu: 
12.1.1 Các tín hiệu: 
Trong khi thực hiện một shell_script, các tín hiệu sau có thể phát sinh: 
 signal 0 ra khỏi shell (exit of the shell) 
signal 1 cắt liên lạc với terminal (disconnection) 
signal 2 Ngắt (thí dụ phím DEL) 
signal 3 Quit (Ctrl |) 
signal 9 Diệt tiến trình (Kill process) 
signal 10 Kết thúc logic một tiến trình 
Trong một chương trình ứng dụng, bằng cách dùng lệnh trap, ta có thể định nghĩa việc 
cần xử lý khi một tín hiệu phát sinh. Lệnh này cho phép gán một công việc xử lý cho 
bất cứ một tín hiệu nào. 
12.1.2 Lập trình phím DEL 
Lệnh trap không đối liệt kê danh sách các tính hiệu và các việc xử lý tương ứng. 
 $trap 
Cú pháp gán một công việc xử lý cho phím DEL: 
 $trap ‘các lệnh’ 2 
Xóa bỏ tác dụng phím DEL: 
 $trap ‘’ 2 
Gán chức năng ngầm định (default) cho phím DEL: 
 $trap 2 
Thí dụ: shell_script uncount hiển thị 5 4 3 2 1 trong các khoảng thời gian 5 giây, nếu 
ta gõ phím DEL, hiển thị chữ số tiếp. 
 $/Icat/ i uncount 
 trap ‘continue’ 2 
 for i in 5 4 3 2 1 
 do echo $i 
 sleep 5 
 done 
12.2 Quản lý các tiến trình 
12.2.1 Chạy ngầm (background) một tiến trình 
Một tiến trình sẽ chạy ngầmnếu ta thêm ký tự & vào sau tên nó khi gọi. 
Số của tiến trình (PID) sẽ được hiển thị trên màn hình. 
Thí dụ: chạy shell_script uncount ngầm: 
Copyright(c) by Galaxy CD –  
 62 
 $uncount& 
 [1] 467 
Chú ý: 
- sau khi cho một tiến trình chạy ngầm, ta lại có thể dùng terminal làm việc 
khác. 
- không có thông báo khi tiến trình ngầm kết thúc, do đó khi chạy shell_script ta 
có thể cho thêm thông báo kết thúc: 
$(command; echo “END”)& 
- số PID của tiến trình ngầm trong biến $! 
- Có thể đổi hướng vào/ra (i/o) của tiến trình ngầm, tránh nhiễu màn hình khi ta 
làm việc khác. 
12.2.2 Quản lý các tiến trình ngầm (job control) 
Lệnh: 
 $set -m 
cho phép quản lý các tiến trình đang chạy ngầm. 
Thí dụ: 
 $proc1 >> file1 & 
 [1] 478 
 $proc2 & 
 [2] 481 
 $proc3 & 
 [3] 490 
Hiển thị trạng thái của các tiến trình ngầm: 
 $jobs -l 
 [3] +490 running proc3 & 
 [2] -481 done proc2 
 [1] 478 running proc1 >> file1 & 
trong đó: 
 [n] số thứ tự tiến trình 
 + tiến trình chạy cuối cùng 
 - tiến trình trước tiến trình cuối 
 490 số PID của tiến trình 
 running tiến trình đang thực hiện 
 done tiến trình đã kết thúc 
 proc3 & tên lệnh gọi 
12.2.3 Tiếp tục tiến trình sau khi kết thúc phiên làm việc: 
Ta có thể cho tiếp tục thực hiện các tiến trình ngầm sau khi cắt liên lạc với terminal 
bằng cách dùng lệnh nohup. 
Các số liệu của tiến trình đưa ra stdout và stderr sẽ được ghi lên file nohup.out 
Thí dụ: 
 $nohup uncount& 
Copyright(c) by Galaxy CD –  
 63 
 [1] 478 
 sending output to nohup.out 
 $exit 
12.2.4 Đợi kết thúc tiến trình 
Bằng cách dùng lệnh wait với đối số là PID của tiến trình: 
 $wait 467 
12.2.5 Diệt một tiến trình 
Dùng lệnh kill với đối số là PID của tiến trình: 
 $kill 467 phát sinh tín hiệu 15 (ngầm định) 
 $kill -9 467 phát sinh tín hiệu diệt tiến trình 
Ta cũng có thể diệt một tiến trình theo số thứ tự của nó trong danh sách các tiến trình 
đang chạy ngầm: 
 kill %n 
Thí dụ: 
 $kill %1 
 $jobs 
 [1] + done(143) proc >> file1 & 
 [3] + running uncount & 
 $kill -9 %+ 
 [3] + killed uncount & 
12.3 Đệ quy 
Tất cả các shell_script đều có tính đệ quy (recursivity). 
Thí dụ: shell_script dir_tree hiển thị cây thư mục bắt đầu từ thư mục là đối của nó. 
 $cat dir_tree 
 if test -d $1 
 then echo $1 is a directory 
 for j in $1/* 
 do $0 $j #$0 tên shell_script 
 done 
fi 
$dir_tree /usr 
/usr is a directory 
/usr/adm is a directory 
/usr/adm/acct is a directory 
/usr/adm/acct/fiscal is a directory 
/usr/adm/acct/nite is a directory 
/usr/adm/sa is a directory 
Copyright(c) by Galaxy CD –  
 64 
/usr/bin is a directory 
………… 
Bài tập: 
1. Hãy viết shell_script: 
LisFileDel file1 file2 
 Chức năng: 
- hiển thị nội dung các file có tên trong danh sách đối 
- tiếp tục gõ phím DEL, bỏ qua file đang hiển thị, bắt đầu file tiếp 
- khôi phục chức năng ngầm định của phím DEL khi kết thúc. 
Gợi ý: Dùng trap, continue, signal 2 
2. Hãy viết shell_script: 
trap2 
 Chức năng: 
- thực hiện một vòng lặp hiển thị thông báo: 
“Shutdown in n minutes” n có giá trị từ 5 đến 1 
- mỗi khi gõ phím DEL, lập tức hiển thị thông báo tiếp theo 
- xoá bỏ tác dụng của phím DEL trong phút cuối cùng 
- khôi phục chức năng ngầm định của phím DEL khi kết thúc 
Gợi ý: dùng trap, continue, for 

File đính kèm:

  • pdfUnlock-Giao_trinh_UNIX.pdf
Tài liệu liên quan