正点原子嵌入式Linux学习-13-连接文件

硬连接

通过inode产生新文件名,inode是记录文件属性的,一个文件一个inode。
硬连接的关键就是:多个文件指向同一个inode

符号连接/软连接

  • 类似于windows下的快捷方式(.lnk文件)
    在这里插入图片描述
  • 软连接是通过连接文件打开目标文件
  • 可以跨文件系统
  • 删除目标文件,则连接文件无法打开

创建连接文件

连接命令说明

ln --help
用法:ln [选项]... [-T] 目标 链接名	(第一种格式)
 或:ln [选项]... 目标		(第二种格式)
 或:ln [选项]... 目标... 目录	(第三种格式)
 或:ln [选项]... -t 目录 目标...	(第四种格式)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist.  Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.

必选参数对长短选项同时适用。
      --backup[=CONTROL]	为每个已存在的目标文件创建备份文件
  -b				类似--backup,但不接受任何参数
  -d, -F, --directory		创建指向目录的硬链接(只适用于超级用户)
  -f, --force			强行删除任何已存在的目标文件
  -i, --interactive           prompt whether to remove destinations
  -L, --logical               dereference TARGETs that are symbolic links
  -n, --no-dereference        treat LINK_NAME as a normal file if
                                it is a symbolic link to a directory
  -P, --physical              make hard links directly to symbolic links
  -r, --relative              create symbolic links relative to link location
  -s, --symbolic              make symbolic links instead of hard links
  -S, --suffix=SUFFIX         override the usual backup suffix
  -t, --target-directory=DIRECTORY  specify the DIRECTORY in which to create
                                the links
  -T, --no-target-directory   treat LINK_NAME as a normal file always
  -v, --verbose               print name of each linked file
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

其中需要重点关注的两个是-s(创建软连接,默认创建硬连接)和-f(强制创建连接文件,会删除掉目标文件)


创建硬连接

vi hello.c
gcc -o hello hello.c
ln hello hello1
ln hello hello2         #创建硬连接
ll -i hello*            # -i 表示输出inode

在这里插入图片描述
可以看到硬连接生成的文件对应的是相同的inode


  • 删除硬连接的目标文件后,之前创建的硬连接文件依然可以使用,类似文件复制的亚子,
    在这里插入图片描述

  • 修改inode相同的文件(硬连接创建的文件)中的任何一个,其他的文件也会发生相同改变,可以给文件创建硬连接,防止文件被删除。
 ln hello.c hello1.c
 ln hello.c hello2.c
 ll -i
 vi hello.c       # add printf("make some changes");
 vi hello1.c

在这里插入图片描述


  • 硬连接不可以跨文件系统
  • 硬连接不可以连接到目录

创建软连接

ln -s hello hello2

在这里插入图片描述


  • 软连接需要使用绝对路径,这样不会使得连接文件拷贝到其他地方(直接使用cp命令,不加-d)时,连接文件就变成和目标文件相同的文件
    在这里插入图片描述
    注意这个地方hello2是的颜色,表明hello2是一个连接文件。
    在这里插入图片描述
    同时inode号发生改变
  • 使用cp -d来保持连接文件和目标文件的link关系时,此时连接文件被拷贝到其他地方,在当下目录中找不到目标文件,在创建软连接时使用绝对路径可以解决该问题。
    在这里插入图片描述
    现在hello2变红,说明无法访问到目标文件
    在这里插入图片描述
ln -s /home/python/Linux/hello hello1

在这里插入图片描述


参考正点原子Linux教程:https://www.yuanzige.com/course/detail/50089

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值