首页 > 其他分享 >硬链接和软连接

硬链接和软连接

时间:2024-01-24 12:55:06浏览次数:26  
标签:ln passwd 连接 etc fishman root 链接

1、硬链接

硬连接指通过索引节点号来进行连接。

inode是可以对应多个文件名的在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。

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

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

原因:因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

常用语法

ln [options] <源文件> <目标文件>

常用参数

-s:创建符号链接而不是硬链接。
-f:强制执行,如果目标文件存在,则覆盖它。
-v:显示详细信息,显示创建链接的过程。

 

例:硬链接passwd,查看stat,Inode相同

[root@fishman-160 ~]# ln passwd passwd1   #ln会创建新的项目名,该文件名具有与原始文件相同的Inode指针,因此多个硬链接文件名指向同一个文件的内容
[root@fishman-160 ~]# stat passwd passwd1  #
  File: passwd
  Size: 2580        Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67188823    Links: 2   
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-13 15:36:08.878272537 +0800
Modify: 2023-07-11 14:02:15.269594390 +0800
Change: 2023-08-01 16:10:12.196548458 +0800
 Birth: 2023-07-11 14:02:15.269594390 +0800
  File: passwd1
  Size: 2580        Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67188823    Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-07-13 15:36:08.878272537 +0800
Modify: 2023-07-11 14:02:15.269594390 +0800
Change: 2023-08-01 16:10:12.196548458 +0800
 Birth: 2023-07-11 14:02:15.269594390 +0800
​

硬链接不能对目录

[root@fishman-160 ~]# ln /etc/ /test
ln: /etc/: hard link not allowed for directory

硬链接不能跨文件系统

[root@fishman-160 ~]# ln passwd1 /raid0/2.txt
ln: failed to create hard link '/raid0/2.txt' => 'passwd1': Invalid cross-device link

2、软链接(符号链接)

ln -s <源文件或目录> <符号链接文件名>

常用的选项:

-s:创建符号链接而不是硬链接。
-f:强制执行,如果目标文件存在,则覆盖它。
-v:显示详细信息,显示创建链接的过程。

例:创建/etc/passwd的符号链接

[root@fishman-160 ~]# ln -s /etc/passwd passwd3
[root@fishman-160 ~]# ls -l passwd3
lrwxrwxrwx 1 root root 11 Aug  1 16:28 passwd3 -> /etc/passwd

删除软链接对象后,会有显著提示

1690878575558

复制备份文件后软链接恢复

root@fishman-160 ~]# cp /etc/passwd- /etc/passwd
[root@fishman-160 ~]# ls -l passwd3
lrwxrwxrwx 1 root root 11 Aug  1 16:28 passwd3 -> /etc/passwd
[root@fishman-160 ~]# ls -i passwd3 /etc/passwd #观察软链接文件的Inode 和源文件Inode,不相同
36711421 /etc/passwd  67188110 passwd3

不能写相对路径,需要写完整路径

1690878953955

总结:

硬链接和符号链接的相同点:

都可以修改原文件:硬链接是在inode层面上去修改inode记录的数据区块,修改其中一个硬连接文件则所有文件都会被同步修改;符号链接作为“快捷方式”修改的是它所存放的链接并通过链接打开的原文件

硬链接和符号链接的不同点 :

建立链接之后再删除原文件则符号链接失效,但是硬链接不会失效:符号链接失效的原理与“快捷方式”相同,硬链接不失效是因为已经建立了inode到数据区块的链接;

读取权限不同:硬链接的权限和原文件的权限相同,符号链接的权限是777(rwxrwxrwx);

文件类型不同:硬链接是普通文件(-),符号链接是链接文件(l)

占用空间不同:硬链接不需要额外存储数据和inode结构,但需要额外存储目录项。分配目录项时可能造成多种目录结构甚至全局结构的变化,也是需要额外更多的空间。软链接有为其目录项分配的空间,有其inode结构占用的空间,还有其扩展属性和额外的存储数据的空间。

1700548090145

标签:ln,passwd,连接,etc,fishman,root,链接
From: https://www.cnblogs.com/kcloveworld/p/17984422

相关文章

  • 服务器上mysql安装 ,以及客户端Navicat连接
    1.官网下载mysql8.0https://dev.mysql.com/downloads/installer/ 2.安装mysql8.0参考https://blog.csdn.net/weixin_47406082/article/details/131867849?ops_request_misc=&request_id=&biz_id=102&utm_term=mysql%E6%9C%80%E6%96%B0%E7%89%88%E5%AE%89%E8%A3%85%E......
  • 突然连不上Github或者连接超时的解决办法
    问题描述当进行仓库pull或者push时,报错如下(连接失败/被拒绝/超时等):Failedtoconnecttogithub.comport443:Connectionrefused解决方法如下:方法一:关闭代理一开始查找解决方法以为是开梯子或者其他代理工具等原因,然后就试了重置代理或者取消代理的方式gitconfig--global-......
  • 升级openssh后出现xshell、CRT等工具无法连接问题
    描述:某工程在进行ssh漏洞修复过程中升级openssh后输入用户名密码被拒绝(如下图)通过带外重定向到操作系统发现日志出现PAMunabletodlopen和 PAMaddingfaultymodule的报错经排查发现是ssh rpm包升级后会修改/etc/pam.d/sshd文件(如下图)和其他服务器对比,正常可登录的/etc......
  • Oracle 21c-PL/SQL连接远程数据库的方式
    1、方式一:使用’IP:端口‘直接链接2、方式二:配置Oracle数据库连接器(1)打开NetManager(2)配置Oracle数据库服务器信息(3)打开PL/SQL,输入用户名、密码;数据库输入框输入'(2)中第4页配置的服务名'即可......
  • Microsoft 365 开发:开发者如何使用App ID连接Graph API的方法汇总
    51CTOBlog地址:https://blog.51cto.com/u_13969817在上文中我们介绍了如何在AzureAD中注册Application并授权相关GraphAPI,本文将给大家介绍开发者如何使用AppID和Certificate(Secret)通过PowerShell连接GraphAPI?采用AppID和Certificate通过PowerShell连接GraphAPI的命令如下所......
  • SecureCRT、putty等远程工具连接openkylin
    一、配置服务器root@sky9890:~#apt-getinstallssh#安装root@sky9890:~#systemctlrestartsshroot@sky9890:~#vi/etc/ssh/ssh_config#配置......Port22#启用端口号,并可以修改端口数......二、问题描述SecureCRT、putty等远程工具连接openkylin报......
  • [转]Linux下的lds链接脚本详解
    [转]Linux下的lds链接脚本详解转载WZM35588622016-12-0611:40:20文章标签QT文章分类运维阅读数2546 [转]Linux下的lds链接脚本详解转载自: http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml  一、概论每一个链接过程都由链接......
  • EMQX配置用户名和密码开启emqx_auth_mnesia认证方式连接
    1、找到MQtt的/etc/plugins/文件夹下的emqx_auth_mnesia.conf文件 vim打开编辑该文件,根据例子添加账号密码并保存 添加内容:auth.user.1.username=adminauth.user.1.password=123456 2、配置禁止匿名登录(安全认证)找到emqx.conf编辑##Allowanonymousaut......
  • Git远程链接仓库命令
    1)查看仓库已配置的远程源>:gitremote>:gitremote-v 2)查看remote命令帮助文档>:gitremote-h 3)删除远程源>:gitremoteremove源名eg:gitremoteremoveorigin 4)添加远程源>:gitremoteadd源名源地址>:gitremoteaddorginhttps://gitee.......
  • arm lds链接脚本的解释
    SECTIONS{.text0×1000:{*(.text)_etext=.;}.mdata0×2000:AT(ADDR(.text)+SIZEOF(.text)){_data=.;*(.data);_edata=.;}.bss0×3000:{_bstart=.;*(.bss)*(COMMON);_bend=.;}}  这段链接脚本是一个简单的Li......