You are on page 1of 14

Thực hành Hệ điều hành LINUX

Tuần 1 – Thao tác trên Shell


1. Chuẩn bị
a. Khởi động phần mềm truy cập từ xa vào Server Linux
- Khởi động chương trình putty.exe trong thư mục E:\ssh4Windows\
- Nhập địa chỉ máy chủ (IP Address) 192.168.6.5, với Protocol : SSH
- Chọn Open để thực hiện kết nối đến máy chủ
- Có thể lưu các thông số kết nối với máy chủ: bằng cách đặt tên cho kết nối tại Save sessions là
Linux, sau đó chọn Save.
b. Đăng nhập vào server Linux
Login : gõ tên user truy nhập (từ sv50  sv89)
Password : gõ123456
c. Kết thúc phiên làm việc với Linux
- Tại dấu nhắc hệ thống [..]$ gõ logout
d. Tạo thư mục làm việc
- Tạo thư mục (dùng lệnh mkdir) của bạn trong thư mục ./home/sv*/ với tên là MãSV_TênSV
- Ví dụ : sinh viên Hà, A01234 → thư mục được tạo mkdir A01234_Ha
2. Tìm hiểu Shell
a. Một số lệnh thao tác trên file, thư mục
- Cú pháp một câu lệnh bao gồm những thành phần nào?
- Di chuyển tới thư mục mà bạn đã tạo trong phần 1.d (dùng lệnh cd: cd A01234_Ha)
- Kiểm tra đường dẫn tới thư mục hiện hành ( dùng lệnh pwd)
- Tạo thư mục TH_Tuan1, TH_Tuan2, TH_Tuan3 trong thư mục đó (dùng lệnh mkdir)
- Di chuyển đến thư mục TH_Tuan1 (dùng lệnh cd)
- Tạo thư mục luu trong thư mục TH_Tuan1
- Tạo file bai1.doc (dùng lệnh cat và điều hướng Redirection >: cat > bai1.doc )
- Tạo file mới có tên là bai2.doc có nội dung giống file bai1.doc (dùng lệnh cp: cp bai1 bai2.doc)
- Hiển thị nội dung file bai1.doc trong thư mục TH_Tuan1 (dùng lệnh cat: cat bai1.doc)
- Copy file bai1.doc sang thư mục TH_Tuan2 (dùng lệnh cp với đường dẫn tuyệt đối)
- Copy file bai1.doc sang thư mục TH_Tuan3 (dùng lệnh cp với đường dẫn tương đối)
- Di chuyển file bai1.doc và bai2.doc sang thư mục luu (dùng lệnh mv: mv bai1 luu/)
- Di chuyển tới thư mục TH_Tuan2, kiểm tra file bai1.doc có trong thư mục chưa?
- Tạo thư mục có tên backup trong thư mục TH_Tuan2
- Di chuyển file bai1.doc, bai2.doc trong thư mục TH_Tuan1 sang thư mục backup (dùng lệnh mv)
- Liệt kê các file có trong một thư mục và thông tin về file đó (dùng lệnh ls, tìm hiểu một vài đối số)
- Kiểm tra xem bạn đang làm việc trong thư mục nào ? (dùng lệnh pwd)
- Xoá file bai1.doc trong thư mục TH_Tuan1 (dùng lệnh rm: rm bai1.doc)
- Xoá thư mục backup trong thư mục TH_Tuan2 (dùng lệnh rmdir hoặc lệnh rm).
- Copy toàn bộ thư mục TH_Tuan1 sang thư mục TH_Tuan3 (dùng lệnh cp với đối số –r).
- Dùng lệnh cd với các đối số $HOME, .., ., . /, .. /, /
- Xem đường dẫn đến thư mục làm việc gốc của user trong biến $HOME (dùng lệnh echo $HOME)
- Chú ý : để xem cú pháp và chức năng của một lệnh, bạn có thể dùng trợ giúp của Linux, bằng cách
dùng lệnh man (manual), như sau
$ man tên_lệnh_cần_ tra_cứu
$ man cat
- Dùng chương trình mc (midnight commander) để làm việc với cây thư mục $ mc
- Dùng các phím chức năng trong chương trình mc để làm thao tác đối với file, thư mục.

1
Thực hành Hệ điều hành LINUX

b. Phân biệt Redirection và Pipe


- Giới thiệu các dòng dữ liệu STDIN, STDOUT
- Toán tử Redirection : >, >>
- Toán tử Pipe : |
- Vị trí của Redirection và Pipe trong dòng lệnh ?
- Tạo file có tên bai3.doc có nội dung là nội dung của file bai1.doc và file bai2.doc (dùng lệnh cat
kết hợp với toán tử điều hướng)
$cat bai1.doc bai2.doc > bai3.doc
- Đưa nội dung của file bai1.doc nối thêm vào file bai3.doc
- Điều gì sẽ xảy ra khi có lệnh $cat bai1.doc > bai1.doc
- Xem nội dung file bai4.doc là gì nếu có lệnh $ ls –l > bai4.doc | wc
- Thực hiện lệnh $ ls –li | wc > bai5.doc, file bai5.doc có nội dung là kết quả của lệnh ls hay wc>.

2
Thực hành Hệ điều hành LINUX

Tuần 2 – Thao tác trên Shell (tiếp)


1. Tiếp tục sử dụng điều hướng Redirection và Pipe
Làm quen với điều hướng dòng thông báo lỗi chuẩn (STDERR): 2>, 1>, >&
Lệnh tee: dùng để đưa nội dung từ STDOUT vừa ra màn hình vừa ghi vào một file.
Vị trí đặt các toán tử điều hướng & pipe như thế nào trong một dòng lệnh ???
2. Một số lệnh thao tác trên file, thư mục
- Đường dẫn tương đối, tuyệt đối : Đường dẫn tuyệt đối là đường dẫn bắt đầu từ thư mục gốc. Đường
dẫn tương đối là đường dẫn tính từ thư mục hiện tại. Ký tự (/) chỉ TM gốc. Ký tự (~) chỉ đường dẫn
từ TM gốc đến TM dành cho user của bạn (nằm trong /home). Ký tự (.) chỉ TM đang làm việc hiện
hành. Ký tự (..) chỉ TM cha của TM hiện hành. Dùng lệnh cd để chuyển thư mục làm việc.
- Lệnh file : xem kiểu file;
- Lệnh od (option –c,-d,-x,-o): hiển thị từng byte trong file theo hệ tương ứng, mặc định là hệ cơ số 10.
- Lệnh find để tìm kiếm file theo 1 tiêu chí nào đó,…
$ find directory_list –option criteria
Trong đó: -name với tên file thỏa mãn mẫu
-print in kết quả tìm kiếm ra màn hình
-type với kiểu file d, f, l,…
-size+/-num file có kích cỡ > hoặc <num.
Ví dụ : $ find . \( \( -type d -o -type f \) -empty \) -print
Tìm các file rỗng hoặc thư mục rỗng trong thư mục hiện tại.
3. Tìm hiểu về cách phân quyền trên một file/ thư mục
- Dùng lệnh chmod để thay đổi quyền trên một file/ thư mục; thêm quyền dùng +, bớt quyền dùng -.
- Thiết lập quyền cho 1 file theo ký hiệu quyền : r → read, w → write, x → executable.
- Thiết lập quyền cho từng nhóm người dùng theo ký hiệu nhóm: u → user, g → group, o → other.
Ví dụ: $ chmod u+x bai1.doc
Thêm quyền executable cho file bai1.doc.
- Thiết lập quyền cho 1 file bằng mã nhị phân trong hệ cơ số 8: nếu mã nhị phân trên một quyền nào
đó là 0 → không thiết lập quyền, 1 → có thiết lập quyền tương ứng. Quyền cho 1 nhóm người dùng
là mã tương ứng trong hệ cơ số 8, ví dụ: 38 ≈ 0112 nghĩa là có quyền write và executable. Quyền trên
file là tổ hợp quyền trên lần lượt 3 nhóm người dùng, ví dụ 744 nghĩa là rwx r-- r--.
4. Trả lời các câu hỏi sau
- Thử nghiệm lệnh more. Lệnh more dùng để làm gì? Lệnh more và cat có khác nhau hay không?
- Với file bai1.doc đã tạo ở tuần 1, dùng lệnh ls để xem các thông tin về file này.
- Lệnh để thay đổi quyền trên một file là chmod. Đặt quyền cho 1 file như sau:
chmod u+x bai1.doc → đặt quyền chạy (executable) cho nhóm người dùng sở hữu file đó.
Lệnh $ chmod a+xw bai1 và lệnh $ chmod 444 bai1 có tương đương hay không ?
- Lệnh trên tương đương với mã nhị phân trong hệ nhị phân cơ số 8 là gì ? (Symbolic Mask)
- Các lệnh sau có hiển thị kết quả ra STDOUT không ?
(1) $ ls –lia
(2) $ ls –lia > kq
(3) $ ls –lia | more
(4) $ ls –lia | more > kq1
- Lệnh thứ 2 và 4 cho kết quả như thế nào ? ( giống nhau hay khác nhau)
5. Các kí tự đại diện (jokers)
- Các kí tự đặc biệt: *, ?, [ ], ^, -, …
- Tạo các file có tên như sau trong thư mục TH_Tuan2 ở thư mục của bạn ( tạo ra từ Tuần 1)

3
Thực hành Hệ điều hành LINUX

Doc1 Doc5 Document DocP Docc Docar


Doca Doc3 DocA DocC Docr Doc^
Thực hiện các yêu cầu sau:
- Hiển thị thông tin các file có tên bắt đầu là Doc.
- Hiển thị thông tin các file có tên bắt đầu là Doc và kết thúc là 1 ký tự bất kỳ.
- Hiển thị thông tin các file có tên bắt đầu là Doc và ký tự thứ 4 là 1 ký tự số.
- Hiển thị thông tin các file có tên bắt đầu là Doc và ký tự thứ 4 là 1 ký tự chữ hoa.
- Hiển thị thông tin các file có tên bắt đầu là Doc, ký tự thứ 4 không phải ký tự số hoặc ký tự thường.
- Copy các file có tên bắt đầu là Doc, ký tự thứ 4 không phải là ký tự số, sau đó có thể có ký tự bất kỳ.
- Xoá các file có tên bắt đầu là Doc, ký tự thứ 4 là ký tự chữ.
- Xem nội dung của các file có tên bắt đầu là Doc, ký tự thứ 4 là ký tự thường.
- Copy các file có đuôi .doc vào thư mục TH_Tuan3 (thư mục đã tạo trong tuần 1).
6. Link file
- Có 2 kiểu file link : hard link, symbolic link; phân biệt giữa 2 kiểu file link này.
- Dùng lệnh ln để tạo file hard link cho file bai1.doc (file s2 liên kết cứng đến file bai1.doc), dùng đối
số -s sẽ tạo file symbolic link (file s3 liên kết biểu tượng đến file bai1.doc). Dùng lệnh ls để xem
thông tin về 3 file đó, so sánh các thông tin đó. Từ đó đưa ra nhận xét về hard link và symbolic link.
- Symbolic link và Hard link tương đương với khái niệm nào trong Windows?

4
Thực hành Hệ điều hành LINUX

Tuần 3 – Biến và biến đối số


1. Sử dụng biến trong shell
- Đặt biến trong shell ( dùng phép gán: tên_biến=giá_trị), hủy một biến ( dùng lệnh unset: unset
tên_biến), lấy giá trị của biến ( dùng toán tử $ kết hợp với lệnh echo để in giá trị biến ra STDOUT:
echo $tên_biến), xem danh sách biến và giá trị của các biến đó trong hệ thống ( dùng lệnh set).
- Đặt biến có giá trị kiểu xâu ký tự, sử dụng các dấu bao xâu: “ ”, ‘ ’, ` `. Phân biệt cách dùng các dấu
bao xâu này.
- Dùng lệnh echo để in xâu ký tự ( echo Xâu_ký_tự) hay giá trị của một biến ra màn hình.
2. Thực hiện các yêu cầu sau
- Hiển thị thông tin về các file ở TM hiện hành, sau đó đánh số thứ tự các file đó ( dùng lệnh cat với
đối số -n), kết quả được đưa vào file kqc1.
- Tạo 1 file có tên fc2.sh trong đó gõ các lệnh để hiển thị những yêu cầu sau:
Gán biến ngay giá trị là `date`; Gán biến nguoidung giá trị là `who`
Hiển thị xâu “Hôm nay là thu * ”, với (*) là giá trị ngày hệ thống được ghi trong biến ngay.
Hiển thị xâu “Người đang sử dụng là ** ”, với (**) là giá trị được ghi trong biến nguoidung.
Hiển thị xâu “Danh sách biến đang dùng là $ngay= * va $nguoidung= **”, với (*) và (**) được
giải thích ở trên.
- Gán quyền cho file fc2 : quyền chạy (executable) trên tất cả các nhóm người dùng, chỉ gán quyền
đọc (read) và ghi (write) cho nhóm người dùng user.
- Thực thi file fc2 (dùng lệnh sh hoặc lệnh ./file_name), kết quả là gì?
- Thực thi file fc2, kết quả vừa đưa ra màn hình, vừa ghi vào file kqc2.
3. Tìm hiểu biến đối số (Variable Argument)
Biến đối số là biến mà giá trị của nó là được truyền vào khi thực hiện câu lệnh như đối số của dòng
lệnh. Các biến này được đánh số từ 1-255. Mỗi chuỗi ký tự được gán vào 1 biến, để 1 biến nhận 1
chuỗi ký tự gồm nhiều từ, cần đưa chuỗi đó vào dấu bao xâu. Lấy giá trị của một biến đối số giống như
lấy giá trị của các biến thông thường khác: là $số_TT_biến.
Ví dụ: $1 là giá trị của biến đối số thứ 1, $0 là tên câu lệnh, $# là số các đối số, $* là tất cả các đối số.
Ví dụ : File xyz.sh có nội dung:
echo “Bien doi so thu 2 la $2 ; Bien doi so thu 1 la $1”
echo “File nay co ten la $0, gia tri cua $# bien doi so \$1 va \$2 la $* ”
echo ‘File nay co ten la ’ “$0” ‘, gia tri cua ’ “$#” ‘ bien doi so $1 va $2 ’ “$*”
Khi thực hiện lệnh $ sh xyz.sh TH UNIX, khi đó TH là giá trị truyền vào biến thứ 1, UNIX là giá trị
truyền vào biến thứ 2. Kết quả hiển thị như thế nào?
Nếu thực hiện lệnh $ sh xyz.sh “TH UNIX” LINUX thì kết quả hiển thị là gì?
Biến đối số có thể nhận giá trị trả về của một câu lệnh bằng cách dùng lệnh set kết hợp với lệnh đó, cụ
thể: set `tên_lệnh_cần_lấy_giá_trị`. Các biến đối số sẽ lần lượt nhận giá trị là những chuỗi ký tự trong
kết quả của lệnh đó.
Ví dụ : $ date
Tue Sep 20 14:00:00 ICT 2005
$ set `date`
⇒ biến đối số có giá trị $1 = Tue, $2 = Sep, $3 = 20, $4 = 14:00:00, $5 = ICT và $6 = 2005.
4. Áp dụng
- Viết các lệnh cần thiết để hiển thị chuỗi ký tự sau
Today is Tue, 20 th, month Sep, year 2005
với ngày tháng lấy theo ngày giờ hệ thống.
- Cho file abc.doc có nội dung Meo con di hoc
Chang mang cai gi

5
Thực hành Hệ điều hành LINUX

Viết các lệnh cần thiết để hiển thị như sau (dùng lệnh wc để đếm số từ (-w), số dòng (-l) và số ký tự
(-c) có trong file)
File abc co 2 dong, 8 tu va gom 33 ky tu
- Viết chương trình shell, tên file là xemtt.sh (dùng lệnh sh hoặc ./ để chạy) để in theo mẫu dưới đây
Today is 20 – Sep - 2005, now is 14:00:00
There is 2 pts to be login LINUX
User associated with STDIN is nga at (192.15.6.218).
Current working directory is home/nga.
Với tên user là tên truy nhập và địa chỉ IP của máy bạn đang truy nhập và số lượng máy chính là
số lượng host đang cùng truy nhập vào máy chủ. Dùng biến $HOME để xem đường dẫn đến thư
mục làm việc gốc của bạn. Dùng lệnh who để hiện thị thông tin về tất cả người dùng đang truy
nhập vào hệ thống, option là -m sẽ trả về thông tin của người dùng đang thực hiện truy vấn thông
tin. Ví dụ
$ who
nga pts/0 Sep 15 15:21 (192.168.6.218)
sv50 pts/1 Sep 15 15:22 (192.168.6.227)
$ who -m
nga pts/0 Sep 15 15:21 (192.168.6.218)
- Viết chương trình có tên demfile.sh để thông báo số lượng file trong TM “Trong thu muc co x file
(khong ke file he thong)”.

6
Thực hành Hệ điều hành LINUX

Tuần 4 – Shell Programming (1)


1. BASH
- Tìm hiểu các file khởi tạo khi đăng nhập vào shell .bash_history, .bash_profile, .bashrc,...
- Tìm hiểu các biến môi trường: HOME, BASH, PS1, PS2, USERNAME, HISTFILE,... bằng câu lệnh
env (hoặc printenv).
- Cấu trúc lập trình:
ƒ Điều kiện: if <bt_điều_kiện> then <lệnh_thực_hiện> fi; if ... then ... else ... fi; if ... then ... elif ...
then ... else ... fi; case <tên_biến> in ... esac
ƒ Lặp: for <tên_biến> in <ds_giá_trị> do <lệnh_thực_hiện> done; until <bt_điều_kiện> do
<lệnh_thực_hiện> done; while <bt_điều_kiện> do <lệnh_thực_hiện> done
ƒ Tương tác với người dùng: select <tên_biến> in <ds_giá_trị> do <lệnh_thực_hiện> done
2. Ví dụ 1 về shell script: Tạo file script1.sh (có thể dùng mc, vi, emacs hoặc cat để soạn thảo) có nội
dung như sau:
again=1 # Gán giá trị cho biến again
while let “again <= 3” # Vòng lặp để kiểm tra giá trị again <=3
do
echo $again Hello # In giá trị again và chuỗi Hello
let “again = again + 1” # Tăng giá trị biến again thêm 1 đơn vị
done
exit 1 # Trả về lỗi của chương trình
Ý nghĩa: In 3 dòng chữ Hello ra màn hình.
Thực thi file:
⎯ Cách 1: sh script1.sh
⎯ Cách 2: ./script1.sh
⎯ Cách 3: script1.sh (phải đặt quyền executable trên file bằng lệnh chmod)
™ Có thể gõ đoạn script trên từ dấu nhắc shell, shell sẽ thực hiện khi kết thúc đoạn script này. Tuy nhiên
để xuống dòng trong khi chưa kết thúc đoạn script bạn phải gõ \↵
$ again=1 \↵
> while let “again <= 3” \↵
> do \↵
> echo $again Hello \↵
> let “again = again + 1” \↵
> done \↵
Chú ý: dấu > là dấu nhắc shell cấp 2 để thông báo câu lệnh còn tiếp tục trên dòng này.
™ Có thể gõ đoạn script trên cùng dòng lệnh, bằng cách thay dấu \↵ bằng dấu “;”.
3. Ví dụ 2: Tạo và thực thi file inDS.sh sau:
#!/bin/sh # Chỉ định chương trình shell mà hệ thống dùng để chạy
tl=y # Gán giá trị cho biến tl
while [ “$tl” = “y” ] # Vòng lặp kiểm tra giá trị biến tl
do
clear # Xóa màn hình
tongchan=0; tong=0 ; i=1 # Gán giá trị cho biến tongchan, tong, i
echo -n “Nhap n: ” ; read n # Hiển thị dòng “Nhap n”; đọc giá trị vào biến n
while [ $i -le $n ] # Kiểm tra giá trị biến i ≤ n không?
do
let “t=i%2” # Gán kết quả của phép chia lấy dư vào biến t
if [ $t -eq 0 ] ; then # Kiểm tra giá trị biến t=0?

7
Thực hành Hệ điều hành LINUX

let “tongchan=tongchan+i” # Tính giá trị cho biến tongchan


fi
let “tong=tong+i” ; let “i=i+1” # Tính giá trị cho biến tong, i
done
echo “ Tong cac so tu 1 den $n la: $tong ” # In xâu ký tự và giá trị biến n, tong
echo “ Tong cac so chia het cho 2 tu 1 den $n la : $tongchan ”
echo -n “ Co tiep tuc khong (y/n)? ” ; read tl # Đọc giá trị vào biến tl
done
echo Goodbye # Hiển thị xâu Goodbye ra màn hình
exit 1
4. Thực hành
- Kiểm tra 1 file nhập vào từ bàn phím có tồn tại trong thư mục hiện hành không, nếu có thì đó có phải là
file thông thường không?
- Kiểm tra 1 số nhập vào từ bàn phím là số âm, số dương hay số 0?
- Mở rộng 2 bài trên, yêu cầu kiểm tra được lặp nhiều lần cho đến khi người dùng yêu cầu dừng lại.
- Mở rộng bài 1 trong phần 3 tuần 3, hãy viết CT để hiển thị ngày giờ hệ thống như sau:
Hom nay la Thu ba ngay 21 thang 09 nam 2004
Gio hien nay 09:50:21.
- Viết chương trình để hiển thị menu như sau:
CHƯƠNG TRÌNH HIỀN THỊ THÔNG TIN TRONG TM
1a. Hiển thị chỉ tên file (không kể file ẩn)
2b. Hiển thị tên file và thông tin về file
3c. Hiển thị tên file và chỉ số inode của file
4d. Hiển thị các file kể cả file ẩn
Nhập đối số để hiển thị thông tin :
Khi người dùng chọn a (hoặc 1), b (hoặc 2), c (hoặc 3), d (hoặc 4) thì chương trình sẽ thực hiện yêu
cầu tương ứng. Yêu cầu dùng cấu trúc case.
Chương trình được tiếp tục cho đến khi người dùng yêu cầu Dừng lại.

8
Thực hành Hệ điều hành LINUX

Tuần 5 – Shell Programming (2)


1. In ra số thứ tự và giá trị của các biến đối số nhập vào, số đối số từ 9 trở lên.
2. Đếm xem có bao nhiêu thư mục con trong một thư mục do người dùng nhập vào. Chương trình cần
kiểm tra xem thư mục nhập vào có tồn tại hay không.
3. Hiển thị các file rỗng trong một thư mục do người dùng nhập vào. Chương trình cần kiểm tra xem thư
mục nhập vào có tồn tại hay không.
4. Viết shell script có tên hienmenu.sh cho phép hiển thị nội dung như sau :
***
1/a. Tính tổng từ 1-> n
2/b. In các số chia hết cho 7 từ 1->n
Nhập n để tính :
Nhập yêu cầu tính :
Nếu người dùng chọn 1 (hoặc a) thì gọi đến subscript tinhtong.sh, nếu chọn 2 (hoặc b) thì gọi đến
subscript sochiahet.sh, với n được truyền từ script hienmenu.sh. Gợi ý: Cần export biến n, khi đó tất
cả các subscript được gọi đều có thể sử dụng giá trị của biến n.
Chương trình sẽ tiếp tục nếu người dùng còn yêu cầu thực hiện tiếp.
5. Viết chương trình delfile.sh thực hiện xoá các file. Các file được truyền vào như biến đối số. Chương
trình phải hiển thị phần đầu nội dung của file cần xoá, sau đó hỏi người dùng có muốn xoá hay không,
chương trình chỉ xoá khi người dùng đồng ý xoá. Gợi ý : dùng lệnh head –n để hiển thị n dòng đầu
tiên của file đó.
6. Viết chương trình cpfile.sh thực hiện copy các file vào 1 thư mục bất kỳ. Danh sách các file được
truyền vào qua biến đối số, tên thư mục cần copy do người dùng nhập vào. Lưu ý số các file có thể
từ10 trở lên.
- Chương trình phải kiểm tra tên thư mục nhập vào có tồn tại hay không và có phải là thư mục hay
không; nếu là thư mục thì có được phép ghi vào thư mục đó không; nếu thư mục không tồn tại thì
tạo thư mục đó; danh sách file cần copy có tồn tại hay không, nếu không tồn tại cần thông báo.
- Chương trình thông báo cho người dùng số lượng file đã được copy.
7. Viết chương trình tttaikhoan.sh hiển thị thông tin về các Tài khoản hiện đang đăng nhập vào Linux,
chỉ ra máy của bạn đang ngồi đã đăng nhập bằng tài khoản nào, ở host (IP address) nào và thông báo
hiện có bao nhiêu tài khoản đang truy nhập máy chủ.
8. Viết chương trình countfile.sh đếm xem có bao nhiêu file, bao nhiêu thư mục, bao nhiêu symbolic
link, bao nhiêu hard link và bao nhiêu file không thuộc các loại trên trong một thư mục do người
dùng truyền vào. Chương trình cần kiểm tra thư mục có tồn tại và được phép đọc (read) hay không.
9. Dùng hàm (function) để viết
a. Chương trình có tên hienmenu2.sh với yêu cầu trong câu 3, với các subscript được chuyển thành
function.
b. Viết chương trình có tên qlfile.sh gồm menu chương trình, các function thực hiện các yêu cầu
trong câu 4, 5 và 7.

9
Thực hành Hệ điều hành LINUX

Tuần 6 & 7– Filters


1. Tìm hiểu
- Filter chỉ thao tác trên dữ liệu đầu ra không làm thay đổi dữ liệu trong file/ đầu vào.
- Có 3 loại filter: File filter, Edit filter và Data filter.
- Có thể kết hợp các lệnh filter với nhau.
- File filter: cat, tail, head, wc, cmp, comm, grep, egrep, fgrep, sort, ...
- Edit filter: diff, sed ‘edit-command’, ...
- Data filter: sort, cut, join, uniq, ... thường thao tác trên file dữ liệu bao gồm các bản ghi. Mỗi
bản ghi được lưu trữ trên 1 dòng, mỗi bản ghi gồm nhiều trường, các trường được phân cách
bởi dấu TAB (mặc định), hoặc dấu (:) hay dấu (.),... tùy thuộc vào quy ước của người dùng.
2. File Filter
a. Hiển thị 5 file đầu tiên trong thư mục của bạn (dùng lệnh head).
b. Hiển thị từ file thứ 3 đến file thứ 7 trong thư mục của bạn (dùng lệnh head kết hợp với tail).
c. Hiển thị thông tin các file thông thường trong thư mục của bạn (dùng lệnh grep).
d. Hiển thị thông tin về các file được tạo ra trong tháng 9 (Sep).
e. Hiển thị thông tin về các file được tạo ra từ ngày 1-19 tháng 9.
f. Hiển thị thông tin về các file kiểu thư mục.
g. Đếm xem có bao nhiêu file kiểu thư mục.
h. Cho 2 file có tên là bai1.doc, bai2.doc; dùng lệnh cmp và comm để so sánh 2 file này.
Lệnh cmp chỉ ra ký tự khác nhau đầu tiên của 2 file.
Lệnh comm so sánh 2 file đã sắp xếp, hiển thị kết quả so sánh gồm 3 cột (1-khác ở file1, 2-
khác ở file2, 3-giống nhau ở cả 2 file).
Filter trên file dữ liệu
Cho file auto.dat có cấu trúc như sau:
MãSP:Tên hãng SX:Tên SP:Năm SX:Số km bảo hành:Giá tiền:Mầu sắc
Ví dụ : TO01:Toyota:Prius:2000:110000:267000:black
a. Hiển thị thông tin về 10 sản phẩm đầu tiên trong các sản phẩm.
b. Hiển thị thông tin về các sản phẩm do hãng Toyota sản xuất.
c. Hiển thị thông tin về các sản phẩm có mã 01 hoặc 02.
d. Đếm xem có bao nhiêu sản phẩm do hãng Renault sản xuất.
e. Đếm xem có bao nhiêu sản phẩm có mầu là black.
f. Hiển thị thông tin về các sản phẩm của hãng Toyota hoặc Renault sản xuất từ năm 80 đến 85.
g. Đếm xem có bao nhiêu sản phẩm được sản xuất vào thập kỷ 80 mà có mầu là red hoặc white.
3. Edit Filter
a. Dùng lệnh diff để so sánh 2 file bai1.doc và bai2.doc.
Các câu hỏi dưới đây sử dụng file auto.dat
b. Xoá sản phẩm từ thứ 5 đến 15, kết quả ghi vào file auto_new.dat.
c. Thay thế những sản phẩm do hãng Toyota sản xuất thành hãng Daewoo.
d. Thay thế dòng 3 bởi 2 dòng có nội dung như sau
TO12:Toyota: ECHO:02:130000: 450000: black
PE10:Peugeot:204:87:135000: 22000: white
e. Xoá những sản phẩm do hãng Peugeot sản xuất, kết quả được đưa vào file kq2, và đếm xem
còn lại bao nhiêu sản phẩm.
f. Thêm vào trước sản phẩm đầu tiên một sản phẩm có nội dung sau
RE06:Renault:R21:87:12000:60000:blue

10
Thực hành Hệ điều hành LINUX

g. Tạo file hdsua để thực hiện các thay đổi sau :


o Xoá sản phẩm thứ 5, 20, 35
o Thay thế sản phẩm do hãng Renault sản xuất thành hãng Mercedes.
o Chèn vào trước sản phẩm thứ 3 sản phẩm sau:
RE06:Renault:R21:87:12000:60000:blue
o Thay thế sản phẩm thứ 7 bằng sản phẩm sau:
PE10:Peugeot:204:87:135000:22000:white
Sau đó thực hiện các thay đổi trong file hdsua trên, kết quả đưa vào file auto2.dat.
Cho file tdmuahang.dat có cấu trúc như sau:
MãSP: Mã KH: Tên KH: Ngày mua:Tháng mua: Số lượng
Ví dụ : TO01:K002: Toyota Giai Phong: Jun: 5: 2
b. Thay thế Tên KH là Toyota Giải Phóng thành Toyota Kim Đồng.
c. Xoá thông tin mua hàng của KH có mã là K005 hoặc K006; kết quả đưa vào file kqxoaKH56.
d. Đếm xem có bao nhiêu KH mua mặt hàng TO01.
e. Hiển thị thông tin về các lượt mua hàng trong tháng 5.
f. Chèn thêm sau lượt mua thứ 10, 2 lượt mua sau
TO01: K007: Daewoo Thai Ha: Jun: 16: 1
RE03: K001: Toyota Lang Ha : Jun: 25: 4
g. Tạo file ycs1.sed chứa các yêu cầu sửa đổi dữ liệu như sau
o Thay lượt mua thứ 3 bằng lượt mua có nội dung là
RE03: K001: Toyota Lang Ha : Jun 25 : 4
o Xoá lượt mua mặt hàng có mã SP là TO01.
o Thay thế tất cả các lượt mua trong tháng 5 thành mua trong Tháng 2.
Thực hiện sửa đổi dữ liệu với lệnh lưu ở file ycs1.sed, kết quả đưa vào mhnew1.dat.
h. Tạo file ycs2.sed chứa các yêu cầu sửa đổi dữ liệu như sau
o Chèn sau lượt mua thứ 5 lượt mua sau
TO03: K007: Daewoo Thai Ha: Jul: 2: 4
o Cập nhật mã khách là K002 thành KH02
Thực hiện sửa đổi dữ liệu với lệnh lưu ở file ycs2.sed, kết quả đưa vào mhnew2.dat.
4. Data Filter
a. Hiển thị các file trong thư mục theo chỉ số inode tăng dần.
b. Hiển thị thông tin về các file theo Ngày truy nhập tăng dần.
c. Sắp xếp các file theo từng kiểu file và theo kích thước của file giảm dần.
Dùng file auto.dat để trả lời các câu hỏi sau:
a. Sắp xếp các sản phẩm theo giá tiền tăng dần
b. Sắp xếp các sản phẩm theo số km bảo hành giảm dần.
c. Hiển thị thông tin về 5 sản phẩm có giá tiền cao nhất.
d. Hiển thị thông tin về 5 sản phẩm được bảo hành ít nhất.
e. Lấy ra mã SP, Tên hãng SX và Tên SP của những sản phẩm có mầu sắc blue.
f. Lấy ra mã SP, Tên hãng SX và Tên SP của 5 sản phẩm có giá tiền mua đắt nhất.
g. Lấy ra Tên SP, số km bảo hành, giá tiền, và mầu sắc của những sản phẩm được sản xuất trong
thập niên 90.
h. Sắp xếp các sản phẩm theo mã SP, kết quả đưa vào file auto1.dat.
i. Hiển thị tên các hãng SX hiện đang có SP được lưu trong file auto1.dat.
j. Đếm xem có bao nhiêu hãng SX đang có SP được lưu trong file auto1.dat.

11
Thực hành Hệ điều hành LINUX

Dùng file tdmuahang.dat để trả lời các câu hỏi sau:


a. Sắp xếp thông tin mua hàng theo mã SP tăng dần và số lượng mua tăng dần.
b. Lấy ra thông tin của lượt mua mặt hàng có mã TO01 với số lượng nhiều nhất.
c. Xem thông tin mã KH, tên KH và địa chỉ của những KH là showroom của hãng Toyota.
d. Lấy ra Mã KH và tên KH đã mua hàng trong tháng 6.
e. Đếm xem có bao nhiêu khách hàng mua sản phẩm của hãng Toyota.
f. Đếm xem có bao nhiêu KH đã tham gia mua hàng.
g. Kết nối dữ liệu trong file tdmuahang.dat và file auto.dat với trường kết nối là MãSP, kết
quả đưa vào file noibang.dat.
h. Hiển thị thông tin về các lượt mua và thông tin về hàng hoá mà được mua tại lần đó.
i. Đếm bao nhiêu người mua những mặt hàng được sản xuất trong thập niên 90.
j. Chỉ hiển thị Mã SP, Tên SP, Giá tiền, Mầu sắc, Mã KH, Tên KH, Ngày mua và Số lượng
mua vào tháng 5 hoặc tháng 6.

12
Thực hành Hệ điều hành LINUX

Tuần 8 & 9 – GAWK (GNU awk)


1. Giới thiệu
o gawk là công cụ đa năng cho người quản trị hệ thống và lập trình LINUX; thao tác trên file dữ liệu
hoặc dữ liệu trên STDIN và tạo ra các báo cáo có định dạng.
o File dữ liệu: mỗi một dòng là một bản ghi, các trường dữ liệu cách nhau bởi dấu phân cách trường
(Có thể là dấu (:) hoặc ký tự TAB (mặc định)). Gawk dùng toán tử $ để truy nhập đến các trường dữ
liệu (0, 1, 2, …).
Cú pháp
- Đơn giản: $ gawk ‘ pattern { action } ’ tùy_chọn tên_fileDL
- Mở rộng: $ gawk ‘ BEGIN { action1 } pattern { action2 } END { action3 } ’ tên_fileDL
$ gawk –f tên_file_script tên_fileDL (2)
o Khai báo dấu phân cách trường sử dụng trong file dữ liệu bằng option –F.
o Có thể tạo file script trong đó chứa nội dung ‘pattern { action }’ là các thao tác xử lý dữ
liệu cần thiết, rồi triệu gọi theo cách thông thường.
o BEGIN {Các lệnh} các lệnh này sẽ được thực hiện trước khi duyệt dữ liệu.
o END { Các lệnh } sẽ thực hiện các lệnh này sau khi đã duyệt xong dữ liệu.
) Pattern: Có thể dùng các phép so sánh, toán tử, biểu thức chính quy
) Cấu trúc điều khiển: if, for, while, next, exit
VD1. In các bản ghi có giá tiền từ 90000 trở lên.
$ gawk -F: ‘ $6>=90000 { print $0 } ’ auto.dat
VD2. In Mã SP, Tên hãng, Tên SP, Giá tiền và Mầu sắc của sản phẩm có Tên hãng chứa mẫu “en”.
$ gawk –F: ‘ $2 ~/en/ { print $1, $2, $3, $6, $7 } ’ auto.dat
VD3. In các thông tin như trên và đếm xem có bao nhiêu SP thoả mãn điều kiện đó. Tạo một script
gawk như sau:
$ cat > dklocdl
# Nội dung file gawk theo yêu cầu thao tác dữ liệu trên
BEGIN { FS=“:”; i=0; printf(“\t\t Danh sach san pham \n”);
printf(“\tMaSP\tTenhang\tTenSP\tGia tien\tMau sac \n”) }
($2~/en/) { i++;
printf(“%d \t%s \t%s \t%s \t%d \t%s \n”, i, $1, $2, $3, $6, $7) }
END { if (i>0) { printf(“Co %d san pham co ten hang chua en.”, i)}
else { print(“Khong co san pham co ten chua en.”)} }
$ gawk –f dklocdl auto.dat
Danh sach san pham
MaSP Tenhang TenSP Giatien Mausac
1 CI01 Citroen 2CV 35000 white
2 CI02 Citroen BX14 22000 blue
3 CI04 Citroen BX14 45000 blue
Co 3 san pham co ten hang chua en.
) Lệnh printf dùng để in có định dạng: \t (left tab), \n (newline), %d (in giá trị số nguyên), %s -
%20s (right tab, in giá trị kiểu xâu ký tự), %f - %7.2f (in giá trị kiểu số thực).
2. Thực hành
Các câu hỏi sau sử dụng file auto.dat:
a. Hiển thị thông tin về các sản phẩm có giá tiền từ 50000 trở lên.
b. Hiển thị thông tin về các SP được sản xuất trước năm 86 hoặc sau năm 95.
c. Hiển thị thông tin về các SP có giá tiền từ 100000 trở lên và được bảo hành từ 100000 km trở lên.

13
Thực hành Hệ điều hành LINUX

d. In ra Mã SP, Tên SP, Tên hãng SX, Giá tiền và Mầu của các SP được sản xuất trong thập kỷ 90 mà
có giá tiền từ 200000 trở lên. Sau đó thông báo xem có bao nhiêu SP như vậy.
e. Tính Số km bảo hành TB của SP được sản xuất trong thập kỷ 80 mà không do hãng Toyota sản xuất.
In Tên SP, Tên hãng SX, Giá tiền của các sản phẩm đó.
f. In Mã SP, Tên SP, Năm SX, Giá tiền, Mầu của các SP do hãng Toyota sản xuất. Tính giá tiền trung
bình của các SP này.
g. Hiện Tên SP, Giá tiền và Mầu sắc của những sản phẩm có mầu không phải là mầu Đỏ và mầu Xanh.
Các câu hỏi sau sử dụng file tdmuahang.dat:
a. In Ngày mua, Tên KH, Mã SP, Số lượng mua của KH có mã từ 1-3 và in số lần mua hàng của từng
KH đó.
b. Nối file auto.dat và file tdmuahang.dat với trường kết nối ở 2 file đều là trường 1, kết quả nối đưa
vào file ketnoi.dat (dùng lệnh join).
c. Tính tổng số lượng SP đã bán của nhà SX Toyota.
d. In thông tin về các lượt mua và tính tổng doanh thu trong tháng 6, biết rằng tiền trên 1 lần mua hàng
được tính bằng Số lượng * Đơn giá. Báo cáo được in theo định dạng trong ví dụ 3.
e. Tính số lần bán hàng, tổng số lượng hàng bán ra, Doanh thu theo từng tháng. Báo cáo được in theo
mẫu trong ví dụ 3.
f. Tính tổng số tiền mua của khách hàng tại các phòng trưng bày Toyota.

HẾT
CHÚC CÁC BẠN ÔN & THI TỐT !!!

14

You might also like