说明:以下是在读小骆驼书《Perl 语言入门》第十二章 目录操作 中“链接与文件”一节(P189-193)中的读书笔记。
目录是一种由系统管理的特殊文件,它基本上是一份列表。
每份文件都会存储在一个编好号的inode里,我们可以把它想象成磁盘上的门牌号码。
ls -l命令,硬链接的数量会显示在权限标记的右边。
每个目录都会有 . 这个项目,它会指回目录本身的inode。所以任何目录的链接数都至少是2.一般来说,目录的链接数等于子目录的数量加上2.
链接分硬链接和软链接(又叫符号链接)。
【硬链接】
硬链接的本质是:不同的文件名指向同样的inode,文件事实上只有一份。
建立硬链接:
shell命令:ln file1 file2
perl命令:link file1 file2
此时,file1和file2指向同一个inode(假定inode为12345),文件事实上只有1份,修改file1的时候同时会修改file2(因为只有一个文件)。但是要注意用文本编辑器进行修改的时候,可能会导致变成两份文件,视文本编辑器的原理而定。
当删除file1的时候,inode 12345的链接数减一,file2并不会删除。只删除file2的时候,也是一样原理。
当该inode的链接数等于0的时候,数据就丢失了。
因为硬链接的性质,所以在某种程度上可以防止数据的流失(只要inode的链接数大于0,数据就还在)。
perl的rename函数可以将文件搬移到别的目录里,但是来源和目的地必须在同一个文件系统上(同一个磁盘上),因为rename的原理是基于文件的 inode 列表。如果跨磁盘搬移文件,那inode里的数据就必须重新部署。
目录不能建立硬链接(从文件系统基于inode的原理很容易理解为什么。如果可以的话,文件系统那就乱套了,而且整个系统的性能不知道要低成什么样了)
【软链接】
软链接又叫符号链接。它是目录里的一种特殊项目,用来告诉系统到别的方向找找看。
建立软链接:
shell命令:ln -s fileA fileB
perl命令:symlink "fileA" "fileB"
假定fileA的inode为34567,inode的链接数为1.那么在建立软链接之后,inode的链接数仍然为1,保持不变。
符号链接只是告诉系统:如果你是来找fileB的,请到fileA那边去。仅此而已。
如果删除fileA,那么该inode的链接数就减到0,则文件内容永久丢失了。
目录可以建立软链接。
perl里面使用readlink可以取得软链接所指向的位置。
硬链接和软链接都非常有用。但unix之外的很多系统对此两者都不支持。
这两种链接都可以用unlink移除,unlink只是从目录里移除该文件名的链接项目,将它的链接数递减,如有需要再释放inode。这也是为什么perl和php中的文件删除函数取名为 unlink 的原因。
分享到:
相关推荐
模拟UNIX文件系统是一项旨在在非UNIX环境中复制其核心文件操作特性的任务。这里,我们将深入探讨如何使用C语言来实现这一目标,重点关注基本的文件操作:创建、读取、更新和删除。 首先,我们需要理解UNIX文件系统...
在本课程设计中,我们将构建一个模拟的UNIX文件系统,以深入理解和实践操作系统的基本原理,尤其是文件系统的运作机制。这个模拟系统将涵盖一系列关键功能,包括磁盘分配、格式化、用户管理、目录操作和文件操作等。...
通过以上知识点的实现,你可以构建一个基本的类UNIX文件系统,提供与真实系统类似的接口和功能。不过,实际操作系统的文件系统远比这复杂,涉及更多的细节和优化,例如文件系统的挂载、文件系统检查、日志记录等。在...
本文将深入探讨UNIX文件系统的核心概念以及如何通过模拟实现这些特性。 首先,让我们理解UNIX文件系统的基础。在UNIX中,一切皆为文件,这意味着所有资源(包括硬件设备、目录、程序等)都被抽象为文件进行管理和...
模拟UNIX文件系统的设计与实现是一项复杂的工程,涉及到许多核心概念和技术。本项目旨在帮助理解UNIX文件系统的内部工作原理,并提供一个可供学习和实践的平台。以下是相关知识点的详细说明: 1. 文件系统结构: ...
【Unix文件系统模拟实验报告】 本实验旨在模拟Unix操作系统中的文件系统,使用户能够在终端界面上执行各种常见的Unix shell命令,如ls、chmod、chown、chgrp、chnam、pwd、cd、mkdir、rmdir、mk、cp、rm、cat、...
本项目“Unix文件系统模拟”旨在通过C语言实现一个简单的控制台应用程序,以模拟Unix文件系统的成组链接法(也称为i-node系统)。在这个模拟程序中,用户可以进行基本的文件操作,如创建、删除、读取和写入文件。...
通过上述功能的实现,"文件系统UNIX模拟程序"能够在非UNIX环境中提供与原生UNIX系统相似的文件操作体验,使开发者和用户能在任何平台上利用熟悉的UNIX文件系统工具进行工作。这不仅提高了生产力,也有利于跨平台的...
成组链接,也称为簇链接或块链接,是模拟UNIX文件系统中的一个重要概念。在UNIX系统中,文件并不像在Windows系统中那样连续存储,而是通过一种称为i节点(inode)的数据结构来管理。i节点包含了文件的所有元数据,如...
这一设计项目对于理解UNIX文件系统的核心设计理念和技术具有重要意义,它采用了分级树形结构、混合索引式文件结构以及成组链接法等高效管理策略。 1. **分级树形结构**:UNIX文件系统采用类似倒置树状结构,根目录...
本实验报告详细描述了如何实现一系列与Unix风格文件系统相关的操作,如用户登录、文件创建、读写、显示内容、删除、权限修改等。以下是对这些功能的详细解释: 1. **Login用户名 pwd用户登陆**:在Unix系统中,用户...
在计算机科学领域,Unix虚拟文件系统(Virtual File System,VFS)是Unix操作系统中的一个核心组件,它为上层应用程序提供了一个统一的接口,用于访问各种不同类型的文件系统,如本地磁盘文件系统、网络文件系统...
操作系统课程设计中,模拟Unix文件系统是一个常见的项目,旨在帮助学生深入理解文件系统的运作机制,以及如何在不同的平台上实现这些概念。在这个项目中,我们将在Windows平台上使用Visual C++(VC)作为开发环境来...
在进行类Unix文件管理系统的设计时,你需要实现这些基本功能,并考虑性能、安全性和扩展性。你可能需要编写内核级代码,或者使用用户空间的文件系统库(如FUSE,Filesystem in Userspace),这取决于课程的具体要求...
在本文中,我们将深入探讨如何在任何操作系统上模拟一个简单的Unix文件系统,以及“i节点”这一关键概念。 首先,让我们了解Unix文件系统的基础。在Unix系统中,一切皆为文件,包括硬件设备和进程。文件系统是组织...
在第三个实验中,我们将深入理解UNIX的文件系统结构。我们会学习`df`、`du`命令来检查磁盘空间使用情况,以及`mount`和`umount`命令来挂载和卸载文件系统。此外,还将涉及软链接和硬链接的区别,以及如何使用`tar`...
模拟unix操作系统中的文件系统功能,在终端界面上用户可以象unix的shell命令一样输入一些命令,如输入ls 显示文件目录,chmod改变文件权限,chown改变文件拥有者,chgrp改变文件所属组,chnam改变文件名,pwd显示...
在本项目中,我们关注的是设计与实现一个简化的Unix文件系统。Unix文件系统是操作系统的核心组成部分,它负责管理和组织存储设备上的数据,为用户提供访问和管理文件的接口。这里,我们将探讨Unix文件系统的基本原理...