• Linux系统编程10_硬链接与软链接


    理解硬链接和软链接概念前,需要先了解文件和iNode相关背景知识:

    Linux系统编程5_文件描述符:https://www.cnblogs.com/grooovvve/p/14076856.html

    Linux系统编程9_iNode机制:https://www.cnblogs.com/grooovvve/p/14214029.html

    索引节点(inode)
    要了解链接,我们首先得了解一个概念,叫索引节点(inode)。

    在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。

    文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。

    硬链接:

    保存在系统的每一个文件,系统会对该文件创建一个索引节点。
    在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。
    硬链接是指通过索引节点对文件的链接。
    硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。

    对于硬链接的读写和修改等操作和软链接是一样的。
    在硬链接中如果删除原文件会引起“引用计数”减1的变化,只要“引用计数”不为零,则硬链接文件仍然存在,而且保留了原有的内容 ,这样就可以防止误操作删除源文件。但是硬链接文件只能在同一个文件系统中。

    软链接:

    符号链接又称为软链接,和windows的快捷方式相似,符号链接文件中并不包括实际的文件数据,而只是包括了它指向文件的路径。

    它可以链接到任意文件和目录,包括处于不同文件系统的文件以及目录。当用户对链接文件操作时,系统会自动的转到对源文件的操作,但是删除链接文件时,并不会删除源文件。

    软链接会真正建立自己的 inode 索引和 block,所以软链接和源文件的 inode 号是不一致的,

    而且在软链接的 block 中,写的不是真正的数据,而仅仅是指向文件的文件名及 inode 号。



    硬链接的特点:

    硬链接不能跨文件系统(分区)建立,因为在不同的文件系统中,inode 号是重新计算的。

    硬链接不能链接目录,因为如果给目录建立硬链接,那么不仅目录本身需要重新建立,

    目录下所有的子文件,包括子目录中的所有子文件都需要建立硬链接,这对当前的 Linux 来讲过于复杂。

    硬链接不会建立新的 inode 信息,也不会更改 inode 的总数。

    硬链接的限制比较多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除 inode 号是一样的之外,

    没有其他明显的特征。这些特征都使得硬链接并不常用,大家有所了解就好。



    相关操作:

    ln命令来建立硬链接。

    //源文件是被链接的文件,注意:软链接的文件必须写成绝对路径

    ln 源文件 目标文件 

    ln -s 源文件 目标文件

    ls -i     //可以查看inode号码,inode 号就相当于文件 ID

    软链接的标志非常明显,首先,权限位中"l"表示这是一个软链接文件;

    其次,在文件的后面通过 "->" 显示出源文件的完整名字。所以软链接比硬链接的标志要明显得多;

    而且软链接也不像硬链接的限制那样多,比如软链接可以链接目录,也可以跨分区来建立软链接



    查找文件的步骤:

    当我们查找一个文件,比如 /root/test 时,要经过以下步骤:

    1、首先找到根目录的 inode(根目录的 inode 是系统已知的,inode 号是 2),然后判断用户是否有权限访问根目录的 block。

    2、如果有权限,则可以在根目录的 block 中访问到 /root 的文件名及对应的 inode 号。

    3、通过 /root/ 目录的 inode 号,可以查找到 /root/ 目录的 inode 信息,接着判断用户是否有权限访问 /root/ 目录的 block。

    4、如果有权限,则可以从 /root/ 目录的 block 中读取到 test 文件的文件名及对应的 inode 号。

    5、通过 test 文件的 inode 号,就可以找到 test 文件的 inode 信息,接着判断用户是否有权限访问 test 文件的 block。

    6、如果有权限,则可以读取 block 中的数据,这样就完成了 /root/test 文件的读取与访问。



    参考链接:

    Linux ln命令:在文件之间建立链接(硬链接和软链接)详解版:http://c.biancheng.net/view/740.html

  • 相关阅读:
    ollydbg设置断点经验总结
    proxifier 设置代理转发 对于IP地址的转发 也可以指定 这下C2裸IP的伪造可以做了
    畅捷通0day勒索攻击事件 几个IOC都只是漏洞的 勒索病毒本身没有看到ioc
    使用NSP机制解决windows7 dns溯源问题
    WMI后门技术的攻击与检测
    使用Windbg OllyDbg从头调试windows服务
    “漏洞利用之王”HolesWarm挖矿木马——非常典型的代理挖矿
    Proxychains.exe Proxychains for Windows ——通过给动态链接的程序注入一个 DLL,对 Ws2_32.dll 的 Winsock 函数挂钩子的方式来将应用程序的连接重定向到 SOCKS5 代理
    Lua 面向对象(实现类的创建和实例化、封装、继承、多态)
    lua ngx shared——Nginx本地缓存用法
  • 原文地址:https://www.cnblogs.com/grooovvve/p/14214098.html
Copyright © 2020-2023  润新知