module 1: lÀm quen vỚi mÔi trƯỜng linux shell … · các đối sốtruyền cho shell...
TRANSCRIPT
MODULE 1: LÀM QUEN VỚI MÔI TRƯỜNG LINUX – SHELL – C (3t)
A. TÓM TẮT LÝ THUYẾT
1. Cú pháp lệnh trong Linux:
<command name> -<options> <arguments>
– Command name: tên lệnh, cũng chính là file thực thi tương ứng
– Options:chọn lựa chức năng, có thể có nhiều thành phần
– Arguments: thông số của lệnh
Trợ giúp: man <command name>: xem ý nghĩa và các thuộc tính của lệnh
Ký hiệu $ là dấu nhắc lệnh (bash shell)
Ký hiệu # là dấu nhắc lệnh của user root
2. Các lệnh quản lý tài khoản:
id: xem thông tin
who: xem các user đang login vào hệ thống
whoami: xem username hiện hành
useradd <username>: tạo tài khoản mới
passwd <username>: tạo password cho tài khoản
groupadd <groupname>: tạo nhóm người dùng
useradd - g <groupname> -c “comment” <username> : tạo một tài khoản mới
trong nhóm người dùng có sẵn.
usermod -g <groupname> <username>: đưa một tài khoản đã tạo vào một nhóm
người dùng có sẵn
chown: thay đổi người sở hữu, nhóm sở hữu trên tập tin.
chgrp <tên nhóm> <tên tài khoản>: thay đổi nhóm.
3. Các lệnh quản lý tập tin và thư mục
a. Tổ chức hệ thống tập tin trên máy
/ thư mục root
/etc Cấu hình hệ thống cục bộ theo máy
/usr/bin Chứa hầu hết các lệnh người dùng.
/dev Các tập tin thiết bị.
/usr/man Chứa các tài liệu trực tuyến.
/usr/include Chứa các tập tin include chuẩn của C.
/var/log Các tập tin lưu giữ thông tin làm việc hiện hành của người dùng.
/home Chứa các thư mục của các user.
/usr/lib Chứa các tập tin thưviện của các chương trình người dùng.
b. Lệnh về file và directory
pwd: hiển thị tên của thư mục hiện hành
cd <pathname>: chuyển thư mục
o cd .. chuyển về thư mục cha
ls -[option] directory_name: liệt kê nội dung của thư mục, với
[option] bao gồm:
-a liệt kê các file ẩn
-d xem tên của thưmục hiện hành
-F liệt kê các file và cho biết các kiểu của file qua ký hiệu ởcuối
'/‘ directories
‘*’ executable files
“@” linked file
-i cho biết sốcủa inode của file
-l liệt kê đầy đủcác thuộc tính của file
-R liệt kê các thưmục con theo kiểu đệquy
-t sắp xếp theo thời gian cập nhật
mkdir <directory_name>: tạo thư mục
rmdir <directory_name>: Xoá thư mục rỗng
rm –r <directory_name>: Xoá thư mục không rỗng
rm –optionfile_name: Xóa tập tin
Sao chép tập tin
o cp [-option] source_file destination_file
o cp [-option] source_files destination_directory
Sao chép thư mục
o cp -r source_directory(s) source_directory
mv [option] filename1 filename2: đổi tên tập tin
mv [option] directory1 directory2: di chuyển thư mục directory1
vào directory2
mv [option] filename directory: di chuyển tập tin vào thư mục
tree: xem cây thư mục
c. Các lệnh về file
cat > filename
o Nhập nội dung EnterNhấn Ctrl+D để ghi tập tin và kết thúc
cat filename: xem nội dung của tập tin
o cat filename |more : tập tin có nội dung dài dừng từng trang
head -n filename: xem n dòng đầu tiên của tập tin
tail –n filename: xem n dòng cuối cùng của tập tin
find pathname -name filename -print: tìm tập tin
Ví dụ: find / -name “*.txt” –print
o find <path> -name <filename>: Tìm theo tên
o find <path> -inum <number>: Tìm theo sối-node của tập tin
o find <path> -user <username>: Tìm theo tên người sở hữu
o grep “chuỗi ký tự” filename: Tìm chuỗi ký tự trong tập tin
d. Quyền trên tập tin và thư mục
Có 3 quyền: r đọc, w ghi, x thực thi
Các quyền được áp dụng trên 3 nhóm người dùng:
– u chủ sở hữu
– g những user cùng nhóm với chủ sởhữu
– o tất cả những user khác
Các quyền áp dụng cho 3 nhóm người dùng kết hợp lại thành 9 bit như sau:
rwx rwx rwx
user group other
ls –l: xem quyền truy cập trên các tập tin và thư mục
chmod access_mode file/folder: gán quyền truy cập vào file hoặc
folder
o access_mode: quyền truy cập có thể viết dưới dạng
Dạng ký hiệu:[ugo][+ - =][rwx]
Dạng số bát phân: [0-7][0-7][0-7]
Tái định hướng cho lệnh bằng cách dùng các ký hiệu:
o < Tái định hướng thiết bị nhập
o > Tái định hướng thiết bị xuất
o >> Nối vào file được tái định hướng (thay vì tạo mới)
o Cú pháp: command > output_file
4. Các lệnh về môi trường
Biến môi trường được định nghĩa riêng cho từng user, từng phiên làm việc
env: xem các biến môi trường của phiên làm việc hiện hành
PATH là biến môi trường của shell, là nơi shell sẽ tìm lệnh để thực thi
echo $PATH: Xem các đường dẫn lưu trong PATH
PATH=$PATH:<Đường dẫn>: thêm đường dẫn vào PATH
Định nghĩa một biến môi trường mới
$ export PATH=.:$HOME/Documents/module1:$PATH
5. Shell Scripts
Trình thông dich cho phép người dùng giao tiếp tiếp với hệ thống LINUX gọi
là SHELL, khi mở một terminal là khởi động shell, hiển thị dấu nhắc ($) và chờ người
dùng gõ lệnh. Có nhiều loại shell trên UNIX: Bourne shell (sh), C shell (csh), Korn
shell (ksh) và Bourne Again Shell (bash - chủ yếu trên Linux)
cat /etc/shells : Liệt kê các loại shell
echo: lệnh xuất chuỗi trong shell
echo $SHELL: Kiểm tra loại shell sử dụng
5.1. Tạo và thực thi một Shell Scripts: Một tập các lệnh shell lưu dưới dạng một file
text
Tạo Shell Scripts: Dùng trình soạn thảo vi, nano, cat…(tìm hiểu cách sử
dụng) cat > script_name
…
^_D
Cấp quyền thực thi shell script:
chmod u+rwx script_name
Thực thi shell script:
$./script_name
Ví dụ: Tạo và thực thi shell script với tên vidu:
5.2. Truyền đối số trong shell scrip
Các đối sốtruyền cho shell script có thể tham chiếu ngay trong chương trình shell qua
các ký hiệu $0 đến $9
Ngoài ra còn có các đối số khác:
$#: số lượng tham số truyền cho script
#!/bin/bash
# My first bash shell script
#
clear
echo "========================================"
echo "Hello $USER"
echo "Today is \c " ; date
echo "Number of user login : \c" ; who | wc -1
echo "Calendar"
cal
$* hoặc $@: lưu tất cả giá trị của tham số
Ví dụ: Viết script và lưu với tên thamso
echo “tong so cac doi so la $#”
echo “$0 la ten script”
echo “$1 la doi so thu nhat”
echo “$2 la doi so thu hai”
echo “tat ca cac doi so la: $* hoac $@”
Thực thi script: ./thamso a b
Kết quả:
5.3. Nhập từ bàn phím
Để nhập dữ liệu từ standard input shell script dùng lệnh read
Ví dụ:
echo "Please enter your surname:"
read name1
echo "followed by your first name:"
read name2
echo "Welcome to UNIX $name2 $name1”
echo Input 2 number
read x
read y
echo Sum = `expr $x + $y`
5.4. Kiểm tra biểu thức logic
Lệnh test hoặc [
Ví dụ: test 2 = 3
echo $? cho kết quả 1
test 2 = 2
echo $? Cho kết quả 0
Các phép toán kiểm tra
-a file file tồn tại
-b file file là 1 block file
tong so cac doi so la 2
./thamso la ten script
a la doi so thu nhat
b la doi so thu hai
tat ca cac doi so la a b hoac a b
-c file file là 1 character file
-d file file tồn tại và là 1 thư mục
-f file file tồn tại và là 1 tập tin
-h file file tồn tại và là 1 liên kết mềm
-r file file tồn tại và có thể đọc
Các phép so sánh
-gt lớn hơn
-ge lớn hơn hoặc bằng
-lt nhỏ hơn
-le nhỏ hơn hoặc bằng
-eq bằng nhau
-ne khác
5.5. Các cấu trúc điều khiển trong shell
Phát biểu if
Ví dụ 1: Tạo một script tên script_if1 Kiểm tra một thư mục có tồn tại không
#!/bin/bash
directory=$1
# bash check if directory exists
if [ -d $directory ]; then
echo "Directory $1 exists"
else
echo "Directory $1 does not exists"
fi
Ví dụ 2: Tạo một script tên script_if2 so sánh 2 số
#!/bin/bash
# declare integers
NUM1=2
NUM2=2
if [ $NUM1 -eq $NUM2 ]; then
echo "Both Values are equal"
else
if [ test conditions ]
then
action1
else
action2
fi
echo "Values are NOT equal"
fi
Ví dụ 3: Tạo một script tên script_if3 so sánh 2 chuỗi
#Declare string S1
S1="Bash"
#Declare string S2
S2="Scripting"
if [ $S1 = $S2 ]; then
echo "Both Strings are equal"
else
echo "Strings are NOT equal"
fi
Ví dụ 4: Tạo một script tên script_if4 kiểm tra một tập tin có tồn tại không
#!/bin/bash
file="./file"
if [ -e $file ]; then
echo "File exists"
else
echo "File does not exists"
fi
Phát biểu while
Ví dụ 5: Tạo một script tên script_while, lặp vô tận (cho tới khi ấn Ctrl_C):
while [ 1 ]
do
echo "Enter filename to view attributes:"
read filename
if [ -r $filename ]; then
ls -al $filename
else
echo “File does not exist”
continue
fi
done
while command list
do
actions
done
Phát biểu for
Ví dụ 6: Tạo một script tên script_for1 Liệt kê nội dung các thư mục /opt và
/usr
for dir in /bin /usr
do
cd $dir
pwd
ls -F
done
Ví dụ 7: Tạo một script tên script_for2 xem nội dung tất cảcác file có tên bắt đầu
bằng chữ “a”
for file in a*
do
if [ -f $file ]; then
cat $file
fi
done
Ví dụ 8: Tạo một script tên script_for3 trả về một danh sách các tên tập tin cho thư
mục hiện hành
#!/bin/bash
# bash for loop
for f in $( ls . ); do
echo We found the following file: $f
done
6. Lệnh về Process
Tiến trình chạy mặt tiền: tương tác được với người dùng qua thiết bị nhập chuẩn
(standard input) là bàn phím
o Kết thúc tiến trình chạy mặt tiền: Ctrl_C
o Trì hoãn tiến trình Ctrl_Z
Tiến trình chạy mặt hậu: Người dùng không thể tương tác với chương trình qua
standard input là bàn phím cần phải tái định hướng standard inputquan file khi
for variable in value1 value2
do
action on $variable
done
chương trình cần nhập dữ liệu. Chạy một tiến trình mặt hậu bằng cách thêm dấu & ở
cuối dòng lệnh.
Xem các tiến trình đang chạy trên hệ thống
ps -ef
Liệt kê tất cả các tiến trình đang chạy. Gồm thông tin IDnumber của tiến trình,
tiến trình cha, và thời gian chạy.
ps -eljH | more hoặc pstree
Liệt kê các tiến trình dạng cây
ps -eljH |more
Xem trạng thái của tiến trình (running, sleeping,…) tại cột S
Kết thúc tiến trình
kill PID
Kết thúc tiến trình có id là PID
kill -SIGKILL <PID_của shell cha >
Kết thúc tiến trình cha => kết thúc mọi tiến trình con
killall -SIGKILL PID
Kết thúc nhiều tiến trình
7. Lập trình C trên Linux
Các bước tạo và thực thi chương trình C trên Linux
Dùng trình soạn thảo vi hoặc nano… để viết chương trình và lưu với phần mở
rộng là .c, ví dụ: filename.c
Biên dịch chương trình:
gcc -o filename filename.c
Thực thi chương trình
./filename
Ví dụ: tạo tập tin hello.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf(“Hello World\n”);
exit(0);
}
Biên dịch chương trình:
gcc -o hello hello.c
Thực thi chương trình
./hello
B. BÀI TẬP
Bài 1
1. Login vào hệ thống bằng user root
2. Tạo một user mới với username là user1 password tùy ý
3. Tạo hai nhóm người dùng GroupIT và GroupIS
4. Đưa user1 vào GroupIT
5. Tạo thêm một user2 trong GroupIT với password tùy ý
6. Tạo một user3 trong GroupIS với password tùy ý
7. Xem thông tin về các tài khoản /etc/passwd và /etc/shadow (xem 5 dòng cuối của
tập tin Shadow và passwd)
8. Xem thông tin về các nhóm /etc/group
9. Mở thêm các terminal2, terminal3, terminal4 bằng cách dùng tổ hợp phím
Alt_F2, Alt_F3, Alt_F4.
10. Tại các terminal2, terminal3, terminal4 lần lượt login bằng tài khoản của các
user1, user2, user3.
11. Tại terminal2 của user1, dùng lệnh cat soạn thảo tập tin test1.txt trong thư mục
làm việc của user1 với nội dung:
Ma sinh vien: …,
Ho ten sinh vien: …,
Chuyen nganh …,
12. Tại terminal3 của user2, chuyển nội dung của lệnh ls –la vào tập tin test2.txt, dùng
lệnh cat xem lại nội dung của tập tin test2.txt.
13. Tại terminal4 của user3, tạo nhánh thư mục như hình.
14. Trở lại terminal1 của root, xem các user đang login
15. Đóng các terminal2, terminal3, terminal4, sau đó kiểm tra
lại các user đang login.
Bài 2
1. Phân quyền cho GroupIT trên tập tin test.txt là rwx (chmod g+rwx
/home/user1/test.txt)
2. Xem các quyền trên tập tin test.txt
3. Mở terminal2, login bằng tài khoản user2, chép tập tin test.txt vào thư mục làm
việc của user2, thoát khỏi tài khoản user2.
4. Đăng nhập lại bằng tài khoản của user3, chép tập tin test.txt vào thư mục baitap1
của user3, có thực hiện được không?
5. Dùng quyền root chuyển user3 vào nhóm GroupIT.
6. Chép nội dung của test1.txt và test2.txt vào test3.txt trong thư mục baitap1 của
user3.
7. Xem quyền của test3.txt
8. Xóa các tập tin test1, test2, test3
9. Xóa thư mục baitap1 và nội dung của baitap1
10. Xóa các user đã tạo.
Bài tập 3
1. Tạo và thực thi các script trong các ví dụ 1 8
2. Viết một shell script đổi tên tất cả các file trong một thư mục bằng cách thêm một
số tăng dần vào tên tập tin, giả sử tên tập tin không có phần mở rộng. Con số này
được tăng lên sau mỗi lần đổi tên. Tên tập tùy ý.
Gợi ý:
o Sử dụng cú pháp: i=1; i=$(($i + 1)),
hoặc: i=1; i=`expr $i + 1`,
hoặc: i=1; let i=$i+1
o Nối chuỗi – Ví dụ: $ String1="Hello"
$ i=25
$ String3=$String1" "$i
$ echo $String3
Hello 25
3. Viết một script hiển thị ngày, giờ, username và thư mục hiện hành.
4. Viết một script tên MkFolder cho phép người dùng nhập vào tên thư mục muốn
tạo và thực hiện việc tạo thư mục. Nếu tạo không thành công thì in ra câu thông
báo “Khong the tao thu muc”.
5. Viết một script tên execute nhận vào 2 tham số cmd1 và arg1, trong đó cmd1 là
lệnh cần thực hiện và arg1 là tham số của lệnh. Khi script được thực hiện thì lệnh
cmd1 sẽ thực hiện. Ví dụ execute mkdir baitap thì thư mục bài tập sẽ được tạo
6. Viết một script tên pheptinh cho phép truyền vào 2 tham số, sau đó thực hiện
các phép toán cộng, trừ, nhân và chia.
Sử dụng cú pháp $((biểu thức)),
Ví dụ: echo $((3 + 5)) cho kết quả 8
7. Viết và thực thi chương trình Hello.c trong ví dụ bên trên
Bài tập 4:
1. Dùng user root tạo hai tài khoản mới UserA và UserB có pass tùy ý. Mở thêm 2 terminal
mới. Trên terminal 1, sử dụng tài khoản UserA gọi chạy chương trình nano. Trên terminal 2,
sử dụng tài khoản UserB gọi chạy chương trình xeyes. Tại cửa sổ terminal của user root, liệt
kê các tiến trình đang chạy trên các terminal.
2. Dùng lệnh kill kết thúc tiến trình của UserB. Quan sát kết quả trên terminal của UserB.