Bài giảng Hệ điều hành mã nguồn mở

MỤC LỤC

Chƣơng 1. GIỚI THIỆU CHUNG VỀ LINUX . 6

1.1. Giới thiệu chung . 6

1.1.1. Tổng quan về Linux . 6

1.1.2. Vấn đề bản quyền . 6

1.1.3. Các thành phần tích hợp Hệ điều hành Linux . 7

1.1.4. Một số đặc điểm chính của Linux . 7

1.2. Các thành phần cơ bản của Linux . 8

1.2.1. Nhân hệ thống (kernel) . 8

1.2.2. Hệ vỏ (shell) . 9

1.3. Sử dụng lệnh trong Linux . 9

1.3.1. Dạng tổng quát của lệnh Linux . 10

1.3.2. Các ký hiệu đại diện . 11

1.3.3. Trợ giúp lệnh . 11

Chƣơng 2. THAO TÁC VỚI HỆ THỐNG. 12

2.1. Tiến trình khởi động Linux . 12

2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống . 12

2.2.1. Đăng nhập . 12

2.2.2. Ra khỏi hệ thống . 12

2.2.3. Khởi động lại hệ thống . 13

2.2.4. Khởi động vào chế độ đồ hoạ . 13

2.3. Một số liên quan đến hệ thống . 15

2.3.1. Lệnh thay đổi mật khẩu . 15

2.3.2. Lệnh xem, thiết lập ngày, giờ . 15

2.3.3. Lệnh kiểm tra những ai đang sử sụng hệ thống . 15

2.3.4. Thay đổi nội dung dấu nhắc shell . 15

2.3.5. Lệnh gọi ngôn ngữ tính toán số học . 16

Chƣơng 3. HỆ THỐNG FILE . 17

3.1 Tổng quan về hệ thống file . 17

3.1.1. Một số khái niệm . 17

3.1.2. Sơ bộ kiến trúc nội tại của hệ thống file . 18

3.1.3. Hỗ trợ nhiều hệ thống File . 20

3.1.4. Liên kết tƣợng trƣng (lệnh ln) . 21

3.2 Quyền truy nhập thƣ mục và file . 22

3.2.1 Quyền truy nhập . 22

3.2.2. Các lệnh cơ bản . 23

3.3 Thao tác với thƣ mục . 25

3.3.1 Một số thƣ mục đặc biệt . 25

3.3.2 Các lệnh cơ bản về thƣ mục . 26

3.4. Các lệnh làm việc với file . 28

3.4.1 Các kiểu file có trong Linux . 28

3.4.2. Các lệnh tạo file . 29

- 2 -3.4.3 Các lệnh thao tác trên file . 30

3.4.4 Các lệnh thao tác theo nội dung file . 32

3.4.5 Các lệnh tìm file . 35

3.5 Nén và sao lƣu các file . 37

3.5.1 Sao lƣu các file (lệnh tar) . 37

3.5.2 Nén dữ liệu . 38

CHƢƠNG 4. QUẢN TRỊ HỆ THỐNG VÀ NGƢỜI DÙNG . 41

4.1. Quản trị ngƣời dùng . 41

4.1.1. Tài khoản ngƣời dùng . 41

4.1.2. Các lệnh cơ bản quản lý ngƣời dùng . 41

4.2. Các lệnh cơ bản liên quan đến nhóm ngƣời dùng . 44

4.2.1. Nhóm ngƣời dùng và file /etc/group . 45

4.2.2. Các lệnh cơ bản khác có liên quan đến ngƣời dùng . 46

4.3. Quản trị hệ thống . 47

4.3.1. Quản lý tiến trình . 47

4.3.2 Quản trị phần mềm . 51

4.3.3. Quản trị hệ thống Linux . 51

Chƣơng 5. TRUYỀN THÔNG VÀ MẠNG UNIX-LINUX . 53

5.1. Lệnh truyền thông . 53

5.1.1. Lệnh write . 53

5.1.2. Lệnh mail . 53

5.1.3. Lệnh talk . 54

5.2 Cấu hình Card giao tiếp mạng . 54

5.3. Các dịch vụ mạng . 55

5.3.1 Hệ thông tin mạng NIS . 55

5.3.2. Cài đặt và cấu hình cho máy chủ NIS . 56

5.3.3. Cài đặt các máy trạm NIS . 56

5.3.4. Lựa chọn các file map . 57

5.3.5. Sử dụng các file map passwd và group . 58

5.4 Hệ thống file trên mạng . 59

5.4.1 Cài đặt NFS . 59

5.4.2 Khởi động và dừng NFS . 59

5.4.3 Cấu hình NFS server và Client . 60

5.4.4 Sử dụng mount . 60

5.4.5 Unmount . 61

5.4.6 Mount tự động qua tệp cấu hình . 61

Chƣơng 6. LẬP TRÌNH SHELL VÀ LẬP TRÌNH C TRÊN LINUX . 62

6.1. Cách thức pipes và các yếu tố cơ bản lập trình trên shell . 62

6.1.1. Cách thức pipes . 62

6.1.2. Các yếu tố cơ bản để lập trình trong shell . 62

6.2. Một số lệnh lập trình trên shell . 65

6.2.1. Sử dụng các toán tử bash . 65

6.2.2. Điều khiển luồng . 67

- 3 -6.2.3 Các hàm shell . 75

6.2.4. Các toán tử định hƣớng vào ra . 75

6.2.5. Hiện dòng văn bản . 76

6.2.5. Lệnh read đọc dữ liệu cho biến ngƣời dùng . 76

6.2.6. Lệnh set . 77

6.2.7. Tính toán trên các biến . 77

6.2.8. Chƣơng trình ví dụ . 77

6.3. Lập trình C trên UNIX . 78

6.3.1. Trình biên dịch gcc . 78

6.3.2. Công cụ GNU make . 80

6.3.3. Làm việc với file . 81

6.3.4. Thƣ viện liên kết . 83

6.3.5 Các công cụ cho thƣ viện . 89

pdf93 trang | Chuyên mục: Hệ Điều Hành | Chia sẻ: dkS00TYs | Lượt xem: 2753 | Lượt tải: 2download
Tóm tắt nội dung Bài giảng Hệ điều hành mã nguồn mở, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
chia sẻ 
Để truy cập một đối tƣợng chia sẻ, dùng hàm dlopen() có đặc tả nhƣ sau: 
void *dlopen(const char *filename, int flag); 
- 88 - 
dlopen() truy cập đối tƣợng chia sẻ bằng filename và bằng cờ. Filename có thể là đƣờng 
dẫn đầy đủ, tên file rút gọn hay NULL. Nếu là NULL dlopen() mở chƣơng trình đang chạy, 
đó là chƣơng trình của bạn, nếu filename là đƣờng dẫn dlopen() mở file đó, nếu là tên rút gọn 
dlopen() sẽ tìm trong vị trí sau để tìm file: 
$LD_ELF_LiBRARY_PATH, 
$LD_LIBRARY_PATH, /etc/ld.so.cache, /usr/lib, và /lib. 
Cờ có thể là RTLD_LAZY, có nghĩa là các ký hiệu (symbol) hay tên hàm từ đối tƣợng 
truy cập sẽ đƣợc tìm mỗi khi chúng đƣợc gọi, hoặc cờ có thể là RTLD_NOW, có nghĩa tất cả 
ký hiệu từ đối tƣợng truy cập sẽ đƣợc tìm trƣớc khi hàm dlopen() trả về. dlopen() trả điều 
khiển tới đối tƣợng truy nhâp nếu nó tìm thấy từ filename hay trả về giá trị NULL nếu không 
tìm thấy. 
Sử dụng đối tƣợng chia sẻ 
Trƣớc khi có thể sử dụng mã nguồn trong thƣ viện ta phải biết đang tìm cái gì và tìm ở 
đâu. Hàm dlsym() sẽ giúp điều đó: 
void *dlsym(void *handle, char *symbol); 
dlsym() tìm ký hiệu hay tên hàm trong truy cập và trả lại con trỏ kiểu void tới đối tƣợng 
hay NULL nếu không thành công. 
Kiểm tra lỗi 
Hàm dlerror() sẽ giúp ta kiểm tra lỗi khi sử dụng đối tƣợng truy cập động: 
const char *dlerror(void); 
Nếu một trong các hàm lỗi, dlerror() trả về thông báo chi tiết lỗi và gán giá trị NULL 
cho phần bị lỗi. 
Giải phóng đối tƣợng chia sẻ 
Để bảo vệ tài nguyên hệ thống đặc biệt bộ nhớ, khi ta sử dụng xong module trong một 
đối tƣợng chia sẻ, thì giải phóng chúng. Hàm dlclose() sẽ đóng đối tƣợng chia sẻ: 
int dlclose(void *handle); 
Sử dụng giao diện dl 
Để minh hoạ cách sử dụng dl,chúng ta quay lại thƣ viện xử lí lỗi, sử dụng một chƣơng 
trình khác nhƣ sau: 
/* 
* Mã nguồn chương trình dltest.c 
* Dynamically load liberr.so and call err_ret() 
*/ 
#include 
#include 
#include 
int main(void) 
{ 
void *handle; 
void (*errfcn)(); const char *errmsg; FILE *pf; 
handle = dlopen("liberr.so", RTLD_NOW); 
if(handle == NULL) { 
fprintf(stderr, "Failed to load liberr.so: %s\n", dlerror()); 
exit(EXIT_FAILURE); 
} 
dlerror(); 
errfcn = dlsym(handle, "err_ret"); 
if((errmsg = dlerror()) != NULL) { 
- 89 - 
fprintf(stderr, "Didn't find err_ret(): %s\n", errmsg); 
exit(EXIT_FAILURE); 
} 
if((pf = fopen("foobar", "r")) == NULL) 
errfcn("couldn't open foobar"); 
dlclose(handle); 
return EXIT_SUCCESS; 
} 
Biên dịch ví dụ trên bằng lệnh: 
$ gcc -g -Wall dltest.c -o dltest -ldl 
Nhƣ ta có thể thấy, chúng ta không liên kết dựa vào liberr hay liberr.h trong mã nguồn. 
Tất cả truy cập tới liberr.so thông qua dl. Chạy chƣơng trình bằng cách sau: 
$ LD_LIBRARY_PATH=$(pwd) ./dltest 
Nếu thành công thì ta nhận đƣợc kết quả nhƣ sau: 
couldn‟t open foobar: No such file or directory 
6.3.5 Các công cụ cho thư viện 
Công cụ nm 
Lệnh nm liệt kê toàn bộ các tên hàm (symbol) đƣợc mã hoá trong file đối tƣợng (object) 
và nhị phân (binary). Lệnh nm sử dụng cú pháp sau: 
nm [options] file 
L ệnh nm liệt kê những tên hàm chứa trong file. 
Tuỳ chọn Miêu tả 
-C| -demangle Chuyển tên ký tự vào tên mức ngƣời dùng để cho dễ đọc. 
-s|-print-armap Khi sử dụng các file lƣu trữ (phần mở rộng là “.a”), in ra các 
chỉ số của module chứa hàm đó. 
-u| -undefined-only Chỉ đƣa ra các hàm không đƣợc định nghĩa trong file này, tức 
là các hàm đƣợc định nghĩa ở một file khác. 
- l | -line-numbers Sử dụng thông tin gỡ rối để in ra số dòng nơi hàm đƣợc định nghĩa 
Công cụ ar 
Lệnh ar sử dụng cú pháp sau: 
ar {dmpqrtx} [thành viên] file 
Lệnh ar tạo, chỉnh sửa và trích các file lƣu trữ. Nó thƣờng đƣợc sử dụng để tạo các thƣ 
viện tĩnh- những file mà chứa một hoặc nhiều file đối tƣợng chứa các chƣơng trình con 
thƣờng đƣợc sử dụng (subrountine) ở định dạng tiền biên dịch (precompiled format), lệnh 
ar cũng tạo và duy trì một bảng mà tham chiếu qua tên ký tự tới các thành viên mà trong 
đó chúng đƣợc định nghĩa. Chi tiết của lệnh này đã đƣợc trình bày trong chƣơng trƣớc. 
Công cụ idd 
Lệnh nm liệt kê các hàm đƣợc định nghĩa trong một file đối tƣợng, nhƣng trừ khi ta biết 
những gì thƣ viện định nghĩa những hàm nào. Lệnh idd hữu ích hơn nhiều. idd liệt kê các thƣ 
viện đƣợc chia sẻ mà một chƣơng trình yêu cầu để mà chạy. Cú pháp của nó là: 
idd [options] file 
Lệnh idd in ra tên của thƣ viện chia sẻ mà file này sử dụng. 
Ví dụ: chƣơng trình thƣ “client mutt” cần 5 thƣ viện chia sẻ, nhƣ đƣợc minh hoạ sau 
đây: 
$ idd /usr/bin/mutt 
- 90 - 
libnsl.so.1 => /lib/libns1.so.1 (0x40019000) libslang.so.1 => /usr/lib/libslang.so.1 
(0x4002e000) libm.so.6 => /lib/libm/so.6 (0x40072000) 
libc.so.6 => /lib/libc.so.6 (0x4008f000) 
/lib/id-linux.so.2 => /lib/id-Linux.so.2 (0x4000000) 
Tìm hiểu lệnh idconfig 
Lệnh idconfig sử dụng cú pháp sau: 
ldconfig [tuỳ chọn] [libs] 
Lệnh ldconfig xác định rõ các liên kết động (liên kết khi chạy) đƣợc yêu cầu bởi thƣ 
viện đƣợc chia sẻ nằm trong các thƣ mục /usr/lib và /lib. Dƣới đây là các tùy chọn của lệnh 
này: 
Các tuỳ chọn Các miêu tả 
-p Đơn thuần chỉ in ra nội dung của /etc/ld.so.cache, một danh 
sách hiện thời các thƣ viện đƣợc chia sẻ mà ld.so biết. 
-v Cập nhật /etc/ld.so.cache , liệt kê số phiên bản của mỗi thƣ 
viện, quét các thƣ mục và bất kỳ liên kết mà đƣợc tạo ra hoặc cập nhật. 
Các tuỳ chọn của hàm idconfig 
Biến môi trường và file cấu hình. 
Chƣơng trình tải (loader) và trình liên kết (linker) ld.so sử dụng 2 biến môi trƣờng. Biến 
thứ nhất là $LD_LIBRARY, chứa danh sách các thƣ mục chứa các file thƣ viện đƣợc phân 
cách bởi dấu hai chấm để tìm ra các thƣ viện cần thiết khi chạy. Nó giống nhƣ biến môi 
trƣờng $PATH. Biến môi trƣờng thứ hai là $LD_PRELOAD, một danh sách các thƣ viện 
đƣợc ngƣời dùng thêm vào đƣợc phân cách nhau bởi khoảng trống (space). 
ld.so cũng cho phép sử dụng 2 file cấu hình mà có cùng mục đích với biến môi trƣờng 
đƣợc đề cập ở trên. File /etc/ld.so.conf chứa một danh sách các thƣ mục mà chƣơng trình tải 
và trình liên kết (loader/linker) nên tìm kiếm các thƣ viện chia sẻ bên cạnh /usr/lib và /lib. 
/etc/ld.so.preload chứa danh sách các file thƣ viện đƣợc phân cách bằng một khoảng trống các 
thƣ viện này là thƣ viện ngƣời dùng tạo ra. 
CÂU HỎI VÀ BÀI TẬP 
1. Trình bày các yếu tố cơ bản trong lập trình shell 
2. Trình bày ý nghĩa, chức năng và tác dụng của trình biên dịch gcc. 
3. Thực hành các lệnh trong lập trình shell 
4. Thực hành các lệnh trong lập trình C 
- 91 - 
ĐỀ THI THAM KHẢO 
Đề 1: 
Câu 1: Trình bày khái niệm và cấu trúc siêu khối 
Câu 2: Trong thƣ mục ngƣời dùng /home/tuanpv có các thƣ mục con là vanban, bangtinh. 
Hãy viết các lệnh của Linux để: 
1. Tạo tại thƣ mục vanban một thƣ mục con có tên là hopdong. Sao chép các tệp tin có 2 
ký tự phần tên là HD trong thƣ mục vanban vào thƣ mục vừa tạo 
2. Liệt kê các tệp tin có phần tên bắt đầu bởi ký tự “M” trong thƣ mục bangtinh lên màn 
hình (cho hiện các tệp tin có thuộc tính ẩn nếu có) 
3. Xác lập quyền chỉ đọc cho các tệp trong thƣ mục bangtinh. 
4. Xoá tất cả các tệp tin 2 ký tự “nh” thuộc phần tên trong thƣ mục vanban. 
Câu 3: Lập chƣơng trình liệt kê tên và sao chép các tệp tin trong thƣ mục /home/user1/vidu1 
sang thƣ mục /home/user2/vidu 
Đề 2: 
Câu 1: Trình bày khái niệm và cấu trúc inode 
Câu 2: Trong thƣ mục ngƣời dùng /home/minhnd có các thƣ mục con là musics, games. Hãy 
viết các lệnh của Linux để: 
1. Xoá đi các tệp tin có phần mở rộng là mp3 trong thƣ mục musics; Xoá thƣ mục 
lines trong thƣ mục games 
2. Tạo ra tại thƣ mục ngƣời dùng một thƣ mục con có tên temp, trong thƣ mục này tạo 
hai thƣ mục con ngang cấp có tên vidu1 và vidu2. 
3. Liệt kê các tiến trình đang chạy trong hệ thống. 
4. Nén thƣ mục games thành tệp tin luugames.tar 
Câu 3: Lập chƣơng trình đọc và hiển thị nội dung của 1 file không cấu trúc 
Đề 3: 
Câu 1: Trình bày tên và tác dụng của các thƣ mục đặc biệt trong Linux 
Câu 2: Trong thƣ mục ngƣời dùng /home/cuongpv có các thƣ mục con là tailieu, tapchi. Hãy 
viết các lệnh của Linux để: 
1. Nối nội dung các tệp sach1, sach2 trong thƣ mục tailieu thành tệp tapsach đặt tạo thƣ 
mục ngƣời dùng. 
2. Liệt kê các tệp tin trong thƣ mục tapchi (kể cả tệp tin có thuộc tính ẩn) 
3. Nén các tệp tin trong thƣ mục tailieu thành tệp luutl.zip đặt tại thƣ mục ngƣời dùng. 
4. Xóa các tệp tin có ký tự “h” của phần tên trong thƣ mục tailieu 
Câu 3: Cho hai vector m chiều a = (a1, a2, a3,..., am) và b = (b1, b2, b3,..., bm). Hãy lập chƣơng 
trình để tính tích vô hƣớng của a và b theo công thức a.b = a1.b1 + a2.b2 + ... + am.bm. 
Đề 4: 
Câu 1: Trình bày cấu trúc thông tin lƣu trữ về tài khoản ngƣời của một dùng trong trong file 
/etc/passwd 
Câu 2: Trong thƣ mục ngƣời dùng /home/dungnv có các thƣ mục con là vanhoc và kythuat. 
Hãy viết các lệnh của Linux để: 
1. Tìm tệp tin có chứa nội dung là “Happy Birthday” 
2. Thiết lập quyền truy cập thƣ mục kythuat cho tất cả các ngƣời dùng. 
- 92 - 
3. Tạo một thƣ mục có tên là nghethuat trong thƣ mục ngƣời dùng, sau đó chép tất cả các 
tệp có ký tự “01” ở cuối phần tên trong thƣ mục vanhoc vào thƣ mục vừa tạo. 
4. Liệt kê cấu hình của máy hiện tại 
Câu 3: Cho số n, Hãy lập chƣơng trình để thực hiện tính giá trị của hàm cos(x) theo công 
thức: Cos(x) = 1- x2/2! + x4/4! - x6/6! + ... (-1)nx2x/(2n)! 
Đề 5: 
Câu 1: Trình bày các yếu tố cơ bản trong lập trình shell 
Câu 2: Trong thƣ mục ngƣời dùng /home/thanghv có các thƣ mục con là congvan, quyetdinh. 
Hãy viết các lệnh của Linux để: 
1. Tạo ra tại thƣ mục ngƣời dung một thƣ mục con có tên là saoluu, 
2. Sao chép tất cả các tệp tại thƣ mục quyetdinh vào thƣ mục vừa tạo 
3. Thiết lập quyền truy cập thƣ mục congvan cho nhóm ngƣời dùng hanhchinh 
4. Xóa các tệp có hai ký tự đầu phần tên là “GM” trong thƣ mục congvan 
Câu 3: Cho số thực a. Hãy lập sơ đồ thuật toán để thực hiện tìm số tự nhiên n nhỏ nhất 
sao cho 1+1/2 + 1/3 + ... + 1/n > a 

File đính kèm:

  • pdfBài giảng Hệ điều hành mã nguồn mở.pdf