2023-2024-1 20211327 cp userlist(课上测试)
cp userlist
Linux 文件系统的三层抽象
1.块设备层(Block Layer):
这是最底层的层次,它负责与硬件块设备进行交互,如硬盘驱动器或闪存设备。块设备层通过提供对块的读写接口,为上层文件系统层提供了一个抽象的硬件接口。
2.文件系统层(File System Layer):
位于块设备层之上,文件系统层负责管理文件和目录的布局、文件的命名、权限、属性等信息。它通过使用块设备层提供的块设备接口来实现文件和目录的存储和组织。常见的Linux文件系统包括Ext4、XFS、Btrfs等。
3.虚拟文件系统层(Virtual File System Layer):
是最高层的抽象,提供了一个统一的文件系统接口,使得不同类型的文件系统可以在同一系统中协同工作。虚拟文件系统层使得用户和应用程序可以通过相同的系统调用来访问不同文件系统的数据,而不需要关心底层文件系统的实现细节。这种抽象允许在同一系统上同时挂载多种不同类型的文件系统,如FAT、NTFS、Ext4等。
cp userlist userlistbak的过程
在这个例子中,我们假设块大小为4k,userlist 的大小不小于10k。下面是详细描述和图示:
1.初始状态:
/home/user/
目录下有一个文件 userlist
,其大小为12k,块大小为4k。
/home/user/
└── userlist (Size: 12k)
2.运行 cp 命令:
运行 cp userlist userlistbak
命令后,系统会创建一个新的文件 userlistbak
。
/home/user/
├── userlist (Size: 12k)
└── userlistbak (Empty)
3.文件复制过程:
cp
命令会打开userlist
文件并创建一个新的userlistbak
文件。- 由于块大小为4k,
userlist
文件的内容可能被分为3个块(3 * 4k = 12k)。
/home/user/
├── userlist (Size: 12k)
│ ├── Block 1 (4k)
│ ├── Block 2 (4k)
│ └── Block 3 (4k)
└── userlistbak (Empty)
4.i-node 和数据块:
- 每个文件都有一个关联的
i-node
,包含文件的元数据信息。 userlist
和userlistbak
各自有独立的i-node
,分别指向它们的数据块。
/home/user/
├── userlist (i-node 1)
│ ├── Block 1 (4k)
│ ├── Block 2 (4k)
│ └── Block 3 (4k)
└── userlistbak (i-node 2)
└── Empty (No Data Blocks Yet)
5.数据复制:
cp
命令将 userlist
文件的内容逐块复制到 userlistbak
文件。
/home/user/
├── userlist (i-node 1)
│ ├── Block 1 (4k)
│ ├── Block 2 (4k)
│ └── Block 3 (4k)
└── userlistbak (i-node 2)
├── Block 1 (4k)
├── Block 2 (4k)
└── Block 3 (4k)
6.目录更新:
目录将被更新,指向新创建的 userlistbak
文件的 i-node。
/home/user/
├── userlist (i-node 1)
│ ├── Block 1 (4k)
│ ├── Block 2 (4k)
│ └── Block 3 (4k)
└── userlistbak (i-node 2)
├── Block 1 (4k)
├── Block 2 (4k)
└── Block 3 (4k)