Chương 1 : Các lệnh cơ bản trong shell

Chuyểnthư mục

cd

cd  path -Thư mục người dùng: cd
– Thư mục cha: cd ..
Copy

cp

cp file1 file2
cp -i file1 file2
cp file1 dir1
cp –R dir1 dir2
Tạo mới/có thì chép chồng
Nhắc nhở nếu chép chồng
File1 vào thư mục dir1
Tạo mới hoặc chép vàogh
Đang ở vị trí nào

pwd

pwd
Đổi tên

mv

mv file1 file2
mv dir1 dir2
Nếu f2/dir2 không tồn tại thì đổi tên thành f2/dir2
File thuộc loại gì

file

file tên_file ASCII text, Bourne-Again shell script text, JPEG image data
Hiển thị tất cả các CT

which

which -a ls /usr/bin/ls/bin/ls
Kiểm tra 1CT có tồn tại ko

which

which sense — > no sense in…
Liệt kêđường dẫn

PATH

echo $PATH Thêm đường dẫn mới : PATH=$PATH:<path>
Liệt kê nội dung thư mục

ls
hoặc ll

ls      |      ls path
ls -l   |      ls -l path
Liệt kê bình thường
Liệt kê đầy đủ thông tin
Move

mv

mv file1 file2
mv f1 f2 f3 dir
mv dir1 dir2
Chép đè, f1 bị xóa
Chép hết vào dir
Chuyển dir1 vào dir2
Quyền truy xuất

chmod

chmod 755 path Trên thư mục, x là liệt kê
Tạo thư mục

mkdir

mkdir dir_name
Xem nội dung file text

less

less ten_file 1G-đầu. G-cuối. q-thoát.
/chuoi-tìm chuỗi. n-tìm tiếp
Xóa/ remove

rm

rm file1 file2
rm –r dir1 dir2
Xóa file1 và file2
Xóa thư mục dir1 và dir2
Tìm kiếm

name

find <path> -name AB Tên AB

\

find <pth> -name AB\* Với phần mở rộng khác nhau

-i

‘ ’

find <pth> -iname ab\*
find <path> -name [Aa][Bb]*
Không phân biệt hoa và thường

type

find <path> -name *vim*                           -type l Liên kết mềm (l) có chứa chuỗi *vim* (tùy ý)

mtime

date
find <path> -name -mtime-1
find <path> -name -mtime +0
Mon Jan 7 18:14:52 EST 2002
Trong vòng 24 giờ
Cách đây đã hơn 24 giờ

size

find <path> -type f-size -50c Tập tin bình thường nhỏ hơn  50 bytes


– Khởi động Shell : Applications / Accessories / Terminal

Một số chú ý :

– 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 : ./myprog

– 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 : ./myprog ~/myfile.txt (~ = /home/student/1101585)

– Lệnh ls –l : (tập tin hoặc thư mục) chia làm 7 cột :

(1) : là file bình thường. d là thư mục. c/b là tập tin đặc biệt. Kế đó là quyền người sở hữu, nhóm sở hữu và người dùng khác

(2) : Số liên kết đến tập tin hay thư mục khác

(3) : Chủ sở hữu. (4) : Nhóm có quyền tương ứng

(5) : Kích thước (bytes). (6) : Thời gian cập nhật. (7) : Tên

– Tập tin có tên bắt đầu bằng dấu chấm . là tập tin ẩn (hidden)

+ Ký tự ‘ ‘ thay thế 1 chuỗi ký tự —– $ll /bin/c” 
+ Ký tự ‘?’ thay thế 1 ký tự —– $ll /bin/c?

Bảng phụ

1. Một vài ví dụ minh họa việc sử dụng ký tự đại diện.

2. Lệnh su (superuser)

Ví dụ : chuyển từ bqthai — > root (có quyền quản trị). Khi dùng lệnh su người dùng sẽ được nhắc nhỡ cung cấp password của người dùng quản trị. Để trở lại người dùng cũ dùng lệnh exit.

3. Lệnh chown 

Lệnh chown được dùng để thay đổi quyền sở hữu của một file hay thư mục. Cú pháp như sau: chown new-user  tên_file

Để có thể thực hiện lệnh chown phải có quyền root (dùng lệnh su).

Vd : Các lệnh trên đã thay đổi quyền sở hữu của file test từ người dùng bqthai sang root.

Chương 2 : Cơ bản về lập trình shell

Tạo shell

cat

cat >path/tenfile Ctrl+D -> thoát
Soạn thảo: kwrite / kwrite &
Tên người dùng

USER

$USER usertkt
Thời gian

date

date Mon Jan 7 18:14:52 EST 2002
Số người dùng login

who

who | wc -l Number of user login : 3
Lịch

cal

cal Lịch theo tháng
Biến môi trường

echo

echo $BIEN echo $BASH, echo $LINES
Biểu thức số học

expr

expr 1 + 3expr 2 \* 6 Phép nhân : \*. Chia dư : %
Xuất trong chuỗi : `expr …`
Trạng thái trả về

$?

echo $? 0 : thành công, khác 0 : lỗi
? — > 127, khác — > 1
Đọc dữ liệu

read

read biến echo “Your first name please:”
read fname
echo “Hello $fname, hihi!”

Một số chú ý :

1. Biến

tênbiến=giátrịbiến : n=10, A=25

– Tên bắt đầu bằng kí tự hoặc “_” : a1_1, _head, _abc_

– Phân biệt HOA và thường

– Biến không giá trị (NULL) : kita= hoặc kita=””

– In giá trị biến dùng $ : echo $n, echo “My name is $LOGNAME”

2. Các option trong lệnh echo

-n : “Dấu nhắc” không xuống dòng

-e : Dịch các kí tự thoát sau:

\a: phát ra âm thanh bip

 \b: ký tự backspace

\c: ký tự delete

 \n: ký tự xuống dòng

 \t: ký tự tab

 \\: ký tự “\”

_ Ví dụ :

3. Thực hiện nhiều lệnh trên 1 dòng “;

Ví dụ lệnh echo và date : echo “Today is ” ; date

4. Truyền tham số cho shell cript

– Ví dụ : $calculator  9  5 6 8

– Khi đó

$0 : myshell, $1 : foo và $2 : bar

$# : số lượng tham số truyền vào cho script—>4

$* hoặc $@ lưu tất cả giá trị của các tham số—>9 5 6 8

5. Các  tùy chọn lệnh wc

_ Lệnh wc dùng để đếm số ksi tự, từ, dòng… Cú pháp : wc -option path

-c, –bytes :  đếm byte

-m, –chars : đếm kí tự

-w, –words : đếm số từ

-l, –lines : đếm dòng mới

-L, –max-line-length : độ dài của dòng dài nhất

6.  Tùy chọn -type

b (cho thiết bị dạng khối)

c (thiết bị dạng ký tự)—–s (socket)

d (thư mục)—————–p (ống dẫn có tên)

f (tập tin thường)———-l (liên kết mềm)

7. Tùy chọn -size

b (khối 512-byte)——–c (bytes)

 k (kilobytes)————–w (2-byte)

+” lớn hơn hoặc “” nhỏ hơn

Bảng phụ

1. Một số biến môi trường

2. Ví dụ về việc sử dụng dấu nháy cho expr 

Chương 3 : Lập trình cấu trúc và vòng lập trong shell

1. Lệnh if

– Cú pháp 1:

if condition
then
——
fi

– Cú pháp 2: (text hoặc [expr] hoặc ((a>=b)))

if test $1 -gt 0
then
——-echo “$1 is positive number”
fi

– Cú pháp 3 : if … else … fi

if  condition
then
——
else
—–
fi

– Cú pháp 4 : if-then-else nhiều cấp

if condition
——then …
elif
—–then …
elif
—–then…
else …
fi

Các phép toán so sánh

So sánh chuỗi

Lệnh test hoặc [expr] với file và thư mục

Phép toán logic

2. Lệnh for

– Cú pháp 1: (for i in $*)

for i in 1 2 3 4 5
do
—–echo “Welcome $i times”
done

– Cú pháp 2:

for (( i = 0 ; i <= 5; i++ ))
do
——echo “Welcome $i times”
done

3. Lệnh while

– Cú pháp: ( test = [] )

i=1
while test $i –le 5
do
—–echo “Welcome $i times”
—–i=`expr $i + 1`
done

4. Lệnh case

– Cú pháp:

case $biến in
—–“?”) command … ;;
—–“?”) command … ;;
—–“?”) command … ;;
—–*) command … ;;
esac

Chương 4 : Quản lý tiến trình, tín hiệu và đồng bộ

1. Liệt kê các tiến trình:

– Cú pháp: $ps (liệt kê các tiến trình đang chạy)

– Tiến trình số 1 là tiến trình init, là tiến trình cha của tất cả các tiến trình shell khi login.

– Các tùy chọn lệnh ps:

o a : tất cả tiến trình người dùng (all users)
o u : tiến trình với tên người dùng và thời gian bắt đầu
o x : tiến trình mà không gắn kết với một terminal

Trong đó:

UID———- số uid của người chủ tiến trình
PID———- số của tiến trình
PPID——– số của tiến trình cha
C————- chỉ số sử dụng bộ xử lý
STIME —– thời điểm bắt đầu tiến trình
TTY ——– terminal điều khiển tiến trình
TIME——- thời gian tích lũy thực hiện tiến trình
COMMAND tên lệnh sinh ra tiến trình

2. Các lệnh liên quan đến tiến trình:

3. Tiến trình ngầm

ƒ – Tạo (background): $lệnh &
ƒ- Quản lý: $set -m
– Liệt kê: jobs 
-ƒ Hiển thị trạng thái: $jobs -l
– Tiếp tục sau khi cắt terminal: $nohup lệnh
Các số liệu đưa ra stdout và stderr được ghi lên tập tinnohup.out 
ƒ- Đợi kết thúc: $wait PID 

-ƒ Hủy: $kill PID (phát sinh tín hiệu 15 – mặc định)Hoặc $kill -n PID (phát sinh tín hiệu diệt tiến trình)
Hoặc: $kill %n (diệt tiến trình theo số thứ tự của nó trong danh sách các tiến trình chạy ngầm)

4. Thiết lập cách thức cho shell_script 

– Lệnh set cho phép thiết lập cách thức chạy 1 shell_script (chỉ liên quan đến shell_script đang chạy)

– Dấu # dùng để chú thích. Các tùy chọn –x và –v có thể đưa vào dòng lệnh gọi shell_script:

$sh -v proc
$sh -x proc

5. Quản lý các tín hiệu:

– Các tín hiệu phát sinh

6. Lập trình phím DEL

– Lệnh trap không đối số : liệt kê danh sách các tín hiệu và các xử lý tương ứng.
-ƒ Gán cho DEL:  $trap ‘các lệnh’ 2
ƒ- Xóa bỏ tác dụng DEL: $trap ‘’ 2
ƒ- Gán chức năng mặc định DEL : $trap 2

Chương 5 : Quản lý vào/ra – Tập tin – Đổi hướng

1. Tổ chức tập tin

Trong đó:

1. / – Là thư mục gốc (root) chứa tất cả các thư mục khác
2. /bin – chứa các tập tin nhị phân (chương trình) cần cho việc khỡi động hệ thống hoặc làm việc trong chế độ người dùng đơn để duy trì hệ thống
3. /boot – chứa các kernel image và các tập tin cấu hình khi khởi động
4. /dev – chứa các tập tin đặc biệt được sử dụng để tương tác với các thiết bị phần cứng
5. /etc – chứa các tập tin cấu hình hệ thống
6. /home – chứa các thư mục home người dùng
7. /lib – chứa các module thư viện được dùng bởi các câu lệnh
8. /mnt – chứa các thư mục trỏ đến các thiết bị lưu trữ
9. /proc – một hệ thống tập tin giả lập cho việc chuyển đổi dữ liệu giữa các tiến trình
10. /sbin – chứa các câu lệnh cần thiết cho việc quản trị hệ thống
11. /tmp – chứa các tập tin tạm thời
12. /usr – chứa các tập tin chương trình, các thư viện, các tài liệu, … được dùng bởi những người dùng 
13. /var – chứa các tập tin dữ liệu thường xuyên thay đổi như: các tập tin log hệ thống, mail và các tập tin ghi nhận in ấn

2. Bảo vệ tập tin người dùng:

– Các thông tin chứa trong tập tin /etc/passwd. 

o Tên
o Mật khẩu (nếu có)
o Số nhận dạng (uid: user identify number)
o Số của nhóm (gid: group identify number)
o Chú thích (nếu có)
o Thư mục home của người dùng (home directory)
o Tên chương trình cho chạy lúc bắt đầu phiên làm việc (nếu có): bash shell script

– Ví dụ: $cat /etc/passwd | more

3. Lệnh useradd

– Lệnh này ở trong thư mục /etc, nó cho phép:

+ Hiển thị danh sách người dùng
ƒ+ Thêm người dùng mới (chỉ người quản trị hệ thống có quyền)

4. Lệnh groupadd

– Lệnh này ở trong thư mục /etc, nó cho phép:

o Hiển thị danh sách các nhóm người dùng
o Thêm nhóm mới (chỉ người quản trị hệ thống có quyền)
o Xem tên các tập tin trong thư mục theo cột: $lc

5. Nhóm người dùng

Một nhóm người dùng là tập hợp của 1 số người dùng có thể dùng chung các tập tin của nhau

– Các thông tin chứa trong tập tin /etc/group 

o Tên của nhóm
o Mật khẩu (nếu có)
o Số của nhóm (gid: group identify number)
o Danh sách những người khách (nếu có)

– Ví dụ: $cat /etc/group

6. Lưu kết quả vào một tập tin

_ Cú pháp: $lệnh   |  tee tênfile 

– Có thể dùng tee với tùy chọn –a (tee –a), khi đó dữ liệu đầu ra sẽ được ghi tiếp vào cuối tập tin Out.hk

– Ví dụ: echo “Hello World!” | tee -a Out.hk