12
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.

MODULE 1: LÀM QUEN VỚI MÔI TRƯỜNG LINUX SHELL … · Các đối sốtruyền cho shell script có thể tham chiếu ngay trong chương trình shell qua ... tat ca cac doi

  • Upload
    lytram

  • View
    214

  • Download
    1

Embed Size (px)

Citation preview

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.