1. Đỗ Hoàng Kiên
Bài thực hành 1
Login vào hệ thống (cho đúng tên người dùng và mật khẩu). Thực hiện từng lệnh và
xem xét nội dung kết quả (giải thích ý nghĩa từng lệnh).
Chú ý tên file và tên thư mục có thể khác so với nội dung ở đây.
1. Hãy kiểm tra và cho biết xem LINUX đang dùng shell nào bằng cách gõ lệnh:
alias
2. $ who > temp
$
$ wc -l temp
(sẽ hiện ra thông tin về các đếm)
$
hoặc sử dụng kiểu đường ống
$ who | wc -l
(sẽ hiện ra)
$
3. Sử dụng lệnh đường ống
$ who|grep user | sort
(sẽ hiện ra)
4. Ghi nhận kết quả đã sắp xếp
$ who | sort > memo1
$
5. Hiện danh sách file (bao gồm cả file bị che)
$ ls -a
(sẽ hiện ra)
$
6. Đổi mode file temp
$ chmod 755 temp
$
Để xem lại thông tin sau khi đổi mode:
$ ls -l temp
(sẽ hiện ra và bắt đầu là -rwxr-xr-x .....)
7. Tạo thư mục games
$ mkdir games
$
8. Kiểm tra games có được tạo:
$ ls -l
(sẽ hiện ra)
$
9. Sao file cùng thư mục hiện tại
$ cp temp temp1
$ cp temp temp2
$
10. Sao các file vào thư mục khác
1
2. Đỗ Hoàng Kiên
2
$ cp temp temp2 games
$
Chuyển vào thư mục games
$ cd games
$ pwd
(sẽ hiện ra)
$ ls temp temp2
$
11. Chuyển về thư mục cha
$ cd ..
$
12. Xem lại đường dẫn thư mục hiện tại
$ pwd
(sẽ hiện ra)
$
13. Chuyển file từ thư mục này sang thư mục khác
$ mv temp1 games
$
14. Lại quay về games
$ cd games
$ pwd
$
15. Xoá hai file
$ rm -l temp1 temp2
(sẽ hiện ra)
16. Trở về thư mục riêng
$ cd
$
17. Xóa thư mục games
$ rmdir games
(sẽ hiện ra, giải thích)
18. Nối them một tên vào file đã tồn tại dùng lệnh
$ ln temp temp4
$
Sau đó dùng lệnh
$ ls -l
19. Tìm tên 1 file từ cây con thư mục hiện tại
$ find . -name temp -print
20. Xác định kiểu của file
$ file temp1 temp2
21. Hiện tình trạng mọi máy in gõ lệnh
$ lpstat -p
(sẽ hiện ra điều gì, giải thích)
3. Đỗ Hoàng Kiên
3
22. Bắt đầu tính toán gõ
$ bc
2+4
(sẽ hiện ra)
300+600
(sẽ hiện ra)
300*600
(sẽ hiện ra)
1+2*3
(sẽ hiện ra)
1/2
(sẽ hiện ra, giải thích)
scale = 4
1/2
(sẽ hiện ra, giải thích)
quit
$
23. Để đổi dấu mời là 'K44', gõ
$ PS1 = 'K44'
K44
K44 ls -l
K44
K44 PS1 = '$'
$
24. Gọi phần mềm Midnight Command bằng lệnh
mc
và sau đó làm việc với MC như đã làm với NC trong MS-DOS.
Bài thực hành 2. Truyền thông và chạy chương trình trên
UNIX-LINUX
A. Lệnh write: Truyền thông on-line
Tại máy người dùng gõ:
$ who
(sẽ hiện ra)
Trong các thông tin hiện ra giả sử các người dùng có tên là may1, may2, may3, ....,
may31; từng cặp người dùng may(2i-1) và may (2i) trao đổi với nhau theo lệnh write.
Ví dụ với người dùng ở may1 sẽ gui thu cho người dùng ở may2, viết
$write may2
Trên màn hình trạm cuối của may2 thấy hiện ra một số thông tin thông báo.
Sau khi may1 hiện thông báo là may2 sẵn sàng nhận thông báo, người dùnh ở may1 gõ
thông báo và nội dung này từ may1 sẽ hiện ra màn hình của may2 (Nội dung thông
báo là tùy chọn; chú ý, gõ Ctrl-d khi kết thúc).
4. Đỗ Hoàng Kiên
4
Sau khi đã nhận được thông báo từ may1, việc nhận đã kết thúc và tại may2,
dấu mời của shell xuất hiện:
$
Đến đây, người dùng ở may2 trả lời cho người dùng ở may1 qua việc gửi 1
thông báo tới may1:
$write may1
Chú ý: Dùng lệnh talk trong Linux.
B. Lệnh mail: Truyền thông off-line
Người dùng ở may1 gửi một thư tới người dùng ở may2:
$ mail may2
(Nội dung thư và kết thúc là Ctrl-d)
Người dùng ở may2 sẽ thấy thông báo trên màn hình:
mail for may2
Để xem chi tiết nội dung thư, người dùng ở may2 sử dụng lệnh
$ mail
Sử dụng các lệnh trong chế độ lệnh của mail, đọc được nội dung của thư mới
nhận được, sau đó muốn trả lời ngay (chú ý thư hiện tại đang là thư của người may1)
dùng:
?r
(sẽ hiện ra: mail may1)
Người dùng may2 gõ các dòng thư trả lời và kết thúc cũng là Ctrl-d.
Chú ý: 1. Có thể xem xét trường hợp khi người dùng may1 gửi mail cho người dùng ở
may2 thì may2 đang tắt. Sau khi người dùng ở may1 gửi thư xong thì may2 mới khởi
động để phân biệt rõ hai loại truyền thông.
2. Dùng lệnh ls để xem nội dung thư mục chứa mail của mỗi người dùng, các
file, các thư mục con của thư mục này và ý nghĩa của mỗi đối tượng trong đó.
3. Nếu điều kiện của phòng máy cho phép, có thể làm quen với một số nội
dung về internet.
C. Biên soạn chương trình bằng VIM
Gọi VIM để soạn thảo một file văn bản bất kỳ (nên định hướng file văn bản
chương trình trên C để thuận lợi cho các bước sau).
D. Chạy chương trình
Dịch chương trình bằng gcc (hoặc bcc)
Kết nối (link) chương trình đích
Chạy chương trình (chú ý mode chạy được).
5. Đỗ Hoàng Kiên
Bài thực hành 3. lập trình trên shell
Mục đích:
- Ôn lại soạn thảo văn bản vi và dùng vi để tạo File chương trình trên shell,
- Soạn thảo, dịch, chạy chương trình trên C trên UNIX,
- Tạo File chương trình trên shell theo một số yêu cầu nào đó
Nội dung:
1. Thực hiện chương trình trên C:
- Viết một chương trình C nhờ soạn thảo vi,
- Nhờ cc dịch chương trình nói trên,
- Đổi lại mode cho file .out để chạy được ở mức shell,
- Chay chương trình, đưa input và nhận output.
2. Thông qua lệnh đặt lại giá trị biến môi trường để thay đổi lại dấu mời hệ thống theo
nghĩa gồm tên người dùng và dấu $.
3. Lập chương trình shell có tác dụng:
- Nhận tên của người chạy chương trình,
- Hiện thông báo gồm các nội dung:
* Lời chào người dùng,
* Hiện lại thời gian, ngày tháng ( trong đó thứ trong tuần, tháng hiện thời hiện
theo tiếng Việt không dấu).
Đây là một chương trình ví dụ thực hiện các công việc sau:
- Nhận hai tham số dòng lệnh là hai giá trị số
- Hiện kết quả thực hiện lệnh date
- Hiện tiếng Việt không dấu thứ, ngày, tháng hiện tại
- Hiện kết quả tính tổng hai giá trị tham số dòng vào
tong=`expr $1 + $2`
set `date`
echo $*
case $1 in
T2) s="Thu Hai";;
T3) s="Thu Ba";;
T4) s="Thu Tu";;
esac
case $2 in
Thg01) s="$s, Thang Gieng, ";;
Thg02) s="$s, Thang Hai, ";;
Thg11) s="$s, Thang Muoi Mot, ";;
Thg12) s="$s, Thang Muoi Hai, ";;
esac
case $3 in
1) echo $s "Ngay Mot";;
2) echo $s "Ngay Hai";;
28) echo $s "Ngay Hai Muoi Tam";;
5
6. Đỗ Hoàng Kiên
6
29) echo $s "Ngay Hai Muoi Chin";;
esac
echo "Tong = $tong "
4. Lập chương trình shell có tính năng:
- Bao gồm tính năng của câu 3.
- Chạy chương trình kết quả của câu 1
- Thử nghiệm thay đổi file .profile
/* -------- */
#!/bin/sh
# Chuong trinh tinh tong cac file (regular file) trong 1 thu muc
# Minh hoa cach su dung if then fi, while do done
# va cac CT test, expr
if test $# -ne 1
then
echo Cu phap: $0 <Ten thu muc>
exit 1
fi
cd $1 # Chuyen vao thu muc can list
if test $? -ne 0 # Neu thu muc khong ton tai thi ra khoi CT
then
exit 1
fi
ls -lL |
# Liet ke ca cac thong tin cua symbolic link
# Su dung sub-shell de tu giai phong bien
{
sum=0
# Lenh read x y de bo di dong 'total 1234..' cua lenh ls -lL
read x y ; while read mode link user group size month day hour name
do
if [ -f $name ]
then
sum=`expr $sum + $size`
# echo $size $sum
fi
done
echo Tong so byte trong thu muc $1: $sum
}
/* -------- */
7. Đỗ Hoàng Kiên
7
#!/bin/sh
# Chuong trinh dem so dong cua 1 file
# Minh hoa cau truc: if then fi, while do done
# va cach su dung CT test, expr
if [ $# -ne 1 ]
then
echo Cu phap: $0 <Ten file>
exit 1
fi
{
n=0
while read dong
do
n=`expr $n + 1`
done
echo So dong cua $1: $n
} < $1
/* -------- */
#!/bin/sh
# CT dem so tu cua 1 file
# Minh hoa cach su dung cau truc for do done, while do done
if [ $# -ne 1 ]
then
echo Cu phap: $0 <Ten file>
exit 1
fi
{
n=0
tu=""
dong=""
while read dong
do
for name in $dong
do
n=`expr $n + 1`
done
done
echo Tong so tu doc vao la: $n
} < $1
8. Đỗ Hoàng Kiên
8
/* -------- */
#!/bin/sh
# Chuong trinh tim dong co do dai lon nhat trong 1 file
# Minh hoa cau truc: if then fi, while do done
# va cach su dung CT test, expr
if [ $# -ne 1 ]
then
echo Cu phap: $0 <Ten file>
exit 1
fi
max=0
dongmax=""
{
while read dong
do
n=`expr length "$dong"`
if [ $n -gt $max ]
then
dongmax="$dong"
max=$n
fi
done
echo $dongmax ($max)
} < $1
/* -------- */
#!/bin/sh
# Chuong trinh in ra cac so cua day Fibonaci nho hon 1 so n cho truoc
# Minh hoa cau truc: if then fi, util do done
# va cach su dung CT test, expr
if [ $# -ne 1 ]
then
echo Cu phap: $0 <So nguyen>
exit 1
fi
export tam
truoc=1
sau=1
echo -n $truoc $sau
until tam=`expr $truoc + $sau` ; [ $tam -ge $1 ]
do
truoc=$sau
sau=$tam
9. Đỗ Hoàng Kiên
9
echo -n " "$tam
done
echo
/* -------- */
#!/bin/sh
# Chuong trinh liet ke cac thu muc con cua 1 thu muc
# Minh hoa cach su dung if then fi, while do done
# va cac CT test, expr
if test $# -ne 1
then
echo Cu phap: $0 <Ten thu muc>
exit 1
fi
cd $1 # Chuyen vao thu muc can list
if test $? -ne 0 # Neu thu muc khong ton tai thi ra khoi CT
then
exit 1
fi
ls -lL |
# Liet ke ca cac thong tin cua symbolic link
# Su dung sub-shell de tu giai phong bien
{
sum=0
# Lenh read x y de bo di dong 'total 1234..' cua lenh ls -lL
read x y ; while read mode link user group size month day hour name
do
if [ -d $name ]
then
echo $name $size ($mode)
fi
done
}
/* -------- */
#!/bin/sh
# Chuong trinh liet ke cac file thuc hien duoc trong thu muc
# Minh hoa cach su dung if then fi, while do done
# va cac CT test, expr
if test ! $# -eq 1
then
echo Cu phap: $0 <Ten thu muc>
10. Đỗ Hoàng Kiên
10
exit 1
fi
cd $1 # Chuyen vao thu muc can list
if test $? -ne 0 # Neu thu muc khong ton tai thi ra khoi CT
then
exit 1
fi
ls -lL |
# Liet ke ca cac thong tin cua symbolic link
# Su dung sub-shell de tu giai phong bien
{
sum=0
# Lenh read x y de bo di dong 'total 1234..' cua lenh ls -lL
read x y ; while read mode link user group size month day hour name
do
if [ -x $name ] && [ ! -d $name ]
then
echo $name $size ($mode)
fi
done
}
/* -------- */
#!/bin/sh
# Chuong trinh minh hoa viec doc tu ban phim (read) va su dung case do esac
chon=0
until [ $chon = q ] || [ $chon = Q ]
do
clear
echo Lua chon che do lam viec:
echo 1. Soan thao
echo 2. Doi thu muc lam viec
echo 3. Xem thu muc
echo 4. Xem gio
echo q. Thoat
echo -n "Chon: "
read chon
case $chon in
1) echo -n "Ten file: " ; read file ; vi $file ;;
2) echo -n "Ten thu muc: " ; read dir ; cd $dir || echo "Thu muc khong hop le" ;;
3) echo -n "Ten thu muc: " ; read dir ; ls -l $dir || echo "Thu muc khong hop le";;
4) date ;;
11. Đỗ Hoàng Kiên
11
q|Q) continue;;
*) echo "Tuy chon khong hop le"; chon=0;;
esac
echo -n "Bam phim Enter de tiep tuc"; read cont
done
/* -------- */
#!/bin/sh
# Chuong trinh tinh giai thua cua mot so nguyen
# Minh hoa cau truc: if then fi, while do done
# va cach su dung CT test, expr
if [ $# -ne 1 ]
then
echo Cu phap: $0 <So nguyen>
exit 1
fi
gt=1
index=2
while [ $index -le $1 ]
do
gt=`expr $gt * $index`
index=`expr $index + 1`
done
echo $1! = $gt
/* -------- */
#!/bin/sh
# Chuong trinh in ra ngay thang bang tieng Viet
# Minh hoa cau truc: case do esac
date |
{
read thu thang ngay gio mui_gio nam
case $thu in
Mon) thu="Thu Hai" ;;
Tue) thu="Thu Ba" ;;
Wed) thu="Thu Tu" ;;
Thu) thu="Thu Nam" ;;
Fri) thu="Thu Sau" ;;
Sat) thu="Thu Bay" ;;
Sun) thu="Chu Nhat" ;;
esac
case $thang in
12. Đỗ Hoàng Kiên
12
Jan) thang="Thang Gieng" ;;
Feb) thang="Thang Hai" ;;
Mar) thang="Thang Ba" ;;
Apr) thang="Thang Tu" ;;
May) thang="Thang Nam" ;;
Jun) thang="Thang Sau" ;;
Jul) thang="Thang Bay" ;;
Aug) thang="Thang Tam" ;;
Sep) thang="Thang Chin" ;;
Oct) thang="Thang Muoi" ;;
Nov) thang="Thang Mot" ;;
Dec) thang="Thang Chap" ;;
esac
echo Hom nay $thu ngay $ngay $thang nam $nam ($gio - mui gio $mui_gio)
}
/* -------- */
#!/bin/sh
# Chuong trinh tinh tong cac so tu nhien tu 1 den n
# Minh hoa cau truc: if then fi, while do done
# va cach su dung CT test, expr
if [ $# -ne 1 ]
then
echo Cu phap: $0 <So nguyen>
exit 1
fi
gt=0
index=1
echo -n $index
while [ $index -le $1 ]
do
echo -n " + $index"
gt=`expr $gt + $index`
index=`expr $index + 1`
done
echo " = $gt"
/* ...*/
#!/bin/sh
# Chuong trinh tim mot xau trong mot van ban
# Minh hoa cau truc: if then fi, while do done
# va cach su dung CT test, expr (substr, length)
13. Đỗ Hoàng Kiên
13
if [ $# -ne 2 ]
then
echo Cu phap: $0 <Xau can tim> <Ten file>
exit 1
fi
{
wordlen=`expr length $1` # Do dai tu can tim
while read textline
do
textlen=`expr length "$textline"` # Do dai cua dong vua doc
loop=`expr $textlen - $wordlen + 1`
index=1
while [ $index -le $loop ]
do
tam=`expr substr "$textline" $index $wordlen`
if [ "$tam" = $1 ]
then
echo Tim thay $1-- $textline
break
fi
index=`expr $index + 1`
done
done
} < $2