Tải bản đầy đủ (.pdf) (18 trang)

hk162 lab12 file system

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (667.66 KB, 18 trang )

Đại học Bách Khoa TP. HCM, Khoa KH & KTMT

Bài thực hành số 12
Môn: Hệ điều hành

Phương-Duy Nguyễn
Email:
Ngày 17 tháng 11 năm 2016

1


Mục lục
1 Giới thiêu

3

2 Cơ sở lý thuyết
2.1 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Đơn vị lưu trữ vật lý . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Đơn vị lưu trữ luận lý . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4
4
4

3 Nội dung thực hành
3.1 Thao tác trên tập tin . . . . . . . . . . . . . . . .
3.1.1 Giới thiệu ls . . . . . . . . . . . . . . . . .
3.1.2 Giới thiệu stat . . . . . . . . . . . . . . .


3.2 Thông tin đĩa và parition/volume . . . . . . . . .
3.3 Giới thiệu công cụ quản lý các file đang mở trong
4 Bài tập

. .
. .
. .
. .
hệ

. . . .
. . . .
. . . .
. . . .
thống

.
.
.
.
.

.
.
.
.
.

.
.

.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.

.
.
.

10
10
10
11
13
15
17

2


1 Giới thiêu
Mục tiêu Sinh viên cần nắm rõ các khái niệm lý thuyết về hệ thống tập tin. Bài thực
hành giúp sinh viên hiểu và có thể lấy thông tin về hệ thống tập tin đang chạy trong
HĐH Linux và MacOS. Phần mở rộng giúp sinh viên dò tìm cấu trúc lưu trữ theo i-node
trong hệ thống tập tin của Linux.
Nội dung Sinh viên được thí nghiệm các nội dung như sau
• Thí nghiệm lấy thông tin đĩa cứng/thư mục/tập tin;
• Thí nghiệm lấy thông tin các process đang mở tập tin nào đó;
• Xây dựng lại cây ánh xạ thư mục của tập tin theo đơn vị i-node.
Kêt quả đạt được

Sau khi thực hiện thí nghiệm, sinh viên có thể

• Hiểu được cách HĐH quản lý thông tin file, thông tin các process đang tương tác
với file;

• Được tiến hành các thực nghiệm để minh họa lí thuyết quản lý không gian đĩa sử
dụng i-note.

3


2 Cơ sở lý thuyết
2.1 File
là một chuỗi các byte và là đơn vị truy xuất dữ liệu lưu trữ trên các thiết bị thứ cấp. File
được đặt tên, có tính bền vững (persistent) và hỗ trợ hai tác vụ chuẩn là read/write.
Các tác vụ trên file gồm create, write, read, reposition, delete, truncate, open và
close.
Thư mục là mộ tiện ích của hệ điều hành dùng để dễ dàng tổ chức các file.
Các tác vụ trên hệ thống file có hai tác vụ quan trọng là mount và chia sẻ file
(gồm hard link và soft link). Để bảo vệ file, các quyền cấp phép cho mỗi file được định
nghĩa trong Access Control List (ACL) gồm các cặp <user, rights>.

2.2 Đơn vị lưu trữ vật lý
gồm mức thấp nhất là disk block và mức cao nhất là partition (trong Dos/UNIX) hay
volume trong MacOS.
Partition/volume là vùng không gian được phần chia trên đĩa cứng mà hệ điều
hành có thể quản lý từng vùng không gian này một cách tách biệt. Việc tạo partition
được thực hiện trước khi tạo file system hoặc thư mục. Có hai dạng partition là primary
partition nơi mà một số thành phần của HĐH bắt buộc phải chứa ở các phân vùng này.
Một đĩa cứng chỉ có thể có một extended partition nhưng extended partition này có thể
chia thành nhiều logical parition.
Disk block là đơn vị lưu trữ của thiết bị lưu trữ (đĩa cứng, flash...) và là một chuỗi
các byte hoặc bit. Dữ liệu phải được truy xuất theo đơn vị block.

2.3 Đơn vị lưu trữ luận lý

được thực hiện bằng phần mềm để quản lý, tổ chức (ánh xạ, đánh địa chỉ) các datablock
trong một partition. Hiện thực này khác nhau tùy từng hệ điều hành và được gọi là tổ
chức/định dạng hệ thống file hay file system format. Trong Unix sử dụng định dạng
UFS (UNIX File system) trong Mac OS X sử dụng định dạng HFS+ (Hierarchical File
System Plus)
Linux UFS

4


Data block

Hard disk Partition

Partition

Partition

Plates

Head arm

Track/
Cylinder

Arm

Head armature

Spindle

Head

Hình 2.1: Đơn vị lưu trữ vật lý parition và block
Inode (Index node) Cấu trúc dữ liệu lưu thuộc tính và vị trí của disk block (pointer).
Inode được định danh theo inode number. Mỗi file có tên và được gán một inode number
duy nhất. Các thông tin thuộc tính chứa trong inode bao gồm:
• kích thước file
• Device ID của thiết bị chứa file
• UserID
• GroupID
• File mode (r/w...)
• Các cờ (flags) khác
• Timestamp
• Số lượng hard link trỏ đến inode. Inode có thể không có link nào trỏ đến.
• Các con trỏ đến disk blocks (disk block address)

Directory được quản lý bởi một inode trỏ đến directory block và nội dung block
chứa tên cho file, directories và devices, .v.v... Inode chứa kích thước file, directory chỉ
chứa tên và inode number. Chính inode number là thông tin để hệ thống khi cần truy
xuất lấy thông tin kích thước sử dụng.

5


Disk block

Info
D
i
r

e
c
t
b
l
o
c
k

Indirect
Block

0
1
2
3
4
5
6
7
8
9
10
11
Single
Double
Triple

0
.Di

.
.
255
0
.
.
.
255

0
.
.
.
255

0
1
2
3
4
5
6
7
8
9
10
11
12
256 blocks
2

5
6
e
n
t
r
i
e
s

2
5
6
e
n
t
r
i
e
s

267
268

0
.
.
.
255


0
.
.
.
255
0
.
.
.
255

0
.
.
.
255

256 blocks

523

65536 blocks

6
5
5
3
6

65803

65804

0
.
.
.
255

256 blocks

66059

16777216
Blocks

0
.
.
.
255

16843019

Hình 2.2: Cấu trúc inode

inode

Super block

inode


...

inode
number
---filename

inode

i-list

inode
number
---filename

...

inode
number
---filename

directory block

Data block

Data block

Hình 2.3: Cấu trúc directory

6



File system

Cylinder group

super block
copy

Cylinder
header

Boot Super
block block

Cylinder group

Partition

Hard disk

Data block

i-list

Cylinder group

Partition

...


Partition

Plates

Head arm

Track/
Cylinder

Arm

Head armature

Spindle
Head

Hình 2.4: Cấu trúc Hard disk và file system
File System gồm các thành phần sau
• Một số block làm boot block
• Super block chứa magic number
• Môt số cylinder group. Mỗi cylinder group gồm các thành phần:
– Bản sao superblock
– cylinder header
– i-list
– Data block
MacOS HFS+
B*tree để ánh xạ các node. Có 4 dạng node:
• Header node: B*tree metadata
• Map node: node allocation bitmap lưu mapping các block đã cấp phát dưới dạng

bitmap
• Index node: lưu dưới dạng key:node pointer
• Leaf node: lưu dươi dạng key:data record

7


B-Tree
Map Node

bLink = 0
flink
kind = kBTMapNode
B-Tree Map Node
Map Record Bitmap
Offset to Record

...

bLink = 0
flink
kind = kBTMapNode
B-Tree Map Node
Map Record Bitmap
Offset to Record

B-Tree
Header Node
Node descriptor


Node 0
(Header)
Node 1

Node i

Node m

bLink = 0

B-Tree Header Record

B-Tree

node 12

flink = 0
flink = mapnode

bLink
flink
kind = kBTIndexNode
height=3
numRecords=2
reserved

kind = kBTHeaderNode
height=0
numRecords=3
reserved

treeDepth=3
rootNode=12
leafRecords=9
firstLeafNode
lastLeafNode



key = 23
pointer
key = 254
pointer

node 254
bLink
flink
kind = kBTIndexNode
height=2
numRecords=3
reserved

node 23
bLink
flink
kind = kBTIndexNode
height=2
numRecords=2
reserved

key = 17

pointer
key = 18
pointer
key = 117
pointer


key = 212
pointer
key = 111
pointer


node 18
node 212

node 111

bLink
flink
kind = kBTLeafNode
height=1
numRecords=2
reserved
Data Record
Data Record

bLink
flink
kind = kBTLeafNode

height=1
numRecords=2
reserved
Data Record
Data Record

node 17
bLink
flink
kind = kBTLeafNode
height=1
numRecords=1
reserved
Data Record

bLink
flink
kind = kBTLeafNode
height=1
numRecords=4
reserved
Data Record
Data Record
Data Record
Data Record

node 117
bLink
flink
kind = kBTLeafNode

height=1
numRecords=2
reserved
Data Record
Data Record

Hình 2.5: Cấu trúc B-Tree trong Hierarchical File System - HFS
Block Trong định dạng HFS, volume (tương ứng partition trong UNIX) gồm nhiều
block, còn được gọi là sector. Với đĩa dung lượng nhở thường block có kích thước 512 byte,
các đĩa có dung lượng lớn hơn block size có thể lên đến 16KB hoặc hơn nữa. HFS Flus
(phiên bản mới của HFS) dùng 23bit để đánh địa chỉ tương ứng với 4.294.967.296 = 23 2
block lớn hơn so với chuẩn cũ HFS chỉ dùng 16 bit dịa chỉ block tương ứng 65, 536 = 21 6
block. Trong các block, có khoảng 9 cấu trúc thường đặc trưng cho HFS volume:
• Boot block: được đọc khi khởi động và chứa các lệnh khởi động (boot instruction),
thường ở block/sector 0 và 1
• Volumne Header: phiên bản HFS trước gọi là Master directory block chứa các
thông tin về parition/volume đó như thời gian tạo và số lượng file có trong volumne.
• Allocation File: phiên bản HFS gọi là Volume bitmap chứa danh sách bit (bitmap)
các block nào được dùng và các block nào đang trống. Điểm khác biệt là Allocation
File hiện thực như một file bình thường và có thể thay đổi kích thước cũng như
được lưu trên các block không liên tục trong volume.
• Catalog File: hiện thực bằng B-tree chứa thông tin về các file và thư mục trong
volume.
• Extends Overflow file: hiện thực bằng B-tree chứa các block được cấp cho file
như là phần mở rộng. Trong MacOS, ngoài nội dung dữ liệu, file có thể có các

8


Partition

Reserved C1024 bytesg
Boot block
Volume Header/
Master directory block
Free space
Allocation File/
Volume bitmap

Node

B-Tree

Free space
Extends Overflow File

Header Node
CNode 0g

Free space

Node 1
Node 2

Catalog File


Node n

Node descriptor
Record 0

Record 1
Free space
Offset to free space
Offset to record 1
Offset to record 0

Free space
Attributes File
Free space
Startup File

Free space
Alternative Volume Header
Reserved C512 bytesg

Hình 2.6: Cấu trúc Parition/Volume trong HFS
thông tin mở rộng metafile được chứa trong phần này.
• Attribute File: mới xuất hiện ở HFS Plus chứa các thông tin của file và các phần
mở rộng.
• Startup File: được thiết kế cho các hệ thống không phải MacOS vốn không hỗ
trợ HFS hay HFS Plus. Thành phần này tương tự Boot Block trong HFS.
• Alternate Volume Header: phiên bản HFS trước gọi là Alternate Master Directory Block là một bản sao (copy) của Volume Header
• Block/sector cuối cùng được dự trữ dành riêng cho Apple sử dụng trong quá trình
chế tạo máy tính.

9


3 Nội dung thực hành
Nội dung phần thực hành không hương đến việc thực tập các thao tác trên file vì đó chỉ

là các giao tiếp thông thường mà chúng ta đã quen thuộc qua các tiện ích của hệ điều
hành. Chúng ta có thể nhắc lại các thao tác như:
• open/close qua Programming API fopen()/fclose()
• read qua command cat, redirect stdout (>) Programming API fread(), fscanf();
• write qua command vi, echo & redirect sdtin (<), Programming API fwrite(),
fprintf();
• reposition Programming API fseek()
• truncate qua command touch, Programming API ftruncate();
• delete qua command rm, Programming API remove();
Nội dung phần thực hành này minh họa việc hiện thưc hệ thống tập tin trong hệ điều
hành. Chúng ta sẽ điểm qua cấu trúc thông tin quản lý tập tin. Cấu trúc tổ chức trong
hệ thống file với i-node (UNIX UFS) và block (MacOS HFS)

3.1 Thao tác trên tập tin
Công cụ để quản lý các tập tin là ls, list directory contents, và các tập tin đang mở
trên hệ thống là lsof viết tắt của List Open Files. Đây là công cụ giúp liệt kê các thông
tin các tập tin hoặc các tập tin đang được mở bởi các process. Lưu ý trong UNIX, mọi
thứ đều là file (directory, devices...) Qua các thông tin chúng ta có thể thấy được owner
(user owned file) và group owner (group owned file). Các thông tin về phân quyền Access
List Control và kích thước file.
3.1.1 Giới thiệu ls
Linux
$ l s −l /
File_Permissions
drwxr−xr−x
2
drwxrwxr−x
13
drwxr−s r −x
8

drwxrwxr−x
3
−rwxr−xr−x
1
...

Owner
root
root
root
root
root

Group
root
staff
root
staff
root

S i z e Modified_Time
1480
Nov 10 1 9 : 1 8
6140
Nov 10 1 9 : 1 8
680
Nov 10 1 9 : 1 8
60
Apr 20 2016
496

Feb 23 2016

Name
bin /
dev /
etc /
home/
init

10


Xem thông tin i-node Dùng lệnh ls với tham số -i để liệt kê thông tin inode tương
ứng với file/directory. Với directory, sử dụng option -d để liệt kê chính directory đó hoặc
sử dụng không có tham số để liệt kê thông tin các tập tin/thư mục con của thư mục đó.
$ l s −i −l / etc / pass
14618 −rw−rw−r−− 1 r o o t s t a f f

161 Apr 20

$ l s − i − l −d / e t c
349 drwxr−s r −x 8 r o o t r o o t

680 Nov 10 1 9 : 1 8 / e t c /

$ l s −i
2427
354
393
351

14648
...

−l / etc
−rw−r−−r−−
−rw−rw−r−−
−rw−rw−−−−
−rw−rw−r−−
−rw−r−−r−−

1
1
1
1
1

root
root
root
root
root

root
staff
staff
staff
root

574
49

44
26
4

Nov
Feb
Feb
Feb
Nov

2016 / e t c / passwd

10 1 9 : 1 8 f s t a b
23 2016 group
23 2016 gshadow
23 2016 h o s t . c o n f
10 1 9 : 1 8 hostname

MacOS
$ l s −l / l s −l
File_Permissions
drwxrwxr−x+
37
drwxr−xr−x+
59
drwxr−xr−x@
2
drwxr−xr−x+
4
drwxr−xr−x

5
...

Owner
root
root
root
root
root

Group
admin
wheel
wheel
wheel
admin

S i z e Modified_Time
1258 Nov 2 1 4 : 1 3
2006 Sep 30 1 4 : 1 9
68 Sep 10 2014
136 Jan 29 2015
170 Sep 17 0 6 : 4 1

Name
Applications
Library
Network
System
Users


Xem thông tin i-node trong MacOS, i-node không có ý nghĩa tổ chức cấu trúc File
System như trong Unix, mà chỉ đơn giản là unique id mà file system dùng để lưu vết
(track) file.
3.1.2 Giới thiệu stat
để xem trạng thái của file. Thông tin được liệt kê bởi lệnh stat nhiều hơn ls.
Linux
Command stat là công cụ chuyên sâu không được tích hợp mặc định
cùng MT14tinyLinux để giữ kích thước virtual machine nhỏ. Để sử
Hint dụng, chúng ta cần cài bổ sung gói phần mềm coreutils.tcz. Có thể
cài đặt trong Apps > Cloud (Remote)> Browse. Xem minh họa ở hình
3.1.2

11


Hình 3.1: Cài đặt gói coreutils.tcz

$ s t a t / e t c / passwd
F i l e : ’ / e t c / passwd ’
S i z e : 161
Blocks : 8
IO Block : 4096 r e g u l a r f i l e
Device : 2h/2d
Inode : 14618 L i n k s : 1
A c c e s s : (0664/ −rw−rw−r −−) Uid : ( 0/ r o o t )
Gid : ( 5 0 / s t a f f )
A c c e s s : 2016−11−11 0 7 : 1 0 : 3 4 . 0 1 5 9 7 6 7 6 8 +0000
Modify : 2016−04−20 1 9 : 2 2 : 2 7 . 0 0 0 0 0 0 0 0 0 +0000
Change : 2016−11−10 1 9 : 1 8 : 1 2 . 9 4 6 6 6 6 5 7 0 +0000

Birth : −
MacOS
$ s t a t / dev / t t y
/∗ inode ’ s number ∗/
/∗ i n o d e p r o t e c t i o n mode ∗/
/∗ number o r hard l i n k s t o t h e f i l e ∗/
/∗ u s e r −i d o f owner ∗/
/∗ group−i d o f owner ∗/
/∗ d e v i c e type , f o r s p e c i a l f i l e i n o d e ∗/
/∗ time o f l a s t a c c e s s ∗/
/∗ time o f l a s t data m o d i f i c a t i o n ∗/
/∗ time o f l a s t f i l e s t a t u s change ∗/
/∗ f i l e s i z e , in b y t e s ∗/
/∗ b l o c k s a l l o c a t e d f o r f i l e ∗/
/∗ o p t i m a l f i l e s y s I /O ops b l o c k s i z e ∗/
/∗ u s e r d e f i n e d f l a g s f o r f i l e ∗/
/∗ f i l e g e n e r a t i o n number ∗/
/∗ f i l e name ∗/
787743656

12


297
crw−rw−rw−
1
root
wheel
33554432
0

"Nov␣ 17 ␣ 0 9 : 5 0 : 3 5 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
"Nov␣ 16 ␣ 1 4 : 1 4 : 0 4 ␣ 2016 "
131072
0
0
/ dev / t t y

3.2 Thông tin đĩa và parition/volume
Mỗi hệ điều hành cung cấp các công cụ tiện ích (utilities tool) để xem thông tin trên
harddisk và partition. Trong Unix, thiết bị lưu trữ thứ cấp (đĩa, flash...) được gắn vào
file system. Các lệnh được cung cấp là df -h (Linux và MacOS), fdisk, (Linux, MacOS),
parted (Linux) và diskutil (MacOS)
Các thao tác xem thông tin đĩa chỉ có thể thực hiện với quyền quản lý hệ thống.
Các lệnh do vậy nếu báo lỗi permission denied thì phải chuyển sang sử dụng
Hint
dưới chết độ sudo. Ví dụ: lênh $ fdisk /dev/sda bị lỗi permission denied thì
sử dụng $ sudo fdisk /dev/sda.
Linux
Đường dẫn: Thiết bị lưu trữ (đía, flash...) được mount tại tại đường dẫn /dev/sdXy (X:
a...z harddisk identification; y: 1,2,... partition number). Vd:
• hardisk /dev/sda (đĩa 0) /dev/sdb (đĩa 1), /dev/sr0 (đĩa CDROM)
• partition /dev/sda1 (parition thứ 1 trên đĩa 0), /dev/sdc2 (partition thứ 3 trên
đĩa 2)
$ d f −h
Filesystem
rootfs
tmpfs
/ dev / sda1

/ dev / l o o p 0
/ dev / l o o p 1

Size
451M
251M
486M
8 . 0K
8 . 0K

Used A v a i l Use% Mounted on
28M 423M
7% /
0 251M
0% / dev /shm
130M 353M 27% /mnt/ sda1
8 . 0K
0 100% /tmp/ t c l o o p / libXdmcp
8 . 0K
0 100% /tmp/ t c l o o p / libXau

13


/ dev / l o o p 2
/ dev / l o o p 3
...

228K
892K


228K
892K

0 100% /tmp/ t c l o o p / l i b x c b
0 100% /tmp/ t c l o o p / l i b X 1 1

$ f d i s k − l / dev / sda
Disk / dev / sda : 536 MB, 536870912 b y t e s
255 heads , 63 s e c t o r s / t r a c k , 65 c y l i n d e r s
U n i t s = c y l i n d e r s o f 16065 ∗ 512 = 8225280 b y t e s
Dev ic e Boot
/ dev / sda1


Start
1

End
65

Blocks
522081

Id System
83 Linux

$ f d i s k − l / dev / sda1
Disk / dev / sda1 : 534 MB, 534610944 b y t e s
255 heads , 63 s e c t o r s / t r a c k , 64 c y l i n d e r s

U n i t s = c y l i n d e r s o f 16065 ∗ 512 = 8225280 b y t e s
D ev ic e Boot
Start
End
B l o c k s Id System
/ dev / sda1p1
?
200716
227661
216435558+ 7 HPFS/NTFS
P a r t i t i o n 1 has d i f f e r e n t p h y s i c a l / l o g i c a l b e g i n n i n g s ( non−Linux ? ) :
phys =(187 , 1 8 0 , 1 4 ) l o g i c a l =(200715 , 1 9 7 , 3 8 )
P a r t i t i o n 1 has d i f f e r e n t p h y s i c a l / l o g i c a l e n d i n g s :
phys =(784 , 0 , 1 3 ) l o g i c a l =(227660 , 1 9 2 , 4 4 )
P a r t i t i o n 1 d o e s not end on c y l i n d e r boundary
/ dev / sda1p2
?
203674
57922
976730017 16 Hidden FAT16
P a r t i t i o n 2 has d i f f e r e n t p h y s i c a l / l o g i c a l b e g i n n i n g s ( non−Linux ? ) :
phys =(906 , 2 3 5 , 6 1 ) l o g i c a l =(203673 , 2 2 5 , 2 2 )
P a r t i t i o n 2 has d i f f e r e n t p h y s i c a l / l o g i c a l e n d i n g s :
phys =(262 , 1 1 6 , 5 9 ) l o g i c a l =(57921 , 2 0 3 , 2 5 )
...
MacOS
Đường dẫn: Thiết bị lưu trữ (đía, flash...) được mount tại tại đường dẫn /dev/diskXsY
(X: 0,1,... harddisk identification; Y: 1,2,... partition number). Vd:
• hardisk /dev/disk0 (đĩa 0) /dev/disk1
• partition /dev/disk0s1 (parition thứ 1 trên đĩa 0), /dev/disk3s2 (partition thứ 2

trên đĩa 4)
$ sudo d f −h
Filesystem
Size

Used A v a i l Capacity i u s e d

i f r e e %i u s e d

Mounted on

14


/ dev / d i s k 0 s 2
39 Gi 19 Gi
devfs
181 Ki 181 Ki
map −h o s t s
0 Bi
0 Bi
map auto_home
0 Bi
0 Bi
/ dev / d i s k 1
2 . 5 Gi 2 . 5 Gi

19 Gi
0 Bi
0 Bi

0 Bi
0 Bi

50% 5166117 5109739 50%
100%
625
0 100%
100%
0
0 100%
100%
0
0 100%
100%
0
0 100%

/
/ dev
/ net
/home
/ xc

$ sudo f d i s k / dev / d i s k 0
Disk : / dev / d i s k 0
geometry : 5221/255/63 [ 8 3 8 8 6 0 8 0 s e c t o r s ]
S i g n a t u r e : 0xAA55
Starting
Ending
ID : i d c y l hd s e c − c y l hd s e c [ s t a r t −

size ]
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
1 : EE 1023 254 63 − 1023 254 63 [
1 − 8 3 8 8 6 0 7 9 ] <OSX>
2 : 00
0
0
0 −
0
0
0 [
0 −
0 ] unused
3 : 00
0
0
0 −
0
0
0 [
0 −
0 ] unused
4 : 00
0
0
0 −
0
0
0 [
0 −

0 ] unused

3.3 Giới thiệu công cụ quản lý các file đang mở trong hệ thống
lsof là công cụ liệt kê danh sách các tập tin đang được mở với các process đang chạy.
Linux
$ lsof
PID
2673
2673
2673
2673
...

COMMAND
/ b i n / busybox
/ b i n / busybox
/ b i n / busybox
/ b i n / busybox

NAME
/ dev / t t y 1
/ dev / t t y 1
/ dev / t t y 1
/ dev / t t y

MacOS
$ lsof
COMMAND
PID
USER

l o g i n w i n d 64 s t u d e n t
l o g i n w i n d 64 s t u d e n t
l o g i n w i n d 64 s t u d e n t
l o g i n w i n d 64 s t u d e n t
l o g i n w i n d 64 s t u d e n t
...

FD TYPE DEVICE SIZE/OFF
NODE NAME
cwd DIR
1 ,1
1088
2 /
t x t REG
1 ,1
836016 311808 / . . . window
t x t REG
1 ,1
137152 146128 / . . . S e r v i c e s
t x t REG
1 ,1
4380 20106 / . . . f i l e . i c c
t x t REG
1 ,1
20848 254974 / . . . dpac

15


Executable and

Linkable Format

process
1GB

ELF header
...

kernel space
user code read/write will
cause segmentation fault

argv, environment

...

.text

0xC0000000
random offset

stack

(grown down)

...

random offset

memory mapping


.data
.bss

(files, libraries)

...

heap

3GB

(grown up)

uninitialized data
.bss
initialized data
.data

random offset

end

edata
etext

.text

...


0x08048000
0x0

Hình 3.2: Layout Linux process
Mở rộng với lsof công cụ lsof có thể được sử dụng để lấy các thông tin quản lý của
HĐH cho file đó bao gồm danh sách các file đang mở tại mộ thư mục, các file đang truy
xuất tại một đường dẫn nào đó... Các thao tác với lsof dùng cho cả Linux và MacOS.
Xem lại việc quản lý file từ góc nhìn process Đối chiếu với bài học trước, sinh
viên có thể xem các file đang mở trong một process thông quan /proc file system. Các
file đang được mở sẽ được quản lý bởi một cấu trúc file descriptor trong không gian sử
dụng của process (tham khở lại bài thực hành về Process Text và Data segment).
$ cat /proc//maps
08048000−08049000 r−xp
08049000−0804a000 rwxp
b75e0000−b75e1000 rwxp
b75e1000−b76f8000 r−xp
b76f8000−b76fa000 r−xp
b76fa000−b76fb000 rwxp
b76fb000−b76fe000 rwxp
b7705000−b7707000 rwxp
b7707000−b7708000 r−xp
b7708000−b7720000 r−xp
b7720000−b7721000 r−xp
b7721000−b7722000 rwxp
bf9a8000−bf9c9000 rw−p

00000000
00000000
00000000
00000000

00116000
00118000
00000000
00000000
00000000
00000000
00017000
00018000
00000000

00:01
00:01
00:00
00:01
00:01
00:01
00:00
00:00
00:00
00:01
00:01
00:01
00:00

30895
30895
0
646
646
646

0
0
0
648
648
648
0

/home/.../loop_process
/home/.../loop_process
/lib/libc −2.17.so
/lib/libc −2.17.so
/lib/libc −2.17.so

[vdso]
/lib/ld−2.17.so
/lib/ld−2.17.so
/lib/ld−2.17.so
[ stack ]

16


4 Bài tập
Hướng dẫn bài tập Sinh viên thực hiện BT1 và BT2. Đây là các thao tác cơ bản sử
dụng công cụ để trích xuất thông tin quản lý đãi cứng/thư mục/file. BT3 là bài tập mở
rộng, sinh viên sau khi lấy thông tin từ các công cụ quản lý file cân thực hiện trích xuất
thông tin cần thiết.
BT1 (3 điểm) Sinh viên thực hiện thao tác xem thông tin tập tin
BT2 (3 điểm) Sinh viên thực hiện thao tác xem thông tin phân vùng đĩa cứng có trên

hệ thống.
BT3 (4 điểm) Sinh viên thực hiện thao tác các process đang mở file tại đường dẫn
• Lấy thông tin PID process đang mở file /dev/null (2 điểm)
• (Câu hỏi tổng hợp lấy thông tin file và thông tin process) Lấy thông tin user đang
mở file /dev/tty1 (trên Linux) và /dev/ttyS001 (trên MacOS). (2 điểm) Hướng
dẫn, sinh viên cần xác định thông tin process đang mở file và thông tin owner của
process đó để từ đó lấy ra thông tin user đang mở file.
BT4 (Mở rộng) Vận dụng hiểu biết về i-node, sinh viên traverse các file từ thư mục
root dựa trên inode, vẽ ra cây thư mục với các định danh inode tương ứng.

17


Revision History
Revision

Date

Author(s)

Description

1.0

14.11.15

PD Nguyen

created


18



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×