Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Trang 1Linux operating system - Nguyen Tri Thanh
Hệ ñiều hành UNIX-Linux
Chương 3 Hệ thống File
Trang 2Linux operating system - Nguyen Tri Thanh
Khái niệm cơ bản
Một ñối tượng ñiển hình trong các hệ ñiều hành ñó là file
File là một tập hợp dữ liệu có tổ chức ñược hệ ñiều hành quản
lý
Cách tổ chức dữ liệu trong file thuộc về người ñã tạo ra file
File có thể là:
một văn bản (trường hợp ñặc biệt là chương trình nguồn
trên C, PASCAL, shell script )
một chương trình ngôn ngữ máy,
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 lên file
Trang 3Linux operating system - Nguyen Tri Thanh
Khái niệm cơ bản
Hệ ñiều hành ñảm bảo các chức năng liên quan ñến file nên
người dùng không cần biết file của mình lưu ở vùng nào trên
ñĩa từ, bằng từ cách nào ñọc/ghi lên các vùng của ñĩa từ mà
vẫn thực hiện ñược yêu cầu tìm kiếm, xử lý lên các file
Hệ ñiều hành quản lý file theo tên gọi của file (tên file) và
một số thuộc tính liên quan ñến 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 (directory) là ñối tượng ñược dùng ñể chứa
thông tin về 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 thư mục cũng ñược coi là file
Trang 4Linux operating system - Nguyen Tri Thanh
File trong Linux - UNIX
Tên file trong Linux có thể dài > 256 ký tự
Nên chỉ 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: This_is.a.VERY_long.filename
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
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)
Phân biệt chữ hoa và chữ thường ñối với tên thư mục/file
Nếu trong tên thư mục/file có chứa khoảng trống, ñặt tên vào
trong cặp dấu nháy kép: # mkdir “My document”
Một số ký tự không ñược sử dụng trong tên thư mục/file: !, *,
$, &, #
Trang 5Linux operating system - Nguyen Tri Thanh
Cách tổ chức file
Trên ñĩa hệ thống file 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
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 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
Trang 6Linux operating system - Nguyen Tri Thanh
Siêu khối
Chứa thông tin liên quan ñến trạng thái của hệ thống file
Kích thước của danh sách inode
Kích thước của hệ thống file.
Danh sách chỉ số các khối rỗi
Chỉ số các khối rỗi thường trực trên siêu khối
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
Danh sách này chứa chỉ số các inode rỗi ñược dùng ñể phân phối
ngay ñược cho một file mới ñược khởi tạo
Cờ chỉ dẫn rằng hệ thống file chỉ có thể ñọc (cấm ghi)
Số lượng tổng cộng các khối rỗi trong hệ thống file
Số lượng tổng cộng các inode rỗi trong hệ thống file
Thông tin về thiết bị
Kích thước khối của hệ thống file
Trang 7Linux operating system - Nguyen Tri Thanh
Cấu trúc thư mục
Trang 8Linux operating system - Nguyen Tri ThanhKiến trúc hệ thống file
Trang 9Linux operating system - Nguyen Tri Thanh
Hình ảnh các khối bộ nhớ
Trang 10Linux operating system - Nguyen Tri Thanh
Thông tin một file entry
Inode No File name File name length Entry length
Cấu trúc thư mục
Nội dung của một thư mục là một danh sách các file entry
Mỗi một file entry gồm
Số hiệu inode quản lý file này
Tên file
ðộ dài của tên file
ðộ dài của entry
Trang 11Linux operating system - Nguyen Tri ThanhTrạng thái của thư mục
Cấu trúc thư mục
Khi một file bị xóa thì trường entry length của file ñứng trước sẽ ñược
tăng ñộ dài
Khi chèn thêm một file entry, nó sẽ tính toán ñộ dài của entry ñể quyết
ñịnh là chèn vào một entry bị xóa nào ñó hay cuối danh sách
Trang 12Linux operating system - Nguyen Tri Thanh
Inode
Khi tạo một file mới, hệ thống sẽ cấp một inode chưa sử dụng
inode cho ta biết các khối dữ liệu của file và các thông tin về file
Tổ hợp gồm inode + tập các khối dữ liệu = file vật lý
Các inode có chỉ số: số thứ tự của inode trong danh sách inode
Hệ thống dùng 2 bytes ñể lưu trữ chỉ số của inode
Một file chỉ có một inode + 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
Linux dùng một vùng bộ nhớ chứa danh sách các inode: in-core
inode
Trang 13Linux operating system - Nguyen Tri Thanh
Cấu trúc Inode
Kiểu file (file thông thường, thư mục, ñặc tả kí tự, ñặc tả khối,
ống dẫn)
Kiểu file có giá trị 0 tương ứng ñó là inode chưa ñược sử dụng
Quyền truy nhập file: có 3 mức quyền truy nhập
chủ của file
nhóm người dùng của chủ nhân của file
người dùng khác
Quyền truy nhập là ñọc (r), ghi (w), thực hiện (x) hoặc một tổ
hợp nào ñó từ nhóm gồm 3 quyền trên
Quyền thực hiện ñối với một thư mục tương ứng với việc cho
phép tìm một tên file có trong thư mục ñó
Trang 14Linux operating system - Nguyen Tri Thanh
Cấu trúc Inode (tiếp)
Số lượng liên kết ñối với inode (số lượng các tên file)
ðịnh danh chủ nhân của inode
ðịnh danh nhóm chủ nhân
ðộ dài của file tính theo byte
Thời gian truy nhập file
thời gian file ñược sửa ñổi muộn nhất
thời gian file ñược truy nhập muộn nhất
thời gian file ñược khởi tạo
Trang 15Linux operating system - Nguyen Tri ThanhCác con trỏ dữ liệu
Trang 16Linux operating system - Nguyen Tri Thanh
Nội dung của một Inode
Trang 17Linux operating system - Nguyen Tri ThanhTruy cập ñến một file
Trang 18Linux operating system - Nguyen Tri Thanh
Trang 19Linux operating system - Nguyen Tri Thanh
Thuật toán truy nhập tới inode (iget)
Tình huống ñòi hỏi thuật toán iget: mở / tạo một file mới …
iget cấp phát một bản in-core inode ñối với một số hiệu inode
Nếu chưa có bản sao in-core inode thì ñể có nội dung của nó cầnphải ñọc ñược nội dung của inode
Nếu mỗi inode ñĩa chiếm 64 bytes, mỗi khối ñĩa chứa 8 inode ñĩathì inode số 8 sẽ bắt ñầu từ byte thứ 448 trên khối ñĩa ñầu tiên
trong vùng danh sách các inode
Trang 20Linux operating system - Nguyen Tri Thanh
Thuật toán iget
Vào: hệ thống file, số hiệu inode
Ra: inode ñược khóa hoặc mã lỗi
while (not done){
if (inode trong vùng ñệm các inode){ /*có quá trình ñang làm việc với inode*/
if (inode ñã bị khóa) {
sleep (cho ñến khi inode ñược mở khóa);
continue; /* quay về while */
}
if (inode tồn tại trong danh sách các inode rỗi)
Loại bỏ nó khỏi danh sách các inode rỗi;
Tăng giá trị trường số file tích cực trong in-core inode;
return (inode) }
if (danh sách các inode rỗi rỗng) return (mã lỗi)
Loại bỏ một inode mới từ danh sách các inode rỗi;
ðặt lại số lượng inode rỗi vào hệ thống file;
Loại bỏ inode ñó trên hàng ñợi cũ và ñặt nó lên hàng ñợi mới;
ðọc inode từ ñĩa vào in-core inode;
Khởi tạo inode;
return (inode)
}
Trang 21Linux operating system - Nguyen Tri Thanh
Thuật toán iput
Vào: con trỏ tới in-core inode
Ra: không có
{
if (inode chưa bị khóa) Khóa inode;
Giảm trường số lượng file tích cực ñi một ñơn vị;
if (số lượng file tích cực ==0)
{
if (số liên kết của inode ==0) {
Giải phóng các khối ñĩa của file tương ứng với inode;
ðặt giá trị trường "file type" của inode là 0;
Giải phóng inode;
}
if (file ñã truy cập hoặc inode bị thay ñổi hoặc file ñã thay ñổi)
Cập nhật inode trên ñĩa;
ðặt inode vào danh sách các inode rỗi;
}
Tháo khóa của inode;
}
Trang 22Linux operating system - Nguyen Tri Thanh
Thuật toán iname
if (path_name bắt ñầu từ th ư mục gốc)
working_inode = inode của th ư mục gốc; /* thuật toán
iget */
else
working_inode = inode của th ư mục hiện tại; /* thuật toán iget */
while (thành phần ñã xử lý ch ư a là thành phần cuối cùng của path_name) {
ñọc thành phần tiếp theo của path_name từ dòng vào;
xác minh quyền truy cập của quá trình ñối với working_inode là ñúng ñắn;
if (working_inode là gốc và thành phần tiếp theo là "/")
ñọc từ ñĩa nội dung th ư mục working_inode;
/* nhờ các thuật toán nh ư bmap, bread và brelse */
if (thành phần trùng với một ñiểm vào của th ư mục working_inode)
{
nhận số hiệu inode từ thành phần ñã gặp;
working_inode = inode của thành phần ñã gặp; /* thuật toán iget*/
Trang 23Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc
while (true)
{
if (super block của hệthống file bị khóa){
sleep (cho tới khi super block không bị khóa); continue;
}
if (nếu danh sách các inode rỗi trên super block ñã rỗng){
Khóa super block;
Lấy inode nhớ trên super block;
Tìm kiếm các inode chưa sử dụng trên ñĩa lên super block cho ñến khi ñầy;
Mở khóa super block;
wakeup (cho tới khi super block rỗi);
if (không có inode trên ñĩa) return (không có inode);
ðặt inode nhớ là inode tiếp theo tìm ñ ư ợc cuối cùng;
}
Lấy số hiệu của inode từ danh sách các inode trên super block;
Lấy inode;
if (tất cả inode không rỗi) {
Ghi inode lênñĩa; Loại bỏ inode;continue;
}
Thiết lập các giá trị cho inode;
Ghi inode lên ñĩa;
Giảm tổng số các inode rỗi trên hệ thống file;
return (inode);
}
Trang 24Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc – trường hợp danh sách không rỗng
Trước khi gán: 48 là số hiệu inode tiếp theo
Sau khi gán: 48 ñã ñược cung cấp cho nhu cầu, vì vậy 83 trở thành
chỉ số tiếp
Trang 25Linux operating system - Nguyen Tri Thanh
Thuật toán ialloc – trường hợp danh sách rỗng
Trước khi gán: danh sách inode rỗi trên super block là rỗng, do 470
là chỉ số tiếp nên tìm từ số hiệu 471 trở ñi
Sau khi tìm kiếm có ñược danh sách rỗi và 471 là số hiệu inode
cần gán; lúc này, 535 trở thành chỉ số inode tiếp theo
Trang 26Linux operating system - Nguyen Tri Thanh
Thuật toán ifree
Vào: hệ thống file, chỉ số inode
Ra: Không
Tăng tổng số inode rỗi trên super block;
if (super block trên hệ thống file ñã bị khóa) return;
if (danh sách các inode ñầy) {
if (chỉ số inode lớn hơn inode nhớ trên super block)
ðặt chỉ số inode nhớ = chỉ số inode cần giải phóng;
} else lưu trữ chỉ số inode;
return;
Trang 27Linux operating system - Nguyen Tri Thanh
Thuật toán alloc
Vào: hệ thống file
Ra: bộ nhớ ñệm cho khối ñĩa
while (super block của hệ thống file ñã bị khóa)
sleep (cho ñến khi super block không bị khóa;
Loại bỏ khối ñược cấp phát trên super block;
if (khối bị loại bỏ là khối cuối cùng trong danh sách các khối rỗi) {
Khóa super block;
ðọc khối có danh sách các khối rỗi;
Sao chép các khối ñó vào super block của hệ thống file;
Loại bỏ vùng ñệm cho khối;
Mở khóa cho super block;
}
Lấy bộ ñệm của khối ñó;
Loại bỏ nội dung bộ ñệm;
Giảm các khối nhớ rỗi lên hệ thống file;
Chuyển chỉ số trên super block;
return (bộ ñệm tương ứng với khối);
}
Trang 28Linux operating system - Nguyen Tri Thanh
Trang 29Linux operating system - Nguyen Tri Thanh
Liên kết
Có hai kiểu liên kết: liên kết cứng và tượng trưng
Liên kết cứng là một tên khác của một file
Cùng chia sẻ một inode và inode này chứa ñựng tất cả các
thông tin về file
Không thể tạo một liên kết cứng tới một thư mục
Liên kết tượng trưng là một kiểu file ñặc biệt: file tham chiếu
theo tên ñến một file khác
Kiểu file này như là một con trỏ chỉ dẫn tới một file hoặc
một thư mục, và ñược sử dụng ñể thay thế cho file hoặc thưmục ñược trỏ tới
Các thao tác (mở, ñọc, ghi ) ñược thực hiện trên các file
liên kết, sau ñó, nhân hệ thống sẽ tự ñộng thực hiện trênfile ñích của liên kết
Khi xóa file, file liên kết sẽ bị xóa (file ñích vẫn còn)
Trang 30-f, force: xóa bỏ các file ñích ñang tồn tại.
-d, -F, directory: tạo liên kết cứng ñến các thư mục
-i, interactive: vẫn tạo liên kết dù file ñích ñã bị xóa bỏ
-s, symbolic: tạo các liên kết tượng trưng
target-directory=<tên-thư-mục>:xácñịnh thư mục tên-thư-mục là thư mục
có chứa các liên kết
-v, verbose: hiển thị tên các file trước khi tạo liên kết
Ví dụ
# ln -s /usr/doc/g77/DOC g77manual.txt
Trang 31Linux operating system - Nguyen Tri Thanh
Quyền truy nhập
File và thư mục ñều có một chủ sở hữu và một nhóm sở hữu và
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
Trang 32Linux operating system - Nguyen Tri Thanh
Các kiểu file
Trang 33Linux operating system - Nguyen Tri Thanh
Các kiểu file có trong Linux
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 các
chương trình)
File hệ thống (system data file)
Là các file lưu trữ thông tin của hệ thống (cấu hình, tài
khoản, thông tin thiết bị )
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
Thư mục (directory)
Là file 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
Trang 34Linux operating system - Nguyen Tri Thanh
Các kiểu file có trong Linux
File thiết bị (device file)
Là file mô tả thiết bị, ñược lưu trữ trong thư mục /dev
Ví dụ: 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,
File liên kết (linked file)
Là những file chứa tham chiếu ñến các file khác trong hệ
Trang 35Linux operating system - Nguyen Tri Thanh
Các quyền truy cập
Trang 36Linux operating system - Nguyen Tri Thanh
Thay ñổi quyền truy cập file
chmod [tùy-chọn] <mod [,mod] > <file >
chmod [tùy-chọn] <mod-hệ-8> <file >
chmod [tùy-chọn] reference=nhómR <file >
Tùy chọn cũng có ý nghĩa giống như lệnh chgrp:
Dạng thứ hai là dạng xác lập tuyệt ñối
Dạng gián tiếp tuân theo quyền truy nhập của file nhómR
Trang 37Linux operating system - Nguyen Tri Thanh
Cách xác lập tương ñối
Ví dụ
chmod g+w test chmod o-rx test
Trang 39Linux operating system - Nguyen Tri Thanh
Thay ñổi quyền sở hữu
chown [tùy-chọn] [chủ][:nhóm] <file >
Tùy chọn:
-c, changes: hiển thị dòng thông báo chỉ với các file mà lệnh làm thay ñổi sở
hữu (số thông báo hiện ra có thể ít hơn trường hợp -v, -verbose).
-f, silent, quiet: bỏ qua hầu hết các thông báo lỗi.
-R, recursive: thực hiện ñổi quyền sở hữu ñối với thư mục và file theo ñệ quy -v, verbose: hiển thị dòng thông báo với mọi file liên quan mà chown tác ñộng
tới (có hoặc không thay ñổi sở hữu).
help: ñưa ra trang trợ giúp và thoát.
Ví dụ
# chown lan LinuxVN.com
Trang 40Linux operating system - Nguyen Tri Thanh
Thay ñổi nhóm sở hữu
chgrp [tùy-chọn] {nhóm| reference=nhómR} <file >
Tùy chọn của lệnh là (một số t-ơng tự như ở lệnh chown):
-c, changes : hiển thị dòng thông báo chỉ với các file mà lệnh làm thay
ñổi sở hữu (số thông báo hiện ra có thể ít hơn trờng hợp v,
-verbose)
-f, silent, quiet : bỏ qua hầu hết các thông báo lỗi.
-R, recursive : thực hiện ñổi quyền sở hữu ñối với thư mục và file theo
Trang 41Linux operating system - Nguyen Tri Thanh
ðăng nhập vào một nhóm người dùng mới
Người dùng có thể là thành viên của một hoặc nhiều nhómngười dùng khác nhau
Tại một thời ñiểm, một người dùng thuộc vào chỉ một nhóm
Khi một người dùng ñăng nhập, hệ thống ngầm ñịnh người dùng
ñó là thành nhóm khởi ñộng
Nếu muốn sử dụng quyền sở hữu theo các nhóm khác ñối vớinhững file thì người dùng phải chuyển ñổi thành thành viên củamột nhóm tương ứng
Trang 42Linux operating system - Nguyen Tri Thanh
ðăng nhập vào một nhóm người dùng mới
Lệnh ñể chuyển ñổi nhóm người sử dụng
newgrp [nhóm]
Ví dụ
người dùng là thành viên của hai nhóm user và installer
user là nhóm khởi ñộng
khi ñăng nhập, người dùng là thành viên của nhóm user
khi muốn sử dụng một số các chương trình thuộc quyền sở hữu
của nhóm installer, gõ lệnh sau:
# newgrp installerNếu người dùng chuyển vào một nhóm không là thành viên
# newgrp hot2thì Linux sẽ ñưa ra một khuyến cáo thân thiện như sau:
newgrp: Sorry