文件和目录详解(七)---符号链接和硬链接

  在linux系统中,符号链接也是文件的一种。

  linux操作系统并不是通过文件名来确定一个文件的,而是通过inode号码来确定的。一个文件的inode信息中并不包括文件名,其文件名是存放在其上层目录的的目录项中。而文件名只是一个指向文件inode的指针,用户通过文件名找到相应的文件,也就是硬链接。所以可以创建多个文件名去指向同一个文件inode,这些个文件名都是硬链接,所有指向同一个源文件的硬链接文件的inode都是一样的,在inode中会有统计指向该inode的链接数,如果该链接数为0,则意味着用户删除了该文件,系统会回收其inode号码。所以如果将其中一个硬链接也就文件名删除后,还可以通过其他的硬链接来访问此文件inode。

  符号链接不同,符号链接不是直接指向文件inode的,符号链接有自己本身的一个inode号码,不同于源文件的inode号码,这个符号链接文件中的内容是源文件的路径名,通过路径名找到源文件。所以当删除源文件或者移动源文件时,此时符号链接就失效了。符号链接不会增加源文件的链接数目。

======================================================

  不同的系统调用在打开符号链接文件的时候会有不同的处理情况,有的会跟随符号链接文件,有的不会跟随符号链接文件。跟随符号链接文件就是说操作的实际上是符号链接指向的文件。不跟随符号链接文件就是说操作的就是符号链接文件本身。

时间: 2024-08-27 15:03:11

文件和目录详解(七)---符号链接和硬链接的相关文章

文件和目录详解(六)---link和unlink函数详解

为了解释清楚这两个函数,首先必须要有清楚 目录项 和 inode节点 两个概念.目录文件中存放的是文件名和对应的inode号码,统称为目录项.link和unlink函数分别是用来创建硬链接和删除硬链接的.两个函数中的操作都是原子操作. ====================================================== 函数原型: 函数参数: oldpath:源文件路径名 newpath:新文件路径名 返回值: 当oldpath不存在或者newpath存在时调用失败返回

linux命令大全之ln命令详解(创建软链接和硬链接)

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接,分为软链接.硬链接.软链接相当于windows的快捷方式,下面是使用方法和示例 ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间. 1.命令格式: 

文件和目录详解(一)---stat、lstat和fstat函数详解

记录文件属性的相关数据结构都是存在于内核空间中,在进程的用户空间中是直接访问不到这些数据结构的,只能通过操作系统提供的系统调用来访问.而stat等函数就是操作系统为用户进程提供的用来获取文件属性的系统调用. ======================================================= 函数原型: 函数参数: path:要操作文件的路径名 fd:要操作的文件描述符 buf:存放读取出来的文件属性 返回值: 调用成功时返回 0 调用失败时返回 -1 ========

文件和目录详解(十)---chdir和getcwd函数详解

对于每个进程来说,都有一个当前工作目录,进程中所有的相对文件路径名都会以这个当前工作目录为起始点.一般来说,默认的当前工作目录就是创建进程时所处的目录. 使用 chdir 函数可以修改进程的当前工作目录,使用 getcwd 函数可以用来获取当前工作目录的绝对路径名. ===================================================== 函数原型: 函数参数: path:要修改的目录路径 返回值: 调用成功时返回 0 调用失败时返回 -1 ==========

文件和目录详解(八)---symlink和readlink函数详解

symlink 函数和 readlink 函数主要是针对符号链接文件的操作.symlink 函数用来创建符号链接文件,和 link 文件是对应的.readlink 函数用来读取链接文件本身的内容(也就是符号链接指向的文件的文件名). ===================================================== 函数原型: 函数参数: oldpath:源文件的路径名 newpath:符号链接文件的路径名 返回值: 调用成功时返回 0 调用失败时返回 -1 ======

文件和目录详解(九)---三种文件时间以及utime函数详解

文件有三种时间,分别是: 文件数据的最后访问时间------read函数会修改 文件数据的最后修改时间------write函数会修改 i 节点状态的最后更改时间----unlink函数会修改 要区分文件数据的修改时间和 i 节点状态更改时间,因为文件数据和 i 节点信息是分开存储的,有些系统调用只会影响 i 节点中的信息,而不会影响文件的数据部分,比如 unlink 函数. 使用 utime 函数可以修改一个文件的三种时间. ==================================

文件和目录详解(三)---access函数详解

当在进程中使用open打开一个文件的时候,内核在测试权限的时候是基于进程的有效用户ID 来测试的,但是如果我们想要测试进程的实际用户 ID 对文件的权限的时候该怎么办?Linux提供了access函数来实现此功能.当没有设置set-user-id位的时候,实际用户和有效用户是一致的.设置了set-user-id位后,实际用户和有效用户才有可能不一样. ======================================================= 函数原型: 函数参数: pathn

文件和目录详解(五)---chmod和fchmod函数详解

chmod和fchmod函数分别可以用来修改文件和一个已经打开的文件的文件权限位. ======================================================= 函数原型: 函数参数: path:要操作的文件路径名 fd:要操作的文件描述符 mode:要修改的文件权限 返回值: 调用成功时返回 0 调用失败时返回 -1 ======================================================= 参数mode可以为下列宏的组合

文件和目录详解(四)---umask函数详解

umask函数用来设置权限屏蔽位.在进程中使用open或者creat函数来创建文件的时候可以为文件指定文件权限,而这些权限会受到权限屏蔽位的影响. 比如说我们想要设置的权限为0777,而umask的值为0002,那么最终创建的文件的权限将会是0775. ====================================================== 函数原型: 函数参数: mask:要设置的权限屏蔽位 返回值: 返回之前的权限屏蔽位,umask函数是少有的没有出错返回的函数 ====