You are on page 1of 64

BÀI TẬP NGUYÊN LÝ HỆ ĐIỀU HÀNH

CHỦ ĐỀ: CẤU TRÚC, SỬ DỤNG, NGUYÊN


LÝ, PHÂN TÍCH MÃ NGUỒN CentOS

NHÓM 6:
1. PHA LI NHA
2. NGUYỄN CÔNG ĐỨC
3. NGUYỄN THỊ HỒNG NGOAN
4. NGUYỄN THU THÙY
5. NGUYỄN TUẤN ANH

1. TỔNG QUAN VỀ CENTOS


1.1 Giới thiệu về HDH Linux/CentOS

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHÂN TÍCH MÃ NGUỒN CENTOS
NHÓM 6 – AT7A

Năm 1991, Linus Torvalds, sinh viên của Đại Học Tổng hợp Helsinki
Phần Lan bắt đầu xem xét Minix, một phiên bản của Unix với mục đích tạo
ra một hệ điều hành Unix chạy trên PC với bộ xử lý Intel 80386.
Năm 1994, phiên bản Linux 1.0 chính thức được phát hành. Linux là một
hệ điều hành dạng Unix, được viết lại từ đầu và không sử dụng một lệnh nào
của Unix để tránh vấn đề bản quyền. Nhưng hoạt động của Linux lại hoàn
toàn dựa trên nguyên tắc hoạt động của Unix. Linux là một hệ điều hành
miễn phí, được cộng đồng IT phát triển trên mạng internet. Linux là hệ điều
hành đa nhiệm và đa người dùng, tận dụng được sức mạnh xử lý của máy 386
và các đời cao hơn, chạy được trên nhiều loại máy. Linux hỗ trợ sẵn bộ giao
thức TCP/IP giúp người dùng dễ dàng kết nối internet, có khả năng tương
thích với các hệ thống mở, hỗ trợ người dùng với nhiều tiện ích. Bên cạnh đó
thì Linux vẫn tồn tại một số hạn chế. Linux không có một công ty nào đứng
ra chịu trách nhiệm phát triển nó nên nếu gặp trục trặc sẽ không có ai có thể
giải quyết miễn phí cho bạn. Linux không dễ dàng cài đặt và hỗ trợ nhiều
thiết bị phần cứng. Các phiên bản phần cứng của Linux đều hỗ trợ theo
nguyên tắc phần cứng của nhà phát triển Linux. Quá trình sử dụng với người
dùng tương đối khó khăn bởi Linux hỗ trợ giao tiếp bằng đồ họa ít, chủ yếu
phải dùng bằng lệnh.
Sau khi Linux ra đời và phát triển thì nó có nhiều phiên bản phát triển
khác nhau nhưng đều dựa trên nhân của Linux. Hiện nay trên thị trường hay
trên internet có rất nhiều phiên bản cho người dùng lựa chọn, bản thương mại
cũng có, bản miễn phí cũng có. Có một số bản như: Ubuntu, Fedora, Red
Hat Enterprise, CentOS… Trong quá trình phát triển của mình nó cũng tách
ra làm 2 dòng chính, 1 để phục vụ cho người dùng cá nhân với các ứng dụng
hỗ trợ. Hai là phục vụ cho máy chủ với nhiều tính năng ứng dụng mang tầm
rộng hơn.
CentOS (viết tắt của Community ENTerprise Operating System) là một
bản phân phối của Linux, được xây dựng từ nhiều nguồn miễn phí của
RedHat. Hiện tại CentOS có phiên bản mới nhất là 6.4, được xây dựng dựa
trên nền Red Hat Enterprise Linux 6, hỗ trợ dòng x86_64 (i386), có kernel
2.6 của Linux, sử dụng giao diện người dùng GNOME. Và là bản miễn phí
được phát triển mạnh mẽ bởi cộng đồng IT trên Internet.
CentOS thường được sử dụng trên các hệ điều hành máy chủ web, Server.
1.2 Hướng dẫn cài đặt CentOS 6.4
1.2.1 Yêu cầu phần cứng
- CPU: 1 GHz
- RAM: 512MB
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 2
NHÓM 6 – AT7A

- HDD: 5GB trống


1.2.2 Quá trình cài đặt
Đầu tiên cần tải file iso về tại địa
chỉ:http://www.centos.org/modules/tinycontent/index.php?id=32 dung lượng
khoảng hơn 5GB. Sau đó tiến hành ghi ra đĩa DVD hoặc cài bằng VMWare. Ở
đây tôi sẽ cài bằng máy ảo VMWare

Các bước cài đặt được tiến hành như trong hình.

Chọn vào Install or upgrade an exiting system để cài đặt mới.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 3
NHÓM 6 – AT7A

Hệ thống sẽ load các file cần thiết cũng như xác định các thành phần phần cứng của
máy.

Ở cửa sổ Disc Found hệ thống thông báo đã tìm thấy đĩa cài đặt, nhần OK để kiểm tra
xem đĩa có bị lỗi hay không hoặc nhấn vào Skip để bỏ qua bước kiểm tra đĩa này nếu
chắc chắn đĩa không có lỗi gì.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 4
NHÓM 6 – AT7A

Tiến trình cài đặt bắt đầu. Ta nhấn Next để tiếp tục

Lựa chọn ngôn ngữ trong quá trình cài đặt. Có nhiều ngôn ngữ để lựa chon. Ở đây chon
tiếng Anh

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 5
NHÓM 6 – AT7A

Lựa chọn kiểu bàn phím. Thường là US.English. Nhấn next để tiếp tục.

Lựa chọn kiểu thiết bị lưu trữ được sử dung để cài đặt. Chọn Basic Storagr Device để
lựa chọn ổ cứng gắn trong máy để cài đặt. Nhấn Next để tiếp tục.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 6
NHÓM 6 – AT7A

Do ổ đĩa trong trường hợp này chưa được phân vùng (đĩa trắng hoàn toàn)
nên hệ thống đưa ra cảnh báo. Ta chọn vào Yes, discard any data để bỏ qua tất cả
dữ liệu (nếu có) trên ổ đĩa.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 7
NHÓM 6 – AT7A

Ở phần Hostname (tên máy) ta nhập vào địa chỉ FQDN cho server chẳng hạn như
demo.com,…

Một cửa sổ hiện ra giúp lựa chọn card mạng. Sau đó vào Configure Network Settings
trong lựa chọn Configure Network.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 8
NHÓM 6 – AT7A

Chọn time zone là Asia/Ho Chi Minh rồi ấn Next

Cài đặt mật khẩu cho người dung root.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 9
NHÓM 6 – AT7A

Lựa chọn kiểu cài đặt CentOS vào ổ cứng, ở đây chọn Replace Existing Linux System
và chọn Review and modify partitioning layout. Ấn Next để chuyển đến bước tiếp theo.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 10
NHÓM 6 – AT7A

Kiểm tra xem các phân vùng đã chính xác chưa, nếu chưa chỉnh lại cho đúng. Chú ý đến
lv_root và Lv_swap. Thông thường để phân vùng swap sẽ gấp đôi dung lượng RAM,
dung lượng còn lại để cho phân vùng root (/). Ấn Next sẽ hiện ra bảng Format Warning.
Chọn Format rồi sau đó chọn Write change to disk.

Quá trình định dạng ổ cứng để cài đặt.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 11
NHÓM 6 – AT7A

Cài đặt Boot Loader. Chọn Change Device để lựa chọn phân vùng để ghi BootLoader.
Click chọn Use a boot loader password nếu hệ thống được truy cập bởi nhiều người
dùng (ở trường hợp này không chọn). Ấn Next.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 12
NHÓM 6 – AT7A

Để lựa chọn những ứng dụng muốn cài đặt có thể chọn Customize now để thêm hoặc
xóa và ấnNext

Lựa chọn những gói, ứng dụng muốn cài đặt. Click Next

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 13
NHÓM 6 – AT7A

Quá trình cài đặt bắt đầu. Có thể mất một vài phút.

Cài đặt thành công. Click Reboot để hoàn tất.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 14
NHÓM 6 – AT7A

Màn hình đăng nhập của CentOS sau khi khởi động lại.

2. CẤU TRÚC VÀ SỬ DỤNG

2.1 Kiến trúc của HDH

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 15
NHÓM 6 – AT7A

Hình 1: Kiến trúc HDH


- Shell cung cấp các tập lệnh cho người dùng thao tác với kernel để thực
hiện công việc. Shell đọc các lệnh từ người dùng và xử lý. Ngoài ra shell
còn cung cấp một số đặc tính khác như chuyển hướng xuất nhập, ngôn ngữ
lệnh để tạo ra các tập tin tương tự như .bat trong MSDos. Có nhiều shell
được sử dụng trong Linux và mỗi shell có các bộ lệnh khác nhau.
- Các tiện ích được sử dụng cho việc thao tác với tập tin, sao, lưu dữ liệu…
Hầu hết các tiện ích sử dụng trong Linux đều là sản phẩm của GNU.
- Ứng dụng là các tiện ích được các nhà sản xuất viết ra và cung cấp cho
người dùng như là: word, hệ quản trị cơ sở dữ liệu…
- Kernel là trung tâm của hệ điều hành Linux cũng như CentOS, chứa các
mã nguồn điều khiển hoạt động của toàn bộ hệ thống
- Phần cứng bao gồm các tổ chức phần cứng của máy như bộ xử lý trung
tâm(CPU)…

Kiến trúc của CentOS có thể xem như là một loại kim tự tháp với các chức năng
xếp chồng lên nhau. Hệ điều hành tương tác trực tiếp với phần cứng, cung cấp các
dịch vụ cơ bản cho các chương trình và ngăn cách các chương trình với phần cứng cụ
thể. Nếu nhìn hệ thống từ các lớp, thì hệ điều hành thông thường được gọi là “nhân
hệ thống” (System Kernel), nó được cách ly với chương trình của người dùng. Bởi vì
các chương trình ứng dụng nói chung, kể cả các hệ điều hành, độc lập phần cứng,
nên dễ dàng chạy trên các phần cứng khác nhau vì không phụ thuộc vào phần cứng
cụ thể. Chẳng hạn Shell và các editors (vi, ed) ở lớp ngoài tương tác với kernel bằng
cách phát sinh ra gọi hệ thống (system call).Gọi hệ thống sẽ chỉ thị cho kernel làm
những việc khác nhau mà chương trình gọi yêu cầu, thực hiện trao đổi dữ liệu giữa

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 16
NHÓM 6 – AT7A

kernel và chương trình đó. Một vài chương trình có tên trong hình là chương trình
chuẩn trong cấu hình của hẹ thống và được biết tên dưới dạng các lệnh (commands).
Lớp này cũng có thể bao hàm các chương trình người dùng với tên là a.out, một loại
tên chuẩn do các tệp chạy được do bộ dịch C tạo ra. Còn có loại ứng dụng khác được
xây dựng trên lớp trên cùng của các chương trình có mức thấp hơn hiện diện ở lớp
ngoài cùng của mô hình. Mặc dù mô hình mô tả hai cấp khác nhau nhưng người
dùng có thể mở rộng ra các cấp thích hợp. Rất nhiều các hệ thống ứng dụng, các
chương trình, cho cách nhìn ở mức cao, song tất cả đều dùng các dịch vụ cấp thấp
được cung cấp bởi kernel.

2.2 Cấu trúc cây thư mục


Các hệ điều hành Linux đêu giữ lại cấu trúc cây thư lục lịch sử của Unix nhưng
chúng không phải là Unix nên tùy từng bản phân phối mà cấu trúc này cũng được
thay đổi theo. Dưới đây là cấu trúc cây thư mục của CentOS.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 17
NHÓM 6 – AT7A

- /: Thư mục gốc là nơi bắt đầu của tất cả thư mục và tệp tin. Chỉ có người
dùng root mới có quyền thao tác trên thư mục này. Chú ý / khác với /root
là thư mục home của user root.
- /boot: Thư mục này chứa các tập tin liên quan tới chương trình quản lý
khởi động máy. Nó lưu trữ dữ liệu cần sử dụng trước khi kernel bắt đầu
thực thi chương trình người dùng. Chúng có thể bao gồm master boot
sector và sector map file. Ví dụ như initrd, vmlinux.grub,..
- /bin: Thư mục chứa các tệp tin thực thi của người dùng, các lệnh được sử
dụng bởi tất cả người dùng trong hệ thống (khác với thư mục /sbin chỉ
được chạy bởi /sbin). Ví dụ: các lệnh man, cat, vi, grep,…
- /sbin – System binary: Thư mục này chứa các tệp tin thực thi của hệ thống,
các lệnh quản trị hệ thống. Chỉ người dùng root mới có quyền thực thi. Nó
gồm các lệnh: fastboot, fasthalt, halt, update,….
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 18
NHÓM 6 – AT7A

- /dev: chứa các tập tin thiết bị đầu cuối như USB hay bất kì thiết bị nào
được gắn vào hệ thống.
- /etc: Trong thư mục này chứa các tập tin tuỳ biến của cả hệ thống. Những
tập tin trong này điều khiển cả quá trình khởi động máy, quản lí users,
quản lí mạng .... Bên cạnh đó nó cũng chứa các đoạn mã dùng để khởi
động hay tắt các chương trình đơn lẻ.
- /home: thư mục chứa các tập tin của người dùng trong hệ thống ngoại trừ
root có home directory là /root
- /lib: Nơi chứa đựng một vài thư viện dùng chung hoặc là đường dẫn tượng
trưng đến các thư mục dùng chung đó. Những thư viện này sẽ được sử
dụng đến cho việc chạy một số các chương trình nhất định. Trong thư mục
/lib /modules chứa đựng những kernel modules, chúng được bật và tắt nếu
cần thiết.
- /lost+found: Trong thư mục này, những tệp tin bị mất sẽ được lưu trữ.
Những tệp tin được xếp vào dạng này là những tệp tin không đầy đủ hoặc
bị lỗi được tạo ra khi linux không được tắt một cách hoàn thiện.
- /mnt: sử dụng để mount (gắn) các hệ thống tệp tin phụ như CD-Rom, phân
vùng của windows dưới /mnt/cdrom hay /mnt/c, ngoài /mnt thì hiện nay
thư mục thường được dùng là /media.
- /opt: Thư mục này được tạo ra cho một số chương trình riêng của người sử
dụng
- /proc:Thông tin về các tiến trình đang chạy sẽ được lưu trong /proc dưới
dạng một hệ thống file thư mục mô phỏng. Ví dụ thư mục con /proc/{pid}
chứa các thông tin về tiến trình có ID là pid (pid ~ process ID). Ngoài ra
đây cũng là nơi lưu thông tin về về các tài nguyên đang sử dụng của
hệ thống như: /proc/version, /proc/uptime...
- /root: chứa dữ liệu của người dùng root.
- /srv: Chứa dữ liệu liên quan đến các dịch vụ máy chủ như /srv/svs, các dữ
liệu liên quan đến CVS.
- /tmp: chứa các tập tin tạm thời được tạo ra bởi người dùng và hệ thống.
Các tập tin trong thư mục này sẽ bị xóa khi khởi động lại.
- /usr (unix system resources): chứa các tập tin thực thi, thư viện, tài liệu,
mã nguồn cho các chương trình.
 /usr/bin chứa các file thực thi của người dùng như: at, awk, cc, less...
 /usr/sbin chứa các file thực thi của hệ thống dưới quyền của root
như: atd, cron, sshd…
 /usr/lib chứa các thư viện cho các chương trình trong /usr/bin và
/usr/sbin.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 19
NHÓM 6 – AT7A

 /usr/local chứa các chương tình của người dùng được cài từ mã
nguồn. Ví dụ như cài apache từ mã nguồn, nó sẽ được lưu dưới
/usr/local/apache2
- Thư mục /var: chứa các tệp tin mà có dung lượng biến đổi theo thời gian
như: tập tin ghi nhật ký hệ thống (/var/log), các gói và các tập tin cơ sở dữ
liệu (/var/lib), thư điện tử (/var/mail)…

2.3 Cách sử dụng (Các lệnh cơ bản)


Linux - CentOS là một hệ điều hành đa người dùng, đa nhiệm, được phát
triển bởi hàng nghìn người trên toàn thế giới nên hệ thống lệnh cũng ngày càng
phong phú.

Tuy nhiên chỉcó khoảng vài chục lệnh là thông dụng nhất đối với người
dùng. Ở đây sẽ giới thiệu vài chục lệnh đó. Chúng ta đừng e ngại về sốlượng lệnh
được giới thiệu chỉ chiếm một phần nhỏtrong tập hợp lệnh bởi vì đây là những
lệnh thông dụng nhất và chúng cung cấp một phạm vi ứng dụng rộng lớn, đủ thỏa
mãn yêu cầu của chúng ta.

Cũng như đã nói ở trên, người dùng làm việc với máy tính thông qua việc
sửdụng trạm cuối: người dùng đưa yêu cầu của mình bằng cách gõ "lệnh" từbàn
phím và giao cho hệ điều hành xửlý.

Khi cài đặt Linux lên máy tính cá nhân thì máy tính cá nhân vừa đóng vai
trò trạm cuối, vừa đóng vai trò máy tính xử lý.

Dạng tổng quát của lệnh Linux có thể được viết nhưsau:

# <Tên lệnh> [<các tham số>]

Trong đó:

 Tên lệnh là một dãy ký tự, không có dấu cách, biểu thịcho một lệnh
của Linux hay một chương trình. Người dùng cần hệ điều hành đáp
ứng yêu cầu gì của mình thì phải chọn đúng tên lệnh. Tên lệnh là bắt
buộc phải có khi gõ lệnh.
 Các tham sốcó thểcó hoặc không có, được viết theo quy định của
lệnh mà chúng ta sửdụng, nhằm cung cấp thông tin vềcác đối tượng
mà lệnh tác động tới. Ý nghĩa của các dấu [, <, >, ] được giải thích
ởphần quy tắc viết lệnh.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 20
NHÓM 6 – AT7A

Các tham số được phân ra thành hai loại: tham sốkhóa (tùy chọn) và tham
sốvịtrí (tên file, thư mục). Khi gõ lệnh, tham sốvịtrí được thay bằng những đối
tượng mà người dùng cần hướng tác động tới. Tham sốkhóa chính là những tham
số điều khiển hoạt động của lệnh theo các trường hợp riêng. Trong Linux, tham
sốkhóa thường bắt đầu bởi dấu trừ"-" hoặc hai dấu trừliên tiếp "--". Khi gõ lệnh,
cũng giống nhưtên lệnh, tham sốkhóa phải được viết chính xác nhưtrình bày trong
mô tảlệnh. Một lệnh có thểcó một sốhoặc rất nhiều tham sốkhóa. Phụthuộc vào
yêu cầu cụthểcủa mình, người dùng có thểchọn một hoặc một sốcác tham sốkhóa
khi gõ lệnh. Trong mô tảlệnh, thường xuất hiện thuật ngữtùy-chọn. Tùy chọn lệnh
(thực chất là tham sốkhóa) cho phép điều chỉnh hoạt động của lệnh trong Linux,
làm cho lệnh có tính phổdụng cao. Tuỳchọn lệnh cho phép lệnh có thểđáp ứng ý
muốn của người dùng đối với hầu hết (tuy không phải lúc nào cũng vậy) các tình
huống đặt ra cho thao tác ứng với lệnh.

Ví dụ sử dụng lệnh sau để xem thông tin về các file

# ls -l

Trong đó:

lslà tên lệnh thực hiện việc đưa danh sách các tên file/
thưmục con trong một thưmục

-llà tham sốkhóa, cho biết yêu cầu xem đầy đủthông tin
vềcác đối tượng hiện ra.

Lưu ý:

Linux (và UNIX nói chung) được xây dựng trên ngôn ngữ lập trình C, vì
vậy khi gõ lệnh phải phân biệt chữ thường với chữ hoa. Ngoại trừ một số ngoại
lệ, trong Linux chúng ta thấy phổ biến là:

 Các tên lệnh là chữ thường,


 Một số tham số có thể là chữ thường hoặc chữ hoa (ví dụ, trong lệnh
date vềthời gian hệ thống thì hai tham số -r và –R có ý nghĩa hoàn
toàn khác nhau). Tên các biến môi trường cũng thường dùng chữ
hoa.

Hệ điều hành phân biệt người dùng root (siêu người dùng) và người dùng
thông thường nên một số lệnh chỉ được thực hiện dưới quyền root như lệnh
passwd (dùng để thay đổi mật khẩu người dùng).
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 21
NHÓM 6 – AT7A

Một dòng lệnh có thể có nhiều hơn một lệnh, trong đó lệnh sau được ngăn
cách bởi với lệnh đi ngay trước bằng dấu ";" hoặc dấu "|".

2.3.1 Các quy ước khi viết lệnh


Tên lệnh là bắt buộc, phải là từ đầu tiên trong bất kỳ lệnh nào, phải được
gõ đúng như khi mô tả lệnh.

Tên khái niệm được nằm trong cặp dấu ngoặc quan hệ (< và >) biểu thịcho
một lớp đối tượng và là tham sốbắt buộc phải có. Khi gõ lệnh thì tên khái niệm
(có thể được coi là "tham sốhình thức") phải được thay thếbằng một từ (thường là
tên file, tên thưmục... và có thể được coi là "tham sốthực sự") để chỉ đối tượng
liên quan đến thao tác của lệnh.

Ví dụ: cú pháp của lệnh morexem nội dung file là

# more <file>

Từ morelà tên lệnh, còn <file> là tham sốtrong đó filelà tên khái niệm và
là tham sốbắt buộc phải có. Lệnh này có tác động là hiện lên màn hình theo cách
thức cuộn nội dung của file với tên đã chỉtrong lệnh. Chẳng hạn để xem thông tin
của file taileu.txt thì ta gõ # more tailieu.txt

Các bộphận nằm giữa cặp dấu ngoặc vuông [] là có thể gõ hoặc không gõ
cũng được. Mỗi tùy chọn cho một cách thức hoạt động khác nhau của hệ thống.

Ví dụ các lệnh halt sau đây đều hợp lệ:

# halt

# halt –w

# halt –n

Dấu ba chấm ... thể hiện việc lặp lại thành phần cú pháp đi ngay trước dấu
này, việc lặp lại đó có thể từ không đến nhiều lần (không kể chính thành phần cú
pháp đó). Cách thức này thường được dùng với các tham số như tên file.

Ví dụ, mô tả lệnh chown như sau:

chown [tùy-chọn]<chủ>[,[nhóm]]<file>...

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 22
NHÓM 6 – AT7A

Nhưvậy trong lệnh chown có thểkhông có hoặc có một số tùy chọn lệnh và
có từ một đến nhiều tên file.

Các bộ phận trong mô tảlệnh, nếu không nằm trong các cặp dấu () [] {}
thì khi gõ lệnh thực sự phải gõ y đúng như khi mô tả (chú ý, quy tắc viết tên lệnh
là một trường hợp riêng của quy tắc này).

Việc kết hợp các dấu ngoặc với nhau cho phép tạo ra cách thức sử dụng
quy tắc tổ hợp các tham số trong lệnh. Ví dụ, lệnh more bình thường có cú pháp

# more <file>

có nghĩa là thay <file> bằng tên file cần xem nội dung, nếu kết hợp thêm dấu
ngoặc vuông, tức là có dạng sau (chính là dạng tổng quát của lệnh more):

# more [<file>]

thì <file> nói chung phải có trong lệnh more, tuy nhiên trong một sốtrường hợp
có thểbỏqua tham sốfile.

2.3.2 Làm đơn giản thao tác gõ lệnh


Việc sử dụng bàn phím để nhập lệnh tuy không phải là một công việc nặng
nề, song Linux – CentOS còn cho phép người dùng sử dụng một số cách thức để
thuận tiện hơn khi gõ lệnh đó là:

 Sử dụng việc khôi phục dòng lệnh,


 Sử dụng các phím đặc biệt,
 Sử dụng các kí hiệu thay thếvà phím Tab,
 Sử dụng thay thế alias,
 Sử dụng chương trình lệnh

2.3.2.1 Sử dụng việc khôi phục dòng lệnh

Linux cung cấp một cách thức đặc biệt là khảnăng khôi phục lệnh. Tại dấu
nhắc shell: Người dùng sửdụng các phím mũi tên lên/xuống (↑/↓) trên bàn phím
đểnhận lại các dòng lệnh đã được đưa vào trước đây tại dấu nhắc shell, chọn một
trong các dòng lệnh đó và biên tập lại nội dung dòng lệnh theo đúng yêu cầu mới
của mình.

2.3.2.2 Sử dụng các phím đặc biệt

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 23
NHÓM 6 – AT7A

Khi người dùng gõ lệnh có thể xảy ra một số tình huống như sau:

 Dòng lệnh đang gõ có chỗ sai sót, không đúng theo yêu cầu của
người dùng vì vậy cần phải sửa lại đôi chút nội dung trên dòng lệnh
đó. Trong trường hợp đó cần sử dụng các phím đặc biệt (còn gọi là
phím viết tắt hay phím tắt) để di chuyển, xoá bỏ, bổ sung vào nội
dung dòng lệnh.
 Sau khi sử dụng cách thức khôi phục dòng lệnh, chúng ta nhận được
dòng lệnh tương tự với lệnh cần gõ và sau đó sử dụng các phím tắt
để hoàn thiện lệnh.

Dưới đây giới thiệu các phím tắt và ý nghĩa của việc sửdụng chúng:

 Nhấn phím → để di chuyển con trỏ sang bên phải một vị trí
 Nhấn phím ← để di chuyển con trỏ sang bên trái một vị trí
 Nhấn phím <ESC-BACKSPACE> để xoá một từ bên trái con trỏ
 Nhấn phím <ESC-D> để xoá một từ bên phải con trỏ
 Nhấn phím <ESC-F> để di chuyển con trỏ sang bên phải một từ
 Nhấn phím <ESC-B> để di chuyển con trỏ sang bên trái một từ
 Nhấn phím <CTRL-A> để di chuyển con trỏ về đầu dòng lệnh
 Nhấn phím <CTRL-E> để di chuyển con trỏ vềcuối dòng
 Nhấn phím <CTRL-U> để xóa dòng lệnh
 Có thểdùng phím <ALT> thay cho phím <ESC>.

2.3.2.3 Sử dụng các kí hiệu thay thế và phím Tab

Khi gõ lệnh thực sự nhiều trường hợp người dùng mong muốn một tham
số trong lệnh không chỉ xác định một file mà lại liên quan đến một nhóm các file
mà tên gọi của các file trong nhóm có chung một tính chất nào đó. Trong những
trường hợp như vậy, người dùng cần sử dụng các kí hiệu mô tả nhóm file
(wildcards), chúng ta gọi là kí hiệu mô tả nhóm (còn được gọi là kí hiệu thay thế).
Người ta sửdụng các kí tự*, ? và cặp hai dấu [] để mô tả nhóm file. Các kí tự này
mang ý nghĩa nhưsau khi viết vào tham số tên file thực sự:

 "*": là ký tựmô tảnhóm gồm mọi xâu kí tự(thay thếmọi xâu). Mô


tảnày cho một nhóm lớn nhất trong ba mô tả.
Ví dụ: viết s* để chỉ các tên có ký tự đầu là s
 "?": mô tảnhóm gồm mọi xâu với độdài không quá 1 (thay thếmột kí
tự). Nhóm này là tập con của nhóm đầu tiên (theo kí tự"*").
 [xâu-kí-tự]: mô tảnhóm gồm mọi xâu có độdài 1 là mỗi kí tựthuộc
xâu nói trên. Mô tảnày cho một nhóm có lực lượng bé nhất trong ba
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 24
NHÓM 6 – AT7A

mô tả. Nhóm này là tập con của nhóm thứhai (theo kí tự"?"). Khi gõ
lệnh phải gõ cảhai dấu [và ]. Một dạng khác của mô tảnhóm này là
[<kí_tự_1>-<kí_tự_2>]nghĩa là giữa cặp dấu ngoặc có ba kí tựtrong
đó kí tự ởgiữa là dấu nối (dấu -) thì cách viết này tương đương với
việc liệt kê mọi kí tựtừ<kí_tự_1> đến <kí_tự_2>. Chẳng hạn, cách
viết [a-d]tương đương với cách viết [abcd].
Ví dụ: gõ [si]* để liệt kê tất cả các tên bắt đầu bằng ký tự “s”
hoặc ký tự “i”
 Khi sử dụng phím Tab có thể hoàn thành nốt tên file, tên thư mục
trong lệnh. Khi sử dụng một hoặc một vài ký tự mà chưa đủ thì ta có
thể nhập thêm ký tự tiếp theo và ấn Tab. Nếu ấn Tab hai lần thì có
thể show ra các tập tin, câu lệnh bắt đầu bằng các ký tự trước khi ấn
Tab.
2.3.2.4 Sử dụng thay thế Alias

Alias được sử dụng để thay thế một lệnh bằng một cái tên khác nhằm tạo
một thói quen cho người dùng. Ví dụ như với hệ thống máy chủ việc xóa file phải
vô cùng thận trọng. Chẳng hạn khi người dùng vô tình gõ lệnh # rm -R -f * sẽ
khiến dữ liệu trong toàn bộ thư mục bị xóa. Thay vì đó ta có thể sử dụng # alias
rm='rm -i'khi đó mỗi lần sử dụng lệnh rmhệ thống sẽ hỏi là có chắc chắn muốn
xóa hay không.

Khi không muốn sử dụng Alias nữa thì ta có thể Unalias.

Cú pháp:

 Alias: # alias [-p] [name[=value] ...]


 Unalias: # unalias [-a] [name ... ]

2.3.3 Trang man


Chúng ta có thể nói rằng Linux là một hệ điều hành rất phức tạp với hàng
nghìn lệnh và mỗi lệnh lại có thể có tới vài hoặc vài chục tình huống sử dụng do
chúng cho phép có nhiều tùy chọn lệnh. Để thuộc hết được nội dung tất cả các
lệnh của Linux là một điều hết sức khó khăn, có thể nói là không thể. Linux cho
phép người dùng sử dụng cách thức gọi trang

Man để có được các thông tin đầy đủ giới thiệu nội dung các lệnh. Dưới
đây là một số nội dung vềcách thức sử dụng trang Man.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 25
NHÓM 6 – AT7A

"Man" là từ viết tắt của "manual", được coi là tài liệu trực tuyến trong
Linux - CentOS đã lưu trữ toàn bộ các lệnh có sẵn với các thông tin tham khảo
khá đầy đủ cho phép người dùng có thể mở ra để nhận được trợ giúp.

Để mở trang Man của một lệnh, chúng ta sử dụng lệnh man của Linux và
gõ:

# man <tên-lệnh>

Nội dung của trang Man tuy không phải là quá khó hiểu, song để hiểu hết
được nó cũng đòi hỏi không ít thời gian. Tuy vậy, nếu quên nội dung một lệnh
nào đó thì cách tốt nhất là hãy sử dụng trang Man.

Cấu trúc chung của một trang Man như sau:

 NAME: tên lệnh - khái quát tác dụng của lệnh


 SYNOPSIS: cú pháp của lệnh
 DESCRIPTION: mô tả cụ thể hơn về tác dụng của lệnh
 OPTIONS: liệt kê các tùy chọn lệnh và tác dụng của chúng
 FILES: liệt kê các file mà lệnh sử dụng hoặc tham chiếu đến
 SEE ALSO: liệt kê các lệnh, các tài liệu, ...có liên quan đến lệnh
 REPORTING BUGS: địa chỉ liên hệ nếu gặp lỗi khi sử dụng lệnh
 AUTHOR: tên tác giả của lệnh.

Khi không nhớ một cách chính xác nội dung câu lệnh người dùng có thể
sử dụng phím Tab như đã nói ở trên để sử dụng trang Man.

2.3.4 Một số lệnh cơ bản trong CentOS


2.3.4.1 Lệnh liên quan đến hệ thống
- exit: thoát khỏi terminal.
- Shutdown: tắt hệ thống
# shutdown [tùy-chọn] <time> [cảnh-báo]
Lệnh này cho phép dừng tất cảcác dịch vụ đang chạy trên hệthống.
Chỉ có root mới thực hiện được lệnh này.
Các tùy chọn của lệnh này nhưsau:
-k: không thực sựshutdown mà chỉcảnh báo. ƒ
ƒ -r : khởi động lại ngay sau khi shutdown.
ƒ -h: tắt máy thực sựsau khi shutdown.
ƒ -f : khởi động lại nhanh và bỏqua việc kiểm tra đĩa.
ƒ -F: khởi động lại và thực hiện việc kiểm tra đĩa.
ƒ -c: bỏqua không chạy lệnh shutdown.
ƒ -t số-giây

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 26
NHÓM 6 – AT7A

time: đặt thời điểm shutdown.


cảnh-báo: thông báo tắt máy gửi đến tất cảngười dùng.
- Halt: tắt hẳn máy, thực hiện bởi root
# halt [tùy-chọn]
Các tuỳchọn của lệnh halt:
-w: không thực sựtắt máy nhưng vẫn ghi các thông tin lên file
/var/log/wtmp (đây là file lưu trữdanh sách các người dùng đăng nhập
thành công vào hệthống).
-d: không ghi thông tin lên file /var/log/wtmp. Tùy chọn -n có ý
nghĩa tương tựsong không tiến hành việc đồng bộhóa.

-f: thực hiện tắt máy ngay mà không thực hiện lần lượt việc dừng
các dịch vụcó trên hệthống.

-i: chỉthực hiện dừng tất cảcác dịch vụmạng trước khi tắt máy.

- reboot: khởi động lại hệ thống, chỉ được thực hiện dưới quyền root
# reboot [tùy-chọn]
Các tùy chọn của lệnh rebootnhưsau là -w, -d, -n, -f, -i có ý nghĩa
tương tự như trong lệnh halt.

2.3.4.2 Các lệnh quản trị hệ thống


- sudo command: thực hiện command dưới quyền root
- sudo –k: chấm dứt chế độ dùng lệnh có chức năng của người siêu dùng
- uname –r: phiên bản nhân Linux
- lspci: liệt kê các thiết bị usb, pci có măt trong máy tính
- time command: cho biết thời gian để thực hiện xong lệnh command
- command1 | command2: đường ống lệnh, thực hiện xong command1 sẽ
thực hiện command2
- clear: xóa màn hình terminal.

2.3.4.3 Mạng máy tính


- uname –a: hiển thị hostname của máy tính trong mạng
- ping ip: ping đến một địa chỉ ip nào đó
- ifconfig –a: hiển thị thông tin về tất cả các card mạng
- ifconfig eth0 diachiIP: đặt ip cho card mạng eth0, thay eth0 bằng card
mạng khác để đặt IP cho card mạng ấy
- ifconfig eth0 down: ngưng hoạt động card mạng eth0
- /etc/init.d/network restart: khởi động lại card mạng

2.3.4.4 Các lệnh liên quan đến tập tin

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 27
NHÓM 6 – AT7A

Di chuyển, liệt kê các tập tin:

- pwd: xem thư mục hiện hành


- cd: chuyển đến một thư mục khác
- ls: liệt kê các tập tin. Có các tham số -l, -a, -d, -t, -S

Quyền truy cập các tập tin:

- chown ten_nguoi_dungfile: xác dịnh chủ của file là người dùng nào.
- chgrp nhom file: chuyển tập tin file thành sở hữu của nhóm người dùng
mang tên nhom
- chmod quyen file: phân quyền truy cập file

Xem nội dung các tập tin:

- cat file: xem nội dung của tập tin file trên màn hình ở dạng mã ASCII
- more file: xem nội dung của tập tin file theo chế độ từng trang một
- head –n file: xem n dòng đầu tiên của file
- vi file: soạn tập tin file dùng trình soạn thảo vi
- nano file: soạn tập tin file dùng trình soạn thảo nano
- grep chuỗifile: xuất hiện các dòng chứa nội dung của chuỗi trong file

2.3.4.5 Các lệnh quản lý thư mục và tập tin


- cp: dùng để chép file hay thư mục
- mv: chuyển file hay thư mục
- rm: xóa file hoặc thư mục tùy vào tham số
- mkdir: tạo thư mục mới
- find thu_muc –name file: tìm tập tin mang tên filetrong thu_muc
- diff file1file2: so sánh file1 và file2

2.3.4.6 Các lệnh nén và giải nén


- tar xvfz file.tar.gz:giải nén file có đuôi tar.gz và tar
- tar jxvf file.tar.bz2:giải nén file có đuôi tar.bz2
- tar cvf file1 file2:tạo file nén chứa file1 và file2
- gzip file.txt:tạo tập tin nén có dạng file.txt.gz
- gunzip file.txt.gz : giải nén tập tin

2.3.4.7 Cài đặt và gỡ bỏ phần mềm

Sử dụng công cụ yumđể cài đặt tự động từ các kho chứa trên mạng

- # yum install [chuong_trinh]: cài đặt một chương trình


- # yum groupinstall [nhom_ctrinh]: cài đặt một nhóm chương trình

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 28
NHÓM 6 – AT7A

- # yum update [chuong_trinh]: update một chương trình


- # yum list: liệt kê các chương trình đã cài đặt
- # yum remove [chuong_trinh]: xóa một chương trình.

Cài đặt các file từ mã nguồn

 Giải nén file tải về


 Chuyển vào thư mục vừa giải nén
 Đọc file INSTALL để xem hướng dẫn cài đặt
# more INSTALL
 Cấu hình cài đặt : ./configure
 Make: đây là phần cốt lõi của quá trình – nơi chúng ta biên dịch mã
nguồn thành một chương trình có khả năng chạy
 Make install: copy chương trình vừa được biên dịch vào các thư
mục hệ thống như /usr/bin để có thể chạy từ bất cứ thư mục nào mà
không cần chỉ định đường dẫn đến các file

Cài đặt từ file rpm. Được phát triển đầu tiên bởi Redhat sau đó được các bản
linux sử dụng rộng rãi.

 rpm –i package.rpm: cài đặt một packet


 rpm –U package.rpm: Update một package
 rpm –e package.rpm: Gỡ bỏ một package

3. NGUYÊN LÝ HOẠT ĐỘNG


3.1 Quản lý file
3.1.1 Một số khái niệm
Có thể nói file là một đối tượng điển hình trong các hệ điều hành. Nó là một
tập hợp dữ liệu có tổ chức được hệ điều hành quản lý theo yêu cầu của người
dùng. Hệ điều hành tổ chức việc lưu trữ nội dung file trên các thiết bị nhớ lâu dài
và đảm bảo các thao tác trên file. Để làm việc được với các file, hệ điều hành
không chỉ quản lý nội dung file mà còn phải quản lý các thông tin liên quan đến
các file. Thư mục là đối tượng được dùng để chứa thông tin về các file, hay nói
cách khác là thư mục chứa các file. Các thư mục cũng được hệ điều hành quản
lý trên vật dẫn ngoài và vì vậy, theo nghĩa này, trong linux thư mục được coi là
file thư mục.

3.1.2 Thuộc tính file

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 29
NHÓM 6 – AT7A

Sau khi được tạo ra, file độc lập với tiến trình, người dùng và ngay cả hệ
thống tạo ra file. Trong thư mục chứa file, sẽ có mục ứng với file , mục này có thể
coi là một bản ghi với các trường là thuộc tính của file như:
- Tên: có thểdài tới 256 ký tự, bao gồm các chữcái, chữsố, dấu gạch nối, gạch chân,
dấu chấm. Tên thưmục/file trong Linux có thểcó nhiều hơn một dấu chấm. Nếu
trong tên file có dấu chấm "." thì xâu con của tên file từdấu chấm cuối cùng được
gọi là phần mởrộng của tên file (hoặc file).Chú ý rằng khái niệm phần mởrộng ở
đây không mang ý nghĩa nhưmột sốhệ điều hành khác (chẳng hạn nhưMS-
DOS).Chúng ta nên lưu ý rằng, không phải ký tựnào cũng có nghĩa. Nếu có hai
file chỉkhác nhau ởký tựcuối cùng, thì đối với Linux, đó là hai file có thểtrùng
tên. Bởi lẽ, Linux chỉlấy 32 hay 64 ký tự đầu tiên trong tên file mà thôi (tùy theo
phiên bản Linux), phần tên file còn lại dành cho chủcủa file, Linux theo dõi thông
tin, nhưng thường không xem các ký tự đứng sau ký tựthứ33 hay 65 là quan
trọng đối với nó. Trong linux có phân biệt chữ hoa với chữ thường.Nếu trong tên
thưmục/file có chứa khoảng trống, sẽphải đặt tên thưmục/file vào trong cặp dấu
nháy kép đểsửdụng thưmục/file đó. Ví dụ, đểtạo thưmục có tên là “My
document” chẳng hạn, hãy đánh dòng lệnh sau:
# mkdir "My document"
Một sốký tựsau không được sửdụng trong tên thưmục/file: !, *, $, &, # ...
Khi sửdụng chương trình mc (Midnight Commander), việc hiển thịtên file
sẽbổ sung một kí tựtheo nghĩa: dấu "*" cho file khảthi trong Linux, dấu "~" cho
file sao lưu, dấu "." cho file ẩn, dấu "@" cho file liên kết..
- Kiểu file : thông tin cho biết kiểu của file trong linux gồm :
+File người dùng (user data file): là các file tạo ra do hoạt động của người
dùng khi kích hoạt các chương trình ứng dụng tương ứng. Ví dụnhưcác file
thuần văn bản, các file cơsởdữliệu hay các file bảng tính.
+ File hệthống (system data file):là các file lưu trữthông tin của hệthống
như: cấu hình cho khởi động, tài khoản của người dùng, thông tin thiết bị...
thường được cất trong các tệp dạng văn bản đểngười dùng có thểcan thiệp, sửa
đổi theo ý mình.
+ File thực hiện (executable file):là các file chứa mã lệnh hay chỉthịcho máy
tính thực hiện. File thực hiện lưu trữdưới dạng mã máy mà ta khó có thểtìm hiểu
được ý nghĩa của nó, nhưng tồn tại một sốcông cụ để"hiểu" được các file đó.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 30
NHÓM 6 – AT7A

Khi dùng trình ứng dụng mc(Midnight Commander, chương 8), file thực hiện
được bắt đầu bởi dấu (*) và thường có màu xanh lục.
+Thưmục hay còn gọi là file bao hàm (directory): là file bao hàm các file
khác và có cấu tạo hoàn toàn tương tựnhưfile thông thường khác nên có thểgọi là
file. Trong mc, file bao hàm thường có màu trắng và bắt đầu bằng dấu ngã (~)
hoặc dấu chia (/). Ví dụ: /, /home, /bin, /usr, /usr/man, /dev...
+ File thiết bị(device file):là file mô tảthiết bị, dùng nhưlà định danh đểchỉra
thiết bịcần thao tác. Theo quy ước, file thiết bị được lưu trữtrong thưmục /dev.
Các file thiết bịhay gặp trong thưmục này là tty(teletype - thiết bịtruyền thông),
ttyS(teletype serial - thiết bịtruyền thông nối tiếp), fd0, fd1, ... (floppy disk- thiết
bị ổ đĩa mềm), hda1, hda2, ... hdb1, hdb2, ... (hardisk - thiết bị ổ cứng theo
chuẩn IDE; a, b,... đánh số ổ đĩa vật lý; 1, 2, 3... đánh số ổ logic). Trong mc,
file thiết bịcó màu tím và bắt đầu bằng dấu cộng (+).
+ File liên kết (linked file):là những file chứa tham chiếu đến các file khác
trong hệthống tệp tin của Linux. Tham chiếu này cho phép người dùng tìm nhanh
tới file thay vì tới vịtrí nguyên thủy của nó. Hơn nữa, người ta có thểgắn vào đó
các thông tin phụtrợlàm cho file này có tính năng trội hơn so với tính năng
nguyên thủy của nó. Ta thấy loại file này giống nhưkhái niệm shortcuttrong MS-
Windows98.
- Vị trí(location): địa chỉ các khối dữ liệu của file trên thiết bị
- Kích thước(size): kích thước file hiện tại
- Bảo vệ(protection): thông tin về quyền truy cập, xác định người dùng nào có
quyền đoc/ghi( hoắc thực thi) file
- Thời gian, đinh danh người dùng: ghi lại: thời điểm tạo file, thời điểm sửa chữa
cuối cùng, thời điểm sử dụng cuối cùng.
3.1.3 Cấu trúc của hệ thống file
Trên đĩa từ, hệ thống file được coi là dãy tuần tự các khối lôgic mỗi khối
chứa hoặc 512B hoặc 1024B hoặc bội của 512B là cố định trong một hệthống
file. Trong hệthống file, các khối dữliệu được địa chỉhóa bằng cách đánh
chỉsốliên tiếp, mỗi địa chỉ được chứa trong 4 byte (32 bit).
Cấu trúc nội tại của hệthống file bao gồm 4 thành phần kếtiếp nhau: Boot
block (dùng đểkhởi động hệthống), Siêu khối (Super block), Danh sách inode và
Vùng dữliệu.
3.1.3.1 Boot block
Thường không được sử dụng và thường chứa mã để nạp hệ điều hành(boot
the computer). Nó chứa một đoạn chương trình sẽ được đọc vào máy khi khởi
động hệ điều hành. Mặc dù boot block chỉ cần thiết khi khởi động máy nhưng

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 31
NHÓM 6 – AT7A

tương tự với boot record của Dos, tất cả các hệ thống file linux đều có một boot
block(block có thể để trống).
3.1.3.2 Siêu khối
Siêu khối chứa nhiều thông tin liên quan đến trạng thái của hệthống file.
Trong siêu khối có các trường sau đây:
- Kích thước của danh sách inode : định kích cỡ vùng không gian trên
hệthống file quản lý các inode.
- Kích thước của hệthống file.
- Một danh sách chỉsốcác khối rỗi (thường trực trên siêu khối) trong hệthống
file.

-Chỉ số của khối rỗi tiếp theo trong danh sách các khối rỗi.

- Một danh sách các inode rỗi (thường trực trên siêu khối) trong hệthống
file.
- Chỉsốinode rỗi tiếp theo trong danh sách các inode rỗi.
- Các trường khóa (lock) danh sách các khối rỗi và danh sách inode rỗi:
Trong một sốtrường hợp, chẳng hạn khi hệthống đang làm việc thực sựvới đĩa từ
đểcập nhật các danh sách này, hệthống không cho phép cập nhật tới hai danh sách
nói trên.
- Cờchỉdẫn vềviệc siêu khối đã được biến đổi: Định kỳthời gian siêu khối
ởbộnhớtrong được cập nhật lại vào siêu khối ở đĩa từvà vì vậy cần có thông tin
vềviệc siêu khối ở bộnhớtrong khác với nội dung ởbộnhớngoài: nếu hai bản
không giống nhau thì cần phải biến đổi đểchúng được đồng nhất.
- Cờchỉdẫn rằng hệthống file chỉcó thể đọc (cấm ghi): Trong một sốtrường
hợp, hệthống đang cập nhật thông tin từbộnhớngoài thì chỉcho phép đọc đối với
hệthống file.

- Kích thước khối (đơn vị phân phối dữ liệu) của hệ


thống file.

Hiện tại kích thược file phổ biến của một khối là 1KB.

3.1.3.3 Inode
Tương tự bảng FAT trong MS-DOS, trình bày bên trong của một file
được cho bởi một inode, chứa đựng thông tin mô tả về lưu trữ file trên đĩa và một
số thông tin khác như: người chủ sở hữu, quyền truy cập, thời gian truy cập file.
Mỗi inode dài 64 byte và miêu tả chính xác một file. Inode là một bảng chứa các
thông tin chi tiết về một file. Mỗi file đều được gắn vào một inode qua số hiệu

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 32
NHÓM 6 – AT7A

inode. Khi file được sử dụng bởi một tiến trinhd nào đó thì inode sẽ được đọc vào
bộ nhớ và quản lý bởi kernel. Một inode bao gồm các thông tin sau:
-quyền sở hữu file: quyền sở hữu chia làm hai phần là người sở hữu và
nhóm sở hữu. quyền sở hữu cùng với quyền truy cập quyết định ai có thể truy cập
tập tin và truy cập như thế nào.
-loại file: có một số loại file sau:
+kiểu file thường: đó là các file văn bản, file nhị phân, file dữ liệu hay
các file chương trình
+thư mục con: có vai trò quan trọng trong việc biến đổi tên file thành
số hiệu inode. Mó là một file mà toàn bộ dữ liệu là chuỗi các phần tử( entry), mỗi
phần tử chứa số hiệu inode và tên file tương ứng trong thư mục.
+kiểu file đặc biệt:đây là cơ chế sử dụng để truy nhập tới các thiết bị vào
ra.
+kiểu file móc nối: là file chứa đường dẫn tới file khác. Cơ chế này cho
phép truy nhập tới một tập tin bằng nhiều tên khác nhau.
+kiểu FIFO: dùng để trao đổi dữ liệu giữa các tiến trình.
+kiểu socket: là một cơ chế tạo ra các đầu cuối cho phép tiến trình liên
hệ với nhau
-quyền truy cập file: hệ thống bảo vệ file theo 3 lớp người sử dụng là chủ sở
hữu, nhóm sở hữu và người sử dụng khác. Mỗi lớp người óc 3 quyền đọc , ghi,
thực hiện.
-thời gian: lưu trữ thời gian mà file bị thay đổi gần nhất, htowif gian file bị
truy cập, htowif gian inode bị thay đổi gần nhất
-số file liên kết: thể hiện số file có trong cây thư mục
-Bảng chứa địa chỉ khối dữ liệu của file gồm 13 phần tử với 10 phần tử trực
tiếp và 3 phần tửgián tiếp: Mỗi phần tử có độdài 4 bytes, chứa một số hiệu của
một khối nhớ trên đĩa. Mỗi phần tử trực tiếp trỏ tới 1 khối dữ liệu thực sự chứa
nội dung file. Phần tử gián tiếp bậc 1 (single indirect) trỏtới 1 khối nhớ ngoài.
Khác với phần tử trực tiếp, khối nhớ ngoài này không dùng để chứa dữ liệu của
file mà lại chứa danh sách chỉ sốcác khối nhớngoài và chính các khối nhớ ngoài
này mới thực sự chứa nội dung file. Bảng này được mã hóa phức tạp để có thể
chứa một số lượng địa chỉ thay đổi nhưng kích thước bảng lại không thay đổi.
-kích thước file: lưu trữ chính xác kích thước file.
Chú ý: inode không lưu trữ tên file, không thể xác định đường dẫn tới file
thông qua inode. Khi inode được đọc vào bộ nhớ một số trường thêm vào làm cho
inode trong bộ nhớ( in-core inode) khác với inode trên đĩa.
các inode được phân biệt nhau theo chỉ số của inode: đó chính là số thứ tự
của inode trong danh sách inode trong hệ thống file. Thông thường hệ thống dùng
2 bytes để lưu trữ chỉ số inode và không thể có nhiều hơn 65535 inode trong hệ
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 33
NHÓM 6 – AT7A

thống. Nhưvậy, một file chỉcó một inode song một file lại có một hoặc một sốtên
file.Người dùng tác động thông qua tên file và tên file lại tham chiếu đến inode.
Một inode có thểtương ứng với một hoặc nhiều tên file, mỗi tương ứng nhưvậy
được gọi là một liên kết. Inode được lưu trữtại vùng danh sách các inode.

3.1.3.4 Vùng dữ liệu

Bao gồm các khối dữliệu, mỗi khối dữliệu được đánh chỉsố đểphân biệt.
Khối trên vùng dữ liệu được dùng để chứa nội dung các file, nội dung các thư
mục và nội dung các khối định vị địa chỉ của các file. Khối dữ liêu chỉ được cấp
phát cho một và chỉ một file duy nhất trong hệ thống file.

3.1.4 Một số thuật toán làm việc với inode(khối chỉ mục)
3.1.4.1 Thuật toán truy nhập tới inode(iget)
Nhiều tình huống đòi hỏi thuật toán iget, chẳng hạn như, một quá trình
mởmột file mới hoặc tạo một file mới v.v.. Thuật toán igetcấp phát một bản in-
core inode đối với một sốhiệu inode. Tuy nhiên, trong trường hợp chưa có bản
sao in-core inode thì dểcó nội dung của nó cần phải đọc được nội dung của inode

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 34
NHÓM 6 – AT7A

đó và cần định vịkhối dữliệu chứa inode đã cho. Công thức liên quan đến khối
đĩa từchứa inode đểcó thể đọc vào bộnhớtrong như
sau:
Chỉsốkhối chứa inode = (sốhiệu inode - 1) / (sốlượng inode trong một khối
nhớ) + chỉsốkhối nhớ đầu tiên chứa danh sách inode trên đĩa.
Sau khi đã đọc khối đĩa chứa inode vào bộnhớtrong, đểxác định chính
xác vịtrí của inode, chúng ta có công thức sau:
Byte vịtrí đầu tiên = ((sốhiệu inode - 1) mod (sốlượng inode trong một khối
nhớ))*độdài một inode
Thuật toán igetnhận một inode đểcho nó tích cực và điều đó tùy thuộc vào
một sốtình huống sau đây:
-Nếu inode không tồn tại trong vùng đệm mà lại không thuộc danh sách các
inode rỗi trên super block thì hệthống phải thông báo một lỗi đã đưọc gặp. Lỗi
này xảy ra do yêu cầu một inode không còn đủvùng đệm làm việc với file nữa
(tương ứng với trường hợp trong MS-DOS thông báo: too many files opened).
-inode đã có trong vùng đệm các inode trên hệthống file (đã có in-core
inode). Trong trường hợp này xửlý theo hai bước:
+inode tương ứng đã bịkhóa bởi một quá trình khác: lúc đó phải đợi cho
đến khi quá trình trước đây không khóa inode nữa. Sau khi được tháo
khóa inode có thểtrởthành tích cực hoặc rỗi.
+Nếu inode ởdanh sách các inode rỗi thì loại bỏnó khỏi danh sách này
bằng cách đặt inode sang tích cực.

-inode không tồn tại trên vùng đệm tuy nhiên danh sách các inode rỗi

khác rỗng. Khi danh sách các inode này khác rỗng, có nghĩa là có những

inode không có giá trị: loại bỏnó và đặt inode mới vào thay thế.

3.1.4.2 Thuật toán iput loại bỏ inode

Thuật toán iputcó chức năng đối ngẫu với thuật toán iget: cần tháo

bớt sựxuất hiện của một inode, chẳng hạn khi chương trình thực hiện

thao tác đóng file.

Trong thuật toán này, khi một quá trình không làm việc với một file

được liên kết với một inode nữa thì một sốtình huống xẩy ra:

-Hệthống giảm sốlượng file tích cực đi 1.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 35
NHÓM 6 – AT7A

-Nếu sốlượng file tích cực là 0 thì:

+Nếu đó là lệnh xoá file thì trước đó hệthống đã thực hiện thao tác
giảm sốliên kết với inode đi 1 và vì vậy có thểsốlượng liên kết trởthành 0, có
nghĩa là sựtồn tại của file vật lý không còn. Khi đó, chúng ta thực hiện việc xoá
thức sựfile nói trên bằng một sốthao tác: giải phóng các khối dữliệu, đặt kiểu file
của inode là 0 và giải phóng inode.

+khi sốliên kết >0 thi cần cập nhật sựthay đổi của inode lên đĩa

từ

-Trong trường hợp sốlượng file tích cực vẫn dương thì không
thực

hiện thao tác gì.

Chú ý là trong thuật toán này có sửdụng thuật toán ifree

3.1.4.3 Thuật toán ialloc gán inode cho một file mới

Khi một file mới được xuất hiện, chẳng hạn khởi tạo file creat,

phải cung cấp một inode cho file và thuật toán ialloc đáp ứng đòi hỏi

trên.

Hoạt động của thuật toán ialloc được giải thích nhưsau:

- kiểm tra danh sách inode rỗi trên super block, xảy ra một trong

hai trường hợp hoặc danh sách rỗng hoặc không rỗng,

- Nếu danh sách không rỗng thì lấy một inode tiếp theo cho file, khởi

tạo các giá trịban đầu của inode đó và giảm sốinode rỗi trên super

trên super block.

- Nếu danh sách các inode rỗi trên super block là rỗng: tìm kiếm trên

hệthống file những inode rỗi đểtải vào danh sách các inode rỗi trên

super block. Nếu danh sách đó đầy hoặc không tìm thấy được nữa

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 36
NHÓM 6 – AT7A

thì gán một inode cho file.

Nếu danh sách inode rỗi trên super block là rỗng và không tìm

thấy inode rỗi trên đĩa thì sẽcó thông báo lỗi.

Trên danh sách các inode rỗi, nhân lưu giữmột inode được gọi là

inode nhớ, chính là inode cuối cùng được tìm thấy đểsau này thuận

lợi cho tìm kiếm.

3.1.4.4 Thuật toán ifree tải một inode rỗi trên đĩa vào danh sách các inode
rỗi trên supper block

3.1.4.5 Thuật toán namei tìm chỉ số một inode theo tên file

Thuật toán nameilà một thuật toán phổ dụng, nhiều thuật toán làm việc với
file phải sửdụng namei. Từtên một đường dẫn file/thưmục, thuật toán nameicho
inode tương ứng.

3.1.4.6 Thuật toán cấp phát dữ liệu trên đĩa

Khi nhân muốn cấp phát một khối dữliệu, nó sẽcấp phát khối rỗi tiếp theo đã
được ghi nhận trong super block. Khi một khối dữliệu đã được cấp cho một file
thì nó chỉ được cấp phát lại khi nó trởthành rỗi. Nếu không còn khối rỗng nào
trên hệthống file mà lại có nhu cầu cung cấp khối thì nhân sẽthông báo lỗi.

3.1.5 Hệ thống file


- Hệthống file MINIX: MINIX là hệthống file đầu tiên mà Linux
hỗtrợ. Hệ thống file này được sửdụng trong hệ điều hành Minix và một sốhệthống
cũ.

- hệ thống EXT3( the third extended filesystem) default là journalling


ext3 filesystem.

- hệ thống EXT4 có thể giảm bớt hiện tượng phân mảnh dữ liệu trong ổ
cứng , hỗ trợ các file và phân vùng dữ liệu có dung lượng lớn. thích hợp hoạt
động trên máy chủ

- Hệ thống file NFS: NFS (Network File System) là một hệthống file trên
mạng hỗtrợviệc truy cập dữliệu từxa giống nhưhệthống file CODA. Với NFS, các

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 37
NHÓM 6 – AT7A

máy chạy Linux có thểchia sẻcác phân vùng đĩa trên mạng đểsửdụng nhưlà các
phân vùng cục bộcủa chính máy mình.

- Hệthống file PROC: Đây là một hệthống file đặc biệt được Linux hỗtrợ.
Hệthống file PROC không chiếm một phân vùng nào của hệthống và cũng không
quản lý các dữliệu lưu trữtrên đĩa. PROC hiển thịnội dung của chính nhân
hệthống. Các file trong hệthống file PROC lưu trữcác thông tin vềtrạng thái hiện
hành của nhân. Thông tin vềmỗi một tiến trình đang thực hiện trong hệthống
được lưu trong một thưmục mang tên ứng với chỉsốprocess ID của tiến trình đó.
Người dùng có thểsửdụng hệthống file PROC đểlấy các thông tin vềnhân cũng
nhưsửa đổi một sốgiá trịcủa nhân thông qua sửa đổi nội dung của các file trong
hệthống file này. Tuy nhiên, việc sửa đổi trực tiếp nhưtrên tương đối nguy hiểm,
dễgây đổvỡhệthống.

3.1.6 Quản lý quyền truy cập thư mục và file


3.1.6.1 Quyền truy cập

Mỗi file và thưmục trong Linux đều có một chủsởhữu và một nhóm sởhữu,
cũng nhưmột tập hợp các quyền truy nhập. Cho phép thay đổi các quyền truy
nhập và quyền sởhữu file và thưmục nhằm cung cấp truy nhập nhiều hơn hay ít
hơn.

Thông tin vềmột file có dạng sau (được hiện ra theo lệnh hiện danh sách

file ls -l):

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 38
NHÓM 6 – AT7A

Có ba loại quyền truy nhập chính đối với thưmục/file, đó là: đọc (read - r),
ghi (write - w) và thực hiện (execute - x).

-Quyền đọc cho phép người dùng có thểxem nội dung của file

với rất nhiều chương trình khác nhau, nhưng họsẽkhông thểthay đổi, sửa
chữa hoặc xóa bất kỳthông tin nào trong đó. Tuy nhiên, họcó thể sao chép file đó
thành file của họvà sửa chữa file bản sao.

-Quyền ghi là quyền truy nhập tiếp theo. Người sửdụng với quyền ghi khi
truy nhập vào file có thểthêm thông tin vào file. Nếu có quyền ghi và quyền đọc
đối với một file, có thểsoạn thảo lại file đó - quyền đọc cho phép xem nội dung,
và quyền ghi cho phép thay đổi nội dung file. Nếu chỉcó quyền ghi, sẽthêm được
thông tin vào file, nhưng lại không thểxem được nội dung của file.

-Loại quyền truy nhập thứba là quyền thực hiện, quyền này cho phép người
dùng có thểchạy được file, nếu đó là một chương trình khảthi. Quyền thực hiện
độc lập với các quyềntruy nhập khác, vì thếhoàn toàn có thểcó một chương trình
với quyền đọc và quyền thực hiện, nhưng không có quyền ghi. Cũng có trường
hợp một chương trình chỉcó quyền thực hiện, có nghĩa là người dùng có thểchạy
ứng dụng, nhưng họkhông thểxem được cách nó làm việc hay sao chép nó.

Nhóm lệnh quản lý truy cập file là:

Cấp quyền cho file:

Dùng lệnh #chmod [quyền] [tên file,thư mục]

Vd chmod 660 test.txt thì file test.txt có các quyền -rw-rw- - - -

Thay đổi quyền sở hữu của người dùng đối vớ file thư mục

Lệnh #chown [user]:[group][path]

Vd chown user1:lop/test.txt

Thay đổi quyền sở hữu của nhóm người dùng với tập tin và thư mục

Lệnh #chgrp [group] [path]

….

3.1.6.2 Thao tác với thư mục

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 39
NHÓM 6 – AT7A

Một số thư mục đặc biêt:

* Thưmục gốc /

Đây là thưmục gốc chứa đựng tất cảcác thưmục con có trong hệthống

* Thưmục /root

Thưmục /rootcó thể được coi là "thưmục riêng" của siêu người dùng.
Thưmục này được sửdụng đểlưu trữcác file tạm thời, nhân Linux và ảnh khởi
động, các file nhịphân quan trọng (những file được sửdụng đến trước khi Linux
có thểgắn kết đến phân vùng /user), các file đăng nhập quan trọng, bộ đệm in cho
việc in ấn, hay vùng lưu tạm cho việc nhận và gửi email. Nó cũng được sửdụng
cho các vùng trống tạm thời khi thực hiện các thao tác quan trọng, ví dụnhưkhi
xây dựng (build) một gói RPM từcác file RPM nguồn.

* Thưmục /bin

Trong Linux, chương trình được coi là khảthi nếu nó có thểthực hiện được.
Khi một chương trình được biên dịch, nó sẽcó dạng là file nhịphân. Nhưvậy,
chương trình ứng dụng trong Linux là một file nhịphân khảthi.

Chính vì lẽ đó, những nhà phát triển Linux đã quyết định phải tổ chức
một thưmục "binaries" đểlưu trữcác chương trình khảthi có trên hệthống, đó
chính là thưmục /bin.

Ban đầu, thưmục /bin(binlà viết tắt của từ binary) là nơi lưu trữcác file
nhịphân khảthi. Nhưng theo thời gian, ngày càng có nhiều hơn các file khảthi có
trong Linux, do đó, có thêm các thưmục như /sbin, /usr/bin được sửdụng đểlưu
trữcác file đó.

* Thưmục /dev

Một phần không thểthiếu trong bất kỳmáy tính nào đó là các trình điều khiển
thiết bị. Không có chúng, sẽkhông thểcó được bất kỳthông tin nào trên màn hình
của (các thông tin có được do trình điều khiển thiết bịhiển thị đưa ra). Cũng
không thểnhập được thông tin (những thông tin do trình điều khiển thiết bịbàn
phím đọc và chuyển tới hệthống), và cũng không thểsửdụng đĩa mềm của (được
quản lý bởi trình điều khiển đĩa mềm).

Tất cảcác trình điều khiển thiết bị đều được lưu trữtrong thưmục /dev.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 40
NHÓM 6 – AT7A

* Thưmục/etc

Quản trịhệthống trong Linux không phải là đơn giản, chẳng hạn nhưviệc
quản lý tài khoản người dùng, vấn đềbảo mật, trình điều khiển thiết bị, cấu hình
phần cứng, v.v.. Đểgiảm bớt độphức tạp, thưmục /etc đã được thiết kế đểlưu
trữtất cảcác thông tin hay các file cấu hình hệthống.

* Thưmục /lib

Linux có một trung tâm lưu trữcác thưviện hàm và thủtục, đó là

thưmục /lib.

* Thưmục /lost+found

Một file được khôi phục sau khi có bất kỳmột vấn đềhoặc gặp một lỗi về

ghi đĩa trên hệthống đều được lưu vào thưmục này.

* Thưmục /mnt

Thưmục /mnt là nơi đểkết nối các thiết bị(ví dụ đĩa cứng, đĩa mềm...)

vào hệthống file chính nhờlệnh mount. Thông thường các thưmục con của

/mntchính là gốc của các hệthống file được kết nối: /mnt/floppy: đĩa mềm,

/mnt/hda1: vùng đầu tiên của đĩa cứng thứnhất (hda), /mnt/hdb3: vùng thứba

của đĩa cứng thứ2 (hdb) ...

* Thưmục /tmp

Thưmục /tmp được rất nhiều chương trình trong Linux sửdụng nhưmột nơi

đểlưu trữcác file tạm thời.

* Thưmục /usr

Thông thường thì thưmục /usrlà trung tâm lưu trữtất cảcác lệnh hướng

đến người dùng (user-related commands). Tuy nhiên, ngày nay thật khó xác

định trong thưmục này có những thứgì, bởi vì hầu hết các file nhịphân cần

cho Linux đều được lưu trữ ở đây, trong đó đáng chú ý là thưmục con
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 41
NHÓM 6 – AT7A

/usr/srcbao gồm các thưmục con chứa các chương trình nguồn của nhân

Linux.

* Thưmục /home

Thưmục này chứa các thưmục cá nhân của người dùng: mỗi người dùng

tương ứng với một thưmục con ở đây, tên người dùng được lấy làm tên của

thưmục con.

* Thưmục /var

Thưmục /var được sửdụng đểlưu trữcác file chứa các thông tin luôn luôn

thay đổi, bao gồm bộ đệm in, vùng lưu tạm thời cho việc nhận và gửi

thư(mail), các khóa quá trình, v.v..

* Thưmục /boot

Là thưmục chứa nhân của hệthống (Linux-*.*.), System.map(file ánh xạ

đến các driver đểnạp các hệthống file khác), ảnh (image) của hệthống file

dùng cho initrd(ramdisk), trình điều khiển cho các thiết bịRAID (một thiết

bịgồm một mảng các ổ đĩa cứng đểtăng tốc độvà độan toàn khi ghi dữ

liệu), các bản sao lưu boot recordcủa các phân vùng đĩa khác. Thưmục này

cho phép khởi động và nạp lại bất kỳtrình điều khiển nào được yêu cầu để

đọc các hệthống file khác.

* Thưmục /proc

Đây là thưmục dành cho nhân (kernel) của hệ điều hành và thực tế đây là

một hệthống file độc lập do nhân khởi tạo.

* Thưmục /misc và thưmục /opt

Cho phép lưu trữmọi đối tượng vào hai thưmục này.

* Thưmục /sbin
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 42
NHÓM 6 – AT7A

Thưmục lưu giữcác file hệthống thường tự động chạy.

Các thao tác với thư mục:

- Xác định thư mục hiện thời với lệnh pwd


Cú pháp #pwd

- Tạo thư mục với lệnh mkdir


Cú pháp #mkdir [tùy chọn] <thư mục>

Vd #mkdir /home/pas tạo thư mục pas trong thư mục home

- Xóa bỏ thư mục với lệnh rmdir


Vd #rmdir home/pas

- Đổi tên thư mục


Vd mv pas test

3.2 Quản lý thiết bị


Các thiết bị ngoại vi khi được kết nối với máy tính thì được xem như một
file chứa trong thư mục /dev. Nó có các quyền truy cập giống như file và thư
mục. mọi thiết bị trong hệ thống đều được biểu diễn bởi các file thiết bị.
3.2.1 Trình điều khiển thiết bị
3.2.1.1 Chế độ khối

Khối là đơn vị thông tin dữ liệu có kích thước cố định(512 bytes, 1KB,…)

Các thiết bị hoạt động có 4 tính chất:

+truy xuất ngẫu nhiên(radom access) vào một khối ni bất kì

+ sử dụng vùng nhớ đệm ở cấp độ nhân (kernel level)

+ thời gian truy xuất là nhỏ

+có thể tạo một hệ thống file trên thiết bị này

Các thiết bị hoạt động ở chế độ khối được xem như một dải các khối từ 0 đến N-1

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 43
NHÓM 6 – AT7A

Ví dụ như đĩa , băng từ,,,

Truy xuất thông tin từ các thiết bị gồm 2 bước:

+ Đọc:

* chuyển khối dữ liệu từ thiết bị sang bộ nhớ hệ thống (caching)

*Sao chép khối dữ liệu từ bộ nhớ hệ thống sang bộ nhớ chương trình

+ Ghi: tương tự như đọc, đôi khi kèm theo các cơ chế đồng bộ hóa

3.2.1.2 Chế độ kí tự

Gồm các tính chất sau:

+trao đổi bất kì lượng thông tin nào

+ truy xuất tuần tự

+không sử dụng bộ nhớ đệm

+không có hệ thống file trên thiết bị

Ví dụ: máy in, socket….

Truy xuất thông tin gần như truy xuất file bình thường gồm 2 chế độ

đọc:

-theo dòng(line): dữ liệu sẽ được truyền đi khi một ký tự đặc biệt được

phát ra( ví dụ lý tự xuống dòng)

-từng ký tự(raw): đọc từng ký tự một

3.2.1.3 Thiết bị mạng

Mỗi thiết bị mạng là một thực thể có thể nhận hoặc gửi gói dữ liệu. các

chương trình điều khiển thiết bị mạng sẽ ghi nhận những thiết bị mà chúng sẽ

điều khiển trong quá trình khởi tạo mạng lúc khởi động hệ thống .

3.2.2 Quản lý việc mount thiết bị

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 44
NHÓM 6 – AT7A

Lệnh mount dùng để gắn các thiết bị/ổ vào một thư mục bất kì có sắn

trên cây thư mục trước khi bạn có thể truy cập tới nó. Thư mục trống mà gắn

với thiết bị kể trên là mount point.

3.3 Quản lý bộ nhớ


3.3.1 Memory address
Các lập trình viên thường đề cập đến một địa chỉ bộ nhớ như là một cách để truy cập
các nội dung của một tế bào nhớ (memory cell). ở trong bộ vi xử lý 80x86 có ba loại
địa chỉ:

logical address

linear address(as known as virtual address)

physical address

Đơn vị quản lý bộ nhớ (the memory management unit-mmu) biến đổi một địa chỉ
logic vào một địa chỉ ảo(linear address) bằng một mạch phần cứng được gọi là
segmentation unit. Sau đó một đơn vị phần cứng thứ 2 là paging unit biến đổi linear
address thành physical address.

3.3.2 Cơ chế phân trang


Vì có quá ít bộ nhớ vật lý so với bộ nhớ ảo nên HĐH phải chú trọng
làm sao để không lãng phí bộ nhớ vật lý. Một cách dễ dàng để tiết kiệm
bộ nhớ vật lý là chỉ load những trang ảo mà hiện đang được sử dụng
bởi một chương trình đang thực thi. Ví dụ, một chương trình cơ sử dữ
liệu thực hiện một truy vấn vào cơ sở dữ liệu. trong trường hợp này
không phải toàn bộ cơ sở dữ liệu được load vào bộ nhớ mà chỉ load
những bản ghi có liên quan. Việc mà chỉ load những trang ảo vào bộ
nhớ cho chúng được truy cập dẫn đến nhu cầu về phân trang.
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 45
NHÓM 6 – AT7A

3.3.2.1 Bảng trang


Ta xét bảng trang 2 mức. mỗi bảng trang chứa số khung trang của bảng trang ở mức
tiếp theo.

-địa chỉ logic( trên máy 32 bit) được chia thành:

+địa chỉ trang 20 bits

+địa chỉ offset 12 bits

Bảng trang 2 mức được chia thành:

+10 bit địa chỉ trang cấp 1

+10 bit địa chỉ trang cấp 2

Khi đó địa chỉ logic có dạng

Trong đó p1 là chỉ số đến bảng trang ngoài , p2 là chỉ số đến trang(thực sự) ở bảng
trang ngoài.

3.3.2.2 Định vị và giải phóng trang


Có nhiều nhu cầu về trang vật lý trong hệ thống. ví dụ, khi một ảnh được load vào
trong bộ nhớ, HĐH cần định vị trang. Những trang này sẽ được làm trống ảnh khi đã
xử lý xong và không còn load nữa. một công dụng khác của trang vật lý là chứa cấu
trúc dữ liệu cụ thể về kernel như cấu trúc của chính các trang này. Có chế và cấu trúc
dữ liệu được sử dụng để định vị và giải phóng trang có ý nghĩa vô cùng lớn trong
việc quản lý một cách có hiệu quả bộ nhớ ảo.

Tất cả các trang vật lý trong hệ thống được mô tả bới cấu trúc dữ liệu mem_map,
đây là một danh sách gồm các cấu trúc dữ liệu mem_map_t** đước khởi tạo lúc khởi
động. mõi mem_map_t mô tả một trng vật lý trong hệ thống. các trường quan trọng
liên quan đến việc quản lý bộ nhớ là:

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 46
NHÓM 6 – AT7A

-count: lưu số người sử dụng của trang này. Count >1 khi trang được chia sẻ bởi
nhiều tiến trình.

- age: trường này mô tả “tuổi” của trang và được dùng để quyết định trang bị loại bỏ
hay hoán đổi.

-map_nr: đây là số khung trang vật lý mà mem_map_t này mô tả.

vector free_area được sử dụng bởi đoạn mã định vị trang để tìm và làm trống trang.

3.3.2.3 Định vị trang


Linux sử dụng thuật toán Buddy để định vị và giải phóng một cách hiệu quả các khối
trang. Đoạn mã định vị trang xác định một khối của một hay nhiều trang vật lý.
Những trang được định vị trong khối có kích thước là lũy thừa của 2. Khi có đủ số
trang trống trong hệ thống để cấp cho một yêu cầu, đoạn mã định vị sẽ tìm trong free
area một khôi có kích thước tương ứng. mỗi phần tử của free area ánh xạ đến các
khối trang trống có kích thướng tương ứng.

Thuật toán này định vị các khối trang có kích thước như yêu cầu. nó tìm theo một
chuỗi các trang trống đã được sắp xếp trong phần tử list của free area. Nếu không có
khối trang trống có kích thước như yêu cầu thì các khối có kích thước tiếp theo( gấp
đôi kích thước yêu cầu) sẽ được tìm. Tiến trình này sẽ tiếp tục cho đến khi tất cả free
area được tìm hoặc một khối trang nào đó được tìm thấy. nếu khối trang tìm thấy có
kích thước lớn hơn yêu cầu thò nó phải chia nhỏ ra cho đến khi có một khối đúng
kích thước. bởi vì mỗi khối là lũy thừa của 2 nên vịc chia nhỏ là dễ dàng. Phần trống
được đưa vào hàng đợi phần còn lại được cung cấp cho lời gọi.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 47
NHÓM 6 – AT7A

Cấu trúc free area

3.3.2.4 Giải phóng trang


Việc định vị các khối trang làm cho bộ nhớ bị phân mảnh do các
khối lớn bị chia nhỏ. Đoạn mã giải phóng trang kết hợp các trang
lại thành một khối lớn các trang trống bất cứ khi nào có thể. Khi có
một khối trống thì các khối lân cận có cùng kích thước được kiểm
tra xem có trống không. Nếu có thì chúng được kết hợp với nhau để
tạo một khối trang có kích thước gấp đôi. Đoạn mã giải phóng trang
lại tìm cách kết hợp khối mới này với một khối khác. Theo cách
này, khối các trang trống sẽ lớn dần.

3.3.3 Bộ nhớ ảo


Từ những ngày đầu, đã có một nhu cầu nhiều bộ nhớ hơn bản thân nó có trong một
hệ thống. để khắc phục hạn chế này người ta sử dụng bộ nhớ ảo. bộ nhớ ảo làm cho
hệ thống có nhiều bộ nhớ hơn là thực tế bằng cách chia sẻ nó giữa các tiến trình khi
chúng cần nó.linux hỗ trợ bộ nhớ ảo, nghĩa là nó sử dụng một phần cảu đĩa như là
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 48
NHÓM 6 – AT7A

RAM để tăng kích thước của bộ nhớ. Kernel sẽ ghi nội dung của một khối nhớ hiện
không được sử dụng lên đĩa cứng để bộ nhớ sử dụng nó cho mục đích khác. Khi cần
lại những nội dung này thì chúng sẽ được đọc trở lại vào bộ nhớ. Vieecjnayf hoàn
toàn trong suốt đối với người dùng, các chương trình trong linux chỉ thấy một khối
lượng lớn bộ nhớ có sẵn mà không quan tâm rằng những phần đó nằm trên đĩa. Phần
đĩa cứng được sử dụng như là bộ nhớ ảo được gọi là không gian hoán đổi.

Linux có thể sử dụng một file thường trong hệ thống hoặc một phân vùng riêng để
làm không gian hoán đổi.

Bộ nhớ ảo thường được cài đặt bởi phân trang theo yêu cầu( demand paging). Nó
cũng có thể được cài đặt trong cơ chế phân đoạn theo yêu cầu nhưng thuật toán thay
thế đoạn phức tạp hơn thuật toán thay thế trang.

3.3.3.1 Mô hình bộ nhớ ảo


Khi bộ xử lý thực hiện một chương trình, nó đọc một chỉ lệnh từ bộ nhớ và giải mã
chỉ lệnh đó. Trong khi giải mã chỉ lệnh, nó có thể lấy về hay lưu trữ nội dung một vị
trí trong bộ nhớ. Sau đó bộ xử lý sẽ thực hiện chỉ lệnh và di chuyển đến chỉ lệnh tiếp
theo trong chương trình. Tất cả đại chỉ trong bộ nhớ ảo là địa chỉ ảo. bộ xử lý huyển
địa chỉ ảo thành địa chỉ vật lý theo thông tin trong các bảng được hệ điều hành quản
lý. Để việc chuyển đổi dễ dàng thì bộ nhớ ảo và bộ nhớ vật lý được chia thành nhiều
khúc có kích thước thích hợp gọi là trang. Trong intel x86 dùng trang 4 kB. Mỗi
trang được cung cấp một số duy nhất là số khung trang( PFN)

Mô hình ánh xạ địa chỉ ảo đến địa chỉ vật lý

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 49
NHÓM 6 – AT7A

Trong mô hình này địa chỉ ảo gồm 2 phần: địa chỉ offset vào số khung trang ảo.
nếu kích thước trang là 4 KB thì từ bit 11 đến bit 0 là địa chỉ ảo chứa địa chỉ offset,
còn từ bit 12 trở lên là số khung trang ảo. nó lấy địa chỉ offset và số khung trang ảo
ra. Bộ vi xử lý chuyển số khung trang ảo sang số khung trang vật lý sau đó truy cập
vào vị trí tại địa chỉ offset trong trang vật lý đó. 2 tiến trình x và y có bảng trang
riêng. Khung trang ảo 0 của x được ánh xạ vào bộ nhớ cảu khung trang vật lý 4. Mỗi
mục trong bảng trang chứa thông tin sau:

-cờ hợp lệ cho biết bảng trang có hợp lệ ko

-số khung trang vật lý mà mục này mô tả

-thông tin điều khiển truy cập: mô tả trang này được sử dụng như thế nào? Có được
ghi hay ko? Nó có chứa các đoạn mã thực thi hay không?

Cugnx trong ví dụ trên ta thấy rằng, khung trang ảo 0 của x dược ánh xạ đến khung
trang vật lý số 1 còn khung trang ảo 7 lại được ánh xạ đến khung vật lý 0 => các
trang trong bộ nhớ ảo được hiển thị trong bộ nhớ vật lý không theo bất kì thứ tự nào.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 50
NHÓM 6 – AT7A

3.3.3.2 Phân trang theo yêu cầu


Linux sử dụng thuật toán least recently used: ít sử dụng thường xuyên nhất) để thay
trang.

Thuật toán này sử dụng thời điểm trang được sử dụng và thay thế trang không
được sử dụng trong khoảng thời gian dài nhất.

Mỗi trang có một tuổi trang và nó sẽ thay đổi mỗi khi nó được truy cập. thuật
toán LRU sẽ thay những trang có age nhỏ nhất.

Thuật toán này cần nhiều sự hỗ trợ từ phần cứng.

3.4 Quản lý tiến trình


3.4.1 Mô tả tiến trình
Tiến trình là một đối tượng trong hệ thống tương ứng với một phiên thực
hiện của chương trình. Tiến trình bao gồm ba thành phần text, data, stack. Text
là thành phần câu lệnh thực hiện, data là thành phần dữ liệu, stack là thành
phần thông tin tạm thời hoạt động theo cơ chế LIFO. Các câu lệnh trong text
chỉ tương tác tới vùng data và stack tương ứng của tiến trình, không truy nhập
tới vùng data và stack của tiến trình khác, ngoại trừ vùng dùng chung. Một
tiến trình được gọi là “live” nếu nó đang ở trong thời gian được thực thi, thời
gian sống của mỗi tiến trình có thể ngắn hoặc dài. Khi tiến trình bị dừng thì
tiến trình đó được coi là đã “die”.
Một tiến trình sẽ bao gồm một tập các thông số sau:
- pid: được dùng để định danh cho một tiến trình, số pid cho mỗi tiến trình
sẽ được nhân của HDH xác định.
- ppid: là pid của tiến của tiến trình cha.
- uid và gid: dùng để chỉ đến người và nhóm sở hữu, có quyền đối với tiến
trình.
- Có một đầu vào chuẩn(stdin), một đầu ra chuẩn(stdout), một kênh báo
lỗi(stderr).
- Thời gian sử dụng CPU (time slice) và mức độ ưu tiên.
- Thư mục hoạt động của tiến trình.
- Bảng tham chiếu đến các file được tiến trình sử dụng.
HDH sẽ chia tiến trình ra thành 2 mức: mức người dùng(user mode), mức
nhân của hệ thống (kernel mode). Khi một tiến trình của user thực hiện ở mức
nhân thông qua lời gọi hệ thống (system call) thì tiến trình sẽ chuyển từ mức
người dùng sang mức nhân hệ thống để thực hiện và trả lại kết quả mà user
yêu cầu. Kernel mode là một chế độ độc quyền, kernel sử dụng tất cả các lệnh
của CPU, các thanh ghi của CPU, kiểm soát bộ nhớ, liên lạc trực tiếp với các

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 51
NHÓM 6 – AT7A

thiết bị ngoại vi. Kernel sẽ tiếp nhận và xử lý các tiến trình mà user yêu cầu
và trả lại kết quả cho user. User mode được hiểu là mức thực hiện bình thường
của một tiến trình, ở mức này sẽ có nhiều áp đặt lên tiến trình. Như: tiến trình
chỉ có thể truy nhập được các lệnh và dữ liệu của nó, không truy nhập được
lệnh và dữ liệu của kernel hay của một tiến trình khác. Tiến trình được thực
hiện dưới dạng lệnh thông qua shell và được quản lý bằng một terminal. Một
tiến trình ở mức user mode khi muốn truy nhập tài nguyên cần thực hiện
thông qua lời gọi hệ thống. Một tiến trình có thể được thực hiện ở hai chế độ,
chế độ hiện (foreground) hoặc chế độ ngầm (background). Ở chế độ
foreground, tiến trình sẽ chạy và được mô tả trực tiếp trên terminal và như vậy
trong quá trình thực hiện tiến trình con thì người sử dụng không thể truy xuất
được đến tiến trình cha. Ở chế độ background, sẽ thực hiện chạy tiến trình
ngầm (không hiển thị tiến trình trên terminal), việc thực thi tiến trình cha và
con sẽ diễn ra độc lập, vì vậy khi chạy ở chế độ này có thể truy xuất được cả
tiến trình cha và con cùng lúc. Khi ở chế độ hiện user không thể thực hiện
nhiều hơn một tác vụ cùng lúc, nhưng user lại có thể thực hiện nhiều hơn một
tác vụ cùng lúc khi ở chế độ ngầm.
3.4.2 Trạng thái tiến trình
Mô hình trạng thái tiến trình:

- ready: khi một tiến trình được tạo và có đủ tài nguyên sẽ được đưa vào
trạng thái ready để chờ lập lịch và thực hiện.
- executing: trạng thái thực thi của tiến trình.
- stop: Những tiến trình đã bị buộc dừng lại. Tiến trình rơi vào trạng thái
này do nhận được signal STOP hoặc TSTP và chỉ có thể chạy lại khi

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 52
NHÓM 6 – AT7A

nhận được signal CONT hoặc khi người dùng cho nó chạy trong chế độ
background/ foreground bằng lệnh bg/fg.
- suspended: tiến trình tạm dừng và chờ một sự kiện nào đó xảy ra, khi
sự kiện đó xảy ra nó sẽ được duyệt chờ cấp phát CPU để chạy.
- zombie: tiến trình đã kết thúc nhưng nó không được xóa sạch khỏi
RAM và tiến trình cha không nhận được thông báo về việc nó kết thúc.

Ta có thể thao tác với tiến trình bằng lệnh:


- fork(): tạo tiến trình.
- exit(): kết thúc một tiến trình (có thể sử dụng lệnh kill()).
- ps(): hiển thị các tiến trình đang chạy trên hệ thống.
- nice(): thay đổi độ ưu tiên của tiến trình khi mới bắt đầu chạy.
- renice(): thay đổi độ ưu tiên của tiến trình sau khi tiến trình đã chạy.
- top(): quản lý, hiển thị các thông tin về tiến trình.

3.4.3 Lập lịch


Linux là hệ đa xử lí, tức khả năng thực thi nhiều tác vụ cùng một lúc.
Một chương trình máy tính là một chuỗi các chỉ lệnh (intructions, hay
còn gọi là lệnh máy) mà theo đó máy tính phải thực hiện. Mặt khác tài
nguyên máy tính (CPU, bộ nhớ, tệp, các thiết bị...) là hữu hạn và khi
các chương trình chạy thì các chương trình đều có nhu cầu trên các tài
nguyên đó. Để đáp ứng nhu cầu tài nguyên, cần có một sách lược chạy
trình thật hiệu quả để đảm bảo tính đa nhiệm, nhiều người dùng. Cách
phổ biến nhất là cấp tài nguyên cho mỗi chương trình trong một lượng
thời gian nhất định, sao cho các chương trình đều có cơ hội thực hiện
như nhau và trong thời gian thực hiện chương trình, cần kiểm soát việc
thực hiện đó chặt chẽ. Trong các hệ phân chia thời gian, kernel sẽ phân
phối CPU cho các tiến trình trong một khoảng thời gian nhất định (gọi
là time slice). Khi lượng thời gian này kết thúc kernel sẽ lập lịch
(schedule) chọn tiến trình khác và cấp CPU cho tiến trình đó.
Khi một tiến trình được tạo ra đều có độ ưu tiên tĩnh ban đầu ngầm
định là 0, mức ưu tiên này có thể được thay bởi một lời gọi hệ thống
nice (). Mức độ ưu tiên của một tiến trình có thể dao động từ 1 đến 99.
Chỉ có người sử dụng có quyền root mới có thể giảm giá trị biểu diễn
độ ưu tiên của tiến trình, một người dùng thống thường chỉ có thể giảm
mức độ ưu tiên của một tiến trình bằng việc tăng giá trị biểu diễn độ ưu
tiên lên. Mức ưu tiên động cho mỗi tiến trình thông thường sẽ bằng
tổng các lượng thời gian và số tick của CPU đã trôi qua cho tiến trình
trước khi lượn thời gian giành cho tiến trình kết thúc.
CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 53
NHÓM 6 – AT7A

Các thuật toán lập lịch tiến trình thường sẽ dựa vào mức độ ưu tiên để
đưa ra sơ đồ thực thi cho các tiến trình. Trong hệ thống những tiến trình
đáp ứng thời gian thực sẽ có độ ưu tiên dao động từ 0 đến 99, trong đó
nhưng tiến trình khác lại có độ ưu tiên trong khoảng 100 đến 140. Ta có
thể thấy mức độ ưu tiên của những tiến trình mang tính thời gian thực
sẽ luôn được ưu tiên hơn trong việc lập lịch để thực hiện trước.
Để giải quyết cho các tiến trình thời gian thực ta có thể sử dụng 2
phương pháp. Một là thực hiện cách lập lịch theo cơ chế FIFO (First
In-First Out), tiến trình nào có mức ưu tiên cao hơn sẽ được lập lịch
chạy trước, và chúng sẽ chiếm dụng CPU cho tới khi nào hoàn thành
xong công việc của mình mà ko quan tâm tới time slice. Hai là thực
hiện cách lập lịch Round Robin, tiến trình nào có mức ưu tiên cao hơn
sẽ được lập lịch chạy trong khoảng thời gian cố định time slice mà
HDH đã quy định về việc sử dụng CPU, hết thời gian này tiến trình sẽ
phải nhường CPU cho tiến trình khác và trở về dưới cuối hàng đợi ưu
tiên đợi xoay vòng tiếp. Ngoài ra ta có thể tự lập lịch cho hệ thống để
đáp ứng cho các yêu cầu cụ thể (đáp ứng về time, hay hiệu suất) của
mình bằng việc thay tập tin này chúng ta có thế định nghĩa lại MIN_
TIMESLICE, MAX_TIMESLICE, MAX_SLEEP_AVG…

3.4.4 Liên lạc giữa các tiến trình

- Signal: tín hiệu sẽ tương tự như các ngắt tác động đến tiến trình. Một tín
hiệu được sử dụng để thông báo cho tiến trình về một sự kiện nào đó xảy
ra. Có nhiều tín hiệu được định nghĩa, ví dụ như:

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 54
NHÓM 6 – AT7A

Mỗi tiến trình sở hữu một bảng biểu diễn tín hiệu khác nhau. Với mỗi tín
hiệu sẽ tương ứng với một trình xử lý tín hiệu. Các tín hiệu có thể được
gửi đi bởi phần cứng, nhân gửi đến một tiến trình, một tiến trình gửi đến
một tiến trình khác hay người dùng. Khi một tiến trình nhận được tín hiệu,
nó có thể xử lý tín hiệu theo các cách như: bỏ qua tín hiệu, xử lý tín hiệu
theo mặc định hay xử lý tín hiệu đó theo cách riêng của mỗi tiến trình.

- Pipe: hai tiến trình sẽ trao đổi thông qua một luồng dữ liệu dùng chung,
việc đọc và viết sẽ được sử dụng các hàm vào ra trong thư viện chuẩn của
HDH. Pipe sẽ thực hiện sao cho dữ liệu đầu ra của một tiến trình là dữ liệu
đầu vào của tiến trình khác. Nhưng việc truy xuất, dùng chung đường dữ
liệu này chỉ có thể thực hiện được khi các tiến trình có cùng huyết thống.
Cơ chế pipe được thiết lập bằng việc sử dụng ký tự “|”.
Ví dụ: ta thực hiện xem file baitap.txt và đếm số dòng có trong file.
cat baitap.txt | wc -l

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 55
NHÓM 6 – AT7A

Communication pipe
T ask A T ask B

- Message Queues: hàng thông điệp là một danh sách liên kết các thông
điệp được lưu trong kernel và được nhận dạng bởi một trường định dạng
thông điệp (message queues ID). Mỗi thông điệp có một trường kiểu
nguyên dương, có độ dài không âm và các byte dữ liệu. Kernel định nghĩa
mỗi cấu trúc cho các kiểu liên lạc (IPC) và qui chiếu tới bằng một số
nguyên định dạng không âm (gọi ID), khi một cấu trúc IPC được tạo ra thì
một khóa (key) phải được xác định (là tên người dùng tự chọn), kiểu dữ
liệu của key là một số nguyên dài (long integer). Để gửi thông điệp cho
các tiến trình, hệ thống cung cấp các system call:
+ msgget(): dùng để lấy hay tạo một mô tả thông điệp.
+ msgctl(): có tùy chọn lập các thông số hay trả về các thông số kết hợp
với việc mô tả thông điệp, có tùy chọn hủy mô tả.
+ msgsnd(): gửi một thông điệp.
+ msgrcv(): nhận một thông điệp.
Kernel sẽ thực hiện lưu các thông điệp trên một hàng liên kết cho mỗi một
mô tả và dùng msgqid làm chỉ số để vào trường đầu tiên của hàng đợi. Cấu
trúc dữ liệu cho hàng đợi:

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 56
NHÓM 6 – AT7A

+ các con trỏ trỏ vào thông điệp đầu tiên và thông điệp cuối của danh
sách.
+ số các thông điệp và tổng số byte dữ liệu trên danh sách.
+ PIDs của các tiến trình cuối cùng thực hiện gửi, nhận thông điệp.
+ tem thời gian cho biết các thao tác thông điệp cuối cùng thực hiện.
Để tạo một thông điệp mới ta thực hiện lời gọi hệ thống msgget(), kernel
sẽ tìn trường thông điệp ứng với key đi kèm xem đã có chưa. Nếu chưa có
đầu vào nào tương ứng với key đó thì kernel sẽ cấp một hàng thông điệp
mới và khởi động các cấu trúc của hàng

- Shared Memmory: các tiến trình có thể liên lạc với nhau qua một phần
trong không gian địa chỉ ảo của mình, được gọi là vùng nhớ chia sẻ
(shared memory), sau đó thực hiện đọc/ghi dữ liệu vào đó. Shmget() sẽ tạo
một miền chia sẻ mới hay trả về nếu miền chia sẻ đã tồn tại. Shmat() sẽ
gắn một miền nhớ vào không gian địa chỉ ảo của một tiến trình, shmdt() sẽ
thực hiện gỡ bỏ vùng chia sẻ. Sau khi một miền được gắn vào không gian
của tiến trình thì miền đó sẽ được xem như một phần bộ nhớ của tiến trình.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 57
NHÓM 6 – AT7A

3.5 Quản lý người dùng và tài nguyên


Linux quản lý và phân quyền cho mỗi người dùng và nhóm người dùng bằng
cách dựa vào chỉ số UserID và GroupID. Mỗi user sẽ thừa hưởng quyền và
chịu sự quản lý từ nhóm mà nó tham gia. Trong linux tài khoản có quyền cao
nhất đối với hệ thống là root, có UserID = 0 và GroupID = 0. Tài khoản root
có tất cả các quyền với hệ thống, có khả năng quản lý và tạo ra các tài khoản
có quyền tương tự root. Khi chúng ta đang thao tác trên tài khoản quyền root
thì sẽ xuất hiện dấu nhắc “#” từ hệ thống, còn nếu khi ta đang thao tác trên tài
khoản có quyền user thì sẽ xuất hiện dấu nhắc “$” từ hệ thống.

3.5.1 Thông tin về user


Một người dùng muốn đăng nhập và hệ thống yêu cầu phải có một tài
khoản để đăng nhập gồm username và password. Tài khoản này do
người dùng root tạo ra và sẽ được lưu thông tin trong tập tin
/etc/passwd. Tập tin này chỉ có thể được thay đổi bởi root và được lưu
dưới dạng text, mỗi tài khoản được mô tả trên một hàng và có 7 cột
tương ứng như sau:
Ví dụ:
zizi:x:500:500:zizi:/home/zizi:/bin/bash
Username:passwd:UID:GID:Description:home directory:shell

Với Username là tên đăng nhập của người dùng vào hệ thống. Hệ
thống còn dùng UID, một định danh cho người dùng để kiểm soát hoạt
động của người dùng với hệ thống. Các định danh 1-99 sử dụng cho tài
khoản hệ thống, còn người dùng bình thường sẽ có định danh từ 100

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 58
NHÓM 6 – AT7A

trở lên. Ngoài ra hệ thống còn sử dụng them GroupID để xác định
người dùng đang ở nhóm nào. Với group quản trị hệ thống sẽ có
GroupID=0, còn các user khác có GroupID từ 500 trở lên.
3.5.2 Quản lý người dùng
- Tạo tài khoản:
#useradd [-c mô tả user] [-d thư mục cá nhân] [-g nhóm của user] [tên
user]
- Tạo password:
#passwd <tên user>
- Khóa tài khoản người dùng:
#passwd –l <tên user>
- Mở tài khoản người dùng:
#passwd –u <tên user>
- Hủy tài khoản người dùng:
#userdel –r <tên user>
3.5.3 Quản lý nhóm
Một nhóm người dùng bao gồm nhiều người dùng có cùng một chức
năng trong hệ thống hoặc có quyền giống nhau trên hệ thống. Nhóm
người dùng được hệ thống quản lý bằng tên nhóm và GroupID. Một
nhóm có thể chỉ có một thành viên, mỗi user có thể là thành viên của
nhiều nhóm. Thông tin về nhóm sẽ được lưu trong tập tin /etc/group.
Mỗi nhóm được mô tả trên một hàng và có 4 cột.
Ví dụ:
zizi:x:500:zizi
groupname:grouppassword:GID:groupmember

- Tạo nhóm:
#groupadd <tên nhóm>
- Thêm user vào nhóm:
#usermod –g <tên nhóm> <tên user>
- Hủy nhóm:
#groupdel <tên nhóm>

4. MÃ NGUỒN
5. BẢO VỀ HỆ THỐNG
CentOS là hệ thống máy chủ được đánh giá là khá an toàn và hầu như có
rất ít virus. Tuy nhiên bất kỳ hệ thống nào là an toàn tuyệt đối nên vẫn có thể tồn
tại những lỗ hổng có thể khai thác.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 59
NHÓM 6 – AT7A

Nguyên nhân của việc này có thể là do người dùng sơ ý sử dụng tài khoản
root một cách bừa bãi, hoặc có thể do hacker xâm nhập được vào hệ thống rồi sửa
đổi những file cấu hình quan trọng mà người quản trị không hay biết, hoặc cũng
có thể do vô tình hay cố ý mà các module xấu được nạp vào kernel rồi hoạt động
như một virus.

Để chống lại những hiểm họa này có thể áp dụng một số biện pháp sau

5.1 BIOS
Luôn thiết đặt Password cho BIOS và không cho phép các thiết bị như floppy
disk hay CD-ROM boot khi hệ thống khởi động.

5.2 PASSWORD
Tăng độ khó của mật khẩu, hãy chọn một password phức tạp cho tài khoản của
mình, password bao gồm ký tự hoa, thường, số và ký tự đặc biệt như . , * – …

Ngoài ra Edit file: /etc/login.defs

PASS_MIN_LEN 8
Yêu cầu nhập password có chiều dài ngắn nhất là 8.
5.3 ACCOUNT TIME OUT
Xác định thời gian time out của account bằng cách sửa file: /etc/profile

HITSFILESIZE=on
TMOUT=7200
5.4 Xóa những user, group dư thừa ra khỏi hệ thống
Sử dụng các lệnh userdel, groupdel để xóa những account, group dư thừa ra
khỏi hệ thống để chống sự tiếp cận trái phép của những người dùng không được
phép.

5.5 Chống su lên root


Edit file /etc/pam.d/su thêm hai dòng sau:

auth sufficient /lib/security/pam_rootok.so debug


auth required /lib/security/pam_wheel.so group=wheel

Có nghĩa rằng chỉ những user thuộc group wheel (GID=10) có quyền su
lên root. Tiếp theo để thêm một tài khoản có quyền su lên root. Ví dụ: admin

# usermod -g 10 admin

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 60
NHÓM 6 – AT7A

Điều này giúp hạn chế việc lạm dụng quyền của root.

5.6 Sử dụng tường lửa


Để sử dụng tường lửa trong CentOS, ta có thể vào System => Administration
=> Security Level and Firewall

Ta có thể Disable hay Enable trong bảng này. Mặt khác có thể cho phép
các dịch vụ tin cậy chạy trên hệ thống bằng cách click chọn vào các checkbox
trong lựa chọn Trusted services. Bên cạnh đó ta cũng có thể thêm hoặc xóa các
cổng khác với các giao thức khác nhau. Để hệ thống hoạt động có hiệu quả và an
toàn nên tắt các cổng, các dịch vụ không cần thiết.

Ngoài ra, trong tab SELinux, ta cũng được chọn lựa sử dụng tính năng bảo
mật nâng cao Security Enhanced Linux (SELinux) theo các mức độ Enforcing
(bắt buộc), Permissive (được phép) và Disable(tắt).

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 61
NHÓM 6 – AT7A

Bạn cũng có thể cài đặt thêm dịch vụ IPTables trong CentOS để biến máy chủ
Linux thành một tường lửa cho hệ thống mạng. Đây là một cách làm khá hiệu quả, vì
IPtables có thể tích hợp tốt hơn phần nhân của hệ điều hành Linux CentOS, có khả năng
phân tích gói tin hiệu quả, lọc gói tin dựa vào địa chỉ MAC và một số cờ hiệu trong TCP
Header.Dịch vụ này cũng cung cấp các tuỳ chọn để ghi nhận sự kiện hệ thống (Event
Log) và khả năng ngăn chặn được cơ chế tấn công theo kiểu DOS.

Để cấu hình cho IPTables chạy mỗi khi hệ thống khởi động ta dùng lệnh

# chkconfig iptables on

Để khởi động IPTables ta dùng lệnd

#service iptables start

Để tắt IPTables ta dùng lệnd

#service iptables stop

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 62
NHÓM 6 – AT7A

Có 2 cách cấu hình iptables là dùng lệnh và sửa file /etc/sysconfig/iptables. Nếu
cấu hình iptables bằng cách dùng lệnh, cấu hình sẽ không được lưu lại sau khi ta khởi
động lại dịch vụ iptables.

# nano /etc/sysconfig/iptables

Trong iptables có tất cả 4 kiểu sự kiện như sau:

- INPUT:Các gói tin gửi đến hệ thống từ bên ngoài.Sử dụng sự kiện này để
chặn các cổng (port) gửi đến như 80,25,110 hoặc các ip nguồn, subnet (chẳng
hạn như 202.54.1.20/29).
- OUTPUT:Chỉ các gói tin được tạo ra từ hệ thống.
- FORWARD: Các gói tin được gửi thông qua thiết bị khác.Thường dùng trong
trường hợp cài đặt máy chủ Linux như một router.Ví dụ, eth0 kết nối với
modem ADSL / Cable và eth1 kết nối với mạng LAN. Sử dụng FORWARD
để gửi và nhận các gói tin truy cập từ mạng LAN với Internet.
- RH-Firewall-1-INPUT:Tùy chỉnh các sự kiện, nó sẽ gọi đến 3 kiểu sự kiện
trên là INPUT,OUTPUT và FORWARD.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 63
NHÓM 6 – AT7A

Quy trình xử lý gói tin:

- Bắt đầu từ rules đầu tiên


- Chạy đến khi gói tin phù hợp với một điều kiện trong các config đã cấu
hình.
- Nếu có sự phù hợp trong các rules, gói tin sẽ được xử lý
bằng REJECT, ACCEPT, DROP.

Các cách xử lý gói tin:

- ACCEPT cho phép gói tin đi qua.


- REJECT loại bỏ và gửi thông báo lỗi đến địa chỉ nguồn gửi gói tin.
- DROP xóa gói tin mà không thông báo đến địa chỉ nguồn gửi gói tin.

Với mỗi chỉnh sửa trong file config trên sẽ có những tác dụng khác nhau. Ví dụ
để bỏ các gói tin gửi đến cổng 23 dùng giao thức TCP trên card mạng eth0, ta thêm
dòng sau:

iptables -A INPUT -i eth0 -p tcp --dport 23 -j DROP

Để bảo vệ hệ thống an toàn nhất yêu cầu người quản trị phải có kinh nghiệm
trong việc quản lý, cấu hình và thuần thục trong việc sử dụng rất nhiều biện pháp bảo
mật. Bên trên chỉ chỉ trình bày một số biện pháp bảo mật khá phổ biến và khá đơn giản
khi sử dụng.

CẤU TRÚC, SỬ DỤNG, NGUYÊN LÝ, PHẦN TÍCH MÃ NGUỒN CENTOS 64

You might also like