inode 、软(硬)链接及fork与vfork

一、inode、软/硬链接

(一)、1、inode

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候【不会一个个扇区地读取,这样效率太低】,而是一次性连续读取多个扇区,即一次性读取一个"块"。这种由多个扇区组成的"块",是文件存取的最小单位。

文件数据都储存在"块"中。而文件的创建者、文件的创建日期、文件的大小等等信息需要一个区域进行存储文件信息。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

2、inode内容

inode包含文件的元信息,内容如下【除了文件名以外的所有文件信息】:

* 文件的字节数

* 文件拥有者的User ID

* 文件的Group ID

* 文件的读、写、执行权限

* 文件的时间戳【ctime指inode上一次变动的时间;mtime指文件内容上一次变动的时间;atime指文件上一次打开的时间】

* 链接数【有多少文件名指向这个inode】

* 文件数据block的位置

    • stat命令,查看某个文件的inode信息:    stat text.txt

4、inode号码

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。

实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

    • 使用ls -i命令,可以看到文件名对应的inode号码:   ls -i text.txt

5、目录文件

Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

  • ls 命令只列出目录文件中的所有文件名:     ls /etc
  • ls -i命令列出整个目录文件,即文件名和inode号码:    ls -i /etc
  • 如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。

    ls -l命令列出文件的详细信息:     ls -l /etc

(二)软/硬链接

I.  硬链接

在Linux中,多个文件名指向同一索引节点是存在的,一般这种连接就是硬连接

硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要的文件,以防止“误删”的功能。

硬链接(实际文件的一个别名),它的作用是防止真实文件被误操作,给一个文件建立硬链接后,他们互为别名,删除其中任一个,只会删除该别名,实际文件并不会被删除。因为只是别名没有任何其他信息,所以并不占用原始文件大小的磁盘空间。

【硬链接】 可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。

    • 创建硬链接:    ln 源文件 目标文件

运行后,源文件与目标文件的inode号码相同,都指向同一个inode。

inode信息中有一项"链接数",记录指向该inode的文件名总数(若删除文件,则其值减一)。当这个值减到0,则表明没有文件名指向这个inode,此时系统回收 该inode号码 及其所对应 block区域。

硬链接与真实文件的大小和创建日期完全相同,类似于copy,同步更新。

II. 软链接

软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。软链接是另一个文件,作用可以理解为一个指针,作用在这个文件上的操作除了删除都直接转向实际指向文件,由于是一个真实的文件所以占用磁盘空间 。

    • ln -s命令可以 创建软链接。
    • ln -s 源文文件或目录 目标文件或目录

命令:ln –s /etc/inittab /test/inittab.soft

查看:ls –l /etc/initab /test/inittab.soft

软链接类似于windows的快捷方式,—>表示真实文件的地址(访问的就是源文件,与源文件同步)

III. 区别与联系:

1.区别:

(1)软链接可以跨文件系统 ,硬链接不可以

(2)inode 。硬链接不管有多少个,都指向的是同一个inode,会把inode链接数增加 ,只要inode的链接数不是 0,文件就一直存在。 当修改源文件或者链接文件任何一个的时候 ,其他的文件都会做同步的修改。因为硬链接建立后,文件互为别名,则其不占磁盘空间。

软链接不直接使用inode号作为文件指针,而是使用文件路径名作为指针(软链接跟源文件的inode不一样)。所以删除链接文件对源文件无影响,但是删除源文件,链接文件就会找不到要指向的文件 。软链接有自己的inode,并在磁盘上有一小片空间存放路径名.

(3)软链接可以对一个不存在的文件名进行链接 。

(4)软链接可以对目录进行链接。

2.联系:

1):硬链接拷贝

拷贝与真实文件的创建日期不同。

2):硬链接同步更新

软连接类似于快捷方式,访问的就是源文件,所有肯定是跟源文件同步。

而硬链接类似于拷贝,但是却拥有同步更新的功能。

【硬链接文件和源文件的i结点数字相同,而内核是根据文件的i结点来标识文件的,这两个   文件的i结点相同,所有被认为是一个文件,所有同时写入和修改数据】。

3):删除源文件后,对硬链接和软连接的影响

软连接类似快捷方式,所有当源文件不存在时,它也无效。

而硬链接属于拷贝,仍然存在。

4):硬链接要求

硬链接不能跨文件系统,即不能跨分区,类似于windows内不能将C盘的硬链接放在D盘。而软链接可以放在任何文件系统。

二、fork()与vfork() ----- 【创建进程】

  • 1. fork  ():子进程拷贝父进程的数据段,代码段, 创建的 子进程 是父进程的副本

vfork ():子进程与父进程共享数据段 (子进程没有调用exec和exit之前,相当于线程的概念,此时父进程阻塞等待 )

  • 2. fork () :父子进程的执行次序不确定 (父子进程是同级别的,没有前后限制)

vfork() :保证子进程先运行,在调用exec 或exit 之前 与父进程数据是共享的,在它调用exec或exit 之后 父进程才可能被调度运行,之后顺序无限制。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。

  • 3. fork():使用了 “写时拷贝技术” ,创建了虚拟地址空间

vfork():不需要创建虚拟地址空间

[ 写时复制技术:内核只为新生成的子进程创建虚拟空间,它们来复制于父进程的虚拟空间,但是不为这些段分配物理空间,它们共享父进程的物理空间,当父子进程中有写内存的行为发生时,再为子进程相应的段分配物理空间。]

  • 4.【同】两者被调用一次,但是返回两次。两次返回的唯一区别是子进程的返回值是0,而父进程的返回值则是新子进程的进程ID。

返回值:子进程 --> 0 ,父进程 --> 子进程ID  ,错误 --> (-1)

  • 5.  return 和 exit 的区别:

1). exit用于结束正在运行的整个程序,返回参数(一般返回值为0表示正常退出,非0表示非正常退出),把控制权交给操作系统

return 是退出当前函数,返回函数值,把控制权交给调用函数。

2). exit 是系统调用级别,它表示一个进程的结束;

return 是语言级别的,它表示调用堆栈的返回。

3). 在main函数结束时,会隐式地调用exit函数,所以一般程序执行到main()结尾时,则结束主进程。

exit将删除进程使用的内存空间,同时把错误信息返回给父进程。

4). 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit多数情况下现象是一致的。

时间: 2024-10-11 21:55:00

inode 、软(硬)链接及fork与vfork的相关文章

LINUX系统中,软/硬链接和inode的一些关系。

前言:众所周知硬盘是计算机不可缺少的一部分,不管这个计算机上运行着的是什么系统,但是存储设备,都是必不可少的,而inode则是磁盘存储时无法替代的一部分.所以我想谈一下在linux系统中关于inode和软/硬链接的一些个人见解. 目录: 什么是inode 什么是硬链接 什么是软链接 软/硬链接在linux上的基本使用方法 软/硬链接和inode的联系 一,什么是inode 理解inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存5

find,vim的编程设置,SUID,SGID,SBIT,软.硬链接,重定向

1.find命令: 基本格式:find 路径 选项 参数 -name  : 根据文件名字查找 -size  :根据文件大小查找    +(比这个大)  -(比这个小) -type  :根据文件类型查找    - 普通文件 -d 目录 -l 链接文件 -c 字符设备文件 -b 块设备文件 -p 管道文件 -uid   : 根据用户的UID查找 -gid   :根据用户所属组查询 -nouser :查询没有所属用户的 -nogroup:查询没有所属组的 -perm  :根据权限查找 最后可以-exe

Linux下inode的含义 以及基于inode的硬链接 软链接

文件系统的运作与操作系统的档案数据有关,较新的操作系统的档案数据除了档案实际内容外,通常含有非常多的属性,如Linux操作系统的档案权限(rwx)与文件属性(拥有者.群组.时间参数等).文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,实际数据则放置到data block 区块中.另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量.使用量.剩余量等. 每个inode与block都有编号,三个数据的意义为:

inode及硬链接和软链接

*inode* 当我们需要打开一个文件的时候,往往是输入打开文件的命令加上文件名,这时操作系统就会去硬盘上查找对应的文件,这里应该知道,Unix/Linux系统内部并不使用文件名来查找相应的文件,而是通过一个叫"文件索引节点"的inode来进行查找,而这个inode用来存放文件的元信息,比如文件的创建者.文件的size和文件的时间信息等等,而每一个文件也相应的对应一个inode. *inode内容* 一个文件的inode往往包含以下信息 文件名和文件大小 文件链接数 文件的所属者Uid

软/硬链接指令:ln

语法: ln  [选项]  原文件  目标文件 选项: -s 创建软连接(创建软链接时,若所在文件夹不一致,原文件要使用绝对路径) 硬链接特征: 1.拥有相同i节点和存储block块,可以看成是同一个文件 2.可以通过i节点来识别硬链接 3.不能跨分区 4.不能针对目录使用 软链接特征: 1.类似windows快捷方式 2.拥有自己的i节点和Block块,但数据块中只保存原文件的文件名和i节点号,并没有实际的文件数据 3.lrwxrwxrwx 4.删除原文件,软链接不能使用

特殊权限set_uid set_gid stick_bit 软/硬链接文件

一.特殊权限set_uidset_uid:作用是保证普通用户临时拥有该命令所有者的身份,它就会临时拥有root用户的身份(给一个文件设置set_uid的前提是保证该文件是一个二进制.可执行的文件)[[email protected] ~]# which passwd/usr/bin/passwd[[email protected] ~]# ls -l /usr/bin/passwd-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

inode 及软链接、硬链接

inode: 用来存储文件的元信息的索引节点.包括文件的创建者.创建日期.文件的大小等.Linux下一切皆文件,每个文件都有其对应的inode. inode内容: 文件的字节数 文i件拥有者的UserID 文件的GroupID 文件读.写.执行权限 文件的时间戳:ctime(inode上一次变动时间) mtime(文件内容上次变动的时间) atime(文件上次打开时间) 链接数,即有多少文件名指向这个inode 文件数据block的位置 inode大小: 每个inode节点的大小,一般是128字

软链接与硬链接

文件引用模型 在linux中,一切皆文件,而文件包含元数据(metedata)和用户数据(user data).元数据中的inode号是系统标识和获取用户数据的唯一凭证,而文件名仅是为了方便用户记忆和使用.为了管理和组织文件,目录被引入系统,也正是在目录中记录了文件名和inode号的对应关系,可用如下模型表示: (注:可以通过stat和ls -i命令获得文件的inode号) *为了解决文件的共享使用,引入了软链接(soft link 或 symbolic link)和硬链接(hard link)

RHCE系列之文件管理----硬链接和软链接

Linux 文件系统最重要的特点之一是它的文件链接. 链接是对文件的引用,这样你可以让文件在文件系统中多处被看到. 在 Linux 中,链接可以如同原始文件一样来对待.链接可以与普通的文件一样被执行.编辑和访问.对系统中的其它应用程序而言,链接就是它所对应的原始文件.当你通过链接对文件进行编辑时,你编辑的实际上就是原始文件.切记,链接并不是文件的副本. 在linux系统中,链接可分为两类:一类被称为硬链接(Hard Link),另一类被称为软链接或符号链接(Symbolic Link). 硬链接