精华内容
下载资源
问答
  • Linux的两种链接

    千次阅读 2018-11-13 14:59:56
    Linux 链接两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link),也就是软链接。默认情况下,ln 命令产生硬链接,ln -s命令产生软链接。   【硬连接】硬连接指通过索引节点来进行连接。...

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link),也就是软链接。默认情况下,ln 命令产生硬链接,ln -s命令产生软链接。

     

    【硬连接】硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

    硬连接有 2 个限制:

    • 不允许给目录创建硬链接
    • 只有在同一文件系统中的文件之间才能创建链接。 即不同硬盘分区上的两个文件之

        不能够建立硬链接。这是因为硬链接是通过结点指向原始文件的,而文件的结点在不       同的文件系统中可能会不同。

     

    【软连接】软链接又叫符号链接,它实际上是一个特殊的文件,有点类似于 Windows 的快捷方式。这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。

    链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象",链接

    文件甚至可以循环链接自己。类似于编程语言中的递归。

     

    实验部分:

    一起通过实验加深理解

    [root@foundation101 mnt]# touch file1        #创建一个测试文件 file1
    
    [root@foundation101 mnt]# ln file1 file2       #创建file1的一个硬链接文件file2
    
    [root@foundation101 mnt]# ln -s file1 file2     #创建file1的一个软链接文件file3
    
    [root@foundation101 mnt]# ls -li             # -i 参数显示文件的 inode 节点信息
    
    total 0
    
    404508247 -rw-r--r--. 2 root root 0 Jan 22 23:24 file1
    
    404508247 -rw-r--r--. 2 root root 0 Jan 22 23:24 file2
    
    404508260 lrwxrwxrwx. 1 root root 5 Jan 22 23:24 file3 -> file1

    从上面的结果中可以看出,硬链接文件file2与原文件file1的 inode 节点相同,均为404508247 ,然而软链接文件的 inode 节点不同。

    [root@foundation101 mnt]# echo nihao > file1
    
    [root@foundation101 mnt]# cat file1
    
    nihao
    
    [root@foundation101 mnt]# cat file2
    
    nihao
    
    [root@foundation101 mnt]# cat file3
    
    nihao
    
    [root@foundation101 mnt]# rm -rf file1
    
    [root@foundation101 mnt]# cat file2
    
    nihao
    
    [root@foundation101 mnt]# cat file3
    
    cat: file3: No such file or directory

    通过上面的测试可以看出:当删除原始文件法file1后,硬链接file2不受影响,但是软链接file3文件无效

     

    总结:

    1).删除软链接file3,对 file1,file2无影响;

    2).删除硬链接 file2,对 file1,file3 也无影响;

    3).删除原文件 file1,对硬链接 file2 没有影响,导致软链接 file3失效;

    4).同时删除原文件file1,硬链接file2,整个文件会真正的被删除。

    展开全文
  • 命令使用1)链接视图下可重定位目标文件2)执行视图下可执行目标文件 一.知识储备 1.目标文件概述     目标文件是按照特定目标文件格式来组织,各个系统目标文件格式都不同。现代x86-...

    一.知识储备

    1.目标文件概述

        目标文件是按照特定的目标文件格式来组织的,各个系统的目标文件格式都不同。现代x86-64 Linux和Unix系统使用可执行可链接格式——ELF,且有以下三种形式:

    • 可重定位目标文件
    • 可执行目标文件
    • 共享目标文件

    接下来的主题就是讲解两种视图下的ELF文件的格式

    2.需要用到的命令

    ps:对于linux系统内的命令,可以用man 命令名称来查看相应文档!
        这里用到的查看命令是readelf,其相应的文档可用“ man readelf" 查看。
    摘抄用到的命令:
    readelf -h
    readelf -S
    readelf -t
    readelf -l

    在这里插入图片描述

    二.查看目标文件

    1.文件视图

    要查看文件有两种视图:ELF的链接视图和ELF的执行视图,分别对应可重定位的目标文件
    可执行的目标文件
    1)ELF的链接视图

    2)ELF的执行视图
    在这里插入图片描述

    2.代码素材+可执行文件生成

    C程序1:main.c

    /* main.c */
    /* $begin main */
    int sum(int *a, int n);
    
    int array[2] = {1, 2};
    
    int main() 
    {
        int val = sum(array, 2);
        return val;
    }
    /* $end main */
    
    

    C程序2:sum.c

    /* sum.c */
    /* $begin sum */
    int sum(int *a, int n)
    {
        int i, s = 0;
        
        for (i = 0; i < n; i++) { 
            s += a[i];
        }
        return s;
    }        
    /* $end sum */
    
    

    命令:
    gcc -c main.c -o main.o
    gcc -c sum.c -o sum.o
    gcc -static -o progc main.o sum.o
    在这里插入图片描述

    3.命令使用

    1)链接视图下的可重定位目标文件

    使用readelf -h main.o查看该文件头的信息
    文件内容:
    在这里插入图片描述
        1.Magic是一个16字节的数组,前面的四个字节为魔数(确定文件类型或格式):为7f 45 4c 46(不同平台下的目标文件魔数不一样,Unix下的a.out格式的魔数为:01H 07H,Windows下的PE格式的魔数为4DH 5AH)
        可以用魔数来确认文件类型是否正确
        2.类别:ELF64
        3.main.o的格式类别是64位版本的,数据采用补码(带符号数)和小端形式
        4.版本为1
        5.操作系统是UNIX-System V
        6.版本类型为REL(可重定位文件)
        7.系统架构::Advanced Micro Devices X86-64
        8.程序头起点: 0 (bytes into file)(因为这是一个可重定位文件,不是可执行的)
        9.Start of section headers: 696 (bytes into file)指定节头表的偏移地址(下面可以用命令来看的)
        10.Size of this header: 64 (bytes)(这个ELF头的大小为64字节)
        11.Size of section headers: 64 (bytes) 节头表中每个节的大小
        12.Number of section headers: 12 节头表中节的数量
        13.Section header string table index: 11 .strtab在节头表中的索引位置

    用readelf -S main.o命令来读节头表信息:

    在这里插入图片描述
    和ELF头给出的信息一致,节头表中有12个节!(可结合ELF链接视图和节头表中每项的名称查看具体的节)
    每个节给出了:”名称 类型 地址 偏移量 大小 全体大小 旗标 链接 信息 对齐 “ 等信息,每一个表象就是64个字节的数据结构!
    具体结构如下:(32位系统)
    图片引用自中国大学MOOC袁春风的计算机系统基础”系列课程的pdf资料
    分析:.strtab这个表项的号为10,说明在节头表的第11项,符合前面结果

    2)执行视图下的可执行目标文件

    使用readelf -h progc查看可执行目标文件的头(这里的progc是我的一个可执行文件的名称)
    在这里插入图片描述
    注意到可执行文件的格式图,与可重定位文件的格式区别不大,但是有一点区别!
    其中:
    1.ELF头中的 ”入口点地址:”给除了具体的地址0x401ac0(因为它是可执行的,无需重定位ie可被加载到内存)
    2.多了 程序头表,也称段头表,是一个结构数组。
    3.多了.init节节,用来定义_init函数,可用于进行可执行文件开始执行时的初始化工作

    使用readelf -S progc查看可执行目标文件的节头表(这里的progc是我的一个可执行文件的名称)

    在这里插入图片描述
    这里没有截全,因为通过看ELF头,可知这里有29个节。

    使用:readelf -l progc 查看程序头部表
    在这里插入图片描述注:
    offset:目标文件中的偏移
    VirtAddr:虚拟地址
    PhysAddr:物理地址
    FileSiz:目标文件中的段的大小
    MemSiz :内存中的段大小
    Flags Align:对齐方式
    本博客中部分ppt演示照片引用自中国大学mooc南京大学袁春风老师的ppt

    参考资源:
    1.中国大学MOOC袁春风的《计算机系统基础(一)》
    2.书籍:机械工业出版社——《深入理解计算机系统》

    展开全文
  • Linux下存在中连接文件,一可以看似Windows中快捷方式功能的文件,另一是利用文件系统中inode连接产生新文件名(硬链接)。 硬链接(Hard Link) 每个文件都会占用一个inode来保存一些信息,这些信息...

    在Linux下存在两中连接文件,一种可以看似Windows中的快捷方式功能的文件,另一种是利用文件系统中inode连接产生的新文件名(硬链接)。

    1. 硬链接(Hard Link)
      每个文件都会占用一个inode来保存一些信息,这些信息可以指向存放实际文件内容的block。读取文件内容必须经由目录记录的文件名来指向其inode,硬链接说白了就是多个不同文件名指向同一个inode。
    建立硬链接----#ln 链接目标路径   建立的链接文件路径
    

    建立一个链接到/etc/bashrc的硬链接文件bshrc
    在这里插入图片描述
    不知道发现、/etc/bashrc与bashrc的特点没?两者的inode同为25238855且权限属性都一样,除了文件路径不同其他无区别。图中也显示了连接数2,指明当前有多少个文件名连接到这个inode号码。如果我删除其中一个会怎样?结果是不怎样,因为删除一个inode还是存在的啊,可以通过另一个文件名读取这个inode区块的内容。硬链接也会有限制性,它不可以跨文件系统链接,不能链接目录,链接目录会增加环境复杂度。
    在这里插入图片描述

    1. 符号链接(Symbolic Link)
      符号链接就是建立个独立文件,该文件使数据读取指向它链接的那个文件的文件名,注意区别于硬链接,硬链接是连接到那个inode。
    符号链接语法------#ln -s  链接目标路径   建立的链接文件路径
    

    在这里插入图片描述
    这张图可以看出区别了吧,两个文件指向的inode不一样,因为链接文件是个独立的文件所以会占用一个inode区块,而且文件权限也不一样,注意大小,链接文件的大小只有11,而文件名刚好11个字符,11B。当/etc/bashrc删除后链接文件就无法读取到内容了,可以把/etc/bashrc想成链接桥梁,没有它就读取不到文件内容了。

    在这里插入图片描述
    注:如果修改符号链接文件修改的是原始文件,比如修改了链接文件并保存后,那么原始文件就被修改了。

    通过上述可以基本了解到两者文件链接,上面两幅自画图并不是严格意义上来画的,能比较容易读懂。

    展开全文
  • 转自 ... 一、 链接的分类: 链接分为软链接和硬链接: 1> 软链接: 软链接又叫符号链接,这类文件包含了另外一个文件的路径。可以连接任意文件和目录,也可以连接不同文...

    转自 http://topic.csdn.net/u/20120930/11/3d9e5a0d-6dad-4dee-8a9d-6ad50f52f69e.html?r=79806698

     

    一、 链接的分类:
    链接分为软链接和硬链接:
      1> 软链接:
    软链接又叫符号链接,这类文件包含了另外一个文件的路径。可以连接任意文件和目录,也可以连接不同的文件系统文件,也可以连接不存在的文件,还可以循环连接自己。
      2> 硬链接是一个已存在文件的另一个名字。注意:
      1)只能在同一个文件系统中的文件才能创建硬链接;
    2)不允许给目录创建硬链接。
    二、在shell界面使用ln命令创建链接
      当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:
      ln –s /bin/less /usr/local/bin/less,其中-s 是代号(symbolic)的意思。
    如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls –l命令去察看,就可以看到显示的link的路径了。

    这里有两点要注意:
    1>ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
    2>ln的链接又软链接和硬链接两种:
    1)软链接创建指令:ln –s filename link_filename,意为创建一个名为“link_filename”指向 “filename”的链接文件,它只会在你选定的位置上生成一 个文件的镜像,类似windows下的快键方式。
    2)硬链接创建指令:ln filename link_filename,没有参数-s, 它会在 你选定的位置上生成一个和源文件大小相同的文件。

    无论是软链接还是硬链接,文件都保持同步变化。



    指令参数详细说明:
      -f : 链结时先将与 dist 同档名的档案删除
      -d : 允许系统管理者硬链结自己的目录
      -i : 在删除与 dist 同档名的档案时先进行询问
      -n : 在进行软连结时,将 dist 视为一般的档案
      -s : 进行软链结(symbolic link)
      -v : 在连结之前显示其档名
      -b : 将在链结时会被覆写或删除的档案进行备份
      -S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
      -V METHOD : 指定备份的方式
      --help : 显示辅助说明
      --version : 显示版本


    三、 C程序中使用link函数创建
    link函数申明如下:
    #include <unistd.h>
    int link (const char * oldpath, const char * newpath);
    函数说明:link()以参数newpath 指定的名称来建立一个新的链接(硬链接)到参数oldpath 所指定的已存在文件. 如果参数newpath 指定的名称为一已存在的文件则不会建立链接。
    返回值:成功则返回0, 失败返回-1, 错误原因存于errno。
    错误代码:
     1、EXDEV 参数oldpath 与newpath 不是建立在同一文件系统.
     2、EPERM 参数oldpath 与newpath 所指的文件系统不支持硬连接
     3、EROFS 文件存在于只读文件系统内
     4、EFAULT 参数oldpath 或newpath 指针超出可存取内存空间.
     5、ENAMETOLLONG 参数oldpath 或newpath 太长
     6、ENOMEM 核心内存不足
     7、EEXIST 参数newpath 所指的文件名已存在.
     8、EMLINK 参数oldpath 所指的文件已达最大连接数目.
     9、ELOOP 参数pathname 有过多符号连接问题
     10、ENOSPC 文件系统的剩余空间不足.
     11、EIO I/O 存取错误.
     
    范例:
     /* 建立/etc/passwd 的硬连接为pass */
     #include <unistd.h>
     main()
     {
      link("/etc/passwd", "pass");
     } 


    本文转自    拖鞋崽      51CTO博客,原文链接:http://blog.51cto.com/1992mrwang/1011814

    展开全文
  • Linux文件的链接

    2020-08-30 19:46:38
    Linux两种链接文件,符号链接(软链接)和硬链接,符号链接类似Windows下快捷方式。硬链接是通过文件系统inode链家来产生新文件名,而不是产生新文件。 inode:记录文件属性,一个文件一个inode。inode...
  • 链接命令:ln link缩写 链接最根本目的是快捷方式 软连接用多 -s 创建软连接 ll -i查看详细信息 包括i结点信息 硬链接特点:完全是同一个文件 删除一个另一个还在  相同i节点和block存储块 可通过i节点...
  • linux符号链接文件

    万次阅读 2018-01-26 09:59:42
    链接两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link,也叫做软链接)。默认情况下,ln命令产生硬链接。 (一)硬链接 1.产生硬链接的语法ln 源文件 目标文件 (注意:不能为目录...
  • linux的链接文件

    2013-12-10 17:49:26
    #####linux的链接文件##### 【链接引入】 linux的链接文件类似于c++语言中指针和引用。链接文件可以分为两种:符号链接和硬链接。这两种文件都是一种为己存在文件,创建一个新访问途径。也就是说访问链接...
  • 两种链接方式本质区别在于inode处理上。 Linux通过文件名对应inode来访问文件内容。硬链接则将链接文件链接到源文件inode上,这样链接文件便能访问到原文件内容。并且将其中链接文件或源文件删除后...
  • Linux文件的链接和硬链接

    千次阅读 2015-07-27 13:29:11
    Linux链接概念Linux链接两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。1.1索引节点索引节点是指在许多类Unix文件系统中一种数据结构。每个索引...
  • Linux的链接文件

    千次阅读 2011-03-05 22:00:00
    Ln命令用来在文件之间创建链接,默认为创建硬链接(目录不能创建硬链接),使用选项-s创建符号链接。讲ln以前,我们先来... <br /> 二、如何理解两种链接文件的两种不同指向?如果了解 linux里文件的存
  • linux系统中有一种文件叫做链接文件,可以为解决文件共享使用。链接方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link)。 一、基本概念 1、硬链接 开始之前,...
  • linux的链接文件

    2012-05-23 18:05:34
    Linux的链接文件有点类似windows系统下面快捷方式,但是又不完全一样,链接文件两种,一种为硬连接(Hard link),另外一种是符号链接(Symboliclink)。 符号链接又称为软连接,符号链接文件中并不包括实际...
  • 两种链接的本质区别在于inode。以下是详细介绍: 硬链接:当系统要读取一个文件时,会先读inode信息,然后再根据inode中信息到块领域将数据取出来。而硬链接是直接再建立一个inode链接到文件放置块领域,即...
  • linux的文件链接

    2017-04-16 14:07:52
    linux系统中链接两种,分别是软连接和硬链接,操作命令是ln(link缩写),要注意是该命令只能对文件进行操作操作的文件也一定要用绝对路径。顺便说一下绝对路径和相对路径,绝对路径就是从根目录下一直到...
  • 链接文件Linux文件系统的一个优势,如果要在系统上维护同一文件的两份或者多份,除了保存多份单独的物理文件副本之外,还可以采用保存一份物理副本和多个虚拟副本的方法,这种方法称为链接。链接是目录中只想文件...
  • 链接两种,一种被称为硬链接(HardLink),另一种被称为符号链接(SymbolicLink,也叫做软链接)。默认情况下,ln命令产生硬链接。(一)硬链接1.产生硬链接的语法#ln源文件目标文件(注意:不能为目录创建硬链接...
  • 今天和大家介绍下这两种链接,以及如何去使用他们。硬链接首先我们来看硬链接,我们来用php中变量引用来对比吧。$a = 100;$b = &$a;可以将$a看做是一个文件,而$b看出是$a文件的硬链接。现在作用是,不管是$...
  • Linux系统中链接文件分为硬链接和软连接两种,其中硬链接是指通过索引节点来进行链接,在系统中多个文件各指向同一个索引节点,这种方式可以防止误删重要数据;而软链接也称为符号链接,实际上是一个存储着指向...
  • Linux链接文件

    2017-11-02 07:23:35
    链接文件分为两种:硬链接(hard link)和软连接(symbolic link),两种链接的本质区别关键点在于inode。 inode解释 inode包含文件元信息,具体来说有以下内容: 文件字节数; 文件拥有这user ID; 文件...
  • Linux文件的链接

    千次阅读 多人点赞 2016-12-30 10:37:48
    重点内容: 文件的链接Linux文件的链接分为两种: 软连接 和 硬链接;在Linudx下使用 ls -l 命令即可看到文件的很多信息,其中第一列第一个字符代表就是文件的类型;而下面紧跟数字代表文件的连接数;比如: ...
  • 查看linux中硬链接的所有文件

    千次阅读 2019-04-17 15:45:31
    linux中,链接文件分为硬链接和软链接文件两种, 其中硬链接通过ln source_file dist_file建立, 软链接通过ln -s source_file dist_file建立。 软硬链接区别:硬链接相当于一个文件两个名称,而软链接相当于...
  • 博客搬家了,最近同时更新,没准什么时候就完全搬走了-_- http://blog.just66.cn0X00 什么是链接文件Linux...Linux中有两种链接文件硬链接和软连接也称为符号链接 在介绍链接文件之前先要介绍一下Linux文件系统

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,045
精华内容 818
关键字:

linux的两种链接文件

linux 订阅