Linux 文件系统概念

发布时间:2022-06-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Linux 文件系统概念脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Linux 文件包含数据,目录是文件的列表。

不同目录之间互相连接构成树状的结构,目录还可以包含在其他目录中。

pwd 显示用户在目录数中的当前位置。

路径 从树跟到所处位置所经过的目录的序列。

mkdir dirname 创建一个目录

cd dirname 转移到目标目录

pwd 打印当前工作目录。

mv oldfilename newfilename 重命名文件

rm deletefilename 删除文件名

.. 表示上一级目录,即父目录

ln filename linkfilename 连接文件。filename 和 linkfilename 都称为连接,都指向硬盘上的同一数据块。

 

针对目录树的命令:

ls -R 列出当前目录下的目录内容,-R 要求列出指定目录及其子目录的所有内容

chmod -R mode dirname 修改目录名下的所有文件的许可权限

du dirname 给出指定目录及其子目录下文件占用硬盘中数据块的总数

find dirname -filter filename -action  找到指定目录下符号符号筛选的文件名并执行action

 

文件系统的内部结构:三层抽象

1.从磁盘到分区:磁盘被划分为多个分区,在实体内创建独立的区域。

2.从磁盘到块序列:磁盘上的磁片的磁道被划分为扇区,扇区是磁盘的基本存储单位。给磁盘上的数据块进行编号。

3.块序列到三个区域的划分。将磁盘块分成3部分:超级块,i-节点表,数据区

超级块:存放文件系统本身的信息

  如:每个区域的大小,未被使用的磁盘块的信息,

i-节点表:存放文件属性

  存放文件的属性:大小,所有者等,存放在 i-节点 的结构中。 i-节点固定大小,i-节点表是 i-节点结构的列表

  文件系统中的每个文件都在该表中有一个i-节点。

  i-节点表 中的 每个 i-节点通过位置来标识。如标识为2 的位于 i-节点表 的第三个位置

数据区:存放文件内容,磁盘上的所有块的大小都是一样的,如果文件大小超过一个块的内容,则文件内容会存放在多个磁盘块中。

 

例:创建新目录

1. 存储属性:内核找到一个空的i-节点,如i-节点47,将文件信息记录其中

2.文件内容的存储:文件需要3个磁盘存储块,内核从自由块的列表中找出3个数据块,如块627,200,992。分别存放数据

3.记录分配情况:文件按内容存放627,200,992,内核在i-节点的磁盘分区中记录了上述的块序列。

4.添加文件名到目录。文件名是 filename ,内核将入口47添加到目录文件。

目录:一个包含i-节点和文件名的表

 

ls -1ia  查看目录的内容:

1054940 .1054934 ..1055004 demodir

左边的是文件的i-节点号,右边是文件名。当前目录是 跟当前目录有关的大小,文件所有者,组等信息存放其中。

 

文件系统的实现:

cat filename 如何进行工作的。

1.在目录中寻找文件名:文件名存储在目录文件中,内核在目录文件中寻找包含字符串filename的记录,找到编号为47的i-节点号

2.定位i-节点并读取内容:内核会预先访问缓存区,然后访问磁盘。i-节点包含数据块编号的列表。

3.访问存储文件内容的数据块:找到相应的磁盘块627,200,992.

struct inode

{ struct hlist_node i_hash; struct list_head i_list; struct list_head i_sb_list; struct list_head i_dentry; unsigned long i_ino; atomic_t i_count; umode_t i_mode; unsigned int i_nlink; uid_t i_uid; gid_t i_gid; dev_t i_rdev; loff_t i_size; struct timespec i_atime; struct timespec i_mtime; struct timespec i_ctime; unsigned int i_blkbits; unsigned long i_blksize; unsigned long i_version; unsigned long i_blocks; unsigned short i_bytes; unsigned char i_sock; spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ struct semaphore i_sem; struct rw_semaphore i_alloc_sem; struct inode_operations *i_op; struct file_operations *i_fop; /* former ->i_op->default_file_ops */ struct super_block *i_sb; struct file_lock *i_flock; struct address_space *i_mapping; struct address_space i_data;#ifdef CONFIG_QUOTA struct dquot *i_dquot[MAXQUOTAS];#endif /* These three should probably be a union */ struct list_head i_devices; struct pipe_inode_info *i_pipe; struct block_device *i_bdev; struct cdev *i_cdev; int i_cindex;

__u32 i_generation;

#ifdef CONFIG_DNOTIFY unsigned long i_dnotify_mask; /* Directory notify events */ struct dnotify_struct *i_dnotify; /* for directory notifications */#endif

unsigned long i_state; unsigned long dirtied_when; /* jiffies of first dirtying */

unsigned int i_flags;

atomic_t i_writecount; void *i_security; union { void *generic_ip; } u;#ifdef __NEED_I_SIZE_ORDERED seqcount_t i_size_seqcount;#endif}

i-节点中存储有文件的读写权限,用户id,组id等信息,当获取到文件的i-节点时,会检查这些权限是否符合。

脚本宝典总结

以上是脚本宝典为你收集整理的Linux 文件系统概念全部内容,希望文章能够帮你解决Linux 文件系统概念所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: